AMD
D-4
Am79C965
LAPP Software Requirements
Software needs to set up a receive ring with descriptors
formed into groups of 3. The first descriptor
of each
group should have OWN = 1 and STP = 1, the second
descriptor
of each group should have OWN = 1 and STP
= 0. The third descriptor
of each group should have
OWN = 0 and STP = 0. The size of the first buffer (as
indicated in the first descriptor), should be
at least equal
to the largest expected header size; However, for maxi-
mum efficiency of CPU utilization, the first buffer size
should be larger than the header size. It should be equal
to the expected number of message bytes, minus the
time needed for Interrupt latency and minus the applica-
tion call latency, minus the time needed for the driver to
write to the third descriptor, minus the time needed for
the driver to copy data from buffer #1 to the application
buffer space, and minus the time needed for the driver to
copy data from buffer #2 to the application buffer space.
Note that the time needed for the copies performed by
the driver depends upon the sizes of the 2nd and 3rd
buffers, and that the sizes of the second and third buff-
ers need to be set accoring to the time needed for the
data copy operations! This means that an iterative self–
adjusting mechanism needs to be placed into the soft-
ware to determine the correct buffer sizing for optimal
operation. Fixed values for buffer sizes may be used; In
such a case, the LAPP method will still provide a signifi-
cant performance increase, but the performance in-
crease will not be maximized.
The following diagram illustrates this setup for a receive
ring size of 9:
LAPP Rules for Parsing of Descriptors
When using the LAPP method, software must use a
modified form of descriptor
parsing as follows:
Software will examine OWN and STP to determine
where a RCV frame begins. RCV frames will only begin
in buffers that have OWN = 0 and STP = 1.
Software shall assume that a frame continues until it
finds
either ENP = 1 or ERR= 1.
Software must discard all descriptors with OWN = 0 and
STP = 0 and move to the next descriptor when searching
for the beginning of a new frame; ENP and ERR should
be ignored by software during this search.
Software cannot change an STP value in the receive
descriptor ring after the initial setup of the ring is com-
plete, even if software has ownership of the STP de-
scriptor
unless the previous STP descriptor in the ring is
also OWNED by the software.
When LAPPEN = 1, then hardware will use a modified
form of descriptor
parsing as follows:
The controller will examine OWN and STP to determine
where to begin placing a RCV frame. A new RCV frame
will only begin in a buffer that has OWN = 1 and STP = 1.
The controller will always obey the OWN bit for deter-
mining whether or not it may use the next buffer for a
chain.
The controller will always mark the end of a frame with
either ENP = 1 or ERR= 1.
OWN = 1 STP = 1
SIZE = A-(S1+S2+S3+S4+S6)
Descriptor
#1
OWN = 1 STP = 0
SIZE = S1+S2+S3+S4
Descriptor
#2
OWN = 0 STP = 0
SIZE = S6
Descriptor
#3
OWN = 1 STP = 1
Descriptor
#4
OWN = 1
Descriptor
#5
Descriptor
#6
OWN = 1 STP = 1
Descriptor
#7
OWN = 1
Descriptor
#8
Descriptor
#9
OWN = 0 STP = 0
STP = 0
A
= Expected message size in bytes
S1 = Interrupt latency
S2 = Application call latency
S3 =Time needed for driver to write
to third descriptor
S4 = Time needed for driver to copy
data from buffer #1 to
application buffer space
S6 = Time needed for driver to copy
data from buffer #2 to
application buffer space
Note that the times needed for tasks S1,
S2, S3, S4, and S6 should be divided by
0.8 microseconds to yield an equivalent
number of network byte times before
subtracting these quantities from the
expected message size A.
SIZE = A-(S1+S2+S3+S4+S6)
SIZE = S1+S2+S3+S4
SIZE = S6
SIZE = A-(S1+S2+S3+S4+S6)
SIZE = S1+S2+S3+S4
SIZE = S6
18219B-77
Figure 2. LAPP 3 Buffer Grouping