cs8900網絡卡驅動簡要解析 4

2021-08-22 17:15:19 字數 1180 閱讀 1877

我們最初分析的函式是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是網路驅動中最為重要的乙個結構,需要認真閱讀,其原型...