我們最初分析的函式是cs8900_init,並由此展開,跟蹤到了cs8900_probe、cs8900_read、cs8900_write等,現在收回來,還是回到cs8900_init中。
ndev->open = cs8900_start;
如果你之前了解過字元裝置,你很容易聯想到file_operation中的open。其實它們是一樣的。open函式在網路裝置被啟用時(ifconfig)呼叫。因此,我們在編寫網絡卡驅動時,要考慮網絡卡啟用時,需要完成哪些事情。通常要進行中斷的申請、資源的申請等。在cs8900的驅動中,主要完成兩件事情:啟用網絡卡和申請中斷。啟用網絡卡的**如下:
cs8900_set (dev,pp_rxcfg,rxokie | buffercrc | crcerrorie | runtie | extradataie);
cs8900_set (dev,pp_rxctl,rxoka | individuala | broadcasta);
cs8900_set (dev,pp_txcfg,txokie | out_of_windowie | jabberie);
cs8900_set (dev,pp_bufcfg,rdy4txie | rxmissie | txunderrunie | txcolovfie | missovfloie);
cs8900_set (dev,pp_linectl,serrxon | sertxon);
cs8900_set (dev,pp_busctl,enablerq);
申請中斷的方法和以前一樣:
request_irq (dev->irq, &cs8900_interrupt, 0, dev->name, dev))
顯然,我們下乙個任務就是完成中斷處理函式了(cs8900_interrupt),我們後面再說。
static inline void netif_start_queue(struct net_device *dev)
static inline void netif_wake_queue(struct net_device *dev)
#endif
if (test_and_clear_bit(__link_state_xoff, &dev->state))
__netif_schedule(dev); }
一句話總結:我們需要實現乙個open函式,用來完成資源申請和開啟網路介面的資料佇列任務。
cs8900網絡卡驅動簡要解析 4
我們最初分析的函式是 cs8900 init 並由此展開,跟蹤到了 cs8900 probe cs8900 read cs8900 write 等,現在收回來,還是回到 cs8900 init中。在 cs8900 init 裡找到如下一行 ndev open cs8900 start 如果你之前了解...
cs8900網絡卡驅動簡要解析 7
上一次講的cs8900 receive函式是在中斷處理函式中呼叫的,也就是當中斷到來,如果判斷出是資料接收情況,則通過這個函式進行資料接收。那麼如果中斷是由於其他事件觸發的呢,當然就需要其他 了,不過那些 並不難,大家自己看就是了。中斷的內容講完後,cs8900 start函式也算告一段落,我們回到...
cs8900網絡卡驅動簡要解析 1
和所有其他模組一樣,函式init module是cs8900的入口 module init cs8900 init module exit cs8900 cleanup cs8900 init函式填充net device結構體。net device是網路驅動中最為重要的乙個結構,需要認真閱讀,其原型...