mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
NvMap: added support for loading remote NvMap objects (from id)
This commit is contained in:
parent
72a48f6598
commit
d87f9541d1
@ -16,6 +16,7 @@ u32 nvMapGetFd(void);
|
||||
void nvMapExit(void);
|
||||
|
||||
Result nvMapCreate(NvMap* m, void* cpu_addr, u32 size, u32 align, NvKind kind, bool is_cpu_cacheable);
|
||||
Result nvMapLoadRemote(NvMap* m, u32 id);
|
||||
void nvMapClose(NvMap* m);
|
||||
|
||||
static inline u32 nvMapGetHandle(NvMap* m)
|
||||
@ -28,7 +29,22 @@ static inline u32 nvMapGetId(NvMap* m)
|
||||
return m->id;
|
||||
}
|
||||
|
||||
static inline u32 nvMapGetSize(NvMap* m)
|
||||
{
|
||||
return m->size;
|
||||
}
|
||||
|
||||
static inline void* nvMapGetCpuAddr(NvMap* m)
|
||||
{
|
||||
return m->cpu_addr;
|
||||
}
|
||||
|
||||
static inline bool nvMapIsRemote(NvMap* m)
|
||||
{
|
||||
return !m->cpu_addr;
|
||||
}
|
||||
|
||||
static inline NvKind nvMapGetKind(NvMap* m)
|
||||
{
|
||||
return m->kind;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include <malloc.h>
|
||||
#include <string.h>
|
||||
#include "types.h"
|
||||
#include "result.h"
|
||||
#include "arm/atomics.h"
|
||||
@ -82,6 +82,28 @@ Result nvMapCreate(NvMap* m, void* cpu_addr, u32 size, u32 align, NvKind kind, b
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result nvMapLoadRemote(NvMap* m, u32 id)
|
||||
{
|
||||
Result rc;
|
||||
|
||||
memset(m, 0, sizeof(*m));
|
||||
rc = nvioctlNvmap_FromId(g_nvmap_fd, id, &m->handle);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
m->has_init = true;
|
||||
m->id = id;
|
||||
rc = nvioctlMap_Param(g_nvmap_fd, m->handle, NvMapParam_Size, &m->size);
|
||||
}
|
||||
|
||||
if (R_SUCCEEDED(rc))
|
||||
rc = nvioctlMap_Param(g_nvmap_fd, m->handle, NvMapParam_Kind, (u32*)&m->kind);
|
||||
|
||||
if (R_FAILED(rc))
|
||||
nvMapClose(m);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
void nvMapClose(NvMap* m)
|
||||
{
|
||||
if (!m->has_init)
|
||||
|
Loading…
Reference in New Issue
Block a user