From 0f9d94a7d0b9d6da59458a221a83677c8cde286f Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Sun, 2 Apr 2023 19:37:28 +0300 Subject: [PATCH] [DSP] Stub InvalidateDataCache --- include/services/dsp.hpp | 1 + src/core/services/dsp.cpp | 23 +++++++++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/include/services/dsp.hpp b/include/services/dsp.hpp index e32aa314..5ddf6e14 100644 --- a/include/services/dsp.hpp +++ b/include/services/dsp.hpp @@ -53,6 +53,7 @@ class DSPService { void flushDataCache(u32 messagePointer); void getHeadphoneStatus(u32 messagePointer); void getSemaphoreHandle(u32 messagePointer); + void invalidateDCache(u32 messagePointer); void loadComponent(u32 messagePointer); void readPipeIfPossible(u32 messagePointer); void registerInterruptEvents(u32 messagePointer); diff --git a/src/core/services/dsp.cpp b/src/core/services/dsp.cpp index 9e10fc17..212e8219 100644 --- a/src/core/services/dsp.cpp +++ b/src/core/services/dsp.cpp @@ -8,6 +8,7 @@ namespace DSPCommands { ReadPipeIfPossible = 0x001000C0, LoadComponent = 0x001100C2, FlushDataCache = 0x00130082, + InvalidateDataCache = 0x00140082, RegisterInterruptEvents = 0x00150082, GetSemaphoreHandle = 0x00160000, SetSemaphoreMask = 0x00170040, @@ -32,6 +33,7 @@ void DSPService::handleSyncRequest(u32 messagePointer) { switch (command) { case DSPCommands::ConvertProcessAddressFromDspDram: convertProcessAddressFromDspDram(messagePointer); break; case DSPCommands::FlushDataCache: flushDataCache(messagePointer); break; + case DSPCommands::InvalidateDataCache: invalidateDCache(messagePointer); break; case DSPCommands::GetHeadphoneStatus: getHeadphoneStatus(messagePointer); break; case DSPCommands::GetSemaphoreHandle: getSemaphoreHandle(messagePointer); break; case DSPCommands::LoadComponent: loadComponent(messagePointer); break; @@ -129,19 +131,28 @@ void DSPService::setSemaphoreMask(u32 messagePointer) { } void DSPService::writeProcessPipe(u32 messagePointer) { - u32 channel = mem.read32(messagePointer + 4); - u32 size = mem.read32(messagePointer + 8); - u32 buffer = mem.read32(messagePointer + 16); + const u32 channel = mem.read32(messagePointer + 4); + const u32 size = mem.read32(messagePointer + 8); + const u32 buffer = mem.read32(messagePointer + 16); log("DSP::writeProcessPipe (channel = %d, size = %X, buffer = %08X)\n", channel, size, buffer); mem.write32(messagePointer + 4, Result::Success); } void DSPService::flushDataCache(u32 messagePointer) { - u32 address = mem.read32(messagePointer + 4); - u32 size = mem.read32(messagePointer + 8); - u32 process = mem.read32(messagePointer + 16); + const u32 address = mem.read32(messagePointer + 4); + const u32 size = mem.read32(messagePointer + 8); + const Handle process = mem.read32(messagePointer + 16); log("DSP::FlushDataCache (addr = %08X, size = %08X, process = %X)\n", address, size, process); mem.write32(messagePointer + 4, Result::Success); +} + +void DSPService::invalidateDCache(u32 messagePointer) { + const u32 address = mem.read32(messagePointer + 4); + const u32 size = mem.read32(messagePointer + 8); + const Handle process = mem.read32(messagePointer + 16); + + log("DSP::InvalidateDataCache (addr = %08X, size = %08X, process = %X)\n", address, size, process); + mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file