--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_plat/wlan_busaccess_api/inc/wlansdioa.h Thu Sep 02 22:23:59 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 <wlansdioatypes.h>
+
+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 <wlansdioa.inl>
+
+#endif // WLANSDIOA_H