nvchannel: Implement GET_CLK_RATE and SET_SUBMIT_TIMEOUT

This commit is contained in:
averne 2023-11-30 12:03:43 +01:00 committed by fincs
parent be45a91b9c
commit b615b01d44
2 changed files with 28 additions and 5 deletions

View File

@ -161,6 +161,11 @@ typedef struct {
u32 iova; u32 iova;
} nvioctl_command_buffer_map; } nvioctl_command_buffer_map;
typedef struct {
uint32_t rate;
uint32_t moduleid;
} nvioctl_clk_rate;
#define NVGPU_ZBC_TYPE_INVALID 0 #define NVGPU_ZBC_TYPE_INVALID 0
#define NVGPU_ZBC_TYPE_COLOR 1 #define NVGPU_ZBC_TYPE_COLOR 1
#define NVGPU_ZBC_TYPE_DEPTH 2 #define NVGPU_ZBC_TYPE_DEPTH 2
@ -284,5 +289,7 @@ Result nvioctlChannel_Submit(u32 fd, const nvioctl_cmdbuf *cmdbufs, u32 num_cmdb
const nvioctl_syncpt_incr *syncpt_incrs, u32 num_syncpt_incrs, nvioctl_fence *fences, u32 num_fences); const nvioctl_syncpt_incr *syncpt_incrs, u32 num_syncpt_incrs, nvioctl_fence *fences, u32 num_fences);
Result nvioctlChannel_GetSyncpt(u32 fd, u32 module_id, u32 *syncpt); Result nvioctlChannel_GetSyncpt(u32 fd, u32 module_id, u32 *syncpt);
Result nvioctlChannel_GetModuleClockRate(u32 fd, u32 module_id, u32 *freq); Result nvioctlChannel_GetModuleClockRate(u32 fd, u32 module_id, u32 *freq);
Result nvioctlChannel_SetModuleClockRate(u32 fd, u32 module_id, u32 freq);
Result nvioctlChannel_MapCommandBuffer(u32 fd, nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed); Result nvioctlChannel_MapCommandBuffer(u32 fd, nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed);
Result nvioctlChannel_UnmapCommandBuffer(u32 fd, const nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed); Result nvioctlChannel_UnmapCommandBuffer(u32 fd, const nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed);
Result nvioctlChannel_SetSubmitTimeout(u32 fd, u32 timeout);

View File

@ -254,11 +254,8 @@ Result nvioctlChannel_GetSyncpt(u32 fd, u32 id, u32 *syncpt) {
} }
Result nvioctlChannel_GetModuleClockRate(u32 fd, u32 module_id, u32 *freq) { Result nvioctlChannel_GetModuleClockRate(u32 fd, u32 module_id, u32 *freq) {
struct { nvioctl_clk_rate data = {
__nv_out u32 rate; .moduleid = module_id,
__nv_in u32 module;
} data = {
.module = module_id,
}; };
u32 nr = _NV_IOWR(0, hosversionBefore(8,0,0) ? 0x14 : 0x23, data); u32 nr = _NV_IOWR(0, hosversionBefore(8,0,0) ? 0x14 : 0x23, data);
@ -270,6 +267,25 @@ Result nvioctlChannel_GetModuleClockRate(u32 fd, u32 module_id, u32 *freq) {
return rc; return rc;
} }
Result nvioctlChannel_SetModuleClockRate(u32 fd, u32 module_id, u32 freq) {
nvioctl_clk_rate data = {
.rate = freq,
.moduleid = module_id,
};
return nvIoctl(fd, _NV_IOW(0, 0x08, data), &data);
}
Result nvioctlChannel_SetSubmitTimeout(u32 fd, u32 timeout) {
struct {
__nv_in u32 timeout;
} data = {
.timeout = timeout,
};
return nvIoctl(fd, _NV_IOW(0, 0x07, data), &data);
}
Result nvioctlChannel_MapCommandBuffer(u32 fd, nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed) { Result nvioctlChannel_MapCommandBuffer(u32 fd, nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed) {
if (num_maps > 0x200) if (num_maps > 0x200)
return MAKERESULT(Module_Libnx, LibnxError_OutOfMemory); return MAKERESULT(Module_Libnx, LibnxError_OutOfMemory);