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

📄 cdio.cod

📁 PXA270的BSP
💻 COD
📖 第 1 页 / 共 5 页
字号:
  00204	e12fff13	 bx          r3
  00208	e2544001	 subs        r4, r4, #1
  0020c	1afffff8	 bne         |$L33029|

; 483  : {

  00210	ea000000	 b           |$L33030|
  00214		 |$L33739|
  00214	e59d5000	 ldr         r5, [sp]
  00218		 |$L33030|

; 580  :             dwTransferCount-=2 ;          
; 581  :         }
; 582  :         if (pdwBytesRead)

  00218	e3550000	 cmp         r5, #0

; 583  :             *pdwBytesRead = dwReadCount;

  0021c	1585b000	 strne       r11, [r5]

; 584  :         if (!dwSgLeft)

  00220	e3590000	 cmp         r9, #0
  00224	1affff9f	 bne         |$L33007|
  00228		 |$L33722|

; 585  :             break;
; 586  :     }
; 587  : 
; 588  :     return TRUE;

  00228	e3a00001	 mov         r0, #1
  0022c		 |$L32994|

; 589  : } 

  0022c	e28dd004	 add         sp, sp, #4
  00230	e8bd4ff0	 ldmia       sp!, {r4 - r11, lr}
  00234	e12fff1e	 bx          lr
  00238		 |$L33721|

