Merge pull request #156 from mailwl/nifm
Service/nifm: add nifm:a, nifm:s and nifm:u services
This commit is contained in:
		| @@ -114,6 +114,14 @@ add_library(core STATIC | ||||
|     hle/service/hid/hid.h | ||||
|     hle/service/lm/lm.cpp | ||||
|     hle/service/lm/lm.h | ||||
|     hle/service/nifm/nifm.cpp | ||||
|     hle/service/nifm/nifm.h | ||||
|     hle/service/nifm/nifm_a.cpp | ||||
|     hle/service/nifm/nifm_a.h | ||||
|     hle/service/nifm/nifm_s.cpp | ||||
|     hle/service/nifm/nifm_s.h | ||||
|     hle/service/nifm/nifm_u.cpp | ||||
|     hle/service/nifm/nifm_u.h | ||||
|     hle/service/nvdrv/devices/nvdevice.h | ||||
|     hle/service/nvdrv/devices/nvdisp_disp0.cpp | ||||
|     hle/service/nvdrv/devices/nvdisp_disp0.h | ||||
|   | ||||
							
								
								
									
										161
									
								
								src/core/hle/service/nifm/nifm.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								src/core/hle/service/nifm/nifm.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,161 @@ | ||||
| // Copyright 2018 yuzu emulator team | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #include "core/hle/ipc_helpers.h" | ||||
| #include "core/hle/service/nifm/nifm.h" | ||||
| #include "core/hle/service/nifm/nifm_a.h" | ||||
| #include "core/hle/service/nifm/nifm_s.h" | ||||
| #include "core/hle/service/nifm/nifm_u.h" | ||||
|  | ||||
| namespace Service { | ||||
| namespace NIFM { | ||||
|  | ||||
| class IScanRequest final : public ServiceFramework<IScanRequest> { | ||||
| public: | ||||
|     explicit IScanRequest() : ServiceFramework("IScanRequest") { | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, nullptr, "Submit"}, | ||||
|             {1, nullptr, "IsProcessing"}, | ||||
|             {2, nullptr, "GetResult"}, | ||||
|             {3, nullptr, "GetSystemEventReadableHandle"}, | ||||
|         }; | ||||
|         RegisterHandlers(functions); | ||||
|     } | ||||
| }; | ||||
|  | ||||
| class IRequest final : public ServiceFramework<IRequest> { | ||||
| public: | ||||
|     explicit IRequest() : ServiceFramework("IRequest") { | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, nullptr, "GetRequestState"}, | ||||
|             {1, nullptr, "GetResult"}, | ||||
|             {2, nullptr, "GetSystemEventReadableHandles"}, | ||||
|             {3, nullptr, "Cancel"}, | ||||
|             {4, nullptr, "Submit"}, | ||||
|             {5, nullptr, "SetRequirement"}, | ||||
|             {6, nullptr, "SetRequirementPreset"}, | ||||
|             {8, nullptr, "SetPriority"}, | ||||
|             {9, nullptr, "SetNetworkProfileId"}, | ||||
|             {10, nullptr, "SetRejectable"}, | ||||
|             {11, nullptr, "SetConnectionConfirmationOption"}, | ||||
|             {12, nullptr, "SetPersistent"}, | ||||
|             {13, nullptr, "SetInstant"}, | ||||
|             {14, nullptr, "SetSustainable"}, | ||||
|             {15, nullptr, "SetRawPriority"}, | ||||
|             {16, nullptr, "SetGreedy"}, | ||||
|             {17, nullptr, "SetSharable"}, | ||||
|             {18, nullptr, "SetRequirementByRevision"}, | ||||
|             {19, nullptr, "GetRequirement"}, | ||||
|             {20, nullptr, "GetRevision"}, | ||||
|             {21, nullptr, "GetAppletInfo"}, | ||||
|             {22, nullptr, "GetAdditionalInfo"}, | ||||
|             {23, nullptr, "SetKeptInSleep"}, | ||||
|             {24, nullptr, "RegisterSocketDescriptor"}, | ||||
|             {25, nullptr, "UnregisterSocketDescriptor"}, | ||||
|         }; | ||||
|         RegisterHandlers(functions); | ||||
|     } | ||||
| }; | ||||
|  | ||||
| class INetworkProfile final : public ServiceFramework<INetworkProfile> { | ||||
| public: | ||||
|     explicit INetworkProfile() : ServiceFramework("INetworkProfile") { | ||||
|         static const FunctionInfo functions[] = { | ||||
|             {0, nullptr, "Update"}, | ||||
|             {1, nullptr, "PersistOld"}, | ||||
|             {2, nullptr, "Persist"}, | ||||
|         }; | ||||
|         RegisterHandlers(functions); | ||||
|     } | ||||
| }; | ||||
|  | ||||
| IGeneralService::IGeneralService() : ServiceFramework("IGeneralService") { | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {1, &IGeneralService::GetClientId, "GetClientId"}, | ||||
|         {2, &IGeneralService::CreateScanRequest, "CreateScanRequest"}, | ||||
|         {4, &IGeneralService::CreateRequest, "CreateRequest"}, | ||||
|         {6, nullptr, "GetCurrentNetworkProfile"}, | ||||
|         {7, nullptr, "EnumerateNetworkInterfaces"}, | ||||
|         {8, nullptr, "GetNetworkProfile"}, | ||||
|         {9, nullptr, "SetNetworkProfile"}, | ||||
|         {10, &IGeneralService::RemoveNetworkProfile, "RemoveNetworkProfile"}, | ||||
|         {11, nullptr, "GetScanDataOld"}, | ||||
|         {12, nullptr, "GetCurrentIpAddress"}, | ||||
|         {13, nullptr, "GetCurrentAccessPointOld"}, | ||||
|         {14, &IGeneralService::CreateTemporaryNetworkProfile, "CreateTemporaryNetworkProfile"}, | ||||
|         {15, nullptr, "GetCurrentIpConfigInfo"}, | ||||
|         {16, nullptr, "SetWirelessCommunicationEnabled"}, | ||||
|         {17, nullptr, "IsWirelessCommunicationEnabled"}, | ||||
|         {18, nullptr, "GetInternetConnectionStatus"}, | ||||
|         {19, nullptr, "SetEthernetCommunicationEnabled"}, | ||||
|         {20, nullptr, "IsEthernetCommunicationEnabled"}, | ||||
|         {21, nullptr, "IsAnyInternetRequestAccepted"}, | ||||
|         {22, nullptr, "IsAnyForegroundRequestAccepted"}, | ||||
|         {23, nullptr, "PutToSleep"}, | ||||
|         {24, nullptr, "WakeUp"}, | ||||
|         {25, nullptr, "GetSsidListVersion"}, | ||||
|         {26, nullptr, "SetExclusiveClient"}, | ||||
|         {27, nullptr, "GetDefaultIpSetting"}, | ||||
|         {28, nullptr, "SetDefaultIpSetting"}, | ||||
|         {29, nullptr, "SetWirelessCommunicationEnabledForTest"}, | ||||
|         {30, nullptr, "SetEthernetCommunicationEnabledForTest"}, | ||||
|         {31, nullptr, "GetTelemetorySystemEventReadableHandle"}, | ||||
|         {32, nullptr, "GetTelemetryInfo"}, | ||||
|         {33, nullptr, "ConfirmSystemAvailability"}, | ||||
|         {34, nullptr, "SetBackgroundRequestEnabled"}, | ||||
|         {35, nullptr, "GetScanData"}, | ||||
|         {36, nullptr, "GetCurrentAccessPoint"}, | ||||
|         {37, nullptr, "Shutdown"}, | ||||
|     }; | ||||
|     RegisterHandlers(functions); | ||||
| } | ||||
|  | ||||
| void IGeneralService::GetClientId(Kernel::HLERequestContext& ctx) { | ||||
|     LOG_WARNING(Service, "(STUBBED) called"); | ||||
|     IPC::ResponseBuilder rb{ctx, 4}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.Push<u64>(0); | ||||
| } | ||||
|  | ||||
| void IGeneralService::CreateScanRequest(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|  | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<IScanRequest>(); | ||||
|  | ||||
|     LOG_DEBUG(Service, "called"); | ||||
| } | ||||
|  | ||||
| void IGeneralService::CreateRequest(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|  | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<IRequest>(); | ||||
|  | ||||
|     LOG_DEBUG(Service, "called"); | ||||
| } | ||||
|  | ||||
| void IGeneralService::RemoveNetworkProfile(Kernel::HLERequestContext& ctx) { | ||||
|     LOG_WARNING(Service, "(STUBBED) called"); | ||||
|     IPC::ResponseBuilder rb{ctx, 2}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
| } | ||||
|  | ||||
| void IGeneralService::CreateTemporaryNetworkProfile(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|  | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<INetworkProfile>(); | ||||
|  | ||||
|     LOG_DEBUG(Service, "called"); | ||||
| } | ||||
|  | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager) { | ||||
|     std::make_shared<NIFM_A>()->InstallAsService(service_manager); | ||||
|     std::make_shared<NIFM_S>()->InstallAsService(service_manager); | ||||
|     std::make_shared<NIFM_U>()->InstallAsService(service_manager); | ||||
| } | ||||
|  | ||||
| } // namespace NIFM | ||||
| } // namespace Service | ||||
							
								
								
									
										27
									
								
								src/core/hle/service/nifm/nifm.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/core/hle/service/nifm/nifm.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 NIFM { | ||||
|  | ||||
| class IGeneralService final : public ServiceFramework<IGeneralService> { | ||||
| public: | ||||
|     IGeneralService(); | ||||
|  | ||||
| private: | ||||
|     void GetClientId(Kernel::HLERequestContext& ctx); | ||||
|     void CreateScanRequest(Kernel::HLERequestContext& ctx); | ||||
|     void CreateRequest(Kernel::HLERequestContext& ctx); | ||||
|     void RemoveNetworkProfile(Kernel::HLERequestContext& ctx); | ||||
|     void CreateTemporaryNetworkProfile(Kernel::HLERequestContext& ctx); | ||||
| }; | ||||
|  | ||||
| void InstallInterfaces(SM::ServiceManager& service_manager); | ||||
|  | ||||
| } // namespace NIFM | ||||
| } // namespace Service | ||||
							
								
								
									
										36
									
								
								src/core/hle/service/nifm/nifm_a.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/core/hle/service/nifm/nifm_a.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| // 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/nifm/nifm.h" | ||||
