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

📄 atapipci.cod

📁 windows CE 的BSP开发包.包含众多的驱动程序和OAL层的开发代码
💻 COD
📖 第 1 页 / 共 5 页
字号:

  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  :     }

⌨️ 快捷键说明

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