8#ifndef RVL_SDK_OS_HARDWARE_H 
    9#define RVL_SDK_OS_HARDWARE_H 
   12#include <revolution/DVD/dvd.h> 
   13#include <revolution/OS/OSAddress.h> 
   14#include <revolution/OS/OSThread.h> 
   24#define __DEF_ADDR_OFFSETS(name, addr)                                         \ 
   25    static const u32 OS_PHYS_##name = (addr) - 0x80000000;                     \ 
   26    static const u32 OS_CACHED_##name = (addr);                                \ 
   27    static const u32 OS_UNCACHED_##name = (addr) + (0xC0000000 - 0x80000000); 
   31#define OS_DEF_GLOBAL_VAR(type, name, addr)                                    \ 
   33    type OS_##name AT_ADDRESS(addr);                                                   \ 
   34    __DEF_ADDR_OFFSETS(name, addr) 
   38#define OS_DEF_GLOBAL_ARR(type, name, arr, addr)                               \ 
   40    type OS_##name arr AT_ADDRESS(addr);                                               \ 
   41    __DEF_ADDR_OFFSETS(name, addr) 
   44#define OS_DEF_HW_REG(type, name, addr)                                        \ 
   46    type OS_##name AT_ADDRESS(addr); 
   49    OS_BOOT_MAGIC_BOOTROM = 0xD15EA5E,
 
   50    OS_BOOT_MAGIC_JTAG = 0xE5207C22,
 
   69    void* exceptionHookLR; 
 
 
   83    u32 totalTextDataLimit; 
 
   84    u32 simulatedMem2Size;  
 
 
   91OS_DEF_GLOBAL_VAR(
OSBootInfo, BOOT_INFO,                   0x80000000);
 
   93OS_DEF_GLOBAL_ARR(u8, DB_INTEGRATOR_HOOK, [0x24],          0x80000060);
 
   94OS_DEF_GLOBAL_VAR(
OSContext*, CURRENT_CONTEXT_PHYS,        0x800000C0);
 
   95OS_DEF_GLOBAL_VAR(u32, PREV_INTR_MASK,                     0x800000C4);
 
   96OS_DEF_GLOBAL_VAR(u32, CURRENT_INTR_MASK,                  0x800000C8);
 
   97OS_DEF_GLOBAL_VAR(u32, TV_FORMAT,                          0x800000CC);
 
   98OS_DEF_GLOBAL_VAR(u32, ARAM_SIZE,                          0x800000D0);
 
   99OS_DEF_GLOBAL_VAR(
OSContext*, CURRENT_CONTEXT,             0x800000D4);
 
  100OS_DEF_GLOBAL_VAR(
OSContext*, CURRENT_FPU_CONTEXT,         0x800000D8);
 
  102OS_DEF_GLOBAL_VAR(
OSThread*, CURRENT_THREAD,               0x800000E4);
 
  103OS_DEF_GLOBAL_VAR(u32, DEBUG_MONITOR_SIZE,                 0x800000E8);
 
  104OS_DEF_GLOBAL_VAR(
void*, DEBUG_MONITOR,                    0x800000EC);
 
  105OS_DEF_GLOBAL_VAR(u32, SIMULATED_MEM_SIZE,                 0x800000F0);
 
  106OS_DEF_GLOBAL_VAR(
OSBI2*, DVD_BI2,                         0x800000F4);
 
  107OS_DEF_GLOBAL_VAR(u32, BUS_CLOCK_SPEED,                    0x800000F8);
 
  108OS_DEF_GLOBAL_VAR(u32, CPU_CLOCK_SPEED,                    0x800000FC);
 
  115OS_DEF_GLOBAL_ARR(
void*, EXCEPTION_TABLE, [15],          0x80003000);
 
  116OS_DEF_GLOBAL_VAR(
void*, INTR_HANDLER_TABLE,             0x80003040);
 
  117OS_DEF_GLOBAL_ARR(
volatile s32, EXI_LAST_INSERT, [2],    0x800030C0);
 
  118OS_DEF_GLOBAL_VAR(
void*, FIRST_REL,                      0x800030C8);
 
  119OS_DEF_GLOBAL_VAR(
void*, LAST_REL,                       0x800030CC);
 
  120OS_DEF_GLOBAL_VAR(
void*, REL_NAME_TABLE,                 0x800030D0);
 
  121OS_DEF_GLOBAL_VAR(u32, DOL_TOTAL_TEXT_DATA,              0x800030D4);
 
  122OS_DEF_GLOBAL_VAR(s64, SYSTEM_TIME,                      0x800030D8);
 
  123OS_DEF_GLOBAL_VAR(u8, PAD_FLAGS,                         0x800030E3);
 
  124OS_DEF_GLOBAL_VAR(u16, GC_PAD_3_BTN,                     0x800030E4);
 
  125OS_DEF_GLOBAL_VAR(
volatile u16, DVD_DEVICE_CODE,         0x800030E6);
 
  126OS_DEF_GLOBAL_VAR(u8, BI2_DEBUG_FLAG,                    0x800030E8);
 
  127OS_DEF_GLOBAL_VAR(u8, PAD_SPEC,                          0x800030E9);
 
  128OS_DEF_GLOBAL_VAR(
OSExecParams*, DOL_EXEC_PARAMS,        0x800030F0);
 
  129OS_DEF_GLOBAL_VAR(u32, PHYSICAL_MEM1_SIZE,               0x80003100);
 
  130OS_DEF_GLOBAL_VAR(u32, SIMULATED_MEM1_SIZE,              0x80003104);
 
  131OS_DEF_GLOBAL_VAR(
void*, USABLE_MEM1_START,              0x8000310C);
 
  132OS_DEF_GLOBAL_VAR(
void*, USABLE_MEM1_END,                0x80003110);
 
  133OS_DEF_GLOBAL_VAR(u32, PHYSICAL_MEM2_SIZE,               0x80003118);
 
  134OS_DEF_GLOBAL_VAR(u32, SIMULATED_MEM2_SIZE,              0x8000311C);
 
  135OS_DEF_GLOBAL_VAR(
void*, ACCESSIBLE_MEM2_END,            0x80003120);
 
  136OS_DEF_GLOBAL_VAR(
void*, USABLE_MEM2_START,              0x80003124);
 
  137OS_DEF_GLOBAL_VAR(
void*, USABLE_MEM2_END,                0x80003128);
 
  138OS_DEF_GLOBAL_VAR(
void*, IPC_BUFFER_START,               0x80003130);
 
  139OS_DEF_GLOBAL_VAR(
void*, IPC_BUFFER_END,                 0x80003134);
 
  140OS_DEF_GLOBAL_VAR(u32, HOLLYWOOD_REV,                    0x80003138);
 
  141OS_DEF_GLOBAL_VAR(u32, IOS_VERSION,                      0x80003140);
 
  142OS_DEF_GLOBAL_VAR(u32, IOS_BUILD_DATE,                   0x80003144);
 
  143OS_DEF_GLOBAL_VAR(
void*, IOS_HEAP_START,                 0x80003148);
 
  144OS_DEF_GLOBAL_VAR(
void*, IOS_HEAP_END,                   0x8000314C);
 
  145OS_DEF_GLOBAL_VAR(u32, GDDR_VENDOR_CODE,                 0x80003158);
 
  146OS_DEF_GLOBAL_VAR(u8, BOOT_PROGRAM_TARGET,               0x8000315C);
 
  147OS_DEF_GLOBAL_VAR(u8, APPLOADER_TARGET,                  0x8000315D);
 
  148OS_DEF_GLOBAL_VAR(BOOL, MIOS_SHUTDOWN_FLAG,              0x80003164);
 
  149OS_DEF_GLOBAL_VAR(u32, CURRENT_APP_NAME,                 0x80003180);
 
  150OS_DEF_GLOBAL_VAR(u8, CURRENT_APP_TYPE,                  0x80003184);
 
  151OS_DEF_GLOBAL_VAR(u32, MINIMUM_IOS_VERSION,              0x80003188);
 
  152OS_DEF_GLOBAL_VAR(u32, NAND_TITLE_LAUNCH_CODE,           0x8000318C);
 
  153OS_DEF_GLOBAL_VAR(u32, NAND_TITLE_RETURN_CODE,           0x80003190);
 
  154OS_DEF_GLOBAL_VAR(u32, BOOT_PARTITION_TYPE,              0x80003194);
 
  155OS_DEF_GLOBAL_VAR(u32, BOOT_PARTITION_OFFSET,            0x80003198);
 
  156OS_DEF_GLOBAL_VAR(s8, WIFI_AFH_CHANNEL,                  0x800031A2);
 
  157OS_DEF_GLOBAL_ARR(u8, NWC24_USER_ID_BUFFER, [32],        0x800031C0);
 
  158OS_DEF_GLOBAL_VAR(u64, NWC24_USER_ID,                    0x800031C0);
 
  159OS_DEF_GLOBAL_ARR(u8, SC_PRDINFO, [0x100],               0x80003800);
 
  165volatile u32 PI_HW_REGS[10] AT_ADDRESS(0xCC003000);
 
  181#define PI_INTSR_ERROR (1 << 0) 
  182#define PI_INTSR_RSW (1 << 1) 
  183#define PI_INTSR_DI (1 << 2) 
  184#define PI_INTSR_SI (1 << 3) 
  185#define PI_INTSR_EXI (1 << 4) 
  186#define PI_INTSR_AI (1 << 5) 
  187#define PI_INTSR_DSP (1 << 6) 
  188#define PI_INTSR_MEM (1 << 7) 
  189#define PI_INTSR_VI (1 << 8) 
  190#define PI_INTSR_PE_TOKEN (1 << 9) 
  191#define PI_INTSR_PE_FINISH (1 << 10) 
  192#define PI_INTSR_CP (1 << 11) 
  193#define PI_INTSR_DEBUG (1 << 12) 
  194#define PI_INTSR_HSP (1 << 13) 
  195#define PI_INTSR_ACR (1 << 14) 
  196#define PI_INTSR_RSWST (1 << 16) 
  199#define PI_INTMR_ERROR (1 << 0) 
  200#define PI_INTMR_RSW (1 << 1) 
  201#define PI_INTMR_DI (1 << 2) 
  202#define PI_INTMR_SI (1 << 3) 
  203#define PI_INTMR_EXI (1 << 4) 
  204#define PI_INTMR_AI (1 << 5) 
  205#define PI_INTMR_DSP (1 << 6) 
  206#define PI_INTMR_MEM (1 << 7) 
  207#define PI_INTMR_VI (1 << 8) 
  208#define PI_INTMR_PE_TOKEN (1 << 9) 
  209#define PI_INTMR_PE_FINISH (1 << 10) 
  210#define PI_INTMR_CP (1 << 11) 
  211#define PI_INTMR_DEBUG (1 << 12) 
  212#define PI_INTMR_HSP (1 << 13) 
  213#define PI_INTMR_ACR (1 << 14) 
  218volatile u16 MI_HW_REGS[20] AT_ADDRESS(0xCC004000);
 
  245#define MI_INTMR_MEM0 (1 << 0) 
  246#define MI_INTMR_MEM1 (1 << 1) 
  247#define MI_INTMR_MEM2 (1 << 2) 
  248#define MI_INTMR_MEM3 (1 << 3) 
  249#define MI_INTMR_ADDR (1 << 4) 
  252#define MI_INTSR_MEM0 (1 << 0) 
  253#define MI_INTSR_MEM1 (1 << 1) 
  254#define MI_INTSR_MEM2 (1 << 2) 
  255#define MI_INTSR_MEM3 (1 << 3) 
  256#define MI_INTSR_ADDR (1 << 4) 
  261volatile u32 DI_HW_REGS[10] AT_ADDRESS(0xCD006000);