📄 blcommon.cod
字号:
00114 e59d3044 ldr r3, [sp, #0x44]
00118 e3530000 cmp r3, #0
0011c 1a000004 bne |$L38504|
; 229 : EdbgOutputDebugString ("!OEMVERIFYMEMORY: Invalid image\r\n");
00120 e59f0264 ldr r0, [pc, #0x264]
00124 eb000000 bl EdbgOutputDebugString
; 230 : return FALSE;
00128 e3a03000 mov r3, #0
0012c e58d3030 str r3, [sp, #0x30]
00130 ea00008c b |$L38485|
00134 |$L38504|
; 231 : }
; 232 :
; 233 : // check for flash image. Start erasing if it is.
; 234 : if ((fIsFlash = OEMIsFlashAddr (*pdwImageStart)) ){
00134 e59d3080 ldr r3, [sp, #0x80]
00138 e5930000 ldr r0, [r3]
0013c eb000000 bl OEMIsFlashAddr
00140 e58d0048 str r0, [sp, #0x48]
00144 e59d3048 ldr r3, [sp, #0x48]
00148 e58d3018 str r3, [sp, #0x18]
0014c e59d3018 ldr r3, [sp, #0x18]
00150 e3530000 cmp r3, #0
00154 0a00001b beq |$L38506|
; 235 :
; 236 : extern BOOL InitializeFlash( void );
; 237 : if(! InitializeFlash( ) ){
00158 eb000000 bl InitializeFlash
0015c e58d004c str r0, [sp, #0x4C]
00160 e59d304c ldr r3, [sp, #0x4C]
00164 e3530000 cmp r3, #0
00168 1a000004 bne |$L38509|
; 238 : EdbgOutputDebugString ("Flash can't be initialized\r\n");
0016c e59f0214 ldr r0, [pc, #0x214]
00170 eb000000 bl EdbgOutputDebugString
; 239 : return FALSE;
00174 e3a03000 mov r3, #0
00178 e58d3030 str r3, [sp, #0x30]
0017c ea000079 b |$L38485|
00180 |$L38509|
; 240 : }
; 241 : EdbgOutputDebugString ("Image will put to 0x%x\r\n",*pdwImageStart);
00180 e59d3080 ldr r3, [sp, #0x80]
00184 e5931000 ldr r1, [r3]
00188 e59f01f4 ldr r0, [pc, #0x1F4]
0018c eb000000 bl EdbgOutputDebugString
; 242 : if( !OEMStartEraseFlash (*pdwImageStart, *pdwImageLength)) {
00190 e59d3084 ldr r3, [sp, #0x84]
00194 e5931000 ldr r1, [r3]
00198 e59d3080 ldr r3, [sp, #0x80]
0019c e5930000 ldr r0, [r3]
001a0 eb000000 bl OEMStartEraseFlash
001a4 e58d0050 str r0, [sp, #0x50]
001a8 e59d3050 ldr r3, [sp, #0x50]
001ac e3530000 cmp r3, #0
001b0 1a000004 bne |$L38512|
; 243 :
; 244 : EdbgOutputDebugString ("Invalid Flash Address/Length\r\n");
001b4 e59f01c4 ldr r0, [pc, #0x1C4]
001b8 eb000000 bl EdbgOutputDebugString
; 245 : return FALSE;
001bc e3a03000 mov r3, #0
001c0 e58d3030 str r3, [sp, #0x30]
001c4 ea000067 b |$L38485|
001c8 |$L38512|
001c8 |$L38506|
001c8 |$L38521|
; 246 : }
; 247 : }
; 248 :
; 249 : // read records (start with address, length, and checksum)
; 250 : while (OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecAddr)
; 251 : && OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecLen)
; 252 : && OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecChk)) {
001c8 e28d1020 add r1, sp, #0x20
001cc e3a00004 mov r0, #4
001d0 eb000000 bl OEMReadData
001d4 e58d0054 str r0, [sp, #0x54]
001d8 e59d3054 ldr r3, [sp, #0x54]
001dc e3530000 cmp r3, #0
001e0 0a00005e beq |$L38522|
001e4 e28d1014 add r1, sp, #0x14
001e8 e3a00004 mov r0, #4
001ec eb000000 bl OEMReadData
001f0 e58d0058 str r0, [sp, #0x58]
001f4 e59d3058 ldr r3, [sp, #0x58]
001f8 e3530000 cmp r3, #0
001fc 0a000057 beq |$L38522|
00200 e28d101c add r1, sp, #0x1C
00204 e3a00004 mov r0, #4
00208 eb000000 bl OEMReadData
0020c e58d005c str r0, [sp, #0x5C]
00210 e59d305c ldr r3, [sp, #0x5C]
00214 e3530000 cmp r3, #0
00218 0a000050 beq |$L38522|
; 253 :
; 254 : // check for last record
; 255 : if (!dwRecAddr && !dwRecChk) {
0021c e59d3020 ldr r3, [sp, #0x20]
00220 e3530000 cmp r3, #0
00224 1a00001f bne |$L38523|
00228 e59d301c ldr r3, [sp, #0x1C]
0022c e3530000 cmp r3, #0
00230 1a00001c bne |$L38523|
; 256 :
; 257 : // update launch address
; 258 : *pdwLaunchAddr = dwRecLen;
00234 e59d2014 ldr r2, [sp, #0x14]
00238 e59d3088 ldr r3, [sp, #0x88]
0023c e5832000 str r2, [r3]
; 259 :
; 260 : // write to flash if it's flash image
; 261 : if (fIsFlash) {
00240 e59d3018 ldr r3, [sp, #0x18]
00244 e3530000 cmp r3, #0
00248 0a000013 beq |$L38524|
; 262 : // finish the flash erase
; 263 : if (!OEMFinishEraseFlash ()) {
0024c eb000000 bl OEMFinishEraseFlash
00250 e58d0060 str r0, [sp, #0x60]
00254 e59d3060 ldr r3, [sp, #0x60]
00258 e3530000 cmp r3, #0
0025c 1a000002 bne |$L38525|
; 264 : return FALSE;
00260 e3a03000 mov r3, #0
00264 e58d3030 str r3, [sp, #0x30]
00268 ea00003e b |$L38485|
0026c |$L38525|
; 265 : }
; 266 : if (!OEMWriteFlash (*pdwImageStart, *pdwImageLength)) {
0026c e59d3084 ldr r3, [sp, #0x84]
00270 e5931000 ldr r1, [r3]
00274 e59d3080 ldr r3, [sp, #0x80]
00278 e5930000 ldr r0, [r3]
0027c eb000000 bl OEMWriteFlash
00280 e58d0064 str r0, [sp, #0x64]
00284 e59d3064 ldr r3, [sp, #0x64]
00288 e3530000 cmp r3, #0
0028c 1a000002 bne |$L38526|
; 267 : return FALSE;
00290 e3a03000 mov r3, #0
00294 e58d3030 str r3, [sp, #0x30]
00298 ea000032 b |$L38485|
0029c |$L38526|
0029c |$L38524|
; 268 : }
; 269 : }
; 270 : return TRUE;
0029c e3a03001 mov r3, #1
002a0 e58d3030 str r3, [sp, #0x30]
002a4 ea00002f b |$L38485|
002a8 |$L38523|
; 271 : }
; 272 :
; 273 : // map the record address (FLASH data is cached, for example)
; 274 : lpDest = OEMMapMemAddr (*pdwImageStart, dwRecAddr);
002a8 e59d1020 ldr r1, [sp, #0x20]
002ac e59d3080 ldr r3, [sp, #0x80]
002b0 e5930000 ldr r0, [r3]
002b4 eb000000 bl OEMMapMemAddr
002b8 e58d0068 str r0, [sp, #0x68]
002bc e59d3068 ldr r3, [sp, #0x68]
002c0 e58d3010 str r3, [sp, #0x10]
; 275 :
; 276 : // read data block
; 277 : if (!OEMReadData (dwRecLen, lpDest)) {
002c4 e59d1010 ldr r1, [sp, #0x10]
002c8 e59d0014 ldr r0, [sp, #0x14]
002cc eb000000 bl OEMReadData
002d0 e58d006c str r0, [sp, #0x6C]
002d4 e59d306c ldr r3, [sp, #0x6C]
002d8 e3530000 cmp r3, #0
002dc 1a000005 bne |$L38527|
; 278 : EdbgOutputDebugString ("****** Data record %d corrupted, ABORT!!! ******\r\n", nPkgNum);
002e0 e59d1024 ldr r1, [sp, #0x24]
002e4 e59f0090 ldr r0, [pc, #0x90]
002e8 eb000000 bl EdbgOutputDebugString
; 279 : return FALSE;
002ec e3a03000 mov r3, #0
002f0 e58d3030 str r3, [sp, #0x30]
002f4 ea00001b b |$L38485|
002f8 |$L38527|
; 280 : }
; 281 :
; 282 : if (!VerifyChecksum (dwRecLen, lpDest, dwRecChk)) {
002f8 e59d201c ldr r2, [sp, #0x1C]
002fc e59d1010 ldr r1, [sp, #0x10]
00300 e59d0014 ldr r0, [sp, #0x14]
00304 eb000000 bl VerifyChecksum
00308 e58d0070 str r0, [sp, #0x70]
0030c e59d3070 ldr r3, [sp, #0x70]
00310 e3530000 cmp r3, #0
00314 1a000005 bne |$L38529|
; 283 : EdbgOutputDebugString ("****** Checksum failure on record %d, ABORT!!! ******\r\n", nPkgNum);
00318 e59d1024 ldr r1, [sp, #0x24]
0031c e59f0054 ldr r0, [pc, #0x54]
00320 eb000000 bl EdbgOutputDebugString
; 284 : return FALSE;
00324 e3a03000 mov r3, #0
00328 e58d3030 str r3, [sp, #0x30]
0032c ea00000d b |$L38485|
00330 |$L38529|
; 285 : }
; 286 : // verify partial checksum
; 287 : OEMShowProgress (nPkgNum ++);
00330 e59d3024 ldr r3, [sp, #0x24]
00334 e58d3074 str r3, [sp, #0x74]
00338 e59d0074 ldr r0, [sp, #0x74]
0033c eb000000 bl OEMShowProgress
00340 e59d3024 ldr r3, [sp, #0x24]
00344 e2833001 add r3, r3, #1
00348 e58d3024 str r3, [sp, #0x24]
; 288 : if (fIsFlash) {
0034c e59d3018 ldr r3, [sp, #0x18]
00350 e3530000 cmp r3, #0
00354 0a000000 beq |$L38531|
; 289 : OEMContinueEraseFlash ();
00358 eb000000 bl OEMContinueEraseFlash
0035c |$L38531|
; 290 : }
; 291 : }
0035c eaffff99 b |$L38521|
00360 |$L38522|
; 292 :
; 293 : return FALSE;
00360 e3a03000 mov r3, #0
00364 e58d3030 str r3, [sp, #0x30]
00368 |$L38485|
; 217 : return FALSE;
00368 e59d0030 ldr r0, [sp, #0x30]
; 294 : }
0036c e28dd078 add sp, sp, #0x78
00370 e89d6000 ldmia sp, {sp, lr}
00374 e12fff1e bx lr
00378 |$L38587|
00378 00000000 DCD |??_C@_0DI@FDIIHFBA@?$CK?$CK?$CK?$CK?$CK?$CK?5Checksum?5failure?5on?5recor@|
0037c 00000000 DCD |??_C@_0DD@KHJBCIED@?$CK?$CK?$CK?$CK?$CK?$CK?5Data?5record?5?$CFd?5corrupted?0@|
00380 00000000 DCD |??_C@_0BP@OAODHDCP@Invalid?5Flash?5Address?1Length?$AN?6?$AA@|
00384 00000000 DCD |??_C@_0BJ@CHJNPJCH@Image?5will?5put?5to?50x?$CFx?$AN?6?$AA@|
00388 00000000 DCD |??_C@_0BN@FJFONPHK@Flash?5can?8t?5be?5initialized?$AN?6?$AA@|
0038c 00000000 DCD |??_C@_0CC@DNECAMLM@?$CBOEMVERIFYMEMORY?3?5Invalid?5image?$AN@|
00390 00000000 DCD |g_pOEMVerifyMemory|
00394 00000000 DCD |??_C@_0CE@NKAMCDHO@Unable?5to?5read?5image?5start?1lengt@|
00398 00000000 DCD |??_C@_0DB@HGMOIJLD@?$AN?6This?5is?5not?5a?5?4BIN?5file?5?$CFx?5?$CFx?5@|
0039c 00000000 DCD |??_C@_07MMNKOBGG@B000FF?6?$AA@|
003a0 |$M38583|
ENDP ; |DownloadImage|
00000 AREA |.text| { |VerifyChecksum| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$VerifyChecksum|, PDATA, SELECTION=5, ASSOC=|.text| { |VerifyChecksum| } ; comdat associative
|$T38596| DCD |$L38595|
DCD 0x40002804
; Function compile flags: /Ods
00000 AREA |.text| { |VerifyChecksum| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |VerifyChecksum| PROC
; 194 : {
00000 |$L38595|
00000 e1a0c00d mov r12, sp
00004 e92d0007 stmdb sp!, {r0 - r2}
00008 e92d5000 stmdb sp!, {r12, lr}
0000c e24dd010 sub sp, sp, #0x10
00010 |$M38593|
; 195 : // Check the CRC
; 196 : DWORD dwCRC = 0;
00010 e3a03000 mov r3, #0
00014 e58d3004 str r3, [sp, #4]
; 197 : DWORD i;
; 198 : for (i = 0; i < cbRecord; i++)
00018 e3a03000 mov r3, #0
0001c e58d3000 str r3, [sp]
00020 ea000002 b |$L38476|
00024 |$L38477|
00024 e59d3000 ldr r3, [sp]
00028 e2833001 add r3, r3, #1
0002c e58d3000 str r3, [sp]
00030 |$L38476|
00030 e59d2000 ldr r2, [sp]
00034 e59d3018 ldr r3, [sp, #0x18]
00038 e1520003 cmp r2, r3
0003c 2a000008 bcs |$L38478|
; 199 : dwCRC += *pbRecord ++;
00040 e59d301c ldr r3, [sp, #0x1C]
00044 e5d32000 ldrb r2, [r3]
00048 e59d3004 ldr r3, [sp, #4]
0004c e0833002 add r3, r3, r2
00050 e58d3004 str r3, [sp, #4]
00054 e59d301c ldr r3, [sp, #0x1C]
00058 e2833001 add r3, r3, #1
0005c e58d301c str r3, [sp, #0x1C]
00060 eaffffef b |$L38477|
00064 |$L38478|
; 200 : return dwCRC == dwChksum;
00064 e59d2004 ldr r2, [sp, #4]
00068 e59d3020 ldr r3, [sp, #0x20]
0006c e1520003 cmp r2, r3
00070 1a000002 bne |$L38590|
00074 e3a03001 mov r3, #1
00078 e58d300c str r3, [sp, #0xC]
0007c ea000001 b |$L38591|
00080 |$L38590|
00080 e3a03000 mov r3, #0
00084 e58d300c str r3, [sp, #0xC]
00088 |$L38591|
00088 e59d300c ldr r3, [sp, #0xC]
0008c e58d3008 str r3, [sp, #8]
00090 e59d0008 ldr r0, [sp, #8]
; 201 : }
00094 e28dd010 add sp, sp, #0x10
00098 e89d6000 ldmia sp, {sp, lr}
0009c e12fff1e bx lr
000a0 |$M38594|
ENDP ; |VerifyChecksum|
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -