mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-10-31 10:44:49 +01:00 
			
		
		
		
	core: implement clkrst service
This commit is contained in:
		
							parent
							
								
									e9b7263cfd
								
							
						
					
					
						commit
						4bab0d07a6
					
				| @ -3,6 +3,7 @@ | ||||
| 
 | ||||
| #include <memory> | ||||
| 
 | ||||
| #include "core/hle/ipc_helpers.h" | ||||
| #include "core/hle/service/pcv/pcv.h" | ||||
| #include "core/hle/service/service.h" | ||||
| #include "core/hle/service/sm/sm.h" | ||||
| @ -77,10 +78,102 @@ public: | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| class IClkrstSession final : public ServiceFramework<IClkrstSession> { | ||||
| public: | ||||
|     explicit IClkrstSession(Core::System& system_, DeviceCode deivce_code_) | ||||
|         : ServiceFramework{system_, "IClkrstSession"}, deivce_code(deivce_code_) { | ||||
|         // clang-format off
 | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, nullptr, "SetClockEnabled"}, | ||||
|             {1, nullptr, "SetClockDisabled"}, | ||||
|             {2, nullptr, "SetResetAsserted"}, | ||||
|             {3, nullptr, "SetResetDeasserted"}, | ||||
|             {4, nullptr, "SetPowerEnabled"}, | ||||
|             {5, nullptr, "SetPowerDisabled"}, | ||||
|             {6, nullptr, "GetState"}, | ||||
|             {7, &IClkrstSession::SetClockRate, "SetClockRate"}, | ||||
|             {8, &IClkrstSession::GetClockRate, "GetClockRate"}, | ||||
|             {9, nullptr, "SetMinVClockRate"}, | ||||
|             {10, nullptr, "GetPossibleClockRates"}, | ||||
|             {11, nullptr, "GetDvfsTable"}, | ||||
|         }; | ||||
|         // clang-format on
 | ||||
|         RegisterHandlers(functions); | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     void SetClockRate(Kernel::HLERequestContext& ctx) { | ||||
|         IPC::RequestParser rp{ctx}; | ||||
|         clock_rate = rp.Pop<u32>(); | ||||
|         LOG_DEBUG(Service_PCV, "(STUBBED) called, clock_rate={}", clock_rate); | ||||
| 
 | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(ResultSuccess); | ||||
|     } | ||||
| 
 | ||||
|     void GetClockRate(Kernel::HLERequestContext& ctx) { | ||||
|         LOG_DEBUG(Service_PCV, "(STUBBED) called"); | ||||
| 
 | ||||
|         IPC::ResponseBuilder rb{ctx, 3}; | ||||
|         rb.Push(ResultSuccess); | ||||
|         rb.Push<u32>(clock_rate); | ||||
|     } | ||||
| 
 | ||||
|     DeviceCode deivce_code; | ||||
|     u32 clock_rate{}; | ||||
| }; | ||||
| 
 | ||||
| class CLKRST final : public ServiceFramework<CLKRST> { | ||||
| public: | ||||
|     explicit CLKRST(Core::System& system_, const char* name) : ServiceFramework{system_, name} { | ||||
|         // clang-format off
 | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, &CLKRST::OpenSession, "OpenSession"}, | ||||
|             {1, nullptr, "GetTemperatureThresholds"}, | ||||
|             {2, nullptr, "SetTemperature"}, | ||||
|             {3, nullptr, "GetModuleStateTable"}, | ||||
|             {4, nullptr, "GetModuleStateTableEvent"}, | ||||
|             {5, nullptr, "GetModuleStateTableMaxCount"}, | ||||
|         }; | ||||
|         // clang-format on
 | ||||
| 
 | ||||
|         RegisterHandlers(functions); | ||||
|     } | ||||
| 
 | ||||
| private: | ||||
|     void OpenSession(Kernel::HLERequestContext& ctx) { | ||||
|         IPC::RequestParser rp{ctx}; | ||||
|         const auto device_code = static_cast<DeviceCode>(rp.Pop<u32>()); | ||||
|         const auto unkonwn_input = rp.Pop<u32>(); | ||||
| 
 | ||||
|         LOG_DEBUG(Service_PCV, "called, device_code={}, input={}", device_code, unkonwn_input); | ||||
| 
 | ||||
|         IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|         rb.Push(ResultSuccess); | ||||
|         rb.PushIpcInterface<IClkrstSession>(system, device_code); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| class CLKRST_A final : public ServiceFramework<CLKRST_A> { | ||||
| public: | ||||
|     explicit CLKRST_A(Core::System& system_) : ServiceFramework{system_, "clkrst:a"} { | ||||
|         // clang-format off
 | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, nullptr, "ReleaseControl"}, | ||||
|         }; | ||||
|         // clang-format on
 | ||||
| 
 | ||||
|         RegisterHandlers(functions); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| void InstallInterfaces(SM::ServiceManager& sm, Core::System& system) { | ||||
|     std::make_shared<PCV>(system)->InstallAsService(sm); | ||||
|     std::make_shared<PCV_ARB>(system)->InstallAsService(sm); | ||||
|     std::make_shared<PCV_IMM>(system)->InstallAsService(sm); | ||||
|     std::make_shared<CLKRST>(system, "clkrst")->InstallAsService(sm); | ||||
|     std::make_shared<CLKRST>(system, "clkrst:i")->InstallAsService(sm); | ||||
|     std::make_shared<CLKRST_A>(system)->InstallAsService(sm); | ||||
| } | ||||
| 
 | ||||
| } // namespace Service::PCV
 | ||||
