root/platform/ixus700_sd500/sub/101b/boot.c

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

DEFINITIONS

This source file includes following definitions.
  1. h_kbd_p2_f
  2. _platformsub_kbd_fetch_data_my
  3. boot
  4. h_usrInit
  5. h_usrKernelInit
  6. 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 void boot();
  14 
  15 /* "relocated" functions */
  16 void __attribute__((naked,noinline)) h_usrInit();
  17 void __attribute__((naked,noinline)) h_usrKernelInit();
  18 void __attribute__((naked,noinline)) h_usrRoot();
  19 
  20 extern void mykbd_task_proceed_2();
  21 
  22 void __attribute__((naked,noinline)) h_kbd_p2_f()
  23 {
  24     asm volatile (
  25                  "LDR     R4, =0xFB10\n"
  26                  "LDR     R2, [R4,#0x38]\n"
  27                  "TST     R2, #0x8000\n"
  28                  "BEQ     loc_FF828F1C\n"
  29                  "MOV     R2, #0x8000\n"
  30                  "MOV     R0, #0x2F\n"
  31                  "MOV     R1, #2\n"
  32                  "BL      sub_FF8294CC\n"
  33                  "LDR     R3, [R4,#0x38]\n"
  34                  "BIC     R3, R3, #0x8000\n"
  35                  "STR     R3, [R4,#0x38]\n"
  36                  "MOV     R2, R3\n"
  37  "loc_FF828F1C:\n"
  38                  "TST     R2, #2\n"
  39                  "BEQ     loc_FF828F44\n"
  40                  "MOV     R1, #2\n"
  41                  "MOV     R2, R1\n"
  42                  "MOV     R0, #0x21\n"
  43                  "BL      sub_FF8294CC\n"
  44                  "LDR     R3, [R4,#0x38]\n"
  45                  "BIC     R3, R3, #2\n"
  46                  "STR     R3, [R4,#0x38]\n"
  47                  "MOV     R2, R3\n"
  48  "loc_FF828F44:\n"
  49                  "TST     R2, #4\n"
  50                  "BEQ     loc_FF828F6C\n"
  51                  "MOV     R2, #4\n"
  52                  "MOV     R0, #0x22\n"
  53                  "MOV     R1, #2\n"
  54                  "BL      sub_FF8294CC\n"
  55                  "LDR     R3, [R4,#0x38]\n"
  56                  "BIC     R3, R3, #4\n"
  57                  "STR     R3, [R4,#0x38]\n"
  58                  "MOV     R2, R3\n"
  59  "loc_FF828F6C:\n"
  60                  "ADD     R1, R4, #0x30\n"
  61                  "LDMIA   R1, {R1,R3}\n"
  62                  "ADD     R3, R1, R3\n"
  63                  "CMN     R3, R2\n"
  64                  "BEQ     loc_FF828F84\n"
  65                  "BL      sub_FF82952C\n"
  66  "loc_FF828F84:\n"
  67                  "LDR     R3, =0x1FCC\n"
  68                  "LDR     R1, [R3]\n"
  69                  "CMP     R1, #1\n"
  70                  "BNE     loc_FF828FA0\n"
  71                  "MOV     R0, #0\n"
  72                  "MOV     R2, R1\n"
  73                  "BL      sub_FF8294CC\n"
  74  "loc_FF828FA0:\n"
  75                  "BL      sub_FF829C08\n"
  76                  "B       mykbd_task_proceed_2\n"
  77     );
  78 }
  79 
  80 void __attribute__((naked,noinline)) _platformsub_kbd_fetch_data_my(){
  81  asm volatile (
  82                  "STMFD   SP!, {R4-R11,LR}\n"
  83                  "MOV     LR, #0x220000\n"
  84                  "ORR     R3, LR, #0x204\n"
  85                  "LDR     R1, =0xFBE4\n"
  86                  "ORR     R3, R3, #0xC0000000\n"
  87             //   "LDR     R9, [R3]\n"                // -
  88 
  89             //my code here
  90                  "MOV     R2, R0\n"
  91                  "LDR     R0, [R3]\n" 
  92                  "STMFD   SP!, {R1-R11}\n"  
  93                  "BL      usb_power_status_override\n"
  94                  "LDMFD   SP!, {R1-R11}\n"
  95                  "MOV     R9, R0\n"
  96                  "MOV     R0, R2\n"
  97                  "MOV     LR, #0x220000\n"
  98             //original code
  99 
 100 
 101                  "LDR     R6, [R1]\n"
 102                  "LDR     R4, =0xFB78\n"
 103                  "LDR     R1, [R0,#0x1C]\n"
 104                  "MOV     R10, R6,LSL#2\n"
 105                  "AND     R1, R9, R1\n"
 106                  "ADD     R12, R4, #0x20\n"
 107                  "SUB     R8, R6, #1\n"
 108                  "SUB     R7, R6, #2\n"
 109                  "STR     R1, [R12,R10]\n"
 110                  "AND     R8, R8, #7\n"
 111                  "AND     R7, R7, #7\n"
 112                  "MOV     R8, R8,LSL#2\n"
 113                  "MOV     R7, R7,LSL#2\n"
 114                  "LDR     R2, =0xFBD8\n"
 115                  "LDR     R5, [R12,R7]\n"
 116                  "LDR     R12, [R12,R8]\n"
 117                  "LDR     R3, [R2,#4]\n"
 118                  "EOR     R11, R1, R12\n"
 119                  "EOR     R12, R1, R5\n"
 120                  "ORR     R12, R11, R12\n"
 121                  "EOR     R2, R3, R1\n"
 122                  "STR     R1, [R0,#0x10]\n"
 123                  "BIC     R2, R2, R12\n"
 124                  "LDR     R1, =0xFBD8\n"
 125                  "EOR     R3, R3, R2\n"
 126                  "STR     R3, [R1,#4]\n"
 127                  "STR     R2, [R0,#0x34]\n"
 128                  "STR     R9, [R0,#0x58]\n"
 129                  "ORR     R3, LR, #0x208\n"
 130                  "ORR     R3, R3, #0xC0000000\n"
 131                  "LDR     R1, [R3]\n"
 132             //my code here
 133                  "MOV     R2, R0\n"
 134                  "MOV     R0, R1\n"
 135                  "STMFD   SP!, {R1-R11}\n"  
 136                  "BL      my_kbd_read_keys\n"
 137                  "LDMFD   SP!, {R1-R11}\n"
 138                  "MOV     R1,R0\n"
 139                  "MOV     R0,R2\n"
 140                  "MOV     LR, #0x220000\n"
 141             //original code
 142                  "MOV     R2, #0xFF00\n"
 143                  "ADD     R2, R2, #0xFF\n"
 144                  "ADD     R4, R4, #0x40\n"
 145                  "AND     R2, R1, R2\n"
 146                  "STR     R2, [R4,R10]\n"
 147                  "ADD     LR, LR, #0x3000\n"
 148                  "STR     R1, [R0,#0x5C]\n"
 149                  "ADD     R1, LR, #0xC000001C\n"
 150                  "LDR     R3, [R1]\n"
 151                  "AND     R3, R3, #1\n"    
 152                  "ORR     R2, R2, R3,LSL#16\n"
 153                  "STR     R2, [R4,R10]\n"
 154                  "ADD     LR, LR, #0xC0000024\n"
 155                  "LDR     R3, [LR]\n"
 156                  "LDR     R1, [R0,#0x20]\n"
 157 
 158               // "AND     R3, R3, #1\n"
 159                  "AND     R3, R3, #0\n"    // - clear SD card R/O flag
 160 
 161                  "ORR     R2, R2, R3,LSL#17\n"
 162                  "AND     R2, R2, R1\n"
 163                  "STR     R2, [R4,R10]\n"
 164                  "LDR     R3, [R4,R8]\n"
 165                  "LDR     LR, [R4,R7]\n"
 166                  "LDR     R4, =0xFBD8\n"
 167                  "LDR     R1, [R4,#8]\n"
 168                  "EOR     R11, R2, R3\n"
 169                  "EOR     R12, R2, LR\n"
 170                  "EOR     R3, R1, R2\n"
 171                  "ORR     R12, R11, R12\n"
 172                  "BIC     R3, R3, R12\n"
 173                  "EOR     R1, R1, R3\n"
 174                  "ADD     R6, R6, #1\n"
 175                  "STR     R2, [R0,#0x14]\n"
 176                  "STR     R1, [R4,#8]\n"
 177                  "LDR     R1, =0xFBE4\n"
 178                  "AND     R6, R6, #7\n"
 179                  "STR     R6, [R1]\n"
 180                  "STR     R3, [R0,#0x38]\n"
 181                  "LDMFD   SP!, {R4-R11,PC}\n"
 182 );
 183 }
 184 
 185 
 186 void boot()
 187 {
 188     long *canon_data_src = (void*)0xFFACEA10; 
 189     long *canon_data_dst = (void*)0x1900;
 190     long canon_data_len = 0xD340;
 191     long *canon_bss_start = (void*)0xEC40; // just after data
 192     long canon_bss_len = 0x7C2B0 - 0xEC40;
 193     long i;
 194 
 195     asm volatile (
 196         "MRC     p15, 0, R0,c1,c0\n"
 197         "ORR     R0, R0, #0x1000\n"
 198         "ORR     R0, R0, #4\n"
 199         "ORR     R0, R0, #1\n"
 200         "MCR     p15, 0, R0,c1,c0\n"
 201     :::"r0");
 202 
 203 
 204     for(i=0;i<canon_data_len/4;i++)
 205         canon_data_dst[i]=canon_data_src[i];
 206 
 207     for(i=0;i<canon_bss_len/4;i++)
 208         canon_bss_start[i]=0;
 209 
 210     asm volatile (
 211         "MRC     p15, 0, R0,c1,c0\n"
 212         "ORR     R0, R0, #0x1000\n"
 213         "BIC     R0, R0, #4\n"
 214         "ORR     R0, R0, #1\n"
 215         "MCR     p15, 0, R0,c1,c0\n"
 216     :::"r0");
 217 
 218     h_usrInit();
 219 }
 220 
 221 
 222 void h_usrInit()
 223 {
 224     asm volatile (
 225         "STR    LR, [SP,#-4]!\n"
 226         "BL     sub_FF811A40\n"
 227         "MOV    R0, #2\n"
 228         "MOV    R1, R0\n"
 229         "BL     sub_FFAB514C\n" 
 230         "BL     sub_FFAA1824\n"
 231         "BL     sub_FF811298\n"
 232         "BL     sub_FF811800\n"
 233         "LDR    LR, [SP],#4\n"
 234         "B      h_usrKernelInit\n"
 235     );
 236 }
 237 
 238 void  h_usrKernelInit()
 239 {
 240     asm volatile (
 241         "STMFD   SP!, {R4,LR}\n"
 242         "SUB     SP, SP, #8\n"
 243         "BL      sub_FFAB564C\n"
 244         "BL      sub_FFAC7E58\n"
 245         "LDR     R3, =0xE07C\n"
 246         "LDR     R2, =0x78500\n"
 247         "LDR     R1, [R3]\n"
 248         "LDR     R0, =0x7BC70\n"
 249         "MOV     R3, #0x100\n"
 250         "BL      sub_FFAC3788\n"
 251         "LDR     R3, =0xE03C\n"
 252         "LDR     R0, =0xE45C\n"
 253         "LDR     R1, [R3]\n"
 254         "BL      sub_FFAC3788\n"
 255         "LDR     R3, =0xE0F8\n"
 256         "LDR     R0, =0x7BC44\n"
 257         "LDR     R1, [R3]\n"
 258         "BL      sub_FFAC3788\n"
 259         "BL      sub_FFACC9D8\n"
 260         "BL      sub_FF811384\n"
 261         "MOV     R4, #0\n"
 262         "MOV     R3, R0\n"
 263         "MOV     R12, #0x800\n"
 264         "LDR     R0, =h_usrRoot\n"
 265         "MOV     R1, #0x4000\n"
 266     );
 267 //        "LDR     R2, =0xAC2B0\n"      // 0x7C2B0 + 0x30000
 268     asm volatile (
 269         "LDR     R2, =new_sa\n"
 270         "LDR     R2, [R2]\n"
 271     );
 272     asm volatile (
 273         "STR     R12, [SP]\n"
 274         "STR     R4, [SP,#4]\n"
 275         "BL      sub_FFAC5098\n"
 276         "ADD     SP, SP, #8\n"
 277         "LDMFD   SP!, {R4,PC}\n"
 278     );
 279 }
 280 
 281 
 282 
 283 void  h_usrRoot()
 284 {
 285     asm volatile (
 286         "STMFD   SP!, {R4,R5,LR}\n"
 287         "MOV     R5, R0\n"
 288         "MOV     R4, R1\n"
 289         "BL      sub_FF811AA8\n"
 290         "MOV     R1, R4\n"
 291         "MOV     R0, R5\n"
 292         "BL      sub_FFABB7C8\n"
 293         "MOV     R1, R4\n"
 294         "MOV     R0, R5\n"
 295         "BL      sub_FFABC240\n"
 296         "BL      sub_FF8118C0\n"
 297         "BL      sub_FF8117DC\n"
 298         "MOV     R0, #0x32\n"
 299         "BL      sub_FFABE1E4\n"
 300         "BL      sub_FF811AEC\n"
 301         "BL      sub_FF811ACC\n"
 302         "BL      sub_FF811B18\n"
 303         "BL      sub_FFABDAA4\n"
 304         "BL      sub_FF811A9C\n"
 305     );
 306 
 307     _taskCreateHookAdd(createHook);
 308     _taskDeleteHookAdd(deleteHook);
 309 
 310     drv_self_hide();
 311 
 312     asm volatile (
 313         "LDMFD   SP!, {R4,R5,LR}\n"
 314         "B       sub_FF811444\n"
 315     );
 316 }
 317 

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