| #include "core/hle/service/nifm/nifm_a.h" | ||||
|  | ||||
| namespace Service { | ||||
| namespace NIFM { | ||||
|  | ||||
| void NIFM_A::CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<IGeneralService>(); | ||||
|     LOG_DEBUG(Service, "called"); | ||||
| } | ||||
|  | ||||
| void NIFM_A::CreateGeneralService(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<IGeneralService>(); | ||||
|     LOG_DEBUG(Service, "called"); | ||||
| } | ||||
|  | ||||
| NIFM_A::NIFM_A() : ServiceFramework("nifm:a") { | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {4, &NIFM_A::CreateGeneralServiceOld, "CreateGeneralServiceOld"}, | ||||
|         {5, &NIFM_A::CreateGeneralService, "CreateGeneralService"}, | ||||
|     }; | ||||
|     RegisterHandlers(functions); | ||||
| } | ||||
|  | ||||
| } // namespace NIFM | ||||
| } // namespace Service | ||||
							
								
								
									
										24
									
								
								src/core/hle/service/nifm/nifm_a.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/core/hle/service/nifm/nifm_a.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| // Copyright 2018 yuzu emulator team | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include "core/hle/kernel/hle_ipc.h" | ||||
| #include "core/hle/service/service.h" | ||||
|  | ||||
| namespace Service { | ||||
| namespace NIFM { | ||||
|  | ||||
| class NIFM_A final : public ServiceFramework<NIFM_A> { | ||||
| public: | ||||
|     NIFM_A(); | ||||
|     ~NIFM_A() = default; | ||||
|  | ||||
| private: | ||||
|     void CreateGeneralServiceOld(Kernel::HLERequestContext& ctx); | ||||
|     void CreateGeneralService(Kernel::HLERequestContext& ctx); | ||||
| }; | ||||
|  | ||||
| } // namespace NIFM | ||||
| } // namespace Service | ||||
							
								
								
									
										36
									
								
								src/core/hle/service/nifm/nifm_s.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/core/hle/service/nifm/nifm_s.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| // 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/nifm/nifm.h" | ||||
