⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atapipm.cod

📁 windows CE 的BSP开发包.包含众多的驱动程序和OAL层的开发代码
💻 COD
📖 第 1 页 / 共 5 页
字号:
  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 + -