|  | ||||
| @ -13,6 +13,97 @@ class ServiceManager; | ||||
| 
 | ||||
| namespace Service::PCV { | ||||
| 
 | ||||
| enum class DeviceCode : u32 { | ||||
|     Cpu = 0x40000001, | ||||
|     Gpu = 0x40000002, | ||||
|     I2s1 = 0x40000003, | ||||
|     I2s2 = 0x40000004, | ||||
|     I2s3 = 0x40000005, | ||||
|     Pwm = 0x40000006, | ||||
|     I2c1 = 0x02000001, | ||||
|     I2c2 = 0x02000002, | ||||
|     I2c3 = 0x02000003, | ||||
|     I2c4 = 0x02000004, | ||||
|     I2c5 = 0x02000005, | ||||
|     I2c6 = 0x02000006, | ||||
|     Spi1 = 0x07000000, | ||||
|     Spi2 = 0x07000001, | ||||
|     Spi3 = 0x07000002, | ||||
|     Spi4 = 0x07000003, | ||||
|     Disp1 = 0x40000011, | ||||
|     Disp2 = 0x40000012, | ||||
|     Isp = 0x40000013, | ||||
|     Vi = 0x40000014, | ||||
|     Sdmmc1 = 0x40000015, | ||||
|     Sdmmc2 = 0x40000016, | ||||
|     Sdmmc3 = 0x40000017, | ||||
|     Sdmmc4 = 0x40000018, | ||||
|     Owr = 0x40000019, | ||||
|     Csite = 0x4000001A, | ||||
|     Tsec = 0x4000001B, | ||||
|     Mselect = 0x4000001C, | ||||
|     Hda2codec2x = 0x4000001D, | ||||
|     Actmon = 0x4000001E, | ||||
|     I2cSlow = 0x4000001F, | ||||
|     Sor1 = 0x40000020, | ||||
|     Sata = 0x40000021, | ||||
|     Hda = 0x40000022, | ||||
|     XusbCoreHostSrc = 0x40000023, | ||||
|     XusbFalconSrc = 0x40000024, | ||||
|     XusbFsSrc = 0x40000025, | ||||
|     XusbCoreDevSrc = 0x40000026, | ||||
|     XusbSsSrc = 0x40000027, | ||||
|     UartA = 0x03000001, | ||||
|     UartB = 0x35000405, | ||||
|     UartC = 0x3500040F, | ||||
|     UartD = 0x37000001, | ||||
|     Host1x = 0x4000002C, | ||||
|     Entropy = 0x4000002D, | ||||
|     SocTherm = 0x4000002E, | ||||
|     Vic = 0x4000002F, | ||||
|     Nvenc = 0x40000030, | ||||
|     Nvjpg = 0x40000031, | ||||
|     Nvdec = 0x40000032, | ||||
|     Qspi = 0x40000033, | ||||
|     ViI2c = 0x40000034, | ||||
|     Tsecb = 0x40000035, | ||||
|     Ape = 0x40000036, | ||||
|     AudioDsp = 0x40000037, | ||||
|     AudioUart = 0x40000038, | ||||
|     Emc = 0x40000039, | ||||
|     Plle = 0x4000003A, | ||||
|     PlleHwSeq = 0x4000003B, | ||||
|     Dsi = 0x4000003C, | ||||
|     Maud = 0x4000003D, | ||||
|     Dpaux1 = 0x4000003E, | ||||
|     MipiCal = 0x4000003F, | ||||
|     UartFstMipiCal = 0x40000040, | ||||
|     Osc = 0x40000041, | ||||
|     SysBus = 0x40000042, | ||||
|     SorSafe = 0x40000043, | ||||
|     XusbSs = 0x40000044, | ||||
|     XusbHost = 0x40000045, | ||||
|     XusbDevice = 0x40000046, | ||||
|     Extperiph1 = 0x40000047, | ||||
|     Ahub = 0x40000048, | ||||
|     Hda2hdmicodec = 0x40000049, | ||||
|     Gpuaux = 0x4000004A, | ||||
|     UsbD = 0x4000004B, | ||||
|     Usb2 = 0x4000004C, | ||||
|     Pcie = 0x4000004D, | ||||
|     Afi = 0x4000004E, | ||||
|     PciExClk = 0x4000004F, | ||||
|     PExUsbPhy = 0x40000050, | ||||
|     XUsbPadCtl = 0x40000051, | ||||
|     Apbdma = 0x40000052, | ||||
|     Usb2TrkClk = 0x40000053, | ||||
|     XUsbIoPll = 0x40000054, | ||||
|     XUsbIoPllHwSeq = 0x40000055, | ||||
|     Cec = 0x40000056, | ||||
|     Extperiph2 = 0x40000057, | ||||
|     OscClk = 0x40000080 | ||||
| }; | ||||
| 
 | ||||
| void InstallInterfaces(SM::ServiceManager& sm, Core::System& system); | ||||
| 
 | ||||
| } // namespace Service::PCV
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user