nvhost_gpu: implement ChannelSetTimeslice

This commit is contained in:
namkazy 2020-02-16 11:53:03 +07:00
parent 619f64d7f4
commit 7fadc9c180
2 changed files with 20 additions and 0 deletions

View File

@ -44,6 +44,8 @@ u32 nvhost_gpu::ioctl(Ioctl command, const std::vector<u8>& input, const std::ve
return GetWaitbase(input, output); return GetWaitbase(input, output);
case IoctlCommand::IocChannelSetTimeoutCommand: case IoctlCommand::IocChannelSetTimeoutCommand:
return ChannelSetTimeout(input, output); return ChannelSetTimeout(input, output);
case IoctlCommand::IocChannelSetTimeslice:
return ChannelSetTimeslice(input, output);
default: default:
break; break;
} }
@ -228,4 +230,14 @@ u32 nvhost_gpu::ChannelSetTimeout(const std::vector<u8>& input, std::vector<u8>&
return 0; return 0;
} }
u32 nvhost_gpu::ChannelSetTimeslice(const std::vector<u8>& input, std::vector<u8>& output) {
IoctlSetTimeslice params{};
std::memcpy(&params, input.data(), sizeof(IoctlSetTimeslice));
LOG_INFO(Service_NVDRV, "called, timeslice=0x{:X}", params.timeslice);
channel_timeslice = params.timeslice;
return 0;
}
} // namespace Service::Nvidia::Devices } // namespace Service::Nvidia::Devices

View File

@ -48,6 +48,7 @@ private:
IocAllocObjCtxCommand = 0xC0104809, IocAllocObjCtxCommand = 0xC0104809,
IocChannelGetWaitbaseCommand = 0xC0080003, IocChannelGetWaitbaseCommand = 0xC0080003,
IocChannelSetTimeoutCommand = 0x40044803, IocChannelSetTimeoutCommand = 0x40044803,
IocChannelSetTimeslice = 0xC004481D,
}; };
enum class CtxObjects : u32_le { enum class CtxObjects : u32_le {
@ -101,6 +102,11 @@ private:
static_assert(sizeof(IoctlChannelSetPriority) == 4, static_assert(sizeof(IoctlChannelSetPriority) == 4,
"IoctlChannelSetPriority is incorrect size"); "IoctlChannelSetPriority is incorrect size");
struct IoctlSetTimeslice {
u32_le timeslice;
};
static_assert(sizeof(IoctlSetTimeslice) == 4, "IoctlSetTimeslice is incorrect size");
struct IoctlEventIdControl { struct IoctlEventIdControl {
u32_le cmd; // 0=disable, 1=enable, 2=clear u32_le cmd; // 0=disable, 1=enable, 2=clear
u32_le id; u32_le id;
@ -174,6 +180,7 @@ private:
u64_le user_data{}; u64_le user_data{};
IoctlZCullBind zcull_params{}; IoctlZCullBind zcull_params{};
u32_le channel_priority{}; u32_le channel_priority{};
u32_le channel_timeslice{};
u32 SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& output); u32 SetNVMAPfd(const std::vector<u8>& input, std::vector<u8>& output);
u32 SetClientData(const std::vector<u8>& input, std::vector<u8>& output); u32 SetClientData(const std::vector<u8>& input, std::vector<u8>& output);
@ -188,6 +195,7 @@ private:
const std::vector<u8>& input2, IoctlVersion version); const std::vector<u8>& input2, IoctlVersion version);
u32 GetWaitbase(const std::vector<u8>& input, std::vector<u8>& output); u32 GetWaitbase(const std::vector<u8>& input, std::vector<u8>& output);
u32 ChannelSetTimeout(const std::vector<u8>& input, std::vector<u8>& output); u32 ChannelSetTimeout(const std::vector<u8>& input, std::vector<u8>& output);
u32 ChannelSetTimeslice(const std::vector<u8>& input, std::vector<u8>& output);
std::shared_ptr<nvmap> nvmap_dev; std::shared_ptr<nvmap> nvmap_dev;
u32 assigned_syncpoints{}; u32 assigned_syncpoints{};