User Manual
BCM1250/BCM1125/BCM1125H
10/21/02
B r o a d c o m C o r p o r a t i o n
Document
1250_1125-UM100CB-R
Section 7: DMA Page
183
if the checksum were appended in this descriptor it would be put on the end of the buffer after the CRC
(software could do this and pick the final checksum from there). In the example this is solved using the
observation that adding zeros does not change the checksum. In the example a final descriptor is used to add
2 zeros to the checksum (i.e. a 16-bit halfword of zero) and place the final checksum into the array. The
software can combine the partial checksums from the array with the header checksums when it computes the
headers prior to transmitting the packets. This example could be modified to a more extreme form in a similar
manner to example 2: if the header buffers were prepared by software before the data mover were started then
rather than having the TCP checksums written to an array the Append CS would be removed from the second
and third descriptors, and additional descriptors inserted after the second and third and to replace the final one.
These descriptors would have the CRC disabled and would add and append the TCP sum in the same way as
the third descriptor in example 2. With appropriate setup of the MAC DMA ring moving a single doubleword to
the MAC DMA count register would allow the packets to be scheduled for transmission.
Figure 35: Example 3 - Fragmenting an iSCSI packet
iSCSI Data
Src
Enable CS
Dst
Reset CS
Prefetch
Src
Dst
Prefetch
Src
Enable CS
Dst
Append CS
Prefetch
Len=iSCSIHdr
Len=Frag1-
Len=Frag2
iSCSI
Hdr
iData
CRC
iHdr
CRC
Enable CRC
Reset CRC
Enable CS
Enable CRC
Reset CRC
Append CRC
Append CS
Reset CS
Enable CRC
Enable CS
Append CRC
Prefetch
Reset CS
Enable CRC
Src
Dst
Len=Frag3
Append CS
Prefetch
Enable CS
Zero
Src
Dst
Len=2
iSCSIHdr
Partial TCP checksum array