diff --git a/rpcs3/Emu/Cell/SPURSManager.cpp b/rpcs3/Emu/Cell/SPURSManager.cpp index 83548482dd..ab61442cb9 100644 --- a/rpcs3/Emu/Cell/SPURSManager.cpp +++ b/rpcs3/Emu/Cell/SPURSManager.cpp @@ -1,5 +1,6 @@ #include "stdafx.h" #include "SPURSManager.h" +#include "Emu/Memory/Memory.h" SPURSManager::SPURSManager(SPURSManagerAttribute *attr) { @@ -9,4 +10,20 @@ SPURSManager::SPURSManager(SPURSManagerAttribute *attr) void SPURSManager::Finalize() { delete this->attr; -} \ No newline at end of file +} + +void SPURSManager::AttachLv2EventQueue(u32 queue, mem8_t port, int isDynamic) +{ + //TODO: +} + +void SPURSManager::DetachLv2EventQueue(u8 port) +{ + //TODO: +} + +SPURSManagerTaskset::SPURSManagerTaskset(u32 address, SPURSManagerTasksetAttribute *tattr) +{ + this->tattr = tattr; + this->address = address; +} diff --git a/rpcs3/Emu/Cell/SPURSManager.h b/rpcs3/Emu/Cell/SPURSManager.h index 120a096c43..9ad7ec0a4b 100644 --- a/rpcs3/Emu/Cell/SPURSManager.h +++ b/rpcs3/Emu/Cell/SPURSManager.h @@ -113,15 +113,40 @@ protected: be_t flagDirection; }; +class SPURSManagerTasksetAttribute +{ +public: + SPURSManagerTasksetAttribute(u64 args, mem8_t priority, u32 maxContention) + { + this->args = args; + this->maxContention = maxContention; + } + +protected: + be_t args; + be_t maxContention; +}; + +class SPURSManagerTaskset +{ +public: + SPURSManagerTaskset(u32 address, SPURSManagerTasksetAttribute *tattr); + +protected: + u32 address; + SPURSManagerTasksetAttribute *tattr; +}; + // Main SPURS manager class. class SPURSManager { public: SPURSManager(SPURSManagerAttribute *attr); - SPURSManager(SPURSManagerEventFlag *eventFlag); + void Finalize(); + void AttachLv2EventQueue(u32 queue, mem8_t port, int isDynamic); + void DetachLv2EventQueue(u8 port); protected: SPURSManagerAttribute *attr; - SPURSManagerEventFlag *eventFlag; }; diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 30f8ae3fc8..ede0bfd3d2 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -135,6 +135,7 @@ int cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_tattr->_setMemoryContainerForSpuThread(container); + return CELL_OK; } @@ -368,7 +369,7 @@ int cellSpursSetPreemptionVictimHints(mem_ptr_t spurs, const bool isP int cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t port, int isDynamic) { - cellSpurs.Error("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=0x%x, port_addr=0x%x, isDynamic=%u)", spurs.GetAddr(), queue, port.GetAddr(), isDynamic); + cellSpurs.Warning("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=0x%x, port_addr=0x%x, isDynamic=%u)", spurs.GetAddr(), queue, port.GetAddr(), isDynamic); if (spurs.GetAddr() % 128 != 0) { @@ -382,12 +383,14 @@ int cellSpursAttachLv2EventQueue(mem_ptr_t spurs, u32 queue, mem8_t p return CELL_SPURS_CORE_ERROR_NULL_POINTER; } + spurs->spurs->AttachLv2EventQueue(queue, port, isDynamic); + return CELL_OK; } int cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) { - cellSpurs.Error("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port); + cellSpurs.Warning("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port); if (spurs.GetAddr() % 128 != 0) { @@ -401,6 +404,8 @@ int cellSpursDetachLv2EventQueue(mem_ptr_t spurs, u8 port) return CELL_SPURS_CORE_ERROR_NULL_POINTER; } + spurs->spurs->DetachLv2EventQueue(port); + return CELL_OK; } @@ -954,6 +959,9 @@ int cellSpursCreateTaskset(mem_ptr_t spurs, mem_ptr_ttaskset = new SPURSManagerTaskset(taskset.GetAddr(), tattr); + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h index 4a3a8cf81e..633da2d541 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h @@ -49,6 +49,16 @@ struct CellSpursAttribute SPURSManagerAttribute *attr; }; +struct CellSpursEventFlag +{ + SPURSManagerEventFlag *eventFlag; +}; + +struct CellSpursTaskset +{ + SPURSManagerTaskset *taskset; +}; + struct CellSpursInfo { be_t nSpus; @@ -135,12 +145,6 @@ struct CellSpursTracePacket } data; }; -// cellSpurs taskset structures. -struct CellSpursTaskset -{ - u8 skip[6400]; -}; - // Exception handlers. typedef void (*CellSpursGlobalExceptionEventHandler)(mem_ptr_t spurs, const mem_ptr_t info, u32 id, mem_ptr_t arg); @@ -241,7 +245,3 @@ struct CellSpursTaskBinInfo be_t __reserved__; CellSpursTaskLsPattern lsPattern; }; - -struct CellSpursEventFlag { - SPURSManagerEventFlag *eventFlag; -};