25 #define IMGDRV_IRX_SIZE ((size__imgdrv_irx + 15) & ~15)
26 #define IOPBTCONF_IOP_MAX_SIZE 0x400
35 #define IMGDRV_IRX_PTRS 0x190
36 #define IMGDRV_IRX_SIZES 0x198
38 #ifdef F__iopcontrol_special_internals
43 #define SifLoadModuleSpecial(path, arg_len, args, dontwait) \
44 _SifLoadModule(path, arg_len, args, NULL, LF_F_MOD_LOAD, dontwait);
46 #define SifLoadModuleEncryptedSpecial(path, arg_len, args, dontwait) \
47 _SifLoadModule(path, arg_len, args, NULL, LF_F_MG_MOD_LOAD, dontwait);
49 #ifdef F_SifIopRebootBufferEncrypted
52 int iopbtconf_img_size;
53 void *imgdrv_iop, *udnl_iop, *iopbtconf_img_iop;
71 if(imgdrv_iop ==
NULL || udnl_iop ==
NULL || iopbtconf_img_iop ==
NULL)
74 iopbtconf_img_size = 0;
79 dmat[0].
dest = imgdrv_iop;
82 dmat[1].
src = (
void*)udnl;
83 dmat[1].
dest = udnl_iop;
87 dmat[2].
dest = iopbtconf_img_iop;
88 dmat[2].
size = iopbtconf_img_size;
90 imgdrv_img[0] = udnl_iop;
91 imgdrv_img[1] = iopbtconf_img_iop;
92 imgdrv_img_size[0] = size;
93 imgdrv_img_size[1] = iopbtconf_img_size;
118 #ifdef F_SifIopRebootBuffer
119 static int generateIOPBTCONF_img(
void *output,
const void *ioprp);
123 int iopbtconf_img_size;
124 void *imgdrv_iop, *ioprp_iop, *iopbtconf_img_iop;
125 int *imgdrv_img_size;
142 if(imgdrv_iop ==
NULL || ioprp_iop ==
NULL || iopbtconf_img_iop ==
NULL)
145 iopbtconf_img_size = generateIOPBTCONF_img(
iopbtconf_img, ioprp);
150 dmat[0].
dest = imgdrv_iop;
153 dmat[1].
src = (
void*)ioprp;
154 dmat[1].
dest = ioprp_iop;
158 dmat[2].
dest = iopbtconf_img_iop;
159 dmat[2].
size = iopbtconf_img_size;
161 imgdrv_img[0] = ioprp_iop;
162 imgdrv_img[1] = iopbtconf_img_iop;
163 imgdrv_img_size[0] = size;
164 imgdrv_img_size[1] = iopbtconf_img_size;
188 typedef struct romdir{
190 u16 ExtInfoEntrySize;
194 typedef struct extinfo{
201 EXTINFO_TYPE_DATE = 1,
202 EXTINFO_TYPE_VERSION,
203 EXTINFO_TYPE_COMMENT,
204 EXTINFO_TYPE_FIXED = 0x7F
216 {
"EXTINFO", 0, 0x10},
217 {
"IOPBTCONF", 8, -1},
230 static int generateIOPBTCONF_img(
void *output,
const void *ioprp)
232 int size, offset, fsize_rounded;
237 romdir = (romdir_t*)ioprp;
238 if(strcmp(romdir[0].name,
"RESET") || strcmp(romdir[1].name,
"ROMDIR"))
244 for(; romdir->name[0] !=
'\0'; romdir++,offset += fsize_rounded)
246 fsize_rounded = (romdir->size + 15) & ~15;
247 if(strcmp(romdir->name,
"IOPBTCONF") == 0)
249 romdir->name[0] =
'X';
251 size = romdir->size +
sizeof(iopbtconf_img_base);
252 ptr_out = (
u8*)output;
253 ptr_in = (
const u8*)ioprp;
254 memcpy(ptr_out, &iopbtconf_img_base,
sizeof(iopbtconf_img_base));
255 memcpy(ptr_out +
sizeof(iopbtconf_img_base), &ptr_in[offset], romdir->size);
256 ((romdir_t*)ptr_out)[3].size = romdir->size;
#define SifLoadModuleSpecial(path, arg_len, args, dontwait)
u8 iopbtconf_img[IOPBTCONF_IOP_MAX_SIZE]
#define SifLoadModuleEncryptedSpecial(path, arg_len, args, dontwait)
unsigned int size__imgdrv_irx
#define IOPBTCONF_IOP_MAX_SIZE
unsigned char _imgdrv_irx[]
int SifLoadModule(const char *path, int arg_len, const char *args)
void SifLoadFileExit(void)
int SifLoadFileInit(void)
int SifLoadModuleBuffer(void *ptr, int arg_len, const char *args)
int SifIopReset(const char *arg, int mode)
int SifIopRebootBuffer(const void *ioprp, int size)
int SifIopRebootBufferEncrypted(const void *udnl, int size)
void * SifAllocIopHeap(int size)
u32 SifSetDma(SifDmaTransfer_t *sdd, s32 len)
int SifSetReg(u32 register_num, int register_value)
void FlushCache(s32 operation)
int sbv_patch_enable_lmb(void)
void SifInitRpc(int mode)