Merge pull request #20794 from hrydgard/project-8-fix

Correct error codes from sceUtilityLoadAvModule / UnloadAvModule.
This commit is contained in:
Henrik Rydgård authored and GitHub committed 2025-09-04 16:13:44 +02:00
commit e8dd3c2223
5 files changed
+19 -14

No files matched your search

+2
View File
@@ -302,6 +302,8 @@ enum PSPErrorCode : u32 {
SCE_ERROR_MODULE_ALREADY_LOADED = 0x80111102,
SCE_ERROR_MODULE_NOT_LOADED = 0x80111103,
SCE_ERROR_AV_MODULE_BAD_ID = 0x80110F01,
SCE_ERROR_AV_MODULE_ALREADY_LOADED = 0x80110F02,
SCE_ERROR_AV_MODULE_NOT_LOADED = 0x80110F03,
SCE_ERROR_UTILITY_INVALID_STATUS = 0x80110001,
SCE_ERROR_UTILITY_INVALID_PARAM_SIZE = 0x80110004,
+3
View File
@@ -1313,10 +1313,13 @@ const char *KernelErrorToString(u32 err) {
case SCE_ERROR_MODULE_ALREADY_LOADED: return "MODULE_ALREADY_LOADED";
case SCE_ERROR_MODULE_NOT_LOADED: return "MODULE_NOT_LOADED";
case SCE_ERROR_AV_MODULE_BAD_ID: return "AV_MODULE_BAD_ID";
case SCE_ERROR_AV_MODULE_ALREADY_LOADED: return "AV_MODULE_ALREADY_LOADED";
case SCE_ERROR_AV_MODULE_NOT_LOADED: return "AV_MODULE_NOT_LOADED";
case SCE_ERROR_UTILITY_INVALID_STATUS: return "UTILITY_INVALID_STATUS";
case SCE_ERROR_UTILITY_INVALID_PARAM_SIZE: return "UTILITY_INVALID_PARAM_SIZE";
case SCE_ERROR_UTILITY_WRONG_TYPE: return "UTILITY_WRONG_TYPE";
case SCE_ERROR_UTILITY_STRING_TOO_LONG: return "UTILITY_STRING_TOO_LONG";
case SCE_ERROR_UTILITY_INVALID_ADHOC_CHANNEL: return "UTILITY_INVALID_ADHOC_CHANNEL";
case SCE_ERROR_UTILITY_INVALID_SYSTEM_PARAM_ID: return "UTILITY_INVALID_SYSTEM_PARAM_ID";
+12 -12
View File
@@ -525,8 +525,8 @@ bool __UtilityModuleGetMemoryRange(int moduleID, u32 *startPtr, u32 *sizePtr) {
return true;
}
static int LoadModuleInternal(u32 module);
static int UnloadModuleInternal(u32 module);
static int LoadModuleInternal(u32 module, bool av);
static int UnloadModuleInternal(u32 module, bool av);
// Same as sceUtilityLoadModule, just limited in categories.
// It seems this just loads module 0x300 + module & 0xFF..
@@ -536,7 +536,7 @@ static u32 sceUtilityLoadAvModule(u32 module) {
return hleLogError(Log::sceUtility, SCE_ERROR_AV_MODULE_BAD_ID);
}
int result = LoadModuleInternal(0x300 | module);
int result = LoadModuleInternal(0x300 | module, true);
return hleDelayResult(hleLogDebugOrError(Log::sceUtility, result), "utility av module loaded", 25000);
}
@@ -546,12 +546,12 @@ static u32 sceUtilityUnloadAvModule(u32 module) {
return hleLogError(Log::sceUtility, SCE_ERROR_AV_MODULE_BAD_ID);
}
int result = UnloadModuleInternal(0x300 | module);
int result = UnloadModuleInternal(0x300 | module, true);
return hleDelayResult(hleLogDebugOrError(Log::sceUtility, result), "utility av module unloaded", 800);
}
static u32 sceUtilityLoadModule(u32 module) {
int result = LoadModuleInternal(module);
int result = LoadModuleInternal(module, false);
// TODO: Each module has its own timing, technically, but this is a low-end.
if (module == 0x3FF) {
return hleDelayResult(hleLogDebugOrError(Log::sceUtility, result), "utility module loaded", 130);
@@ -561,7 +561,7 @@ static u32 sceUtilityLoadModule(u32 module) {
}
static u32 sceUtilityUnloadModule(u32 module) {
int result = UnloadModuleInternal(module);
int result = UnloadModuleInternal(module, false);
// TODO: Each module has its own timing, technically, but this is a low-end.
if (module == 0x3FF) {
return hleDelayResult(hleLogDebugOrError(Log::sceUtility, result), "utility module unloaded", 110);
@@ -570,14 +570,14 @@ static u32 sceUtilityUnloadModule(u32 module) {
}
}
static int LoadModuleInternal(u32 module) {
static int LoadModuleInternal(u32 module, bool av) {
const ModuleLoadInfo *info = __UtilityModuleInfo(module);
if (!info) {
return SCE_ERROR_MODULE_BAD_ID;
return av ? SCE_ERROR_AV_MODULE_BAD_ID : SCE_ERROR_MODULE_BAD_ID;
}
if (currentlyLoadedModules.find(module) != currentlyLoadedModules.end()) {
return SCE_ERROR_MODULE_ALREADY_LOADED;
return av ? SCE_ERROR_AV_MODULE_ALREADY_LOADED : SCE_ERROR_MODULE_ALREADY_LOADED;
}
// Some games, like Kamen Rider Climax Heroes OOO, require an error if dependencies aren't loaded yet.
@@ -601,15 +601,15 @@ static int LoadModuleInternal(u32 module) {
return 0;
}
static int UnloadModuleInternal(u32 module) {
static int UnloadModuleInternal(u32 module, bool av) {
const ModuleLoadInfo *info = __UtilityModuleInfo(module);
if (!info) {
return SCE_ERROR_MODULE_BAD_ID;
return av ? SCE_ERROR_AV_MODULE_BAD_ID : SCE_ERROR_MODULE_BAD_ID;
}
auto iter = currentlyLoadedModules.find(module);
if (iter == currentlyLoadedModules.end()) {
return SCE_ERROR_MODULE_NOT_LOADED;
return av ? SCE_ERROR_AV_MODULE_NOT_LOADED : SCE_ERROR_MODULE_NOT_LOADED;
}
if (iter->second != 0) {
userMemory.Free(iter->second);
@@ -570,7 +570,7 @@ public abstract class NativeActivity extends AppCompatActivity implements Sensor
if (decorView != null) {
decorView.setSystemUiVisibility(flags);
} else {
Log.e(TAG, "updateSystemUiVisibility: decor view not yet created, ignoring for now");
Log.i(TAG, "updateSystemUiVisibility: decor view not yet created, ignoring for now");
}
sizeManager.checkDisplayMeasurements();
}
@@ -130,7 +130,7 @@ public class SizeManager implements SurfaceHolder.Callback {
return;
}
Log.w(TAG, "Surface changed. Resolution: " + width + "x" + height + " Format: " + format);
Log.i(TAG, "Surface changed. Resolution: " + width + "x" + height + " Format: " + format);
// The window size might have changed (immersive mode, native fullscreen on some devices)
NativeApp.backbufferResize(width, height, format);
updateDisplayMeasurements();