Home | History | Annotate | Download | only in MacServices
      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  *****************************************************************************************
     51 DESCRIPTION: Creates MacServices module
     52 
     53 INPUT:          hOS - handle to the OS object.
     54 OUTPUT:
     55 RETURN:     handle to MacServices Object, NULL on failure .
     56 ****************************************************************************************/
     57 
     58 TI_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  *****************************************************************************************
    105 DESCRIPTION: destroys MacServices module
    106 
    107 INPUT:          hMacServices - handle to the Mac Services object.
    108 OUTPUT:
    109 RETURN:
    110 ****************************************************************************************/
    111 void 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  *****************************************************************************************
    136 DESCRIPTION: Initializes the MacServices module
    137 
    138 INPUT:    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
    141 OUTPUT:
    142 RETURN:
    143 ****************************************************************************************/
    144 void 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  *****************************************************************************************
    177 DESCRIPTION: config the MacServices moduleand sub modules
    178 
    179 INPUT:    hMacServices - handle to the Mac Services object.\n
    180         pInitParams  - pointer to the init params
    181 OUTPUT:
    182 RETURN:
    183 ****************************************************************************************/
    184 void 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  *****************************************************************************************
    199 DESCRIPTION: restart the MacServices moduleand sub modules upon recovery
    200 
    201 INPUT:    hMacServices - handle to the Mac Services object.\n
    202 OUTPUT:
    203 RETURN:
    204 ****************************************************************************************/
    205 void 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  *****************************************************************************************
    218 DESCRIPTION: register the centeral error function from the health monitor to the MacService's sub modules
    219 
    220 INPUT:    hMacServices      - handle to the Mac Services object.
    221         failureEventCB  - pointer ro the call back
    222         hFailureEventObj    -handle of the Callback Object
    223 OUTPUT:
    224 RETURN:
    225 ****************************************************************************************/
    226 
    227 void 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  ****************************************************************************************
    250 DESCRIPTION: This function is a wrapper for the power server's powerSrv_SetPsMode function
    251 
    252 INPUT:      - 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.
    257 OUTPUT:
    258 RETURN:    TI_STATUS - TI_OK / PENDING / TI_NOK.
    259 ****************************************************************************************/
    260 
    261 TI_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  ****************************************************************************************
    282 DESCRIPTION: This function is a wrapper for the power server's powerSrv_ReservePS function
    283 
    284 INPUT:      - 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.
    289 OUTPUT:
    290 RETURN:    TI_STATUS - TI_OK / PENDING / TI_NOK.
    291 ****************************************************************************************/
    292 TI_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  ****************************************************************************************
    307 DESCRIPTION: This function is a wrapper for the power server's powerSrv_ReleasePS function
    308 
    309 INPUT:      - hPowerSrv                         - handle to the PowerSrv object.
    310             - sendNullDataOnExit                -
    311             - powerSaveCBObject     - handle to the Callback function module.
    312             - powerSaveCompleteCB           - Callback function - for success/faild notification.
    313 OUTPUT:
    314 RETURN:    TI_STATUS - TI_OK / PENDING / TI_NOK.
    315 ****************************************************************************************/
    316 
    317 TI_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  *****************************************************************************************
    331 DESCRIPTION: This function is a wrapper for the power server's powerSrv_getPsStatus function
    332 
    333 INPUT:      - hPowerSrv                         - handle to the PowerSrv object.
    334 
    335 OUTPUT:
    336 RETURN:    TI_BOOL - true if the SM is in PS state -  false otherwise
    337 ****************************************************************************************/
    338 TI_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  *****************************************************************************************
    349 DESCRIPTION: This function is a wrapper for the power server's powerSrv_SetRateModulation function
    350 
    351 INPUT:      - hPowerSrv                         - handle to the PowerSrv object.
    352             - dot11mode_e - The current radio mode (A or G)
    353 
    354 OUTPUT:
    355 RETURN:    TI_BOOL - true if the SM is in PS state -  false otherwise
    356 ****************************************************************************************/
    357 void 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 
    365 TI_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