oemabort.s
来自「PXA255 WINCE 4.2 BSP ,该BSP是商用的。」· S 代码 · 共 151 行
S
151 行
;
; Copyright (c) Microsoft Corporation. All rights reserved.
;
;
; Use of this source code is subject to the terms of the Microsoft end-user
; license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
; If you did not accept the terms of the EULA, you are not authorized to use
; this source code. For a copy of the EULA, please see the LICENSE.RTF on your
; install media.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Header file for the data abort veneer
; =====================================
;
; This file selects options suitable for Windows CE's use of
; the data abort veneer.
;
IF _TGTCPU = "ARMV4"
GBLS AreaName
AreaName SETS "|.text|"
GBLS VeneerEntry
VeneerEntry SETS "OEMDataAbortHandler"
GBLL BaseUpdated
BaseUpdated SETL {TRUE}
GBLL BaseRestored
BaseRestored SETL {FALSE}
GBLS HandlerCallStd
HandlerCallStd SETS "APCS_MACRO"
GBLS HandlerName
HandlerName SETS "HandlerMacro"
MACRO
HandlerMacro
CMP R0,#DABORT_ERROR_NONE
MOVEQ R0,#DABORT_RETVAL_TONEXT
MOVNE R0,#DABORT_RETVAL_UNDEF
MEND
GBLS ReturnUndef
ReturnUndef SETS "0xFFFF0004"
GBLS ReturnToNext
ReturnToNext SETS "DataAbortHandler"
INCLUDE dabort.s
ELSE
;TEST_DISPLAYING_MARKERS EQU 1
OPT 2 ; disable listing
INCLUDE kxarm.h
INCLUDE XSC1.inc
IF :DEF: TEST_DISPLAYING_MARKERS
INCLUDE XSC1BD.inc
ENDIF; :DEF: TEST_DISPLAYING_MARKERS
OPT 1 ; reenable listing
OPT 128 ; disable listing of macro expansions
TEXTAREA
IMPORT DataAbortHandler
IF B_STEP_PXA2X0 = "1"
IMPORT Batt_FaultHandler
ENDIF; B_STEP_PXA2X0 = "1"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; OEMDataAbortHandler()
;; - Subroutine implementation that is aware of Imprecise Data Abort
;; due to power emergency.
;;
LEAF_ENTRY OEMDataAbortHandler
IF B_STEP_PXA2X0 = "1"
PSFS_BIT_MASK EQU 0x20 ; in cp7, reg 4: (1<<5)
; Only using imprecise data abort for B steppings of
; PXA250 or PXA210
;; Do the imprecise data abort / Batt fault test
stmdb sp!, {r0-r3}
mrs r0, cpsr
str r0, [sp, #-4]! ; push r0
;; For testing, need to force IDAE bit here in CE .NET because that OS variant
;; clears it as of 2002/04/01
; ldr r2, =PWR_BASE_U_VIRTUAL
; set the immediate sleep mode on batt/vdd fault
; mov r1, #1 ; force Imprecise Data Abort on Fault
; str r1, [r2, #PMCR_OFFSET]
IF :DEF: TEST_DISPLAYING_MARKERS
IF PLAT_LUBBOCK = "1"
; development, just prove we got here.
ldr r0, =(0x88800999)
ldr r1, =(FPGA_REGS_BASE_U_VIRTUAL)
str r0, [r1, #HEXLED_OFFSET]
ldr r1, =(0x1000)
11
subs r1, r1, #1
bne %B11
ENDIF; PLAT_LUBBOCK = "1"
ENDIF; :DEF: TEST_DISPLAYING_MARKERS
;; Get access to coprocessor
mrc p15, 0, r3, c15, c1, 0 ;Get Reg15 of CP15
str r3, [sp, #-4]! ; push r3: save cp15:15 on stack
orr r3, r3, #0x80 ; Permission bit for CP7
mcr p15, 0, r3, c15, c1, 0 ;Now set the new value into R15 of CP15
CPWAIT
mrc p7,0,r2,c4,c1,0 ; CP7, r4 data into processor r2
CPWAIT
tst r2, #PSFS_BIT_MASK ; Power emergency?
bne Batt_FaultHandler ; Yes, handle the battery fault. Never return.
; No power emergency, clean up and return.
ldr r3, [sp], #4 ; pop r3 (previous Cp15:15)
mcr p15, 0, r3, c15, c1, 0 ;Now set the old value back into R15 of CP15
CPWAIT
; pop flags in r0 - going back to main path
ldr r0, [sp], #4 ; pop cpsr
msr cpsr_c, r0
ldmia sp!, {r0-r3} ; restore all used registers
ENDIF ; B_STEP_PXA2X0 = "1"
b DataAbortHandler ; Jump to the main data abort handler
;;
;; End of OEMDataAbortHandler()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ENDIF
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?