Line 17: |
Line 17: |
| | 1 || 9-0 || Total word count (in u32's). | | | 1 || 9-0 || Total word count (in u32's). |
| |- | | |- |
− | | 1 || 13-10 || Flags for buf C descriptor. Value 1 = write output data into cmdreply(separate from raw-data). If set to 2, enable buf C descriptor. | + | | 1 || 13-10 || Flags for buf C descriptor. |
| |- | | |- |
| | 1 || 31 || Enable handle descriptor. | | | 1 || 31 || Enable handle descriptor. |
Line 55: |
Line 55: |
| |} | | |} |
| | | |
− | === Buffer descriptor A/B === | + | === Buffer descriptor X "Pointer" === |
| + | This one is packed even worse than A, they inserted the bit38-36 of the address ''on top'' of the counter field. |
| + | |
| + | Officially, the counter is known as "receive index". This one writes to the buffer described in the ReceiveList. |
| + | |
| + | {| class="wikitable" border="1" |
| + | ! Word || Bits || Description |
| + | |- |
| + | | 0 || 5-0 || Bits 5-0 of counter. |
| + | |- |
| + | | 0 || 8-6 || Bit 38-36 of address. |
| + | |- |
| + | | 0 || 11-9 || Bits 11-9 of counter. |
| + | |- |
| + | | 0 || 15-12 || Bit 35-32 of address. |
| + | |- |
| + | | 0 || 31-16 || Size |
| + | |- |
| + | | 1 || || Lower 32-bits of address. |
| + | |} |
| + | |
| + | === Buffer descriptor A/B/W "Send"/"Receive"/"Exchange" === |
| This packing is so unnecessarily complex. | | This packing is so unnecessarily complex. |
| | | |
Line 74: |
Line 95: |
| |} | | |} |
| | | |
− | === Buffer descriptor C === | + | === Buffer descriptor C "ReceiveList" === |
| + | There's a 4-bit flag in the main header controlling the behavior of C descriptors. |
| + | |
| + | If it has value 0, the C descriptor functionality is disabled. If it has value 1, there is no C descriptor. If it has value 2, there is a single C descriptor. |
| + | |
| + | Otherwise it has (flag-2) C descriptors. |
| + | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| ! Word || Bits || Description | | ! Word || Bits || Description |
Line 83: |
Line 110: |
| |- | | |- |
| | 1 || 31-16 || Size | | | 1 || 31-16 || Size |
− | |}
| |
− |
| |
− | Ignored by kernel unless the cmdreply has bufX-descriptor enabled? Probably copies the data from the cmdreply bufX to this bufC?
| |
− |
| |
− | === Buffer descriptor X ===
| |
− | This one is packed even worse than A, they inserted the bit38-36 of the address ''on top'' of the counter field.
| |
− |
| |
− | {| class="wikitable" border="1"
| |
− | ! Word || Bits || Description
| |
− | |-
| |
− | | 0 || 5-0 || Bits 5-0 of counter.
| |
− | |-
| |
− | | 0 || 8-6 || Bit 38-36 of address.
| |
− | |-
| |
− | | 0 || 11-9 || Bits 11-9 of counter.
| |
− | |-
| |
− | | 0 || 15-12 || Bit 35-32 of address.
| |
− | |-
| |
− | | 0 || 31-16 || Size
| |
− | |-
| |
− | | 1 || || Lower 32-bits of address.
| |
| |} | | |} |
| | | |