mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 04:22:50 +02:00
nv: Added __nx_nv_service_type. Closes #633.
This commit is contained in:
parent
a215ae2da2
commit
8d10ef8745
@ -9,6 +9,15 @@
|
|||||||
#include "../sf/service.h"
|
#include "../sf/service.h"
|
||||||
#include "../kernel/event.h"
|
#include "../kernel/event.h"
|
||||||
|
|
||||||
|
/// NvServiceType, for __nx_nv_service_type.
|
||||||
|
typedef enum {
|
||||||
|
NvServiceType_Auto = -1, ///< This is the default. Automatically select the type using \ref appletGetAppletType.
|
||||||
|
NvServiceType_Application = 0, ///< Initializes nvdrv.
|
||||||
|
NvServiceType_Applet = 1, ///< Initializes nvdrv:a.
|
||||||
|
NvServiceType_System = 2, ///< Initializes nvdrv:s.
|
||||||
|
NvServiceType_Factory = 3, ///< Initializes nvdrv:t.
|
||||||
|
} NvServiceType;
|
||||||
|
|
||||||
/// Initialize nvdrv*.
|
/// Initialize nvdrv*.
|
||||||
Result nvInitialize(void);
|
Result nvInitialize(void);
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "services/nv.h"
|
#include "services/nv.h"
|
||||||
#include "nvidia/ioctl.h"
|
#include "nvidia/ioctl.h"
|
||||||
|
|
||||||
|
__attribute__((weak)) NvServiceType __nx_nv_service_type = NvServiceType_Auto;
|
||||||
__attribute__((weak)) u32 __nx_nv_transfermem_size = 0x800000;
|
__attribute__((weak)) u32 __nx_nv_transfermem_size = 0x800000;
|
||||||
|
|
||||||
static Service g_nvSrv;
|
static Service g_nvSrv;
|
||||||
@ -27,23 +28,46 @@ NX_GENERATE_SERVICE_GUARD(nv);
|
|||||||
Result _nvInitialize(void) {
|
Result _nvInitialize(void) {
|
||||||
Result rc = MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
Result rc = MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||||
|
|
||||||
switch (appletGetAppletType()) {
|
if (__nx_nv_service_type == NvServiceType_Auto) {
|
||||||
case AppletType_None:
|
switch (appletGetAppletType()) {
|
||||||
rc = smGetService(&g_nvSrv, "nvdrv:s");
|
case AppletType_None:
|
||||||
break;
|
__nx_nv_service_type = NvServiceType_System;
|
||||||
|
break;
|
||||||
|
|
||||||
case AppletType_Default:
|
case AppletType_Default:
|
||||||
case AppletType_Application:
|
case AppletType_Application:
|
||||||
case AppletType_SystemApplication:
|
case AppletType_SystemApplication:
|
||||||
default:
|
default:
|
||||||
rc = smGetService(&g_nvSrv, "nvdrv");
|
__nx_nv_service_type = NvServiceType_Application;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AppletType_SystemApplet:
|
case AppletType_SystemApplet:
|
||||||
case AppletType_LibraryApplet:
|
case AppletType_LibraryApplet:
|
||||||
case AppletType_OverlayApplet:
|
case AppletType_OverlayApplet:
|
||||||
rc = smGetService(&g_nvSrv, "nvdrv:a");
|
__nx_nv_service_type = NvServiceType_Applet;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (__nx_nv_service_type) {
|
||||||
|
case NvServiceType_Application:
|
||||||
|
rc = smGetService(&g_nvSrv, "nvdrv");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NvServiceType_Applet:
|
||||||
|
rc = smGetService(&g_nvSrv, "nvdrv:a");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NvServiceType_System:
|
||||||
|
rc = smGetService(&g_nvSrv, "nvdrv:s");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NvServiceType_Factory:
|
||||||
|
rc = smGetService(&g_nvSrv, "nvdrv:t");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break; // Leave rc at the error set above.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (R_SUCCEEDED(rc)) {
|
if (R_SUCCEEDED(rc)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user