Home | History | Annotate | Download | only in Core_Adapt
      1 /** \file Core_AdaptTx.c
      2  *  \brief CORE Adaptation Ctrl layer implementation
      3  *
      4  *  \see CORE_AdaptTx.h
      5  */
      6 /****************************************************************************
      7 **+-----------------------------------------------------------------------+**
      8 **|                                                                       |**
      9 **| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
     10 **| All rights reserved.                                                  |**
     11 **|                                                                       |**
     12 **| Redistribution and use in source and binary forms, with or without    |**
     13 **| modification, are permitted provided that the following conditions    |**
     14 **| are met:                                                              |**
     15 **|                                                                       |**
     16 **|  * Redistributions of source code must retain the above copyright     |**
     17 **|    notice, this list of conditions and the following disclaimer.      |**
     18 **|  * Redistributions in binary form must reproduce the above copyright  |**
     19 **|    notice, this list of conditions and the following disclaimer in    |**
     20 **|    the documentation and/or other materials provided with the         |**
     21 **|    distribution.                                                      |**
     22 **|  * Neither the name Texas Instruments nor the names of its            |**
     23 **|    contributors may be used to endorse or promote products derived    |**
     24 **|    from this software without specific prior written permission.      |**
     25 **|                                                                       |**
     26 **| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
     27 **| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
     28 **| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
     29 **| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
     30 **| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
     31 **| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
     32 **| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
     33 **| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
     34 **| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
     35 **| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
     36 **| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
     37 **|                                                                       |**
     38 **+-----------------------------------------------------------------------+**
     39 ****************************************************************************/
     40 
     41 /****************************************************************************/
     42 /*                                                                          */
     43 /*    MODULE:	Core_AdaptTx.c                                            */
     44 /*    PURPOSE:  CORE Adaptation Tx layer implementation                   */
     45 /*                                                                          */
     46 /***************************************************************************/
     47 #include "report.h"
     48 #include "osApi.h"
     49 
     50 #include "paramOut.h"
     51 #include "siteHash.h"
     52 #include "configMgr.h"
     53 #include "whalCtrl_api.h"
     54 #include "Core_AdaptTx.h"
     55 #include "utils.h"
     56 #include "DataCtrl_Api.h"
     57 #include "TNETW_Driver_api.h"
     58 
     59 /* Globals */
     60 TI_HANDLE		CORE_AdaptTx_handle=NULL;
     61 
     62 /* definitions */
     63 
     64 
     65 /* Local Macros */
     66 
     67 
     68 /* Local  functions definitions*/
     69 
     70 
     71 /****************************************************************************************
     72  *                        CORE_AdaptTx_Create                                              *
     73  ****************************************************************************************
     74 DESCRIPTION:    CORE ADAPTER TX CREATION
     75 
     76 INPUT:          TI_HANDLE hOs
     77 OUTPUT:
     78 
     79 RETURN:         OK on success, NOK on failure
     80 
     81 ************************************************************************/
     82 TI_HANDLE CORE_AdaptTx_Create(TI_HANDLE hOs)
     83 {
     84 	CORE_AdaptTx_t *pCORE_AdaptTx_handle;
     85 
     86     pCORE_AdaptTx_handle = os_memoryAlloc (hOs, sizeof(CORE_AdaptTx_t));
     87     if (pCORE_AdaptTx_handle == NULL)
     88         return NULL;
     89 
     90 	pCORE_AdaptTx_handle->hOs = hOs;
     91 
     92     return (TI_HANDLE)pCORE_AdaptTx_handle;
     93 }
     94 
     95 
     96 /****************************************************************************************
     97  *                        CORE_AdaptTx_Config                                              *
     98  ****************************************************************************************
     99 DESCRIPTION:    CORE ADAPTER TX CONFIGURATION
    100 
    101 INPUT:          TI_HANDLE hOs
    102 OUTPUT:
    103 
    104 RETURN:         OK on success, NOK on failure
    105 
    106 ************************************************************************/
    107 int CORE_AdaptTx_Config (TI_HANDLE CORE_AdaptTx_handle, Core_AdaptTx_config_t *pCore_AdaptTx_config,txDataInitParams_t *txDataInitParams)
    108 {
    109     CORE_AdaptTx_t *pCore_AdaptTx = (CORE_AdaptTx_t*)CORE_AdaptTx_handle;
    110 
    111 	/*
    112 	 * handles
    113 	 */
    114 	pCore_AdaptTx->hReport = pCore_AdaptTx_config->hReport;
    115 	pCore_AdaptTx->hMemMgr = pCore_AdaptTx_config->hMemMgr;
    116 	pCore_AdaptTx->hTnetwDrv = pCore_AdaptTx_config->hTnetwDrv;
    117 	pCore_AdaptTx->hTxData = pCore_AdaptTx_config->hTxData;
    118 	pCore_AdaptTx->hCtrlData = pCore_AdaptTx_config->hCtrlData;
    119 
    120     return OK;
    121 }
    122 
    123 
    124 /****************************************************************************************
    125  *                        CORE_AdaptTx_Destroy                                              *
    126  ****************************************************************************************
    127 DESCRIPTION:    CORE ADAPTER TX DESTRUCTION
    128 
    129 INPUT:          TI_HANDLE hCore_AdaptTx - Passed even if its is global variable
    130 
    131 OUTPUT:
    132 
    133 RETURN:         OK on success, NOK on failure
    134 
    135 ************************************************************************/
    136 int CORE_AdaptTx_Destroy (TI_HANDLE hCore_AdaptTx)
    137 {
    138 	CORE_AdaptTx_t *pCore_AdaptTx=(CORE_AdaptTx_t*)hCore_AdaptTx;
    139 	int status = OK;
    140 
    141 	if(hCore_AdaptTx == NULL)
    142 	{
    143 		return OK;
    144 	}
    145 
    146     /* free the CORE_AdaptCtrl data structure*/
    147     os_memoryFree (pCore_AdaptTx->hOs, pCore_AdaptTx, sizeof(CORE_AdaptTx_t));
    148 
    149     return status;
    150 }
    151 
    152 
    153 /****************************************************************************************
    154  *                        CORE_AdaptTx_SendPacket                                              *
    155  ****************************************************************************************
    156 DESCRIPTION:    CORE ADAPTER TX SendPacket
    157 
    158 INPUT:          TI_HANDLE hCore_AdaptTx - Passed even if its is global variable
    159 
    160 OUTPUT:
    161 
    162 RETURN:         OK on success, NOK on failure
    163 
    164 ************************************************************************/
    165 
    166 
    167 TI_STATUS CORE_AdaptTx_SendPacket (TI_HANDLE hCore_AdaptTx,
    168 							 UINT8 TxQid,
    169 							 mem_MSDU_T* pMsdu,
    170 							 txData_attr_t* pTxAttr,
    171                              UINT32 packetId,
    172 							 UINT32 msduTimeToExpiry )
    173 {
    174 	void      *aFrame;
    175 	UINT16     aLength;
    176 	UINT8      aQueueId;
    177 	UINT8      aTxRateClassId;
    178 	CORE_AdaptTx_t *pCore_AdaptTx=(CORE_AdaptTx_t*)hCore_AdaptTx;
    179 
    180  	/*
    181 	 *	handling send packet parameters
    182 	 */
    183 
    184     /* Pointer to the frame actual data (right after TNETWIF_WRITE_OFFSET_BYTES and descriptor)  */
    185     aFrame = (void *)((UINT8*)memMgr_BufData(pMsdu->firstBDPtr) + TX_TOTAL_OFFSET_BEFORE_DATA);
    186 
    187 	/*
    188 	 * MSDU length. Measured from the first byte of the MAC header
    189 	 * to the last byte of the frame body.
    190 	 */
    191 	aLength = memMgr_MsduDataSize(pMsdu);
    192 
    193 	/*
    194 	 * Transmit queue as defined in ConfigureQueue
    195 	 */
    196 	aQueueId = TxQid;
    197 
    198 	/*
    199 	 * Transmit rate class ID defined in txRatePolicy
    200 	 */
    201 	aTxRateClassId = pTxAttr->txRatePolicyId;
    202 
    203     return TnetwDrv_txXfer_sendPacket (pCore_AdaptTx->hTnetwDrv,
    204 						    aFrame,
    205 	   					    aLength,
    206 						    aQueueId,
    207 						    aTxRateClassId,
    208 						    pTxAttr->HwRate,
    209 						    FALSE, /* more indication, currently ignored by GWSI */
    210 						    packetId,
    211 						    0,
    212 						    msduTimeToExpiry,
    213                                        NULL);
    214 }
    215 
    216 
    217 /* --------------------------------- Call Back ---------------------------------------------------*/
    218 
    219 /****************************************************************************************
    220  *                        SendPacketComplete                                              *
    221  ****************************************************************************************
    222 DESCRIPTION:    CORE ADAPTER TX Tx Complete callback
    223 
    224 INPUT:
    225 
    226 OUTPUT:
    227 
    228 RETURN:
    229 
    230 ************************************************************************/
    231 void SendPacketComplete (TI_HANDLE hUser,
    232                          systemStatus_e aStatus,
    233                         UINT32 aPacketId,
    234                         UINT32 aRate,
    235                         UINT8 aAckFailures,
    236                         UINT32 actualDurationInAir,
    237                         UINT32 fwHandlingTime,
    238 						UINT32 mediumDelay)
    239 {
    240 	CORE_AdaptTx_t *pCore_AdaptTx=(CORE_AdaptTx_t*)CORE_AdaptTx_handle;
    241 	txCompleteAttr_t txCompleteAttr;
    242 
    243 	WLAN_REPORT_INFORMATION(pCore_AdaptTx->hReport, CTRL_DATA_MODULE_LOG,
    244 						("SendPacketComplete: aStatus = %d\n\n",aStatus));
    245 
    246 	/*
    247 	 * Call the core  CB (TI CORE)
    248 	 */
    249 	txCompleteAttr.status              = aStatus;
    250 	txCompleteAttr.packetId            = aPacketId;
    251 	txCompleteAttr.rate                = aRate;
    252 	txCompleteAttr.ackFailures         = aAckFailures;
    253 	txCompleteAttr.actualDurationInAir = actualDurationInAir;
    254     txCompleteAttr.fwHandlingTime      = fwHandlingTime;
    255     txCompleteAttr.mediumDelay         = mediumDelay;
    256 
    257     ctrlData_txCompleteStatus (pCore_AdaptTx->hCtrlData, &txCompleteAttr);
    258 }
    259 
    260 
    261 /****************************************************************************************
    262  *                        SendPacketTransfer                                             *
    263  ****************************************************************************************
    264 DESCRIPTION:    CORE ADAPTER TX SendPacketTransfer callback
    265 
    266 INPUT:
    267 
    268 OUTPUT:
    269 
    270 RETURN:
    271 
    272 ************************************************************************/
    273 void SendPacketTransfer (TI_HANDLE hUser, UINT32 aPacketId)
    274 {
    275     CORE_AdaptTx_t *pCore_AdaptTx = (CORE_AdaptTx_t*)CORE_AdaptTx_handle;
    276 
    277     txData_sendPacketTransfer (pCore_AdaptTx->hTxData, aPacketId);
    278 }
    279 
    280 
    281 /****************************************************************************************
    282  *                        SendPacketDebug                                               *
    283  ****************************************************************************************
    284 DESCRIPTION:    CORE ADAPTER TX SendPacketDebug callback
    285 
    286 INPUT:
    287 
    288 OUTPUT:
    289 
    290 RETURN:
    291 
    292 ************************************************************************/
    293 #ifdef TI_DBG
    294 void SendPacketDebug (TI_HANDLE hUser, UINT32 uPacketId, UINT32 uDebugInfo)
    295 {
    296     CORE_AdaptTx_t *pCore_AdaptTx = (CORE_AdaptTx_t *)CORE_AdaptTx_handle;
    297 
    298     txData_sendPacketDebug (pCore_AdaptTx->hTxData, uPacketId, uDebugInfo);
    299 }
    300 #endif
    301