📄 atamain.cod
字号:
; Listing generated by Microsoft (R) Optimizing Compiler Version 13.10.4091
TTL D:\WINCE500\PLATFORM\smdk2440\DRIVERS\atapi\.\atamain.cpp
CODE32
00000 AREA |.drectve|, DRECTVE
DCB "-defaultlib:coredll.lib "
DCB "-defaultlib:corelibc.lib "
EXPORT |?g_hInstance@@3PAUHINSTANCE__@@A| [ DATA ] ; g_hInstance
EXPORT |?g_pDiskRoot@@3PAVCDisk@@A| [ DATA ] ; g_pDiskRoot
EXPORT |?g_csMain@@3UCRITICAL_SECTION@@A| [ DATA ] ; g_csMain
00000 AREA |.bss|, NOINIT
|?g_hInstance@@3PAUHINSTANCE__@@A| % 0x4 ; g_hInstance
|?g_pDiskRoot@@3PAVCDisk@@A| % 0x4 ; g_pDiskRoot
|?g_csMain@@3UCRITICAL_SECTION@@A| % 0x14 ; g_csMain
EXPORT |?PowerUp@CDisk@@QAAXXZ| ; CDisk::PowerUp
; File d:\wince500\platform\smdk2440\drivers\atapi\diskmain.h
00000 AREA |.text| { |?PowerUp@CDisk@@QAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any
00000 AREA |.pdata$$?PowerUp@CDisk@@QAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?PowerUp@CDisk@@QAAXXZ| } ; comdat associative
|$T33019| DCD |$L33018|
DCD 0x40000400
; Function compile flags: /Ogsy
00000 AREA |.text| { |?PowerUp@CDisk@@QAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any
00000 |?PowerUp@CDisk@@QAAXXZ| PROC ; CDisk::PowerUp
; 403 : void PowerUp() { m_dwDeviceFlags &= ~DFLAGS_DEVICE_PWRDN; }
00000 |$L33018|
00000 |$M33016|
00000 e5903690 ldr r3, [r0, #0x690]
00004 e3c33401 bic r3, r3, #1, 8
00008 e5803690 str r3, [r0, #0x690]
0000c e12fff1e bx lr
00010 |$M33017|
ENDP ; |?PowerUp@CDisk@@QAAXXZ|, CDisk::PowerUp
EXPORT |?PowerDown@CDisk@@QAAXXZ| ; CDisk::PowerDown
00000 AREA |.text| { |?PowerDown@CDisk@@QAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any
00000 AREA |.pdata$$?PowerDown@CDisk@@QAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?PowerDown@CDisk@@QAAXXZ| } ; comdat associative
|$T33027| DCD |$L33026|
DCD 0x40000400
; Function compile flags: /Ogsy
00000 AREA |.text| { |?PowerDown@CDisk@@QAAXXZ| }, CODE, ARM, SELECTION=2 ; comdat any
00000 |?PowerDown@CDisk@@QAAXXZ| PROC ; CDisk::PowerDown
; 404 : void PowerDown() { m_dwDeviceFlags |= DFLAGS_DEVICE_PWRDN; }
00000 |$L33026|
00000 |$M33024|
00000 e5903690 ldr r3, [r0, #0x690]
00004 e3833401 orr r3, r3, #1, 8
00008 e5803690 str r3, [r0, #0x690]
0000c e12fff1e bx lr
00010 |$M33025|
ENDP ; |?PowerDown@CDisk@@QAAXXZ|, CDisk::PowerDown
EXPORT |??0CIDEBUS@@QAA@XZ| ; CIDEBUS::CIDEBUS
IMPORT |memset|
; File d:\wince500\platform\smdk2440\drivers\atapi\atamain.cpp
00000 AREA |.text| { |??0CIDEBUS@@QAA@XZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$??0CIDEBUS@@QAA@XZ|, PDATA, SELECTION=5, ASSOC=|.text| { |??0CIDEBUS@@QAA@XZ| } ; comdat associative
|$T33040| DCD |$L33039|
DCD 0x40001401
; Function compile flags: /Ogsy
00000 AREA |.text| { |??0CIDEBUS@@QAA@XZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |??0CIDEBUS@@QAA@XZ| PROC ; CIDEBUS::CIDEBUS
; 40 : {
00000 |$L33039|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M33037|
00004 e1a04000 mov r4, r0
; 41 : // initialize device handle table and device registry key name table
; 42 : for (int i = 0; i < MAX_DEVICES_PER_CONTROLLER; i++) {
00008 e1a03004 mov r3, r4
0000c e3a02004 mov r2, #4
00010 e3a05000 mov r5, #0
00014 |$L32332|
; 43 : m_hDevice[i] = NULL;
00014 e5835000 str r5, [r3]
; 44 : m_szDevice[i] = NULL;
00018 e5835010 str r5, [r3, #0x10]
0001c e2833004 add r3, r3, #4
00020 e2522001 subs r2, r2, #1
00024 1afffffa bne |$L32332|
; 45 : }
; 46 : // initialize DDKREGWINDOW structure
; 47 : memset(&m_dwi, 0, sizeof(m_dwi));
00028 e3a02074 mov r2, #0x74
0002c e3a01000 mov r1, #0
00030 e2840020 add r0, r4, #0x20
00034 eb000000 bl memset
; 48 : // initialize port structures
; 49 : m_pIdeReg = NULL;
00038 e5845094 str r5, [r4, #0x94]
; 50 : m_pPrimaryPort = NULL;
0003c e5845098 str r5, [r4, #0x98]
; 51 : m_pSecondaryPort = NULL;
00040 e584509c str r5, [r4, #0x9C]
; 52 : }
00044 e1a00004 mov r0, r4
00048 e8bd4030 ldmia sp!, {r4, r5, lr}
0004c e12fff1e bx lr
00050 |$M33038|
ENDP ; |??0CIDEBUS@@QAA@XZ|, CIDEBUS::CIDEBUS
EXPORT |??0CPort@@QAA@PAVCIDEBUS@@@Z| ; CPort::CPort
IMPORT |InitializeCriticalSection|
00000 AREA |.text| { |??0CPort@@QAA@PAVCIDEBUS@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$??0CPort@@QAA@PAVCIDEBUS@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |??0CPort@@QAA@PAVCIDEBUS@@@Z| } ; comdat associative
|$T33051| DCD |$L33050|
DCD 0x40001901
; Function compile flags: /Ogsy
00000 AREA |.text| { |??0CPort@@QAA@PAVCIDEBUS@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |??0CPort@@QAA@PAVCIDEBUS@@@Z| PROC ; CPort::CPort
; 97 : {
00000 |$L33050|
00000 e92d4030 stmdb sp!, {r4, r5, lr}
00004 |$M33048|
00004 e1a04001 mov r4, r1
00008 e1a05000 mov r5, r0
; 98 : DEBUGCHK(pParent);
; 99 : InitializeCriticalSection(&m_csPort);
0000c e2850004 add r0, r5, #4
00010 eb000000 bl InitializeCriticalSection
; 100 : // hook up bus
; 101 : m_pController = pParent;
; 102 : // initialize flags
; 103 : m_fInitialized = 0;
; 104 : m_dwFlag = 0;
; 105 : // initialize I/O ports
; 106 : m_dwRegBase = 0;
; 107 : m_dwRegAlt = 0;
; 108 : m_dwBMR = 0;
; 109 : m_dwBMRStatic = 0;
; 110 : // initialize interrupt data
; 111 : m_hIRQEvent = NULL;
; 112 : m_hThread = NULL;
; 113 : m_dwSysIntr = SYSINTR_NOP;
; 114 : m_dwIrq = IRQ_UNSPECIFIED;
00014 e3e03000 mvn r3, #0
00018 e3a02000 mov r2, #0
0001c e5853040 str r3, [r5, #0x40]
00020 e5852018 str r2, [r5, #0x18]
00024 e585201c str r2, [r5, #0x1C]
00028 e5852020 str r2, [r5, #0x20]
0002c e5852024 str r2, [r5, #0x24]
00030 e5852028 str r2, [r5, #0x28]
00034 e585202c str r2, [r5, #0x2C]
00038 e5852030 str r2, [r5, #0x30]
0003c e5852044 str r2, [r5, #0x44]
00040 e585203c str r2, [r5, #0x3C]
; 115 : // initialize master/slave registry value set
; 116 : m_pDskReg[0] = NULL;
00044 e5852034 str r2, [r5, #0x34]
; 117 : m_pDskReg[1] = NULL;
00048 e5852038 str r2, [r5, #0x38]
; 118 : // initialize master/slave stream interface handles
; 119 : m_pDisk[0] = NULL;
0004c e5852048 str r2, [r5, #0x48]
; 120 : m_pDisk[1] = NULL;
00050 e585204c str r2, [r5, #0x4C]
00054 e5854000 str r4, [r5]
; 121 : }
00058 e1a00005 mov r0, r5
0005c e8bd4030 ldmia sp!, {r4, r5, lr}
00060 e12fff1e bx lr
00064 |$M33049|
ENDP ; |??0CPort@@QAA@PAVCIDEBUS@@@Z|, CPort::CPort
EXPORT |??1CPort@@QAA@XZ| ; CPort::~CPort
IMPORT |LocalFree|
IMPORT |DeleteCriticalSection|
IMPORT |CloseHandle|
IMPORT |InterruptDisable|
IMPORT |MmUnmapIoSpace|
00000 AREA |.text| { |??1CPort@@QAA@XZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$??1CPort@@QAA@XZ|, PDATA, SELECTION=5, ASSOC=|.text| { |??1CPort@@QAA@XZ| } ; comdat associative
|$T33059| DCD |$L33058|
DCD 0x40002901
; Function compile flags: /Ogsy
00000 AREA |.text| { |??1CPort@@QAA@XZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |??1CPort@@QAA@XZ| PROC ; CPort::~CPort
; 126 : {
00000 |$L33058|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M33056|
00004 e1a04000 mov r4, r0
; 127 : DeleteCriticalSection(&m_csPort);
00008 e2840004 add r0, r4, #4
0000c eb000000 bl DeleteCriticalSection
; 128 : // unmap ATA channel's I/O windows
; 129 : if (m_dwRegBase) {
00010 e5943020 ldr r3, [r4, #0x20]
00014 e3530000 cmp r3, #0
; 130 : MmUnmapIoSpace((LPVOID)m_dwRegBase, ATA_REG_LENGTH);
00018 13a01008 movne r1, #8
0001c 11a00003 movne r0, r3
00020 1b000000 blne MmUnmapIoSpace
; 131 : }
; 132 : if (m_dwRegAlt) {
00024 e5943024 ldr r3, [r4, #0x24]
00028 e3530000 cmp r3, #0
; 133 : MmUnmapIoSpace((LPVOID)m_dwRegAlt, ATA_REG_LENGTH);
0002c 13a01008 movne r1, #8
00030 11a00003 movne r0, r3
00034 1b000000 blne MmUnmapIoSpace
; 134 : }
; 135 : if (m_dwBMR) {
00038 e5943028 ldr r3, [r4, #0x28]
0003c e3530000 cmp r3, #0
; 136 : MmUnmapIoSpace((LPVOID)m_dwBMR, 16);
00040 13a01010 movne r1, #0x10
00044 11a00003 movne r0, r3
00048 1b000000 blne MmUnmapIoSpace
; 137 : }
; 138 : // close interrupt event handle
; 139 : if (m_hIRQEvent) {
0004c e5943030 ldr r3, [r4, #0x30]
00050 e3530000 cmp r3, #0
; 140 : CloseHandle(m_hIRQEvent);
00054 11a00003 movne r0, r3
00058 1b000000 blne CloseHandle
; 141 : }
; 142 : // close interrupt thread
; 143 : if (m_hThread) {
0005c e5943044 ldr r3, [r4, #0x44]
00060 e3530000 cmp r3, #0
; 144 : CloseHandle(m_hThread);
00064 11a00003 movne r0, r3
00068 1b000000 blne CloseHandle
; 145 : }
; 146 : // disable interrupt
; 147 : if (m_dwSysIntr != SYSINTR_NOP) {
0006c e594303c ldr r3, [r4, #0x3C]
00070 e3530000 cmp r3, #0
; 148 : InterruptDisable(m_dwSysIntr);
00074 11a00003 movne r0, r3
00078 1b000000 blne InterruptDisable
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -