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

📄 atapiio.cod

📁 PXA270的BSP
💻 COD
📖 第 1 页 / 共 4 页
字号:
; 204  :     
; 205  : }

  0006c	18bd40f0	 ldmneia     sp!, {r4 - r7, lr}
  00070	112fff1e	 bxne        lr
  00074		 |$L33251|

; 195  :                 DEBUGMSG(ZONE_IO, (TEXT("ATAPI: ATA_STATUS_DATA_REQ J=: %x \r\n"),j));
; 196  :                 return TRUE;

  00074	e3a00001	 mov         r0, #1

; 204  :     
; 205  : }

  00078	e8bd40f0	 ldmia       sp!, {r4 - r7, lr}
  0007c	e12fff1e	 bx          lr
  00080		 |$L33265|
  00080	b6b000c0	 DCD         0xb6b000c0
  00084		 |$M33261|

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

	EXPORT	|?CheckIntrState@CDisk@@QAAGXZ|		; CDisk::CheckIntrState
; File d:\wince500\platform\bvdmain\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
|$T33281| DCD	|$L33280|
	DCD	0x40001201
; Function compile flags: /Ogsy
; File d:\wince500\platform\bvdmain\drivers\atapi\atapiio.cpp

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

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

; 232  : {

  00000		 |$L33280|
  00000	e92d4010	 stmdb       sp!, {r4, lr}
  00004		 |$M33278|

; 233  :     BYTE    bReason, bDRQ;
; 234  : 
; 235  :     WaitOnBusy(FALSE);   

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

; 236  : 
; 237  :     bReason = GetReason() & (ATA_IR_CoD | ATA_IR_IO);

  0000c	e59f0030	 ldr         r0, [pc, #0x30]
  00010	eb000000	 bl          READ_PORT_UCHAR
  00014	e1a03000	 mov         r3, r0

; 238  : 
; 239  :     bDRQ = GetAltStatus() & ATA_STATUS_DATA_REQ;

  00018	e59f0020	 ldr         r0, [pc, #0x20]
  0001c	e2034003	 and         r4, r3, #3
  00020	eb000000	 bl          READ_PORT_UCHAR

; 240  : 
; 241  : 
; 242  :     if (bDRQ)

  00024	e3100008	 tst         r0, #8

; 243  :         bReason |=4;

  00028	13844004	 orrne       r4, r4, #4

; 244  : 
; 245  :     if (bReason < 3)

  0002c	e3540003	 cmp         r4, #3

; 246  :         return((WORD) ATA_INTR_READY);

  00030	33a04003	 movcc       r4, #3
  00034	e1a00004	 mov         r0, r4

; 247  : 
; 248  :     return ((WORD) bReason);
; 249  : }

  00038	e8bd4010	 ldmia       sp!, {r4, lr}
  0003c	e12fff1e	 bx          lr
  00040		 |$L33283|
  00040	b6b000c0	 DCD         0xb6b000c0
  00044	b6a00040	 DCD         0xb6a00040
  00048		 |$M33279|

			 ENDP  ; |?CheckIntrState@CDisk@@QAAGXZ|, CDisk::CheckIntrState

	EXPORT	|?ReadBuffer@CDisk@@QAAXPAEK@Z|		; CDisk::ReadBuffer

  00000			 AREA	 |.text| { |?ReadBuffer@CDisk@@QAAXPAEK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?ReadBuffer@CDisk@@QAAXPAEK@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?ReadBuffer@CDisk@@QAAXPAEK@Z| } ; comdat associative
|$T33296| DCD	|$L33295|
	DCD	0x40003c02
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?ReadBuffer@CDisk@@QAAXPAEK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?ReadBuffer@CDisk@@QAAXPAEK@Z| PROC	; CDisk::ReadBuffer

; 258  : {

  00000		 |$L33295|
  00000	e92d40f0	 stmdb       sp!, {r4 - r7, lr}
  00004	e24dd004	 sub         sp, sp, #4
  00008		 |$M33293|
  00008	e1b04002	 movs        r4, r2
  0000c	e1a05001	 mov         r5, r1
  00010	e1a06000	 mov         r6, r0

; 259  :     //
; 260  :     //  This is very unefficient way to solve word allignment violation.
; 261  : 
; 262  :     union {
; 263  :         WORD us;
; 264  :         BYTE  uc[2];
; 265  :     }unisc;
; 266  : 
; 267  : 
; 268  :     if (dwCount == 0)

  00014	0a000032	 beq         |$L32914|

; 269  :         return;
; 270  :         
; 271  :     DEBUGMSG( ZONE_IO, (TEXT("ATAPI:ReadBuffer Entry Status: %x\r\n"),GetAltStatus()));
; 272  : 
; 273  :     // Check whether required byte was already read in previous transaction!
; 274  :     // Value -1 in m_wNextByte means - no byte was read.
; 275  : 
; 276  :     if (m_wNextByte != 0xFFFF) {

  00018	e2863c06	 add         r3, r6, #6, 24
  0001c	e1d328b0	 ldrh        r2, [r3, #0x80]
  00020	e3a03cff	 mov         r3, #0xFF, 24
  00024	e38330ff	 orr         r3, r3, #0xFF
  00028	e1520003	 cmp         r2, r3

; 277  :         DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:ReadBuffer - Unaligned buffer on prevous read!!!\r\n")));
; 278  :         // Update the first byte.
; 279  :         *pBuffer++ = (BYTE) m_wNextByte;

  0002c	14c52001	 strneb      r2, [r5], #1

; 280  :         dwCount--; 

  00030	12444001	 subne       r4, r4, #1

; 281  :     }
; 282  :     //
; 283  :     // Check allignemt of pBuffer
; 284  :     //
; 285  :     if ((DWORD) pBuffer & 1) {

  00034	e3150001	 tst         r5, #1
  00038	0a000012	 beq         |$L32905|

; 286  :         DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:ReadBuffer - Unaligned buffer !!!\r\n")));
; 287  :         while (dwCount> 1) 

  0003c	e3540001	 cmp         r4, #1
  00040	9a00001b	 bls         |$L33292|
  00044	e2443002	 sub         r3, r4, #2
  00048	e1a030a3	 mov         r3, r3, lsr #1
  0004c	e2837001	 add         r7, r3, #1
  00050		 |$L32908|

; 288  :         {
; 289  :             unisc.us = ReadWord();

  00050	e5963000	 ldr         r3, [r6]
  00054	e1a00006	 mov         r0, r6
  00058	e5933048	 ldr         r3, [r3, #0x48]
  0005c	e1a0e00f	 mov         lr, pc
  00060	e12fff13	 bx          r3
  00064	e1cd00b0	 strh        r0, [sp]

; 290  :             *pBuffer++= unisc.uc[0];
; 291  :             *pBuffer++= unisc.uc[1];
; 292  :             dwCount-=2;

  00068	e2444002	 sub         r4, r4, #2
  0006c	e5dd3000	 ldrb        r3, [sp]
  00070	e5dd2001	 ldrb        r2, [sp, #1]
  00074	e2577001	 subs        r7, r7, #1
  00078	e4c53001	 strb        r3, [r5], #1
  0007c	e4c52001	 strb        r2, [r5], #1
  00080	1afffff2	 bne         |$L32908|

; 293  :         }
; 294  :     } else {

  00084	ea000009	 b           |$L32910|
  00088		 |$L32905|

; 295  :         ReadWordBuffer((PWORD)pBuffer,(DWORD)(dwCount)/sizeof(SHORT));

  00088	e5963000	 ldr         r3, [r6]
  0008c	e1a020a4	 mov         r2, r4, lsr #1
  00090	e1a01005	 mov         r1, r5
  00094	e5933038	 ldr         r3, [r3, #0x38]
  00098	e1a00006	 mov         r0, r6
  0009c	e1a0e00f	 mov         lr, pc
  000a0	e12fff13	 bx          r3

; 296  :         pBuffer += dwCount;

  000a4	e0853004	 add         r3, r5, r4

; 297  :         dwCount &= 1;       // If 1, we need to read the next byte yet

  000a8	e2044001	 and         r4, r4, #1

; 298  :         pBuffer -= dwCount; // Adjust pBuffer if its value is odd

  000ac	e0435004	 sub         r5, r3, r4
  000b0		 |$L32910|

; 299  :     }
; 300  :     //
; 301  :     //  Also we have to read one Word event if need only one byte.
; 302  :     //  Save unused byte and use it as the first byte in the following SG buffer.
; 303  :         
; 304  :     if (dwCount == 1) {

  000b0	e3540001	 cmp         r4, #1
  000b4		 |$L33292|
  000b4	1a00000a	 bne         |$L32914|

; 305  :         DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:ReadBuffer - reading one word!!!\r\n")));
; 306  :         unisc.us = ReadWord();
; 307  :         *pBuffer=   unisc.uc[0];
; 308  :         m_wNextByte = (WORD)unisc.uc[1];    // Save byte for the next SG if 

  000b8	e1a04006	 mov         r4, r6
  000bc	e4943600	 ldr         r3, [r4], #0x600
  000c0	e1a00006	 mov         r0, r6
  000c4	e5933048	 ldr         r3, [r3, #0x48]
  000c8	e1a0e00f	 mov         lr, pc
  000cc	e12fff13	 bx          r3
  000d0	e1cd00b0	 strh        r0, [sp]
  000d4	e5dd3000	 ldrb        r3, [sp]
  000d8	e5dd2001	 ldrb        r2, [sp, #1]
  000dc	e5c53000	 strb        r3, [r5]
  000e0	e1c428b0	 strh        r2, [r4, #0x80]
  000e4		 |$L32914|

; 309  :     }
; 310  : 
; 311  :     DEBUGMSG( ZONE_IO, (TEXT("ATAPI:ReadBuffer Exit Status: %x\r\n"),GetAltStatus()));
; 312  : }

  000e4	e28dd004	 add         sp, sp, #4
  000e8	e8bd40f0	 ldmia       sp!, {r4 - r7, lr}
  000ec	e12fff1e	 bx          lr
  000f0		 |$M33294|

			 ENDP  ; |?ReadBuffer@CDisk@@QAAXPAEK@Z|, CDisk::ReadBuffer

	EXPORT	|?WriteBuffer@CDisk@@QAAXPAEK@Z|	; CDisk::WriteBuffer

  00000			 AREA	 |.text| { |?WriteBuffer@CDisk@@QAAXPAEK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?WriteBuffer@CDisk@@QAAXPAEK@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?WriteBuffer@CDisk@@QAAXPAEK@Z| } ; comdat associative
|$T33310| DCD	|$L33309|
	DCD	0x40003b02
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?WriteBuffer@CDisk@@QAAXPAEK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?WriteBuffer@CDisk@@QAAXPAEK@Z| PROC	; CDisk::WriteBuffer

; 321  : {

  00000		 |$L33309|
  00000	e92d40f0	 stmdb       sp!, {r4 - r7, lr}
  00004	e24dd004	 sub         sp, sp, #4
  00008		 |$M33307|
  00008	e1b04002	 movs        r4, r2
  0000c	e1a05001	 mov         r5, r1
  00010	e1a06000	 mov         r6, r0

; 322  :     //
; 323  :     //  This is very inefficient way to solve word allignment violation.
; 324  :     union {
; 325  :         WORD us;
; 326  :         BYTE  uc[2];
; 327  :     }unisc;
; 328  :     
; 329  :     if (dwCount == 0)

  00014	0a000031	 beq         |$L32948|

; 330  :         return;
; 331  :         
; 332  :     DEBUGMSG( ZONE_IO, (TEXT("ATAPI:WriteBuffer Entry Status: %x\r\n"),GetAltStatus()));
; 333  : 
; 334  :     // Check whether one byte left from the  previous transaction!
; 335  :     // Value -1 in m_wNextByte means - no byteleft.
; 336  : 
; 337  :     if (m_wNextByte != 0xFFFF) {

  00018	e2863c06	 add         r3, r6, #6, 24
  0001c	e1d328b0	 ldrh        r2, [r3, #0x80]
  00020	e3a03cff	 mov         r3, #0xFF, 24
  00024	e38330ff	 orr         r3, r3, #0xFF
  00028	e1520003	 cmp         r2, r3
  0002c	0a000008	 beq         |$L32935|

; 338  :         // Update the first byte
; 339  :         DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:ReadBuffer - Unaligned buffer on prevous read!!!\r\n")));
; 340  :         unisc.uc[0] = (BYTE) m_wNextByte;
; 341  :         unisc.uc[1] = *pBuffer++;

  00030	e4d53001	 ldrb        r3, [r5], #1

; 342  :         dwCount--; 
; 343  :         WriteWord(unisc.us);

  00034	e596e000	 ldr         lr, [r6]
  00038	e5cd2000	 strb        r2, [sp]
  0003c	e2444001	 sub         r4, r4, #1
  00040	e5cd3001	 strb        r3, [sp, #1]
  00044	e59e3044	 ldr         r3, [lr, #0x44]
  00048	e1dd10b0	 ldrh        r1, [sp]
  0004c	e1a0e00f	 mov         lr, pc
  00050	e12fff13	 bx          r3
  00054		 |$L32935|

; 344  :     }
; 345  :     //
; 346  :     // Check allignemt of pBuffer
; 347  :     //
; 348  :     if ((DWORD) pBuffer & 1) {

  00054	e3150001	 tst         r5, #1
  00058	0a000012	 beq         |$L32939|

; 349  :         DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:ReadBuffer - Unaligned buffer !!!\r\n")));
; 350  :         while (dwCount> 1)  {

  0005c	e3540001	 cmp         r4, #1
  00060	9a00001b	 bls         |$L33306|
  00064	e2443002	 sub         r3, r4, #2
  00068	e1a030a3	 mov         r3, r3, lsr #1
  0006c	e2837001	 add         r7, r3, #1
  00070		 |$L32942|

; 351  :             unisc.uc[0] = *pBuffer++;

  00070	e4d52001	 ldrb        r2, [r5], #1

; 352  :             unisc.uc[1] = *pBuffer++;
; 353  :             WriteWord(unisc.us);

  00074	e5961000	 ldr         r1, [r6]
  00078	e1a00006	 mov         r0, r6
  0007c	e4d53001	 ldrb        r3, [r5], #1
  00080	e5cd2000	 strb        r2, [sp]
  00084	e5912044	 ldr         r2, [r1, #0x44]
  00088	e5cd3001	 strb        r3, [sp, #1]
  0008c	e1dd10b0	 ldrh        r1, [sp]
  00090	e1a0e00f	 mov         lr, pc
  00094	e12fff12	 bx          r2

; 354  :             dwCount-=2;

  00098	e2444002	 sub         r4, r4, #2
  0009c	e2577001	 subs        r7, r7, #1
  000a0	1afffff2	 bne         |$L32942|

; 355  :         }
; 356  :     } else {

  000a4	ea000009	 b           |$L32944|
  000a8		 |$L32939|

; 357  :         WriteWordBuffer((PWORD)pBuffer,(DWORD)(dwCount)/sizeof(SHORT));

  000a8	e5963000	 ldr         r3, [r6]
  000ac	e1a020a4	 mov         r2, r4, lsr #1
  000b0	e1a01005	 mov         r1, r5
  000b4	e593303c	 ldr         r3, [r3, #0x3C]
  000b8	e1a00006	 mov         r0, r6
  000bc	e1a0e00f	 mov         lr, pc
  000c0	e12fff13	 bx          r3

; 358  :         pBuffer += dwCount;

  000c4	e0853004	 add         r3, r5, r4

; 359  :         dwCount &= 1;       // If 1, we need to write the next byte yet

  000c8	e2044001	 and         r4, r4, #1

; 360  :         pBuffer -= dwCount; // Adjust pBuffer if its value is odd

  000cc	e0435004	 sub         r5, r3, r4
  000d0		 |$L32944|

; 361  : 
; 362  :     }
; 363  :     //
; 364  :     //  Also we have to transfer one Word event if need only one byte.
; 365  :     //  Save unused byte and use it as the first byte in the following SG buffer.
; 366  :         
; 367  :     if (dwCount == 1) {

  000d0	e3540001	 cmp         r4, #1
  000d4		 |$L33306|

; 368  :         DEBUGMSG( ZONE_WARNING, (TEXT("ATAPI:ReadBuffer - reading one word!!!\r\n")));
; 369  :         m_wNextByte = (WORD) *pBuffer;  // Save byte for the next SG if 

  000d4	05d52000	 ldreqb      r2, [r5]
  000d8	02863c06	 addeq       r3, r6, #6, 24
  000dc	01c328b0	 streqh      r2, [r3, #0x80]
  000e0		 |$L32948|

; 370  :     }
; 371  :     
; 372  :     DEBUGMSG( ZONE_IO, (TEXT("ATAPI:WriteBuffer Exit Status: %x\r\n"),GetAltStatus()));
; 373  : }

  000e0	e28dd004	 add         sp, sp, #4
  000e4	e8bd40f0	 ldmia       sp!, {r4 - r7, lr}
  000e8	e12fff1e	 bx          lr
  000ec		 |$M33308|

			 ENDP  ; |?WriteBuffer@CDisk@@QAAXPAEK@Z|, CDisk::WriteBuffer

	EXPORT	|?SetTransferMode@CDisk@@QAAHE@Z|	; CDisk::SetTransferMode
	IMPORT	|?ResetController@CDisk@@QAAHH@Z|	; CDisk::ResetController
; File d:\wince500\platform\bvdmain\drivers\atapi\diskmain.h

  00000			 AREA	 |.text| { |?SetTransferMode@CDisk@@QAAHE@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?SetTransferMode@CDisk@@QAAHE@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?SetTransferMode@CDisk@@QAAHE@Z| } ; comdat associative
|$T33377| DCD	|$L33376|
	DCD	0x40006001
; Function compile flags: /Ogsy
; File d:\wince500\platform\bvdmain\drivers\atapi\atapiio.cpp

⌨️ 快捷键说明

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