Merge branch 'Horizon-OC:develop' into develop

This commit is contained in:
2fort sink
2026-02-03 15:05:11 -03:00
committed by GitHub
5 changed files with 110 additions and 151 deletions

View File

@@ -83,7 +83,7 @@ Result nvdecCheck = 1;
Result nvencCheck = 1; Result nvencCheck = 1;
Result nvjpgCheck = 1; Result nvjpgCheck = 1;
Result nifmCheck = 1; Result nifmCheck = 1;
Result sysclkCheck = 1; Result sysclkCheck = 0;
Result pwmDutyCycleCheck = 1; Result pwmDutyCycleCheck = 1;
//Wi-Fi //Wi-Fi
@@ -572,21 +572,19 @@ void Misc(void*) {
} }
// Get sys-clk data // Get sys-clk data
if (R_SUCCEEDED(sysclkCheck)) { SysClkContext sysclkCTX;
SysClkContext sysclkCTX; if (R_SUCCEEDED(sysclkIpcGetCurrentContext(&sysclkCTX))) {
if (R_SUCCEEDED(sysclkIpcGetCurrentContext(&sysclkCTX))) { realCPU_Hz = sysclkCTX.realFreqs[SysClkModule_CPU];
realCPU_Hz = sysclkCTX.realFreqs[SysClkModule_CPU]; realGPU_Hz = sysclkCTX.realFreqs[SysClkModule_GPU];
realGPU_Hz = sysclkCTX.realFreqs[SysClkModule_GPU]; realRAM_Hz = sysclkCTX.realFreqs[SysClkModule_MEM];
realRAM_Hz = sysclkCTX.realFreqs[SysClkModule_MEM]; partLoad[SysClkPartLoad_EMC] = sysclkCTX.partLoad[SysClkPartLoad_EMC];
partLoad[SysClkPartLoad_EMC] = sysclkCTX.partLoad[SysClkPartLoad_EMC]; partLoad[SysClkPartLoad_EMCCpu] = sysclkCTX.partLoad[SysClkPartLoad_EMCCpu];
partLoad[SysClkPartLoad_EMCCpu] = sysclkCTX.partLoad[SysClkPartLoad_EMCCpu];
realCPU_mV = sysclkCTX.voltages[HocClkVoltage_CPU];
realCPU_mV = sysclkCTX.voltages[HocClkVoltage_CPU]; realGPU_mV = sysclkCTX.voltages[HocClkVoltage_GPU];
realGPU_mV = sysclkCTX.voltages[HocClkVoltage_GPU]; realVDD2_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDD2];
realVDD2_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDD2]; realVDDQ_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDDQ_MarikoOnly];
realVDDQ_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDDQ_MarikoOnly]; realSOC_mV = sysclkCTX.voltages[HocClkVoltage_SOC];
realSOC_mV = sysclkCTX.voltages[HocClkVoltage_SOC];
}
} }
// Temperatures // Temperatures
@@ -699,21 +697,7 @@ void Misc3(void*) {
do { do {
mutexLock(&mutex_Misc); mutexLock(&mutex_Misc);
// Get sys-clk data
if (R_SUCCEEDED(sysclkCheck)) {
SysClkContext sysclkCTX;
if (R_SUCCEEDED(sysclkIpcGetCurrentContext(&sysclkCTX))) {
partLoad[SysClkPartLoad_EMC] = sysclkCTX.partLoad[SysClkPartLoad_EMC];
partLoad[SysClkPartLoad_EMCCpu] = sysclkCTX.partLoad[SysClkPartLoad_EMCCpu];
realCPU_mV = sysclkCTX.voltages[HocClkVoltage_CPU];
realGPU_mV = sysclkCTX.voltages[HocClkVoltage_GPU];
realSOC_mV = sysclkCTX.voltages[HocClkVoltage_SOC];
realVDD2_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDD2];
realVDDQ_mV = sysclkCTX.voltages[HocClkVoltage_EMCVDDQ_MarikoOnly];
}
}
// Temperatures // Temperatures
if (R_SUCCEEDED(i2cCheck)) { if (R_SUCCEEDED(i2cCheck)) {
Tmp451GetSocTemp(&SOC_temperatureF); Tmp451GetSocTemp(&SOC_temperatureF);

View File

@@ -446,14 +446,6 @@ public:
if (SaltySD) { if (SaltySD) {
LoadSharedMemoryAndRefreshRate(); LoadSharedMemoryAndRefreshRate();
} }
if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) {
uint32_t sysClkApiVer = 0;
sysclkIpcGetAPIVersion(&sysClkApiVer);
if (sysClkApiVer < 4) {
sysclkIpcExit();
}
else sysclkCheck = 0;
}
if (R_SUCCEEDED(splInitialize())) { if (R_SUCCEEDED(splInitialize())) {
u64 sku = 0; u64 sku = 0;
splGetConfig(SplConfigItem_HardwareType, &sku); splGetConfig(SplConfigItem_HardwareType, &sku);
@@ -473,9 +465,7 @@ public:
virtual void exitServices() override { virtual void exitServices() override {
CloseThreads(); CloseThreads();
if (R_SUCCEEDED(sysclkCheck)) { sysclkIpcExit();
sysclkIpcExit();
}
shmemClose(&_sharedmemory); shmemClose(&_sharedmemory);
//Exit services //Exit services
clkrstExit(); clkrstExit();
@@ -530,14 +520,6 @@ public:
if (SaltySD) { if (SaltySD) {
LoadSharedMemory(); LoadSharedMemory();
} }
if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) {
uint32_t sysClkApiVer = 0;
sysclkIpcGetAPIVersion(&sysClkApiVer);
if (sysClkApiVer < 4) {
sysclkIpcExit();
}
else sysclkCheck = 0;
}
if (R_SUCCEEDED(splInitialize())) { if (R_SUCCEEDED(splInitialize())) {
u64 sku = 0; u64 sku = 0;
splGetConfig(SplConfigItem_HardwareType, &sku); splGetConfig(SplConfigItem_HardwareType, &sku);
@@ -557,9 +539,7 @@ public:
virtual void exitServices() override { virtual void exitServices() override {
CloseThreads(); CloseThreads();
shmemClose(&_sharedmemory); shmemClose(&_sharedmemory);
if (R_SUCCEEDED(sysclkCheck)) { sysclkIpcExit();
sysclkIpcExit();
}
//Exit services //Exit services
clkrstExit(); clkrstExit();
pcvExit(); pcvExit();
@@ -617,14 +597,6 @@ public:
if (SaltySD) { if (SaltySD) {
LoadSharedMemory(); LoadSharedMemory();
} }
if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) {
uint32_t sysClkApiVer = 0;
sysclkIpcGetAPIVersion(&sysClkApiVer);
if (sysClkApiVer < 4) {
sysclkIpcExit();
}
else sysclkCheck = 0;
}
if (R_SUCCEEDED(splInitialize())) { if (R_SUCCEEDED(splInitialize())) {
u64 sku = 0; u64 sku = 0;
splGetConfig(SplConfigItem_HardwareType, &sku); splGetConfig(SplConfigItem_HardwareType, &sku);
@@ -645,9 +617,7 @@ public:
virtual void exitServices() override { virtual void exitServices() override {
CloseThreads(); CloseThreads();
shmemClose(&_sharedmemory); shmemClose(&_sharedmemory);
if (R_SUCCEEDED(sysclkCheck)) { sysclkIpcExit();
sysclkIpcExit();
}
// Exit services // Exit services
clkrstExit(); clkrstExit();
pcvExit(); pcvExit();
@@ -707,14 +677,6 @@ public:
if (SaltySD) { if (SaltySD) {
LoadSharedMemoryAndRefreshRate(); LoadSharedMemoryAndRefreshRate();
} }
if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) {
uint32_t sysClkApiVer = 0;
sysclkIpcGetAPIVersion(&sysClkApiVer);
if (sysClkApiVer < 4) {
sysclkIpcExit();
}
else sysclkCheck = 0;
}
if (R_SUCCEEDED(splInitialize())) { if (R_SUCCEEDED(splInitialize())) {
u64 sku = 0; u64 sku = 0;
splGetConfig(SplConfigItem_HardwareType, &sku); splGetConfig(SplConfigItem_HardwareType, &sku);
@@ -734,9 +696,7 @@ public:
virtual void exitServices() override { virtual void exitServices() override {
CloseThreads(); CloseThreads();
shmemClose(&_sharedmemory); shmemClose(&_sharedmemory);
if (R_SUCCEEDED(sysclkCheck)) { sysclkIpcExit();
sysclkIpcExit();
}
clkrstExit(); clkrstExit();
pcvExit(); pcvExit();
tsExit(); tsExit();
@@ -790,14 +750,6 @@ public:
if (SaltySD) { if (SaltySD) {
LoadSharedMemoryAndRefreshRate(); LoadSharedMemoryAndRefreshRate();
} }
if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) {
uint32_t sysClkApiVer = 0;
sysclkIpcGetAPIVersion(&sysClkApiVer);
if (sysClkApiVer < 4) {
sysclkIpcExit();
}
else sysclkCheck = 0;
}
if (R_SUCCEEDED(splInitialize())) { if (R_SUCCEEDED(splInitialize())) {
u64 sku = 0; u64 sku = 0;
splGetConfig(SplConfigItem_HardwareType, &sku); splGetConfig(SplConfigItem_HardwareType, &sku);
@@ -817,9 +769,7 @@ public:
virtual void exitServices() override { virtual void exitServices() override {
CloseThreads(); CloseThreads();
shmemClose(&_sharedmemory); shmemClose(&_sharedmemory);
if (R_SUCCEEDED(sysclkCheck)) { sysclkIpcExit();
sysclkIpcExit();
}
clkrstExit(); clkrstExit();
pcvExit(); pcvExit();
tsExit(); tsExit();
@@ -873,14 +823,6 @@ public:
if (SaltySD) { if (SaltySD) {
LoadSharedMemoryAndRefreshRate(); LoadSharedMemoryAndRefreshRate();
} }
if (sysclkIpcRunning() && R_SUCCEEDED(sysclkIpcInitialize())) {
uint32_t sysClkApiVer = 0;
sysclkIpcGetAPIVersion(&sysClkApiVer);
if (sysClkApiVer < 4) {
sysclkIpcExit();
}
else sysclkCheck = 0;
}
if (R_SUCCEEDED(splInitialize())) { if (R_SUCCEEDED(splInitialize())) {
u64 sku = 0; u64 sku = 0;
splGetConfig(SplConfigItem_HardwareType, &sku); splGetConfig(SplConfigItem_HardwareType, &sku);
@@ -900,9 +842,7 @@ public:
virtual void exitServices() override { virtual void exitServices() override {
CloseThreads(); CloseThreads();
shmemClose(&_sharedmemory); shmemClose(&_sharedmemory);
if (R_SUCCEEDED(sysclkCheck)) { sysclkIpcExit();
sysclkIpcExit();
}
clkrstExit(); clkrstExit();
pcvExit(); pcvExit();
tsExit(); tsExit();

View File

@@ -233,12 +233,10 @@ public:
else if (realRAM_Hz && settings.showDeltas && (settings.showRealFreqs || settings.showTargetFreqs)) { else if (realRAM_Hz && settings.showDeltas && (settings.showRealFreqs || settings.showTargetFreqs)) {
renderer->drawString(DeltaRAM_c, false, COMMON_MARGIN + deltaOffset, height_offset, 15, (settings.textColor)); renderer->drawString(DeltaRAM_c, false, COMMON_MARGIN + deltaOffset, height_offset, 15, (settings.textColor));
} }
if (R_SUCCEEDED(sysclkCheck)) { static std::vector<std::string> PartLoadColoredChars = {"CPU", "GPU"};
static std::vector<std::string> PartLoadColoredChars = {"CPU", "GPU"}; //static auto loadLabelWidth = renderer->getTextDimensions("Load: ", false, 15).first;
//static auto loadLabelWidth = renderer->getTextDimensions("Load: ", false, 15).first; renderer->drawString("Load", false, COMMON_MARGIN, height_offset+15, 15, (settings.catColor2));
renderer->drawString("Load", false, COMMON_MARGIN, height_offset+15, 15, (settings.catColor2)); renderer->drawStringWithColoredSections(RAM_load_c, false, PartLoadColoredChars, COMMON_MARGIN + valueOffset, height_offset+15, 15, (settings.textColor), settings.catColor2);
renderer->drawStringWithColoredSections(RAM_load_c, false, PartLoadColoredChars, COMMON_MARGIN + valueOffset, height_offset+15, 15, (settings.textColor), settings.catColor2);
}
} }
if (R_SUCCEEDED(Hinted)) { if (R_SUCCEEDED(Hinted)) {
//static auto textWidth = renderer->getTextDimensions("Total \nApplication \nApplet \nSystem \nSystem Unsafe ", false, 15).first; //static auto textWidth = renderer->getTextDimensions("Total \nApplication \nApplet \nSystem \nSystem Unsafe ", false, 15).first;

View File

@@ -354,7 +354,7 @@ public:
else else
width = renderer->getTextDimensions("100%@4444.4444 mV", false, fontsize).first; width = renderer->getTextDimensions("100%@4444.4444 mV", false, fontsize).first;
} }
} else if (key == "GPU" || (key == "RAM" && settings.showRAMLoad && R_SUCCEEDED(sysclkCheck))) { } else if (key == "GPU" || (key == "RAM" && settings.showRAMLoad)) {
//dimensions = renderer->drawString("100.0%@4444.4", false, 0, 0, fontsize, renderer->a(0x0000)); //dimensions = renderer->drawString("100.0%@4444.4", false, 0, 0, fontsize, renderer->a(0x0000));
if (!settings.showRAMLoadCPUGPU) { if (!settings.showRAMLoadCPUGPU) {
@@ -370,7 +370,7 @@ public:
width = renderer->getTextDimensions("100%[100%,100%]@4444.4444 mV", false, fontsize).first; width = renderer->getTextDimensions("100%[100%,100%]@4444.4444 mV", false, fontsize).first;
} }
} }
} else if (key == "RAM" && (!settings.showRAMLoad || R_FAILED(sysclkCheck))) { } else if (key == "RAM" && (!settings.showRAMLoad)) {
//dimensions = renderer->drawString("44444444MB@4444.4", false, 0, 0, fontsize, renderer->a(0x0000)); //dimensions = renderer->drawString("44444444MB@4444.4", false, 0, 0, fontsize, renderer->a(0x0000));
if (!settings.realVolts) { if (!settings.realVolts) {
width = renderer->getTextDimensions("100%@4444.4", false, fontsize).first; width = renderer->getTextDimensions("100%@4444.4", false, fontsize).first;
@@ -993,51 +993,33 @@ public:
} else { } else {
unsigned PartLoadInt; unsigned PartLoadInt;
if (R_SUCCEEDED(sysclkCheck)) { PartLoadInt = partLoad[SysClkPartLoad_EMC] / 10;
PartLoadInt = partLoad[SysClkPartLoad_EMC] / 10;
if (settings.showRAMLoadCPUGPU) {
if (settings.showRAMLoadCPUGPU) { unsigned ramCpuLoadInt = partLoad[SysClkPartLoad_EMCCpu] / 10;
unsigned ramCpuLoadInt = partLoad[SysClkPartLoad_EMCCpu] / 10; int RAM_GPU_Load = partLoad[SysClkPartLoad_EMC] - partLoad[SysClkPartLoad_EMCCpu];
int RAM_GPU_Load = partLoad[SysClkPartLoad_EMC] - partLoad[SysClkPartLoad_EMCCpu]; unsigned ramGpuLoadInt = RAM_GPU_Load / 10;
unsigned ramGpuLoadInt = RAM_GPU_Load / 10;
if (settings.realFrequencies && realRAM_Hz) {
snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c),
"%u%%[%u%%,%u%%]@%hu.%hhu",
PartLoadInt, ramCpuLoadInt, ramGpuLoadInt,
realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10);
} else {
snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c),
"%u%%[%u%%,%u%%]@%hu.%hhu",
PartLoadInt, ramCpuLoadInt, ramGpuLoadInt,
RAM_Hz / 1000000, (RAM_Hz / 100000) % 10);
}
} else {
if (settings.realFrequencies && realRAM_Hz) {
snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c),
"%u%%@%hu.%hhu", PartLoadInt,
realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10);
} else {
snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c),
"%u%%@%hu.%hhu", PartLoadInt,
RAM_Hz / 1000000, (RAM_Hz / 100000) % 10);
}
}
} else {
const uint64_t RAM_Total_all = RAM_Total_application_u + RAM_Total_applet_u +
RAM_Total_system_u + RAM_Total_systemunsafe_u;
const uint64_t RAM_Used_all = RAM_Used_application_u + RAM_Used_applet_u +
RAM_Used_system_u + RAM_Used_systemunsafe_u;
PartLoadInt = (RAM_Total_all > 0) ? (unsigned)((RAM_Used_all * 100) / RAM_Total_all) : 0;
if (settings.realFrequencies && realRAM_Hz) { if (settings.realFrequencies && realRAM_Hz) {
snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c),
"%u%%@%hu.%hhu", PartLoadInt, "%u%%[%u%%,%u%%]@%hu.%hhu",
realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10); PartLoadInt, ramCpuLoadInt, ramGpuLoadInt,
realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10);
} else { } else {
snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c), snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c),
"%u%%@%hu.%hhu", PartLoadInt, "%u%%[%u%%,%u%%]@%hu.%hhu",
RAM_Hz / 1000000, (RAM_Hz / 100000) % 10); PartLoadInt, ramCpuLoadInt, ramGpuLoadInt,
RAM_Hz / 1000000, (RAM_Hz / 100000) % 10);
}
} else {
if (settings.realFrequencies && realRAM_Hz) {
snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c),
"%u%%@%hu.%hhu", PartLoadInt,
realRAM_Hz / 1000000, (realRAM_Hz / 100000) % 10);
} else {
snprintf(MINI_RAM_var_compressed_c, sizeof(MINI_RAM_var_compressed_c),
"%u%%@%hu.%hhu", PartLoadInt,
RAM_Hz / 1000000, (RAM_Hz / 100000) % 10);
} }
} }
} }

View File

@@ -1,5 +1,21 @@
/* /*
* -------------------------------------------------------------------------- * Copyright (c) Souldbminer, Lightos_ and Horizon OC Contributors
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/* --------------------------------------------------------------------------
* "THE BEER-WARE LICENSE" (Revision 42): * "THE BEER-WARE LICENSE" (Revision 42):
* <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net> * <p-sam@d3vs.net>, <natinusala@gmail.com>, <m4x@m4xw.net>
* wrote this file. As long as you retain this notice you can do whatever you * wrote this file. As long as you retain this notice you can do whatever you
@@ -8,11 +24,12 @@
* -------------------------------------------------------------------------- * --------------------------------------------------------------------------
*/ */
#define NX_SERVICE_ASSUME_NON_DOMAIN #define NX_SERVICE_ASSUME_NON_DOMAIN
#include <sysclk/client/ipc.h>
#include <switch.h> #include <switch.h>
#include <string.h> #include <string.h>
#include <stdatomic.h> #include <stdatomic.h>
#include <sysclk/client/ipc.h>
static Service g_sysclkSrv; static Service g_sysclkSrv;
static atomic_size_t g_refCnt; static atomic_size_t g_refCnt;
@@ -20,7 +37,7 @@ static atomic_size_t g_refCnt;
bool sysclkIpcRunning() bool sysclkIpcRunning()
{ {
Handle handle; Handle handle;
const bool running = R_FAILED(smRegisterService(&handle, smEncodeName(SYSCLK_IPC_SERVICE_NAME), false, 1)); bool running = R_FAILED(smRegisterService(&handle, smEncodeName(SYSCLK_IPC_SERVICE_NAME), false, 1));
if (!running) if (!running)
{ {
@@ -94,7 +111,10 @@ Result sysclkIpcSetOverride(SysClkModule module, u32 hz)
Result sysclkIpcGetProfiles(u64 tid, SysClkTitleProfileList* out_profiles) Result sysclkIpcGetProfiles(u64 tid, SysClkTitleProfileList* out_profiles)
{ {
return serviceDispatchInOut(&g_sysclkSrv, SysClkIpcCmd_GetProfiles, tid, *out_profiles); return serviceDispatchIn(&g_sysclkSrv, SysClkIpcCmd_GetProfiles, tid,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = {{out_profiles, sizeof(SysClkTitleProfileList)}},
);
} }
Result sysclkIpcSetProfiles(u64 tid, SysClkTitleProfileList* profiles) Result sysclkIpcSetProfiles(u64 tid, SysClkTitleProfileList* profiles)
@@ -107,12 +127,18 @@ Result sysclkIpcSetProfiles(u64 tid, SysClkTitleProfileList* profiles)
Result sysclkIpcGetConfigValues(SysClkConfigValueList* out_configValues) Result sysclkIpcGetConfigValues(SysClkConfigValueList* out_configValues)
{ {
return serviceDispatchOut(&g_sysclkSrv, SysClkIpcCmd_GetConfigValues, *out_configValues); return serviceDispatch(&g_sysclkSrv, SysClkIpcCmd_GetConfigValues,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
.buffers = {{out_configValues, sizeof(SysClkConfigValueList)}},
);
} }
Result sysclkIpcSetConfigValues(SysClkConfigValueList* configValues) Result sysclkIpcSetConfigValues(SysClkConfigValueList* configValues)
{ {
return serviceDispatchIn(&g_sysclkSrv, SysClkIpcCmd_SetConfigValues, *configValues); return serviceDispatch(&g_sysclkSrv, SysClkIpcCmd_SetConfigValues,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_In },
.buffers = {{configValues, sizeof(SysClkConfigValueList)}},
);
} }
Result sysclkIpcGetFreqList(SysClkModule module, u32* list, u32 maxCount, u32* outCount) Result sysclkIpcGetFreqList(SysClkModule module, u32* list, u32 maxCount, u32* outCount)
@@ -125,4 +151,33 @@ Result sysclkIpcGetFreqList(SysClkModule module, u32* list, u32 maxCount, u32* o
.buffer_attrs = { SfBufferAttr_HipcAutoSelect | SfBufferAttr_Out }, .buffer_attrs = { SfBufferAttr_HipcAutoSelect | SfBufferAttr_Out },
.buffers = {{list, maxCount * sizeof(u32)}}, .buffers = {{list, maxCount * sizeof(u32)}},
); );
}
Result sysclkIpcSetReverseNXRTMode(ReverseNXMode mode)
{
return serviceDispatchIn(&g_sysclkSrv, SysClkIpcCmd_SetReverseNXRTMode, mode);
}
Result hocClkIpcSetKipData()
{
u32 temp = 0;
return serviceDispatchIn(&g_sysclkSrv, HocClkIpcCmd_SetKipData, temp);
}
Result hocClkIpcGetKipData()
{
u32 temp = 0;
return serviceDispatchIn(&g_sysclkSrv, HocClkIpcCmd_GetKipData, temp);
}
Result hocClkIpcUpdateEmcRegs()
{
u32 temp = 0;
return serviceDispatchIn(&g_sysclkSrv, HocClkIpcCmd_UpdateEmcRegs, temp);
}
Result hocClkIpcCalculateGpuVmin()
{
u32 temp = 0;
return serviceDispatchIn(&g_sysclkSrv, HocClkIpcCmd_CalculateGpuVmin, temp);
} }