void free(void *ptr) { if(ptr == NULL) return; const int bs = tlsf_block_size(ptr); if(bs >= 65536) { const int p = (intptr_t)ptr; const int np = ROUND_UP(p, 65536); int s = bs - (np - p); if(s > 0) { s &= ~0xffff; if(s > 0) { #if 0 tracelog(TRACE_NO_PROP, TRACE_DEBUG, "MEMORY", "free(%p+%d) == page_free(0x%x+%d)", ptr, bs, np, s); #endif #ifdef USE_VIRTUAL_MEM if(Lv2Syscall2(308, np, s)) // Invalidate tracelog(TRACE_NO_PROP, TRACE_ERROR, "MEMORY", "Invalidate failed"); if(Lv2Syscall2(310, np, s)) // Sync tracelog(TRACE_NO_PROP, TRACE_ERROR, "MEMORY", "Sync failed"); #endif } } } hts_lwmutex_lock(&mutex); tlsf_free(gpool, ptr); hts_lwmutex_unlock(&mutex); }
void poke_lv1(u64 _addr, u64 _val) { //if(dex_mode && c_firmware==4.21f) return; //if(bdisk_mode && c_firmware>=4.21f) return; if((rex_compatible==0) && (c_firmware==3.55f || c_firmware==3.41f)) { u64 _offset = (_addr & 0xFFFFFFFFFFFFF000ULL); install_new_poke(); lv1_355_undocumented_function_114(_offset, HV_PAGE_SIZE, HV_SIZE, &mmap_lpar_addr); mm_355_map_lpar_memory_region(mmap_lpar_addr, HV_BASE, HV_SIZE, HV_PAGE_SIZE, 0); Lv2Syscall2(7, HV_BASE + (_addr - _offset), _val); remove_new_poke(); lv1_355_undocumented_function_115(mmap_lpar_addr); } else { Lv2Syscall2(9, _addr, _val); } }
void vm_stat_log(void) { vm_statistics vs; Lv2Syscall2(312, heap_base, (uint64_t)&vs); TRACE(TRACE_DEBUG, "VM", "pfppu=%"PRId64" pfspu=%"PRId64" pin=%"PRId64" pout=%"PRId64" " "pmem=%d kB/%d kB", vs.page_fault_ppu, vs.page_fault_spu, vs.page_in, vs.page_out, vs.pmem_used / 1024, vs.pmem_total / 1024); }
void generic_patches() { //Remove Lv2 memory protection if(c_firmware==3.55f) { install_new_poke(); if (!map_lv1_355()) { remove_new_poke(); return; } Lv2Syscall2(7, HV_BASE + HV_OFFSET + 0, 0x0000000000000001ULL); Lv2Syscall2(7, HV_BASE + HV_OFFSET + 8, 0xe0d251b556c59f05ULL); Lv2Syscall2(7, HV_BASE + HV_OFFSET + 16, 0xc232fcad552c80d7ULL); Lv2Syscall2(7, HV_BASE + HV_OFFSET + 24, 0x65140cd200000000ULL); unmap_lv1_355(); remove_new_poke(); } if(c_firmware==4.21f) { Lv2Syscall2(9, HV_START_OFFSET_421 + 0, 0x0000000000000001ULL); Lv2Syscall2(9, HV_START_OFFSET_421 + 8, 0xe0d251b556c59f05ULL); Lv2Syscall2(9, HV_START_OFFSET_421 + 16, 0xc232fcad552c80d7ULL); Lv2Syscall2(9, HV_START_OFFSET_421 + 24, 0x65140cd200000000ULL); } if( (c_firmware>=4.30f && c_firmware<=4.53f) ) { Lv2Syscall2(9, HV_START_OFFSET_430 + 0, 0x0000000000000001ULL); Lv2Syscall2(9, HV_START_OFFSET_430 + 8, 0xe0d251b556c59f05ULL); Lv2Syscall2(9, HV_START_OFFSET_430 + 16, 0xc232fcad552c80d7ULL); Lv2Syscall2(9, HV_START_OFFSET_430 + 24, 0x65140cd200000000ULL); } if( (c_firmware>=4.55f && c_firmware<=4.78f) ) { Lv2Syscall2(9, HV_START_OFFSET_455 + 0, 0x0000000000000001ULL); Lv2Syscall2(9, HV_START_OFFSET_455 + 8, 0xe0d251b556c59f05ULL); Lv2Syscall2(9, HV_START_OFFSET_455 + 16, 0xc232fcad552c80d7ULL); Lv2Syscall2(9, HV_START_OFFSET_455 + 24, 0x65140cd200000000ULL); } if(!dex_mode) { if(c_firmware==3.55f) { Lv2Syscall2(7, 0x8000000000055EA0ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000055F64ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000055F10ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000055F18ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000007AF64ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000007AF78ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.21f) { Lv2Syscall2(7, 0x8000000000057020ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x80000000000570E4ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000057090ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000057098ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005AA54ULL, 0x2F83000060000000ULL ); // fix 80010009 error Lv2Syscall2(7, 0x800000000005AA68ULL, 0x2F83000060000000ULL ); // fix 80010019 error } if(c_firmware==4.30f) { Lv2Syscall2(7, 0x8000000000057170ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000057234ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x80000000000571E0ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x80000000000571E8ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005ABA4ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005ABB8ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.31f) { Lv2Syscall2(7, 0x8000000000057174ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x800000000005723CULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x80000000000571E8ULL, 0x600000002F840004ULL ); Lv2Syscall2(7, 0x80000000000571F0ULL, 0x48000098E8629870ULL ); Lv2Syscall2(7, 0x800000000005ABACULL, 0x60000000E8610188ULL ); Lv2Syscall2(7, 0x800000000005ABA0ULL, 0x600000005463063EULL ); } if(c_firmware==4.40f) { Lv2Syscall2(7, 0x80000000000560BCULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000056180ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error +C4 Lv2Syscall2(7, 0x800000000005612CULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000056134ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x8000000000059AF0ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x8000000000059B04ULL, 0x2F83000060000000ULL ); } #define pokeq(a, b) (Lv2Syscall2(7, a, b)) if(c_firmware==4.41f) { Lv2Syscall2(7, 0x80000000000560C0ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000056184ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000056130ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000056138ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x8000000000059AF4ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x8000000000059B08ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.46f) { Lv2Syscall2(7, 0x80000000000560C0ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000056184ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000056130ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000056138ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x8000000000059AF4ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x8000000000059B08ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.50f) { Lv2Syscall2(7, 0x80000000000560BCULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000056180ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x800000000005612CULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000056134ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x8000000000059AF0ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x8000000000059B04ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.53f) { Lv2Syscall2(7, 0x80000000000560C0ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000056184ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000056130ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000056138ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x8000000000059AF4ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x8000000000059B08ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.55f) { Lv2Syscall2(7, 0x8000000000056380ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000056444ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x80000000000563F0ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x80000000000563F8ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005A2ECULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005A300ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.60f) { Lv2Syscall2(7, 0x8000000000056588ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x800000000005664CULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x80000000000565F8ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000056600ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005A654ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005A668ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.65f || c_firmware==4.66f) { Lv2Syscall2(7, 0x800000000005658CULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000056650ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x80000000000565FCULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000056604ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005A658ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005A66CULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x8000000000056230ULL, 0x386000012F830000ULL ); // ignore LIC.DAT check } if(c_firmware==4.70f) { Lv2Syscall2(7, 0x8000000000056588ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x800000000005664CULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x80000000000565F8ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000056600ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005A6DCULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005A6F0ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005622CULL, 0x386000012F830000ULL ); // ignore LIC.DAT check } if(c_firmware==4.75f || c_firmware==4.76f || c_firmware==4.78f) { Lv2Syscall2(7, 0x800000000005658CULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000056650ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x80000000000565FCULL, 0x419E00D860000000ULL ); // Original: 0x419E00D8419D00C0ULL Lv2Syscall2(7, 0x8000000000056604ULL, 0x2F84000448000098ULL ); // Original: 0x2F840004409C0048ULL //PATCH_JUMP Lv2Syscall2(7, 0x800000000005A6E0ULL, 0x2F83000060000000ULL ); // fix 80010009 error Original: 0x2F830000419E00ACULL Lv2Syscall2(7, 0x800000000005A6F4ULL, 0x2F83000060000000ULL ); // fix 80010009 error Original: 0x2F830000419E00ACULL Lv2Syscall2(7, 0x8000000000056230ULL, 0x386000012F830000ULL ); // ignore LIC.DAT check } } else if (dex_mode) { //DEX if(c_firmware==3.55f) { Lv2Syscall2(7, 0x800000000005978CULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000059850ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x80000000000597FCULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000059804ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000007EF5CULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000007EF70ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.21f) { Lv2Syscall2(7, 0x800000000005A938ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x800000000005A9FCULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x800000000005A9A8ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x800000000005A9B0ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005E36CULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005E380ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.30f) { Lv2Syscall2(7, 0x800000000005AA88ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x800000000005AB4CULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x800000000005AAF8ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x800000000005AB00ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005E4BCULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005E4D0ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.41f) { Lv2Syscall2(7, 0x80000000000599D8ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000059A9CULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000059A48ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000059A50ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005D40CULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005D420ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.46f) { Lv2Syscall2(7, 0x80000000000599D8ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000059A9CULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000059A48ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000059A50ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005D40CULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005D420ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.50f) { Lv2Syscall2(7, 0x8000000000059A8CULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000059B50ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000059AFCULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000059B04ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005D4C0ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005D4D4ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.53f) { Lv2Syscall2(7, 0x8000000000059A90ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000059B54ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000059B00ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000059B08ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005D4C4ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005D4D8ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.55f) { Lv2Syscall2(7, 0x8000000000059D50ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x8000000000059E14ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000059DC0ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000059DC8ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005DCB8ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005DCD0ULL, 0x2F83000060000000ULL ); } if(c_firmware==4.60f) { Lv2Syscall2(7, 0x8000000000059F58ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x800000000005A01CULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000059FC8ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000059FD0ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005E020ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005E038ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x8000000000059BFCULL, 0x386000012F830000ULL ); // ignore LIC.DAT check } if(c_firmware==4.65f || c_firmware==4.66f) { Lv2Syscall2(7, 0x8000000000059F5CULL, 0x63FF003D60000000ULL ); // fix 8001003D error Original: 0x63FF003D419EFFD4ULL Lv2Syscall2(7, 0x800000000005A020ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Original: 0x3FE0800163FF003EULL Lv2Syscall2(7, 0x8000000000059FCCULL, 0x419E00D860000000ULL ); // Original: 0x419E00D8419D00C0ULL Lv2Syscall2(7, 0x8000000000059FD4ULL, 0x2F84000448000098ULL ); // Original: 0x2F840004409C0048ULL //PATCH_JUMP Lv2Syscall2(7, 0x800000000005E028ULL, 0x2F83000060000000ULL ); // fix 80010009 error Original: 0x2F830000419E00ACULL Lv2Syscall2(7, 0x800000000005E03CULL, 0x2F83000060000000ULL ); // fix 80010009 error Original: 0x2F830000419E00ACULL Lv2Syscall2(7, 0x8000000000059C00ULL, 0x386000012F830000ULL ); // ignore LIC.DAT check } if(c_firmware==4.70f) { Lv2Syscall2(7, 0x8000000000059F58ULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x800000000005A01CULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000059FC8ULL, 0x419E00D860000000ULL ); Lv2Syscall2(7, 0x8000000000059FD0ULL, 0x2F84000448000098ULL ); Lv2Syscall2(7, 0x800000000005E0ACULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x800000000005E0C0ULL, 0x2F83000060000000ULL ); Lv2Syscall2(7, 0x8000000000059BFCULL, 0x386000012F830000ULL ); // ignore LIC.DAT check } if(c_firmware==4.75f || c_firmware==4.76f || c_firmware==4.78f) { Lv2Syscall2(7, 0x80000000000595FCULL, 0x63FF003D60000000ULL ); // fix 8001003D error Lv2Syscall2(7, 0x800000000005A020ULL, 0x3FE080013BE00000ULL ); // fix 8001003E error Lv2Syscall2(7, 0x8000000000059FCCULL, 0x419E00D860000000ULL ); // Original: 0x419E00D8419D00C0ULL Lv2Syscall2(7, 0x8000000000059FD4ULL, 0x2F84000448000098ULL ); // Original: 0x2F840004409C0048ULL //PATCH_JUMP Lv2Syscall2(7, 0x800000000005E0B0ULL, 0x2F83000060000000ULL ); // fix 80010009 error Original: 0x2F830000419E00ACULL Lv2Syscall2(7, 0x800000000005E0C4ULL, 0x2F83000060000000ULL ); // fix 80010009 error Original: 0x2F830000419E00ACULL Lv2Syscall2(7, 0x8000000000059C00ULL, 0x386000012F830000ULL ); // ignore LIC.DAT check } } }