diff -r a828660c511c -r d3d7683d16f5 wlan_plat/wlan_spia_api/inc/wlanspia.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlan_plat/wlan_spia_api/inc/wlanspia.h Wed Sep 01 12:41:05 2010 +0100 @@ -0,0 +1,326 @@ +/* +* Copyright (c) 2007-2008 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: spia interface declaration +* +*/ + +/* +* %version: 7 % +*/ + +#ifndef WLANSPIA_H +#define WLANSPIA_H + +class MWlanSpiaClient; +class MWlanOsaExt; + +#include + +/** + * spia interface declaration + * + * + * @lib wlanpdd.pdd + * @since S60 v3.2 + */ +class WlanSpia + { + +public: + + typedef TInt TRequestId; + + /* SPI transfer clock speed. The closest one is selected if the + * exact clock frequency cannot be achieved. + * The closest is always less than the requested frequency.*/ + enum TClockSpeed + { + EClk1_5MHz = 0, + EClk3MHz, + EClk6MHz, + EClk12MHz, + EClk24MHz, + EClk48MHz, + EClk96MHz + }; + + /* SPI clock modes used for transfer. + Next picture shows what different configuration values means. + + ,--> Sampling + | ,> Shift out + | | + high/rising ______|¯|_|¯|_|¯|_ (mode 0) + + high/falling ____|¯|_|¯|_|¯|_|¯ (mode 1) + + low/falling ¯¯¯¯¯¯|_|¯|_|¯|_|¯ (mode 2) + + low/rising ¯¯¯¯|_|¯|_|¯|_|¯|_ (mode 3) + */ + enum TClockMode + { + /* SPI clock active high, sampling occurs on the rising edge */ + EPolarityHighRisingEdge = 0, + /* SPI clock active high, sampling occurs on the falling edge */ + EPolarityHighFallingEdge, + /* SPI clock active low, sampling occurs on the falling edge */ + EPolarityLowFallingEdge, + /* SPI clock active low, sampling occurs on the rising edge */ + EPolarityLowRisingEdge + }; + + /* SPI slave select signal polarity used for transfer */ + enum TSsPolarity + { + /** SS is held \e high during the active state */ + ESsPolarityHigh = 0, + /** SS is held \e low during the active state */ + ESsPolarityLow + }; + + /* SPI read mode, used when reading is done */ + enum TReadMode + { + /* normal read from SPI slave device + * (i.e no write involved for this call) */ + ENormalRead = 0, + /* write buffer is written completely + * before the read operation is done */ + EWriteB4Read, + /* full duplex mode + * Tx and Rx are done at same time + * NOTE: Tx and Rx buffers must not overlap and must be of equal size */ + ECombinedWriteRead + }; + + struct TConfig + { + /* SPI clock mode */ + TClockMode iSpiaClockMode; + /* SPI slave select signal polarity */ + TSsPolarity iSpiaSsPolarity; + /* number of bytes per frame in tx */ + TUint8 iTxBytesPerFrame; + /* number of bytes per frame in rx */ + TUint8 iRxBytsPerFrame; + }; + + /* SPI slave select mode */ + enum TSsMode + { + /* slave select is active during the whole SPI request operation */ + EForcedActive = 0, + /* slave select is toggled on SPI frame basis during the whole SPI request */ + EFrameControlled + }; + + struct TCapabilities + { + /* bit 0 - memory config support: + * bit clear non cached memory supported, bit set cached memory supported + * default value is cleared + * bit 1 - ENormalRead support in TReadMode: bit set when supported + * bit 2 - EWriteB4Read support in TReadMode: bit set when supported + * bit 3 - ECombinedWriteRead support in TReadMode: bit set when supported + * bit 4 - EForcedActive support in TSsMode: bit set when supported + * bit 5 - EFrameControlled in TSsMode: bit set when supported */ + TUint32 iCapability; + /* Length of the memory cache line in bytes (needed for buffer alignment) */ + TUint32 iCacheLineLength; + /* DMA threshold for SPI operations */ + TUint32 iDMAThreshold; + }; + + /* SPIA request structure */ + struct TRequest + { + /* tx buffer. Buffer length must be multiple of sizeof(TInt) */ + const TUint8* iTxBuffer; + /* amount of data to transmit in the tx buffer in bytes */ + TUint iTxBufferSize; + /* rx buffer. Buffer length must be multiple of sizeof(TInt) */ + TUint8* iRxBuffer; + /* amount of data to read to the rx buffer in bytes */ + TUint iRxBufferSize; + /* read operation type */ + TReadMode iReadMode; + /* complete callback method client to be called after + * the request has completed */ + MWlanSpiaClient* iRequestClient; + /* unique request ID passed back to client as + * is in SPIA request callback */ + TRequestId iRequestId; + /* SPI transfer clock speed. + * The closest one is selected if exact clock frequency + * can not be achieved. The closest is always less + * than the requested frequency. */ + TClockSpeed iSpiaClockSpeed; + /* last request or not for a while, a hint for power management + * ETrue upon last request, any other not */ + TBool iLastRequest; + /* SPI slave select mode used */ + TSsMode iSsMode; + }; + + /** + * Destructor. + * + * @since S60 v3.2 + */ + virtual ~WlanSpia() {}; + + /** + * Create spia layer object + * + * @since S60 v3.2 + * @param aOsaExt osa extension object + * @return spia layer object, NULL upon failure + * @deprecated Create() and Attach( MWlanOsaExt& ) should be used instead + */ + static WlanSpia* Create( MWlanOsaExt& aOsaExt ); + + /** + * Create spia layer object + * + * @since S60 v3.2 + * @return spia layer object, NULL upon failure + */ + static WlanSpia* Create(); + + /** + * Attach the OSA extension object + * + * @since S60 v3.2 + * @param aOsaExt osa extension object + */ + void Attach( MWlanOsaExt& aOsaExt ); + + /** + * Destroy spia layer object + * + * @since S60 v3.2 + * @param aWlanSpia spia layer object + */ + static void Destroy( WlanSpia* aWlanSpia ); + + /** + * Extract module capabilities + * + * @since S60 v3.2 + * @param aCapabilities capabilities of the module + */ + virtual void Capability( TCapabilities& aCapabilities ) { aCapabilities.iCapability = 0; } + + /** + * Configures the SPI HW block + * + * @since S60 v3.2 + * @param aConfig SPI configuration data + */ + virtual void Configure( const TConfig& aConfig ) = 0; + + /** + * Issues SPIA request + * + * NOTE: the request must remain valid until operation completes + * (either synchronously or asynchronously by completion callback). + * It is guaranteed by the system that no SPIA request complete callback + * gets called during this call + * + * @since S60 v3.2 + * @param aRequest request to execute + * @return status of the operation + * ESuccess - request was accepted for asynchronous + * excecution and will complete at a later time. + * Request completion is notified by + * SPIA request complete callback. + * SPIA user is allowed to issue additional + * requests + * + * EFailure - request was not accepted as it failed due + * unspecified reason. + * SPIA request complete callback is not called + * + * ESuccessXfer - request was accepted and completed + * synchronously inside the SPIA. + * SPIA request complete callback is not called. + * SPIA user is allowed to issue additional + * requests + * + * EPending - request was accepted for asynchronous + * excecution and will complete at later time. + * Request completion is notified by + * SPIA request complete callback. + * SPIA user is NOT allowed to issue additional + * requests until SPIA request complete callback is called + */ + virtual SPIA::TStatus Request( const TRequest& aRequest ) = 0; + + /** + * Cancels a pending SPIA request. Either succeeds or has no effect + * + * NOTE: it is guaranteed by the system that no SPIA request complete callback + * gets called during this call + * + * @since S60 v3.2 + * @param aRequestId request ID that identifies the SPIA request to cancel + * @return status of the operation + * ESuccess - operation success. + * SPIA request was cancelled and no SPIA request + * complete callback gets executed for the request + * that was cancelled + * + * + * EFailure - the request is in use and can not be cancelled. + */ + virtual SPIA::TStatus Cancel( TRequestId aRequestId ) = 0; + +protected: + + /** + * Constructor + * + * @since S60 v3.2 + */ + explicit WlanSpia() : iOsaExt( NULL ) {} + + /** + * Constructor + * + * @since S60 v3.2 + * @param aOsaExt osa extension object + */ + explicit WlanSpia( MWlanOsaExt& aOsaExt ) : iOsaExt( &aOsaExt ) {} + + /** + * Extract osa extension + * + * @since S60 v3.2 + * @return osa extension + */ + inline MWlanOsaExt& OsaExtCb(); + +private: + + /** + * osa extension + */ + MWlanOsaExt* iOsaExt; + + }; + +#include + +#endif // WLANSPIA_H