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

📄 atapiio.cod

📁 windows CE 的BSP开发包.包含众多的驱动程序和OAL层的开发代码
💻 COD
📖 第 1 页 / 共 5 页
字号:
; 122  :         bStatusRead = GetAltStatus();

  00018	e597e034	 ldr         lr, [r7, #0x34]
  0001c	e5973028	 ldr         r3, [r7, #0x28]
  00020	e08e0003	 add         r0, lr, r3
  00024	eb000000	 bl          READ_PORT_UCHAR

; 123  :         switch (bStatusType) {

  00028	e3540001	 cmp         r4, #1
  0002c	0a00001a	 beq         |$L31985|
  00030	e3540002	 cmp         r4, #2
  00034	0a000016	 beq         |$L31990|
  00038	e3540003	 cmp         r4, #3
  0003c	0a00000c	 beq         |$L31994|
  00040	e3540004	 cmp         r4, #4
  00044	0a000008	 beq         |$L31998|
  00048	e3540005	 cmp         r4, #5
  0004c	0a000003	 beq         |$L32002|
  00050	e3540006	 cmp         r4, #6
  00054	1a000012	 bne         |$L31986|

; 155  :             case WAIT_TYPE_ERROR:
; 156  :                 if (bStatusRead & ATA_STATUS_ERROR) {

  00058	e3100001	 tst         r0, #1

; 157  :                     DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_ERROR\r\n")));
; 158  :                     goto ExitDone;
; 159  :                 }
; 160  :                 break;

  0005c	ea00000f	 b           |$L32426|
  00060		 |$L32002|

; 149  :             case WAIT_TYPE_NOT_DRQ:
; 150  :                 if (!(bStatusRead & ATA_STATUS_DATA_REQ)) {

  00060	e3100008	 tst         r0, #8
  00064		 |$L32427|
  00064	0a000007	 beq         |$ExitDone$31988|

; 151  :                     DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_NOT_DRQ\r\n")));
; 152  :                     goto ExitDone;
; 153  :                 }
; 154  :                 break;

  00068	ea00000d	 b           |$L31986|
  0006c		 |$L31998|

; 140  :                     goto ExitDone;
; 141  :                 }
; 142  :                 break;
; 143  :             case WAIT_TYPE_DRQ:
; 144  :                 if (bStatusRead & ATA_STATUS_DATA_REQ) {

  0006c	e3100008	 tst         r0, #8

; 145  :                     DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_DRQ\r\n")));
; 146  :                     goto ExitDone;
; 147  :                 }
; 148  :                 break;

  00070	ea00000a	 b           |$L32426|
  00074		 |$L31994|

; 136  :             case WAIT_TYPE_READY:
; 137  :                 if (bStatusRead & ATA_STATUS_READY) {

  00074	e3100040	 tst         r0, #0x40
  00078	0a000009	 beq         |$L31986|

; 138  :                     DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_READY\r\n")));
; 139  :                     StallExecution(100);

  0007c	e3a01064	 mov         r1, #0x64
  00080	e1a00007	 mov         r0, r7
  00084	eb000000	 bl          |?StallExecution@CDisk@@QAAXK@Z|
  00088		 |$ExitDone$31988|

; 173  : ExitDone:
; 174  :     return ERROR_SUCCESS;

  00088	e3a00000	 mov         r0, #0

; 175  : }

  0008c	e8bd40f0	 ldmia       sp!, {r4 - r7, lr}
  00090	e12fff1e	 bx          lr
  00094		 |$L31990|

; 126  :                     DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_BUSY\r\n")));
; 127  :                     goto ExitDone;
; 128  :                 }
; 129  :                 break;
; 130  :             case WAIT_TYPE_NOT_BUSY:
; 131  :                 if (!(bStatusRead & ATA_STATUS_BUSY)) {

  00094	e3100080	 tst         r0, #0x80

; 132  :                     DEBUGMSG(ZONE_IO, (TEXT("Atapi!CDisk::WaitForDisc> WAIT_TYPE_NOT_BUSY\r\n")));
; 133  :                     goto ExitDone;
; 134  :                 }
; 135  :                 break;

  00098	eafffff1	 b           |$L32427|
  0009c		 |$L31985|

; 124  :             case WAIT_TYPE_BUSY:
; 125  :                 if (bStatusRead & ATA_STATUS_BUSY) {

  0009c	e3100080	 tst         r0, #0x80
  000a0		 |$L32426|
  000a0	1afffff8	 bne         |$ExitDone$31988|
  000a4		 |$L31986|

; 161  :         }
; 162  :         if ((int)dwTimeOut > 0) {

  000a4	e3550000	 cmp         r5, #0
  000a8	da000004	 ble         |$L32011|

; 163  :             StallExecution(dwPeriod);

  000ac	e1a01006	 mov         r1, r6
  000b0	e1a00007	 mov         r0, r7
  000b4	eb000000	 bl          |?StallExecution@CDisk@@QAAXK@Z|

; 164  :             dwTimeOut -= dwPeriod;

  000b8	e0455006	 sub         r5, r5, r6

; 171  :         }
; 172  :     }

  000bc	eaffffd5	 b           |$L31979|
  000c0		 |$L32011|

