?? atapipci.cod
字號(hào):
00084 e596303c ldr r3, [r6, #0x3C]
00088 e593003c ldr r0, [r3, #0x3C]
0008c eb000000 bl InterruptDone
; 202 :
; 203 : return fRet;
00090 e1a00005 mov r0, r5
; 204 : }
00094 e8bd4070 ldmia sp!, {r4 - r6, lr}
00098 e12fff1e bx lr
0009c |$M32520|
ENDP ; |?WaitForInterrupt@CPCIDisk@@UAAHK@Z|, CPCIDisk::WaitForInterrupt
00000 AREA |.text| { |?EnableInterrupt@CPCIDisk@@UAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?EnableInterrupt@CPCIDisk@@UAAXXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?EnableInterrupt@CPCIDisk@@UAAXXZ| } ; comdat associative
|$T32530| DCD |$L32529|
DCD 0x40000801
; Function compile flags: /Ogsy
00000 AREA |.text| { |?EnableInterrupt@CPCIDisk@@UAAXXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?EnableInterrupt@CPCIDisk@@UAAXXZ| PROC ; CPCIDisk::EnableInterrupt
; 217 : {
00000 |$L32529|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M32527|
00004 e1a04000 mov r4, r0
; 218 : GetBaseStatus(); // acknowledge interrupt, if pending
00008 eb000000 bl |?GetBaseStatus@CDisk@@QAAEXZ|
; 219 :
; 220 : // signal interrupt done
; 221 : InterruptDone(m_pPort->m_dwSysIntr);
0000c e594303c ldr r3, [r4, #0x3C]
00010 e593003c ldr r0, [r3, #0x3C]
00014 eb000000 bl InterruptDone
; 222 : }
00018 e8bd4010 ldmia sp!, {r4, lr}
0001c e12fff1e bx lr
00020 |$M32528|
ENDP ; |?EnableInterrupt@CPCIDisk@@UAAXXZ|, CPCIDisk::EnableInterrupt
00000 AREA |.text| { |?ConfigureRegisterBlock@CPCIDisk@@UAAXK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?ConfigureRegisterBlock@CPCIDisk@@UAAXK@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?ConfigureRegisterBlock@CPCIDisk@@UAAXK@Z| } ; comdat associative
|$T32539| DCD |$L32538|
DCD 0x40001501
; Function compile flags: /Ogsy
00000 AREA |.text| { |?ConfigureRegisterBlock@CPCIDisk@@UAAXK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?ConfigureRegisterBlock@CPCIDisk@@UAAXK@Z| PROC ; CPCIDisk::ConfigureRegisterBlock
; 237 : {
00000 |$L32538|
00000 e92d40f0 stmdb sp!, {r4 - r7, lr}
00004 |$M32536|
; 238 : m_dwStride = dwStride;
; 239 : m_dwDataDrvCtrlOffset = ATA_REG_DATA * dwStride;
; 240 : m_dwFeatureErrorOffset = ATA_REG_FEATURE * dwStride;
; 241 : m_dwSectCntReasonOffset = ATA_REG_SECT_CNT * dwStride;
; 242 : m_dwSectNumOffset = ATA_REG_SECT_NUM * dwStride;
; 243 : m_dwDrvHeadOffset = ATA_REG_DRV_HEAD * dwStride;
00004 e0813081 add r3, r1, r1, lsl #1
00008 e1a03083 mov r3, r3, lsl #1
0000c e3a07000 mov r7, #0
00010 e1a02081 mov r2, r1, lsl #1
00014 e081e081 add lr, r1, r1, lsl #1
; 244 : m_dwCommandStatusOffset = ATA_REG_COMMAND * dwStride;
00018 e0614181 rsb r4, r1, r1, lsl #3
; 245 : m_dwByteCountLowOffset = ATA_REG_BYTECOUNTLOW * dwStride;
0001c e1a05101 mov r5, r1, lsl #2
; 246 : m_dwByteCountHighOffset = ATA_REG_BYTECOUNTHIGH * dwStride;
00020 e0816101 add r6, r1, r1, lsl #2
00024 e280c020 add r12, r0, #0x20
00028 e88c0018 stmia r12, {r3, r4}
; 247 :
; 248 : // PCI ATA implementations don't assign I/O resources for the first four
; 249 : // bytes, as they are unused
; 250 :
; 251 : //m_dwAltStatusOffset = ATA_REG_ALT_STATUS * dwStride;
; 252 : //m_dwAltDrvCtrl = ATA_REG_DRV_CTRL * dwStride;
; 253 : //LQM 2006-8-14
; 254 : m_dwAltStatusOffset = ATA_REG_ALT_STATUS_CS1 * dwStride;
0002c e5803028 str r3, [r0, #0x28]
; 255 : m_dwAltDrvCtrl = ATA_REG_DRV_CTRL_CS1 * dwStride;
00030 e580302c str r3, [r0, #0x2C]
00034 e280c004 add r12, r0, #4
00038 e88c0082 stmia r12, {r1, r7}
0003c e280c00c add r12, r0, #0xC
00040 e88c4006 stmia r12, {r1, r2, lr}
00044 e280c018 add r12, r0, #0x18
00048 e88c0060 stmia r12, {r5, r6}
; 256 : }
0004c e8bd40f0 ldmia sp!, {r4 - r7, lr}
00050 e12fff1e bx lr
00054 |$M32537|
ENDP ; |?ConfigureRegisterBlock@CPCIDisk@@UAAXK@Z|, CPCIDisk::ConfigureRegisterBlock
IMPORT |VirtualAlloc|
IMPORT |?Init@CDisk@@UAAHPAUHKEY__@@@Z| ; CDisk::Init
IMPORT |?IsCDRomDevice@CDisk@@QAAHXZ| ; CDisk::IsCDRomDevice
00000 AREA |.text| { |?Init@CPCIDisk@@UAAHPAUHKEY__@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?Init@CPCIDisk@@UAAHPAUHKEY__@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?Init@CPCIDisk@@UAAHPAUHKEY__@@@Z| } ; comdat associative
|$T32553| DCD |$L32552|
DCD 0x40002201
; Function compile flags: /Ogsy
00000 AREA |.text| { |?Init@CPCIDisk@@UAAHPAUHKEY__@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?Init@CPCIDisk@@UAAHPAUHKEY__@@@Z| PROC ; CPCIDisk::Init
; 270 : {
00000 |$L32552|
00000 e92d4070 stmdb sp!, {r4 - r6, lr}
00004 |$M32550|
00004 e1a06001 mov r6, r1
00008 e1a05000 mov r5, r0
; 271 : BOOL bRet = FALSE;
; 272 :
; 273 : m_f16Bit = TRUE; // PCI is 16-bit
; 274 :
; 275 : // configure port
; 276 : if (!ConfigPort()) {
0000c e5953000 ldr r3, [r5]
00010 e3a02001 mov r2, #1
00014 e3a04000 mov r4, #0
00018 e5933054 ldr r3, [r3, #0x54]
0001c e5852038 str r2, [r5, #0x38]
00020 e1a0e00f mov lr, pc
00024 e12fff13 bx r3
00028 e3500000 cmp r0, #0
0002c 0a000011 beq |$exit$32084|
; 277 : DEBUGMSG(ZONE_INIT, (_T(
; 278 : "Atapi!CPCIDisk::Init> Failed to configure port; device(%u)\r\n"
; 279 : ), m_dwDeviceId));
; 280 : goto exit;
; 281 : }
; 282 :
; 283 : // assign the appropriate folder name
; 284 : m_szDiskName = (IsCDRomDevice() ? g_szPCICDRomDisk : g_szPCIHardDisk);
00030 e1a00005 mov r0, r5
00034 eb000000 bl |?IsCDRomDevice@CDisk@@QAAHXZ|
00038 e59f3044 ldr r3, [pc, #0x44]
0003c e3500000 cmp r0, #0
; 285 :
; 286 : // reserve memory for DMA buffers
; 287 : m_pStartMemory = (LPBYTE)VirtualAlloc(NULL, 0x10000, MEM_RESERVE, PAGE_READWRITE);
00040 e3a02a02 mov r2, #2, 20
00044 1593e004 ldrne lr, [r3, #4]
00048 0593e000 ldreq lr, [r3]
0004c e3a03004 mov r3, #4
00050 e3a01801 mov r1, #1, 16
00054 e3a00000 mov r0, #0
00058 e585e6b8 str lr, [r5, #0x6B8]
0005c eb000000 bl VirtualAlloc
00060 e1a03000 mov r3, r0
; 288 : if (!m_pStartMemory) {
; 289 : bRet = FALSE;
; 290 : }
; 291 :
; 292 : // finish intialization; i.e., initialize device
; 293 : bRet = CDisk::Init(hActiveKey);
00064 e1a00005 mov r0, r5
00068 e1a01006 mov r1, r6
0006c e5853748 str r3, [r5, #0x748]
00070 eb000000 bl |?Init@CDisk@@UAAHPAUHKEY__@@@Z|
00074 e1a04000 mov r4, r0
00078 |$exit$32084|
; 294 : if (!bRet) {
; 295 : goto exit;
; 296 : }
; 297 :
; 298 : exit:;
; 299 : return bRet;
00078 e1a00004 mov r0, r4
; 300 : }
0007c e8bd4070 ldmia sp!, {r4 - r6, lr}
00080 e12fff1e bx lr
00084 |$L32555|
00084 00000000 DCD |g_szPCIHardDisk|
00088 |$M32551|
ENDP ; |?Init@CPCIDisk@@UAAHPAUHKEY__@@@Z|, CPCIDisk::Init
IMPORT |?MainIoctl@CDisk@@UAAKPAU_IOREQ@@@Z| ; CDisk::MainIoctl
00000 AREA |.text| { |?MainIoctl@CPCIDisk@@UAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?MainIoctl@CPCIDisk@@UAAKPAU_IOREQ@@@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?MainIoctl@CPCIDisk@@UAAKPAU_IOREQ@@@Z| } ; comdat associative
|$T32565| DCD |$L32564|
DCD 0x40000401
; Function compile flags: /Ogsy
00000 AREA |.text| { |?MainIoctl@CPCIDisk@@UAAKPAU_IOREQ@@@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?MainIoctl@CPCIDisk@@UAAKPAU_IOREQ@@@Z| PROC ; CPCIDisk::MainIoctl
; 314 : {
00000 |$L32564|
00000 e52de004 str lr, [sp, #-4]!
00004 |$M32562|
; 315 : DEBUGMSG(ZONE_IOCTL, (_T(
; 316 : "Atapi!CPCIDisk::MainIoctl> IOCTL(%d), device(%d) \r\n"
; 317 : ), pIOReq->dwCode, m_dwDeviceId));
; 318 :
; 319 : return CDisk::MainIoctl(pIOReq);
00004 eb000000 bl |?MainIoctl@CDisk@@UAAKPAU_IOREQ@@@Z|
; 320 : }
00008 e49de004 ldr lr, [sp], #4
0000c e12fff1e bx lr
00010 |$M32563|
ENDP ; |?MainIoctl@CPCIDisk@@UAAKPAU_IOREQ@@@Z|, CPCIDisk::MainIoctl
IMPORT |CreateEventW|
IMPORT |InterruptInitialize|
00000 AREA |.text| { |?ConfigPort@CPCIDisk@@UAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 AREA |.pdata$$?ConfigPort@CPCIDisk@@UAAHXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?ConfigPort@CPCIDisk@@UAAHXZ| } ; comdat associative
|$T32576| DCD |$L32575|
DCD 0x40002301
; Function compile flags: /Ogsy
00000 AREA |.text| { |?ConfigPort@CPCIDisk@@UAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate
00000 |?ConfigPort@CPCIDisk@@UAAHXZ| PROC ; CPCIDisk::ConfigPort
; 333 : {
00000 |$L32575|
00000 e92d4010 stmdb sp!, {r4, lr}
00004 |$M32573|
00004 e1a04000 mov r4, r0
; 334 : m_pATAReg = (PBYTE)m_pPort->m_dwRegBase;
00008 e594203c ldr r2, [r4, #0x3C]
; 335 : m_pATARegAlt = (PBYTE)m_pPort->m_dwRegAlt;
0000c e5923020 ldr r3, [r2, #0x20]
00010 e5843030 str r3, [r4, #0x30]
00014 e5923024 ldr r3, [r2, #0x24]
00018 e5843034 str r3, [r4, #0x34]
; 336 : m_pBMCommand = (PBYTE)m_pPort->m_dwBMR;
0001c e5923028 ldr r3, [r2, #0x28]
00020 e584376c str r3, [r4, #0x76C]
; 337 :
; 338 : // this function is called for the master and slave on this channel; if
; 339 : // this has already been called, then exit
; 340 : if (m_pPort->m_hIRQEvent) {
00024 e5923030 ldr r3, [r2, #0x30]
00028 e3530000 cmp r3, #0
; 341 : m_dwDeviceFlags |= DFLAGS_DEVICE_INITIALIZED;
0002c 15943690 ldrne r3, [r4, #0x690]
; 342 : return TRUE;
00030 13833101 orrne r3, r3, #1, 2
00034 15843690 strne r3, [r4, #0x690]
00038 1a000010 bne |$L32572|
; 343 : }
; 344 :
; 345 : // create interrupt event
; 346 : if (NULL == (m_pPort->m_hIRQEvent = CreateEvent(NULL, FALSE, FALSE, NULL))) {
0003c e3a03000 mov r3, #0
00040 e3a02000 mov r2, #0
00044 e3a01000 mov r1, #0
00048 e3a00000 mov r0, #0
0004c eb000000 bl CreateEventW
00050 e594303c ldr r3, [r4, #0x3C]
00054 e5830030 str r0, [r3, #0x30]
00058 e594203c ldr r2, [r4, #0x3C]
0005c e5923030 ldr r3, [r2, #0x30]
00060 e1b01003 movs r1, r3
; 347 : DEBUGMSG(ZONE_INIT|ZONE_ERROR, (_T(
; 348 : "Atapi!CPCIDisk::ConfigPort> Failed to create interrupt event for device(%d)\r\n"
; 349 : ), m_dwDeviceId));
; 350 : return FALSE;
00064 03a00000 moveq r0, #0
; 368 : }
00068 08bd4010 ldmeqia sp!, {r4, lr}
0006c 012fff1e bxeq lr
; 351 : }
; 352 :
; 353 : // associate interrupt event with IRQ
; 354 : if (!InterruptInitialize(
; 355 : m_pPort->m_dwSysIntr,
; 356 : m_pPort->m_hIRQEvent,
; 357 : NULL,
; 358 : 0)
; 359 : ) {
00070 e592003c ldr r0, [r2, #0x3C]
00074 e3a03000 mov r3, #0
00078 e3a02000 mov r2, #0
0007c eb000000 bl InterruptInitialize
00080 |$L32572|
; 360 : DEBUGMSG(ZONE_INIT|ZONE_ERROR, (_T(
; 361 : "Atapi!CPCIDisk::ConfigPort> Failed to initialize interrupt(SysIntr(%d)) for device(%d)\r\n"
; 362 : ), m_pPort->m_dwSysIntr, m_dwDeviceId));
; 363 : //uncommented by LQM 2006-8-15,irq may not needed
; 364 : //return FALSE;
; 365 : }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -