cs8900網絡卡驅動簡要解析 7

2021-04-18 18:18:40 字數 1691 閱讀 5475

上一次講的cs8900_receive函式是在中斷處理函式中呼叫的,也就是當中斷到來,如果判斷出是資料接收情況,則通過這個函式進行資料接收。那麼如果中斷是由於其他事件觸發的呢,當然就需要其他**了,不過那些**並不難,大家自己看就是了。

中斷的內容講完後,cs8900_start函式也算告一段落,我們回到最初的cs8900_init函式中。在cs8900_start之後的就是cs8900_stop了:

ndev->stop               = cs8900_stop;

這個函式基本上是open的反操作:關閉網絡卡、釋放中斷、停止佇列。

所以為乙個網絡卡寫驅動,主要是讀懂它的手冊,這樣你才知道哪個暫存器做什麼,它的工作方式等。留乙個作業吧,結合手冊和下面**,理解cs8900網絡卡的關閉方式:

cs8900_write (dev,pp_busctl,0);

cs8900_write (dev,pp_testctl,0);

cs8900_write (dev,pp_selfctl,0);

cs8900_write (dev,pp_linectl,0);

cs8900_write (dev,pp_bufcfg,0);

cs8900_write (dev,pp_txcfg,0);

cs8900_write (dev,pp_rxctl,0);

cs8900_write (dev,pp_rxcfg,0);

釋放中斷和申請中斷又是一對,只管呼叫就是了:

free_irq (dev->irq,dev);

還記得在cs8900_start函式中呼叫了netif_start_queue嗎?那麼在關閉網絡卡後呼叫netif_stop_queue 就是了。

如果按**順序講,該介紹cs8900_send_start了,不過這個函式比較重要,我們放在下一節單獨介紹。我們先看它後面的**:

ndev->get_stats             = cs8900_get_stats;

ndev->set_multicast_list        = cs8900_set_receive_mode;

ndev->tx_timeout         = cs8900_tran**it_timeout;

我們的cs8900網絡卡只實現了這些函式。根據網絡卡的不同,你可能需要自己完成更多的函式。不過就get_stats、set_multicast_list和tx_timeout來說,它們完成的任務是相同的,分別是獲取統計資訊、處理多播網包、超時處理。

先看一下cs8900是如何獲取統計資訊的:

static struct net_device_stats *cs8900_get_stats (struct net_device *dev)

stats是乙個net_device_stats結構,其實說簡單點,你只要返回stats結構就可以了,它裡面記錄了你需要的資訊。net_device_stats結構在netdevice.h檔案中。

struct net_device_stats;

cs8900_get_stats這個函式雖然簡單,但是很實用。

cs8900_set_receive_mode函式設定網絡卡模式,需要配合手冊來閱讀。出現的新函式(cs8900_set和cs8900_clear)實際上就是cs8900_write,就是通過與(&)或(|)運算,實用set和clear字樣,會使函式非常易讀。

一句話總結:對網絡卡的控制需要熟讀硬體手冊。

cs8900網絡卡驅動簡要解析 7

上一次講的cs8900 receive函式是在中斷處理函式中呼叫的,也就是當中斷到來,如果判斷出是資料接收情況,則通過這個函式進行資料接收。那麼如果中斷是由於其他事件觸發的呢,當然就需要其他 了,不過那些 並不難,大家自己看就是了。中斷的內容講完後,cs8900 start函式也算告一段落,我們回到...

cs8900網絡卡驅動簡要解析 4

我們最初分析的函式是 cs8900 init 並由此展開,跟蹤到了 cs8900 probe cs8900 read cs8900 write 等,現在收回來,還是回到 cs8900 init中。在 cs8900 init 裡找到如下一行 ndev open cs8900 start 如果你之前了解...

cs8900網絡卡驅動簡要解析 1

和所有其他模組一樣,函式init module是cs8900的入口 module init cs8900 init module exit cs8900 cleanup cs8900 init函式填充net device結構體。net device是網路驅動中最為重要的乙個結構,需要認真閱讀,其原型...