; 539  :         {
; 540  :             DEBUGMSG( ZONE_IO | ZONE_ERROR | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData Failed at WaitForDRQ Status=%02X Error=%02X Deivce=%ld\r\n"), GetAltStatus(), GetError(), m_dwDeviceId));
; 541  :             return(FALSE);

  00238	e3a00000	 mov         r0, #0
  0023c	eafffffa	 b           |$L32994|
  00240		 |$L33745|
  00240	b6a000a0	 DCD         0xb6a000a0
  00244	b6a00080	 DCD         0xb6a00080
  00248	b6b000c0	 DCD         0xb6b000c0
  0024c		 |$M33741|

			 ENDP  ; |?AtapiReceiveData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z|, CDisk::AtapiReceiveData

	EXPORT	|?AtapiSendData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z| ; CDisk::AtapiSendData
	IMPORT	|?WriteBuffer@CDisk@@QAAXPAEK@Z|	; CDisk::WriteBuffer
; File c:\wince500\platform\bvdmain\drivers\atapi\diskmain.h

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

  00000			 AREA	 |.pdata$$?AtapiSendData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?AtapiSendData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z| } ; comdat associative
|$T33788| DCD	|$L33787|
	DCD	0x40008a02
; Function compile flags: /Ogsy
; File c:\wince500\platform\bvdmain\drivers\atapi\cdio.cpp

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

  00000		 |?AtapiSendData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z| PROC ; CDisk::AtapiSendData

; 593  : {

  00000		 |$L33787|
  00000	e92d4ff0	 stmdb       sp!, {r4 - r11, lr}
  00004	e24dd00c	 sub         sp, sp, #0xC
  00008		 |$M33785|
  00008	e1a09003	 mov         r9, r3
  0000c	e58d9008	 str         r9, [sp, #8]
  00010	e1a0b002	 mov         r11, r2
  00014	e1a07001	 mov         r7, r1
  00018	e1a08000	 mov         r8, r0

; 594  :     DWORD       dwSgLeft = dwSgCount;
; 595  :     DWORD       dwTransferCount;
; 596  :     PSGX_BUF     pCurrentSegment;
; 597  :     DWORD       dwWriteCount = 0;
; 598  :     DWORD       dwThisCount;
; 599  :     BYTE        *pCurrentBuffer=NULL;
; 600  : 
; 601  :     DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Entered SgCount=%ld.\r\n"), dwSgCount));
; 602  : 
; 603  :     pCurrentSegment = pSgBuf;
; 604  : 
; 605  :     m_wNextByte = 0xFFFF; // There is no byte left from the previous transaction.

  0001c	e3a04cff	 mov         r4, #0xFF, 24
  00020	e38440ff	 orr         r4, r4, #0xFF
  00024	e288ec06	 add         lr, r8, #6, 24
  00028	e3a05000	 mov         r5, #0
  0002c	e3a06000	 mov         r6, #0
  00030	e1ce48b0	 strh        r4, [lr, #0x80]
  00034	e58d5000	 str         r5, [sp]
  00038	e58d6004	 str         r6, [sp, #4]
  0003c		 |$L33048|

; 606  :     
; 607  :     for(;;) {   
; 608  :         if (m_fInterruptSupported) {   

  0003c	e598e684	 ldr         lr, [r8, #0x684]
  00040	e35e0000	 cmp         lr, #0
  00044	0a000010	 beq         |$L33056|

; 609  :             // 
; 610  :             //  Waiting for ATA_INTR_READ or ATA_INTR_WRITE  or ATA_INTR_READY
; 611  :             //
; 612  :             if (!WaitForInterrupt(DISK_IO_TIME_OUT)) {

  00048	e598e000	 ldr         lr, [r8]
  0004c	e3a01c4e	 mov         r1, #0x4E, 24
  00050	e3811020	 orr         r1, r1, #0x20
  00054	e59e4014	 ldr         r4, [lr, #0x14]
  00058	e1a00008	 mov         r0, r8
  0005c	e1a0e00f	 mov         lr, pc
  00060	e12fff14	 bx          r4
  00064	e3500000	 cmp         r0, #0
  00068	0a00006a	 beq         |$L33769|

; 613  :                 DEBUGMSG( ZONE_CDROM | ZONE_ERROR, (TEXT("ATAPI:AtapiReceiveData - Wait for ATA_INTR_READ failed (DevId %x) \r\n"), m_dwDeviceId));
; 614  :                 return FALSE;
; 615  :             }
; 616  :             WORD wState = CheckIntrState();

  0006c	e1a00008	 mov         r0, r8
  00070	eb000000	 bl          |?CheckIntrState@CDisk@@QAAGXZ|
  00074	e1a03800	 mov         r3, r0, lsl #16
  00078	e1a03823	 mov         r3, r3, lsr #16

; 617  :             //
; 618  :             // Return Error if not IO Interrupt
; 619  :             //
; 620  :             if (wState ==  ATA_INTR_ERROR)

  0007c	e3530000	 cmp         r3, #0
  00080	0a000064	 beq         |$L33769|

; 621  :             {   
; 622  :                 DEBUGMSG( ZONE_IO | ZONE_ERROR | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Wait for ATA_INTR_READ failed (DevId %x) \r\n"), m_dwDeviceId));
; 623  :                 return FALSE;
; 624  :             
; 625  :             }
; 626  :             if (wState ==  ATA_INTR_READY)

  00084	e3530003	 cmp         r3, #3
  00088	0a00005e	 beq         |$L33770|
  0008c		 |$L33056|

; 627  :             {
; 628  :                 DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData - Exiting with Interrupt Ready signal Device=%ld\r\n"), m_dwDeviceId));
; 629  :                 return TRUE;
; 630  :             }
; 631  :         };
; 632  :         //
; 633  :         // Wait until device is ready for  data transfer.
; 634  :         //
; 635  :         if (!WaitForDRQ()) 

  0008c	e1a00008	 mov         r0, r8
  00090	eb000000	 bl          |?WaitForDRQ@CDisk@@QAAHXZ|
  00094	e3500000	 cmp         r0, #0
  00098	0a00005e	 beq         |$L33769|

; 639  :         }
; 640  :     
; 641  :         //
; 642  :         //  Read Transfer Counter set by Device.
; 643  :         //
; 644  :         dwTransferCount = GetCount();

  0009c	e59f0180	 ldr         r0, [pc, #0x180]
  000a0	eb000000	 bl          READ_PORT_UCHAR
  000a4	e1a04000	 mov         r4, r0
  000a8	e59f0170	 ldr         r0, [pc, #0x170]
  000ac	eb000000	 bl          READ_PORT_UCHAR
  000b0	e0843400	 add         r3, r4, r0, lsl #8
  000b4	e1a0a803	 mov         r10, r3, lsl #16
  000b8	e1a0a82a	 mov         r10, r10, lsr #16

; 645  : 
; 646  :         DEBUGMSG (ZONE_CDROM | ZONE_IO, (TEXT(">>>Read Transfer Count : %x  SG=%x \r\n"),dwTransferCount,dwSgLeft));
; 647  : 
; 648  :         while ((dwSgLeft>0) && (dwTransferCount>0))

  000bc	e35b0000	 cmp         r11, #0
  000c0	0a00004c	 beq         |$L33063|
  000c4		 |$L33062|
  000c4	e35a0000	 cmp         r10, #0
  000c8	0a000049	 beq         |$L33772|

; 649  :         {   
; 650  :             dwThisCount = min(dwTransferCount, pCurrentSegment->sb_len);

  000cc	e5d70004	 ldrb        r0, [r7, #4]
  000d0	e5d73005	 ldrb        r3, [r7, #5]
  000d4	e5d72006	 ldrb        r2, [r7, #6]
  000d8	e5d71007	 ldrb        r1, [r7, #7]
  000dc	e1803403	 orr         r3, r0, r3, lsl #8
  000e0	e1833802	 orr         r3, r3, r2, lsl #16

; 651  :             
; 652  :             if (pCurrentSegment->sb_buf)

  000e4	e5d70000	 ldrb        r0, [r7]
  000e8	e1839c01	 orr         r9, r3, r1, lsl #24
  000ec	e5d73001	 ldrb        r3, [r7, #1]
  000f0	e5d72002	 ldrb        r2, [r7, #2]
  000f4	e5d71003	 ldrb        r1, [r7, #3]
  000f8	e1803403	 orr         r3, r0, r3, lsl #8
  000fc	e15a0009	 cmp         r10, r9
  00100	e1833802	 orr         r3, r3, r2, lsl #16
  00104	31a0900a	 movcc       r9, r10
  00108	e1933c01	 orrs        r3, r3, r1, lsl #24
  0010c	0a00000b	 beq         |$L33064|

; 653  :                 pCurrentBuffer = (LPBYTE)MapPtrToProcess(pCurrentSegment->sb_buf, GetCallerProcess());

  00110	eb000000	 bl          GetCallerProcess
  00114	e5d71000	 ldrb        r1, [r7]
  00118	e5d73001	 ldrb        r3, [r7, #1]
  0011c	e5d72002	 ldrb        r2, [r7, #2]
  00120	e5d7e003	 ldrb        lr, [r7, #3]
  00124	e1813403	 orr         r3, r1, r3, lsl #8
  00128	e1833802	 orr         r3, r3, r2, lsl #16
  0012c	e1a01000	 mov         r1, r0
  00130	e1830c0e	 orr         r0, r3, lr, lsl #24
  00134	eb000000	 bl          MapPtrToProcess
  00138	e1a06000	 mov         r6, r0
  0013c	e58d6004	 str         r6, [sp, #4]
  00140		 |$L33064|

; 654  :         
; 655  :             if (pCurrentBuffer)

  00140	e3560000	 cmp         r6, #0
  00144	0a000006	 beq         |$L33066|

; 656  :             {
; 657  :                 WriteBuffer(pCurrentBuffer,dwThisCount);

  00148	e1a02009	 mov         r2, r9
  0014c	e1a01006	 mov         r1, r6
  00150	e1a00008	 mov         r0, r8
  00154	eb000000	 bl          |?WriteBuffer@CDisk@@QAAXPAEK@Z|

; 658  :                 dwTransferCount -= dwThisCount;
; 659  :                 dwWriteCount += dwThisCount;

  00158	e0855009	 add         r5, r5, r9
  0015c	e58d5000	 str         r5, [sp]
  00160	e04aa009	 sub         r10, r10, r9
  00164		 |$L33066|

; 660  :             }
; 661  :             pCurrentSegment->sb_len -=dwThisCount;

  00164	e5d7e004	 ldrb        lr, [r7, #4]
  00168	e5d72005	 ldrb        r2, [r7, #5]

; 662  :             pCurrentSegment->sb_buf +=dwThisCount;

  0016c	e5d71000	 ldrb        r1, [r7]
  00170	e5d73001	 ldrb        r3, [r7, #1]
  00174	e5d75006	 ldrb        r5, [r7, #6]
  00178	e5d76002	 ldrb        r6, [r7, #2]
  0017c	e5d74003	 ldrb        r4, [r7, #3]
  00180	e18e2402	 orr         r2, lr, r2, lsl #8
  00184	e5d7e007	 ldrb        lr, [r7, #7]
  00188	e1811403	 orr         r1, r1, r3, lsl #8
  0018c	e1823805	 orr         r3, r2, r5, lsl #16
  00190	e1812806	 orr         r2, r1, r6, lsl #16
  00194	e1833c0e	 orr         r3, r3, lr, lsl #24
  00198	e1822c04	 orr         r2, r2, r4, lsl #24
  0019c	e0535009	 subs        r5, r3, r9
  001a0	e0896002	 add         r6, r9, r2
  001a4	e1a03425	 mov         r3, r5, lsr #8
  001a8	e1a02825	 mov         r2, r5, lsr #16
  001ac	e1a01c25	 mov         r1, r5, lsr #24
  001b0	e1a00426	 mov         r0, r6, lsr #8
  001b4	e1a0e826	 mov         lr, r6, lsr #16
  001b8	e1a04c26	 mov         r4, r6, lsr #24
  001bc	e5c73005	 strb        r3, [r7, #5]
  001c0	e5c72006	 strb        r2, [r7, #6]
  001c4	e5c71007	 strb        r1, [r7, #7]
  001c8	e5c70001	 strb        r0, [r7, #1]
  001cc	e5c7e002	 strb        lr, [r7, #2]
  001d0	e5c74003	 strb        r4, [r7, #3]
  001d4	e5c75004	 strb        r5, [r7, #4]
  001d8	e5c76000	 strb        r6, [r7]

; 663  : 
; 664  :             if (pCurrentSegment->sb_len == 0)
; 665  :             {
; 666  :                 // Go to the next SG
; 667  :                 dwSgLeft--;           

  001dc	024bb001	 subeq       r11, r11, #1
  001e0	e59d5000	 ldr         r5, [sp]
  001e4	e59d6004	 ldr         r6, [sp, #4]

; 668  :                 pCurrentSegment++;

  001e8	02877008	 addeq       r7, r7, #8
  001ec	e35b0000	 cmp         r11, #0
  001f0	1affffb3	 bne         |$L33062|
  001f4		 |$L33772|

; 593  : {

  001f4	e59d9008	 ldr         r9, [sp, #8]
  001f8		 |$L33063|

; 669  :             }
; 670  : 
; 671  :         } // End of while loop
; 672  :     
; 673  :         if (pdwBytesWrite)

  001f8	e3590000	 cmp         r9, #0

; 674  :             *pdwBytesWrite = dwWriteCount;

  001fc	15895000	 strne       r5, [r9]

; 675  :         if (!dwSgLeft)

  00200	e35b0000	 cmp         r11, #0
  00204	1affff8c	 bne         |$L33048|
  00208		 |$L33770|

; 676  :             break;
; 677  :     }
; 678  :     return TRUE;

  00208	e3a00001	 mov         r0, #1
  0020c		 |$L33039|

; 679  : } 

  0020c	e28dd00c	 add         sp, sp, #0xC
  00210	e8bd4ff0	 ldmia       sp!, {r4 - r11, lr}
  00214	e12fff1e	 bx          lr
  00218		 |$L33769|

; 636  :         {
; 637  :             DEBUGMSG( ZONE_IO | ZONE_ERROR | ZONE_CDROM, (TEXT("ATAPI:AtapiReceiveData Failed at WaitForDRQ Status=%02X Error=%02X Deivce=%ld\r\n"), GetAltStatus(), GetError(), m_dwDeviceId));
; 638  :             return(FALSE);

  00218	e3a00000	 mov         r0, #0
  0021c	eafffffa	 b           |$L33039|
  00220		 |$L33790|
  00220	b6a000a0	 DCD         0xb6a000a0
  00224	b6a00080	 DCD         0xb6a00080
  00228		 |$M33786|

			 ENDP  ; |?AtapiSendData@CDisk@@QAAHPAU_SGX_BUF@@KPAK@Z|, CDisk::AtapiSendData

	EXPORT	|?AtapiIsUnitReady@CDisk@@QAAHPAU_IOREQ@@@Z| ; CDisk::AtapiIsUnitReady
; File c:\wince500\platform\bvdmain\drivers\atapi\diskmain.h

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

  00000			 AREA	 |.pdata$$?AtapiIsUnitReady@CDisk@@QAAHPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?AtapiIsUnitReady@CDisk@@QAAHPAU_IOREQ@@@Z| } ; comdat associative
|$T33804| DCD	|$L33803|
	DCD	0x40003802
; Function compile flags: /Ogsy
; File c:\wince500\platform\bvdmain\drivers\atapi\cdio.cpp

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

  00000		 |?AtapiIsUnitReady@CDisk@@QAAHPA

⌨️ 快捷键说明

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