Difference between revisions of "IPC Marshalling"
From Nintendo Switch Brew
(→Marshall Portion) |
|||
| 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 || | + | | 0 || 8-5 || Number of B-words for this special descriptor (=y). |
|- | |- | ||
| − | | 1 || | + | | 1 || || A-words, purpose unknown. |
|- | |- | ||
| − | | | + | | x || || B-words, purpose unknown. |
|} | |} | ||
| − | === | + | === Descriptor type A === |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Word || Description | ! Word || Description | ||
| Line 23: | Line 60: | ||
|} | |} | ||
| − | === | + | === Descriptor type B === |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Word || Description | ! Word || Description | ||
| Line 32: | Line 69: | ||
|} | |} | ||
| − | === | + | === Descriptor type C === |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Word || Description | ! Word || Description | ||
Revision as of 09:22, 13 April 2017
Contents
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. |