PS2SDK
PS2 Homebrew Libraries
patch_romdrv_set_rom1_info.c
Go to the documentation of this file.
1 /*
2 # _____ ___ ____ ___ ____
3 # ____| | ____| | | |____|
4 # | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5 #-----------------------------------------------------------------------
6 # Copyright (c) 2003 Marcus R. Brown <mrbrown@0xd6.org>
7 # Licenced under Academic Free License version 2.0
8 # Review ps2sdk README & LICENSE files for further details.
9 */
10 
16 #include <tamtypes.h>
17 #include <kernel.h>
18 #include <sifdma.h>
19 #include <sifrpc.h>
20 
21 #include "smod.h"
22 #include "slib.h"
23 
24 #include "common.h"
25 
26 /* from common.c */
27 extern struct smem_buf smem_buf;
28 
29 int sbv_patch_romdrv_set_rom1_info(void *iop_reset_addr, int romdir_size)
30 {
31  SifRpcReceiveData_t rdata;
32  smod_mod_info_t romdrv_info;
33  u32 *data;
34  SifDmaTransfer_t dmat[1];
35  int trid;
36 
37  /* Find the romdrv module. */
38  if (!smod_get_mod_by_name("ROM_file_driver", &romdrv_info))
39  return -1;
40 
41  dmat[0].src = &smem_buf;
42  dmat[0].size = 64;
43  dmat[0].dest = (void *)(romdrv_info.text_start + romdrv_info.text_size + romdrv_info.data_size + 0x40);
44  dmat[0].attr = 0;
45 
46  /* Get offset into rom mount information in bss section */
47  SyncDCache(dmat[0].src, ((u8 *)dmat[0].src) + dmat[0].size);
48  if (sceSifGetOtherData(&rdata, dmat[0].dest, dmat[0].src, dmat[0].size, 0) < 0)
49  return 1;
50  data = UNCACHED_SEG(dmat[0].src);
51  /* Ensure data contains rom0: information */
52  if (data[0] != 0xBFC00000 || data[1] <= data[0] || data[2] <= data[1])
53  return 1;
54 
55  /* ImageStart for rom1: */
56  data[3] = (u32)iop_reset_addr;
57  /* RomdirStart for rom1: */
58  data[4] = data[3];
59  /* RomdirEnd for rom1: */
60  data[5] = data[3] + romdir_size;
61 
62  sceSifWriteBackDCache(dmat[0].src, dmat[0].size);
63  while (!(trid = sceSifSetDma(dmat, sizeof(dmat) / sizeof(dmat[0]))));
64  while (sceSifDmaStat(trid) >= 0);
65  return 0;
66 }
kernel.h
sifdma.h
smod_get_mod_by_name
int smod_get_mod_by_name(const char *name, smod_mod_info_t *info)
Definition: smod.c:54
smod.h
t_SifRpcReceiveData
Definition: sifrpc-common.h:145
_smod_mod_info
Definition: smod.h:24
slib.h
common.h
tamtypes.h
t_SifDmaTransfer
Definition: sifdma.h:52
sbv_patch_romdrv_set_rom1_info
int sbv_patch_romdrv_set_rom1_info(void *iop_reset_addr, int romdir_size)
Definition: patch_romdrv_set_rom1_info.c:29
smem_buf
Definition: common.h:3