
The LAN controller keeps a pointer (Registers
RTABH and RTABL) to the Receive Descriptor
table. This pointer is initialized by the driver when
the table is first built and should not need
re-initialization thereafter.
When the LAN controller’s DMA becomes active to
receive a frame, it will use RTAB as a pointer to the
first free receive buffer. RSTAT field of descriptor is
checked to see if the buffer is free (RSTAT=00). If
free, the size and starting location of the buffer are
loaded from the descriptor and rounded down to
even values. Storage of the frame into the buffer
begins. The value of RTAB is saved at the start of
reception for each frame in case the frame gets
aborted and RTAB has already been updated to the
next table entry.
While a frame is being buffered, the LAN controller
will follow the entries in the descriptor table to obtain
additional buffers as needed to receive the entire
frame. Upon completion, the descriptor for the first
buffer of that frame is written with the receiver status
register and the total byte count for that frame. The
byte count includes storage of the received FCS.
Should a partially received frame be rejected by the
LAN controller, it will reclaim the buffers by resetting
the RTAB pointer to its value previous to start of
reception of this frame.
To add free buffers to the end of the descriptor table,
fill in the first new table entry with RSTAT=non-zero,
build all other table entries with RSTAT=0, then
change the first RSTAT to 00 to indicate availability.
BUFFER STRUCTURING AND DATA MOVEMENT PROCESSES
83C795
89