1/* 2 * MacServices.c 3 * 4 * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name Texas Instruments nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34/** \file MacServices.c 35 * \brief This file include public definitions for the scan SRV module, comprising its API. 36 * \author Yuval Adler 37 * \date 6-Oct-2005 38 */ 39 40#define __FILE_ID__ FILE_ID_109 41#include "report.h" 42#include "ScanSrv.h" 43#include "MeasurementSrv.h" 44#include "MacServices.h" 45#include "PowerSrv_API.h" 46 47 48/**************************************************************************************** 49 * MacServices_create * 50 ***************************************************************************************** 51DESCRIPTION: Creates MacServices module 52 53INPUT: hOS - handle to the OS object. 54OUTPUT: 55RETURN: handle to MacServices Object, NULL on failure . 56****************************************************************************************/ 57 58TI_HANDLE MacServices_create( TI_HANDLE hOS) 59{ 60 MacServices_t *pMacServices = (MacServices_t*)os_memoryAlloc( hOS, sizeof(MacServices_t) ); 61 if ( NULL == pMacServices ) 62 { 63 WLAN_OS_REPORT( ("ERROR: Failed to create Mac SRV module") ); 64 return NULL; 65 } 66 67 /* nullify all handles, so that only handles in existence will be released */ 68 pMacServices->hScanSRV = NULL; 69 pMacServices->hPowerSrv = NULL; 70 71 /* create the scanSRV handle */ 72 pMacServices->hScanSRV = MacServices_scanSRV_create(hOS); 73 if ( NULL == pMacServices->hScanSRV ) 74 { 75 MacServices_destroy( pMacServices ); 76 return NULL; 77 } 78 79/* create the measurment handle */ 80 pMacServices->hMeasurementSRV = MacServices_measurementSRV_create( hOS ); 81 if ( NULL == pMacServices->hMeasurementSRV ) 82 { 83 MacServices_destroy(pMacServices); 84 return NULL; 85 } 86 87 pMacServices->hPowerSrv = powerSrv_create(hOS); 88 if (NULL == pMacServices->hPowerSrv ) 89 { 90 MacServices_destroy(pMacServices); 91 return NULL; 92 } 93 94 /* store OS handle */ 95 pMacServices->hOS = hOS; 96 97 return pMacServices; 98} 99 100 101 102/**************************************************************************************** 103 * MacServices_destroy * 104 ***************************************************************************************** 105DESCRIPTION: destroys MacServices module 106 107INPUT: hMacServices - handle to the Mac Services object. 108OUTPUT: 109RETURN: 110****************************************************************************************/ 111void MacServices_destroy( TI_HANDLE hMacServices ) 112{ 113 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 114 115 /* destroy all SRV modules */ 116 if ( NULL != pMacServices->hScanSRV ) 117 { 118 MacServices_scanSRV_destroy( pMacServices->hScanSRV ); 119 } 120 if ( NULL != pMacServices->hMeasurementSRV ) 121 { 122 MacServices_measurementSRV_destroy( pMacServices->hMeasurementSRV ); 123 } 124 125 if(pMacServices->hPowerSrv) 126 powerSrv_destroy(pMacServices->hPowerSrv); 127 128 /* free the Mac services allocated context */ 129 os_memoryFree( pMacServices->hOS, (TI_HANDLE)pMacServices , sizeof(MacServices_t) ); 130} 131 132 133 /**************************************************************************************** 134 * MacServices_init * 135 ***************************************************************************************** 136DESCRIPTION: Initializes the MacServices module 137 138INPUT: hMacServices - handle to the Mac Services object.\n 139 hReport - handle to the report object.\n 140 hHalCtrl - handle to the HAL ctrl object.\n 141OUTPUT: 142RETURN: 143****************************************************************************************/ 144void MacServices_init (TI_HANDLE hMacServices, 145 TI_HANDLE hReport, 146 TI_HANDLE hTWD, 147 TI_HANDLE hCmdBld, 148 TI_HANDLE hEventMbox, 149 TI_HANDLE hTimer) 150{ 151 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 152 153 MacServices_scanSRV_init (hMacServices, hReport, hTWD, hTimer, hEventMbox, hCmdBld); 154 155 MacServices_measurementSRV_init (pMacServices->hMeasurementSRV, 156 hReport, 157 hCmdBld, 158 hEventMbox, 159 pMacServices->hPowerSrv, 160 hTimer); 161 162 if (powerSrv_init (pMacServices->hPowerSrv, 163 hReport, 164 hEventMbox, 165 hCmdBld, 166 hTimer) != TI_OK) 167 { 168 WLAN_OS_REPORT(("\n.....PowerSRV_init configuration failure \n")); 169 /*return TI_NOK;*/ 170 } 171} 172 173 174 /**************************************************************************************** 175 * MacServices_config * 176 ***************************************************************************************** 177DESCRIPTION: config the MacServices moduleand sub modules 178 179INPUT: hMacServices - handle to the Mac Services object.\n 180 pInitParams - pointer to the init params 181OUTPUT: 182RETURN: 183****************************************************************************************/ 184void MacServices_config( TI_HANDLE hMacServices, TTwdInitParams *pInitParams) 185{ 186 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 187 188 if (powerSrv_config(pMacServices->hPowerSrv,&pInitParams->tPowerSrv) != TI_OK) 189 { 190 WLAN_OS_REPORT(("\n.....PowerSRV_config failure \n")); 191 } 192 193 MacServices_scanSrv_config (pMacServices, &pInitParams->tScanSrv); 194} 195 196 /**************************************************************************************** 197 * MacServices_restart * 198 ***************************************************************************************** 199DESCRIPTION: restart the MacServices moduleand sub modules upon recovery 200 201INPUT: hMacServices - handle to the Mac Services object.\n 202OUTPUT: 203RETURN: 204****************************************************************************************/ 205void MacServices_restart (TI_HANDLE hMacServices) 206{ 207 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 208 209 scanSRV_restart (pMacServices->hScanSRV); 210 measurementSRV_restart (pMacServices->hMeasurementSRV); 211 powerSrv_restart (pMacServices->hPowerSrv); 212} 213 214 215/**************************************************************************************** 216 * MacServices_registerFailureEventCB * 217 ***************************************************************************************** 218DESCRIPTION: register the centeral error function from the health monitor to the MacService's sub modules 219 220INPUT: hMacServices - handle to the Mac Services object. 221 failureEventCB - pointer ro the call back 222 hFailureEventObj -handle of the Callback Object 223OUTPUT: 224RETURN: 225****************************************************************************************/ 226 227void MacServices_registerFailureEventCB (TI_HANDLE hMacServices, 228 void * failureEventCB, 229 TI_HANDLE hFailureEventObj) 230{ 231 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 232 233 powerSrvRegisterFailureEventCB (pMacServices->hPowerSrv, 234 failureEventCB, 235 hFailureEventObj); 236 237 measurementSRVRegisterFailureEventCB (pMacServices->hMeasurementSRV, 238 failureEventCB, 239 hFailureEventObj); 240 241 scanSRV_registerFailureEventCB (pMacServices->hScanSRV, 242 failureEventCB, 243 hFailureEventObj); 244 245} 246 247/**************************************************************************************** 248 * MacServices_powerSrv_SetPsMode * 249 **************************************************************************************** 250DESCRIPTION: This function is a wrapper for the power server's powerSrv_SetPsMode function 251 252INPUT: - hMacServices - handle to the Mac services object. 253 - psMode - Power save/Active request 254 - sendNullDataOnExit - 255 - powerSaveCBObject - handle to the Callback function module. 256 - powerSaveCompleteCB - Callback function - for success/faild notification. 257OUTPUT: 258RETURN: TI_STATUS - TI_OK / PENDING / TI_NOK. 259****************************************************************************************/ 260 261TI_STATUS MacServices_powerSrv_SetPsMode (TI_HANDLE hMacServices, 262 E80211PsMode psMode, 263 TI_BOOL sendNullDataOnExit, 264 void * powerSaveCompleteCBObject, 265 TPowerSaveCompleteCb powerSaveCompleteCB, 266 TPowerSaveResponseCb powerSavecmdResponseCB) 267{ 268 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 269 270 return powerSrv_SetPsMode (pMacServices->hPowerSrv, 271 psMode, 272 sendNullDataOnExit, 273 powerSaveCompleteCBObject, 274 powerSaveCompleteCB, 275 powerSavecmdResponseCB); 276} 277 278 279/**************************************************************************************** 280 * MacServices_powerSrv_ReservePS * 281 **************************************************************************************** 282DESCRIPTION: This function is a wrapper for the power server's powerSrv_ReservePS function 283 284INPUT: - hMacServices - handle to the Mac services object. 285 - psMode - Power save/Active request 286 - sendNullDataOnExit - 287 - powerSaveCBObject - handle to the Callback function module. 288 - powerSaveCompleteCB - Callback function - for success/faild notification. 289OUTPUT: 290RETURN: TI_STATUS - TI_OK / PENDING / TI_NOK. 291****************************************************************************************/ 292TI_STATUS MacServices_powerSrv_ReservePS( TI_HANDLE hMacServices, 293 E80211PsMode psMode, 294 TI_BOOL sendNullDataOnExit, 295 void * powerSaveCBObject, 296 TPowerSaveCompleteCb powerSaveCompleteCB) 297{ 298 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 299 300 return powerSrv_ReservePS(pMacServices->hPowerSrv,psMode,sendNullDataOnExit,powerSaveCBObject,powerSaveCompleteCB); 301} 302 303 304/**************************************************************************************** 305 * MacServices_powerSrv_ReleasePS * 306 **************************************************************************************** 307DESCRIPTION: This function is a wrapper for the power server's powerSrv_ReleasePS function 308 309INPUT: - hPowerSrv - handle to the PowerSrv object. 310 - sendNullDataOnExit - 311 - powerSaveCBObject - handle to the Callback function module. 312 - powerSaveCompleteCB - Callback function - for success/faild notification. 313OUTPUT: 314RETURN: TI_STATUS - TI_OK / PENDING / TI_NOK. 315****************************************************************************************/ 316 317TI_STATUS MacServices_powerSrv_ReleasePS( TI_HANDLE hMacServices, 318 TI_BOOL sendNullDataOnExit, 319 void * powerSaveCBObject, 320 TPowerSaveCompleteCb powerSaveCompleteCB) 321{ 322 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 323 324 return powerSrv_ReleasePS(pMacServices->hPowerSrv,sendNullDataOnExit,powerSaveCBObject,powerSaveCompleteCB); 325} 326 327 328/**************************************************************************************** 329 * MacServices_powerSrv_getPsStatus * 330 ***************************************************************************************** 331DESCRIPTION: This function is a wrapper for the power server's powerSrv_getPsStatus function 332 333INPUT: - hPowerSrv - handle to the PowerSrv object. 334 335OUTPUT: 336RETURN: TI_BOOL - true if the SM is in PS state - false otherwise 337****************************************************************************************/ 338TI_BOOL MacServices_powerSrv_getPsStatus(TI_HANDLE hMacServices) 339{ 340 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 341 342 return powerSrv_getPsStatus( pMacServices->hPowerSrv); 343} 344 345 346 /**************************************************************************************** 347 * MacServices_powerSrv_SetRateModulation * 348 ***************************************************************************************** 349DESCRIPTION: This function is a wrapper for the power server's powerSrv_SetRateModulation function 350 351INPUT: - hPowerSrv - handle to the PowerSrv object. 352 - dot11mode_e - The current radio mode (A or G) 353 354OUTPUT: 355RETURN: TI_BOOL - true if the SM is in PS state - false otherwise 356****************************************************************************************/ 357void MacServices_powerSrv_SetRateModulation(TI_HANDLE hMacServices, TI_UINT16 rate) 358{ 359 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 360 361 powerSrv_SetRateModulation( pMacServices->hPowerSrv, rate); 362} 363 364 365TI_UINT32 MacServices_powerSrv_GetRateModulation(TI_HANDLE hMacServices) 366{ 367 MacServices_t *pMacServices = (MacServices_t*)hMacServices; 368 369 return powerSrv_GetRateModulation( pMacServices->hPowerSrv); 370} 371 372 373 374 375 376 377