PXI Registers: Difference between revisions

No edit summary
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
= Protocol =
The communication protocol for normal PXI commands is documented below. The size of cmd_buf is calculated from the cmd_hdr. With newer FIRM the total size for command header + buffer must be at most 0x40 words, otherwise Process9 will panic.
Each pxi_id corresponds to a Process9 PXI [[PXI_Services|command-handler]](called from threads) which handles the actual command processing. With newer FIRM the pxi_id must be in a certain range.
There's a dedicated Process9 thread for receiving data from PXI(in newer FIRM this is the main-thread), once it finishes receiving a request it copies the cmd_buf into a buffer for the corresponding pxi_id then signals an event so that the cmd-handler thread can process it. Once a cmd-handler thread finishes processing a command, the thread itself then sends the response over PXI. This means that multiple commands for different pxiIDs can be be handled at the same time, even when one cmd-handler completely hangs/etc for example.
Process9 will execute [[SVC|svcBreak]] when it receives a PXI command with a pxi_id where another cmmand with that same pxi_id is still being processed by the command-handler(this won't happen with commands sent by the ARM11 PXI-module, since it waits for the command reply before sending another command request for that same pxi_id).
==Request==
A11->A9 (u32) pxi_id
A11->A9 (u32) cmd_hdr
A11->A9 (u32[]) cmd_buf
==Response==
A9->A11 (u32) pxi_id
A9->A11 (u32) cmd_hdr
A9->A11 (u32[]) cmd_buf
==pxi_id==
0 = pxi_mc
1 = pxi_fs
2 = pxi_fs
3 = pxi_fs
4 = pxi_fs
5 = pxi_pm
6 = pxi_dev
7 = pxi_am
8 = pxi_ps
9 = stubbed
= Registers =
= Registers =
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 42: Line 11:
| 0x10008000
| 0x10008000
| 4
| 4
|
| Boot9, Process9
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| PXI_????9
| [[#PXI_CNT|PXI_CNT]]9
| 0x10008003
| 0x10008004
| 1
| 2
|
| Boot9, Process9
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| [[#PXI_CNT|PXI_CNT]]9
| PXI_SEND9
| 0x10008004
| 0x10008008
| 4
| 4
|
|
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| PXI_RECV_FIFO9
| PXI_RECV9
| 0x10008008
| 0x1000800C
| 4
| 4
|
|
Line 66: Line 35:
| 0x10163000
| 0x10163000
| 4
| 4
|
| Boot11
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| [[#PXI_CNT|PXI_CNT]]11
| [[#PXI_CNT|PXI_CNT]]11
| 0x10163004
| 0x10163004
| 4
| 2
|
| Boot11
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
Line 81: Line 50:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| PXI_RECV_11
| PXI_RECV11
| 0x1016300C
| 0x1016300C
| 4
| 4
Line 95: Line 64:
!  Description
!  Description
|-
|-
| 0-3
| 0-7
| R
| R
| Data input from PXI_SYNC Bit8-11 of remote CPU (00h..0Fh)
| Data received from remote bits 8-15 (unrelated to SEND/RECV FIFOs)
|-
| 8-11
| R/W
| Data output to PXI_SYNC Bit0-3 of remote CPU  (00h..0Fh)
|-
|-
| 13
| 8-15
| W
| Send IRQ to remote CPU      (0=None, 1=Send IRQ)
|-
| 14
| R/W
| R/W
| Enable IRQ from remote CPU  (0=Disable, 1=Enable)
| Data sent to remote bits 0-7
|-
|-
| 23
| 23
| ?
| ?
| ?
| ?
|-
| 29
| W?
| Trigger PXI_SYNC11 IRQ (if enabled)
|-
| 30
| W?
| Trigger PXI_SYNC9 IRQ (if enabled)
|-
| 31
| RW
| PXI_SYNC IRQ enable (for local processor)
|}
|}
This can also be accessed as 4 u8 registers.


== PXI_CNT ==
== PXI_CNT ==