Пример #1
0
void init_sbv_patches()
{
	sbv_patch_enable_lmb();

	// Needed for loading ELFS from memory card
	sbv_patch_disable_prefix_check();
}
Пример #2
0
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);
}
Пример #3
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;
}