Channels are unidirectional message-passing interfaces that support 32-bit messages and commands. Many of the channels provide communications between the SPE and its MFC, which in turn, mediates communication with the PPE and other devices.
Table 1 lists the channels and their attributes. Reserved and privileged channels are omitted.
Software on the SPU uses special channel instructions (shown in Table 1) to read and write channel registers and queues.
Software on the PPE and other devices use load and store instructions to read and write to MFC's MMIO registers that are associated with the SPU's channels.
Channel | Name | Mnemonic | Size (bits) | R/W | Blocking |
---|---|---|---|---|---|
SPU Events | |||||
0 | SPU Read Event Status | SPU_RdEventStat | 32 | R | Yes |
1 | SPU Write Event Mask | SPU_WrEventMask | 32 | W | No |
2 | SPU Write Event Acknowledgment | SPU_WrEventAck | 32 | W | No |
SPU Signal Notification | |||||
3 | SPU Signal Notification 1 | SPU_RdSigNotify1 | 32 | R | Yes |
4 | SPU Signal Notification 2 | SPU_RdSigNotify2 | 32 | R | Yes |
SPU Decrementer | |||||
7 | SPU Write Decrementer | SPU_WrDec | 32 | W | No |
8 | SPU Read Decrementer | SPU_RdDec | 32 | R | No |
MFC Multisource Synchronization | |||||
9 | MFC Write Multisource Synchronization Request | MFC_WrMSSyncReq | 32 | W | Yes |
SPU and MFC Read Mask | |||||
11 | SPU Read Event Mask | SPU_RdEventMask | 32 | R | No |
12 | MFC Read Tag-Group Query Mask | MFC_RdTagMask | 32 | R | No |
SPU State Management | |||||
13 | SPU Read Machine Status | SPU_RdMachStat | 32 | R | No |
14 | SPU Write State Save-and-Restore | SPU_WrSRR0 | 32 | W | No |
15 | SPU Read State Save-and-Restore | SPU_RdSRR0 | 32 | R | No |
MFC Command Parameters | |||||
16 | MFC Local Store Address | MFC_LSA | 32 | W | No |
17 | MFC Effective Address High | MFC_EAH | 32 | W | No |
18 | MFC Effective Address Low or List Address | MFC_EAL | 32 | W | No |
19 | MFC Transfer Size or List Size | MFC_Size | 16 | W | No |
20 | MFC Command Tag Identification | MFC_TagID | 16 | W | No |
21 | MFC Command Opcode or ClassID | MFC_Cmd | 32 | W | Yes |
MFC Tag Status | |||||
22 | MFC Write Tag-Group Query Mask | MFC_WrTagMask | 32 | W | No |
23 | MFC Write Tag Status Update Request | MFC_WrTagUpdate | 32 | W | Yes |
24 | MFC Read Tag-Group Status | MFC_RdTagStat | 32 | R | Yes |
25 | MFC Read List Stall-and-Notify Tag Status | MFC_RdListStallStat | 32 | R | Yes |
26 | MFC Write List Stall-and-Notify Tag Acknowledgement | MFC_WrListStallAck | 32 | W | No |
27 | MFC Read Atomic Command Status | MFC_RdAtomicStat | 32 | R | Yes |
SPU Mailboxes | |||||
28 | SPU Write Outbound Mailbox | SPU_WrOutMbox | 32 | W | Yes |
29 | SPU Read Inbound Mailbox | SPU_RdInMbox | 32 | R | Yes |
30 | SPU Write Outbound Interrupt Mailbox | SPU_WrOutIntrMbox | 32 | W | Yes |
Each channel has a corresponding count that indicates the remaining capacity (the maximum number of outstanding transfers) in that channel. This count is decremented when a channel instruction is issued to the channel, and the count increments when an action associated with that channel completes. Each channel is implemented with either blocking or non-blocking semantics.
Blocking channels cause the SPE to stall (suspend execution in a low-power state) when the SPE reads or writes a channel with a count of zero.
Key features of the SPE channel operations include: