|
|
|
@ -52,6 +52,17 @@ ResultCode ArbitrateAddress(Handle handle, ArbitrationType type, u32 address, s3
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case ArbitrationType::DecrementAndWaitIfLessThan:
|
|
|
|
|
{
|
|
|
|
|
s32 memory_value = Memory::Read32(address) - 1;
|
|
|
|
|
Memory::Write32(address, memory_value);
|
|
|
|
|
if (memory_value <= value) {
|
|
|
|
|
Kernel::WaitCurrentThread(WAITTYPE_ARB, handle, address);
|
|
|
|
|
HLE::Reschedule(__func__);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
LOG_ERROR(Kernel, "unknown type=%d", type);
|
|
|
|
|
return ResultCode(ErrorDescription::InvalidEnumValue, ErrorModule::Kernel, ErrorSummary::WrongArgument, ErrorLevel::Usage);
|
|
|
|
|