HIPC: Difference between revisions
No edit summary |
|||
Line 13: | Line 13: | ||
| 0 || 27-24 || Number of buf B descriptors (each: 3 words). | | 0 || 27-24 || Number of buf B descriptors (each: 3 words). | ||
|- | |- | ||
| 0 || 31-28 || Number of | | 0 || 31-28 || Number of buf W desciptors (each: 3 words), never observed. | ||
|- | |- | ||
| 1 || 9-0 || Total word count (in u32's). | | 1 || 9-0 || Total word count (in u32's). | ||
Line 118: | Line 118: | ||
| ... || Rest of raw data. | | ... || Rest of raw data. | ||
|} | |} | ||
== Official marshalling code == | |||
The official marshalling function takes an array of (buf_ptr, size) pairs and a type-field for each such pair. | |||
Bitmask 0x10 seems to indicate null-terminated strings, but that flag is ignored by the marshalling code. | |||
== Official marshalling code == | == Official marshalling code == | ||
Line 127: | Line 132: | ||
! Type Mask || Description || Direction | ! Type Mask || Description || Direction | ||
|- | |- | ||
| 4 + 1 || Creates | | 4 + 1 || Creates a A descriptor with flags=0. || In | ||
|- | |||
| 0x40 + 4 + 1 || Creates a A descriptor with flags=1. || In | |||
|- | |||
| 0x80 + 4 + 1 || Creates a A descriptor with flags=3. || In? | |||
|- | |- | ||
| 4 + 2 || Creates a B descriptor || Out | | 4 + 2 || Creates a B descriptor with flags=0. || Out | ||
|- | |||
| 0x40 + 4 + 2 || Creates a B descriptor with flags=1. || Out | |||
|- | |||
| 0x80 + 4 + 2 || Creates a B descriptor with flags=3. || Out? | |||
|- | |- | ||
| 8 + 1 || Creates an X descriptor || | | 8 + 1 || Creates an X descriptor || | ||
|- | |- | ||
| 8 + 2 || Creates a C descriptor || Out | | 8 + 2 || Creates a C descriptor || Out | ||
|- | |||
| 0x10 + 8 + 2 || Creates a C descriptor, and writes the u16 size to an offset into raw data. || Out | |||
|- | |- | ||
| 0x20 + 1 || Creates both an A and X descriptor || | | 0x20 + 1 || Creates both an A and X descriptor || | ||
|- | |||
| 0x20 + 2 || Creates both an B and C descriptor || | |||
|} | |} | ||
For types 0x21, 0x22 if size doesn't fit in u16, it's added to a list. | |||
== Official IPC Cmd Structure == | == Official IPC Cmd Structure == | ||
Line 156: | Line 176: | ||
u32 offset_a_descriptors; | u32 offset_a_descriptors; | ||
u32 offset_b_descriptors; | u32 offset_b_descriptors; | ||
u32 offset_w_descriptors; /* this is a guess */ | |||
u32 offset_raw_data; | |||
u32 offset_c_descriptors; | u32 offset_c_descriptors; | ||
u32 unk2; | u32 unk2; | ||
u32 unk3; | u32 unk3; | ||
} | } |