diff -r 5fb7af913dfd -r a828660c511c wlan_plat/wlan_busaccess_api/inc/wlansdioa.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlan_plat/wlan_busaccess_api/inc/wlansdioa.h Tue Aug 31 17:02:06 2010 +0300 @@ -0,0 +1,274 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +#ifndef WLANSDIOA_H +#define WLANSDIOA_H + +class MWlanSdioaClient; +class MWlanOsaExt; + +#include + +class WlanSdioa + { + +public: + + typedef TInt TRequestId; + + enum { KMaxFunctions = 8 }; + + enum TSdioBusWidth + { + ESdioBusWidth1 = 1, + ESdioBusWidth4 = 4 + }; + + struct TCapabilities + { + /* Capability mask (values defined in wlansdioatypes.h) */ + TUint32 iCapability; + + /* Maximum number of buffers the SDIOA client is allowed to provide in buffer lists + of the TReadRequest and TWriteRequest structures. + The value of 1 means that only a single contiguous buffer can be used. */ + TUint32 iMaxNumberOfBuffers; + + /* Length of the memory cache line (in bytes) */ + TUint32 iCacheLineLength; + }; + + struct TBufferItem + { + /* Buffer length */ + TUint32 iLength; + + /* Data buffer */ + TUint8 *iBuffer; + + /* Pointer to the next list item (NULL if this is the last item) */ + struct TBufferItem *iNext; + }; + + struct TReadRequest + { + /* Command number */ + TUint8 iCmdIndex; + + /* Function number */ + TUint8 iFunctionNum; + + /* Register address */ + TUint32 iRegAddr; + + /* Flags (defined in wlansdioatypes.h) */ + TUint32 iFlags; + + /* Receive buffer (only valid for CMD52) */ + TUint8 iRxBuffer; + + /* Receive buffer list (only valid for CMD53) */ + TBufferItem *iRxBufferList; + + /* Transfer size (bytes) */ + TUint32 iRxCount; + + /* Completion callback */ + MWlanSdioaClient* iRequestClient; + + /* Request identifier (passed back to client with callback) */ + TRequestId iRequestId; + }; + + struct TWriteRequest + { + /* Command number */ + TUint8 iCmdIndex; + + /* Function number */ + TUint8 iFunctionNum; + + /* register address */ + TUint32 iRegAddr; + + /* Flags (defined in wlansdioatypes.h) */ + TUint32 iFlags; + + /* Command argument or CMD52 byte data */ + TUint8 iTxBuffer; + + /* Transmit buffer list (only valid for CMD53) */ + TBufferItem *iTxBufferList; + + /* Transfer size (bytes) */ + TUint32 iTxCount; + + /* Completion callback */ + MWlanSdioaClient* iRequestClient; + + /* Request identifier (passed back to client with callback) */ + TRequestId iRequestId; + }; + + /** + * Destructor + * + */ + virtual ~WlanSdioa() {}; + + /** + * Create SDIOA object + * + */ + static WlanSdioa* Create(); + + /** + * Attach the OSA extension object + * + * @param aOsaExt OSA extension object + */ + void Attach( MWlanOsaExt& aOsaExt ); + + /** + * Destroy the SDIOA object + * + * @param aWlanSdioa sdioa layer object + */ + static void Destroy( WlanSdioa* aWlanSdioa ); + + /** + * Extract module capabilities + * + * @param aCapabilities capabilities of the module + */ + virtual void Capability( TCapabilities& aCapabilities ) = 0; + + /** + * Issue an SDIOA request (separate methods for read and write) + * + * @param aRequest Request structure + * @return Status of the operation + * ESuccess - The request was accepted for asynchronous + * execution and will complete later. + * Completion is notified by the SDIOA request + * completion callback. + * The SDIOA client is allowed to issue additional + * requests. + * + * EFailure - The request was not accepted for execution. + * The request completion callback will not be called. + * + * ESuccessXfer - The request was accepted and completed + * synchronously. + * The SDIOA request completion callback will not be called. + * The SDIOA client is allowed to issue additional requests. + * + * EPending - The request was accepted for asynchronous + * excecution and will complete later. + * Completion is notified by the SDIOA request + * completion callback. + * The SDIOA client is not allowed to issue additional + * requests until the completion callback has been called. + */ + virtual SDIOA::TStatus ReadRequest( TReadRequest& aRequest ) = 0; + virtual SDIOA::TStatus WriteRequest( TWriteRequest& aRequest ) = 0; + + /** + * Cancel a pending SDIOA request + * + * @param aRequestId Request ID + * @return Status of the operation + * ESuccess - The SDIOA request was cancelled. + * The completion callback will not be called. + * + * EFailure - The request could not be cancelled. + */ + virtual SDIOA::TStatus Cancel( TRequestId aRequestId ) = 0; + + /** + * Enable SDIO interrupts (multiplexed on DAT1 line) + * + * @param aEnable ETrue (enable) or EFalse (disable) + * @param aCallbackClient Pointer to the object containing the OnSDIOInterrupt callback method + * (can be omitted when aEnable == EFalse) + * @return Status of the operation + * ESuccess - SDIO interrupts were enabled. + * The MWlanSdioaClient::OnSDIOInterrupt() + * callback will be called after an + * interrupt has occurred. + * + * EFailure - SDIO interrupts could not be enabled. + */ + virtual SDIOA::TStatus EnableSDIOInterrupt( TBool aEnable, MWlanSdioaClient* aCallbackClient = NULL ) = 0; + + /** + * Initialize the SDIO device + * + * This method will perform device initialization so that the device + * will be ready for receiving CMD52 and CMD53 requests. + * The method must be called after the WLAN device has been powered on. + */ + virtual SDIOA::TStatus Initialize() = 0; + + /** + * Set the SDIO bus width + * + * @param aBusWidth SDIO bus width + * + * This method sets the SDIO bus width to 1 or 4 bits. + */ + virtual void SetBusWidth( TSdioBusWidth aBusWidth ) = 0; + + /** + * Set the SDIO bus clock speed + * + * @param aMHz SDIO bus clock speed in MHz + * + * This method sets the SDIO bus clock speed to the value + * specified by the aMHz parameter or the nearest lower + * value supported by the hardware. + */ + virtual void SetClockSpeed( TUint32 aMHz ) = 0; + +protected: + + /** + * Constructor + * + * @param aOsaExt OSA extension object + */ + explicit WlanSdioa() {}; + + /** + * Extract OSA extension + * + * @return OSA extension + */ + inline MWlanOsaExt& OsaExtCb(); + +private: + + /** + * OSA extension + */ + MWlanOsaExt* iOsaExt; + + }; + +#include + +#endif // WLANSDIOA_H