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

📄 ep931xide.cod

📁 PXA270的BSP
💻 COD
📖 第 1 页 / 共 5 页
字号:
  000d4	e5823000	 str         r3, [r2]

; 298  :         *IDE_UDMAOP = 0;    

  000d8	e59f3024	 ldr         r3, [pc, #0x24]
  000dc	e3a02062	 mov         r2, #0x62
  000e0	e381180a	 orr         r1, r1, #0xA, 16
  000e4	e5812000	 str         r2, [r1]
  000e8	e5806000	 str         r6, [r0]
  000ec	e5836000	 str         r6, [r3]
  000f0	e3a04001	 mov         r4, #1
  000f4		 |$L32983|

; 299  :     }
; 300  : 
; 301  :     return bResult;

  000f4	e1a00004	 mov         r0, r4

; 302  : }

  000f8	e28dd004	 add         sp, sp, #4
  000fc	e8bd4070	 ldmia       sp!, {r4 - r6, lr}
  00100	e12fff1e	 bx          lr
  00104		 |$L33814|
  00104	b00a000c	 DCD         0xb00a000c
  00108	b00a0008	 DCD         0xb00a0008
  0010c	b00a0004	 DCD         0xb00a0004
  00110	00000000	 DCD         |??_C@_1HC@FCKPCMNB@?$AAC?$AAE?$AAP?$AA9?$AA3?$AA1?$AAx?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAI?$AAn?$AAi?$AAt?$AA?5?$AAF?$AAa@|
  00114	00000000	 DCD         |??_C@_1GM@ENNICEOF@?$AAC?$AAE?$AAP?$AA9?$AA3?$AA1?$AAx?$AAD?$AAi?$AAs?$AAk?$AA?3?$AA?3?$AAI?$AAn?$AAi?$AAt?$AA?5?$AAF?$AAa@|
  00118		 |$M33810|

			 ENDP  ; |?Init@CEP931xPort@@QAAHXZ|, CEP931xPort::Init

	EXPORT	|??1CEP931xPort@@QAA@XZ|		; CEP931xPort::~CEP931xPort
	IMPORT	|CloseHandle|

  00000			 AREA	 |.text| { |??1CEP931xPort@@QAA@XZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$??1CEP931xPort@@QAA@XZ|, PDATA, SELECTION=5, ASSOC=|.text| { |??1CEP931xPort@@QAA@XZ| } ; comdat associative
|$T33821| DCD	|$L33820|
	DCD	0x40000a01
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |??1CEP931xPort@@QAA@XZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |??1CEP931xPort@@QAA@XZ| PROC		; CEP931xPort::~CEP931xPort

; 311  : {

  00000		 |$L33820|
  00000	e92d4010	 stmdb       sp!, {r4, lr}
  00004		 |$M33818|
  00004	e1a04000	 mov         r4, r0

; 312  :     BOOL    bResult = TRUE;
; 313  : 
; 314  :     if(m_hIdeIntEvent)

  00008	e5943000	 ldr         r3, [r4]
  0000c	e3530000	 cmp         r3, #0

; 315  :     {
; 316  :         CloseHandle(m_hIdeIntEvent);

  00010	11a00003	 movne       r0, r3
  00014	1b000000	 blne        CloseHandle

; 317  :     }
; 318  : 
; 319  :     DeleteCriticalSection( &m_CriticalSection);

  00018	e2840010	 add         r0, r4, #0x10
  0001c	eb000000	 bl          DeleteCriticalSection

; 320  : }

  00020	e8bd4010	 ldmia       sp!, {r4, lr}
  00024	e12fff1e	 bx          lr
  00028		 |$M33819|

			 ENDP  ; |??1CEP931xPort@@QAA@XZ|, CEP931xPort::~CEP931xPort

	EXPORT	|?SetupDMAInit@CEP931xPort@@QAAHXZ|	; CEP931xPort::SetupDMAInit

  00000			 AREA	 |.text| { |?SetupDMAInit@CEP931xPort@@QAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?SetupDMAInit@CEP931xPort@@QAAHXZ|, PDATA, SELECTION=5, ASSOC=|.text| { |?SetupDMAInit@CEP931xPort@@QAAHXZ| } ; comdat associative
|$T33830| DCD	|$L33829|
	DCD	0x40000200
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?SetupDMAInit@CEP931xPort@@QAAHXZ| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?SetupDMAInit@CEP931xPort@@QAAHXZ| PROC ; CEP931xPort::SetupDMAInit

; 329  : 	{

  00000		 |$L33829|
  00000		 |$M33827|

; 330  : 	
; 331  : 	return TRUE;

  00000	e3a00001	 mov         r0, #1

; 332  : 	}

  00004	e12fff1e	 bx          lr
  00008		 |$M33828|

			 ENDP  ; |?SetupDMAInit@CEP931xPort@@QAAHXZ|, CEP931xPort::SetupDMAInit

	EXPORT	|?SetupDMA@CEP931xPort@@QAAHPAU_SG_BUF@@KHK@Z| ; CEP931xPort::SetupDMA
	IMPORT	|memcpy|
	IMPORT	|LockPages|
	IMPORT	|UnlockPages|
	IMPORT	|MapPtrToProcess|
	IMPORT	|GetCallerProcess|

  00000			 AREA	 |.text| { |?SetupDMA@CEP931xPort@@QAAHPAU_SG_BUF@@KHK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000			 AREA	 |.pdata$$?SetupDMA@CEP931xPort@@QAAHPAU_SG_BUF@@KHK@Z|, PDATA, SELECTION=5, ASSOC=|.text| { |?SetupDMA@CEP931xPort@@QAAHPAU_SG_BUF@@KHK@Z| } ; comdat associative
|$T33867| DCD	|$L33866|
	DCD	0x4000d802
; Function compile flags: /Ogsy

  00000			 AREA	 |.text| { |?SetupDMA@CEP931xPort@@QAAHPAU_SG_BUF@@KHK@Z| }, CODE, ARM, SELECTION=1 ; comdat noduplicate

  00000		 |?SetupDMA@CEP931xPort@@QAAHPAU_SG_BUF@@KHK@Z| PROC ; CEP931xPort::SetupDMA

; 347  : {

  00000		 |$L33866|
  00000	e92d4ff0	 stmdb       sp!, {r4 - r11, lr}
  00004	e24dd048	 sub         sp, sp, #0x48
  00008		 |$M33864|
  00008	e1a08003	 mov         r8, r3
  0000c	e1a07002	 mov         r7, r2
  00010	e1a06001	 mov         r6, r1
  00014	e1a05000	 mov         r5, r0

; 348  :     BOOL    fLockRet;
; 349  :     ULONG   ulDmaCount;
; 350  :     ULONG   ulIDESource, ulIDEDest;
; 351  :     ULONG   ulBuffer;
; 352  :     LPBYTE  pBuffer;
; 353  :     BOOL    fPagesLocked;
; 354  :     DWORD   PFNs[16];
; 355  :     ULONG   ulPage, ulNumPages;
; 356  :     ULONG   ulPageSize = UserKInfo[KINX_PAGESIZE];  
; 357  : 	DWORD dwAlignMask = 3; //* * * CAMSDB Added this 05/05/05. The original
; 358  :                             //* * * value for alignment was 0x3.
; 359  : 	volatile register int DumbCntrlRead;
; 360  :     
; 361  : 
; 362  :     DEBUGMSG
; 363  :     ( 
; 364  :         ZONE_DMA, 
; 365  :         (
; 366  :             TEXT("ATAPI:SetupDMA Request = %s SgCount=%ld\r\n"), 
; 367  :             fRead ? TEXT("Read") : TEXT("Write"), 
; 368  :             dwSgCount
; 369  :         )
; 370  :     );
; 371  : 
; 372  : 
; 373  : 	//* * * NOTE: Bootup default value is:0x04030000.  Which says 
; 374  : 	//* * * the following channels are on:
; 375  : 	//        PWRCNT_DMAM2MCH0            0x04000000
; 376  :     //        PWRCNT_DMAM2MCH1            0x08000000 (Not applicable here)
; 377  :     //        PWRCNT_DMAM2PCH1            0x00010000
; 378  :     //        PWRCNT_DMAM2PCH0            0x00020000
; 379  : 
; 380  :     //
; 381  :     // Stop any DMA that is occuring.
; 382  :     //
; 383  : 
; 384  : 	// * * * CAMSDB - Took this out because it's very stpuid. = m_pulDmaBase[M2M_CTRL>>2] &= ~M2M_CTRL_START;
; 385  : 
; 386  : 	//* * * CAMSDB - Clear out control so it's very null.
; 387  :     m_pulDmaBase[M2M_CTRL>>2] = 0;

  00018	e595400c	 ldr         r4, [r5, #0xC]
  0001c	e3a0e004	 mov         lr, #4
  00020	e24eec35	 sub         lr, lr, #0x35, 24
  00024	e59e9000	 ldr         r9, [lr]
  00028	e3a0a000	 mov         r10, #0
  0002c	e584a000	 str         r10, [r4]

; 388  : 
; 389  :     //* * * Read back the control register to allow hardware state
; 390  :     //* * * machines to transition.
; 391  :     DumbCntrlRead = m_pulDmaBase[M2M_CTRL>>2];

  00030	e595e00c	 ldr         lr, [r5, #0xC]

; 392  : 
; 393  :     //
; 394  :     // Lets save off the DMA information. What?
; 395  :     //
; 396  : 
; 397  : 	m_fAligned          = TRUE; 

  00034	e3a0b001	 mov         r11, #1

; 398  :     ulDmaCount        = 0;
; 399  : 
; 400  :     //
; 401  :     // Check if either the buffer or the buffer length is unaligned.  If the buffers are not 
; 402  :     //
; 403  : 
; 404  : 	//* * * CAMSDB - Original line.  Changed 05/08/04 (START)
; 405  : 	//if(dwSgCount ==1 && !((ULONG)pSgBuf[0].sb_buf & 0x3) && !(pSgBuf[0].sb_len & 0x3))
; 406  : 	//* * * CAMSDB - Original line.  Changed 05/08/04 (END)
; 407  : 
; 408  : 	if(dwSgCount ==1 && !((ULONG)pSgBuf[0].sb_buf & dwAlignMask) && !(pSgBuf[0].sb_len & dwAlignMask))

  00038	e3570001	 cmp         r7, #1
  0003c	e59ee000	 ldr         lr, [lr]
  00040	e585b04c	 str         r11, [r5, #0x4C]
  00044	e58de000	 str         lr, [sp]
  00048	1a000034	 bne         |$L33020|
  0004c	e596e000	 ldr         lr, [r6]
  00050	e31e0003	 tst         lr, #3
  00054	1a000031	 bne         |$L33020|
  00058	e596e004	 ldr         lr, [r6, #4]
  0005c	e31e0003	 tst         lr, #3
  00060	1a00002e	 bne         |$L33020|

; 409  :     {
; 410  :         //
; 411  :         // Map the pointer to the process so that we have a valid pointer in our process.
; 412  :         //
; 413  :         m_pucDmaBuffer = (LPBYTE)MapPtrToProcess(pSgBuf[0].sb_buf, GetCallerProcess());

  00064	eb000000	 bl          GetCallerProcess
  00068	e1a01000	 mov         r1, r0
  0006c	e5960000	 ldr         r0, [r6]
  00070	eb000000	 bl          MapPtrToProcess
  00074	e5850030	 str         r0, [r5, #0x30]

; 414  : 
; 415  :         //
; 416  :         // Lock the pages for reading or writing.
; 417  :         //
; 418  :         fPagesLocked = LockPages
; 419  :         ( 
; 420  :             m_pucDmaBuffer, 
; 421  :             pSgBuf[0].sb_len, 
; 422  :             PFNs, 
; 423  :             fRead ? LOCKFLAG_WRITE : LOCKFLAG_READ
; 424  :         );

  00078	e5961004	 ldr         r1, [r6, #4]
  0007c	e3580000	 cmp         r8, #0
  00080	13a03001	 movne       r3, #1
  00084	03a03004	 moveq       r3, #4
  00088	e28d2008	 add         r2, sp, #8
  0008c	eb000000	 bl          LockPages
  00090	e3500000	 cmp         r0, #0

; 425  :             
; 426  : 
; 427  :         //
; 428  :         // If the function succeds, Check to make sure that the pages are physically contiguous.
; 429  :         // If they are not then do the unaligned buffer case.
; 430  :         //
; 431  :         if(fPagesLocked)

  00094	0a000022	 beq         |$L33031|

; 432  :         {
; 433  :             ulNumPages = 1 + ( (ULONG(m_pucDmaBuffer) + pSgBuf[0].sb_len) >> m_ulPageShift) - 
; 434  :                              ( ULONG(m_pucDmaBuffer) >> m_ulPageShift);

  00098	e5950030	 ldr         r0, [r5, #0x30]
  0009c	e5963004	 ldr         r3, [r6, #4]
  000a0	e5952050	 ldr         r2, [r5, #0x50]

; 435  : 
; 436  :             for(ulPage = 0; ulPage< (ulNumPages - 1); ulPage++)

  000a4	e3a0e000	 mov         lr, #0
  000a8	e0833000	 add         r3, r3, r0
  000ac	e1a03233	 mov         r3, r3, lsr r2
  000b0	e0433230	 sub         r3, r3, r0, lsr r2
  000b4	e2833001	 add         r3, r3, #1
  000b8	e2534001	 subs        r4, r3, #1
  000bc	0a00000a	 beq         |$L33025|

; 432  :         {
; 433  :             ulNumPages = 1 + ( (ULONG(m_pucDmaBuffer) + pSgBuf[0].sb_len) >> m_ulPageShift) - 
; 434  :                              ( ULONG(m_pucDmaBuffer) >> m_ulPageShift);

  000c0	e28d1008	 add         r1, sp, #8
  000c4		 |$L33023|

; 437  :             {
; 438  :                 if(PFNs[ulPage] !=PFNs[ulPage + 1])

  000c4	e5912000	 ldr         r2, [r1]
  000c8	e5913004	 ldr         r3, [r1, #4]
  000cc	e1520003	 cmp         r2, r3
  000d0	1a000004	 bne         |$L33843|
  000d4	e28ee001	 add         lr, lr, #1
  000d8	e15e0004	 cmp         lr, r4
  000dc	e2811004	 add         r1, r1, #4
  000e0	3afffff7	 bcc         |$L33023|
  000e4	ea000000	 b           |$L33025|
  000e8		 |$L33843|

; 439  :                 {
; 440  :                     m_fAligned = FALSE;    

  000e8	e585a04c	 str         r10, [r5, #0x4C]
  000ec		 |$L33025|

; 441  :                     break;
; 442  :                 }
; 443  :             }
; 444  : 
; 445  :             //
; 446  :             // If it is aligned then calculate the current physical address.
; 447  :             //
; 448  :             if(m_fAligned )

  000ec	e595304c	 ldr         r3, [r5, #0x4C]
  000f0	e3530000	 cmp         r3, #0

; 449  :             {
; 450  : 				//* * * UserKInfo[KINX_PFN_SHIFT]. 
; 451  : 
; 452  :                 m_ulDmaPhysBuff = PFNs[0] + ((ULONG)m_pucDmaBuffer & (ulPageSize -1));

  000f4	159d2008	 ldrne       r2, [sp, #8]
  000f8	12493001	 subne       r3, r9, #1
  000fc	10033000	 andne       r3, r3, r0
  00100	10833002	 addne       r3, r3, r2
  00104	15853034	 strne       r3, [r5, #0x34]

; 453  :                 m_ulDmaCount    = pSgBuf[0].sb_len;

  00108	15963004	 ldrne       r3, [r6, #4]
  0010c	15853038	 strne       r3, [r5, #0x38]
  00110	1a000003	 bne         |$L33031|

; 454  :             }
; 455  :             else
; 456  :             {   
; 457  :                 //
; 458  :                 // Unlock the pages and free the Mapped pointer.
; 459  :                 //
; 460  :                 fLockRet = UnlockPages
; 461  :                 ( 
; 462  :                     m_pucDmaBuffer,
; 463  :                     pSgBuf[0].sb_len
; 464  :                 );

  00114	e5961004	 ldr         r1, [r6, #4]
  00118	eb000000	 bl          UnlockPages

; 465  :                 ASSERT(fLockRet);
; 466  :             }
; 467  :         }
; 468  :     }
; 469  :     else

  0011c	ea000000	 b           |$L33031|
  00120		 |$L33020|

; 470  :     {
; 471  :         m_fAligned = FALSE;    

  00120	e585a04c	 str         r10, [r5, #0x4C]
  00124		 |$L33031|

; 472  :     }
; 473  : 
; 474  :     //
; 475  :     // If the pSgBuf are unaligned copy the entire buffer to our buffer.
; 476  :     //
; 477  :     if(!m_fAligned )

  00124	e595304c	 ldr         r3, [r5, #0x4C]
  00128	e3530000	 cmp         r3, #0
  0012c	1a000017	 bne         |$L33032|

⌨️ 快捷键说明

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