diff --git a/nx/include/switch/nvidia/channel.h b/nx/include/switch/nvidia/channel.h index 4b0fef07..9bfe1bb8 100644 --- a/nx/include/switch/nvidia/channel.h +++ b/nx/include/switch/nvidia/channel.h @@ -10,4 +10,5 @@ Result nvChannelCreate(NvChannel* c, const char* dev); void nvChannelClose(NvChannel* c); Result nvChannelSetPriority(NvChannel* c, NvChannelPriority prio); +Result nvChannelSetTimeout(NvChannel* c, u32 timeout); Result nvChannelSetNvmapFd(NvChannel* c); diff --git a/nx/include/switch/nvidia/ioctl.h b/nx/include/switch/nvidia/ioctl.h index 95d9b5c6..67f6941c 100644 --- a/nx/include/switch/nvidia/ioctl.h +++ b/nx/include/switch/nvidia/ioctl.h @@ -185,5 +185,6 @@ Result nvioctlChannel_ZCullBind(u32 fd, u64 gpu_va, u32 mode); Result nvioctlChannel_SetErrorNotifier(u32 fd, u32 enable); Result nvioctlChannel_GetErrorNotification(u32 fd, NvError* out); Result nvioctlChannel_SetPriority(u32 fd, u32 priority); +Result nvioctlChannel_SetTimeout(u32 fd, u32 timeout); Result nvioctlChannel_AllocGpfifoEx2(u32 fd, u32 num_entries, u32 flags, u32 unk0, u32 unk1, u32 unk2, u32 unk3, nvioctl_fence *fence_out); Result nvioctlChannel_SetUserData(u32 fd, void* addr); diff --git a/nx/source/nvidia/channel.c b/nx/source/nvidia/channel.c index 419779fe..58270df3 100644 --- a/nx/source/nvidia/channel.c +++ b/nx/source/nvidia/channel.c @@ -40,6 +40,10 @@ Result nvChannelSetPriority(NvChannel* c, NvChannelPriority prio) { return nvioctlChannel_SetPriority(c->fd, prio); } +Result nvChannelSetTimeout(NvChannel* c, u32 timeout) { + return nvioctlChannel_SetTimeout(c->fd, timeout); +} + Result nvChannelSetNvmapFd(NvChannel* c) { return nvioctlChannel_SetNvmapFd(c->fd, nvBufferGetNvmapFd()); } diff --git a/nx/source/nvidia/ioctl/nvchannel.c b/nx/source/nvidia/ioctl/nvchannel.c index cddaf893..89f7afcc 100644 --- a/nx/source/nvidia/ioctl/nvchannel.c +++ b/nx/source/nvidia/ioctl/nvchannel.c @@ -116,6 +116,17 @@ Result nvioctlChannel_SetPriority(u32 fd, u32 priority) { return nvIoctl(fd, _NV_IOW(0x48, 0x0D, data), &data); } +Result nvioctlChannel_SetTimeout(u32 fd, u32 timeout) { + struct { + __nv_in u32 timeout; + } data; + + memset(&data, 0, sizeof(data)); + data.timeout = timeout; + + return nvIoctl(fd, _NV_IOW(0x48, 0x03, data), &data); +} + Result nvioctlChannel_AllocGpfifoEx2(u32 fd, u32 num_entries, u32 flags, u32 unk0, u32 unk1, u32 unk2, u32 unk3, nvioctl_fence *fence_out) { Result rc=0;