mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-06-01 00:03:17 +00:00
Define remaining ioctls
This commit is contained in:
parent
23883bd42b
commit
4abc2dea49
2 changed files with 62 additions and 3 deletions
|
@ -22,13 +22,40 @@ s32* submits_addr = 0;
|
||||||
s32 GcDevice::ioctl(u64 cmd, Common::VaCtx* args) {
|
s32 GcDevice::ioctl(u64 cmd, Common::VaCtx* args) {
|
||||||
auto command = GcCommands(cmd);
|
auto command = GcCommands(cmd);
|
||||||
switch(command) {
|
switch(command) {
|
||||||
|
case GcCommands::FlushGarlic: {
|
||||||
|
LOG_ERROR(Lib_GnmDriver, "ioctl FlushGarlic");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GcCommands::SubmitDone: {
|
||||||
|
ASSERT(true);
|
||||||
|
LOG_ERROR(Lib_GnmDriver, "ioctl SubmitDone");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GcCommands::WaitIdle: {
|
||||||
|
ASSERT(true);
|
||||||
|
LOG_ERROR(Lib_GnmDriver, "ioctl WaitIdle");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GcCommands::WaitFree: {
|
||||||
|
ASSERT(true);
|
||||||
|
LOG_ERROR(Lib_GnmDriver, "ioctl WaitFree");
|
||||||
|
break;
|
||||||
|
}
|
||||||
case GcCommands::GetNumTcaUnits: {
|
case GcCommands::GetNumTcaUnits: {
|
||||||
auto data = vaArgPtr<s32*>(&args->va_list);
|
auto data = vaArgPtr<s32*>(&args->va_list);
|
||||||
*data = 0;
|
*data = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GcCommands::AreSubmitsAllowed: {
|
case GcCommands::SwitchBuffer: {
|
||||||
LOG_INFO(Lib_GnmDriver, "ioctl AreSubmitsAllowed");
|
ASSERT(true);
|
||||||
|
LOG_ERROR(Lib_GnmDriver, "ioctl SwitchBuffer");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GcCommands::DebugHardwareStatus: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GcCommands::InitializeSubmits: {
|
||||||
|
LOG_INFO(Lib_GnmDriver, "ioctl InitializeSubmits");
|
||||||
if (submits_addr == nullptr) {
|
if (submits_addr == nullptr) {
|
||||||
auto* memory = Core::Memory::Instance();
|
auto* memory = Core::Memory::Instance();
|
||||||
s32* out_addr;
|
s32* out_addr;
|
||||||
|
@ -48,6 +75,10 @@ s32 GcDevice::ioctl(u64 cmd, Common::VaCtx* args) {
|
||||||
*submits_addr = 0;
|
*submits_addr = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GcCommands::UnmapComputeQueue: {
|
||||||
|
LOG_ERROR(Lib_GnmDriver, "ioctl UnmapComputeQueue");
|
||||||
|
break;
|
||||||
|
}
|
||||||
case GcCommands::SetGsRingSizes: {
|
case GcCommands::SetGsRingSizes: {
|
||||||
auto data = vaArgPtr<SetGsRingSizesArgs>(&args->va_list);
|
auto data = vaArgPtr<SetGsRingSizesArgs>(&args->va_list);
|
||||||
LOG_ERROR(Lib_GnmDriver, "unhandled ioctl SetGsRingSizes, esgs size = {:#x}, gsvs size = {:#x}", data->esgs_ring_size, data->gsvs_ring_size);
|
LOG_ERROR(Lib_GnmDriver, "unhandled ioctl SetGsRingSizes, esgs size = {:#x}, gsvs size = {:#x}", data->esgs_ring_size, data->gsvs_ring_size);
|
||||||
|
@ -69,6 +100,14 @@ s32 GcDevice::ioctl(u64 cmd, Common::VaCtx* args) {
|
||||||
data[3] = 0;
|
data[3] = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case GcCommands::DingDong: {
|
||||||
|
ASSERT(true);
|
||||||
|
LOG_ERROR(Lib_GnmDriver, "ioctl DingDong");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GcCommands::RequiresNeoCompat: {
|
||||||
|
return POSIX_ENODEV;
|
||||||
|
}
|
||||||
case GcCommands::SubmitEop: {
|
case GcCommands::SubmitEop: {
|
||||||
ASSERT(true);
|
ASSERT(true);
|
||||||
LOG_ERROR(Lib_GnmDriver, "ioctl SubmitEop");
|
LOG_ERROR(Lib_GnmDriver, "ioctl SubmitEop");
|
||||||
|
@ -82,7 +121,17 @@ s32 GcDevice::ioctl(u64 cmd, Common::VaCtx* args) {
|
||||||
auto data = vaArgPtr<MapComputeQueueArgs>(&args->va_list);
|
auto data = vaArgPtr<MapComputeQueueArgs>(&args->va_list);
|
||||||
auto pipe_id = data->pipe_lo - 1;
|
auto pipe_id = data->pipe_lo - 1;
|
||||||
auto ring_size = pow(2, data->ring_size_dw);
|
auto ring_size = pow(2, data->ring_size_dw);
|
||||||
|
data->pipe_priority = 0;
|
||||||
LOG_ERROR(Lib_GnmDriver, "ioctl MapComputeQueue, pipe_id = {}", pipe_id);
|
LOG_ERROR(Lib_GnmDriver, "ioctl MapComputeQueue, pipe_id = {}", pipe_id);
|
||||||
|
Libraries::GnmDriver::sceGnmMapComputeQueue(pipe_id, data->queue_id, data->ring_base_addr, ring_size, data->read_ptr_addr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case GcCommands::MapComputeQueueWithPriority: {
|
||||||
|
ASSERT(true);
|
||||||
|
auto data = vaArgPtr<MapComputeQueueArgs>(&args->va_list);
|
||||||
|
auto pipe_id = data->pipe_lo - 1;
|
||||||
|
auto ring_size = pow(2, data->ring_size_dw);
|
||||||
|
LOG_ERROR(Lib_GnmDriver, "ioctl MapComputeQueueWithPriority, pipe_id = {}", pipe_id);
|
||||||
Libraries::GnmDriver::sceGnmMapComputeQueueWithPriority(pipe_id, data->queue_id, data->ring_base_addr, ring_size, data->read_ptr_addr, data->pipe_priority);
|
Libraries::GnmDriver::sceGnmMapComputeQueueWithPriority(pipe_id, data->queue_id, data->ring_base_addr, ring_size, data->read_ptr_addr, data->pipe_priority);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,13 +30,23 @@ public:
|
||||||
s64 pwrite(const void* buf, size_t nbytes, u64 offset) override;
|
s64 pwrite(const void* buf, size_t nbytes, u64 offset) override;
|
||||||
private:
|
private:
|
||||||
enum class GcCommands : u64 {
|
enum class GcCommands : u64 {
|
||||||
|
FlushGarlic = 0xc0048114,
|
||||||
|
SubmitDone = 0xc0048116,
|
||||||
|
WaitIdle = 0xc0048117,
|
||||||
|
WaitFree = 0xc004811d,
|
||||||
GetNumTcaUnits = 0xc004811f,
|
GetNumTcaUnits = 0xc004811f,
|
||||||
AreSubmitsAllowed = 0xc008811b,
|
SwitchBuffer = 0xc0088101,
|
||||||
|
DebugHardwareStatus = 0xc0088111,
|
||||||
|
InitializeSubmits = 0xc008811b,
|
||||||
|
UnmapComputeQueue = 0xc00c810e,
|
||||||
SetGsRingSizes = 0xc00c8110,
|
SetGsRingSizes = 0xc00c8110,
|
||||||
Submit = 0xc0108102,
|
Submit = 0xc0108102,
|
||||||
GetCuMask = 0xc010810b,
|
GetCuMask = 0xc010810b,
|
||||||
|
DingDong = 0xc010811c,
|
||||||
|
RequiresNeoCompat = 0xc0108120,
|
||||||
SubmitEop = 0xc020810c,
|
SubmitEop = 0xc020810c,
|
||||||
MapComputeQueue = 0xc030810d,
|
MapComputeQueue = 0xc030810d,
|
||||||
|
MapComputeQueueWithPriority = 0xc030811a,
|
||||||
SetWaveLimitMultipliers = 0xc030811e,
|
SetWaveLimitMultipliers = 0xc030811e,
|
||||||
MipStatsReport = 0xc0848119,
|
MipStatsReport = 0xc0848119,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue