diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp index 41be2f8084..76a8f423ca 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.cpp @@ -471,7 +471,7 @@ int cellSpursEventFlagGetClearMode(mem_ptr_t eventFlag, mem3 int cellSpursEventFlagGetTasksetAddress(mem_ptr_t eventFlag, mem_ptr_t taskset) { - cellSpurs->Todo("cellSpursEventFlagTryWait(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); + cellSpurs->Todo("cellSpursEventFlagGetTasksetAddress(eventFlag_addr=0x%x, taskset_addr=0x%x)", eventFlag.GetAddr(), taskset.GetAddr()); if (eventFlag.GetAddr() % 128 != 0) { @@ -716,9 +716,23 @@ int cellSpursTasksetAttributeSetName() return CELL_OK; } -int _cellSpursTasksetAttribute2Initialize() +int _cellSpursTasksetAttribute2Initialize(mem_ptr_t attribute, u32 revision) { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("_cellSpursTasksetAttribute2Initialize(attribute_addr=0x%x, revision=%d)", attribute.GetAddr(), revision); + + attribute->revision = revision; + attribute->name_addr = NULL; + attribute->argTaskset = 0; + + for (int i = 0; i < 8; i++) + { + attribute->priority[i] = 1; + } + + attribute->maxContention = 8; + attribute->enableClearLs = 0; + attribute->CellSpursTaskNameBuffer_addr = 0; + return CELL_OK; } @@ -770,9 +784,26 @@ int cellSpursTaskAttributeSetExitCodeContainer() return CELL_OK; } -int _cellSpursTaskAttribute2Initialize() +int _cellSpursTaskAttribute2Initialize(mem_ptr_t attribute, u32 revision) { - UNIMPLEMENTED_FUNC(cellSpurs); + cellSpurs->Warning("_cellSpursTaskAttribute2Initialize(attribute_addr=0x%x, revision=%d)", attribute.GetAddr(), revision); + + attribute->revision = revision; + attribute->sizeContext = 0; + attribute->eaContext = NULL; + + for (int c = 0; c < 4; c++) + { + attribute->lsPattern.u32[c] = 0; + } + + for (int i = 0; i < 2; i++) + { + attribute->lsPattern.u64[i] = 0; + } + + attribute->name_addr = 0; + return CELL_OK; } diff --git a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h index 633da2d541..13d56dfaef 100644 --- a/rpcs3/Emu/SysCalls/Modules/cellSpurs.h +++ b/rpcs3/Emu/SysCalls/Modules/cellSpurs.h @@ -26,30 +26,30 @@ enum CELL_SPURS_TASK_ERROR_PERM = 0x80410909, CELL_SPURS_TASK_ERROR_BUSY = 0x8041090A, CELL_SPURS_TASK_ERROR_FAULT = 0x8041090D, - CELL_SPURS_TASK_ERROR_STAT = 0x8041090F, CELL_SPURS_TASK_ERROR_ALIGN = 0x80410910, + CELL_SPURS_TASK_ERROR_STAT = 0x8041090F, CELL_SPURS_TASK_ERROR_NULL_POINTER = 0x80410911, CELL_SPURS_TASK_ERROR_FATAL = 0x80410914, - CELL_SPURS_TASK_ERROR_SHUTDOWN = 0x80410920, + CELL_SPURS_TASK_ERROR_SHUTDOWN = 0x80410920, }; // Core CellSpurs structures. struct CellSpurs -{ - SPURSManager *spurs; +{ + SPURSManager *spurs; }; struct CellSpurs2 -{ +{ SPURSManager *spurs; }; struct CellSpursAttribute -{ - SPURSManagerAttribute *attr; +{ + SPURSManagerAttribute *attr; }; -struct CellSpursEventFlag +struct CellSpursEventFlag { SPURSManagerEventFlag *eventFlag; }; @@ -60,87 +60,87 @@ struct CellSpursTaskset }; struct CellSpursInfo -{ +{ be_t nSpus; be_t spuThreadGroupPriority; - be_t ppuThreadPriority; - bool exitIfNoWork; - bool spurs2; + be_t ppuThreadPriority; + bool exitIfNoWork; + bool spurs2; be_t traceBuffer_addr; //void *traceBuffer; - be_t traceBufferSize; - be_t traceMode; + be_t traceBufferSize; + be_t traceMode; be_t spuThreadGroup; //typedef u32 sys_spu_thread_group_t; be_t spuThreads[8]; //typedef u32 sys_spu_thread_t; - be_t spursHandlerThread0; - be_t spursHandlerThread1; - s8 namePrefix[CELL_SPURS_NAME_MAX_LENGTH+1]; - be_t namePrefixLength; - be_t deadlineMissCounter; - be_t deadlineMeetCounter; - //u8 padding[]; + be_t spursHandlerThread0; + be_t spursHandlerThread1; + s8 namePrefix[CELL_SPURS_NAME_MAX_LENGTH+1]; + be_t namePrefixLength; + be_t deadlineMissCounter; + be_t deadlineMeetCounter; + //u8 padding[]; }; -struct CellSpursExceptionInfo -{ - be_t spu_thread; - be_t spu_npc; - be_t cause; - be_t option; +struct CellSpursExceptionInfo +{ + be_t spu_thread; + be_t spu_npc; + be_t cause; + be_t option; }; struct CellSpursTraceInfo -{ - be_t spu_thread[8]; - be_t count[8]; - be_t spu_thread_grp; - be_t nspu; - //u8 padding[]; +{ + be_t spu_thread[8]; + be_t count[8]; + be_t spu_thread_grp; + be_t nspu; + //u8 padding[]; }; -struct CellTraceHeader -{ - u8 tag; - u8 length; - u8 cpu; - u8 thread; - be_t time; +struct CellTraceHeader +{ + u8 tag; + u8 length; + u8 cpu; + u8 thread; + be_t time; }; struct CellSpursTracePacket -{ +{ struct header_struct - { - u8 tag; - u8 length; - u8 spu; - u8 workload; - be_t time; + { + u8 tag; + u8 length; + u8 spu; + u8 workload; + be_t time; } header; struct data_struct { struct load_struct - { - be_t ea; - be_t ls; - be_t size; - } load; + { + be_t ea; + be_t ls; + be_t size; + } load; struct map_struct - { - be_t offset; - be_t ls; - be_t size; - } map; + { + be_t offset; + be_t ls; + be_t size; + } map; struct start_struct - { + { s8 module[4]; - be_t level; - be_t ls; - } start; + be_t level; + be_t ls; + } start; - be_t user; + be_t user; be_t guid; } data; }; @@ -152,94 +152,94 @@ typedef void (*CellSpursGlobalExceptionEventHandler)(mem_ptr_t spurs, typedef void (*CellSpursTasksetExceptionEventHandler)(mem_ptr_t spurs, mem_ptr_t taskset, u32 idTask, const mem_ptr_t info, mem_ptr_t arg); -struct CellSpursTasksetInfo -{ - //CellSpursTaskInfo taskInfo[CELL_SPURS_MAX_TASK]; - be_t argument; - be_t idWorkload; +struct CellSpursTasksetInfo +{ + //CellSpursTaskInfo taskInfo[CELL_SPURS_MAX_TASK]; + be_t argument; + be_t idWorkload; be_t idLastScheduledTask; //typedef unsigned CellSpursTaskId - be_t name_addr; - CellSpursTasksetExceptionEventHandler exceptionEventHandler; + be_t name_addr; + CellSpursTasksetExceptionEventHandler exceptionEventHandler; be_t exceptionEventHandlerArgument_addr; //void *exceptionEventHandlerArgument - be_t sizeTaskset; - //be_t reserved[]; + be_t sizeTaskset; + //be_t reserved[]; }; -struct CellSpursTaskset2 +struct CellSpursTaskset2 { be_t skip[10496]; }; -struct CellSpursTasksetAttribute2 -{ - be_t revision; - be_t name_addr; - be_t argTaskset; - u8 priority[8]; - be_t maxContention; - be_t enableClearLs; +struct CellSpursTasksetAttribute2 +{ + be_t revision; + be_t name_addr; + be_t argTaskset; + u8 priority[8]; + be_t maxContention; + be_t enableClearLs; be_t CellSpursTaskNameBuffer_addr; //??? *taskNameBuffer - //be_t __reserved__[]; + //be_t __reserved__[]; }; // cellSpurs task structures. -struct CellSpursTaskNameBuffer -{ - char taskName[CELL_SPURS_MAX_TASK][CELL_SPURS_MAX_TASK_NAME_LENGTH]; +struct CellSpursTaskNameBuffer +{ + char taskName[CELL_SPURS_MAX_TASK][CELL_SPURS_MAX_TASK_NAME_LENGTH]; }; -struct CellSpursTraceTaskData -{ - be_t incident; - be_t task; +struct CellSpursTraceTaskData +{ + be_t incident; + be_t task; }; typedef be_t be_u32; typedef be_t be_u64; -struct CellSpursTaskArgument -{ - be_u32 u32[4]; - be_u64 u64[2]; -}; - -struct CellSpursTaskLsPattern +struct CellSpursTaskArgument { be_u32 u32[4]; be_u64 u64[2]; }; -struct CellSpursTaskAttribute2 -{ - be_t revision; - be_t sizeContext; - be_t eaContext; - CellSpursTaskLsPattern lsPattern; //??? - be_t name_addr; - //be_t __reserved__[]; +struct CellSpursTaskLsPattern +{ + be_u32 u32[4]; + be_u64 u64[2]; }; -struct CellSpursTaskExitCode +struct CellSpursTaskAttribute2 +{ + be_t revision; + be_t sizeContext; + be_t eaContext; + CellSpursTaskLsPattern lsPattern; + be_t name_addr; + //be_t __reserved__[]; +}; + +struct CellSpursTaskExitCode { unsigned char skip[128]; }; -struct CellSpursTaskInfo -{ - CellSpursTaskLsPattern lsPattern; - CellSpursTaskArgument argument; +struct CellSpursTaskInfo +{ + CellSpursTaskLsPattern lsPattern; + CellSpursTaskArgument argument; const be_t eaElf_addr; //void *eaElf const be_t eaContext_addr; //void *eaContext - be_t sizeContext; - be_t state; - be_t hasSignal; - const be_t CellSpursTaskExitCode_addr; - u8 guid[8]; - //be_t reserved[]; + be_t sizeContext; + be_t state; + be_t hasSignal; + const be_t CellSpursTaskExitCode_addr; + u8 guid[8]; + //be_t reserved[]; }; -struct CellSpursTaskBinInfo -{ +struct CellSpursTaskBinInfo +{ be_t eaElf; be_t sizeContext; be_t __reserved__;