void init_sbv_patches() { sbv_patch_enable_lmb(); // Needed for loading ELFS from memory card sbv_patch_disable_prefix_check(); }
static int load_modules () { const char *STEP_OK = "*"; const char *FAILED = "failed to load with"; int ret, ipcfg_ret = 0; size_t i; const char *IPCONFIG_DAT_PATHS[] = { "mc0:/BIDATA-SYSTEM/IPCONFIG.DAT", /* japan */ "mc0:/BADATA-SYSTEM/IPCONFIG.DAT", /* us */ "mc0:/BEDATA-SYSTEM/IPCONFIG.DAT", /* europe */ "mc0:/SYS-CONF/IPCONFIG.DAT", /* old location */ NULL }; #if defined (LOAD_MRBROWN_PATCHES) sbv_patch_enable_lmb (); sbv_patch_disable_prefix_check (); scr_printf (STEP_OK); #endif #if defined (LOAD_SIOMAN_AND_MC) ret = SifLoadModule ("rom0:SIO2MAN", 0, NULL); if (ret > 0) scr_printf (STEP_OK); else { scr_printf ("\nrom0:SIO2MAN %s %d\n", FAILED, ret); return (-1); } ret = SifLoadModule ("rom0:MCMAN", 0, NULL); if (ret > 0) scr_printf (STEP_OK); else { scr_printf ("\nrom0:MCMAN %s %d\n", FAILED, ret); return (-1); } ret = SifLoadModule ("rom0:MCSERV", 0, NULL); if (ret > 0) scr_printf (STEP_OK); else { scr_printf ("\nrom0:MCSERV %s %d\n", FAILED, ret); return (-1); } #endif SifExecModuleBuffer (&iomanx_irx, size_iomanx_irx, 0, NULL, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("IOMANX.IRX %s %d\n", FAILED, ret); return (-1); } SifExecModuleBuffer (&ps2dev9_irx, size_ps2dev9_irx, 0, NULL, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("PS2DEV9.IRX %s %d\n", FAILED, ret); return (-1); } SifExecModuleBuffer (&ps2atad_irx, size_ps2atad_irx, 0, NULL, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("PS2ATAD.IRX %s %d\n", FAILED, ret); return (-1); } SifExecModuleBuffer (&ps2ip_irx, size_ps2ip_irx, 0, NULL, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("PS2IP.IRX %s %d\n", FAILED, ret); return (-1); } ipcfg_ret = -1; for (i = 0; ipcfg_ret != 0 && IPCONFIG_DAT_PATHS[i] != NULL; ++i) { ipcfg_ret = setup_ip (IPCONFIG_DAT_PATHS[i], if_conf, &if_conf_len); } SifExecModuleBuffer (&ps2smap_irx, size_ps2smap_irx, if_conf_len, if_conf, &ret); if (ret == 0) scr_printf (STEP_OK); else { scr_printf ("PS2SMAP.IRX %s %d\n", FAILED, ret); return (-1); } scr_printf ("\n"); switch (ipcfg_ret) { case 0: scr_printf ("\nusing %s\n", IPCONFIG_DAT_PATHS[i - 1]); break; case -1: scr_printf ("\nuse one of the following locations to set IP address:\n"); for (i = 0; IPCONFIG_DAT_PATHS[i] != NULL; ++i) scr_printf (" %s\n", IPCONFIG_DAT_PATHS[i]); break; case -2: scr_printf ("\nusing %s\n", IPCONFIG_DAT_PATHS[i - 1]); scr_printf ("\ninvalid configuration file format; use:\n" "ip_address network_mask gateway_ip\n" "separated by a single space; for example:" "192.168.0.10 255.255.255.0 192.168.0.1\n\n"); break; } scr_printf ("Playstation 2 IP address: %s\n", if_conf); return (0); }
int loadLoaderModules(int debug_mode, int disable_cdrom) { static int load_dvd_config = -1; static int load_netsurf_config = -1; static int load_usb_config = -1; int i; int rv; int lrv = -1; if (debug_mode == 1) { /* Network is used by ps2link and can't be used by Linux. */ network_support = 0; } #ifdef RESET_IOP if (debug_mode == -1) { graphic_setStatusMessage("Flushing cache"); FlushCache(0); graphic_setStatusMessage("Exit IOP Heap"); SifExitIopHeap(); graphic_setStatusMessage("Exit LoadFile"); SifLoadFileExit(); graphic_setStatusMessage("Exit FIO"); fioExit(); graphic_setStatusMessage("Exit RPC"); SifExitRpc(); graphic_setStatusMessage("Stop DMA"); SifStopDma(); graphic_setStatusMessage("PreReset Init RPC"); SifInitRpc(0); graphic_setStatusMessage("Reseting IOP"); while(!SifIopReset(s_pUDNL, 0)); graphic_setStatusMessage("IOP Sync"); while (!SifIopSync()); graphic_setStatusMessage("Initialize RPC"); SifInitRpc(0); } #endif graphic_setStatusMessage("Patching enable LMB"); sbv_patch_enable_lmb(); graphic_setStatusMessage("Patching disable prefix check"); sbv_patch_disable_prefix_check(); /* CDVDMAN is loaded by IopReset and NVRAM can be read. */ graphic_setStatusMessage("Read NVRAM from CDVD"); if (!disable_cdrom) { nvram_init(); } eromdrvSupport = 0; /* FIXME: eedebug handler seems to crash the ee graphic_setStatusMessage("Add eedebug handler"); addEEDebugHandler(); */ graphic_setStatusMessage("Loading modules"); for (i = 0; i < moduleLoaderNumberOfModules; i++) { const rom_entry_t *romfile; if (moduleList[i].debug_mode != 0) { if (moduleList[i].debug_mode != debug_mode) { continue; } } /* Load configuration when necessary modules are loaded. */ if (moduleList[i].loadCfg) { checkForMusicSupport(); setDefaultConfiguration(NULL); lrv = loadConfiguration(CONFIG_FILE); changeMode(); /* Load configuration on startup and not on IOP reset. */ moduleList[i].loadCfg = 0; } graphic_setStatusMessage(moduleList[i].path); kprintf("Loading module (%s)\n", moduleList[i].path); if (!network_support) { if (moduleList[i].network) { continue; } } if (moduleList[i].ps2smap) { moduleList[i].args = getPS2MAPParameter(&moduleList[i].argLen); } if (moduleList[i].dns) { moduleList[i].args = getPS2DNS(&moduleList[i].argLen); } if (moduleList[i].checkMc) { static char file[256]; /* Try to load module from MC if available. */ snprintf(file, sizeof(file), CONFIG_DIR "/%s", moduleList[i].path); rv = SifLoadModule(file, moduleList[i].argLen, moduleList[i].args); } else { rv = -1; } if (rv < 0) { if ((moduleList[i].sms_mod == 0) || (isDVDVSupported())) { if (moduleList[i].eromdrv < 0) { /* Try to detect EROM driver only the first time. */ moduleList[i].eromdrv = 1; if (disable_cdrom) { continue; } rv = open("rom1:EROMDRV", O_RDONLY); if (rv >=0 ) { eromdrvpath[12] = 0; /* This is an old fat PS2 (working with SCPH-50004 and SCPH-39004). */ close(rv); } else { const u8 *nvm; nvm = get_nvram(); if (nvm_errors == 0) { /* NVM layout seems to be correct. */ eromdrvpath[12] = nvm[NVM_REAL_REGION]; rv = open(eromdrvpath, O_RDONLY); if (rv >=0 ) { /* Region code seems to be correct. */ close(rv); } else { error_printf("The region code stored in the NVRAM S%02x T%02x F%02x R%02x " "can't be detected by version string %s (%s).", nvm[0x180], nvm[0x181], nvm[NVM_FAKE_REGION], nvm[NVM_REAL_REGION], ps2_rom_version); continue; } } else { error_printf("%d errors when reading NVRAM. Please set path " "to EROMDRV and reload modules.", nvm_errors); continue; } } } if (moduleList[i].eromdrv != 0) { moduleList[i].args = get_eromdrvpath(); moduleList[i].argLen = strlen(moduleList[i].args) + 1; } romfile = rom_getFile(moduleList[i].path); if (romfile != NULL) { int ret; ret = SifExecModuleBuffer((void *) romfile->start, romfile->size, moduleList[i].argLen, moduleList[i].args, &rv); if (ret < 0) { rv = ret; } } else { rv = SifLoadModule(moduleList[i].path, moduleList[i].argLen, moduleList[i].args); } if (rv < 0) { if (moduleList[i].eromdrv != 0) { kprintf("Failed to load module \"%s\".\n", get_eromdrvpath()); } else { kprintf("Failed to load module \"%s\".\n", moduleList[i].path); } if (moduleList[i].ps2smap && !isSlimPSTwo()) { network_support = 0; } else { if (moduleList[i].eromdrv != 0) { error_printf("Failed to load module \"%s\".", get_eromdrvpath()); } else { error_printf("Failed to load module \"%s\".", moduleList[i].path); } } } else { if (moduleList[i].eromdrv != 0) { eromdrvSupport = -1; } } } } } graphic_setStatusMessage(NULL); printAllModules(); fileXioInit(); if (load_netsurf_config) { load_netsurf_config = 0; if (lrv != 0) { graphic_setStatusMessage("Check for NetSurf config"); lrv = loadConfiguration(PS2NS_CONFIG_FILE); graphic_setStatusMessage(NULL); } } if (load_usb_config) { load_usb_config = 0; if (lrv != 0) { graphic_setStatusMessage("Check for USB config"); lrv = loadConfiguration(USB_CONFIG_FILE); graphic_setStatusMessage(NULL); } } if (load_dvd_config && isDVDVSupported()) { load_dvd_config = 0; graphic_setStatusMessage("Init DVD driver"); CDDA_Init(); CDVD_Init(); if (lrv != 0) { DiskType type; graphic_setStatusMessage("Load config from DVD"); type = CDDA_DiskType(); if (type == DiskType_DVDV) { CDVD_SetDVDV(1); } else { CDVD_SetDVDV(0); } kprintf("kloader disc type %u\n", type); switch (type) { case DiskType_CD: case DiskType_DVD: case DiskType_DVDV: /* Load configuration from disc. */ lrv = loadConfiguration(DVD_CONFIG_FILE); changeMode(); #if 0 if (lrv != 0) { error_printf("Failed to load config from \"%s\", using default configuration.", DVD_CONFIG_FILE); } #endif break; default: kprintf("kloader unsupported disc type %u\n", type); break; } /* Stop CD when finished. */ CDVD_Stop(); CDVD_FlushCache(); } graphic_setStatusMessage(NULL); } snprintf(hardware_information, sizeof(hardware_information), "%s with DVD-R %s, %s sound support and %s network adapter", isSlimPSTwo() ? "slim PSTwo" : "fat PS2", disable_cdrom ? "disabled" : (isDVDVSupported() ? "support" : "problem"), (libsd_version <= 0x104) ? "direct" : "indirect", network_support ? "with" : "without"); return 0; }