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

📄 atapipci.cod

📁 windows CE 的BSP开发包.包含众多的驱动程序和OAL层的开发代码
💻 COD
📖 第 1 页 / 共 5 页
字号:
  00054	e12fff1e	 bx          lr
  00058		 |$L32472|
  00058	00000000	 DCD         |?m_lDeviceCount@CPCIDisk@@2JA|
  0005c	00000000	 DCD         |??_7CPCIDisk@@6B@|
  00060		 |$M32468|

			 ENDP  ; |??0CPCIDisk@@QAA@PAUHKEY__@@@Z|, CPCIDisk::CPCIDisk

	IMPORT	|?TakeCS@CPort@@QAAXXZ|			; CPort::TakeCS
; File d:\wince500\platform\smdk2440\drivers\atapi\atapipci.h

  00000			 AREA	 |.text| { |?TakeCS@CPCIDisk@@UAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000			 AREA	 |.pdata$$?TakeCS@CPCIDisk@@UAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?TakeCS@CPCIDisk@@UAAXXZ| } ; comdat associative
|$T32479| DCD	|$L32478|
	DCD	0x40000501
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?TakeCS@CPCIDisk@@UAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000		 |?TakeCS@CPCIDisk@@UAAXXZ| PROC	; CPCIDisk::TakeCS

