|
|
@@ -34,151 +34,151 @@ static u8 customKern = 0; |
|
|
|
|
|
typedef struct _pkg2_hdr_t
|
|
|
{
|
|
|
u8 ctr[0x10];
|
|
|
u8 sec_ctr[0x40];
|
|
|
u32 magic;
|
|
|
u32 base;
|
|
|
u32 pad0;
|
|
|
u16 version;
|
|
|
u16 pad1;
|
|
|
u32 sec_size[4];
|
|
|
u32 sec_off[4];
|
|
|
u8 sec_sha256[0x80];
|
|
|
u8 data[];
|
|
|
u8 ctr[0x10];
|
|
|
u8 sec_ctr[0x40];
|
|
|
u32 magic;
|
|
|
u32 base;
|
|
|
u32 pad0;
|
|
|
u16 version;
|
|
|
u16 pad1;
|
|
|
u32 sec_size[4];
|
|
|
u32 sec_off[4];
|
|
|
u8 sec_sha256[0x80];
|
|
|
u8 data[];
|
|
|
} pkg2_hdr_t;
|
|
|
|
|
|
typedef struct _pkg2_ini1_t
|
|
|
{
|
|
|
u32 magic;
|
|
|
u32 size;
|
|
|
u32 num_procs;
|
|
|
u32 pad;
|
|
|
u32 magic;
|
|
|
u32 size;
|
|
|
u32 num_procs;
|
|
|
u32 pad;
|
|
|
} pkg2_ini1_t;
|
|
|
|
|
|
typedef struct _pkg2_kip1_sec_t
|
|
|
{
|
|
|
u32 offset;
|
|
|
u32 size_decomp;
|
|
|
u32 size_comp;
|
|
|
u32 attrib;
|
|
|
u32 offset;
|
|
|
u32 size_decomp;
|
|
|
u32 size_comp;
|
|
|
u32 attrib;
|
|
|
} pkg2_kip1_sec_t;
|
|
|
|
|
|
#define KIP1_NUM_SECTIONS 6
|
|
|
|
|
|
typedef struct _pkg2_kip1_t
|
|
|
{
|
|
|
u32 magic;
|
|
|
char name[12];
|
|
|
u64 tid;
|
|
|
u32 proc_cat;
|
|
|
u8 main_thrd_prio;
|
|
|
u8 def_cpu_core;
|
|
|
u8 res;
|
|
|
u8 flags;
|
|
|
pkg2_kip1_sec_t sections[KIP1_NUM_SECTIONS];
|
|
|
u32 caps[0x20];
|
|
|
u8 data[];
|
|
|
u32 magic;
|
|
|
char name[12];
|
|
|
u64 tid;
|
|
|
u32 proc_cat;
|
|
|
u8 main_thrd_prio;
|
|
|
u8 def_cpu_core;
|
|
|
u8 res;
|
|
|
u8 flags;
|
|
|
pkg2_kip1_sec_t sections[KIP1_NUM_SECTIONS];
|
|
|
u32 caps[0x20];
|
|
|
u8 data[];
|
|
|
} pkg2_kip1_t;
|
|
|
|
|
|
typedef struct _pkg2_kip1_info_t
|
|
|
{
|
|
|
pkg2_kip1_t *kip1;
|
|
|
u32 size;
|
|
|
link_t link;
|
|
|
pkg2_kip1_t *kip1;
|
|
|
u32 size;
|
|
|
link_t link;
|
|
|
} pkg2_kip1_info_t;
|
|
|
|
|
|
typedef struct {
|
|
|
const char *id;
|
|
|
u32 kb;
|
|
|
u32 tsec_off;
|
|
|
u32 pkg11_off;
|
|
|
u32 sec_map[3];
|
|
|
u32 secmon_base;
|
|
|
u32 warmboot_base;
|
|
|
int set_warmboot;
|
|
|
const char *id;
|
|
|
u32 kb;
|
|
|
u32 tsec_off;
|
|
|
u32 pkg11_off;
|
|
|
u32 sec_map[3];
|
|
|
u32 secmon_base;
|
|
|
u32 warmboot_base;
|
|
|
int set_warmboot;
|
|
|
} pk11_offs;
|
|
|
|
|
|
typedef struct {
|
|
|
u32 magic;
|
|
|
u32 wb_size;
|
|
|
u32 wb_off;
|
|
|
u32 pad;
|
|
|
u32 ldr_size;
|
|
|
u32 ldr_off;
|
|
|
u32 sm_size;
|
|
|
u32 sm_off;
|
|
|
u32 magic;
|
|
|
u32 wb_size;
|
|
|
u32 wb_off;
|
|
|
u32 pad;
|
|
|
u32 ldr_size;
|
|
|
u32 ldr_off;
|
|
|
u32 sm_size;
|
|
|
u32 sm_off;
|
|
|
} pk11_header;
|
|
|
|
|
|
static u32 PRC_ID_SND_100[] =
|
|
|
{
|
|
|
0xA9BF2FEA, 0x2A0E03EB, 0xD37EF56B, 0xF86B6B8B, 0x92FFFFE9, 0x8A090168, 0xD2FFFFE9, 0x8A09016B,
|
|
|
0xD2FFFFC9, 0xEB09017F, 0x54000040, 0xF9412948, 0xA8C12FEA
|
|
|
0xA9BF2FEA, 0x2A0E03EB, 0xD37EF56B, 0xF86B6B8B, 0x92FFFFE9, 0x8A090168, 0xD2FFFFE9, 0x8A09016B,
|
|
|
0xD2FFFFC9, 0xEB09017F, 0x54000040, 0xF9412948, 0xA8C12FEA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_RCV_100[] =
|
|
|
{
|
|
|
0xA9BF2FEA, 0x2A1C03EA, 0xD37EF54A, 0xF86A69AA, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A,
|
|
|
0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9412968, 0xA8C12FEA
|
|
|
0xA9BF2FEA, 0x2A1C03EA, 0xD37EF54A, 0xF86A69AA, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A,
|
|
|
0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9412968, 0xA8C12FEA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_SND_200[] =
|
|
|
{
|
|
|
0xA9BF2FEA, 0x2A1803EB, 0xD37EF56B, 0xF86B6B8B, 0x92FFFFE9, 0x8A090168, 0xD2FFFFE9, 0x8A09016B,
|
|
|
0xD2FFFFC9, 0xEB09017F, 0x54000040, 0xF9413148, 0xA8C12FEA
|
|
|
0xA9BF2FEA, 0x2A1803EB, 0xD37EF56B, 0xF86B6B8B, 0x92FFFFE9, 0x8A090168, 0xD2FFFFE9, 0x8A09016B,
|
|
|
0xD2FFFFC9, 0xEB09017F, 0x54000040, 0xF9413148, 0xA8C12FEA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_RCV_200[] =
|
|
|
{
|
|
|
0xA9BF2FEA, 0x2A0F03EA, 0xD37EF54A, 0xF9405FEB, 0xF86A696A, 0xF9407BEB, 0x92FFFFE9, 0x8A090148,
|
|
|
0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9413168, 0xA8C12FEA
|
|
|
0xA9BF2FEA, 0x2A0F03EA, 0xD37EF54A, 0xF9405FEB, 0xF86A696A, 0xF9407BEB, 0x92FFFFE9, 0x8A090148,
|
|
|
0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9413168, 0xA8C12FEA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_SND_300[] =
|
|
|
{
|
|
|
0xA9BF2FEA, 0x2A1803EB, 0xD37EF56B, 0xF86B6B8B, 0x92FFFFE9, 0x8A090168, 0xD2FFFFE9, 0x8A09016B,
|
|
|
0xD2FFFFC9, 0xEB09017F, 0x54000040, 0xF9415548, 0xA8C12FEA
|
|
|
0xA9BF2FEA, 0x2A1803EB, 0xD37EF56B, 0xF86B6B8B, 0x92FFFFE9, 0x8A090168, 0xD2FFFFE9, 0x8A09016B,
|
|
|
0xD2FFFFC9, 0xEB09017F, 0x54000040, 0xF9415548, 0xA8C12FEA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_RCV_300[] =
|
|
|
{
|
|
|
0xA9BF2FEA, 0x2A0F03EA, 0xD37EF54A, 0xF9405FEB, 0xF86A696A, 0xF9407BEB, 0x92FFFFE9, 0x8A090148,
|
|
|
0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415568, 0xA8C12FEA
|
|
|
0xA9BF2FEA, 0x2A0F03EA, 0xD37EF54A, 0xF9405FEB, 0xF86A696A, 0xF9407BEB, 0x92FFFFE9, 0x8A090148,
|
|
|
0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415568, 0xA8C12FEA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_SND_302[] =
|
|
|
{
|
|
|
0xA9BF2FEA, 0x2A1803EB, 0xD37EF56B, 0xF86B6B8B, 0x92FFFFE9, 0x8A090168, 0xD2FFFFE9, 0x8A09016B,
|
|
|
0xD2FFFFC9, 0xEB09017F, 0x54000040, 0xF9415548, 0xA8C12FEA
|
|
|
0xA9BF2FEA, 0x2A1803EB, 0xD37EF56B, 0xF86B6B8B, 0x92FFFFE9, 0x8A090168, 0xD2FFFFE9, 0x8A09016B,
|
|
|
0xD2FFFFC9, 0xEB09017F, 0x54000040, 0xF9415548, 0xA8C12FEA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_RCV_302[] =
|
|
|
{
|
|
|
0xA9BF2FEA, 0x2A0F03EA, 0xD37EF54A, 0xF9405FEB, 0xF86A696A, 0xF9407BEB, 0x92FFFFE9, 0x8A090148,
|
|
|
0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415568, 0xA8C12FEA
|
|
|
0xA9BF2FEA, 0x2A0F03EA, 0xD37EF54A, 0xF9405FEB, 0xF86A696A, 0xF9407BEB, 0x92FFFFE9, 0x8A090148,
|
|
|
0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415568, 0xA8C12FEA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_SND_400[] =
|
|
|
{
|
|
|
0x2A1703EA, 0xD37EF54A, 0xF86A6B8A, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9,
|
|
|
0xEB09015F, 0x54000060, 0xF94053EA, 0xF9415948, 0xF94053EA
|
|
|
0x2A1703EA, 0xD37EF54A, 0xF86A6B8A, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9,
|
|
|
0xEB09015F, 0x54000060, 0xF94053EA, 0xF9415948, 0xF94053EA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_RCV_400[] =
|
|
|
{
|
|
|
0xF9403BED, 0x2A0E03EA, 0xD37EF54A, 0xF86A69AA, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A,
|
|
|
0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415B28, 0xD503201F
|
|
|
0xF9403BED, 0x2A0E03EA, 0xD37EF54A, 0xF86A69AA, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A,
|
|
|
0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415B28, 0xD503201F
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_SND_500[] =
|
|
|
{
|
|
|
0x2A1703EA, 0xD37EF54A, 0xF86A6B6A, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9,
|
|
|
0xEB09015F, 0x54000060, 0xF94043EA, 0xF9415948, 0xF94043EA
|
|
|
0x2A1703EA, 0xD37EF54A, 0xF86A6B6A, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9,
|
|
|
0xEB09015F, 0x54000060, 0xF94043EA, 0xF9415948, 0xF94043EA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_RCV_500[] =
|
|
|
{
|
|
|
0xF9403BED, 0x2A1503EA, 0xD37EF54A, 0xF86A69AA, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A,
|
|
|
0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415B08, 0xF9406FEA
|
|
|
0xF9403BED, 0x2A1503EA, 0xD37EF54A, 0xF86A69AA, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A,
|
|
|
0xD2FFFFC9, 0xEB09015F, 0x54000040, 0xF9415B08, 0xF9406FEA
|
|
|
};
|
|
|
|
|
|
static u32 PRC_ID_SND_600[] =
|
|
|
@@ -188,7 +188,7 @@ static u32 PRC_ID_SND_600[] = |
|
|
|
|
|
static u32 PRC_ID_RCV_600[] =
|
|
|
{
|
|
|
0xA9BF2FEA, 0xF94043EB, 0x2A1503EA, 0xD37EF54A, 0xF86A696A, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000100, 0xA9BF27E8, 0xF9400308, 0xF9401D08, 0xAA1803E0, 0xD63F0100, 0xA8C127E8, 0xAA0003E8, 0xA8C12FEA, 0xAA0803E0
|
|
|
0xA9BF2FEA, 0xF94043EB, 0x2A1503EA, 0xD37EF54A, 0xF86A696A, 0x92FFFFE9, 0x8A090148, 0xD2FFFFE9, 0x8A09014A, 0xD2FFFFC9, 0xEB09015F, 0x54000100, 0xA9BF27E8, 0xF9400308, 0xF9401D08, 0xAA1803E0, 0xD63F0100, 0xA8C127E8, 0xAA0003E8, 0xA8C12FEA, 0xAA0803E0
|
|
|
};
|
|
|
|
|
|
typedef struct kipdiff_s {
|
|
|
@@ -223,4 +223,6 @@ void pkg1_unpack(pk11_offs *offs, u8 *pkg1); |
|
|
void buildFirmwarePackage(u8 *kernel, u32 kernel_size, link_t *kips_info);
|
|
|
size_t calcKipSize(pkg2_kip1_t *kip1);
|
|
|
void pkg2_parse_kips(link_t *info, pkg2_hdr_t *pkg2);
|
|
|
void loadKip(link_t *info, char *path);
|
|
|
void loadKip(link_t *info, char *path);
|
|
|
u32 *getSndPayload(u32 id, size_t *size);
|
|
|
u32 *getRcvPayload(u32 id, size_t *size);
|