Fixed up naming/structs/enums. Used vector instead of array for "gpfifo_entry"

This commit is contained in:
David Marcec
2018-02-04 23:06:21 -08:00
parent 356a26cccc
commit 0ee97a0d85
2 changed files with 32 additions and 33 deletions

View File

@@ -15,22 +15,22 @@ u32 nvhost_gpu::ioctl(u32 command, const std::vector<u8>& input, std::vector<u8>
LOG_DEBUG(Service_NVDRV, "Got Ioctl 0x%x, inputsz: 0x%x, outputsz: 0x%x", command, input.size(),
output.size());
switch (command) {
case IocSetNVMAPfdCommand:
switch (static_cast<IoctlCommand>(command)) {
case IoctlCommand::IocSetNVMAPfdCommand:
return SetNVMAPfd(input, output);
case IocSetClientDataCommand:
case IoctlCommand::IocSetClientDataCommand:
return SetClientData(input, output);
case IocGetClientDataCommand:
case IoctlCommand::IocGetClientDataCommand:
return GetClientData(input, output);
case IocZCullBind:
case IoctlCommand::IocZCullBind:
return ZCullBind(input, output);
case IocSetErrorNotifierCommand:
case IoctlCommand::IocSetErrorNotifierCommand:
return SetErrorNotifier(input, output);
case IocChannelSetPriorityCommand:
case IoctlCommand::IocChannelSetPriorityCommand:
return SetChannelPriority(input, output);
case IocAllocGPFIFOEx2Command:
case IoctlCommand::IocAllocGPFIFOEx2Command:
return AllocGPFIFOEx2(input, output);
case IocAllocObjCtxCommand:
case IoctlCommand::IocAllocObjCtxCommand:
return AllocateObjectContext(input, output);
}
@@ -103,10 +103,10 @@ u32 nvhost_gpu::AllocGPFIFOEx2(const std::vector<u8>& input, std::vector<u8>& ou
std::memcpy(&params, input.data(), input.size());
LOG_WARNING(Service_NVDRV,
"(STUBBED) called, num_entries=%x, flags=%x, unk0=%x, unk1=%x, unk2=%x, unk3=%x",
params.__num_entries, params.__flags, params.__unk0, params.__unk1, params.__unk2,
params.__unk3);
params.__fence_out.id = 0;
params.__fence_out.value = 0;
params.num_entries, params.flags, params.unk0, params.unk1, params.unk2,
params.unk3);
params.fence_out.id = 0;
params.fence_out.value = 0;
std::memcpy(output.data(), &params, output.size());
return 0;
}
@@ -129,9 +129,10 @@ u32 nvhost_gpu::SubmitGPFIFO(const std::vector<u8>& input, std::vector<u8>& outp
LOG_WARNING(Service_NVDRV, "(STUBBED) called, gpfifo=%lx, num_entries=%x, flags=%x",
params.gpfifo, params.num_entries, params.flags);
gpfifo_entry* entries = new gpfifo_entry[params.num_entries];
std::memcpy(entries, &input.data()[24], params.num_entries * 8);
for (int i = 0; i < params.num_entries; i++) {
auto entries = std::vector<gpfifo_entry>();
entries.resize(params.num_entries);
std::memcpy(&entries[0], &input.data()[24], params.num_entries * 8);
for (u32 i = 0; i < params.num_entries; i++) {
u32 unk1 = (entries[i].entry1 >> 8) & 0x3;
u32 sz = (entries[i].entry1 >> 10) & 0x1fffff;
u32 unk2 = entries[i].entry1 >> 31;
@@ -141,7 +142,6 @@ u32 nvhost_gpu::SubmitGPFIFO(const std::vector<u8>& input, std::vector<u8>& outp
params.fence_out.id = 0;
params.fence_out.value = 0;
std::memcpy(output.data(), &params, output.size());
delete[] entries;
return 0;
}

View File

@@ -21,7 +21,7 @@ public:
u32 ioctl(u32 command, const std::vector<u8>& input, std::vector<u8>& output) override;
private:
enum IoctlCommands {
enum class IoctlCommand : u32 {
IocSetNVMAPfdCommand = 0x40044801,
IocSetClientDataCommand = 0x40084714,
IocGetClientDataCommand = 0x80084715,
@@ -33,12 +33,12 @@ private:
};
enum CtxObjects {
_2D = 0x902D,
_3D = 0xB197,
_Compute = 0xB1C0,
_Kepler = 0xA140,
_DMA = 0xB0B5,
_Channel_GPFIFO = 0xB06F,
Ctx2D = 0x902D,
Ctx3D = 0xB197,
CtxCompute = 0xB1C0,
CtxKepler = 0xA140,
CtxDMA = 0xB0B5,
CtxChannelGPFIFO = 0xB06F,
};
struct set_nvmap_fd {
@@ -68,13 +68,13 @@ private:
};
struct alloc_gpfifo_ex2 {
u32_le __num_entries; // in
u32_le __flags; // in
u32_le __unk0; // in (1 works)
struct fence __fence_out; // out
u32_le __unk1; // in
u32_le __unk2; // in
u32_le __unk3; // in
u32_le num_entries; // in
u32_le flags; // in
u32_le unk0; // in (1 works)
fence fence_out; // out
u32_le unk1; // in
u32_le unk2; // in
u32_le unk3; // in
};
struct alloc_obj_ctx {
@@ -93,8 +93,7 @@ private:
u64_le gpfifo; // (ignored) pointer to gpfifo fence structs
u32_le num_entries; // number of fence objects being submitted
u32_le flags;
struct fence fence_out; // returned new fence object for others to wait on
struct gpfifo_entry entries[]; // depends on num_entries
fence fence_out; // returned new fence object for others to wait on
};
u32_le nvmap_fd{};