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

📄 cdaudio.cod

📁 windows CE 的BSP开发包.包含众多的驱动程序和OAL层的开发代码
💻 COD
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4091 

	TTL	D:\WINCE500\PLATFORM\smdk2440\DRIVERS\atapi\.\cdaudio.cpp
	CODE32

  00000			 AREA	 |.drectve|, DRECTVE
	DCB	"-defaultlib:coredll.lib "
	DCB	"-defaultlib:corelibc.lib "

	EXPORT	|?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| ; CPCIDiskAndCD::ControlAudio
	IMPORT	|?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z| ; CPCIDiskAndCD::AtapiSendCommand
	IMPORT	|?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z| ; CPCIDiskAndCD::AtapiReceiveData
	IMPORT	|memset|
; File d:\wince500\platform\smdk2440\drivers\atapi\cdaudio.cpp

  00000			 AREA	 |.text| { |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T32168| DCD	|$L32167|
	DCD	0x40008d02
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z| PROC ; CPCIDiskAndCD::ControlAudio

; 15   : {

  00000		 |$L32167|
  00000	e92d4070	 stmdb       sp!, {r4 - r6, lr}
  00004	e24dd024	 sub         sp, sp, #0x24
  00008		 |$M32165|
  00008	e1a05001	 mov         r5, r1
  0000c	e1a06000	 mov         r6, r0

; 16   :     ATAPI_COMMAND_PACKET     CmdPkt;
; 17   :     DWORD dwError = ERROR_SUCCESS;
; 18   :     SGX_BUF SgBuf;
; 19   :     DWORD dwRet;
; 20   :     
; 21   :     DEBUGMSG(ZONE_IOCTL, (TEXT("ATAPI:PlayAudioMSF - Entered.\r\n")));
; 22   : 
; 23   :     memset( (void *)&CmdPkt, 0, sizeof( CmdPkt));

  00010	e3a02014	 mov         r2, #0x14
  00014	e3a01000	 mov         r1, #0
  00018	e28d0010	 add         r0, sp, #0x10
  0001c	e3a04000	 mov         r4, #0
  00020	eb000000	 bl          memset

; 24   : 
; 25   :     switch(pIOReq->dwCode) {

  00024	e5952014	 ldr         r2, [r5, #0x14]
  00028	e3a03802	 mov         r3, #2, 16
  0002c	e3833080	 orr         r3, r3, #0x80
  00030	e1520003	 cmp         r2, r3
  00034	0a00004f	 beq         |$L32122|
  00038	e3a03909	 mov         r3, #9, 18
  0003c	e3833004	 orr         r3, r3, #4
  00040	e1520003	 cmp         r2, r3
  00044	0a00002e	 beq         |$L32106|
  00048	e3a03909	 mov         r3, #9, 18
  0004c	e3833008	 orr         r3, r3, #8
  00050	e1520003	 cmp         r2, r3
  00054	0a000027	 beq         |$L32128|
  00058	e3a03909	 mov         r3, #9, 18
  0005c	e383300c	 orr         r3, r3, #0xC
  00060	e1520003	 cmp         r2, r3
  00064	0a00001e	 beq         |$L32129|
  00068	e3a03909	 mov         r3, #9, 18
  0006c	e3833010	 orr         r3, r3, #0x10
  00070	e1520003	 cmp         r2, r3
  00074	0a000018	 beq         |$L32130|
  00078	e3a03909	 mov         r3, #9, 18
  0007c	e3833018	 orr         r3, r3, #0x18
  00080	e1520003	 cmp         r2, r3
  00084	1a000051	 bne         |$L32153|

; 26   :         case IOCTL_CDROM_PLAY_AUDIO_MSF:
; 27   :             {
; 28   :                 PCDROM_PLAY_AUDIO_MSF    pPlayMSF;
; 29   :                 pPlayMSF = (PCDROM_PLAY_AUDIO_MSF) pIOReq->pInBuf;

  00088	e5953018	 ldr         r3, [r5, #0x18]
  0008c	e1b02003	 movs        r2, r3

; 30   :                 if (!pPlayMSF || (sizeof(CDROM_PLAY_AUDIO_MSF) > pIOReq->dwInBufSize)) {

  00090	0a000036	 beq         |$L32112|
  00094	e595301c	 ldr         r3, [r5, #0x1C]
  00098	e3530006	 cmp         r3, #6
  0009c	3a000033	 bcc         |$L32112|

; 31   :                     dwError = ERROR_BAD_ARGUMENTS;
; 32   :                     break;
; 33   :                 }    
; 34   :                 CmdPkt.Opcode = ATAPI_PACKET_CMD_PLAY_MSF;

  000a0	e3a03047	 mov         r3, #0x47
  000a4	e5cd3010	 strb        r3, [sp, #0x10]

; 35   :                 CmdPkt.Byte_3 = pPlayMSF->StartingM;

  000a8	e5d23000	 ldrb        r3, [r2]
  000ac	e5cd3013	 strb        r3, [sp, #0x13]

; 36   :                 CmdPkt.Byte_4 = pPlayMSF->StartingS;

  000b0	e5d23001	 ldrb        r3, [r2, #1]
  000b4	e5cd3014	 strb        r3, [sp, #0x14]

; 37   :                 CmdPkt.Byte_5 = pPlayMSF->StartingF;

  000b8	e5d23002	 ldrb        r3, [r2, #2]
  000bc	e5cd3015	 strb        r3, [sp, #0x15]

; 38   :                 CmdPkt.Byte_6 = pPlayMSF->EndingM;

  000c0	e5d23003	 ldrb        r3, [r2, #3]
  000c4	e5cd3016	 strb        r3, [sp, #0x16]

; 39   :                 CmdPkt.Byte_7 = pPlayMSF->EndingS;

  000c8	e5d23004	 ldrb        r3, [r2, #4]
  000cc	e5cd3017	 strb        r3, [sp, #0x17]

; 40   :                 CmdPkt.Byte_8 = pPlayMSF->EndingF;

  000d0	e5d23005	 ldrb        r3, [r2, #5]
  000d4	e5cd3018	 strb        r3, [sp, #0x18]

; 41   :             }    
; 42   :             break;

  000d8	ea00003c	 b           |$L32153|
  000dc		 |$L32130|

; 82   :         case IOCTL_CDROM_RESUME_AUDIO:
; 83   :             CmdPkt.Opcode = ATAPI_PACKET_CMD_PAUSE_RESUME;
; 84   :             CmdPkt.Byte_8 = 1;

  000dc	e3a02001	 mov         r2, #1

; 85   :             break;

  000e0	ea000000	 b           |$L32164|
  000e4		 |$L32129|

; 80   :             CmdPkt.Byte_8 = 0;

  000e4	e3a02000	 mov         r2, #0
  000e8		 |$L32164|

; 78   :         case IOCTL_CDROM_PAUSE_AUDIO:
; 79   :             CmdPkt.Opcode = ATAPI_PACKET_CMD_PAUSE_RESUME;

  000e8	e3a0304b	 mov         r3, #0x4B

; 80   :             CmdPkt.Byte_8 = 0;

  000ec	e5cd3010	 strb        r3, [sp, #0x10]
  000f0	e5cd2018	 strb        r2, [sp, #0x18]

; 81   :             break;

  000f4	ea000035	 b           |$L32153|
  000f8		 |$L32128|

; 73   :             }
; 74   :             break;
; 75   :         case IOCTL_CDROM_STOP_AUDIO:
; 76   :             CmdPkt.Opcode = ATAPI_PACKET_CMD_STOP_PLAY_SCAN;

  000f8	e3a0304e	 mov         r3, #0x4E
  000fc	e5cd3010	 strb        r3, [sp, #0x10]

; 77   :             break;

  00100	ea000032	 b           |$L32153|
  00104		 |$L32106|

; 43   :         case IOCTL_CDROM_SEEK_AUDIO_MSF:    
; 44   :             {
; 45   :                 CDROM_SEEK_AUDIO_MSF *pSeekMSF = (CDROM_SEEK_AUDIO_MSF *) pIOReq->pInBuf;

  00104	e5953018	 ldr         r3, [r5, #0x18]
  00108	e1b01003	 movs        r1, r3

; 46   :                 DWORD dwLBAAddr;
; 47   :                 if (!pSeekMSF || (sizeof(CDROM_SEEK_AUDIO_MSF) > pIOReq->dwInBufSize)) {

  0010c	0a000017	 beq         |$L32112|
  00110	e595301c	 ldr         r3, [r5, #0x1C]
  00114	e3530003	 cmp         r3, #3
  00118	3a000014	 bcc         |$L32112|

; 50   :                 }    
; 51   :                 dwLBAAddr = CDROM_MSFCOMP_TO_LBA( pSeekMSF->M, pSeekMSF->S, pSeekMSF->F);

  0011c	e5d13000	 ldrb        r3, [r1]
  00120	e5d12001	 ldrb        r2, [r1, #1]
  00124	e5d11002	 ldrb        r1, [r1, #2]
  00128	e0633203	 rsb         r3, r3, r3, lsl #4
  0012c	e0823103	 add         r3, r2, r3, lsl #2
  00130	e0633203	 rsb         r3, r3, r3, lsl #4
  00134	e0833103	 add         r3, r3, r3, lsl #2
  00138	e0833001	 add         r3, r3, r1
  0013c	e2433096	 sub         r3, r3, #0x96
  00140	e58d3000	 str         r3, [sp]

; 52   :                 CmdPkt.Opcode = ATAPI_PACKET_CMD_SEEK;
; 53   :                 CmdPkt.Byte_2 = LBA_MSB(&dwLBAAddr);

  00144	e5dd3003	 ldrb        r3, [sp, #3]

; 54   :                 CmdPkt.Byte_3 = LBA_3rdLSB(&dwLBAAddr);

  00148	e5dd2002	 ldrb        r2, [sp, #2]

; 55   :                 CmdPkt.Byte_4 = LBA_2ndLSB(&dwLBAAddr);

  0014c	e5dd1001	 ldrb        r1, [sp, #1]

; 56   :                 CmdPkt.Byte_5 = LBA_LSB(&dwLBAAddr);

  00150	e5dd0000	 ldrb        r0, [sp]
  00154	e3a0e02b	 mov         lr, #0x2B
  00158	e5cd3012	 strb        r3, [sp, #0x12]
  0015c	e5cd2013	 strb        r2, [sp, #0x13]
  00160	e5cd1014	 strb        r1, [sp, #0x14]
  00164	e5cd0015	 strb        r0, [sp, #0x15]
  00168	e5cde010	 strb        lr, [sp, #0x10]

; 57   :             }
; 58   :             break;    

  0016c	ea000017	 b           |$L32153|
  00170		 |$L32112|

; 48   :                     dwError = ERROR_BAD_ARGUMENTS;

  00170	e3a040a0	 mov         r4, #0xA0

; 49   :                     break;

  00174	ea00002a	 b           |$L32135|
  00178		 |$L32122|

; 59   :         case IOCTL_CDROM_SCAN_AUDIO:
; 60   :             {
; 61   :                 CDROM_SCAN_AUDIO *pScan = (CDROM_SCAN_AUDIO *) pIOReq->pInBuf;

  00178	e5953018	 ldr         r3, [r5, #0x18]
  0017c	e1b02003	 movs        r2, r3

; 62   :                 if (!pScan || (sizeof(CDROM_SCAN_AUDIO) > pIOReq->dwInBufSize)) {

  00180	0afffffa	 beq         |$L32112|
  00184	e595301c	 ldr         r3, [r5, #0x1C]
  00188	e3530009	 cmp         r3, #9
  0018c	3afffff7	 bcc         |$L32112|

; 63   :                     dwError = ERROR_BAD_ARGUMENTS;
; 64   :                     break;
; 65   :                 }    
; 66   :                 CmdPkt.Opcode = ATAPI_PACKET_CMD_SCAN_AUDIO;

  00190	e3a030ba	 mov         r3, #0xBA
  00194	e5cd3010	 strb        r3, [sp, #0x10]

; 67   :                 CmdPkt.Byte_1 = (pScan->Direction << 4) & 0x10;

  00198	e5d23000	 ldrb        r3, [r2]
  0019c	e2033010	 and         r3, r3, #0x10
  001a0	e5cd3011	 strb        r3, [sp, #0x11]

; 68   :                 CmdPkt.Byte_2 = pScan->Address[0];

  001a4	e5d23001	 ldrb        r3, [r2, #1]
  001a8	e5cd3012	 strb        r3, [sp, #0x12]

; 69   :                 CmdPkt.Byte_3 = pScan->Address[1];

  001ac	e5d23002	 ldrb        r3, [r2, #2]
  001b0	e5cd3013	 strb        r3, [sp, #0x13]

; 70   :                 CmdPkt.Byte_4 = pScan->Address[2];

  001b4	e5d23003	 ldrb        r3, [r2, #3]
  001b8	e5cd3014	 strb        r3, [sp, #0x14]

; 71   :                 CmdPkt.Byte_5 = pScan->Address[3];

  001bc	e5d23004	 ldrb        r3, [r2, #4]
  001c0	e5cd3015	 strb        r3, [sp, #0x15]

; 72   :                 CmdPkt.Byte_9 = pScan->AddressType << 6;

  001c4	e5d23008	 ldrb        r3, [r2, #8]
  001c8	e20330c0	 and         r3, r3, #0xC0
  001cc	e5cd3019	 strb        r3, [sp, #0x19]
  001d0		 |$L32153|

; 86   :     }
; 87   : 
; 88   :     if (ERROR_SUCCESS == dwError) {
; 89   :         SgBuf.sb_len = 0;

  001d0	e3a03000	 mov         r3, #0

; 90   :         SgBuf.sb_buf = NULL;

  001d4	e3a02000	 mov         r2, #0
  001d8	e58d300c	 str         r3, [sp, #0xC]
  001dc	e58d2008	 str         r2, [sp, #8]

; 91   : 
; 92   :         if (AtapiSendCommand(&CmdPkt)) {

  001e0	e3a03000	 mov         r3, #0
  001e4	e3a02000	 mov         r2, #0
  001e8	e28d1010	 add         r1, sp, #0x10
  001ec	e1a00006	 mov         r0, r6
  001f0	eb000000	 bl          |?AtapiSendCommand@CPCIDiskAndCD@@QAAHPAU_ATAPI_COMMAND_PACKET@@GH@Z|
  001f4	e3500000	 cmp         r0, #0
  001f8	0a000008	 beq         |$L32132|

; 93   :             if (!AtapiReceiveData(&SgBuf, 1, &dwRet)) {

  001fc	e28d3000	 add         r3, sp, #0
  00200	e3a02001	 mov         r2, #1
  00204	e28d1008	 add         r1, sp, #8
  00208	e1a00006	 mov         r0, r6
  0020c	eb000000	 bl          |?AtapiReceiveData@CPCIDiskAndCD@@QAAHPAU_SGX_BUF@@KPAK@Z|
  00210	e3500000	 cmp         r0, #0
  00214	1a000002	 bne         |$L32135|

; 94   :                 DEBUGMSG( ZONE_ERROR|ZONE_CDROM, (TEXT("ATAPI::PlayAudioMSF failed on receive\r\n")));
; 95   :                 dwError = ERROR_READ_FAULT;

  00218	e3a0401e	 mov         r4, #0x1E

; 96   :             }
; 97   :         } else {

  0021c	ea000000	 b           |$L32135|
  00220		 |$L32132|

; 98   :             // TODO: AtaCheckError()
; 99   :           return ERROR_GEN_FAILURE;

  00220	e3a0401f	 mov         r4, #0x1F
  00224		 |$L32135|
  00224	e1a00004	 mov         r0, r4

; 100  :         }    
; 101  :     }    
; 102  :     
; 103  :     return dwError;
; 104  : }

  00228	e28dd024	 add         sp, sp, #0x24
  0022c	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  00230	e12fff1e	 bx          lr
  00234		 |$M32166|

			 ENDP  ; |?ControlAudio@CPCIDiskAndCD@@QAAKPAU_IOREQ@@@Z|, CPCIDiskAndCD::ControlAudio

	END

⌨️ 快捷键说明

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