; 69   :     inline virtual void CPCIDisk::TakeCS() {

  00000		 |$L32478|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M32476|

; 70   :         m_pPort->TakeCS();

  00004	e590003c	 ldr         r0, [r0, #0x3C]
  00008	eb000000	 bl          |?TakeCS@CPort@@QAAXXZ|

; 71   :     }

  0000c	e49de004	 ldr         lr, [sp], #4
  00010	e12fff1e	 bx          lr
  00014		 |$M32477|

			 ENDP  ; |?TakeCS@CPCIDisk@@UAAXXZ|, CPCIDisk::TakeCS

	IMPORT	|?ReleaseCS@CPort@@QAAXXZ|		; CPort::ReleaseCS

  00000			 AREA	 |.text| { |?ReleaseCS@CPCIDisk@@UAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000			 AREA	 |.pdata$$?ReleaseCS@CPCIDisk@@UAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?ReleaseCS@CPCIDisk@@UAAXXZ| } ; comdat associative
|$T32487| DCD	|$L32486|
	DCD	0x40000501
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?ReleaseCS@CPCIDisk@@UAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any

  00000		 |?ReleaseCS@CPCIDisk@@UAAXXZ| PROC	; CPCIDisk::ReleaseCS

; 72   :     inline virtual void CPCIDisk::ReleaseCS() {

  00000		 |$L32486|
  00000	e52de004	 str         lr, [sp, #-4]!
  00004		 |$M32484|

; 73   :         m_pPort->ReleaseCS();

  00004	e590003c	 ldr         r0, [r0, #0x3C]
  00008	eb000000	 bl          |?ReleaseCS@CPort@@QAAXXZ|

; 74   :     }

  0000c	e49de004	 ldr         lr, [sp], #4
  00010	e12fff1e	 bx          lr
  00014		 |$M32485|

			 ENDP  ; |?ReleaseCS@CPCIDisk@@UAAXXZ|, CPCIDisk::ReleaseCS

	EXPORT	|?FreeDMABuffers@CPCIDisk@@QAAXXZ|	; CPCIDisk::FreeDMABuffers
	IMPORT	|VirtualFree|
	IMPORT	|FreePhysMem|
; File d:\wince500\platform\smdk2440\drivers\atapi\atapipci.cpp

  00000			 AREA	 |.text| { |?FreeDMABuffers@CPCIDisk@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?FreeDMABuffers@CPCIDisk@@QAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?FreeDMABuffers@CPCIDisk@@QAAXXZ| } ; comdat associative
|$T32497| DCD	|$L32496|
	DCD	0x40003401
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?FreeDMABuffers@CPCIDisk@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?FreeDMABuffers@CPCIDisk@@QAAXXZ| PROC ; CPCIDisk::FreeDMABuffers

; 110  : {

  00000		 |$L32496|
  00000	e92d40f0	 stmdb       sp!, {r4 - r7, lr}
  00004		 |$M32494|
  00004	e1a04000	 mov         r4, r0

; 111  :     if (m_pPRD) {

  00008	e594374c	 ldr         r3, [r4, #0x74C]
  0000c	e3a07000	 mov         r7, #0
  00010	e3530000	 cmp         r3, #0
  00014	0a000003	 beq         |$L32036|

; 112  :         FreePhysMem(m_pPRD);

  00018	e1a00003	 mov         r0, r3
  0001c	eb000000	 bl          FreePhysMem

; 113  :         m_pPRDPhys = NULL;

  00020	e5847760	 str         r7, [r4, #0x760]

; 114  :         m_pPRD = NULL;

  00024	e584774c	 str         r7, [r4, #0x74C]
  00028		 |$L32036|

; 115  :     }
; 116  : 
; 117  :     if (m_pPhysList) {

  00028	e5943750	 ldr         r3, [r4, #0x750]
  0002c	e3a06004	 mov         r6, #4
  00030	e2466c35	 sub         r6, r6, #0x35, 24
  00034	e3530000	 cmp         r3, #0
  00038	0a00000b	 beq         |$L32037|

; 118  :         // free the fixed pages; the variable pages should already be free
; 119  :         for (DWORD i = 0; i < MIN_PHYS_PAGES; i++) {

  0003c	e3a05000	 mov         r5, #0
  00040		 |$L32039|

; 120  :             FreePhysMem(m_pPhysList[i].pVirtualAddress);

  00040	e5943750	 ldr         r3, [r4, #0x750]
  00044	e7950003	 ldr         r0, [r5, +r3]
  00048	eb000000	 bl          FreePhysMem
  0004c	e2855008	 add         r5, r5, #8
  00050	e3550020	 cmp         r5, #0x20
  00054	3afffff9	 bcc         |$L32039|

; 121  :         }
; 122  :         VirtualFree(m_pPhysList, UserKInfo[KINX_PAGESIZE], MEM_DECOMMIT);

  00058	e5961000	 ldr         r1, [r6]
  0005c	e5940750	 ldr         r0, [r4, #0x750]
  00060	e3a02901	 mov         r2, #1, 18
  00064	eb000000	 bl          VirtualFree

; 123  :         m_pPhysList = NULL;

  00068	e5847750	 str         r7, [r4, #0x750]
  0006c		 |$L32037|

; 124  :     }
; 125  : 
; 126  :     if (m_pSGCopy) {

  0006c	e5943754	 ldr         r3, [r4, #0x754]
  00070	e3530000	 cmp         r3, #0
  00074	0a000004	 beq         |$L32044|

; 127  :         VirtualFree(m_pSGCopy, UserKInfo[KINX_PAGESIZE], MEM_DECOMMIT);

  00078	e5961000	 ldr         r1, [r6]
  0007c	e3a02901	 mov         r2, #1, 18
  00080	e1a00003	 mov         r0, r3
  00084	eb000000	 bl          VirtualFree

; 128  :         m_pSGCopy = NULL;

  00088	e5847754	 str         r7, [r4, #0x754]
  0008c		 |$L32044|

; 129  :     }
; 130  : 
; 131  :     if (m_pPFNs) {

  0008c	e5943758	 ldr         r3, [r4, #0x758]
  00090	e3530000	 cmp         r3, #0
  00094	0a000004	 beq         |$L32047|

; 132  :         VirtualFree(m_pPFNs, UserKInfo[KINX_PAGESIZE], MEM_DECOMMIT);

  00098	e5961000	 ldr         r1, [r6]
  0009c	e3a02901	 mov         r2, #1, 18
  000a0	e1a00003	 mov         r0, r3
  000a4	eb000000	 bl          VirtualFree

; 133  :         m_pSGCopy = NULL;

  000a8	e5847754	 str         r7, [r4, #0x754]
  000ac		 |$L32047|

; 134  :     }
; 135  : 
; 136  :     VirtualFree(m_pStartMemory, 0, MEM_RELEASE);

  000ac	e5940748	 ldr         r0, [r4, #0x748]
  000b0	e3a02902	 mov         r2, #2, 18
  000b4	e3a01000	 mov         r1, #0
  000b8	eb000000	 bl          VirtualFree

; 137  :     m_pStartMemory = NULL;

  000bc	e5847748	 str         r7, [r4, #0x748]

; 138  : 
; 139  :     m_dwPhysCount = 0;

  000c0	e5847764	 str         r7, [r4, #0x764]

; 140  :     m_dwSGCount = 0;

  000c4	e584775c	 str         r7, [r4, #0x75C]

; 141  : }

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

			 ENDP  ; |?FreeDMABuffers@CPCIDisk@@QAAXXZ|, CPCIDisk::FreeDMABuffers

	EXPORT	|?CopyDiskInfoFromPort@CPCIDisk@@QAAXXZ| ; CPCIDisk::CopyDiskInfoFromPort

  00000			 AREA	 |.text| { |?CopyDiskInfoFromPort@CPCIDisk@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?CopyDiskInfoFromPort@CPCIDisk@@QAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?CopyDiskInfoFromPort@CPCIDisk@@QAAXXZ| } ; comdat associative
|$T32505| DCD	|$L32504|
	DCD	0x40000800
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?CopyDiskInfoFromPort@CPCIDisk@@QAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?CopyDiskInfoFromPort@CPCIDisk@@QAAXXZ| PROC ; CPCIDisk::CopyDiskInfoFromPort

; 154  : {

  00000		 |$L32504|
  00000		 |$M32502|

; 155  :     ASSERT(m_pPort->m_dwRegBase != 0);
; 156  :     m_pATAReg = (PBYTE)m_pPort->m_dwRegBase;

  00000	e590203c	 ldr         r2, [r0, #0x3C]

; 157  :     m_pATARegAlt = (PBYTE)m_pPort->m_dwRegAlt;

  00004	e5923020	 ldr         r3, [r2, #0x20]
  00008	e5803030	 str         r3, [r0, #0x30]
  0000c	e5923024	 ldr         r3, [r2, #0x24]
  00010	e5803034	 str         r3, [r0, #0x34]

; 158  : 
; 159  :     ASSERT(m_pPort->m_dwBMR != 0);
; 160  :     m_pBMCommand = (LPBYTE)m_pPort->m_dwBMR;

  00014	e5923028	 ldr         r3, [r2, #0x28]
  00018	e580376c	 str         r3, [r0, #0x76C]

; 161  : }

  0001c	e12fff1e	 bx          lr
  00020		 |$M32503|

			 ENDP  ; |?CopyDiskInfoFromPort@CPCIDisk@@QAAXXZ|, CPCIDisk::CopyDiskInfoFromPort

	IMPORT	|WaitForSingleObject|
	IMPORT	|InterruptDone|
; File d:\wince500\platform\smdk2440\drivers\atapi\diskmain.h

  00000			 AREA	 |.text| { |?WaitForInterrupt@CPCIDisk@@UAAHK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?WaitForInterrupt@CPCIDisk@@UAAHK@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?WaitForInterrupt@CPCIDisk@@UAAHK@Z| } ; comdat associative
|$T32522| DCD	|$L32521|
	DCD	0x40002701
; Function compile flags: /Ogsy
; File d:\wince500\platform\smdk2440\drivers\atapi\atapipci.cpp

  00000			 AREA	 |.text| { |?WaitForInterrupt@CPCIDisk@@UAAHK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?WaitForInterrupt@CPCIDisk@@UAAHK@Z| PROC ; CPCIDisk::WaitForInterrupt

; 175  : {

  00000		 |$L32521|
  00000	e92d4070	 stmdb       sp!, {r4 - r6, lr}
  00004		 |$M32519|
  00004	e1a04001	 mov         r4, r1
  00008	e1a06000	 mov         r6, r0

; 176  :     BYTE bStatus;
; 177  :     BOOL fRet = TRUE;
; 178  :     DWORD dwRet;
; 179  : 
; 180  :     // wait for interrupt
; 181  :     dwRet = WaitForSingleObject(m_pPort->m_hIRQEvent, dwTimeOut);

  0000c	e596303c	 ldr         r3, [r6, #0x3C]
  00010	e3a05001	 mov         r5, #1
  00014	e5930030	 ldr         r0, [r3, #0x30]
  00018	eb000000	 bl          WaitForSingleObject

; 182  :     if (dwRet == WAIT_TIMEOUT) {

  0001c	e3a03c01	 mov         r3, #1, 24
  00020	e3833002	 orr         r3, r3, #2
  00024	e1500003	 cmp         r0, r3

; 183  :         fRet = FALSE;
; 184  :     }
; 185  :     else {

  00028	0a00000b	 beq         |$L32518|

; 186  :         if (dwRet != WAIT_OBJECT_0) {

  0002c	e3500000	 cmp         r0, #0
  00030	0a00000a	 beq         |$L32068|

; 187  :             if (!WaitForDisc(WAIT_TYPE_DRQ, dwTimeOut, 10)) {

  00034	e5961000	 ldr         r1, [r6]
  00038	e1a02004	 mov         r2, r4
  0003c	e3a0300a	 mov         r3, #0xA
  00040	e591401c	 ldr         r4, [r1, #0x1C]
  00044	e3a01004	 mov         r1, #4
  00048	e1a00006	 mov         r0, r6
  0004c	e1a0e00f	 mov         lr, pc
  00050	e12fff14	 bx          r4
  00054	e3500000	 cmp         r0, #0
  00058	1a000000	 bne         |$L32068|
  0005c		 |$L32518|

; 188  :                 fRet = FALSE;

  0005c	e3a05000	 mov         r5, #0
  00060		 |$L32068|

; 189  :             }
; 190  :         }
; 191  :     }
; 192  : 
; 193  :     // read status; acknowledge interrupt
; 194  :     bStatus = GetBaseStatus();

  00060	e1a00006	 mov         r0, r6
  00064	eb000000	 bl          |?GetBaseStatus@CDisk@@QAAEXZ|

; 195  :     if (bStatus & ATA_STATUS_ERROR) {

  00068	e3100001	 tst         r0, #1
  0006c	0a000004	 beq         |$L32069|

; 196  :         bStatus = GetError();

  00070	e5962030	 ldr         r2, [r6, #0x30]
  00074	e596300c	 ldr         r3, [r6, #0xC]
  00078	e0820003	 add         r0, r2, r3
  0007c	eb000000	 bl          READ_PORT_UCHAR

; 197  :         fRet = FALSE;

  00080	e3a05000	 mov         r5, #0
  00084		 |$L32069|

; 198  :     }
; 199  : 
; 200  :     // signal interrupt done
; 201  :     InterruptDone(m_pPort->m_dwSysIntr);

⌨️ 快捷键说明

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