NvMap: added support for loading remote NvMap objects (from id)

This commit is contained in:
fincs 2018-12-09 16:21:12 +01:00 committed by fincs
parent 72a48f6598
commit d87f9541d1
2 changed files with 39 additions and 1 deletions

View File

@ -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;
}

View File

@ -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)