Intel
®
81341 and 81342 I/O Processors
December 2007
Developer’s Manual
Order Number: 315037-002US
507
Application DMA Unit—Intel
®
81341 and 81342
5.8.1.1
Chaining of CRC Calculation Across Multiple Descriptors
Using the CRC Address (Word 2 of the descriptor) and the CRC Seed Fetch Disable (bit
11 of the DC), the CRC calculation can be chained across multiple descriptors. Since the
CRC-32C is associated with an iSCSI PDU (Protocol Data Unit), this may be necessary
as the network packet data associated with a particular PDU can be presented as
multiple, non-contiguous fragments in the local memory. For example,
illustrates the use of three descriptors to complete a CRC-32C calculation for
a PDU that has three fragments.
Note:
The set of descriptors used to complete a multiple descriptor CRC operation is required
to be in the descriptor chain in the correct data order for the CRC-32C to calculated
properly. However, in the same descriptor chain, there may be intervening non-CRC
enabled descriptors or CRC enabled descriptors associated with another PDU (e.g., CRC
Address is different). For example, Descriptor 3 in
Table 310. Multiple Descriptor Usage for CRC Calculation of a 3 Fragment PDU
Order of
Descriptors in
Chain
CRC
Enable
(bit 9 of
DC)
CRC Seed
Fetch
Disable
(bit 11 of
DC)
a
a. When CRC Seed Fetch Disable is cleared, the 32-bit value at CRC Address is loaded into the CRC Internal
Register. When CRC Seed Fetch Disable is set, the inverted and bit-wise (per byte) transposed value at CRC
Address is loaded into the CRC Internal Register. Please see
Figure 70, “Calculation of 32-bit CRC for iSCSI
.
Initial
Value at
CRC
Address
Final Value
at CRC
Address
Comments
1
1
0
FFFF FFFFh
CRC for
Fragment 1
b
b. When the initial byte count (Descriptor word 3) equals 0, then there would be no affect on the CRC and the
Final Value at CRC Address would still be FFFF_FFFFh.
First Fragment Seeds the
CRC Calculation with
Value in Memory
2
1
1
CRC for
Fragment 1
CRC for
Fragment 2
Second Fragment
Descriptor uses CRC
Value of First Fragment
in Memory to continue
the operation
3
0
x
Not
Applicable
Not Applicable non-CRC Enabled
Descriptor
4
1
1
CRC for
Fragment 2
Final CRC for
3 Fragment
PDU
Third Fragment
Descriptor uses CRC
Value of Second
Fragment in Memory to
complete the operation