Difference between revisions of "HIPC"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 3: Line 3:
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
! Word || Description
+
! Word || Bits || Description
 +
|-
 +
| 0 || 19-16 || Number of marshalls type X (each: 2 words).
 +
|-
 +
| 0 || 23-20 || Number of marshalls type Y (each: 3 words).
 +
|-
 +
| 0 || 27-24 || Number of marshalls type Z (each: 3 words).
 +
|-
 +
| 0 || 31-28 || Number of marshalls type W (each: 3 words)
 +
|-
 +
| 1 || 9-0 || Size of data portion in u32's.
 +
|-
 +
| 1 || 13-10 || Marshalls type T something.
 +
|-
 +
| 1 || 17-14 || Marshalls type T something.
 +
|-
 +
| 1 || 31 || Enable special descriptor.
 +
|-
 +
| ... || || Special descriptor, if enabled.
 +
|-
 +
| ... || || Type X descriptors, each one 2 words.
 +
|-
 +
| ... || || Type Y descriptors, each one 3 words.
 +
|-
 +
| ... || || Type Z 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.
 +
 
 +
{| class="wikitable" border="1"
 +
! Word || Bits || Description
 +
|-
 +
| 0 || 0 || ?
 +
|-
 +
| 0 || 4-1 || Number of A-words for this special descriptor (=x).
 
|-
 
|-
| 0 || Cmd header part 1
+
| 0 || 8-5 || Number of B-words for this special descriptor (=y).
 
|-
 
|-
| 1 || Cmd header part 2
+
| 1 || || A-words, purpose unknown.
 
|-
 
|-
| ... || Marshall descriptors
+
| x || || B-words, purpose unknown.
 
|}
 
|}
  
=== Marshall type A ===
+
=== Descriptor type A ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
! Word || Description
 
! Word || Description
Line 23: Line 60:
 
|}
 
|}
  
=== Marshall type B ===
+
=== Descriptor type B ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
! Word || Description
 
! Word || Description
Line 32: Line 69:
 
|}
 
|}
  
=== Marshall type C ===
+
=== Descriptor type C ===
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
! Word || Description
 
! Word || Description

Revision as of 14:22, 13 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).
0 23-20 Number of marshalls type Y (each: 3 words).
0 27-24 Number of marshalls type Z (each: 3 words).
0 31-28 Number of marshalls type W (each: 3 words)
1 9-0 Size of data portion in u32's.
1 13-10 Marshalls type T something.
1 17-14 Marshalls type T something.
1 31 Enable special descriptor.
... Special descriptor, if enabled.
... Type X descriptors, each one 2 words.
... Type Y descriptors, each one 3 words.
... Type Z 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.
x B-words, purpose unknown.

Descriptor type A

Word Description
0 Word1 is written here.
1 Word0 is written here.
2 Weird mix.

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.