#pragma once #include "Emu/SysCalls/Modules/cellSpurs.h" // Internal class to shape a SPURS attribute. class SPURSManagerAttribute { public: SPURSManagerAttribute(int nSpus, int spuPriority, int ppuPriority, bool exitIfNoWork); int _setNamePrefix(const char *name, u32 size); int _setSpuThreadGroupType(int type); int _setMemoryContainerForSpuThread(u32 container); protected: be_t nSpus; be_t spuThreadGroupPriority; be_t ppuThreadPriority; bool exitIfNoWork; char namePrefix[CELL_SPURS_NAME_MAX_LENGTH+1]; be_t threadGroupType; be_t container; }; class SPURSManagerEventFlag { public: SPURSManagerEventFlag(u32 flagClearMode, u32 flagDirection); u32 _getDirection() const { return this->flagDirection; } u32 _getClearMode() const { return this->flagClearMode; } protected: be_t flagClearMode; be_t flagDirection; }; class SPURSManagerTasksetAttribute { public: SPURSManagerTasksetAttribute(u64 args, mem8_t priority, u32 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); void Finalize(); void AttachLv2EventQueue(u32 queue, mem8_t port, int isDynamic); void DetachLv2EventQueue(u8 port); protected: SPURSManagerAttribute *attr; };