
82
Functional Operation
Chapter 3
AMD-8111 HyperTransport I/O Hub Data Sheet
24674
Rev. 3.00
April 2003
AMD Preliminary Information
DMU finds that the OWN bit of the next descriptor in the internal descriptor cache is 0, it must access
the host system memory again to read in another block of descriptors.
3.10.2.6
Transmit Polling
After the host CPU has filled one or more buffers with data to be transmitted and has set the OWN
bits of the descriptors that correspond to these buffers, it starts the transmit process by setting the
Transmit Demand (TDMDx) bit in CMD0 that corresponds to the appropriate descriptor ring. (The
“x” in TDMDx is the number of the descriptor ring.) Setting TDMDx causes the DMU to poll
transmit descriptor ring number x if it does not already own a descriptor in that ring.
Responding to the TDMDx bit, the DMU begins the process of reading descriptors, checking OWN
bits, retrieving buffer addresses, and copying frame data from transmit buffers to the transmit FIFO.
After the controller has finished copying the data from the buffer, it writes to system memory to clear
the descriptor’s OWN bit. It then polls the next descriptor in the ring. When the DMU encounters a
descriptor whose OWN bit is not set, it stops polling and waits for the host CPU to set a TDMDx bit
again.
If the DMU encounters a descriptor whose OWN bit is set, but whose Start of Packet (STP) bit is not
set, the controller immediately requests the bus in order to clear the OWN bit of this descriptor. After
resetting the OWN bit of this descriptor, the controller immediately polls the next descriptor in the
ring.
Similarly, when the DMU encounters a descriptor whose OWN bit is set, but whose byte count field is
0, it also clears the descriptor’s OWN bit and then polls the next descriptor in the ring.
The network controller returns ownership of transmit descriptors to the software when the DMA
transfer of data from system memory to the controller's internal FIFO is complete. This is different
from older devices in the PCnet family, which do not return the last transmit descriptor of a frame (the
one with ENP=1) until transmission of the frame is complete. This controller does not return any
status information in the transmit descriptor, it only writes to the OWN bit to clear it.
If underflow occurs due to delays in setting the OWN bits or excessive bus latency, the transmitter
appends an inverted FCS field to the frame and increments the XmtUnderrunPkts counter. The frame
may be retransmitted (if the REX_UFLO bit in CMD2 is set) or discarded.
If an error occurs in the transmission that causes the frame to be discarded (late collision, underflow
or retry failure with the corresponding retry or retransmit option not enabled) before the entire frame
has been transferred or if the current transmit descriptor has its KILL bit set, and if current transmit
descriptor does not have its ENP bit set, the controller skips over the rest of the frame that
experienced the error. The controller clears the OWN bit for all descriptors with OWN = 1 and STP =
0 and continues in like manner until a descriptor with OWN = 0 (no more transmit frames in the ring)
or OWN = 1 and STP = 1 (the first buffer of a new frame) is reached.
At the end of any transmit operation, whether successful or with errors, the controller always
performs another polling operation, unless the next transmit descriptor is already known to be owned.