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

📄 cf_ifc.h

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 H
📖 第 1 页 / 共 4 页
字号:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES.
//
/** @file CF_IFC.h
 *  @ Header file for the compact flash interface.
 *    Contains data definitions and prototypes that define one instance of 
 *    the compact flash interface.
 *
 *  Copyright (c) Marvell Semiconductor, Inc. 
 */
 
#define CF_Signature 0xDEADBEEF
//------------------------------------------------------------------------------------
// This structure defines a compact flash interface object. An instance of this structure
//	will be passed to all calls in the CF interace.
//------------------------------------------------------------------------------------
 typedef struct
 {
 	ULONG			ulSignatureTop;			// CF object top signature. Nothing above this data.
	ULONG                  ulMrvDrvVirtualIoBase;
	USHORT			cfHostIntMask;			// Current device interrupt mask.

	//----------------------------------------------------
	// Transmit related members
	//----------------------------------------------------
	BOOLEAN 		bTxPacketOpen;			// Set if TX packet is open.
	ULONG   			ulTxPacketSize;			// size in bytes of current packet.
	ULONG			ulTxPacketByteCount;		// number of bytes transmitted in current tx packet.

	//----------------------------------------------------
	// Receive related members
	//----------------------------------------------------
	BOOLEAN 		bRxPacketOpen;			// Set if RX packet is open.
	ULONG   			ulRxPacketSize;			// size of current receive packet.
	ULONG			ulRxPacketByteCount;		// number of bytes transmitted in current RX packet.

	ULONG			ulSignatureBottom;			// CF object bottom signature. Nothing below this.
 } 	CF_OBJECT, *PCF_OBJECT;
 
 //-------------------------------------------------------------------------------------
 // Interface definition function prototypes. (Cf_IFC.c)
 //-------------------------------------------------------------------------------------
IX_STATUS cf_CreateIface( PVOID *iface, ULONG ioVirtRegBaseAddress );
IX_STATUS cf_DestroyIface( PVOID *iface );
IX_STATUS cf_SendCmd ( PVOID iface, USHORT *cmdBuf, USHORT cmdSizeBytes );

IX_STATUS cf_TxStartPacket(PCF_OBJECT pCf, USHORT totalPacketLengthInBytes );

IX_STATUS cf_TxPacket ( PVOID iface, UCHAR *packet, USHORT packetSizeBytes );
IX_STATUS cf_RxPacket(PVOID iface,UCHAR *packet,PUSHORT bytesRead,BOOLEAN discard);
IX_STATUS cf_IsFirmwareLoaded ( PVOID iface );
IX_STATUS cf_FirmwareDownload( PCF_OBJECT pCf,IN PMRVDRV_ADAPTER Adapter);
VOID cf_ReadCommandResponse(PMRVDRV_ADAPTER Adapter, PUCHAR buffer);

BOOLEAN cf_UseAndLockCfDownloadPath(PMRVDRV_ADAPTER  Adapter);
VOID cf_ReleaseCfDownloadPath(PMRVDRV_ADAPTER  Adapter);

VOID cf_WriteDeepSleepExit( PMRVDRV_ADAPTER  Adapter, PVOID iface);

#if DBG
void DumpMrvDrvRegs( PCF_OBJECT pCf, char *msg );
#else
#define DumpMrvDrvRegs(x,y)
#endif

 //-------------------------------------------------------------------------------------
 // Utility routine function prototypes. (CF_util.c)
 //-------------------------------------------------------------------------------------
IX_STATUS cf_InitInterface( PCF_OBJECT pCf );
IX_STATUS cf_EnableHostInterrupts( PCF_OBJECT pCf , USHORT mask );
IX_STATUS cf_DisableHostInterrupts( PCF_OBJECT pCf , USHORT mask );
IX_STATUS cf_HostBootFirmwareDownload(PCF_OBJECT pCf, IN PMRVDRV_ADAPTER Adapter);
		
 //-------------------------------------------------------------------------------------
 // Inlines for speed.
 //-------------------------------------------------------------------------------------

/******************************************************************************
 *
 * Name: DisableInterrupt()
 *
 *
 * Description: 
 *    This routine disables interrupts 
 *
 *  Arguments:
 *      DriverObject - Pointer to driver object created by the system.
 *    
 *  Return Value:
 * 
 *  Notes:                
 *
 *****************************************************************************/

__inline
VOID
DisableInterrupt(
     IN PMRVDRV_ADAPTER Adapter
)
{
    	//AllenDBGPRINT(DBG_SP,("DisableInterrupt() \n"));
    	NdisRawWritePortUshort(
  		Adapter -> ulMrvDrvVirtualIoBase + CFMACREG_HCR_HOST_INT_MASK, CFMACREG_HCR_HIM_MASK);
}


/******************************************************************************
 *
 * Name: EnableInterrupt()
 *
 *
 * Description: 
 *    This routine enables interrupts
 *
 *  Arguments:
 *      DriverObject - Pointer to driver object created by the system.
 *    
 *  Return Value:
 * 
 *  Notes:                
 *
 *****************************************************************************/

