Merge pull request #3420 from namkazt/master2
nvhost_gpu: implement ChannelSetTimeslice
This commit is contained in:
commit
26006cbd2c
|
@ -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(¶ms, 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
|
||||||
|
|
|
@ -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{};
|
||||||
|
|
Reference in New Issue