From ba56f2fd3a8c1e9c9e6b902427598e9c865374bb Mon Sep 17 00:00:00 2001 From: KrahJohlito Date: Wed, 23 Jun 2021 21:11:48 +0930 Subject: [PATCH] BDM: Make loading block device modules other than USB optional --- include/config.h | 1 + include/dialogs.h | 1 + include/lang.h | 2 +- include/opl.h | 2 ++ src/bdmsupport.c | 20 +++++++++++++++++--- src/dialogs.c | 7 ++++++- src/gui.c | 8 +++++++- src/opl.c | 5 +++++ 8 files changed, 40 insertions(+), 6 deletions(-) diff --git a/include/config.h b/include/config.h index ff5411930..c717be235 100644 --- a/include/config.h +++ b/include/config.h @@ -87,6 +87,7 @@ enum CONFIG_INDEX { #define CONFIG_OPL_HDD_MODE "hdd_mode" #define CONFIG_OPL_ETH_MODE "eth_mode" #define CONFIG_OPL_APP_MODE "app_mode" +#define CONFIG_OPL_ENABLE_FW "enable_firewire" #define CONFIG_OPL_SWAP_SEL_BUTTON "swap_select_btn" #define CONFIG_OPL_PARENTAL_LOCK_PWD "parental_lock_password" #define CONFIG_OPL_SFX "enable_sfx" diff --git a/include/dialogs.h b/include/dialogs.h index e672312ab..ae4428457 100644 --- a/include/dialogs.h +++ b/include/dialogs.h @@ -34,6 +34,7 @@ enum UI_ITEMS { CFG_HDDMODE, CFG_ETHMODE, CFG_APPMODE, + CFG_ENABLEFW, CFG_LASTPLAYED, CFG_LBL_AUTOSTARTLAST, CFG_AUTOSTARTLAST, diff --git a/include/lang.h b/include/lang.h index 8af1face3..06ca084d7 100644 --- a/include/lang.h +++ b/include/lang.h @@ -65,7 +65,7 @@ enum _STR_IDS { _STR_SAVING_SETTINGS, _STR_START_DEVICE, _STR_REFRESH, - _STR_USBMODE, + _STR_BDMMODE, _STR_HDDMODE, _STR_ETHMODE, _STR_APPMODE, diff --git a/include/opl.h b/include/opl.h index 6cc9c3ea0..d3e203cc5 100644 --- a/include/opl.h +++ b/include/opl.h @@ -114,6 +114,8 @@ extern int gHDDStartMode; extern int gETHStartMode; extern int gAPPStartMode; +extern int gEnableFW; + extern int gAutosort; extern int gAutoRefresh; extern int gEnableNotifications; diff --git a/src/bdmsupport.c b/src/bdmsupport.c index 4604c255c..22d1c80ee 100644 --- a/src/bdmsupport.c +++ b/src/bdmsupport.c @@ -23,6 +23,8 @@ static int bdmGameCount = 0; static base_game_info_t *bdmGames; static char bdmDriver[5]; +static int fireWireModLoaded = 0; + // forward declaration static item_list_t bdmGameList; @@ -67,6 +69,17 @@ static void bdmEventHandler(void *packet, void *opt) BdmGeneration++; } +static void bdmLoadBlockDeviceModules(void) +{ + if (gEnableFW && !fireWireModLoaded) { + // Load iLink Block Device drivers + sysLoadModuleBuffer(&iLinkman_irx, size_iLinkman_irx, 0, NULL); + sysLoadModuleBuffer(&IEEE1394_bd_irx, size_IEEE1394_bd_irx, 0, NULL); + + fireWireModLoaded = 1; + } +} + void bdmLoadModules(void) { LOG("BDMSUPPORT LoadModules\n"); @@ -81,9 +94,8 @@ void bdmLoadModules(void) sysLoadModuleBuffer(&usbd_irx, size_usbd_irx, 0, NULL); sysLoadModuleBuffer(&usbmass_bd_irx, size_usbmass_bd_irx, 0, NULL); - // Load iLink Block Device drivers - sysLoadModuleBuffer(&iLinkman_irx, size_iLinkman_irx, 0, NULL); - sysLoadModuleBuffer(&IEEE1394_bd_irx, size_IEEE1394_bd_irx, 0, NULL); + // Load Optional Block Device drivers + bdmLoadBlockDeviceModules(); sysLoadModuleBuffer(&bdmevent_irx, size_bdmevent_irx, 0, NULL); SifAddCmdHandler(0, &bdmEventHandler, NULL); @@ -119,6 +131,8 @@ static int bdmNeedsUpdate(void) int result = 0; struct stat st; + ioPutRequest(IO_CUSTOM_SIMPLEACTION, &bdmLoadBlockDeviceModules); + if (bdmULSizePrev != -2 && OldGeneration == BdmGeneration) return 0; OldGeneration = BdmGeneration; diff --git a/src/dialogs.c b/src/dialogs.c index 560ce8065..9984122f1 100644 --- a/src/dialogs.c +++ b/src/dialogs.c @@ -194,11 +194,16 @@ struct UIItem diaConfig[] = { {UI_INT, CFG_HDDSPINDOWN, 1, 1, _STR_HINT_SPINDOWN, 0, 0, {.intvalue = {20, 20, 0, 20}}}, {UI_SPLITTER}, - {UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {NULL, _STR_USBMODE}}}, + {UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {NULL, _STR_BDMMODE}}}, {UI_SPACER}, {UI_ENUM, CFG_BDMMODE, 1, 1, -1, 0, 0, {.intvalue = {0, 0}}}, {UI_BREAK}, + {UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {"- FireWire", -1}}}, + {UI_SPACER}, + {UI_BOOL, CFG_ENABLEFW, 1, 1, -1, 0, 0, {.intvalue = {0, 0}}}, + {UI_BREAK}, + {UI_LABEL, 0, 1, 1, -1, -40, 0, {.label = {NULL, _STR_HDDMODE}}}, {UI_SPACER}, {UI_ENUM, CFG_HDDMODE, 1, 1, -1, 0, 0, {.intvalue = {0, 0}}}, diff --git a/src/gui.c b/src/gui.c index 234edcba5..b4e8f900f 100644 --- a/src/gui.c +++ b/src/gui.c @@ -425,6 +425,9 @@ static int guiUpdater(int modified) diaGetInt(diaConfig, CFG_LASTPLAYED, &showAutoStartLast); diaSetVisible(diaConfig, CFG_LBL_AUTOSTARTLAST, showAutoStartLast); diaSetVisible(diaConfig, CFG_AUTOSTARTLAST, showAutoStartLast); + + diaGetInt(diaConfig, CFG_BDMMODE, &gBDMStartMode); + diaSetEnabled(diaConfig, CFG_ENABLEFW, gBDMStartMode); } return 0; } @@ -465,6 +468,8 @@ void guiShowConfig() diaSetInt(diaConfig, CFG_ETHMODE, gETHStartMode); diaSetInt(diaConfig, CFG_APPMODE, gAPPStartMode); + diaSetInt(diaConfig, CFG_ENABLEFW, gEnableFW); + int ret = diaExecuteDialog(diaConfig, -1, 1, &guiUpdater); if (ret) { diaGetInt(diaConfig, CFG_DEBUG, &gDisableDebug); @@ -483,11 +488,12 @@ void guiShowConfig() else gSelectButton = KEY_CIRCLE; diaGetInt(diaConfig, CFG_DEFDEVICE, &gDefaultDevice); - diaGetInt(diaConfig, CFG_BDMMODE, &gBDMStartMode); diaGetInt(diaConfig, CFG_HDDMODE, &gHDDStartMode); diaGetInt(diaConfig, CFG_ETHMODE, &gETHStartMode); diaGetInt(diaConfig, CFG_APPMODE, &gAPPStartMode); + diaGetInt(diaConfig, CFG_ENABLEFW, &gEnableFW); + applyConfig(-1, -1); menuReinitMainMenu(); } diff --git a/src/opl.c b/src/opl.c index 8ef82e238..4eadfd81c 100644 --- a/src/opl.c +++ b/src/opl.c @@ -145,6 +145,7 @@ int gBDMStartMode; int gHDDStartMode; int gETHStartMode; int gAPPStartMode; +int gEnableFW; int gAutosort; int gAutoRefresh; int gEnableNotifications; @@ -850,6 +851,7 @@ static void _loadConfig() configGetInt(configOPL, CONFIG_OPL_HDD_MODE, &gHDDStartMode); configGetInt(configOPL, CONFIG_OPL_ETH_MODE, &gETHStartMode); configGetInt(configOPL, CONFIG_OPL_APP_MODE, &gAPPStartMode); + configGetInt(configOPL, CONFIG_OPL_ENABLE_FW, &gEnableFW); configGetInt(configOPL, CONFIG_OPL_SFX, &gEnableSFX); configGetInt(configOPL, CONFIG_OPL_BOOT_SND, &gEnableBootSND); configGetInt(configOPL, CONFIG_OPL_SFX_VOLUME, &gSFXVolume); @@ -999,6 +1001,7 @@ static void _saveConfig() configSetInt(configOPL, CONFIG_OPL_HDD_MODE, gHDDStartMode); configSetInt(configOPL, CONFIG_OPL_ETH_MODE, gETHStartMode); configSetInt(configOPL, CONFIG_OPL_APP_MODE, gAPPStartMode); + configSetInt(configOPL, CONFIG_OPL_ENABLE_FW, gEnableFW); configSetInt(configOPL, CONFIG_OPL_SFX, gEnableSFX); configSetInt(configOPL, CONFIG_OPL_BOOT_SND, gEnableBootSND); configSetInt(configOPL, CONFIG_OPL_SFX_VOLUME, gSFXVolume); @@ -1588,6 +1591,8 @@ static void setDefaults(void) gETHStartMode = START_MODE_DISABLED; gAPPStartMode = START_MODE_DISABLED; + gEnableFW = 0; + frameCounter = 0; gVMode = 0;