Difference between revisions of "/dev/bsp/PPC"

From WiiUBrew
< /dev‎ | bsp
Jump to navigation Jump to search
(Initial documentation for BSP's PPC entity)
(No difference)

Revision as of 03:42, 9 December 2019

PPC is the /dev/bsp entity responsible for managing the PowerPC cores in the Espresso. Depending on hardware version[check], PPC either has one instance or three instances.

Attributes

Exec

Availability: This attribute is only available on the first instance (index 0).

Permissions: BSP_PERMISSIONS_IOS_SUPV only.

Method Data Size Values
Write 1 1, 2 Writing a 1 calls the hardware-specific method to stop execution of the PowerPC, while writing 2 does the same to start it.
//start the PowerPC
int8_t start = 2;
bspWrite("PPC", 0, "Exec", 1, &start);
//stop the PowerPC
int8_t stop = 1;
bspWrite("PPC", 0, "Exec", 1, &stop);

Clock

Availability: This attribute is only available on the first instance (index 0).

Permissions: BSP_PERMISSIONS_IOS_SUPV only.

Method Data Size Values
Write 1 1 Writing a 1 tweaks the legacy clock registers, toggling FX and leaving the system in 162MHz/GameCube mode. Also toggles RTSB_DSKPLL, leaving it asserted.

EXIRegBoot

Availability: This attribute is only available on the first instance (index 0).

Permissions: BSP_PERMISSIONS_IOS_SUPV only.

Method Data Size Values
Write 48 see code Enables EXI, writes up to 16 32-bit instructions to the EXI boot stub[check] and sets PPCBOOT.
typedef struct {
    int32_t version; //offset 0x0; must equal 3
    uint32_t instructions[16]; //actual instruction data to copy; offset 0x4
    size_t size; //size of instructions in bytes. last two bits ignored. offset 0x44
} BSP_PPC_EXIRegBootArgs;

BSP_PPC_EXIRegBootArgs args = {
    .version = 3,
    .instructions = { 0x60000000, 0x48000000 },
    .size = 2 * sizeof(uint32_t),
};
bspWrite("PPC", 0, "EXIRegBoot", sizeof(args), args);

Summary

Availability: This attribute is available to all instances.

Permissions: BSP_PERMISSIONS_ALL.

Method Data Size Values
Query 16 constant Returns a buffer filled with data calculated based on the hardware version at BSP init time. The data is identical between instances.

CoreProperties

Availability: This attribute is available to all instances.

Permissions: BSP_PERMISSIONS_ALL.

Method Data Size Values
Query 21 constant Returns a buffer filled with data calculated based on the hardware version at BSP init time. The data is unique between instances.

PVR

Availability: This attribute is only available on the first instance (index 0).

Permissions: BSP_PERMISSIONS_ALL.

Method Data Size Values
Read 4 Reads out unknown properties from two EE instances and concatenates them.
Write 4 Sets EE's first instance's control flag, then writes out the input value to two unknown EE instances.

60XeDataStreaming

Availability: This attribute is only available on the first instance (index 0), and contains a hardware version check.

Permissions: BSP_PERMISSIONS_ALL.

Method Data Size Values
Read 1 0, 1 Returns a boolean value: 0 indicates that bit 3 (mask 0x8) in LT_60XE_CFG is set, while 1 indicates that bit is clear.
Write 1 0, 1 Sets bit 12 (mask 0x1000) in LT_60XE_CFG, which appears to be some kind of latch, sleeps, then sets bit 8 (when input is 0) or clears bit 8 (when input is 1).