?? atapipci.cod
字號:
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 c:\wince500\platform\smdk2410\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 c:\wince500\platform\smdk2410\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 c:\wince500\platform\smdk2410\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 c:\wince500\platform\smdk2410\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 + -