HIPC

From Nintendo Switch Brew
Revision as of 01:03, 14 April 2017 by Qlutoo (talk | contribs)
Jump to navigation Jump to search

Marshall Portion

This is an array of u32's.

Word Bits Description
0 15-0 IPC version? Always 4.
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.
0 8-5 Number of B-words for this special descriptor.
... A-words, purpose unknown.
... 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.