📄 battif.cod
字号:
00004 e59f3024 ldr r3, [pc, #0x24]
00008 e3a01ebb mov r1, #0xBB, 28
0000c e3811008 orr r1, r1, #8
00010 e5930000 ldr r0, [r3]
00014 eb000000 bl WaitForSingleObject
00018 e3500000 cmp r0, #0
; 148 :
; 149 : if(retval==WAIT_OBJECT_0)
; 150 : {
; 151 : return(SUCCESS);
0001c 03a00001 moveq r0, #1
; 157 : }
; 158 : }
00020 049de004 ldreq lr, [sp], #4
; 152 : }
; 153 : else
; 154 : {
; 155 : DEBUGCHK(1);
; 156 : return(FALSE);
00024 13a00000 movne r0, #0
; 157 : }
; 158 : }
00028 149de004 ldrne lr, [sp], #4
0002c e12fff1e bx lr
00030 |$L43639|
00030 00000000 DCD |hAcLinkControlMutex|
00034 |$M43635|
ENDP ; |Ac97Lock|
EXPORT |Ac97Unlock|
IMPORT |ReleaseMutex|
00000 AREA |.text| { |Ac97Unlock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$Ac97Unlock|, PDATA, SELECTION=5, ASSOC=|.text| { |Ac97Unlock| } ; comdat associative
|$T43647| DCD |$L43646|
DCD 0x40000c01
; Function compile flags: /Ogsy
00000 AREA |.text| { |Ac97Unlock| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |Ac97Unlock| PROC
; 169 : {
00000 |$L43646|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M43644|
; 170 : v_pAc97regs->CAR &= ~AC97CAR_CAIP; // clear the Caip bit
00004 e59f3020 ldr r3, [pc, #0x20]
00008 e5932014 ldr r2, [r3, #0x14]
; 171 : ReleaseMutex(hAcLinkControlMutex);
0000c e5930000 ldr r0, [r3]
00010 e5923020 ldr r3, [r2, #0x20]
00014 e3c33001 bic r3, r3, #1
00018 e5823020 str r3, [r2, #0x20]
0001c eb000000 bl ReleaseMutex
; 172 :
; 173 : return(SUCCESS);
00020 e3a00001 mov r0, #1
; 174 : }
00024 e49de004 ldr lr, [sp], #4
00028 e12fff1e bx lr
0002c |$L43649|
0002c 00000000 DCD |hAcLinkControlMutex|
00030 |$M43645|
ENDP ; |Ac97Unlock|
EXPORT |AC97GpioConfigure|
IMPORT |GPIOSetController|
IMPORT |GPIOSetControllerValue|
IMPORT |XllpOstDelayMilliSeconds|
00000 AREA |.text| { |AC97GpioConfigure| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$AC97GpioConfigure|, PDATA, SELECTION=5, ASSOC=|.text| { |AC97GpioConfigure| } ; comdat associative
|$T43663| DCD |$L43662|
DCD 0x40006b01
; Function compile flags: /Ogsy
00000 AREA |.text| { |AC97GpioConfigure| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |AC97GpioConfigure| PROC
; 197 : {
00000 |$L43662|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 |$M43660|
00004 e1a06000 mov r6, r0
; 198 : unsigned int cSleeps;
; 199 : short int retval=FALSE;
; 200 :
; 201 : if(v_pDriverGlobals != NULL)
00008 e59f5198 ldr r5, [pc, #0x198]
0000c e3a04000 mov r4, #0
00010 e595100c ldr r1, [r5, #0xC]
00014 e3510000 cmp r1, #0
00018 0a00005e beq |$L43435|
; 202 : {
; 203 : // If already activated, just log this client and no-op gracefully
; 204 : if(0 != v_pDriverGlobals->ac97.GpioIsConfigured)
0001c e5d13500 ldrb r3, [r1, #0x500]
; 205 : {
; 206 : // Log activation by this client
; 207 : v_pDriverGlobals->ac97.GpioIsConfigured |= 1u << DevId;
00020 e3a00001 mov r0, #1
00024 e3530000 cmp r3, #0
00028 e20330ff and r3, r3, #0xFF
; 208 : return(SUCCESS);
0002c e1833210 orr r3, r3, r0, lsl r2
00030 13a04001 movne r4, #1
00034 e5c13500 strb r3, [r1, #0x500]
00038 1a000057 bne |$L43431|
; 215 : }
; 216 :
; 217 : // Transition to active. Log this client and perform the activation
; 218 : v_pDriverGlobals->ac97.GpioIsConfigured |= 1u << DevId;
; 219 :
; 220 : if(v_pGPIOReg && v_pAc97regs)
0003c e3560000 cmp r6, #0
00040 0a000054 beq |$L43435|
00044 e5953008 ldr r3, [r5, #8]
00048 e3530000 cmp r3, #0
0004c 0a000051 beq |$L43435|
; 221 : {
; 222 : GPIOSetController((XLLP_GPIO_T *)v_pGPIOReg, AC97EN | GPIO_OUT | GPIO_AF0);
00050 e3a01d81 mov r1, #0x81, 26
00054 e3811018 orr r1, r1, #0x18
00058 e1a00006 mov r0, r6
0005c eb000000 bl GPIOSetController
; 223 : GPIOSetControllerValue((XLLP_GPIO_T *)v_pGPIOReg, AC97EN | GPIO_OUT_1);
00060 e3a01f56 mov r1, #0x56, 30
00064 e1a00006 mov r0, r6
00068 eb000000 bl GPIOSetControllerValue
; 224 :
; 225 : XllpOstDelayMilliSeconds(vp_OSTRegs, 10);
0006c e5950004 ldr r0, [r5, #4]
00070 e3a0100a mov r1, #0xA
00074 eb000000 bl XllpOstDelayMilliSeconds
; 226 :
; 227 : v_pClockRegs->cken |= 0x00000004;
00078 e5952000 ldr r2, [r5]
; 228 : GPIOSetController((XLLP_GPIO_T *)v_pGPIOReg, ACSYSCLK | GPIO_OUT | GPIO_AF1);
0007c e3a01d85 mov r1, #0x85, 26
00080 e3811019 orr r1, r1, #0x19
00084 e5923004 ldr r3, [r2, #4]
00088 e1a00006 mov r0, r6
0008c e3833004 orr r3, r3, #4
00090 e5823004 str r3, [r2, #4]
00094 eb000000 bl GPIOSetController
; 229 :
; 230 :
; 231 : GPIOSetController((XLLP_GPIO_T *)v_pGPIOReg, ACSDOUT | GPIO_OUT | GPIO_AF2);
00098 e3a01c22 mov r1, #0x22, 24
0009c e381101e orr r1, r1, #0x1E
000a0 e1a00006 mov r0, r6
000a4 eb000000 bl GPIOSetController
; 232 : GPIOSetController((XLLP_GPIO_T *)v_pGPIOReg, ACSYNC | GPIO_OUT | GPIO_AF2);
000a8 e3a01c22 mov r1, #0x22, 24
000ac e381101f orr r1, r1, #0x1F
000b0 e1a00006 mov r0, r6
000b4 eb000000 bl GPIOSetController
; 233 : GPIOSetController((XLLP_GPIO_T *)v_pGPIOReg, ACBCLK | GPIO_IN | GPIO_AF1);
000b8 e3a01c11 mov r1, #0x11, 24
000bc e381101c orr r1, r1, #0x1C
000c0 e1a00006 mov r0, r6
000c4 eb000000 bl GPIOSetController
; 234 : GPIOSetController((XLLP_GPIO_T *)v_pGPIOReg, ACSDIN | GPIO_IN | GPIO_AF1);
000c8 e3a01c11 mov r1, #0x11, 24
000cc e381101d orr r1, r1, #0x1D
000d0 e1a00006 mov r0, r6
000d4 eb000000 bl GPIOSetController
; 235 : // Don't use alt fn for reset line, control as simple GPIO: silicon issue after sleep
; 236 : GPIOSetController((XLLP_GPIO_T *)v_pGPIOReg, TPINT | GPIO_AF0 | GPIO_OUT);
000d8 e3a01a02 mov r1, #2, 20
000dc e381100b orr r1, r1, #0xB
000e0 e1a00006 mov r0, r6
000e4 eb000000 bl GPIOSetController
; 237 : GPIOSetControllerValue((XLLP_GPIO_T *)v_pGPIOReg, TPINT | GPIO_OUT_1);
000e8 e3a01f42 mov r1, #0x42, 30
000ec e3811003 orr r1, r1, #3
000f0 e1a00006 mov r0, r6
000f4 eb000000 bl GPIOSetControllerValue
; 238 : XllpOstDelayMilliSeconds(vp_OSTRegs, 10);
000f8 e5950004 ldr r0, [r5, #4]
000fc e3a0100a mov r1, #0xA
00100 eb000000 bl XllpOstDelayMilliSeconds
; 239 : GPIOSetControllerValue((XLLP_GPIO_T *)v_pGPIOReg, TPINT | GPIO_OUT_0);
00104 e3a0100b mov r1, #0xB
00108 e1a00006 mov r0, r6
0010c eb000000 bl GPIOSetControllerValue
; 240 : XllpOstDelayMilliSeconds(vp_OSTRegs, 10);
00110 e5950004 ldr r0, [r5, #4]
00114 e3a0100a mov r1, #0xA
00118 eb000000 bl XllpOstDelayMilliSeconds
; 241 : GPIOSetControllerValue((XLLP_GPIO_T *)v_pGPIOReg, TPINT | GPIO_OUT_1);
0011c e3a01f42 mov r1, #0x42, 30
00120 e3811003 orr r1, r1, #3
00124 e1a00006 mov r0, r6
00128 eb000000 bl GPIOSetControllerValue
; 242 : v_pAc97regs->GCR |= AC97GCR_ColdReset;
0012c e5952008 ldr r2, [r5, #8]
; 243 :
; 244 : XllpOstDelayMilliSeconds(vp_OSTRegs, 10);
00130 e3a0100a mov r1, #0xA
00134 e592300c ldr r3, [r2, #0xC]
00138 e3833002 orr r3, r3, #2
0013c e582300c str r3, [r2, #0xC]
00140 e5950004 ldr r0, [r5, #4]
00144 eb000000 bl XllpOstDelayMilliSeconds
; 245 : v_pAc97regs->GCR |= (1 << 2); // Brings codec out of cold reset if alt fn used.
00148 e5952008 ldr r2, [r5, #8]
; 246 : // Wait for the clocks to stabilize. Assume we're in power management
; 247 : // mode, since it might be so.
; 248 : for(cSleeps = 0; (cSleeps < 200) && (retval == FALSE); cSleeps++)
0014c e3a06000 mov r6, #0
00150 e592300c ldr r3, [r2, #0xC]
00154 e3833004 orr r3, r3, #4
00158 e582300c str r3, [r2, #0xC]
0015c |$L43450|
0015c e1a03804 mov r3, r4, lsl #16
00160 e1b03823 movs r3, r3, lsr #16
00164 1a000009 bne |$L43452|
; 249 : {
; 250 : XllpOstDelayMilliSeconds(vp_OSTRegs, 10);
00168 e5950004 ldr r0, [r5, #4]
0016c e3a0100a mov r1, #0xA
00170 eb000000 bl XllpOstDelayMilliSeconds
; 251 :
; 252 : if(v_pAc97regs->GSR & AC97GSR_CODEC_READY_BIT)
00174 e5953008 ldr r3, [r5, #8]
00178 e2866001 add r6, r6, #1
0017c e593301c ldr r3, [r3, #0x1C]
00180 e3130c01 tst r3, #1, 24
; 253 : {
; 254 : // add debug message here that found primary codec ready
; 255 : retval = SUCCESS;
00184 13a04001 movne r4, #1
00188 e35600c8 cmp r6, #0xC8
0018c 3afffff2 bcc |$L43450|
00190 |$L43452|
; 256 : }
; 257 : }
; 258 :
; 259 : if(cSleeps == 200)
00190 e35600c8 cmp r6, #0xC8
00194 1a000000 bne |$L43431|
00198 |$L43435|
; 209 : }
; 210 :
; 211 : }
; 212 : else
; 213 : {
; 214 : return(FALSE);
00198 e3a04000 mov r4, #0
0019c |$L43431|
; 208 : return(SUCCESS);
0019c e1a00004 mov r0, r4
; 260 : {
; 261 : retval = FALSE;
; 262 : }
; 263 : }
; 264 : else
; 265 : {
; 266 : retval = FALSE;
; 267 : }
; 268 :
; 269 : return(retval);
; 270 : }
001a0 e8bd4070 ldmia sp!, {r4 - r6, lr}
001a4 e12fff1e bx lr
001a8 |$L43665|
001a8 00000000 DCD |v_pClockRegs|
001ac |$M43661|
ENDP ; |AC97GpioConfigure|
EXPORT |InitAcLink|
00000 AREA |.text| { |InitAcLink| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$InitAcLink|, PDATA, SELECTION=5, ASSOC=|.text| { |InitAcLink| } ; comdat associative
|$T43677| DCD |$L43676|
DCD 0x40001801
; Function compile flags: /Ogsy
00000 AREA |.text| { |InitAcLink| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |InitAcLink| PROC
; 273 : {
00000 |$L43676|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 |$M43674|
00004 e1a04002 mov r4, r2
00008 e1a05001 mov r5, r1
0000c e1a06000 mov r6, r0
; 274 : // EdbgOutputDebugString ("***********Entering InitAcLink\r\n");
; 275 :
; 276 : if (AllocAcLink(DevId)!=SUCCESS) // Allocate virtual addresses for AC97 controller and associated registers.
00010 e1a00004 mov r0, r4
00014 eb000000 bl AllocAcLink
00018 e1a03800 mov r3, r0, lsl #16
0001c e1a03823 mov r3, r3, lsr #16
00020 e3530001 cmp r3, #1
; 277 : {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -