Difference between revisions of "HIPC"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 7: Line 7:
 
| 0 || 19-16 || Number of marshalls type X (each: 2 words). Type mask: 8
 
| 0 || 19-16 || Number of marshalls type X (each: 2 words). Type mask: 8
 
|-
 
|-
| 0 || 23-20 || Number of inbufs (each: 3 words). Type mask: 5
+
| 0 || 23-20 || Number of buf descriptors (each: 3 words). Type mask: 5
 
|-
 
|-
| 0 || 27-24 || Number of outbufs (each: 3 words). Type mask: 6
+
| 0 || 27-24 || Number of buf2 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 25: Line 25:
 
| ... || || Type X descriptors, each one 2 words.
 
| ... || || Type X descriptors, each one 2 words.
 
|-
 
|-
| ... || || Inbuf descriptors, each one 3 words.
+
| ... || || Buf descriptors, each one 3 words.
 
|-
 
|-
| ... || || Outbuf descriptors, each one 3 words.
+
| ... || || Buf2 descriptors, each one 3 words.
 
|-
 
|-
 
| ... || || Type W descriptors, each one 3 words.
 
| ... || || Type W descriptors, each one 3 words.
Line 49: Line 49:
 
|}
 
|}
  
=== Inbuf/outbuf descriptor ===
+
=== Buf descriptor ===
 
They fucked up this one, big time.
 
They fucked up this one, big time.
  
Line 59: Line 59:
 
| 1 || || Lower 32-bits of address.
 
| 1 || || Lower 32-bits of address.
 
|-
 
|-
| 2 || 0 || Always set to 1 or 3. RW flags?
+
| 2 || 0 || Always set to 1 or 3. R/RW.
 
|-
 
|-
 
| 2 || 4-2 || Bit 38-36 of address.
 
| 2 || 4-2 || Bit 38-36 of address.

Revision as of 00:14, 14 April 2017

Marshall Portion

This is an array of u32's.

Word Bits Description
0 19-16 Number of marshalls type X (each: 2 words). Type mask: 8
0 23-20 Number of buf descriptors (each: 3 words). Type mask: 5
0 27-24 Number of buf2 descriptors (each: 3 words). Type mask: 6
0 31-28 Number of marshalls type W (each: 3 words)
1 9-0 Size of data portion in u32's.
1 13-10 Marshal type T something.
1 17-14 Marshal type T something.
1 31 Enable special descriptor.
... Special descriptor, if enabled.
... Type X descriptors, each one 2 words.
... Buf descriptors, each one 3 words.
... Buf2 descriptors, each one 3 words.
... Type W descriptors, each one 3 words.

Special descriptor

There can only be one of this descriptor type. It is enabled by bit31 of the second word.

Word Bits Description
0 0 ?
0 4-1 Number of A-words for this special descriptor (=x).
0 8-5 Number of B-words for this special descriptor (=y).
1 A-words, purpose unknown.
1+x B-words, purpose unknown.

Buf descriptor

They fucked up this one, big time.

Word Bits Description
0 Lower 32-bits of size.
1 Lower 32-bits of address.
2 0 Always set to 1 or 3. R/RW.
2 4-2 Bit 38-36 of address.
2 27-24 Bit 35-32 of size.
2 31-28 Bit 35-32 of address.

Descriptor type B

Word Description
0 Lower 32-bits of addr?
1 Upper 16bits: Size, Lower 16bits: Rest of addr?

Descriptor type C

Word Description
0 Upper 16bits: Size, Lower 16: ?
1 ?

Data Portion

This is an array of u64's placed after the marshall header. But it's always aligned to 16 so sometimes there is padding words inserted inbetween.

Word Description
0 Magic ("SFCI")
1 Cmd id
... Non-marshalled data is placed here

Cmd header

Cmd header 1 Cmd header 2 Description
4 9 Data portion size 20.
4 10 Data portion size 24.
4 12 Data portion size 32.
4 14 Data portion size 40.
4 0x8000000C Marshall words: (u32) 1. Data portion size 32.