tailieunhanh - 82573L: Initializing our Pro/1000
82573L: Initializing our Pro/1000 includes Chicken-and-Egg? How ‘transmit’ works, Registers Names, Tx-Desc Ring-Buffer, Tx-Descriptor Control, Transmit Control, Tx Configuration Word, Legacy Tx-Descriptor Layout, Suggested C syntax. | 82573L Initializing our Pro/1000 Chicken-and-Egg? • We want to create a Linux Kernel Module that can serve application-programs as a character-mode device-driver for our NIC • So, as with the UART device, we will need to implement ‘read()’ and ‘write()’ methods • But which method should we do first? • No way to “test” a ‘read()’ method without having a way to send packets to our NIC How ‘transmit’ works List of Buffer-Descriptors descriptor0 descriptor1 descriptor2 descriptor3 0 0 0 0 Buffer0 Buffer1 Buffer2 We setup each data-packets that we want to be transmitted in a ‘Buffer’ area in ram We also create a list of buffer-descriptors and inform the NIC of its location and size Then, when ready, we tell the NIC to ‘Go!’ (., start transmitting), but let us know when these transmissions are ‘Done’ Buffer3 Random Access Memory Registers’ Names Memory-information registers TDBA(L/H) = Transmit-Descriptor Base-Address Low/High (64-bits) TDLEN = Transmit-Descriptor array Length TDH = Transmit-Descriptor Head TDT = Transmit-Descriptor Tail Transmit-engine control registers TXDCTL = Transmit-Descriptor Control Register TCTL = Transmit Control Register Notification timing registers TIDV = Transmit Interrupt Delay Value TADV = Transmit-interrupt Absolute Delay Value Tx-Desc Ring-Buffer 0x00 TDBA base-address 0x10 0x20 TDH (head) 0x30 TDLEN (in bytes) 0x40 0x50 0x60 TDT (tail) 0x70 0x80 = owned by hardware (nic) = owned by software (cpu) Circular buffer (128-bytes .
đang nạp các trang xem trước