|
@@ -144,6 +144,30 @@ static void SetBufferSwap(Service::Interface* self) {
|
|
|
cmd_buff[1] = 0; // No error
|
|
cmd_buff[1] = 0; // No error
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/**
|
|
|
|
|
+ * GSP_GPU::FlushDataCache service function
|
|
|
|
|
+ *
|
|
|
|
|
+ * This Function is a no-op, We aren't emulating the CPU cache any time soon.
|
|
|
|
|
+ *
|
|
|
|
|
+ * Inputs:
|
|
|
|
|
+ * 1 : Address
|
|
|
|
|
+ * 2 : Size
|
|
|
|
|
+ * 3 : Value 0, some descriptor for the KProcess Handle
|
|
|
|
|
+ * 4 : KProcess handle
|
|
|
|
|
+ * Outputs:
|
|
|
|
|
+ * 1 : Result of function, 0 on success, otherwise error code
|
|
|
|
|
+ */
|
|
|
|
|
+static void FlushDataCache(Service::Interface* self) {
|
|
|
|
|
+ u32* cmd_buff = Kernel::GetCommandBuffer();
|
|
|
|
|
+ u32 address = cmd_buff[1];
|
|
|
|
|
+ u32 size = cmd_buff[2];
|
|
|
|
|
+ u32 process = cmd_buff[4];
|
|
|
|
|
+
|
|
|
|
|
+ // TODO(purpasmart96): Verify return header on HW
|
|
|
|
|
+
|
|
|
|
|
+ cmd_buff[1] = RESULT_SUCCESS.raw; // No error
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* GSP_GPU::RegisterInterruptRelayQueue service function
|
|
* GSP_GPU::RegisterInterruptRelayQueue service function
|
|
|
* Inputs:
|
|
* Inputs:
|
|
@@ -335,7 +359,7 @@ const Interface::FunctionInfo FunctionTable[] = {
|
|
|
{0x00050200, SetBufferSwap, "SetBufferSwap"},
|
|
{0x00050200, SetBufferSwap, "SetBufferSwap"},
|
|
|
{0x00060082, nullptr, "SetCommandList"},
|
|
{0x00060082, nullptr, "SetCommandList"},
|
|
|
{0x000700C2, nullptr, "RequestDma"},
|
|
{0x000700C2, nullptr, "RequestDma"},
|
|
|
- {0x00080082, nullptr, "FlushDataCache"},
|
|
|
|
|
|
|
+ {0x00080082, FlushDataCache, "FlushDataCache"},
|
|
|
{0x00090082, nullptr, "InvalidateDataCache"},
|
|
{0x00090082, nullptr, "InvalidateDataCache"},
|
|
|
{0x000A0044, nullptr, "RegisterInterruptEvents"},
|
|
{0x000A0044, nullptr, "RegisterInterruptEvents"},
|
|
|
{0x000B0040, nullptr, "SetLcdForceBlack"},
|
|
{0x000B0040, nullptr, "SetLcdForceBlack"},
|