Skip to content

Commit 6f673c2

Browse files
committed
Replace constants in imgdrv by searching instead of hardcoded offsets
1 parent 770dd62 commit 6f673c2

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

ee_core/src/iopmgr.c

+9-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ extern int _iop_reboot_count;
2020

2121
static void ResetIopSpecial(const char *args, unsigned int arglen)
2222
{
23+
int i;
2324
void *pIOP_buffer, *IOPRP_img, *imgdrv_irx;
2425
unsigned int length_rounded, CommandLen, size_IOPRP_img, size_imgdrv_irx;
2526
char command[RESET_ARG_MAX + 1];
@@ -44,8 +45,14 @@ static void ResetIopSpecial(const char *args, unsigned int arglen)
4445

4546
CopyToIop(IOPRP_img, length_rounded, pIOP_buffer);
4647

47-
*(void **)(UNCACHED_SEG(&((unsigned char *)imgdrv_irx)[0x180])) = pIOP_buffer;
48-
*(u32 *)(UNCACHED_SEG(&((unsigned char *)imgdrv_irx)[0x184])) = size_IOPRP_img;
48+
for (i = 0; i < size_imgdrv_irx; i += 4) {
49+
if (*(u32 *)((&((unsigned char *)imgdrv_irx)[i])) == 0xDEC1DEC1) {
50+
*(void **)(UNCACHED_SEG(&((unsigned char *)imgdrv_irx)[i])) = pIOP_buffer;
51+
}
52+
if (*(u32 *)((&((unsigned char *)imgdrv_irx)[i])) == 0xDEC2DEC2) {
53+
*(u32 *)(UNCACHED_SEG(&((unsigned char *)imgdrv_irx)[i])) = size_IOPRP_img;
54+
}
55+
}
4956

5057
LoadMemModule(0, imgdrv_irx, size_imgdrv_irx, 0, NULL);
5158

0 commit comments

Comments
 (0)