| #include "core/hle/service/nifm/nifm_s.h" | ||||
|  | ||||
| namespace Service { | ||||
| namespace NIFM { | ||||
|  | ||||
| void NIFM_S::CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<IGeneralService>(); | ||||
|     LOG_DEBUG(Service, "called"); | ||||
| } | ||||
|  | ||||
| void NIFM_S::CreateGeneralService(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<IGeneralService>(); | ||||
|     LOG_DEBUG(Service, "called"); | ||||
| } | ||||
|  | ||||
| NIFM_S::NIFM_S() : ServiceFramework("nifm:s") { | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {4, &NIFM_S::CreateGeneralServiceOld, "CreateGeneralServiceOld"}, | ||||
|         {5, &NIFM_S::CreateGeneralService, "CreateGeneralService"}, | ||||
|     }; | ||||
|     RegisterHandlers(functions); | ||||
| } | ||||
|  | ||||
| } // namespace NIFM | ||||
| } // namespace Service | ||||
							
								
								
									
										24
									
								
								src/core/hle/service/nifm/nifm_s.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/core/hle/service/nifm/nifm_s.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| // Copyright 2018 yuzu emulator team | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include "core/hle/kernel/hle_ipc.h" | ||||
| #include "core/hle/service/service.h" | ||||
|  | ||||
| namespace Service { | ||||
| namespace NIFM { | ||||
|  | ||||
| class NIFM_S final : public ServiceFramework<NIFM_S> { | ||||
| public: | ||||
|     NIFM_S(); | ||||
|     ~NIFM_S() = default; | ||||
|  | ||||
| private: | ||||
|     void CreateGeneralServiceOld(Kernel::HLERequestContext& ctx); | ||||
|     void CreateGeneralService(Kernel::HLERequestContext& ctx); | ||||
| }; | ||||
|  | ||||
| } // namespace NIFM | ||||
| } // namespace Service | ||||
							
								
								
									
										36
									
								
								src/core/hle/service/nifm/nifm_u.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/core/hle/service/nifm/nifm_u.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| // 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/nifm/nifm.h" | ||||
