wlan_plat/wlan_busaccess_api/inc/wlansdioa.h
author hgs
Mon, 16 Aug 2010 17:58:10 +0300
changeset 41 8e0a221dc349
permissions -rw-r--r--
201033
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: 
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#ifndef WLANSDIOA_H
hgs
parents:
diff changeset
    19
#define WLANSDIOA_H
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
class MWlanSdioaClient;
hgs
parents:
diff changeset
    22
class MWlanOsaExt;
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include <wlansdioatypes.h>
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
class WlanSdioa
hgs
parents:
diff changeset
    27
    {
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
public:
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
    typedef TInt TRequestId;
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
    enum { KMaxFunctions = 8 };
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
    enum TSdioBusWidth
hgs
parents:
diff changeset
    36
        {
hgs
parents:
diff changeset
    37
        ESdioBusWidth1 = 1,
hgs
parents:
diff changeset
    38
        ESdioBusWidth4 = 4
hgs
parents:
diff changeset
    39
        };
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
    struct TCapabilities
hgs
parents:
diff changeset
    42
        {
hgs
parents:
diff changeset
    43
        /* Capability mask (values defined in wlansdioatypes.h) */
hgs
parents:
diff changeset
    44
        TUint32 iCapability;
hgs
parents:
diff changeset
    45
        
hgs
parents:
diff changeset
    46
        /* Maximum number of buffers the SDIOA client is allowed to provide in buffer lists
hgs
parents:
diff changeset
    47
           of the TReadRequest and TWriteRequest structures.
hgs
parents:
diff changeset
    48
           The value of 1 means that only a single contiguous buffer can be used. */
hgs
parents:
diff changeset
    49
        TUint32 iMaxNumberOfBuffers;
hgs
parents:
diff changeset
    50
        
hgs
parents:
diff changeset
    51
        /* Length of the memory cache line (in bytes) */
hgs
parents:
diff changeset
    52
        TUint32 iCacheLineLength;
hgs
parents:
diff changeset
    53
        };
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
    struct TBufferItem 
hgs
parents:
diff changeset
    56
        {
hgs
parents:
diff changeset
    57
        /* Buffer length */
hgs
parents:
diff changeset
    58
        TUint32 iLength;
hgs
parents:
diff changeset
    59
        
hgs
parents:
diff changeset
    60
        /* Data buffer */
hgs
parents:
diff changeset
    61
        TUint8 *iBuffer;
hgs
parents:
diff changeset
    62
        
hgs
parents:
diff changeset
    63
        /* Pointer to the next list item (NULL if this is the last item) */
hgs
parents:
diff changeset
    64
        struct TBufferItem *iNext;
hgs
parents:
diff changeset
    65
        };
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
    struct TReadRequest
hgs
parents:
diff changeset
    68
        {
hgs
parents:
diff changeset
    69
        /* Command number */
hgs
parents:
diff changeset
    70
        TUint8 iCmdIndex;
hgs
parents:
diff changeset
    71
        
hgs
parents:
diff changeset
    72
        /* Function number */
hgs
parents:
diff changeset
    73
        TUint8 iFunctionNum;
hgs
parents:
diff changeset
    74
        
hgs
parents:
diff changeset
    75
        /* Register address */
hgs
parents:
diff changeset
    76
        TUint32 iRegAddr;
hgs
parents:
diff changeset
    77
        
hgs
parents:
diff changeset
    78
        /* Flags (defined in wlansdioatypes.h) */
hgs
parents:
diff changeset
    79
        TUint32 iFlags;
hgs
parents:
diff changeset
    80
        
hgs
parents:
diff changeset
    81
        /* Receive buffer (only valid for CMD52) */
hgs
parents:
diff changeset
    82
        TUint8 iRxBuffer;
hgs
parents:
diff changeset
    83
        
hgs
parents:
diff changeset
    84
        /* Receive buffer list (only valid for CMD53) */
hgs
parents:
diff changeset
    85
        TBufferItem *iRxBufferList;
hgs
parents:
diff changeset
    86
        
hgs
parents:
diff changeset
    87
        /* Transfer size (bytes) */
hgs
parents:
diff changeset
    88
        TUint32 iRxCount;
hgs
parents:
diff changeset
    89
        
hgs
parents:
diff changeset
    90
        /* Completion callback */
hgs
parents:
diff changeset
    91
        MWlanSdioaClient* iRequestClient;
hgs
parents:
diff changeset
    92
        
hgs
parents:
diff changeset
    93
        /* Request identifier (passed back to client with callback) */
hgs
parents:
diff changeset
    94
        TRequestId iRequestId;
hgs
parents:
diff changeset
    95
        };
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
    struct TWriteRequest
hgs
parents:
diff changeset
    98
        {
hgs
parents:
diff changeset
    99
        /* Command number */
hgs
parents:
diff changeset
   100
        TUint8 iCmdIndex;
hgs
parents:
diff changeset
   101
        
hgs
parents:
diff changeset
   102
        /* Function number */
hgs
parents:
diff changeset
   103
        TUint8 iFunctionNum;
hgs
parents:
diff changeset
   104
        
hgs
parents:
diff changeset
   105
        /* register address */
hgs
parents:
diff changeset
   106
        TUint32 iRegAddr;
hgs
parents:
diff changeset
   107
        
hgs
parents:
diff changeset
   108
        /* Flags (defined in wlansdioatypes.h) */
hgs
parents:
diff changeset
   109
        TUint32 iFlags;
hgs
parents:
diff changeset
   110
        
hgs
parents:
diff changeset
   111
        /* Command argument or CMD52 byte data */
hgs
parents:
diff changeset
   112
        TUint8 iTxBuffer;
hgs
parents:
diff changeset
   113
        
hgs
parents:
diff changeset
   114
        /* Transmit buffer list (only valid for CMD53) */
hgs
parents:
diff changeset
   115
        TBufferItem *iTxBufferList;
hgs
parents:
diff changeset
   116
        
hgs
parents:
diff changeset
   117
        /* Transfer size (bytes) */
hgs
parents:
diff changeset
   118
        TUint32 iTxCount;
hgs
parents:
diff changeset
   119
        
hgs
parents:
diff changeset
   120
        /* Completion callback */
hgs
parents:
diff changeset
   121
        MWlanSdioaClient* iRequestClient;
hgs
parents:
diff changeset
   122
        
hgs
parents:
diff changeset
   123
        /* Request identifier (passed back to client with callback) */
hgs
parents:
diff changeset
   124
        TRequestId iRequestId;
hgs
parents:
diff changeset
   125
        };
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
    /**
hgs
parents:
diff changeset
   128
     * Destructor
hgs
parents:
diff changeset
   129
     *
hgs
parents:
diff changeset
   130
     */
hgs
parents:
diff changeset
   131
    virtual ~WlanSdioa() {};
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
    /**
hgs
parents:
diff changeset
   134
     * Create SDIOA object
hgs
parents:
diff changeset
   135
     *
hgs
parents:
diff changeset
   136
     */
hgs
parents:
diff changeset
   137
    static WlanSdioa* Create();
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
    /**
hgs
parents:
diff changeset
   140
     * Attach the OSA extension object
hgs
parents:
diff changeset
   141
     *
hgs
parents:
diff changeset
   142
     * @param aOsaExt OSA extension object
hgs
parents:
diff changeset
   143
     */
hgs
parents:
diff changeset
   144
    void Attach( MWlanOsaExt& aOsaExt );
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
    /**
hgs
parents:
diff changeset
   147
     * Destroy the SDIOA object
hgs
parents:
diff changeset
   148
     *
hgs
parents:
diff changeset
   149
     * @param aWlanSdioa sdioa layer object
hgs
parents:
diff changeset
   150
     */
hgs
parents:
diff changeset
   151
    static void Destroy( WlanSdioa* aWlanSdioa );
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
    /**
hgs
parents:
diff changeset
   154
     * Extract module capabilities
hgs
parents:
diff changeset
   155
     *
hgs
parents:
diff changeset
   156
     * @param aCapabilities capabilities of the module
hgs
parents:
diff changeset
   157
     */    
hgs
parents:
diff changeset
   158
    virtual void Capability( TCapabilities& aCapabilities ) = 0;        
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
    /**
hgs
parents:
diff changeset
   161
     * Issue an SDIOA request (separate methods for read and write)
hgs
parents:
diff changeset
   162
     *
hgs
parents:
diff changeset
   163
     * @param aRequest Request structure
hgs
parents:
diff changeset
   164
     * @return Status of the operation
hgs
parents:
diff changeset
   165
     *         ESuccess     -   The request was accepted for asynchronous
hgs
parents:
diff changeset
   166
     *                          execution and will complete later.
hgs
parents:
diff changeset
   167
     *                          Completion is notified by the SDIOA request
hgs
parents:
diff changeset
   168
     *                          completion callback.
hgs
parents:
diff changeset
   169
     *                          The SDIOA client is allowed to issue additional
hgs
parents:
diff changeset
   170
     *                          requests.
hgs
parents:
diff changeset
   171
     *
hgs
parents:
diff changeset
   172
     *         EFailure     -   The request was not accepted for execution.
hgs
parents:
diff changeset
   173
     *                          The request completion callback will not be called.
hgs
parents:
diff changeset
   174
     *
hgs
parents:
diff changeset
   175
     *         ESuccessXfer -   The request was accepted and completed
hgs
parents:
diff changeset
   176
     *                          synchronously.
hgs
parents:
diff changeset
   177
     *                          The SDIOA request completion callback will not be called.
hgs
parents:
diff changeset
   178
     *                          The SDIOA client is allowed to issue additional requests.
hgs
parents:
diff changeset
   179
     *
hgs
parents:
diff changeset
   180
     *         EPending     -   The request was accepted for asynchronous
hgs
parents:
diff changeset
   181
     *                          excecution and will complete later.
hgs
parents:
diff changeset
   182
     *                          Completion is notified by the SDIOA request
hgs
parents:
diff changeset
   183
     *                          completion callback.
hgs
parents:
diff changeset
   184
     *                          The SDIOA client is not allowed to issue additional
hgs
parents:
diff changeset
   185
     *                          requests until the completion callback has been called.
hgs
parents:
diff changeset
   186
     */
hgs
parents:
diff changeset
   187
    virtual SDIOA::TStatus ReadRequest( TReadRequest& aRequest ) = 0;
hgs
parents:
diff changeset
   188
    virtual SDIOA::TStatus WriteRequest( TWriteRequest& aRequest ) = 0;
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    /**
hgs
parents:
diff changeset
   191
     * Cancel a pending SDIOA request
hgs
parents:
diff changeset
   192
     *
hgs
parents:
diff changeset
   193
     * @param aRequestId Request ID
hgs
parents:
diff changeset
   194
     * @return Status of the operation
hgs
parents:
diff changeset
   195
     *         ESuccess     -   The SDIOA request was cancelled.
hgs
parents:
diff changeset
   196
     *                          The completion callback will not be called.
hgs
parents:
diff changeset
   197
     *
hgs
parents:
diff changeset
   198
     *         EFailure     -   The request could not be cancelled.
hgs
parents:
diff changeset
   199
     */
hgs
parents:
diff changeset
   200
    virtual SDIOA::TStatus Cancel( TRequestId aRequestId ) = 0;
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
    /**
hgs
parents:
diff changeset
   203
     * Enable SDIO interrupts (multiplexed on DAT1 line)
hgs
parents:
diff changeset
   204
     *
hgs
parents:
diff changeset
   205
     * @param aEnable ETrue (enable) or EFalse (disable)
hgs
parents:
diff changeset
   206
     * @param aCallbackClient Pointer to the object containing the OnSDIOInterrupt callback method
hgs
parents:
diff changeset
   207
     *                        (can be omitted when aEnable == EFalse)
hgs
parents:
diff changeset
   208
     * @return Status of the operation
hgs
parents:
diff changeset
   209
     *         ESuccess     -   SDIO interrupts were enabled.
hgs
parents:
diff changeset
   210
     *                          The MWlanSdioaClient::OnSDIOInterrupt()
hgs
parents:
diff changeset
   211
     *                          callback will be called after an
hgs
parents:
diff changeset
   212
     *                          interrupt has occurred.
hgs
parents:
diff changeset
   213
     *
hgs
parents:
diff changeset
   214
     *         EFailure     -   SDIO interrupts could not be enabled.
hgs
parents:
diff changeset
   215
     */
hgs
parents:
diff changeset
   216
	virtual SDIOA::TStatus EnableSDIOInterrupt( TBool aEnable, MWlanSdioaClient* aCallbackClient = NULL ) = 0;
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
    /**
hgs
parents:
diff changeset
   219
     * Initialize the SDIO device
hgs
parents:
diff changeset
   220
     * 
hgs
parents:
diff changeset
   221
     * This method will perform device initialization so that the device
hgs
parents:
diff changeset
   222
     * will be ready for receiving CMD52 and CMD53 requests.
hgs
parents:
diff changeset
   223
     * The method must be called after the WLAN device has been powered on.
hgs
parents:
diff changeset
   224
     */
hgs
parents:
diff changeset
   225
	virtual SDIOA::TStatus Initialize() = 0;
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
    /**
hgs
parents:
diff changeset
   228
     * Set the SDIO bus width
hgs
parents:
diff changeset
   229
     * 
hgs
parents:
diff changeset
   230
     * @param aBusWidth SDIO bus width
hgs
parents:
diff changeset
   231
     *
hgs
parents:
diff changeset
   232
     * This method sets the SDIO bus width to 1 or 4 bits.
hgs
parents:
diff changeset
   233
     */
hgs
parents:
diff changeset
   234
    virtual void SetBusWidth( TSdioBusWidth aBusWidth ) = 0;
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
    /**
hgs
parents:
diff changeset
   237
     * Set the SDIO bus clock speed
hgs
parents:
diff changeset
   238
     * 
hgs
parents:
diff changeset
   239
     * @param aMHz SDIO bus clock speed in MHz
hgs
parents:
diff changeset
   240
     *
hgs
parents:
diff changeset
   241
     * This method sets the SDIO bus clock speed to the value
hgs
parents:
diff changeset
   242
     * specified by the aMHz parameter or the nearest lower
hgs
parents:
diff changeset
   243
     * value supported by the hardware.
hgs
parents:
diff changeset
   244
     */
hgs
parents:
diff changeset
   245
    virtual void SetClockSpeed( TUint32 aMHz ) = 0;
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
protected:
hgs
parents:
diff changeset
   248
hgs
parents:
diff changeset
   249
    /**
hgs
parents:
diff changeset
   250
     * Constructor
hgs
parents:
diff changeset
   251
     *
hgs
parents:
diff changeset
   252
     * @param aOsaExt OSA extension object
hgs
parents:
diff changeset
   253
     */
hgs
parents:
diff changeset
   254
    explicit WlanSdioa() {};
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
    /**
hgs
parents:
diff changeset
   257
     * Extract OSA extension
hgs
parents:
diff changeset
   258
     *
hgs
parents:
diff changeset
   259
     * @return OSA extension
hgs
parents:
diff changeset
   260
     */
hgs
parents:
diff changeset
   261
    inline MWlanOsaExt& OsaExtCb();
hgs
parents:
diff changeset
   262
hgs
parents:
diff changeset
   263
private:
hgs
parents:
diff changeset
   264
hgs
parents:
diff changeset
   265
    /**
hgs
parents:
diff changeset
   266
     * OSA extension
hgs
parents:
diff changeset
   267
     */
hgs
parents:
diff changeset
   268
    MWlanOsaExt*    iOsaExt;
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
    };
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
#include <wlansdioa.inl>
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
#endif // WLANSDIOA_H