Line 7: |
Line 7: |
| | 0 || 15-0 || IPC version? Always 4. | | | 0 || 15-0 || IPC version? Always 4. |
| |- | | |- |
− | | 0 || 19-16 || Number of marshalls type X (each: 2 words). Type mask: 8 | + | | 0 || 19-16 || Number of buf X descriptors (each: 2 words). Type mask: 9 |
| |- | | |- |
− | | 0 || 23-20 || Number of buf descriptors (each: 3 words). Type mask: 5 | + | | 0 || 23-20 || Number of buf A descriptors (each: 3 words). Type mask: 5 |
| |- | | |- |
− | | 0 || 27-24 || Number of buf2 descriptors (each: 3 words). Type mask: 6 | + | | 0 || 27-24 || Number of buf B descriptors (each: 3 words). Type mask: 6 |
| |- | | |- |
| | 0 || 31-28 || Number of marshalls type W (each: 3 words) | | | 0 || 31-28 || Number of marshalls type W (each: 3 words) |
Line 17: |
Line 17: |
| | 1 || 9-0 || Size of data portion in u32's. | | | 1 || 9-0 || Size of data portion in u32's. |
| |- | | |- |
− | | 1 || 13-10 || ? | + | | 1 || 13-10 || If set to 2, enable buf C descriptor. Type mask: 0xA. |
| |- | | |- |
| | 1 || 31 || Enable special descriptor. | | | 1 || 31 || Enable special descriptor. |
Line 25: |
Line 25: |
| | ... || || Type X descriptors, each one 2 words. | | | ... || || Type X descriptors, each one 2 words. |
| |- | | |- |
− | | ... || || Buf descriptors, each one 3 words. | + | | ... || || Buf A descriptors, each one 3 words. |
| |- | | |- |
− | | ... || || Buf2 descriptors, each one 3 words. | + | | ... || || Buf B descriptors, each one 3 words. |
| |- | | |- |
| | ... || || Type W descriptors, each one 3 words. | | | ... || || Type W descriptors, each one 3 words. |
Line 49: |
Line 49: |
| |} | | |} |
| | | |
− | === Buf descriptor === | + | === Buffer descriptor A/B === |
− | They fucked up this one, big time.
| + | This packing is so unnecessarily complex. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 68: |
Line 68: |
| |} | | |} |
| | | |
− | === Descriptor type B === | + | === Buffer descriptor C === |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
− | ! Word || Description | + | ! Word || Bits || Description |
| |- | | |- |
− | | 0 || Lower 32-bits of addr? | + | | 0 || || Lower 32-bits of address. |
| |- | | |- |
− | | 1 || Upper 16bits: Size, Lower 16bits: Rest of addr? | + | | 1 || 15-0 || Rest of address. |
| + | |- |
| + | | 1 || 31-16 || Size |
| |} | | |} |
| | | |
− | === Descriptor type C === | + | === 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" | | {| class="wikitable" border="1" |
− | ! Word || Description | + | ! Word || Bits || Description |
| |- | | |- |
− | | 0 || Upper 16bits: Size, Lower 16: ? | + | | 0 || 5-0 || Bits 5-0 of counter. |
| |- | | |- |
− | | 1 || ? | + | | 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. |
| |} | | |} |
| | | |