| #include "core/hle/service/nifm/nifm_u.h" | ||||
|  | ||||
| namespace Service { | ||||
| namespace NIFM { | ||||
|  | ||||
| void NIFM_U::CreateGeneralServiceOld(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<IGeneralService>(); | ||||
|     LOG_DEBUG(Service, "called"); | ||||
| } | ||||
|  | ||||
| void NIFM_U::CreateGeneralService(Kernel::HLERequestContext& ctx) { | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushIpcInterface<IGeneralService>(); | ||||
|     LOG_DEBUG(Service, "called"); | ||||
| } | ||||
|  | ||||
| NIFM_U::NIFM_U() : ServiceFramework("nifm:u") { | ||||
|     static const FunctionInfo functions[] = { | ||||
|         {4, &NIFM_U::CreateGeneralServiceOld, "CreateGeneralServiceOld"}, | ||||
|         {5, &NIFM_U::CreateGeneralService, "CreateGeneralService"}, | ||||
|     }; | ||||
|     RegisterHandlers(functions); | ||||
| } | ||||
|  | ||||
| } // namespace NIFM | ||||
| } // namespace Service | ||||
							
								
								
									
										24
									
								
								src/core/hle/service/nifm/nifm_u.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/core/hle/service/nifm/nifm_u.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| // Copyright 2018 yuzu emulator team | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include "core/hle/kernel/hle_ipc.h" | ||||
| #include "core/hle/service/service.h" | ||||
|  | ||||
| namespace Service { | ||||
| namespace NIFM { | ||||
|  | ||||
| class NIFM_U final : public ServiceFramework<NIFM_U> { | ||||
| public: | ||||
|     NIFM_U(); | ||||
|     ~NIFM_U() = default; | ||||
|  | ||||
| private: | ||||
|     void CreateGeneralServiceOld(Kernel::HLERequestContext& ctx); | ||||
|     void CreateGeneralService(Kernel::HLERequestContext& ctx); | ||||
| }; | ||||
|  | ||||
| } // namespace NIFM | ||||
| } // namespace Service | ||||
| @@ -22,6 +22,7 @@ | ||||
| #include "core/hle/service/filesystem/filesystem.h" | ||||
| #include "core/hle/service/hid/hid.h" | ||||
| #include "core/hle/service/lm/lm.h" | ||||
| #include "core/hle/service/nifm/nifm.h" | ||||
| #include "core/hle/service/nvdrv/nvdrv.h" | ||||
| #include "core/hle/service/pctl/pctl.h" | ||||
| #include "core/hle/service/service.h" | ||||
| @@ -180,6 +181,7 @@ void Init() { | ||||
|     FileSystem::InstallInterfaces(*SM::g_service_manager); | ||||
|     HID::InstallInterfaces(*SM::g_service_manager); | ||||
|     LM::InstallInterfaces(*SM::g_service_manager); | ||||
|     NIFM::InstallInterfaces(*SM::g_service_manager); | ||||
|     Nvidia::InstallInterfaces(*SM::g_service_manager); | ||||
|     PCTL::InstallInterfaces(*SM::g_service_manager); | ||||
|     Sockets::InstallInterfaces(*SM::g_service_manager); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user