mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 07:21:25 +12:00
sys_spinlock implemented
This commit is contained in:
parent
2de22f0321
commit
2c447f686d
8 changed files with 105 additions and 32 deletions
|
@ -23,13 +23,13 @@ int adecRead(void* opaque, u8* buf, int buf_size)
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
||||||
next:
|
next:
|
||||||
if (adec.reader.size < (u32)buf_size /*&& !vdec.just_started*/)
|
if (adec.reader.size < (u32)buf_size /*&& !adec.just_started*/)
|
||||||
{
|
{
|
||||||
while (adec.job.IsEmpty())
|
while (adec.job.IsEmpty())
|
||||||
{
|
{
|
||||||
if (Emu.IsStopped())
|
if (Emu.IsStopped())
|
||||||
{
|
{
|
||||||
ConLog.Warning("vdecRead() aborted");
|
ConLog.Warning("adecRead() aborted");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
Sleep(1);
|
Sleep(1);
|
||||||
|
@ -212,7 +212,7 @@ u32 adecOpen(AudioDecoder* data)
|
||||||
if (Memory.CopyToReal(buf, task.au.addr, task.au.size)) dump.Write(buf, task.au.size);
|
if (Memory.CopyToReal(buf, task.au.addr, task.au.size)) dump.Write(buf, task.au.size);
|
||||||
free(buf);
|
free(buf);
|
||||||
dump.Close();
|
dump.Close();
|
||||||
}*/
|
}
|
||||||
|
|
||||||
if (adec.just_started) // deferred initialization
|
if (adec.just_started) // deferred initialization
|
||||||
{
|
{
|
||||||
|
@ -259,7 +259,7 @@ u32 adecOpen(AudioDecoder* data)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
adec.just_started = false;
|
adec.just_started = false;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
bool last_frame = false;
|
bool last_frame = false;
|
||||||
|
|
||||||
|
@ -271,7 +271,7 @@ u32 adecOpen(AudioDecoder* data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (!adec.ctx) // fake
|
if (!adec.ctx) // fake
|
||||||
{
|
{
|
||||||
AdecFrame frame;
|
AdecFrame frame;
|
||||||
frame.pts = task.au.pts;
|
frame.pts = task.au.pts;
|
||||||
|
@ -285,7 +285,7 @@ u32 adecOpen(AudioDecoder* data)
|
||||||
adec.adecCb->ExecAsCallback(adec.cbFunc, false, adec.id, CELL_ADEC_MSG_TYPE_PCMOUT, CELL_OK, adec.cbArg);
|
adec.adecCb->ExecAsCallback(adec.cbFunc, false, adec.id, CELL_ADEC_MSG_TYPE_PCMOUT, CELL_OK, adec.cbArg);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
last_frame = av_read_frame(adec.fmt, &au) < 0;
|
last_frame = av_read_frame(adec.fmt, &au) < 0;
|
||||||
if (last_frame)
|
if (last_frame)
|
||||||
|
@ -296,14 +296,14 @@ u32 adecOpen(AudioDecoder* data)
|
||||||
au.size = 0;
|
au.size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct VdecFrameHolder : AdecFrame
|
struct AdecFrameHolder : AdecFrame
|
||||||
{
|
{
|
||||||
VdecFrameHolder()
|
AdecFrameHolder()
|
||||||
{
|
{
|
||||||
data = av_frame_alloc();
|
data = av_frame_alloc();
|
||||||
}
|
}
|
||||||
|
|
||||||
~VdecFrameHolder()
|
~AdecFrameHolder()
|
||||||
{
|
{
|
||||||
if (data)
|
if (data)
|
||||||
{
|
{
|
||||||
|
@ -336,7 +336,7 @@ u32 adecOpen(AudioDecoder* data)
|
||||||
|
|
||||||
if (got_frame)
|
if (got_frame)
|
||||||
{
|
{
|
||||||
ConLog.Write("got_frame (%d, vdec: pts=0x%llx, dts=0x%llx)", got_frame, au.pts, au.dts);
|
ConLog.Write("got_frame (%d, pts=0x%llx, dts=0x%llx)", got_frame, au.pts, au.dts);
|
||||||
|
|
||||||
frame.pts = task.au.pts; // ???
|
frame.pts = task.au.pts; // ???
|
||||||
frame.auAddr = task.au.addr;
|
frame.auAddr = task.au.addr;
|
||||||
|
|
|
@ -9,7 +9,7 @@ Module cellSpurs(0x000a, cellSpurs_init);
|
||||||
int _cellSpursAttributeInitialize(mem_ptr_t<CellSpursAttribute> attr, int nSpus, int spuPriority,
|
int _cellSpursAttributeInitialize(mem_ptr_t<CellSpursAttribute> attr, int nSpus, int spuPriority,
|
||||||
int ppuPriority, bool exitIfNoWork)
|
int ppuPriority, bool exitIfNoWork)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursAttributeInitialize(attr_addr=0x%x, nSpus=%u, spuPriority=%u, ppuPriority=%u, exitIfNoWork=%u)",
|
cellSpurs.Error("_cellSpursAttributeInitialize(attr_addr=0x%x, nSpus=%u, spuPriority=%u, ppuPriority=%u, exitIfNoWork=%u)",
|
||||||
attr.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork);
|
attr.GetAddr(), nSpus, spuPriority, ppuPriority, exitIfNoWork);
|
||||||
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ int _cellSpursAttributeInitialize(mem_ptr_t<CellSpursAttribute> attr, int nSpus,
|
||||||
|
|
||||||
int cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_t<CellSpursAttribute> attr, u32 container)
|
int cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_t<CellSpursAttribute> attr, u32 container)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursAttributeSetMemoryContainerForSpuThread(attr_addr=0x%x, container=0x%x)",
|
cellSpurs.Error("cellSpursAttributeSetMemoryContainerForSpuThread(attr_addr=0x%x, container=0x%x)",
|
||||||
attr.GetAddr(), container);
|
attr.GetAddr(), container);
|
||||||
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ int cellSpursAttributeSetMemoryContainerForSpuThread(mem_ptr_t<CellSpursAttribut
|
||||||
|
|
||||||
int cellSpursAttributeSetNamePrefix(mem_ptr_t<CellSpursAttribute> attr, const mem8_t prefix, u32 size)
|
int cellSpursAttributeSetNamePrefix(mem_ptr_t<CellSpursAttribute> attr, const mem8_t prefix, u32 size)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursAttributeSetNamePrefix(attr_addr=0x%x, prefix_addr=0x%x, size=0x%x)",
|
cellSpurs.Error("cellSpursAttributeSetNamePrefix(attr_addr=0x%x, prefix_addr=0x%x, size=0x%x)",
|
||||||
attr.GetAddr(), prefix.GetAddr(), size);
|
attr.GetAddr(), prefix.GetAddr(), size);
|
||||||
if(!attr.IsGood() || !prefix.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!attr.IsGood() || !prefix.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
if(size > 15) return CELL_SPURS_CORE_ERROR_INVAL;
|
if(size > 15) return CELL_SPURS_CORE_ERROR_INVAL;
|
||||||
|
@ -37,7 +37,7 @@ int cellSpursAttributeSetNamePrefix(mem_ptr_t<CellSpursAttribute> attr, const me
|
||||||
|
|
||||||
int cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t<CellSpursAttribute> attr)
|
int cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t<CellSpursAttribute> attr)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr());
|
cellSpurs.Error("cellSpursAttributeEnableSpuPrintfIfAvailable(attr_addr=0x%x)", attr.GetAddr());
|
||||||
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
|
@ -45,7 +45,7 @@ int cellSpursAttributeEnableSpuPrintfIfAvailable(mem_ptr_t<CellSpursAttribute> a
|
||||||
|
|
||||||
int cellSpursAttributeSetSpuThreadGroupType(mem_ptr_t<CellSpursAttribute> attr, int type)
|
int cellSpursAttributeSetSpuThreadGroupType(mem_ptr_t<CellSpursAttribute> attr, int type)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursAttributeSetSpuThreadGroupType(attr_addr=0x%x, type=%u)", attr.GetAddr(), type);
|
cellSpurs.Error("cellSpursAttributeSetSpuThreadGroupType(attr_addr=0x%x, type=%u)", attr.GetAddr(), type);
|
||||||
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
|
@ -54,7 +54,7 @@ int cellSpursAttributeSetSpuThreadGroupType(mem_ptr_t<CellSpursAttribute> attr,
|
||||||
int cellSpursAttributeEnableSystemWorkload(mem_ptr_t<CellSpursAttribute> attr, const u8 priority[8],
|
int cellSpursAttributeEnableSystemWorkload(mem_ptr_t<CellSpursAttribute> attr, const u8 priority[8],
|
||||||
uint maxSpu, const bool isPreemptible[8])
|
uint maxSpu, const bool isPreemptible[8])
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursAttributeEnableSystemWorkload(attr_addr=0x%x, priority[%u], maxSpu=%u, isPreemptible[%u])",
|
cellSpurs.Error("cellSpursAttributeEnableSystemWorkload(attr_addr=0x%x, priority[%u], maxSpu=%u, isPreemptible[%u])",
|
||||||
attr.GetAddr(), priority, maxSpu, isPreemptible);
|
attr.GetAddr(), priority, maxSpu, isPreemptible);
|
||||||
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!attr.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
for (int i=0; i<8; i++)
|
for (int i=0; i<8; i++)
|
||||||
|
@ -65,7 +65,7 @@ int cellSpursAttributeEnableSystemWorkload(mem_ptr_t<CellSpursAttribute> attr, c
|
||||||
|
|
||||||
int cellSpursInitializeWithAttribute2(mem_ptr_t<CellSpurs2> spurs, const mem_ptr_t<CellSpursAttribute> attr)
|
int cellSpursInitializeWithAttribute2(mem_ptr_t<CellSpurs2> spurs, const mem_ptr_t<CellSpursAttribute> attr)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursInitializeWithAttribute2(spurs_addr=0x%x, spurs_addr=0x%x)",
|
cellSpurs.Error("cellSpursInitializeWithAttribute2(spurs_addr=0x%x, spurs_addr=0x%x)",
|
||||||
spurs.GetAddr(), attr.GetAddr());
|
spurs.GetAddr(), attr.GetAddr());
|
||||||
if(!attr.IsGood() || !spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!attr.IsGood() || !spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ int cellSpursInitializeWithAttribute2(mem_ptr_t<CellSpurs2> spurs, const mem_ptr
|
||||||
|
|
||||||
int cellSpursFinalize(mem_ptr_t<CellSpurs> spurs)
|
int cellSpursFinalize(mem_ptr_t<CellSpurs> spurs)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursFinalize(spurs_addr=0x%x)", spurs.GetAddr());
|
cellSpurs.Error("cellSpursFinalize(spurs_addr=0x%x)", spurs.GetAddr());
|
||||||
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
|
@ -82,7 +82,7 @@ int cellSpursFinalize(mem_ptr_t<CellSpurs> spurs)
|
||||||
|
|
||||||
int cellSpursGetSpuThreadGroupId(mem_ptr_t<CellSpurs> spurs, mem32_t group)
|
int cellSpursGetSpuThreadGroupId(mem_ptr_t<CellSpurs> spurs, mem32_t group)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)",
|
cellSpurs.Error("cellSpursGetSpuThreadGroupId(spurs_addr=0x%x, group_addr=0x%x)",
|
||||||
spurs.GetAddr(), group.GetAddr());
|
spurs.GetAddr(), group.GetAddr());
|
||||||
if(!spurs.IsGood() || group.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood() || group.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ int cellSpursGetSpuThreadGroupId(mem_ptr_t<CellSpurs> spurs, mem32_t group)
|
||||||
|
|
||||||
int cellSpursGetNumSpuThread(mem_ptr_t<CellSpurs> spurs, mem32_t nThreads)
|
int cellSpursGetNumSpuThread(mem_ptr_t<CellSpurs> spurs, mem32_t nThreads)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)",
|
cellSpurs.Error("cellSpursGetNumSpuThread(spurs_addr=0x%x, nThreads_addr=0x%x)",
|
||||||
spurs.GetAddr(), nThreads.GetAddr());
|
spurs.GetAddr(), nThreads.GetAddr());
|
||||||
if(!spurs.IsGood() || nThreads.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood() || nThreads.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ int cellSpursGetNumSpuThread(mem_ptr_t<CellSpurs> spurs, mem32_t nThreads)
|
||||||
|
|
||||||
int cellSpursGetSpuThreadId(mem_ptr_t<CellSpurs> spurs, mem32_t thread, mem32_t nThreads)
|
int cellSpursGetSpuThreadId(mem_ptr_t<CellSpurs> spurs, mem32_t thread, mem32_t nThreads)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)",
|
cellSpurs.Error("cellSpursGetSpuThreadId(spurs_addr=0x%x, thread_addr=0x%x, nThreads_addr=0x%x)",
|
||||||
spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr());
|
spurs.GetAddr(), thread.GetAddr(), nThreads.GetAddr());
|
||||||
if(!spurs.IsGood() || !thread.IsGood() || nThreads.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood() || !thread.IsGood() || nThreads.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ int cellSpursGetSpuThreadId(mem_ptr_t<CellSpurs> spurs, mem32_t thread, mem32_t
|
||||||
|
|
||||||
int cellSpursSetMaxContention(mem_ptr_t<CellSpurs> spurs, uint workloadId, uint maxContention)
|
int cellSpursSetMaxContention(mem_ptr_t<CellSpurs> spurs, uint workloadId, uint maxContention)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%u, maxContention=%u)",
|
cellSpurs.Error("cellSpursSetMaxContention(spurs_addr=0x%x, workloadId=%u, maxContention=%u)",
|
||||||
spurs.GetAddr(), workloadId, maxContention);
|
spurs.GetAddr(), workloadId, maxContention);
|
||||||
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ int cellSpursSetMaxContention(mem_ptr_t<CellSpurs> spurs, uint workloadId, uint
|
||||||
|
|
||||||
int cellSpursSetPriorities(mem_ptr_t<CellSpurs> spurs, uint workloadId, const u8 priorities[CELL_SPURS_MAX_SPU])
|
int cellSpursSetPriorities(mem_ptr_t<CellSpurs> spurs, uint workloadId, const u8 priorities[CELL_SPURS_MAX_SPU])
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%u, priorities[%u])",
|
cellSpurs.Error("cellSpursSetPriorities(spurs_addr=0x%x, workloadId=%u, priorities[%u])",
|
||||||
spurs.GetAddr(), workloadId, priorities);
|
spurs.GetAddr(), workloadId, priorities);
|
||||||
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ int cellSpursSetPriorities(mem_ptr_t<CellSpurs> spurs, uint workloadId, const u8
|
||||||
|
|
||||||
int cellSpursSetPriority(mem_ptr_t<CellSpurs> spurs, uint workloadId, uint spuId, uint priority)
|
int cellSpursSetPriority(mem_ptr_t<CellSpurs> spurs, uint workloadId, uint spuId, uint priority)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursSetPriority(spurs_addr=0x%x, workloadId=%u, spuId=%u, priority=%u)",
|
cellSpurs.Error("cellSpursSetPriority(spurs_addr=0x%x, workloadId=%u, spuId=%u, priority=%u)",
|
||||||
spurs.GetAddr(), workloadId, spuId, priority);
|
spurs.GetAddr(), workloadId, spuId, priority);
|
||||||
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ int cellSpursSetPriority(mem_ptr_t<CellSpurs> spurs, uint workloadId, uint spuId
|
||||||
|
|
||||||
int cellSpursSetPreemptionVictimHints(mem_ptr_t<CellSpurs> spurs, const bool isPreemptible[8])
|
int cellSpursSetPreemptionVictimHints(mem_ptr_t<CellSpurs> spurs, const bool isPreemptible[8])
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible[%u])",
|
cellSpurs.Error("cellSpursSetPreemptionVictimHints(spurs_addr=0x%x, isPreemptible[%u])",
|
||||||
spurs.GetAddr(), isPreemptible);
|
spurs.GetAddr(), isPreemptible);
|
||||||
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ int cellSpursSetPreemptionVictimHints(mem_ptr_t<CellSpurs> spurs, const bool isP
|
||||||
|
|
||||||
int cellSpursAttachLv2EventQueue(mem_ptr_t<CellSpurs> spurs, u32 queue, mem8_t port, int isDynamic)
|
int cellSpursAttachLv2EventQueue(mem_ptr_t<CellSpurs> spurs, u32 queue, mem8_t port, int isDynamic)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=0x%x, port_addr=0x%x, isDynamic=%u)",
|
cellSpurs.Error("cellSpursAttachLv2EventQueue(spurs_addr=0x%x, queue=0x%x, port_addr=0x%x, isDynamic=%u)",
|
||||||
spurs.GetAddr(), queue, port.GetAddr(), isDynamic);
|
spurs.GetAddr(), queue, port.GetAddr(), isDynamic);
|
||||||
if(!spurs.IsGood() || !port.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood() || !port.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ int cellSpursAttachLv2EventQueue(mem_ptr_t<CellSpurs> spurs, u32 queue, mem8_t p
|
||||||
|
|
||||||
int cellSpursDetachLv2EventQueue(mem_ptr_t<CellSpurs> spurs, u8 port)
|
int cellSpursDetachLv2EventQueue(mem_ptr_t<CellSpurs> spurs, u8 port)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port);
|
cellSpurs.Error("cellSpursDetachLv2EventQueue(spurs_addr=0x%x, port=0x%x)", spurs.GetAddr(), port);
|
||||||
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
|
@ -162,7 +162,7 @@ int cellSpursDetachLv2EventQueue(mem_ptr_t<CellSpurs> spurs, u8 port)
|
||||||
|
|
||||||
int cellSpursEnableExceptionEventHandler(mem_ptr_t<CellSpurs> spurs, bool flag)
|
int cellSpursEnableExceptionEventHandler(mem_ptr_t<CellSpurs> spurs, bool flag)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%u)", spurs.GetAddr(), flag);
|
cellSpurs.Error("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, flag=%u)", spurs.GetAddr(), flag);
|
||||||
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
|
@ -171,7 +171,7 @@ int cellSpursEnableExceptionEventHandler(mem_ptr_t<CellSpurs> spurs, bool flag)
|
||||||
int cellSpursSetGlobalExceptionEventHandler(mem_ptr_t<CellSpurs> spurs,
|
int cellSpursSetGlobalExceptionEventHandler(mem_ptr_t<CellSpurs> spurs,
|
||||||
mem_func_ptr_t<CellSpursGlobalExceptionEventHandler> eaHandler, mem_ptr_t<void> arg)
|
mem_func_ptr_t<CellSpursGlobalExceptionEventHandler> eaHandler, mem_ptr_t<void> arg)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x,)",
|
cellSpurs.Error("cellSpursEnableExceptionEventHandler(spurs_addr=0x%x, eaHandler_addr=0x%x, arg_addr=0x%x,)",
|
||||||
spurs.GetAddr(), eaHandler.GetAddr(), arg.GetAddr());
|
spurs.GetAddr(), eaHandler.GetAddr(), arg.GetAddr());
|
||||||
if(!spurs.IsGood() || eaHandler.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood() || eaHandler.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ int cellSpursSetGlobalExceptionEventHandler(mem_ptr_t<CellSpurs> spurs,
|
||||||
|
|
||||||
int cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t<CellSpurs> spurs)
|
int cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t<CellSpurs> spurs)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr());
|
cellSpurs.Error("cellSpursUnsetGlobalExceptionEventHandler(spurs_addr=0x%x)", spurs.GetAddr());
|
||||||
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
|
@ -188,7 +188,7 @@ int cellSpursUnsetGlobalExceptionEventHandler(mem_ptr_t<CellSpurs> spurs)
|
||||||
|
|
||||||
int cellSpursGetInfo(mem_ptr_t<CellSpurs> spurs, mem_ptr_t<CellSpursInfo> info)
|
int cellSpursGetInfo(mem_ptr_t<CellSpurs> spurs, mem_ptr_t<CellSpursInfo> info)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr());
|
cellSpurs.Error("cellSpursGetInfo(spurs_addr=0x%x, info_addr=0x%x)", spurs.GetAddr(), info.GetAddr());
|
||||||
if(!spurs.IsGood() || !info.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
if(!spurs.IsGood() || !info.IsGood()) return CELL_SPURS_CORE_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
|
@ -197,7 +197,7 @@ int cellSpursGetInfo(mem_ptr_t<CellSpurs> spurs, mem_ptr_t<CellSpursInfo> info)
|
||||||
// Task functions
|
// Task functions
|
||||||
int cellSpursGetTasksetId(mem_ptr_t<CellSpursTaskset> taskset, mem32_t workloadId)
|
int cellSpursGetTasksetId(mem_ptr_t<CellSpursTaskset> taskset, mem32_t workloadId)
|
||||||
{
|
{
|
||||||
cellSpurs.Warning("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr());
|
cellSpurs.Error("cellSpursGetTasksetId(taskset_addr=0x%x, workloadId_addr=0x%x)", taskset.GetAddr(), workloadId.GetAddr());
|
||||||
if(!taskset.IsGood() || !taskset.IsGood()) return CELL_SPURS_TASK_ERROR_NULL_POINTER;
|
if(!taskset.IsGood() || !taskset.IsGood()) return CELL_SPURS_TASK_ERROR_NULL_POINTER;
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
|
|
|
@ -185,6 +185,11 @@ void sysPrxForUser_init()
|
||||||
sysPrxForUser.AddFunc(0x52aadadf, sys_lwcond_signal_to);
|
sysPrxForUser.AddFunc(0x52aadadf, sys_lwcond_signal_to);
|
||||||
sysPrxForUser.AddFunc(0x2a6d9d51, sys_lwcond_wait);
|
sysPrxForUser.AddFunc(0x2a6d9d51, sys_lwcond_wait);
|
||||||
|
|
||||||
|
sysPrxForUser.AddFunc(0x8c2bb498, sys_spinlock_initialize);
|
||||||
|
sysPrxForUser.AddFunc(0xa285139d, sys_spinlock_lock);
|
||||||
|
sysPrxForUser.AddFunc(0x722a0254, sys_spinlock_trylock);
|
||||||
|
sysPrxForUser.AddFunc(0x5267cb35, sys_spinlock_unlock);
|
||||||
|
|
||||||
sysPrxForUser.AddFunc(0x67f9fedb, sys_game_process_exitspawn2);
|
sysPrxForUser.AddFunc(0x67f9fedb, sys_game_process_exitspawn2);
|
||||||
sysPrxForUser.AddFunc(0xfc52a7a9, sys_game_process_exitspawn);
|
sysPrxForUser.AddFunc(0xfc52a7a9, sys_game_process_exitspawn);
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "lv2/SC_Lwcond.h"
|
#include "lv2/SC_Lwcond.h"
|
||||||
#include "lv2/SC_Event_flag.h"
|
#include "lv2/SC_Event_flag.h"
|
||||||
#include "lv2/SC_Condition.h"
|
#include "lv2/SC_Condition.h"
|
||||||
|
#include "lv2/SC_Spinlock.h"
|
||||||
#include "Emu/event.h"
|
#include "Emu/event.h"
|
||||||
//#define SYSCALLS_DEBUG
|
//#define SYSCALLS_DEBUG
|
||||||
|
|
||||||
|
@ -200,6 +201,12 @@ extern int sys_rwlock_wlock(u32 rw_lock_id, u64 timeout);
|
||||||
extern int sys_rwlock_trywlock(u32 rw_lock_id);
|
extern int sys_rwlock_trywlock(u32 rw_lock_id);
|
||||||
extern int sys_rwlock_wunlock(u32 rw_lock_id);
|
extern int sys_rwlock_wunlock(u32 rw_lock_id);
|
||||||
|
|
||||||
|
//sys_spinlock
|
||||||
|
extern void sys_spinlock_initialize(mem_ptr_t<spinlock> lock);
|
||||||
|
extern void sys_spinlock_lock(mem_ptr_t<spinlock> lock);
|
||||||
|
extern int sys_spinlock_trylock(mem_ptr_t<spinlock> lock);
|
||||||
|
extern void sys_spinlock_unlock(mem_ptr_t<spinlock> lock);
|
||||||
|
|
||||||
//ppu_thread
|
//ppu_thread
|
||||||
extern void sys_ppu_thread_exit(u64 errorcode);
|
extern void sys_ppu_thread_exit(u64 errorcode);
|
||||||
extern int sys_ppu_thread_yield();
|
extern int sys_ppu_thread_yield();
|
||||||
|
|
51
rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp
Normal file
51
rpcs3/Emu/SysCalls/lv2/SC_Spinlock.cpp
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#include "stdafx.h"
|
||||||
|
#include "Emu/SysCalls/SysCalls.h"
|
||||||
|
#include "Emu/SysCalls/lv2/SC_Spinlock.h"
|
||||||
|
|
||||||
|
SysCallBase sys_spinlock("sys_spinlock");
|
||||||
|
|
||||||
|
void sys_spinlock_initialize(mem_ptr_t<spinlock> lock)
|
||||||
|
{
|
||||||
|
sys_spinlock.Log("sys_spinlock_initialize(lock_addr=0x%x)", lock.GetAddr());
|
||||||
|
|
||||||
|
lock->mutex.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void sys_spinlock_lock(mem_ptr_t<spinlock> lock)
|
||||||
|
{
|
||||||
|
sys_spinlock.Log("sys_spinlock_lock(lock_addr=0x%x)", lock.GetAddr());
|
||||||
|
|
||||||
|
be_t<u32> tid = GetCurrentPPUThread().GetId();
|
||||||
|
switch (lock->mutex.lock(tid))
|
||||||
|
{
|
||||||
|
case SMR_ABORT: ConLog.Warning("sys_spinlock_lock(0x%x) aborted", lock.GetAddr()); break;
|
||||||
|
case SMR_DEADLOCK: ConLog.Error("sys_spinlock_lock(0x%x) reached deadlock", lock.GetAddr()); break; // ???
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int sys_spinlock_trylock(mem_ptr_t<spinlock> lock)
|
||||||
|
{
|
||||||
|
sys_spinlock.Log("sys_spinlock_trylock(lock_addr=0x%x)", lock.GetAddr());
|
||||||
|
|
||||||
|
be_t<u32> tid = GetCurrentPPUThread().GetId();
|
||||||
|
switch (lock->mutex.trylock(tid))
|
||||||
|
{
|
||||||
|
case SMR_FAILED: return CELL_EBUSY;
|
||||||
|
case SMR_ABORT: ConLog.Warning("sys_spinlock_trylock(0x%x) aborted", lock.GetAddr()); break;
|
||||||
|
case SMR_DEADLOCK: ConLog.Error("sys_spinlock_trylock(0x%x) reached deadlock", lock.GetAddr()); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CELL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sys_spinlock_unlock(mem_ptr_t<spinlock> lock)
|
||||||
|
{
|
||||||
|
sys_spinlock.Log("sys_spinlock_unlock(lock_addr=0x%x)", lock.GetAddr());
|
||||||
|
|
||||||
|
switch (lock->mutex.unlock(lock->mutex.GetOwner()))
|
||||||
|
{
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
6
rpcs3/Emu/SysCalls/lv2/SC_Spinlock.h
Normal file
6
rpcs3/Emu/SysCalls/lv2/SC_Spinlock.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct spinlock
|
||||||
|
{
|
||||||
|
SMutexBE mutex;
|
||||||
|
};
|
|
@ -277,6 +277,7 @@
|
||||||
<ClCompile Include="Emu\SysCalls\lv2\SC_RSX.cpp" />
|
<ClCompile Include="Emu\SysCalls\lv2\SC_RSX.cpp" />
|
||||||
<ClCompile Include="Emu\SysCalls\lv2\SC_Rwlock.cpp" />
|
<ClCompile Include="Emu\SysCalls\lv2\SC_Rwlock.cpp" />
|
||||||
<ClCompile Include="Emu\SysCalls\lv2\SC_Semaphore.cpp" />
|
<ClCompile Include="Emu\SysCalls\lv2\SC_Semaphore.cpp" />
|
||||||
|
<ClCompile Include="Emu\SysCalls\lv2\SC_Spinlock.cpp" />
|
||||||
<ClCompile Include="Emu\SysCalls\lv2\SC_SPU_Thread.cpp" />
|
<ClCompile Include="Emu\SysCalls\lv2\SC_SPU_Thread.cpp" />
|
||||||
<ClCompile Include="Emu\SysCalls\lv2\SC_Time.cpp" />
|
<ClCompile Include="Emu\SysCalls\lv2\SC_Time.cpp" />
|
||||||
<ClCompile Include="Emu\SysCalls\lv2\SC_Timer.cpp" />
|
<ClCompile Include="Emu\SysCalls\lv2\SC_Timer.cpp" />
|
||||||
|
|
|
@ -466,6 +466,9 @@
|
||||||
<ClCompile Include="Emu\SysCalls\Modules\cellUserInfo.cpp">
|
<ClCompile Include="Emu\SysCalls\Modules\cellUserInfo.cpp">
|
||||||
<Filter>Emu\SysCalls\Modules</Filter>
|
<Filter>Emu\SysCalls\Modules</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="Emu\SysCalls\lv2\SC_Spinlock.cpp">
|
||||||
|
<Filter>Emu\SysCalls\lv2</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="rpcs3.rc" />
|
<ResourceCompile Include="rpcs3.rc" />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue