From 1aebc58a32108c8e078b4578448f1892ca755dcc Mon Sep 17 00:00:00 2001 From: plutoo Date: Sat, 10 Mar 2018 18:08:02 +0100 Subject: [PATCH] Minor fixes, now gets to whitescreen --- nx/include/switch/nvidia/buffer.h | 1 + nx/include/switch/nvidia/channel.h | 1 + nx/source/nvidia/address_space.c | 14 +++----------- nx/source/nvidia/buffer.c | 4 ++++ nx/source/nvidia/channel.c | 4 ++++ nx/source/nvidia/gpu/gpu.c | 3 +++ 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/nx/include/switch/nvidia/buffer.h b/nx/include/switch/nvidia/buffer.h index d4db9751..ca8bbe66 100644 --- a/nx/include/switch/nvidia/buffer.h +++ b/nx/include/switch/nvidia/buffer.h @@ -250,6 +250,7 @@ typedef struct { } NvBuffer; Result nvbufInit(void); +u32 nvbufGetNvmapFd(void); void nvbufExit(void); Result nvbufCreate(NvBuffer* m, size_t size, u32 align, NvBufferKind kind); diff --git a/nx/include/switch/nvidia/channel.h b/nx/include/switch/nvidia/channel.h index bc2d5613..16b3b155 100644 --- a/nx/include/switch/nvidia/channel.h +++ b/nx/include/switch/nvidia/channel.h @@ -9,3 +9,4 @@ Result nvchannelCreate(NvChannel* c, const char* dev); void nvchannelClose(NvChannel* c); Result nvchannelSetPriority(NvChannel* c, NvChannelPriority prio); +Result nvchannelSetNvmapFd(NvChannel* c); diff --git a/nx/source/nvidia/address_space.c b/nx/source/nvidia/address_space.c index ee0211ec..74978cc3 100644 --- a/nx/source/nvidia/address_space.c +++ b/nx/source/nvidia/address_space.c @@ -12,7 +12,7 @@ Result nvasCreate(NvAddressSpace* a) a->fd = -1; if (R_SUCCEEDED(rc)) - rc = nvioctlNvhostAsGpu_InitializeEx(a->fd, 1, 0x100); + rc = nvioctlNvhostAsGpu_InitializeEx(a->fd, 1, 0x10000); if (R_FAILED(rc)) nvasClose(a); @@ -47,14 +47,6 @@ Result nvasMapBuffer(NvAddressSpace* a, NvBuffer* buffer, NvBufferKind kind, iov return nvioctlNvhostAsGpu_MapBufferEx(a->fd, 0, kind, buffer->fd, 0, 0, buffer->size, 0, iova_out); } -Result nvasBindToChannel(NvAddressSpace* a, NvChannel* channel) -{ - Result rc; - - rc = nvioctlNvhostAsGpu_BindChannel(a->fd, channel->fd); - - if (R_SUCCEEDED(rc)) - rc = nvioctlChannel_SetNvmapFd(channel->fd, a->fd); - - return rc; +Result nvasBindToChannel(NvAddressSpace* a, NvChannel* channel) { + return nvioctlNvhostAsGpu_BindChannel(a->fd, channel->fd); } diff --git a/nx/source/nvidia/buffer.c b/nx/source/nvidia/buffer.c index 535be161..bab5bc3e 100644 --- a/nx/source/nvidia/buffer.c +++ b/nx/source/nvidia/buffer.c @@ -35,6 +35,10 @@ void nvbufExit(void) } } +u32 nvbufGetNvmapFd(void) { + return g_nvmap_fd; +} + static Result _nvbufCreate(NvBuffer* m, size_t size, u32 flags, u32 align, NvBufferKind kind) { Result rc; diff --git a/nx/source/nvidia/channel.c b/nx/source/nvidia/channel.c index f069da03..be1e6740 100644 --- a/nx/source/nvidia/channel.c +++ b/nx/source/nvidia/channel.c @@ -31,3 +31,7 @@ void nvchannelClose(NvChannel* c) Result nvchannelSetPriority(NvChannel* c, NvChannelPriority prio) { return nvioctlChannel_SetPriority(c->fd, prio); } + +Result nvchannelSetNvmapFd(NvChannel* c) { + return nvioctlChannel_SetNvmapFd(c->fd, nvbufGetNvmapFd()); +} diff --git a/nx/source/nvidia/gpu/gpu.c b/nx/source/nvidia/gpu/gpu.c index 2cae5204..5829b2c2 100644 --- a/nx/source/nvidia/gpu/gpu.c +++ b/nx/source/nvidia/gpu/gpu.c @@ -21,6 +21,9 @@ Result nvgpuCreate(NvGpu* g) if (R_SUCCEEDED(rc)) rc = nvasBindToChannel(&g->addr_space, &g->gpu_channel); + if (R_SUCCEEDED(rc)) + rc = nvchannelSetNvmapFd(&g->gpu_channel); + if (R_SUCCEEDED(rc)) rc = nvfifoCreate(&g->gpfifo, &g->gpu_channel);