; 165  :         }
; 166  :         else {
; 167  :             DEBUGMSG(ZONE_ERROR, (TEXT(
; 168  :                 "Atapi!CDisk::WaitForDisc> timeout; bStatusType(%d); status(%02X)\r\n"
; 169  :                 ), bStatusType, bStatusRead));
; 170  :             return ERROR_GEN_FAILURE;

  000c0	e3a0001f	 mov         r0, #0x1F

; 175  : }

  000c4	e8bd40f0	 ldmia       sp!, {r4 - r7, lr}
  000c8	e12fff1e	 bx          lr
  000cc		 |$M32429|

			 ENDP  ; |?WaitForDisc@CDisk@@UAAHEKK@Z|, CDisk::WaitForDisc

	EXPORT	|?WaitForDRQ@CDisk@@UAAHXZ|		; CDisk::WaitForDRQ
; File d:\wince500\platform\smdk2440\drivers\atapi\diskmain.h

  00000			 AREA	 |.text| { |?WaitForDRQ@CDisk@@UAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?WaitForDRQ@CDisk@@UAAHXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?WaitForDRQ@CDisk@@UAAHXZ| } ; comdat associative
|$T32455| DCD	|$L32454|
	DCD	0x40005802
; Function compile flags: /Ogsy
; File d:\wince500\platform\smdk2440\drivers\atapi\atapiio.cpp

  00000			 AREA	 |.text| { |?WaitForDRQ@CDisk@@UAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?WaitForDRQ@CDisk@@UAAHXZ| PROC	; CDisk::WaitForDRQ

; 188  : {

  00000		 |$L32454|
  00000	e92d43f0	 stmdb       sp!, {r4 - r9, lr}
  00004	e24dd014	 sub         sp, sp, #0x14
  00008		 |$M32452|
  00008	e1a04000	 mov         r4, r0

; 189  :     DWORD i,j;
; 190  :     BYTE bStatus = 0;
; 191  : 
; 192  :     if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_WAITDRQ, NULL, 0, 0, CELZONE_ALWAYSON, 0, FALSE);

  0000c	e59f5148	 ldr         r5, [pc, #0x148]
  00010	e3a02000	 mov         r2, #0
  00014	e5cd2010	 strb        r2, [sp, #0x10]
  00018	e5953440	 ldr         r3, [r5, #0x440]
  0001c	e3a08000	 mov         r8, #0
  00020	e3a09101	 mov         r9, #1, 2
  00024	e3130902	 tst         r3, #2, 18
  00028	0a00000a	 beq         |$L32020|
  0002c	e3a01d86	 mov         r1, #0x86, 26
  00030	e3811007	 orr         r1, r1, #7
  00034	e3a03000	 mov         r3, #0
  00038	e3a02000	 mov         r2, #0
  0003c	e3a00001	 mov         r0, #1
  00040	e58d800c	 str         r8, [sp, #0xC]
  00044	e58d8008	 str         r8, [sp, #8]
  00048	e58d9004	 str         r9, [sp, #4]
  0004c	e58d8000	 str         r8, [sp]
  00050	eb000000	 bl          CeLogData
  00054	e5dd2010	 ldrb        r2, [sp, #0x10]
  00058		 |$L32020|

; 193  : 
; 194  :     for (i = 0; i < m_dwWaitCheckIter; i++) {

  00058	e59436bc	 ldr         r3, [r4, #0x6BC]
  0005c	e3a06000	 mov         r6, #0
  00060	e3530000	 cmp         r3, #0
  00064	9a000019	 bls         |$L32023|
  00068		 |$L32021|

; 195  :         for (j = 0; j < m_dwWaitSampleTimes; j++) {

  00068	e59436c0	 ldr         r3, [r4, #0x6C0]
  0006c	e3a07000	 mov         r7, #0
  00070	e3530000	 cmp         r3, #0
  00074	9a000011	 bls         |$L32022|
  00078		 |$L32024|

; 196  :             bStatus = GetAltStatus() & (ATA_STATUS_BUSY|ATA_STATUS_DATA_REQ);

  00078	e5942034	 ldr         r2, [r4, #0x34]
  0007c	e5943028	 ldr         r3, [r4, #0x28]
  00080	e0820003	 add         r0, r2, r3
  00084	eb000000	 bl          READ_PORT_UCHAR
  00088	e2003088	 and         r3, r0, #0x88
  0008c	e5cd3010	 strb        r3, [sp, #0x10]

; 197  :             if ((bStatus & ATA_STATUS_BUSY) == 0) {

  00090	e3130080	 tst         r3, #0x80
  00094	1a000001	 bne         |$L32028|

; 198  :                 if (bStatus & ATA_STATUS_DATA_REQ){

  00098	e3130008	 tst         r3, #8
  0009c	1a00001f	 bne         |$L32442|
  000a0		 |$L32028|

; 201  :                 }
; 202  :             }
; 203  :             StallExecution(m_dwWaitStallTime);

  000a0	e59416c4	 ldr         r1, [r4, #0x6C4]
  000a4	e1a00004	 mov         r0, r4
  000a8	eb000000	 bl          |?StallExecution@CDisk@@QAAXK@Z|
  000ac	e59436c0	 ldr         r3, [r4, #0x6C0]
  000b0	e2877001	 add         r7, r7, #1
  000b4	e1570003	 cmp         r7, r3
  000b8	3affffee	 bcc         |$L32024|

; 195  :         for (j = 0; j < m_dwWaitSampleTimes; j++) {

  000bc	e5dd2010	 ldrb        r2, [sp, #0x10]
  000c0		 |$L32022|

; 193  : 
; 194  :     for (i = 0; i < m_dwWaitCheckIter; i++) {

  000c0	e59436bc	 ldr         r3, [r4, #0x6BC]
  000c4	e2866001	 add         r6, r6, #1
  000c8	e1560003	 cmp         r6, r3
  000cc	3affffe5	 bcc         |$L32021|
  000d0		 |$L32023|

; 189  :     DWORD i,j;
; 190  :     BYTE bStatus = 0;
; 191  : 
; 192  :     if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_WAITDRQ, NULL, 0, 0, CELZONE_ALWAYSON, 0, FALSE);

  000d0	e5953440	 ldr         r3, [r5, #0x440]

; 204  :         }
; 205  :         DEBUGMSG(ZONE_WARNING, (TEXT(
; 206  :             "Atapi!CDisk::WaitForDRQ> status(%02X), error(%02X), reason(%02X)\r\n"
; 207  :             ), GetAltStatus(), GetError(), GetReason()));
; 208  :     }
; 209  : 
; 210  :     if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_STATUSWAITDRQ, &bStatus, sizeof(bStatus), 0, CELZONE_ALWAYSON, 0, FALSE);

  000d4	e3130902	 tst         r3, #2, 18
  000d8	0a00000a	 beq         |$L32031|
  000dc	e3a01d86	 mov         r1, #0x86, 26
  000e0	e3811008	 orr         r1, r1, #8
  000e4	e3a03001	 mov         r3, #1
  000e8	e28d2010	 add         r2, sp, #0x10
  000ec	e3a00001	 mov         r0, #1
  000f0	e58d800c	 str         r8, [sp, #0xC]
  000f4	e58d8008	 str         r8, [sp, #8]
  000f8	e58d9004	 str         r9, [sp, #4]
  000fc	e58d8000	 str         r8, [sp]
  00100	eb000000	 bl          CeLogData
  00104	e5dd2010	 ldrb        r2, [sp, #0x10]
  00108		 |$L32031|

; 211  : 
; 212  :     return (bStatus == ATA_STATUS_DATA_REQ);

  00108	e3520008	 cmp         r2, #8
  0010c	0a000010	 beq         |$L32029|
  00110	e3a00000	 mov         r0, #0
  00114		 |$L32436|

; 213  : }

  00114	e28dd014	 add         sp, sp, #0x14
  00118	e8bd43f0	 ldmia       sp!, {r4 - r9, lr}
  0011c	e12fff1e	 bx          lr
  00120		 |$L32442|

; 199  :                     if (ZONE_CELOG) CeLogData(TRUE, CELID_ATAPI_STATUSWAITDRQ, &bStatus, sizeof(bStatus), 0, CELZONE_ALWAYSON, 0, FALSE);

  00120	e5953440	 ldr         r3, [r5, #0x440]
  00124	e3130902	 tst         r3, #2, 18
  00128	0a000009	 beq         |$L32029|
  0012c	e3a01d86	 mov         r1, #0x86, 26
  00130	e3811008	 orr         r1, r1, #8
  00134	e3a03001	 mov         r3, #1
  00138	e28d2010	 add         r2, sp, #0x10
  0013c	e3a00001	 mov         r0, #1
  00140	e58d800c	 str         r8, [sp, #0xC]
  00144	e58d8008	 str         r8, [sp, #8]
  00148	e58d9004	 str         r9, [sp, #4]
  0014c	e58d8000	 str         r8, [sp]
  00150	eb000000	 bl          CeLogData
  00154		 |$L32029|

; 200  :                     return TRUE;

  00154	e3a00001	 mov         r0, #1
  00158	eaffffed	 b           |$L32436|
  0015c		 |$L32457|
  0015c	00000000	 DCD         |?dpCurSettings@@3U_DBGPARAM@@A|
  00160		 |$M32453|

			 ENDP  ; |?WaitForDRQ@CDisk@@UAAHXZ|, CDisk::WaitForDRQ

	EXPORT	|?CheckIntrState@CDisk@@QAAGXZ|		; CDisk::CheckIntrState
; File d:\wince500\platform\smdk2440\drivers\atapi\diskmain.h

  00000			 AREA	 |.text| { |?CheckIntrState@CDisk@@QAAGXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?CheckIntrState@CDisk@@QAAGXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?CheckIntrState@CDisk@@QAAGXZ| } ; comdat associative
|$T32473| DCD	|$L32472|
	DCD	0x40001401
; Function compile flags: /Ogsy
; File d:\wince500\platform\smdk2440\drivers\atapi\atapiio.cpp

  00000			 AREA	 |.text| { |?CheckIntrState@CDisk@@QAAGXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?CheckIntrState@CDisk@@QAAGXZ| PROC	; CDisk::CheckIntrState

; 226  : {

  00000		 |$L32472|
  00000	e92d4010	 stmdb       sp!, {r4, lr}
  00004		 |$M32470|
  00004	e1a04000	 mov         r4, r0

; 227  :     BYTE bReason, bDRQ;
; 228  : 
; 229  :     WaitOnBusy(FALSE);

  00008	e3a01000	 mov         r1, #0
  0000c	eb000000	 bl          |?WaitOnBusy@CDisk@@QAAEH@Z|

; 230  : 
; 231  :     bReason = GetReason() & (ATA_IR_CoD | ATA_IR_IO);

  00010	e5942030	 ldr         r2, [r4, #0x30]
  00014	e5943010	 ldr         r3, [r4, #0x10]
  00018	e0820003	 add         r0, r2, r3
  0001c	eb000000	 bl          READ_PORT_UCHAR

; 232  :     bDRQ = GetAltStatus() & ATA_STATUS_DATA_REQ;

  00020	e5942034	 ldr         r2, [r4, #0x34]
  00024	e5943028	 ldr         r3, [r4, #0x28]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -