Differences

This shows you the differences between two versions of the page.

Link to this comparison view

dev:netdriverapi [2007/08/18 14:37]
mdc created
dev:netdriverapi [2007/08/18 14:43]
mdc Initial formatting
Line 1: Line 1:
-net_device::​open ( struct net_device *netdev ) 
-  
-Here MAC address is programmed over the device (NIC). Then receive buffer for the device is created ​ 
-and its memory is released in net_device::​close(). This address for the ring buffer is transfer to the NIC’s ​ 
-register. This is the place where configuration of the device is also done like enable transmission, ​ 
-receive. Other parameters like burst rate, transfer threshold, reception of broadcast and multicast is  
-also set here.  
-  
-  
-net_device::​close ( struct net_device *netdev )  ​ 
- 
-The crucial task here is to reset the device (may use a command available with the hardware), to free  
-the memory allocated for the Receive ring buffer in net_device:​open() and to stop any pending ​ 
-transmission. ​ 
-  
-net_device::​transmit ( struct net_device *netdev, struct io_buffer *iobuf );  
-  
-Initiate transmission of the packet, i.e. add packet to the card's TX  
-queue. ​ Don't wait for transmission to complete; the completion will be  
-picked up by a later call to net_device::​poll(). ​ Takes ownership of the  
-I/O buffer; the buffer will be freed when the TX completion occurs. ​ 
-  
-Some cards have alignment or padding requirements;​ iob_pad() can generally ​ 
-be used to satisfy these. ​ 
-  
-  
-net_device::​poll ( struct net_device *netdev, unsigned int rx_quota )  
- 
-The poll function is called periodically to check for any received packets and also to check that packets ​ 
-which were marked for transmission have been transmitted successfully or not. In some NIC’s like  
-rtl8139, whenever a data is successfully transmitted Transmit OK bit is set in the Interrupt Status ​ 
-Register. And if ISR is enabled it will be called. However in our case as we are using polling so one needs  
-to reset it every time, before we can again start transmitting. ​   
-When a packet is successfully transmitted,​ it is removed from the Transmission queue here in poll ().  ​ 
-Remember to use netdev_tx_complete to free the transmit iobuf  ​ 
-In each call to poll(), receive buffer is checked. If it is non empty then memory is allocated for the length ​ 
-of received packet and is copied from the received buffer of driver to network device’s receive queue. ​ 
-Here one is not concerned with releasing the memory allocated to received packet. ​ 
- 
-net_device::​probe ( struct pci_device *pci, const struct pci_device_id *id  
-__unused )  
- 
-Here actual device probe is not done. It is done by pci::​pci_probe(),​ which looks for the correct driver for  
-this device found. If found, then net_device::​probe() of that driver is called. ​ 
-In this probe one needs to ensure that NIC if has busmaster mode capability then it should be enabled, if  
-by any chance BIOS was not able to do it. pci::​adjust_pci_device() can do this work. Other work to be  
-done here includes allocating memory for net_device. Information required from PCI configuration block  
-like I/O address (ioaddr) and device information (dev) are copied from pci_device to net_device object.  ​ 
-Once all allocation is done, the device is reset and EEPROM is initialized and MAC address is read from  
-the EEPROM. ​ 
-Function alias are created (open,​close,​transmit,​poll) ​ to  NIC specific routines. ​   ​ 
-Lastly we need to register Network device and non-volatile storage (EEPROM) which can be done using  
-register_netdev and nvo_register. ​ 
-  
-  
  

Navigation

* [[:start|Home]] * [[:about|About our Project]] * [[:download|Download]] * [[:screenshots|Screenshots]] * Documentation * [[:howtos|HowTo Guides]] * [[:appnotes|Application Notes]] * [[:faq:|FAQs]] * [[:doc|General Doc]] * [[:talks|Videos, Talks, and Papers]] * [[:hardwareissues|Hardware Issues]] * [[:mailinglists|Mailing lists]] * [[http://support.etherboot.org/|Bugtracker]] * [[:contributing|Contributing]] * [[:editing_permission|Wiki Edit Permission]] * [[:wiki:syntax|Wiki Syntax]] * [[:contact|Contact]] * [[:relatedlinks|Related Links]] * [[:commerciallinks|Commercial Links]] * [[:acknowledgements|Acknowledgements]] * [[:logos|Logo Art]]

QR Code
QR Code dev:netdriverapi (generated for current page)