pcv: add pcvGetModuleId (#269)

* pcv: add pcvGetModuleId
This commit is contained in:
SciresM 2019-04-24 16:44:13 -07:00 committed by yellows8
parent bc1786b7b0
commit ee34c620f7
2 changed files with 129 additions and 3 deletions

View File

@ -8,9 +8,94 @@
#include "../types.h"
typedef enum {
PcvModule_Cpu = 0,
PcvModule_Gpu = 1,
PcvModule_Emc = 56,
PcvModule_CpuBus = 0,
PcvModule_GPU = 1,
PcvModule_I2S1 = 2,
PcvModule_I2S2 = 3,
PcvModule_I2S3 = 4,
PcvModule_PWM = 5,
PcvModule_I2C1 = 6,
PcvModule_I2C2 = 7,
PcvModule_I2C3 = 8,
PcvModule_I2C4 = 9,
PcvModule_I2C5 = 10,
PcvModule_I2C6 = 11,
PcvModule_SPI1 = 12,
PcvModule_SPI2 = 13,
PcvModule_SPI3 = 14,
PcvModule_SPI4 = 15,
PcvModule_DISP1 = 16,
PcvModule_DISP2 = 17,
PcvModule_ISP = 18,
PcvModule_VI = 19,
PcvModule_SDMMC1 = 20,
PcvModule_SDMMC2 = 21,
PcvModule_SDMMC3 = 22,
PcvModule_SDMMC4 = 23,
PcvModule_OWR = 24,
PcvModule_CSITE = 25,
PcvModule_TSEC = 26,
PcvModule_MSELECT = 27,
PcvModule_HDA2CODEC_2X = 28,
PcvModule_ACTMON = 29,
PcvModule_I2C_SLOW = 30,
PcvModule_SOR1 = 31,
PcvModule_SATA = 32,
PcvModule_HDA = 33,
PcvModule_XUSB_CORE_HOST = 34,
PcvModule_XUSB_FALCON = 35,
PcvModule_XUSB_FS = 36,
PcvModule_XUSB_CORE_DEV = 37,
PcvModule_XUSB_SS_HOSTDEV = 38,
PcvModule_UARTA = 39,
PcvModule_UARTB = 40,
PcvModule_UARTC = 41,
PcvModule_UARTD = 42,
PcvModule_HOST1X = 43,
PcvModule_ENTROPY = 44,
PcvModule_SOC_THERM = 45,
PcvModule_VIC = 46,
PcvModule_NVENC = 47,
PcvModule_NVJPG = 48,
PcvModule_NVDEC = 49,
PcvModule_QSPI = 50,
PcvModule_VI_I2C = 51,
PcvModule_TSECB = 52,
PcvModule_APE = 53,
PcvModule_ACLK = 54,
PcvModule_UARTAPE = 55,
PcvModule_EMC = 56,
PcvModule_PLLE0_0 = 57,
PcvModule_PLLE0_1 = 58,
PcvModule_DSI = 59,
PcvModule_MAUD = 60,
PcvModule_DPAUX1 = 61,
PcvModule_MIPI_CAL = 62,
PcvModule_UART_FST_MIPI_CAL = 63,
PcvModule_OSC = 64,
PcvModule_SCLK = 65,
PcvModule_SOR_SAFE = 66,
PcvModule_XUSB_SS = 67,
PcvModule_XUSB_HOST = 68,
PcvModule_XUSB_DEV = 69,
PcvModule_EXTPERIPH1 = 70,
PcvModule_AHUB = 71,
PcvModule_HDA2HDMICODEC = 72,
PcvModule_PLLP5 = 73,
PcvModule_USBD = 74,
PcvModule_USB2 = 75,
PcvModule_PCIE = 76,
PcvModule_AFI = 77,
PcvModule_PCIEXCLK = 78,
PcvModule_PEX_USB_UPHY = 79,
PcvModule_XUSB_PADCTL = 80,
PcvModule_APBDMA = 81,
PcvModule_USB2_TRK = 82,
PcvModule_PLLE0_2 = 83,
PcvModule_PLLE0_3 = 84,
PcvModule_CEC = 85,
PcvModule_EXTPERIPH2 = 86,
PcvModule_Count // Not a real module, used to know how many modules there are.
} PcvModule;
/// Module id returned by [8.0.0+] pcv services
@ -34,10 +119,13 @@ typedef enum {
PcvModuleId_SPI4 = 0x07000003,
PcvModuleId_DISP1 = 0x40000011,
PcvModuleId_DISP2 = 0x40000012,
PcvModuleId_ISP = 0x40000013,
PcvModuleId_VI = 0x40000014,
PcvModuleId_SDMMC1 = 0x40000015,
PcvModuleId_SDMMC2 = 0x40000016,
PcvModuleId_SDMMC3 = 0x40000017,
PcvModuleId_SDMMC4 = 0x40000018,
PcvModuleId_OWR = 0x40000019,
PcvModuleId_CSITE = 0x4000001A,
PcvModuleId_TSEC = 0x4000001B,
PcvModuleId_MSELECT = 0x4000001C,
@ -45,6 +133,7 @@ typedef enum {
PcvModuleId_ACTMON = 0x4000001E,
PcvModuleId_I2C_SLOW = 0x4000001F,
PcvModuleId_SOR1 = 0x40000020,
PcvModuleId_SATA = 0x40000021,
PcvModuleId_HDA = 0x40000022,
PcvModuleId_XUSB_CORE_HOST = 0x40000023,
PcvModuleId_XUSB_FALCON = 0x40000024,
@ -63,6 +152,7 @@ typedef enum {
PcvModuleId_NVJPG = 0x40000031,
PcvModuleId_NVDEC = 0x40000032,
PcvModuleId_QSPI = 0x40000033,
PcvModuleId_VI_I2C = 0x40000034,
PcvModuleId_TSECB = 0x40000035,
PcvModuleId_APE = 0x40000036,
PcvModuleId_ACLK = 0x40000037,
@ -103,6 +193,8 @@ typedef enum {
Result pcvInitialize(void);
void pcvExit(void);
Result pcvGetModuleId(PcvModuleId *module_id, PcvModule module);
Result pcvGetClockRate(PcvModule module, u32 *out_hz);
Result pcvSetClockRate(PcvModule module, u32 hz);
Result pcvSetVoltageEnabled(bool state, u32 voltage);

View File

@ -30,6 +30,40 @@ void pcvExit(void) {
}
}
Result pcvGetModuleId(PcvModuleId *module_id, PcvModule module) {
static const PcvModuleId s_moduleIdMap[PcvModule_Count] = {
PcvModuleId_CpuBus, PcvModuleId_GPU, PcvModuleId_I2S1, PcvModuleId_I2S2,
PcvModuleId_I2S3, PcvModuleId_PWM, PcvModuleId_I2C1, PcvModuleId_I2C2,
PcvModuleId_I2C3, PcvModuleId_I2C4, PcvModuleId_I2C5, PcvModuleId_I2C6,
PcvModuleId_SPI1, PcvModuleId_SPI2, PcvModuleId_SPI3, PcvModuleId_SPI4,
PcvModuleId_DISP1, PcvModuleId_DISP2, PcvModuleId_ISP, PcvModuleId_VI,
PcvModuleId_SDMMC1, PcvModuleId_SDMMC2, PcvModuleId_SDMMC3, PcvModuleId_SDMMC4,
PcvModuleId_OWR, PcvModuleId_CSITE, PcvModuleId_TSEC, PcvModuleId_MSELECT,
PcvModuleId_HDA2CODEC_2X, PcvModuleId_ACTMON, PcvModuleId_I2C_SLOW, PcvModuleId_SOR1,
PcvModuleId_SATA, PcvModuleId_HDA, PcvModuleId_XUSB_CORE_HOST, PcvModuleId_XUSB_FALCON,
PcvModuleId_XUSB_FS, PcvModuleId_XUSB_CORE_DEV, PcvModuleId_XUSB_SS_HOSTDEV, PcvModuleId_UARTA,
PcvModuleId_UARTB, PcvModuleId_UARTC, PcvModuleId_UARTD, PcvModuleId_HOST1X,
PcvModuleId_ENTROPY, PcvModuleId_SOC_THERM, PcvModuleId_VIC, PcvModuleId_NVENC,
PcvModuleId_NVJPG, PcvModuleId_NVDEC, PcvModuleId_QSPI, PcvModuleId_VI_I2C,
PcvModuleId_TSECB, PcvModuleId_APE, PcvModuleId_ACLK, PcvModuleId_UARTAPE,
PcvModuleId_EMC, PcvModuleId_PLLE0_0, PcvModuleId_PLLE0_1, PcvModuleId_DSI,
PcvModuleId_MAUD, PcvModuleId_DPAUX1, PcvModuleId_MIPI_CAL, PcvModuleId_UART_FST_MIPI_CAL,
PcvModuleId_OSC, PcvModuleId_SCLK, PcvModuleId_SOR_SAFE, PcvModuleId_XUSB_SS,
PcvModuleId_XUSB_HOST, PcvModuleId_XUSB_DEV, PcvModuleId_EXTPERIPH1, PcvModuleId_AHUB,
PcvModuleId_HDA2HDMICODEC, PcvModuleId_PLLP5, PcvModuleId_USBD, PcvModuleId_USB2,
PcvModuleId_PCIE, PcvModuleId_AFI, PcvModuleId_PCIEXCLK, PcvModuleId_PEX_USB_UPHY,
PcvModuleId_XUSB_PADCTL, PcvModuleId_APBDMA, PcvModuleId_USB2_TRK, PcvModuleId_PLLE0_2,
PcvModuleId_PLLE0_3, PcvModuleId_CEC, PcvModuleId_EXTPERIPH2,
};
if (module >= PcvModule_Count) {
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
}
*module_id = s_moduleIdMap[module];
return 0;
}
Result pcvSetClockRate(PcvModule module, u32 hz) {
if(hosversionAtLeast(8,0,0)) {
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);