作者rz600000 (suedeN    )
看板LinuxDev
标题Re: [问题] 请问net device driver的小问题 烦请帮忙
时间Wed Jan 9 23:55:55 2008
在 rtl8139_init中
有这几行
dev->open = rtl8139_open;
dev->hard_start_xmit = rtl8139_start_xmit;
dev->poll = rtl8139_poll;
dev->weight = 64;
dev->stop = rtl8139_close;
dev->get_stats = rtl8139_get_stats;
dev->set_multicast_list = rtl8139_set_rx_mode;
dev->do_ioctl = netdev_ioctl;
dev->ethtool_ops = &rtl8139_ethtool_ops;
dev->tx_timeout = rtl8139_tx_timeout;
dev->watchdog_timeo = TX_TIMEOUT;
这几行是将 rtl8139自己实作出来的functions 指向给kernel
告诉kernel 当你要用 hard_start_xmit 时 你就去呼叫 rtl8139_start_xmit
但 没有一行是跟kernel说 我要收封包时应该要用哪个function 去收封包
即没有一行告诉kernel 说我该使用rtl8139_rx()这function
我知道是网卡收完封包後 才 interrupt给kernel知道说我收到封包了
但是至少也应该指出 用哪个function收封包吧..
※ 引述《rz600000 (suedeN    )》之铭言:
: 那个request irq 所注册的 interrupr service function 中
: 好像没有 您说的 有call到rtl8139_rx()
: 我知道收到packet 後 会先拆掉 mac header 然後就call netif_rx()
: 但是 在哪里 有注册 rtl8139_rx()这个东西
: :q!
: ※ 引述《Spig (Spig)》之铭言:
: : 去找 request_irq(), 他会注册一组中断函式(ISR)
: : 这个中断函式会执行 Rx 的部份, 最後用 netif_rx() 往上送
: : 简单来说
: : Tx: Kernel -> xmit() -> Hardware -> Ethernet
: : Rx: Ethernet -> Hardware -> ISR(tasklet) -> netif_rx() -> Kernel
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.117.176.182
1F:推 TroyLee:dev->poll = rtl8139_poll 01/10 04:13
2F:→ rz600000:POLL 是napi用的??? 01/10 04:15
3F:→ rz600000:我没有开启NAPI..的话呢? 01/10 04:17