D-4
Am79C965A
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
maximum 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 ap-
plication 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 buffers need to be set according to the time
needed for the data copy operations! This means that
an iterative self-adjusting mechanism needs to be
placed into the software 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 significant performance increase, but
the performance increase 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.
Figure 2. LAPP 3 Buffering Grouping
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
SIZE = A-(S1+S2+S3+S4+S6)
Descriptor
#4
OWN = 1
SIZE = S1+S2+S3+S4
Descriptor
#5
Descriptor
#6
OWN = 1 STP = 1
SIZE = A-(S1+S2+S3+S4+S6)
Descriptor
#7
OWN = 1
SIZE = S1+S2+S3+S4
Descriptor
#8
Descriptor
#9
OWN = 0 STP = 0
SIZE = S6
OWN = 0 STP = 0
SIZE = S6
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.
18219-77