1. 程式人生 > >linux 網路裝置驅動-DM9000

linux 網路裝置驅動-DM9000

所有的網路裝置驅動都必須有這個傳送方法。在系統呼叫驅動程式的xmit時,傳送的資料放在一個sk_buff結構中。一般的驅動把資料傳給硬體發出去。也有一些特殊的裝置比如loopback把資料組成一個接收資料再回送給系統,或者dummy裝置直接丟棄資料。如果傳送成功,hard_start_xmit方法裡釋放sk_buff,返回0(傳送成功)。如果裝置暫時無法處理,比如硬體忙,則返回1。這時如果dev->tbusy置為非0,則系統認為硬體忙,要等到dev->tbusy0以後才會再次傳送。tbusy的置0任務一般由中斷完成。硬體在傳送結束後產生中斷,這時可以把tbusy0,然後用mark_bh()
呼叫通知系統可以再次傳送。在傳送不成功的情況下,也可以不置dev->tbusy為非0,這樣系統會不斷嘗試重發。如果hard_start_xmit傳送不成功,則不要釋放sk_buff。傳送下來的sk_buff中的資料已經包含硬體需要的幀頭。所以在傳送方法裡不需要再填充硬體幀頭,資料可以直接提交給硬體傳送。sk_buff是被鎖住的(locked),確保其他程式不會存取它。