__inline
VOID
EnableInterrupt(
    IN PMRVDRV_ADAPTER Adapter
)
{
    	NDIS_STATUS Status;

	DBGPRINT(DBG_SP,("EnableInterrupt() \n"));	
	
    	//----------------------------------------------------------------------------
    	// Make sure our interrupt is registerd.
    	//----------------------------------------------------------------------------
    	if ( !Adapter->bIntRegistered )
    	{
       	DBGPRINT(DBG_ISR,("EnableInterrupt: Reregistering interupt\n"));
       	Status = NdisMRegisterInterrupt(
						&Adapter->hMrvDrvINT,
						Adapter->MrvDrvAdapterHdl,
						Adapter->MrvDrvINTVector,
						Adapter->MrvDrvINTLevel,
						TRUE,	// ISR should be called for each interrupt 
						Adapter->IntShared,    // Do what ever resource manager tells us to do 
						Adapter->tMrvDrvINTMode);		// In Windows CE.Net, this parameter is now ignored 
        	Adapter -> bIntRegistered = TRUE;       // our interrupt has been registerd.			
    	}
    
    	//DBGPRINT(DBG_WARNING,("Interrupt Enabled.\n"));
    	// PJG: fixed isr - can now enable tx.
    	// allow all interrupts except tx dnload ready.  This will unmasked 
    	// after we send a packet.
    	NdisRawWritePortUshort(
  			Adapter -> ulMrvDrvVirtualIoBase + CFMACREG_HCR_HOST_INT_MASK, 0);
  		
    	// CFMACREG_HCR_HIM_TxDnLdRdy);
}

//*************************************************************************
//* Function: 		cf_UshortRegSetBits
//*	Description:	Sets bits set in mask passed in the USHORT register specified
//*						by offset passed in.
//* Returns			IX_STATUS_SUCCESS if device is ready. IX_STATUS_DEVICE_BUSY if not.
//* Date:			04/10/2003
//*************************************************************************
__inline void cf_UshortRegSetBits( PCF_OBJECT pCf, USHORT regOffset, USHORT mask )
{
	USHORT usRegVal;
	
    	NdisRawReadPortUshort(
  			pCf -> ulMrvDrvVirtualIoBase  + regOffset,
        		&usRegVal );
    	usRegVal |= mask;		// set the bit(s).
    
	//-------------------------------------------------------------------------------
	// Set the bit in host status to indicate host cmd download is complete.
	//-------------------------------------------------------------------------------
    	NdisRawWritePortUshort(
  			pCf -> ulMrvDrvVirtualIoBase  + regOffset,
        		usRegVal );
        
}


//*************************************************************************
//* Function: 		cf_UshortRegClearBits
//*	Description:	clears bits set in mask passed in the USHORT register specified
//*						by offset passed in.
//* Returns			IX_STATUS_SUCCESS if device is ready. IX_STATUS_DEVICE_BUSY if not.
//* Date:			04/10/2003
//*************************************************************************
__inline void cf_UshortRegClearBits( PCF_OBJECT pCf, USHORT regOffset, USHORT mask )
{
	USHORT usRegVal;
	
    NdisRawReadPortUshort(
  		pCf -> ulMrvDrvVirtualIoBase  + regOffset,
        &usRegVal );
    usRegVal &= ~mask;								// set the bit(s).
    
	//-------------------------------------------------------------------------------
	// Set the bit in host status to indicate host cmd download is complete.
	//-------------------------------------------------------------------------------
    NdisRawWritePortUshort(
  		pCf -> ulMrvDrvVirtualIoBase  + regOffset,
        usRegVal );
        
}

//*************************************************************************
//* Function: 		cf_IsCmdReady
//*	Description:	Polls device cmd ready bit to see if the device is really ready.
//* Returns			IX_STATUS_SUCCESS if device is ready. IX_STATUS_DEVICE_BUSY if not.
//* Date:			04/02/2003
//*************************************************************************
__inline IX_STATUS cf_IsCmdReady(PCF_OBJECT pCf )
{
    // Set command length
    USHORT usval;

    ASSERT( pCf != NULL );
    NdisRawReadPortUshort( pCf->ulMrvDrvVirtualIoBase + CFMACREG_CCR_CARD_STATUS,
    						&usval);
    DBGPRINT(DBG_HWIF,("cf_IsCmdReady: CFMACREG_CCR_CARD_STATUS = %x\n",(ULONG)usval));
    return (usval & CFMACREG_HCR_HIM_CmdDnLdRdy) ? IX_STATUS_SUCCESS : IX_STATUS_DEVICE_BUSY;
}


//*************************************************************************
//* Function: 		cf_IsRespReady
//*	Description:	Polls device to see if the device has a cmd response waiting.
//* Returns			IX_STATUS_SUCCESS if device has response ready. 
//*						IX_STATUS_NO_RESP if not.
//* Date:			04/02/2003
//*************************************************************************
__inline IX_STATUS cf_IsRespReady(PCF_OBJECT pCf )
{
    //      Set command length
    USHORT usval;
    ASSERT( pCf != NULL );
    NdisRawReadPortUshort( pCf -> ulMrvDrvVirtualIoBase + CFMACREG_CCR_CARD_STATUS,
    						&usval);
    return (usval & CFMACREG_HCR_HIM_CmdRspRdy) ? IX_STATUS_SUCCESS : IX_STATUS_NO_RESP;
}


//*************************************************************************

⌨️ 快捷键说明

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