mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	apm: Refactor service impl. to support multiple ports.
This commit is contained in:
		
							parent
							
								
									c83a1b2320
								
							
						
					
					
						commit
						0532de6559
					
				| @ -92,6 +92,8 @@ add_library(core STATIC | |||||||
|     hle/service/aoc/aoc_u.h |     hle/service/aoc/aoc_u.h | ||||||
|     hle/service/apm/apm.cpp |     hle/service/apm/apm.cpp | ||||||
|     hle/service/apm/apm.h |     hle/service/apm/apm.h | ||||||
|  |     hle/service/apm/interface.cpp | ||||||
|  |     hle/service/apm/interface.h | ||||||
|     hle/service/audio/audio.cpp |     hle/service/audio/audio.cpp | ||||||
|     hle/service/audio/audio.h |     hle/service/audio/audio.h | ||||||
|     hle/service/audio/audin_u.cpp |     hle/service/audio/audin_u.cpp | ||||||
|  | |||||||
| @ -5,63 +5,15 @@ | |||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "core/hle/ipc_helpers.h" | #include "core/hle/ipc_helpers.h" | ||||||
| #include "core/hle/service/apm/apm.h" | #include "core/hle/service/apm/apm.h" | ||||||
|  | #include "core/hle/service/apm/interface.h" | ||||||
| 
 | 
 | ||||||
| namespace Service { | namespace Service { | ||||||
| namespace APM { | namespace APM { | ||||||
| 
 | 
 | ||||||
| void InstallInterfaces(SM::ServiceManager& service_manager) { | void InstallInterfaces(SM::ServiceManager& service_manager) { | ||||||
|     std::make_shared<APM>()->InstallAsService(service_manager); |     auto module_ = std::make_shared<Module>(); | ||||||
| } |     std::make_shared<APM>(module_, "apm")->InstallAsService(service_manager); | ||||||
| 
 |     std::make_shared<APM>(module_, "apm:p")->InstallAsService(service_manager); | ||||||
| class ISession final : public ServiceFramework<ISession> { |  | ||||||
| public: |  | ||||||
|     ISession() : ServiceFramework("ISession") { |  | ||||||
|         static const FunctionInfo functions[] = { |  | ||||||
|             {0, &ISession::SetPerformanceConfiguration, "SetPerformanceConfiguration"}, |  | ||||||
|             {1, &ISession::GetPerformanceConfiguration, "GetPerformanceConfiguration"}, |  | ||||||
|         }; |  | ||||||
|         RegisterHandlers(functions); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     void SetPerformanceConfiguration(Kernel::HLERequestContext& ctx) { |  | ||||||
|         IPC::RequestParser rp{ctx}; |  | ||||||
| 
 |  | ||||||
|         auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); |  | ||||||
|         u32 config = rp.Pop<u32>(); |  | ||||||
| 
 |  | ||||||
|         IPC::ResponseBuilder rb{ctx, 2}; |  | ||||||
|         rb.Push(RESULT_SUCCESS); |  | ||||||
| 
 |  | ||||||
|         LOG_WARNING(Service_APM, "(STUBBED) called mode=%u config=%u", static_cast<u32>(mode), |  | ||||||
|                     config); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     void GetPerformanceConfiguration(Kernel::HLERequestContext& ctx) { |  | ||||||
|         IPC::RequestParser rp{ctx}; |  | ||||||
| 
 |  | ||||||
|         auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); |  | ||||||
| 
 |  | ||||||
|         IPC::ResponseBuilder rb{ctx, 3}; |  | ||||||
|         rb.Push(RESULT_SUCCESS); |  | ||||||
|         rb.Push<u32>(0); // Performance configuration
 |  | ||||||
| 
 |  | ||||||
|         LOG_WARNING(Service_APM, "(STUBBED) called mode=%u", static_cast<u32>(mode)); |  | ||||||
|     } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| APM::APM() : ServiceFramework("apm") { |  | ||||||
|     static const FunctionInfo functions[] = { |  | ||||||
|         {0x00000000, &APM::OpenSession, "OpenSession"}, |  | ||||||
|         {0x00000001, nullptr, "GetPerformanceMode"}, |  | ||||||
|     }; |  | ||||||
|     RegisterHandlers(functions); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void APM::OpenSession(Kernel::HLERequestContext& ctx) { |  | ||||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |  | ||||||
|     rb.Push(RESULT_SUCCESS); |  | ||||||
|     rb.PushIpcInterface<ISession>(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace APM
 | } // namespace APM
 | ||||||
|  | |||||||
| @ -14,13 +14,10 @@ enum class PerformanceMode : u8 { | |||||||
|     Docked = 1, |     Docked = 1, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class APM final : public ServiceFramework<APM> { | class Module final { | ||||||
| public: | public: | ||||||
|     APM(); |     Module() = default; | ||||||
|     ~APM() = default; |     ~Module() = default; | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     void OpenSession(Kernel::HLERequestContext& ctx); |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| /// Registers all AM services with the specified service manager.
 | /// Registers all AM services with the specified service manager.
 | ||||||
|  | |||||||
							
								
								
									
										66
									
								
								src/core/hle/service/apm/interface.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/core/hle/service/apm/interface.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,66 @@ | |||||||
|  | // Copyright 2018 yuzu emulator team
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #include "common/logging/log.h" | ||||||
|  | #include "core/hle/ipc_helpers.h" | ||||||
|  | #include "core/hle/service/apm/apm.h" | ||||||
|  | #include "core/hle/service/apm/interface.h" | ||||||
|  | 
 | ||||||
|  | namespace Service { | ||||||
|  | namespace APM { | ||||||
|  | 
 | ||||||
|  | class ISession final : public ServiceFramework<ISession> { | ||||||
|  | public: | ||||||
|  |     ISession() : ServiceFramework("ISession") { | ||||||
|  |         static const FunctionInfo functions[] = { | ||||||
|  |             {0, &ISession::SetPerformanceConfiguration, "SetPerformanceConfiguration"}, | ||||||
|  |             {1, &ISession::GetPerformanceConfiguration, "GetPerformanceConfiguration"}, | ||||||
|  |         }; | ||||||
|  |         RegisterHandlers(functions); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     void SetPerformanceConfiguration(Kernel::HLERequestContext& ctx) { | ||||||
|  |         IPC::RequestParser rp{ctx}; | ||||||
|  | 
 | ||||||
|  |         auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); | ||||||
|  |         u32 config = rp.Pop<u32>(); | ||||||
|  | 
 | ||||||
|  |         IPC::ResponseBuilder rb{ctx, 2}; | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  | 
 | ||||||
|  |         LOG_WARNING(Service_APM, "(STUBBED) called mode=%u config=%u", static_cast<u32>(mode), | ||||||
|  |                     config); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     void GetPerformanceConfiguration(Kernel::HLERequestContext& ctx) { | ||||||
|  |         IPC::RequestParser rp{ctx}; | ||||||
|  | 
 | ||||||
|  |         auto mode = static_cast<PerformanceMode>(rp.Pop<u32>()); | ||||||
|  | 
 | ||||||
|  |         IPC::ResponseBuilder rb{ctx, 3}; | ||||||
|  |         rb.Push(RESULT_SUCCESS); | ||||||
|  |         rb.Push<u32>(0); // Performance configuration
 | ||||||
|  | 
 | ||||||
|  |         LOG_WARNING(Service_APM, "(STUBBED) called mode=%u", static_cast<u32>(mode)); | ||||||
|  |     } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | APM::APM(std::shared_ptr<Module> apm, const char* name) | ||||||
|  |     : ServiceFramework(name), apm(std::move(apm)) { | ||||||
|  |     static const FunctionInfo functions[] = { | ||||||
|  |         {0, &APM::OpenSession, "OpenSession"}, | ||||||
|  |         {1, nullptr, "GetPerformanceMode"}, | ||||||
|  |     }; | ||||||
|  |     RegisterHandlers(functions); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void APM::OpenSession(Kernel::HLERequestContext& ctx) { | ||||||
|  |     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||||
|  |     rb.Push(RESULT_SUCCESS); | ||||||
|  |     rb.PushIpcInterface<ISession>(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } // namespace APM
 | ||||||
|  | } // namespace Service
 | ||||||
							
								
								
									
										27
									
								
								src/core/hle/service/apm/interface.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/core/hle/service/apm/interface.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | // Copyright 2018 yuzu emulator team
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "core/hle/service/service.h" | ||||||
|  | 
 | ||||||
|  | namespace Service { | ||||||
|  | namespace APM { | ||||||
|  | 
 | ||||||
|  | class APM final : public ServiceFramework<APM> { | ||||||
|  | public: | ||||||
|  |     APM(std::shared_ptr<Module> apm, const char* name); | ||||||
|  |     ~APM() = default; | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     void OpenSession(Kernel::HLERequestContext& ctx); | ||||||
|  | 
 | ||||||
|  |     std::shared_ptr<Module> apm; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /// Registers all AM services with the specified service manager.
 | ||||||
|  | void InstallInterfaces(SM::ServiceManager& service_manager); | ||||||
|  | 
 | ||||||
|  | } // namespace APM
 | ||||||
|  | } // namespace Service
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei