From 16fde003236be5930fced25dd95de8aadb6caf1e Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Fri, 18 Oct 2019 22:41:52 -0700 Subject: [PATCH] spsm: update for new-ipc --- nx/include/switch/services/spsm.h | 2 +- nx/source/services/spsm.c | 92 ++++--------------------------- 2 files changed, 11 insertions(+), 83 deletions(-) diff --git a/nx/include/switch/services/spsm.h b/nx/include/switch/services/spsm.h index 67037f78..dfc67492 100644 --- a/nx/include/switch/services/spsm.h +++ b/nx/include/switch/services/spsm.h @@ -6,7 +6,7 @@ */ #pragma once #include "../types.h" -#include "../services/sm.h" +#include "../sf/service.h" Result spsmInitialize(void); void spsmExit(void); diff --git a/nx/source/services/spsm.c b/nx/source/services/spsm.c index 7f47569d..90867bad 100644 --- a/nx/source/services/spsm.c +++ b/nx/source/services/spsm.c @@ -1,32 +1,17 @@ -#include "types.h" -#include "result.h" -#include "arm/atomics.h" -#include "kernel/ipc.h" +#define NX_SERVICE_ASSUME_NON_DOMAIN +#include "service_guard.h" #include "services/spsm.h" -#include "services/sm.h" static Service g_spsmSrv; -static u64 g_refCnt; -Result spsmInitialize(void) { - Result rc = 0; - - atomicIncrement64(&g_refCnt); +NX_GENERATE_SERVICE_GUARD(spsm); - if (serviceIsActive(&g_spsmSrv)) - return 0; - - rc = smGetService(&g_spsmSrv, "spsm"); - - if (R_FAILED(rc)) spsmExit(); - - return rc; +Result _spsmInitialize(void) { + return smGetService(&g_spsmSrv, "spsm"); } -void spsmExit(void) { - if (atomicDecrement64(&g_refCnt) == 0) { - serviceClose(&g_spsmSrv); - } +void _spsmCleanup(void) { + serviceClose(&g_spsmSrv); } Service* spsmGetServiceSession(void) { @@ -34,67 +19,10 @@ Service* spsmGetServiceSession(void) { } Result spsmShutdown(bool reboot) { - IpcCommand c; - ipcInitialize(&c); - - struct { - u64 magic; - u64 cmd_id; - u32 reboot; - } *raw; - - raw = serviceIpcPrepareHeader(&g_spsmSrv, &c, sizeof(*raw)); - - raw->magic = SFCI_MAGIC; - raw->cmd_id = 3; - raw->reboot = reboot; - - Result rc = serviceIpcDispatch(&g_spsmSrv); - - if (R_SUCCEEDED(rc)) { - IpcParsedCommand r; - struct { - u64 magic; - u64 result; - } *resp; - - serviceIpcParse(&g_spsmSrv, &r, sizeof(*resp)); - resp = r.Raw; - - rc = resp->result; - } - - return rc; + const u8 in = reboot != 0; + return serviceDispatchIn(&g_spsmSrv, 3, in); } Result spsmPutErrorState(void) { - IpcCommand c; - ipcInitialize(&c); - - struct { - u64 magic; - u64 cmd_id; - } *raw; - - raw = serviceIpcPrepareHeader(&g_spsmSrv, &c, sizeof(*raw)); - - raw->magic = SFCI_MAGIC; - raw->cmd_id = 10; - - Result rc = serviceIpcDispatch(&g_spsmSrv); - - if (R_SUCCEEDED(rc)) { - IpcParsedCommand r; - struct { - u64 magic; - u64 result; - } *resp; - - serviceIpcParse(&g_spsmSrv, &r, sizeof(*resp)); - resp = r.Raw; - - rc = resp->result; - } - - return rc; + return serviceDispatch(&g_spsmSrv, 10); }