root/platform/ixus75_sd750/sub/100b/boot.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. boot
  2. h_usrInit
  3. h_usrKernelInit
  4. h_usrRoot

   1 #include "lolevel.h"
   2 #include "platform.h"
   3 #include "core.h"
   4 
   5 const char * const new_sa = &_end;
   6 
   7 /* Ours stuff */
   8 extern long wrs_kernel_bss_start;
   9 extern long wrs_kernel_bss_end;
  10 extern void createHook (void *pNewTcb);
  11 extern void deleteHook (void *pTcb);
  12 
  13 
  14 void boot();
  15 
  16 /* "relocated" functions */
  17 void __attribute__((naked,noinline)) h_usrInit();
  18 void __attribute__((naked,noinline)) h_usrKernelInit();
  19 void __attribute__((naked,noinline)) h_usrRoot();
  20 
  21 
  22 
  23 void boot()
  24 {
  25                 // Theses values have been modified for the SD750 100b
  26     long *canon_data_src = (void*)0xFFB95320; 
  27     long *canon_data_dst = (void*)0x1900; 
  28     long canon_data_len = 0xCBF0; 
  29     long *canon_bss_start = (void*)0xE4F0; 
  30     long canon_bss_len = 0xBF650 - 0xE4F0; 
  31     long i;
  32 
  33     asm volatile (
  34         "MRC     p15, 0, R0,c1,c0\n"
  35         "ORR     R0, R0, #0x1000\n"
  36         "ORR     R0, R0, #4\n"
  37         "ORR     R0, R0, #1\n"
  38         "MCR     p15, 0, R0,c1,c0\n"
  39     :::"r0");
  40 
  41     for(i=0;i<canon_data_len/4;i++)
  42         canon_data_dst[i]=canon_data_src[i];
  43 
  44     for(i=0;i<canon_bss_len/4;i++)
  45         canon_bss_start[i]=0;
  46 
  47     asm volatile (
  48         "MRC     p15, 0, R0,c1,c0\n"
  49         "ORR     R0, R0, #0x1000\n"
  50         "BIC     R0, R0, #4\n"
  51         "ORR     R0, R0, #1\n"
  52         "MCR     p15, 0, R0,c1,c0\n"
  53     :::"r0");
  54 
  55     h_usrInit();
  56 }
  57 
  58 // Found at 0xFF811990
  59 // Theses values have been modified for the SD750 100b
  60 void h_usrInit()
  61 {
  62     asm volatile (
  63         "STR     LR, [SP,#-4]!\n"
  64         "BL      sub_FF811968\n"
  65         "MOV     R0, #2\n"
  66         "MOV     R1, R0\n"
  67         "BL      sub_FF924148\n"                // unknown_libname_237
  68         "BL      sub_FF918240\n"                //excVecInit
  69         "BL      sub_FF8111C4\n"
  70         "BL      sub_FF811728\n"
  71         "LDR     LR, [SP],#4\n"
  72         "B       h_usrKernelInit\n"     // Originally loc_FF811744
  73     );
  74 }
  75 
  76 // Found at 0xFF811744
  77 // Theses values have been modified for the SD750 100b
  78 void  h_usrKernelInit()
  79 {
  80     asm volatile (
  81         "STMFD   SP!, {R4,LR}\n"
  82         "SUB     SP, SP, #8\n"
  83         "BL      sub_FF924648\n"        // classLibInit
  84         "BL      sub_FF934774\n"        // taskLibInit
  85         "LDR     R3, =0x5AD0\n"
  86         "LDR     R2, =0xBC6C0\n"
  87         "LDR     R1, [R3]\n"
  88         "LDR     R0, =0xBD310\n"
  89         "MOV     R3, #0x100\n"
  90         "BL      sub_FF930364\n"        // qInit
  91         "LDR     R3, =0x5A90\n"
  92         "LDR     R0, =0x5E30\n"
  93         "LDR     R1, [R3]\n"
  94         "BL      sub_FF930364\n"        // qInit
  95         "LDR     R3, =0x5B4C\n"
  96         "LDR     R0, =0xBD2E4\n"
  97         "LDR     R1, [R3]\n"
  98         "BL      sub_FF930364\n"        // qInit
  99         "BL      sub_FF938B30\n"        // workQInit
 100         "BL      sub_FF8112AC\n"
 101         "MOV     R4, #0\n"
 102         "MOV     R3, R0\n"
 103         "MOV     R12, #0x800\n"
 104         "LDR     R0, =h_usrRoot\n" // R0, =sub_FF811A60 (h_usrRoot))
 105         "MOV     R1, #0x4000\n"
 106                 );
 107 //  "LDR     R2, =0xBF650\n"
 108     asm volatile (
 109         "LDR     R2, =new_sa\n"
 110         "LDR     R2, [R2]\n"
 111     );
 112     asm volatile (      
 113         "STR     R12, [SP]\n"
 114         "STR     R4, [SP,#4]\n"
 115         "BL      sub_FF9319B4\n"        // kernelInit
 116         "ADD     SP, SP, #8\n"
 117         "LDMFD   SP!, {R4,PC}\n"
 118 
 119     );
 120 }
 121 
 122 
 123 // Found at 0xFF811A60
 124 // Theses values have been modified for the SD750 100b
 125 void  h_usrRoot()
 126 {
 127     asm volatile (
 128         "STMFD   SP!, {R4,R5,LR}\n"
 129         "MOV     R5, R0\n"
 130         "MOV     R4, R1\n"
 131         "BL      sub_FF8119D0\n"
 132         "MOV     R1, R4\n"
 133         "MOV     R0, R5\n"
 134         "BL      sub_FF929100\n"                // memInit
 135         "MOV     R1, R4\n"
 136         "MOV     R0, R5\n"
 137         "BL      sub_FF929B78\n"        // memPartLibInit
 138         // "BL      sub_FF8117E8\n"             // nullsub_1
 139         "BL      sub_FF811704\n"
 140         "BL      sub_FF811A0C\n"
 141         "BL      sub_FF8119F0\n"
 142         "BL      sub_FF811A38\n"
 143         "BL      sub_FF8119C4\n"
 144                 );
 145 
 146     _taskCreateHookAdd(createHook);
 147     _taskDeleteHookAdd(deleteHook);
 148 
 149     drv_self_hide();
 150 
 151     asm volatile (              
 152         "LDMFD   SP!, {R4,R5,LR}\n"
 153         "B       sub_FF81136C\n"                // IsEmptyWriteCache_2
 154                 );
 155 }
 156 

/* [<][>][^][v][top][bottom][index][help] */