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

📄 cdio.cod

📁 PXA270的BSP
💻 COD
📖 第 1 页 / 共 5 页
字号:

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

; 577  :     {

  00000		 |$L33612|
  00000		 |$M33610|

; 578  :         return m_Id.GeneralConfiguration & 0x0003 ? 16 : 12;

  00000	e5d02444	 ldrb        r2, [r0, #0x444]
  00004	e5d03445	 ldrb        r3, [r0, #0x445]
  00008	e1823403	 orr         r3, r2, r3, lsl #8
  0000c	e3130003	 tst         r3, #3
  00010	13a03010	 movne       r3, #0x10
  00014	03a0300c	 moveq       r3, #0xC
  00018	e1a00803	 mov         r0, r3, lsl #16
  0001c	e1a00820	 mov         r0, r0, lsr #16

; 579  :     }

  00020	e12fff1e	 bx          lr
  00024		 |$M33611|

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

	EXPORT	|?SetupCdRomRead@CDisk@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| ; CDisk::SetupCdRomRead
	IMPORT	|memset|
; File c:\wince500\platform\bvdmain\drivers\atapi\cdio.cpp

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

  00000			 AREA	 |.pdata$$?SetupCdRomRead@CDisk@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?SetupCdRomRead@CDisk@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| } ; comdat associative
|$T33631| DCD	|$L33630|
	DCD	0x40003303
; Function compile flags: /Ogsy

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

  00000		 |?SetupCdRomRead@CDisk@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z| PROC ; CDisk::SetupCdRomRead

; 168  : {

  00000		 |$L33630|
  00000	e1a0c00d	 mov         r12, sp
  00004	e92d0004	 stmdb       sp!, {r2}
  00008	e92d53f0	 stmdb       sp!, {r4 - r9, r12, lr}
  0000c		 |$M33628|
  0000c	e1a07003	 mov         r7, r3
  00010	e1a08001	 mov         r8, r1

; 169  :     BOOL fIsDVD = (m_dwDeviceFlags & DFLAGS_DEVICE_ISDVD);	
; 170  : 
; 171  :     memset( pCmdPkt, 0, sizeof(ATAPI_COMMAND_PACKET));

  00014	e59d6024	 ldr         r6, [sp, #0x24]
  00018	e5905004	 ldr         r5, [r0, #4]
  0001c	e3a02014	 mov         r2, #0x14
  00020	e1a00006	 mov         r0, r6
  00024	e3a01000	 mov         r1, #0
  00028	eb000000	 bl          memset

; 172  : 
; 173  : 
; 174  :     /**** Atapi Packet *****
; 175  :     Byte 0 - Cmd/OpCode
; 176  :     Byte 1 - N/A
; 177  :     Byte 2 - Logical Block (MSB)
; 178  :     Byte 2 - Logical Block 
; 179  :     Byte 2 - Logical Block 
; 180  :     Byte 2 - Logical Block (LSB)
; 181  :     Byte 6 - Reserved
; 182  :     Byte 7 - DataLength (MSB)
; 183  :     Byte 8 - DataLength (LSB)
; 184  :     Byte 9 - Control Byte
; 185  :     ****** Atapi Packet ****/
; 186  :     pCmdPkt->Byte_1 = 0x00;
; 187  :     pCmdPkt->Byte_2 = LBA_MSB(&dwLBAAddr);
; 188  :     pCmdPkt->Byte_3 = LBA_3rdLSB(&dwLBAAddr);
; 189  :     pCmdPkt->Byte_4 = LBA_2ndLSB(&dwLBAAddr);

  0002c	e5dde021	 ldrb        lr, [sp, #0x21]
  00030	e5dd2023	 ldrb        r2, [sp, #0x23]
  00034	e5dd0022	 ldrb        r0, [sp, #0x22]

; 190  :     pCmdPkt->Byte_5 = LBA_LSB(&dwLBAAddr);

  00038	e5dd4020	 ldrb        r4, [sp, #0x20]
  0003c	e3a09000	 mov         r9, #0
  00040	e5c6e004	 strb        lr, [r6, #4]
  00044	e5c62002	 strb        r2, [r6, #2]
  00048	e5c60003	 strb        r0, [r6, #3]
  0004c	e5c64005	 strb        r4, [r6, #5]
  00050	e5c69001	 strb        r9, [r6, #1]

; 191  :     if (fIsDVD && !bRawMode) {

  00054	e3150040	 tst         r5, #0x40
  00058	0a00000b	 beq         |$L32886|
  0005c	e3580000	 cmp         r8, #0
  00060	1a00000b	 bne         |$L33619|

; 192  :         pCmdPkt->Opcode = ATAPI_PACKET_CMD_READ_12;

  00064	e3a000a8	 mov         r0, #0xA8

; 193  :         pCmdPkt->Byte_6 = (BYTE)( dwTransferLength >> 24);

  00068	e1a03c27	 mov         r3, r7, lsr #24

; 194  :         pCmdPkt->Byte_7 = (BYTE)( (dwTransferLength & 0x00ff0000) >> 16);

  0006c	e1a02827	 mov         r2, r7, lsr #16

; 195  :         pCmdPkt->Byte_8 = (BYTE)( (dwTransferLength & 0x0000ff00) >> 8);

  00070	e1a01427	 mov         r1, r7, lsr #8
  00074	e5c60000	 strb        r0, [r6]
  00078	e5c63006	 strb        r3, [r6, #6]
  0007c	e5c62007	 strb        r2, [r6, #7]
  00080	e5c61008	 strb        r1, [r6, #8]

; 196  :         pCmdPkt->Byte_9 = (BYTE)( dwTransferLength);

  00084	e5c67009	 strb        r7, [r6, #9]

; 197  :     } else {

  00088	ea00000b	 b           |$L32891|
  0008c		 |$L32886|

; 198  :         pCmdPkt->Opcode = bRawMode ? ATAPI_PACKET_CMD_READ_CD : ATAPI_PACKET_CMD_READ;

  0008c	e3580000	 cmp         r8, #0
  00090	0a000001	 beq         |$L33617|
  00094		 |$L33619|
  00094	e3a020be	 mov         r2, #0xBE
  00098	ea000000	 b           |$L33618|
  0009c		 |$L33617|
  0009c	e3a02028	 mov         r2, #0x28
  000a0		 |$L33618|

; 199  :         pCmdPkt->Byte_6 = 0x00; // Reserved
; 200  :         pCmdPkt->Byte_7 = (BYTE)( (dwTransferLength & 0x0000ff00) >> 8);

  000a0	e1a03427	 mov         r3, r7, lsr #8

; 201  :         pCmdPkt->Byte_8 = (BYTE)( dwTransferLength);
; 202  :         pCmdPkt->Byte_9 = 0x10;

  000a4	e3a01010	 mov         r1, #0x10
  000a8	e5c63007	 strb        r3, [r6, #7]
  000ac	e5c61009	 strb        r1, [r6, #9]
  000b0	e5c62000	 strb        r2, [r6]
  000b4	e5c69006	 strb        r9, [r6, #6]
  000b8	e5c67008	 strb        r7, [r6, #8]
  000bc		 |$L32891|

; 203  :     }
; 204  : 
; 205  :     pCmdPkt->Byte_10 = 0;          

  000bc	e5c6900a	 strb        r9, [r6, #0xA]

; 206  :     return ERROR_SUCCESS;

  000c0	e3a00000	 mov         r0, #0

; 207  : }

  000c4	e89d63f0	 ldmia       sp, {r4 - r9, sp, lr}
  000c8	e12fff1e	 bx          lr
  000cc		 |$M33629|

			 ENDP  ; |?SetupCdRomRead@CDisk@@QAAKHKKPAU_ATAPI_COMMAND_PACKET@@@Z|, CDisk::SetupCdRomRead

	EXPORT	|?AtapiSendCommand@CDisk@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| ; CDisk::AtapiSendCommand
	IMPORT	|?WaitOnBusy@CDisk@@QAAEH@Z|		; CDisk::WaitOnBusy
	IMPORT	|?WaitForDRQ@CDisk@@QAAHXZ|		; CDisk::WaitForDRQ
	IMPORT	|?WaitForDisc@CDisk@@QAAHEKK@Z|		; CDisk::WaitForDisc
; File c:\wince500\platform\bvdmain\drivers\atapi\diskmain.h

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

  00000			 AREA	 |.pdata$$?AtapiSendCommand@CDisk@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?AtapiSendCommand@CDisk@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| } ; comdat associative
|$T33691| DCD	|$L33690|
	DCD	0x40006d01
; Function compile flags: /Ogsy
; File c:\wince500\platform\bvdmain\drivers\atapi\cdio.cpp

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

  00000		 |?AtapiSendCommand@CDisk@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| PROC ; CDisk::AtapiSendCommand

; 403  : {

  00000		 |$L33690|
  00000	e92d40f0	 stmdb       sp!, {r4 - r7, lr}
  00004		 |$M33688|
  00004	e1a06003	 mov         r6, r3
  00008	e1a05002	 mov         r5, r2
  0000c	e1a07001	 mov         r7, r1
  00010	e1a04000	 mov         r4, r0

; 404  :     // Set the Drive/Head registers 
; 405  :     SelectDevice();

  00014	eb000000	 bl          |?SelectDevice@CDisk@@QAAXXZ|

; 406  :     GetBaseStatus();

  00018	e59f0190	 ldr         r0, [pc, #0x190]
  0001c	eb000000	 bl          READ_PORT_UCHAR

; 407  : 
; 408  :     SelectDevice();

  00020	e1a00004	 mov         r0, r4
  00024	eb000000	 bl          |?SelectDevice@CDisk@@QAAXXZ|

; 409  :      if (WaitOnBusy(FALSE))

  00028	e3a01000	 mov         r1, #0
  0002c	e1a00004	 mov         r0, r4
  00030	eb000000	 bl          |?WaitOnBusy@CDisk@@QAAEH@Z|
  00034	e3500000	 cmp         r0, #0
  00038	0a000004	 beq         |$L32977|

; 410  :      {  
; 411  :          if (GetError() & ATA_STATUS_ERROR)

  0003c	e3a00183	 mov         r0, #0x83, 2
  00040	e2400696	 sub         r0, r0, #0x96, 12
  00044	eb000000	 bl          READ_PORT_UCHAR
  00048	e3100001	 tst         r0, #1

; 412  :          {      
; 413  :             return FALSE;

  0004c	1a00003e	 bne         |$L33687|
  00050		 |$L32977|

; 414  :          }
; 415  :      }
; 416  : 
; 417  :     WriteSectorCount(0);

  00050	e59f0154	 ldr         r0, [pc, #0x154]
  00054	e3a01000	 mov         r1, #0
  00058	eb000000	 bl          WRITE_PORT_UCHAR

; 418  :     
; 419  :     WriteSectorNumber(0);

  0005c	e59f0144	 ldr         r0, [pc, #0x144]
  00060	e3a01000	 mov         r1, #0
  00064	eb000000	 bl          WRITE_PORT_UCHAR

; 420  : 
; 421  : 
; 422  :     // Set the byte tranfer count       
; 423  :     if (wCount) {
; 424  :         WriteLowCount((BYTE)(0xff & wCount));

  00068	e59f0134	 ldr         r0, [pc, #0x134]
  0006c	e3550000	 cmp         r5, #0
  00070	0a000004	 beq         |$L32978|
  00074	e20510ff	 and         r1, r5, #0xFF
  00078	eb000000	 bl          WRITE_PORT_UCHAR

; 425  :         WriteHighCount((BYTE)(0xff & (wCount >> 8)));    

  0007c	e1a03425	 mov         r3, r5, lsr #8
  00080	e20310ff	 and         r1, r3, #0xFF

; 426  :     } else {

  00084	ea000002	 b           |$L33686|
  00088		 |$L32978|

; 427  :         WriteLowCount(0xFE);

  00088	e3a010fe	 mov         r1, #0xFE
  0008c	eb000000	 bl          WRITE_PORT_UCHAR

; 428  :         WriteHighCount(0xFF);    

  00090	e3a010ff	 mov         r1, #0xFF
  00094		 |$L33686|
  00094	e59f0104	 ldr         r0, [pc, #0x104]
  00098	eb000000	 bl          WRITE_PORT_UCHAR

; 429  :     }
; 430  : 
; 431  :     
; 432  :     // 
; 433  :     // Set PIO or DMA Mode as specified in bFlags. 0 = PIO, 1 = DMA
; 434  :     //
; 435  :     WriteFeature(fDMA ? 0x1 : 0x0);

  0009c	e3560000	 cmp         r6, #0
  000a0	13a03001	 movne       r3, #1
  000a4	03a03000	 moveq       r3, #0
  000a8	e3a00183	 mov         r0, #0x83, 2
  000ac	e20310ff	 and         r1, r3, #0xFF
  000b0	e2400696	 sub         r0, r0, #0x96, 12
  000b4	eb000000	 bl          WRITE_PORT_UCHAR

; 436  : 
; 437  :     WaitForDisc( WAIT_TYPE_NOT_BUSY, 20);

  000b8	e3a03000	 mov         r3, #0
  000bc	e3a02014	 mov         r2, #0x14
  000c0	e3a01002	 mov         r1, #2
  000c4	e1a00004	 mov         r0, r4
  000c8	eb000000	 bl          |?WaitForDisc@CDisk@@QAAHEKK@Z|

; 438  : 
; 439  :     // Write ATAPI into  command register
; 440  : 
; 441  :     SelectDevice();

  000cc	e1a00004	 mov         r0, r4
  000d0	eb000000	 bl          |?SelectDevice@CDisk@@QAAXXZ|

; 442  :     
; 443  :     WriteCommand(ATAPI_CMD_COMMAND); 

  000d4	e3a010a0	 mov         r1, #0xA0
  000d8	e1a00004	 mov         r0, r4
  000dc	eb000000	 bl          |?WriteCommand@CDisk@@QAAXE@Z|

; 444  : 
; 445  :     WaitForDisc( WAIT_TYPE_NOT_BUSY, 20);

  000e0	e3a03000	 mov         r3, #0
  000e4	e3a02014	 mov         r2, #0x14
  000e8	e3a01002	 mov         r1, #2
  000ec	e1a00004	 mov         r0, r4
  000f0	eb000000	 bl          |?WaitForDisc@CDisk@@QAAHEKK@Z|

; 446  :     //
; 447  :     // Check how device is reporting CPU attention: DRQ or INTRQ?
; 448  :     // INTRQ within 10 ms!!!
; 449  :     //  
; 450  :     if (m_fInterruptSupported && IsDRQTypeIRQ())

  000f4	e5943684	 ldr         r3, [r4, #0x684]
  000f8	e3530000	 cmp         r3, #0
  000fc	0a00000e	 beq         |$L32983|
  00100	e5d42444	 ldrb        r2, [r4, #0x444]
  00104	e5d43445	 ldrb        r3, [r4, #0x445]
  00108	e1823403	 orr         r3, r2, r3, lsl #8
  0010c	e2033060	 and         r3, r3, #0x60
  00110	e3530020	 cmp         r3, #0x20
  00114	1a000008	 bne         |$L32983|

; 451  :     {   
; 452  :         //  ATA_INTR_CMD is expected
; 453  :         //
; 454  :         if (!WaitForInterrupt(DISK_IO_TIME_OUT))

  00118	e5943000	 ldr         r3, [r4]
  0011c	e3a01c4e	 mov         r1, #0x4E, 24
  00120	e3811020	 orr         r1, r1, #0x20
  00124	e5933014	 ldr         r3, [r3, #0x14]
  00128	e1a00004	 mov         r0, r4
  0012c	e1a0e00f	 mov         lr, pc
  00130	e12fff13	 bx          r3
  00134	e3500000	 cmp         r0, #0

; 455  :         {
; 456  :             DEBUGMSG( ZONE_IO | ZONE_CDROM, (TEXT("ATAPI:AtapiSendCommand - Wait for ATA_INTR_CMD Interrupt (DevId %x) \r\n"), m_dwDeviceId));
; 457  :             return FALSE;  

  00138	0a000003	 beq         |$L33687|
  0013c		 |$L32983|

; 458  :         }   
; 459  :     }
; 460  :     // 
; 461  :     // Device will assert DRQ  within (50us or 3ms) if no interrupt id used
; 462  :     // Wait for not BSY and DRQ
; 463  :             

⌨️ 快捷键说明

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