📄 atapipm.cod
字号:
00010 e12fff1e bx lr
00014 |$M32471|
ENDP ; |?ReleaseCS@CDiskPower@@MAAXXZ|, CDiskPower::ReleaseCS
; File d:\wince500\public\common\sdk\inc\kfuncs.h
00000 AREA |.text| { |?SignalActivity@CDiskPower@@UAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?SignalActivity@CDiskPower@@UAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?SignalActivity@CDiskPower@@UAAXXZ| } ; comdat associative
|$T32485| DCD |$L32484|
DCD 0x40000601
; Function compile flags: /Ogsy
; File d:\wince500\platform\smdk2440\drivers\atapi\atapipm.cpp
00000 AREA |.text| { |?SignalActivity@CDiskPower@@UAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?SignalActivity@CDiskPower@@UAAXXZ| PROC ; CDiskPower::SignalActivity
; 176 : {
00000 |$L32484|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M32482|
; 177 : DEBUGCHK(m_hevPowerSignal);
; 178 : DEBUGCHK(m_htPower);
; 179 : SetEvent(m_hevPowerSignal);
00004 e5900020 ldr r0, [r0, #0x20]
00008 e3a01003 mov r1, #3
0000c eb000000 bl EventModify
; 180 : }
00010 e49de004 ldr lr, [sp], #4
00014 e12fff1e bx lr
00018 |$M32483|
ENDP ; |?SignalActivity@CDiskPower@@UAAXXZ|, CDiskPower::SignalActivity
00000 AREA |.text| { |?RequestDevice@CDiskPower@@UAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?RequestDevice@CDiskPower@@UAAHXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?RequestDevice@CDiskPower@@UAAHXZ| } ; comdat associative
|$T32497| DCD |$L32496|
DCD 0x40002901
; Function compile flags: /Ogsy
00000 AREA |.text| { |?RequestDevice@CDiskPower@@UAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?RequestDevice@CDiskPower@@UAAHXZ| PROC ; CDiskPower::RequestDevice
; 186 : {
00000 |$L32496|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 |$M32494|
00004 e1a04000 mov r4, r0
; 187 : BOOL fOk = TRUE;
; 188 : PREFAST_DEBUGCHK(m_pfnDevicePowerNotify != NULL);
; 189 :
; 190 : TakeCS();
00008 e5943000 ldr r3, [r4]
0000c e3a05001 mov r5, #1
00010 e5933024 ldr r3, [r3, #0x24]
00014 e1a0e00f mov lr, pc
00018 e12fff13 bx r3
; 191 :
; 192 : // is the disk powered up?
; 193 : if(m_curDx != D0) {
0001c e5943008 ldr r3, [r4, #8]
00020 e3530000 cmp r3, #0
00024 0a000011 beq |$L32489|
; 194 : // don't bother requesting from the PM if we've already asked in a previous request
; 195 : DEBUGMSG(ZONE_POWER, (_T("CDiskPower::RequestDevice: device at D%d, m_fBoostRequested is %d\r\n"), m_curDx, m_fBoostRequested));
; 196 : if(!m_fBoostRequested) {
00028 e5943010 ldr r3, [r4, #0x10]
0002c e3530000 cmp r3, #0
00030 1a00000b bne |$L32038|
; 197 : // request that the PM make us available
; 198 : m_fBoostRequested = TRUE;
; 199 : DWORD dwStatus = m_pfnDevicePowerNotify((PVOID) m_pszPMName, D0, POWER_NAME);
; 200 : if(dwStatus != ERROR_SUCCESS) {
00034 e3a06001 mov r6, #1
00038 e5940048 ldr r0, [r4, #0x48]
0003c e59430b0 ldr r3, [r4, #0xB0]
00040 e5846010 str r6, [r4, #0x10]
00044 e3a02001 mov r2, #1
00048 e3a01000 mov r1, #0
0004c e1a0e00f mov lr, pc
00050 e12fff13 bx r3
00054 e3500000 cmp r0, #0
; 201 : DEBUGMSG(ZONE_WARNING, (_T("CDiskPower::RequestDevice: DevicePowerNotify('%s') failed %d\r\n"), m_pszPMName, dwStatus));
; 202 : m_fBoostRequested = FALSE;
00058 13a03000 movne r3, #0
0005c 15843010 strne r3, [r4, #0x10]
; 203 : fOk = FALSE;
00060 13a05000 movne r5, #0
00064 |$L32038|
; 204 : }
; 205 : }
; 206 : }
; 207 :
; 208 : if(m_curDx == D0) {
00064 e5943008 ldr r3, [r4, #8]
00068 e3530000 cmp r3, #0
0006c 1a000003 bne |$L32040|
00070 |$L32489|
; 209 : // wait for the disk to spin up so that we can do I/O
; 210 : DEBUGCHK(m_UseCount == 0);
; 211 : m_UseCount++;
00070 e594304c ldr r3, [r4, #0x4C]
00074 e2833001 add r3, r3, #1
00078 e584304c str r3, [r4, #0x4C]
; 212 : } else {
0007c ea000000 b |$L32042|
00080 |$L32040|
; 213 : fOk = FALSE;
00080 e3a05000 mov r5, #0
00084 |$L32042|
; 214 : }
; 215 :
; 216 : ReleaseCS();
00084 e5943000 ldr r3, [r4]
00088 e1a00004 mov r0, r4
0008c e5933028 ldr r3, [r3, #0x28]
00090 e1a0e00f mov lr, pc
00094 e12fff13 bx r3
; 217 :
; 218 : return fOk;
00098 e1a00005 mov r0, r5
; 219 : }
0009c e8bd4070 ldmia sp!, {r4 - r6, lr}
000a0 e12fff1e bx lr
000a4 |$M32495|
ENDP ; |?RequestDevice@CDiskPower@@UAAHXZ|, CDiskPower::RequestDevice
00000 AREA |.text| { |?ReleaseDevice@CDiskPower@@UAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?ReleaseDevice@CDiskPower@@UAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?ReleaseDevice@CDiskPower@@UAAXXZ| } ; comdat associative
|$T32505| DCD |$L32504|
DCD 0x40002101
; Function compile flags: /Ogsy
00000 AREA |.text| { |?ReleaseDevice@CDiskPower@@UAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?ReleaseDevice@CDiskPower@@UAAXXZ| PROC ; CDiskPower::ReleaseDevice
; 224 : {
00000 |$L32504|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M32502|
00004 e1a04000 mov r4, r0
; 225 : PREFAST_DEBUGCHK(m_pfnDevicePowerNotify);
; 226 :
; 227 : TakeCS();
00008 e5943000 ldr r3, [r4]
0000c e5933024 ldr r3, [r3, #0x24]
00010 e1a0e00f mov lr, pc
00014 e12fff13 bx r3
; 228 :
; 229 : // update the usage counter
; 230 : DEBUGCHK(m_UseCount != 0);
; 231 : m_UseCount--;
; 232 : DEBUGCHK(m_UseCount == 0);
; 233 :
; 234 : // wake the timeout thread to restart its countdown
; 235 : SignalActivity();
00018 e5943000 ldr r3, [r4]
0001c e594204c ldr r2, [r4, #0x4C]
00020 e1a00004 mov r0, r4
00024 e5931008 ldr r1, [r3, #8]
00028 e2423001 sub r3, r2, #1
0002c e584304c str r3, [r4, #0x4C]
00030 e1a0e00f mov lr, pc
00034 e12fff11 bx r1
; 236 : if(m_fReductionRequested) {
00038 e5943014 ldr r3, [r4, #0x14]
0003c e3530000 cmp r3, #0
00040 0a000008 beq |$L32056|
; 237 : // cancel outstanding requests to spin down the disk
; 238 : DWORD dwStatus = m_pfnDevicePowerNotify((PVOID) m_pszPMName, D0, POWER_NAME);
00044 e5940048 ldr r0, [r4, #0x48]
; 239 : if(dwStatus != ERROR_SUCCESS) {
00048 e59430b0 ldr r3, [r4, #0xB0]
0004c e3a02001 mov r2, #1
00050 e3a01000 mov r1, #0
00054 e1a0e00f mov lr, pc
00058 e12fff13 bx r3
0005c e3500000 cmp r0, #0
; 240 : DEBUGMSG(ZONE_WARNING, (_T("CDiskPower::DiskPowerThread: DevicePowerNotify('%s', D%d) failed %d\r\n"), m_pszPMName, D0, dwStatus));
; 241 : } else {
; 242 : m_fReductionRequested = FALSE;
00060 03a03000 moveq r3, #0
00064 05843014 streq r3, [r4, #0x14]
00068 |$L32056|
; 243 : }
; 244 : }
; 245 : ReleaseCS();
00068 e5943000 ldr r3, [r4]
0006c e1a00004 mov r0, r4
00070 e5933028 ldr r3, [r3, #0x28]
00074 e1a0e00f mov lr, pc
00078 e12fff13 bx r3
; 246 : }
0007c e8bd4010 ldmia sp!, {r4, lr}
00080 e12fff1e bx lr
00084 |$M32503|
ENDP ; |?ReleaseDevice@CDiskPower@@UAAXXZ|, CDiskPower::ReleaseDevice
IMPORT |WaitForSingleObject|
00000 AREA |.text| { |?DiskPowerThread@CDiskPower@@EAAKXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?DiskPowerThread@CDiskPower@@EAAKXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?DiskPowerThread@CDiskPower@@EAAKXZ| } ; comdat associative
|$T32522| DCD |$L32521|
DCD 0x40005201
; Function compile flags: /Ogsy
00000 AREA |.text| { |?DiskPowerThread@CDiskPower@@EAAKXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?DiskPowerThread@CDiskPower@@EAAKXZ| PROC ; CDiskPower::DiskPowerThread
; 249 : {
00000 |$L32521|
00000 e92d43f0 stmdb sp!, {r4 - r9, lr}
00004 |$M32519|
00004 e1a04000 mov r4, r0
; 250 : BOOL fDone = FALSE;
; 251 : DWORD dwTimeout = m_dwPowerTimeout;
; 252 : HANDLE hev = m_hevPowerSignal;
00008 e3a07c01 mov r7, #1, 24
0000c e5945018 ldr r5, [r4, #0x18]
00010 e5946020 ldr r6, [r4, #0x20]
00014 e3877002 orr r7, r7, #2
00018 e3a09001 mov r9, #1
0001c e3a08000 mov r8, #0
00020 |$L32069|
; 253 :
; 254 : PREFAST_DEBUGCHK(m_pfnDevicePowerNotify != NULL);
; 255 : DEBUGCHK(m_hevPowerSignal);
; 256 : DEBUGCHK(m_hevDummy);
; 257 :
; 258 : DEBUGMSG(ZONE_INIT, (_T("CDiskPower::DiskPowerThread: starting up for '%s', timeout is %d ms\r\n"), m_pszPMName, m_dwPowerTimeout));
; 259 :
; 260 : while(!fDone) {
; 261 : //DEBUGMSG(ZONE_POWER, (_T("CDiskPower::DiskPowerThread: waiting on '%s', timeout is %u\r\n"), m_pszPMName, dwTimeout));
; 262 : DWORD dwStatus = WaitForSingleObject(hev, dwTimeout);
00020 e1a01005 mov r1, r5
00024 e1a00006 mov r0, r6
00028 eb000000 bl WaitForSingleObject
0002c e3500000 cmp r0, #0
; 263 : //DEBUGMSG(ZONE_POWER, (_T("CDiskPower::DiskPowerThread: WaitForSingleObject() returned %u\r\n"), dwStatus));
; 264 : switch(dwStatus) {
00030 0a000031 beq |$L32076|
00034 e1500007 cmp r0, r7
00038 1afffff8 bne |$L32069|
; 278 : }
; 279 : break;
; 280 : case WAIT_TIMEOUT:
; 281 : // inactivity timeout -- see if we should spin down the disk
; 282 : m_pDisk->TakeCS();
0003c e5940044 ldr r0, [r4, #0x44]
00040 e5903000 ldr r3, [r0]
00044 e5933030 ldr r3, [r3, #0x30]
00048 e1a0e00f mov lr, pc
0004c e12fff13 bx r3
; 283 : TakeCS();
00050 e5943000 ldr r3, [r4]
00054 e1a00004 mov r0, r4
00058 e5933024 ldr r3, [r3, #0x24]
0005c e1a0e00f mov lr, pc
00060 e12fff13 bx r3
; 284 :
; 285 : // we should be the only thread in the driver at this point
; 286 : DEBUGCHK(m_UseCount == 0);
; 287 :
; 288 : // By the time we have acquired these critical sections, we may have seen
; 289 : // some disk activity from an I/O thread that held them previously. Check
; 290 : // for this by polling our timeout event.
; 291 : if(WaitForSingleObject(m_hevPowerSignal, 0) == WAIT_TIMEOUT) {
00064 e5940020 ldr r0, [r4, #0x20]
00068 e3a01000 mov r1, #0
0006c eb000000 bl WaitForSingleObject
00070 e1500007 cmp r0, r7
00074 1a00000d bne |$L32084|
; 292 : // don't bother asking the PM if we've already requested to spin down
; 293 : DEBUGMSG(ZONE_POWER, (_T("CDiskPower::DiskPowerThread: no disk activity on '%s', m_fReductionRequested is %d\r\n"), m_pszPMName, m_fReductionRequested));
; 294 : if(!m_fReductionRequested) {
00078 e5943014 ldr r3, [r4, #0x14]
0007c e3530000 cmp r3, #0
00080 1a000008 bne |$L32089|
; 295 : // spin down the disk to m_timeoutDx
; 296 : m_fReductionRequested = TRUE;
; 297 : dwStatus = m_pfnDevicePowerNotify((PVOID) m_pszPMName, m_timeoutDx, POWER_NAME);
00084 e594100c ldr r1, [r4, #0xC]
00088 e5940048 ldr r0, [r4, #0x48]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -