164064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
264064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
364064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
464064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
564064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
664064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
764064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
864064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
3564064216a8433360745f69edddce19a606659163The Android Open Source Project
3664064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
3764064216a8433360745f69edddce19a606659163The Android Open Source Project *
3864064216a8433360745f69edddce19a606659163The Android Open Source Project *   MODULE:  EventMbox.c : event Mail Box
3964064216a8433360745f69edddce19a606659163The Android Open Source Project *   PURPOSE: Handle any event interrupt from the FW
4064064216a8433360745f69edddce19a606659163The Android Open Source Project *
4164064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
4264064216a8433360745f69edddce19a606659163The Android Open Source Project
4364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "commonTypes.h"
4464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "FwEvent_api.h"
4564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalBus_Api.h"
4664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "eventMbox_api.h"
4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalCtrl_api.h"
4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TNETWIF.h"
4964064216a8433360745f69edddce19a606659163The Android Open Source Project
5064064216a8433360745f69edddce19a606659163The Android Open Source Project
5164064216a8433360745f69edddce19a606659163The Android Open Source Project/*******************************************************************************
5264064216a8433360745f69edddce19a606659163The Android Open Source Project *
5364064216a8433360745f69edddce19a606659163The Android Open Source Project *                               Macros
5464064216a8433360745f69edddce19a606659163The Android Open Source Project *
5564064216a8433360745f69edddce19a606659163The Android Open Source Project *******************************************************************************/
5664064216a8433360745f69edddce19a606659163The Android Open Source Project#define IS_EVENT_BIT_ON(EvVector,EvBit)  (  (EvBit) == ( (EvVector) &  (EvBit) ) )
5764064216a8433360745f69edddce19a606659163The Android Open Source Project#define IS_EVENT_BIT_OFF(EvVector,EvBit) ( ~(EvBit) == ( (EvVector) | ~(EvBit) ) )
5864064216a8433360745f69edddce19a606659163The Android Open Source Project
5964064216a8433360745f69edddce19a606659163The Android Open Source Project#define SET_EVENT_BIT(EvVector,EvBit)    ( (EvVector) |=  (EvBit) )
6064064216a8433360745f69edddce19a606659163The Android Open Source Project#define CLEAR_EVENT_BIT(EvVector,EvBit)  ( (EvVector) &= ~(EvBit) )
6164064216a8433360745f69edddce19a606659163The Android Open Source Project
6264064216a8433360745f69edddce19a606659163The Android Open Source Project#define EVENT_REPORT_SIZE 80
6364064216a8433360745f69edddce19a606659163The Android Open Source Project
6464064216a8433360745f69edddce19a606659163The Android Open Source Project#define EVMBX_DBG 1
6564064216a8433360745f69edddce19a606659163The Android Open Source Project
6664064216a8433360745f69edddce19a606659163The Android Open Source Project
6764064216a8433360745f69edddce19a606659163The Android Open Source Project/*****************************************************************************
6864064216a8433360745f69edddce19a606659163The Android Open Source Project **         Enumerations                                                    **
6964064216a8433360745f69edddce19a606659163The Android Open Source Project *****************************************************************************/
7064064216a8433360745f69edddce19a606659163The Android Open Source Project
7164064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum
7264064216a8433360745f69edddce19a606659163The Android Open Source Project{
7364064216a8433360745f69edddce19a606659163The Android Open Source Project    EVENT_MBOX_STATE_IDLE,
7464064216a8433360745f69edddce19a606659163The Android Open Source Project    EVENT_MBOX_STATE_READ_BUF,
7564064216a8433360745f69edddce19a606659163The Android Open Source Project    EVENT_MBOX_STATE_ACK_EVENT
7664064216a8433360745f69edddce19a606659163The Android Open Source Project} EventMboxState_e;
7764064216a8433360745f69edddce19a606659163The Android Open Source Project
7864064216a8433360745f69edddce19a606659163The Android Open Source Project
7964064216a8433360745f69edddce19a606659163The Android Open Source Project/*****************************************************************************
8064064216a8433360745f69edddce19a606659163The Android Open Source Project **         Structures                                                      **
8164064216a8433360745f69edddce19a606659163The Android Open Source Project *****************************************************************************/
8264064216a8433360745f69edddce19a606659163The Android Open Source Project
8364064216a8433360745f69edddce19a606659163The Android Open Source Project/*
8464064216a8433360745f69edddce19a606659163The Android Open Source Project * Definition for the Event Table
8564064216a8433360745f69edddce19a606659163The Android Open Source Project */
8664064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct
8764064216a8433360745f69edddce19a606659163The Android Open Source Project{
8864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Event bit mask */
8964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32              bitMask;
9064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Event trace string */
9164064216a8433360745f69edddce19a606659163The Android Open Source Project    char*               str;
9264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Event data length */
9364064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               dataLen;
9464064216a8433360745f69edddce19a606659163The Android Open Source Project} EventEntry_t;
9564064216a8433360745f69edddce19a606659163The Android Open Source Project
9664064216a8433360745f69edddce19a606659163The Android Open Source Project
9764064216a8433360745f69edddce19a606659163The Android Open Source Project/*
9864064216a8433360745f69edddce19a606659163The Android Open Source Project * Event callback structure
9964064216a8433360745f69edddce19a606659163The Android Open Source Project */
10064064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct
10164064216a8433360745f69edddce19a606659163The Android Open Source Project{
10264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Event callback function */
10364064216a8433360745f69edddce19a606659163The Android Open Source Project    void*               fCb;
10464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Event callback module handle */
10564064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE           hCb;
10664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Event data offset */
10764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8*              pDataOffs;
10864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Event callback counter */
10964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32              uCount;
11064064216a8433360745f69edddce19a606659163The Android Open Source Project} EventCB_t;
11164064216a8433360745f69edddce19a606659163The Android Open Source Project
11264064216a8433360745f69edddce19a606659163The Android Open Source Project
11364064216a8433360745f69edddce19a606659163The Android Open Source Project/*
11464064216a8433360745f69edddce19a606659163The Android Open Source Project *  Event Mailbox object
11564064216a8433360745f69edddce19a606659163The Android Open Source Project */
11664064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct
11764064216a8433360745f69edddce19a606659163The Android Open Source Project{
11864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Offset for event A (0) or event B (1) */
11964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32              offset[2];
12064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 0 or 1 according to event A or B */
12164064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32              currentEvent;
12264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Event mail box state machine state */
12364064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMboxState_e    state;
12464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Return value */
12564064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS           returnValue;
12664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Init complete flag */
12764064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                bInitComplete;
12864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Indicate if we are in synchronous bus or not */
12964064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                bSync;
13064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Callback table */
13164064216a8433360745f69edddce19a606659163The Android Open Source Project    EventCB_t           cbTable[MAX_NUM_OF_EVENT];
13264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Use a struct to read buffers from the bus - used for extra bytes reserving */
13364064216a8433360745f69edddce19a606659163The Android Open Source Project    PADDING (EventMailBox_t  CompoundEvent)
13464064216a8433360745f69edddce19a606659163The Android Open Source Project
13564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Handles */
13664064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE           hFwEvent;
13764064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE           hTNETWIF;
13864064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE           hOs;
13964064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE           hReport;
14064064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE           hWhalCtrl;
14164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
14264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Count the compound event */
14364064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32              uCompounEvCount;
14464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Count the total number of event sending in the compound */
14564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32              uTotalEvCount;
14664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* TI_DBG */
14764064216a8433360745f69edddce19a606659163The Android Open Source Project
14864064216a8433360745f69edddce19a606659163The Android Open Source Project    TNETWIF_callback_t  fCb;
14964064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE           hCb;
15064064216a8433360745f69edddce19a606659163The Android Open Source Project} EventMbox_t;
15164064216a8433360745f69edddce19a606659163The Android Open Source Project
15264064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
15364064216a8433360745f69edddce19a606659163The Android Open Source Project/*                      Internal functions prototypes.                          */
15464064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
15564064216a8433360745f69edddce19a606659163The Android Open Source Project
15664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void eventMbox_HandleEvent  (TI_HANDLE hEventMbox);
15764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void eventMbox_StateMachine (TI_HANDLE hEventMbox, UINT8 module_id, TI_STATUS status);
15864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void eventMbox_InitCbTable  (TI_HANDLE hEventMbox);
15964064216a8433360745f69edddce19a606659163The Android Open Source Project
16064064216a8433360745f69edddce19a606659163The Android Open Source Project
16164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic const EventEntry_t eventTable [MAX_NUM_OF_EVENT] =
16264064216a8433360745f69edddce19a606659163The Android Open Source Project{
16364064216a8433360745f69edddce19a606659163The Android Open Source Project/*==================================================================================
16464064216a8433360745f69edddce19a606659163The Android Open Source Project|                                                                                  |
16564064216a8433360745f69edddce19a606659163The Android Open Source Project|                                     EVENT TABLE                                  |
16664064216a8433360745f69edddce19a606659163The Android Open Source Project|                                                                                  |
16764064216a8433360745f69edddce19a606659163The Android Open Source Project ===================================================================================
16864064216a8433360745f69edddce19a606659163The Android Open Source Project| Id  |     Event Mask Bit                    |   Event String            | Length |
16964064216a8433360745f69edddce19a606659163The Android Open Source Project ===================================================================================*/
17064064216a8433360745f69edddce19a606659163The Android Open Source Project
17164064216a8433360745f69edddce19a606659163The Android Open Source Project/*0*/ { MEASUREMENT_START_EVENT_ID,             "MEASUREMENT START "      , 0},
17264064216a8433360745f69edddce19a606659163The Android Open Source Project/*1*/ { SCAN_COMPLETE_EVENT_ID ,                "SCAN CMPLT "             , 3},
17364064216a8433360745f69edddce19a606659163The Android Open Source Project/*2*/ { CALIBRATION_COMPLETE_EVENT_ID,          "CALIB CMPLT "            , 0},
17464064216a8433360745f69edddce19a606659163The Android Open Source Project/*3*/ { ROAMING_TRIGGER_LOW_RSSI_EVENT_ID ,     "RSSI LEVEL "             , 1},
17564064216a8433360745f69edddce19a606659163The Android Open Source Project/*4*/ { PS_REPORT_EVENT_ID,                     "PS_REPORT "              , 1},
17664064216a8433360745f69edddce19a606659163The Android Open Source Project/*5*/ { SYNCHRONIZATION_TIMEOUT_EVENT_ID,       "SYNCHRONIZATION TIMEOUT ", 0},
17764064216a8433360745f69edddce19a606659163The Android Open Source Project/*6*/ { HEALTH_REPORT_EVENT_ID,                 "HEALTH REPORT "          , 2},
17864064216a8433360745f69edddce19a606659163The Android Open Source Project/*7*/ { ACI_DETECTION_EVENT_ID ,                "ACI INDICATION "         , 2},
17964064216a8433360745f69edddce19a606659163The Android Open Source Project/*8*/ { DEBUG_REPORT_EVENT_ID,                  "DEBUG REPORT "           , 8},
18064064216a8433360745f69edddce19a606659163The Android Open Source Project/*9*/ { MAC_STATUS_EVENT_ID,                    "MAC STATUS "             , 8},
18164064216a8433360745f69edddce19a606659163The Android Open Source Project/*10*/{ DISCONNECT_EVENT_COMPLETE_ID,           "DISCONNECT COMPLETE "    , 0},
18264064216a8433360745f69edddce19a606659163The Android Open Source Project/*11*/{ JOIN_EVENT_COMPLETE_ID,                 "JOIN CMPLT "             , 0},
18364064216a8433360745f69edddce19a606659163The Android Open Source Project/*12*/{ CHANNEL_SWITCH_COMPLETE_EVENT_ID,       "SWITCH CHANNEL CMPLT "   , 0},
18464064216a8433360745f69edddce19a606659163The Android Open Source Project/*13*/{ BSS_LOSE_EVENT_ID,                      "BSS LOST "               , 0},
18564064216a8433360745f69edddce19a606659163The Android Open Source Project/*14*/{ ROAMING_TRIGGER_MAX_TX_RETRY_EVENT_ID,  "MAX TX RETRY "           , 0},
18664064216a8433360745f69edddce19a606659163The Android Open Source Project/*15*/{ MEASUREMENT_COMPLETE_EVENT_ID,          "BSS LOSE "               , 0},
18764064216a8433360745f69edddce19a606659163The Android Open Source Project/*16*/{ AP_DISCOVERY_COMPLETE_EVENT_ID,         "MAX TX RETRY "           , 0},
18864064216a8433360745f69edddce19a606659163The Android Open Source Project/*17*/{ SCHEDULED_SCAN_COMPLETE_EVENT_ID,       "SPS SCAN CMPLT "         , 3},
18964064216a8433360745f69edddce19a606659163The Android Open Source Project/*18*/{ REGAINED_BSS_EVENT_ID,                  "REGAINED BSS "           , 0},
19064064216a8433360745f69edddce19a606659163The Android Open Source Project/*19*/{ ROAMING_TRIGGER_REGAINED_RSSI_EVENT_ID, "REGAINED RSSI "          , 1},
19164064216a8433360745f69edddce19a606659163The Android Open Source Project/*20*/{ ROAMING_TRIGGER_LOW_SNR_EVENT_ID,       "LOW SNR "                , 1},
19264064216a8433360745f69edddce19a606659163The Android Open Source Project/*21*/{ SOFT_GEMINI_SENSE_EVENT_ID,             "SOFT GEMINI SENSE "      , 1},
19364064216a8433360745f69edddce19a606659163The Android Open Source Project/*22*/{ SOFT_GEMINI_PREDICTION_EVENT_ID,        "SOFT GEMINI PREDICTION " , 1},
19464064216a8433360745f69edddce19a606659163The Android Open Source Project/*23*/{ SOFT_GEMINI_AVALANCHE_EVENT_ID,         "SOFT GEMINI AVALANCHE "  , 0},
19564064216a8433360745f69edddce19a606659163The Android Open Source Project/*24*/{ PLT_RX_CALIBRATION_COMPLETE_EVENT_ID,   "PLT RX CALIBR. COMPLETE ", 0},
19664064216a8433360745f69edddce19a606659163The Android Open Source Project/*25*/{ PSPOLL_DELIVERY_FAILURE_EVENT_ID,       "PS-POLL DELIVERY FAILURE", 0},
19764064216a8433360745f69edddce19a606659163The Android Open Source Project/*26*/{ RESET_BSS_EVENT_ID,                     "EVENT RESET BSS "        , 0},
19864064216a8433360745f69edddce19a606659163The Android Open Source Project/*27*/{ EVENT_MBOX_ALL_EVENT_ID,                "ALL EVENTS "             , 0},
19964064216a8433360745f69edddce19a606659163The Android Open Source Project
20064064216a8433360745f69edddce19a606659163The Android Open Source Project};
20164064216a8433360745f69edddce19a606659163The Android Open Source Project
20264064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
20364064216a8433360745f69edddce19a606659163The Android Open Source Project/*                   functions implementation                                   */
20464064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
20564064216a8433360745f69edddce19a606659163The Android Open Source Project
20664064216a8433360745f69edddce19a606659163The Android Open Source Project
20764064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
20864064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_InitCbTable()
20964064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
21064064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: Initialization of callback table
21164064216a8433360745f69edddce19a606659163The Android Open Source Project *
21264064216a8433360745f69edddce19a606659163The Android Open Source Project * INPUTS:  hEventMbox       eventMbox module handle
21364064216a8433360745f69edddce19a606659163The Android Open Source Project *
21464064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: none
21564064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
21664064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid eventMbox_InitCbTable (TI_HANDLE hEventMbox)
21764064216a8433360745f69edddce19a606659163The Android Open Source Project{
21864064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
21964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32       EvID;
22064064216a8433360745f69edddce19a606659163The Android Open Source Project
22164064216a8433360745f69edddce19a606659163The Android Open Source Project    for (EvID = 0; EvID < MAX_NUM_OF_EVENT; EvID++)
22264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
22364064216a8433360745f69edddce19a606659163The Android Open Source Project        pEventMbox->cbTable[EvID].pDataOffs = (UINT8*)&pEventMbox->CompoundEvent;
22464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
22564064216a8433360745f69edddce19a606659163The Android Open Source Project
22664064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[ 3].pDataOffs += offsetof (EventMailBox_t, averageRssiLevel);
22764064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[ 4].pDataOffs += offsetof (EventMailBox_t, psStatus);
22864064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[ 6].pDataOffs += offsetof (EventMailBox_t, healthReport);
22964064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[ 7].pDataOffs += offsetof (EventMailBox_t, badFFTCorrelationCounter);
23064064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[ 8].pDataOffs += offsetof (EventMailBox_t, debugReport);
23164064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[ 9].pDataOffs += offsetof (EventMailBox_t, consFcsErrCnt);
23264064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[17].pDataOffs += offsetof (EventMailBox_t, scheduledScanStatus);
23364064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[19].pDataOffs += offsetof (EventMailBox_t, averageRssiLevel);
23464064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[20].pDataOffs += offsetof (EventMailBox_t, averageSNRLevel);
23564064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[21].pDataOffs += offsetof (EventMailBox_t, softGeminiSenseInfo);
23664064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[22].pDataOffs += offsetof (EventMailBox_t, softGeminiProtectiveInfo);
23764064216a8433360745f69edddce19a606659163The Android Open Source Project}
23864064216a8433360745f69edddce19a606659163The Android Open Source Project
23964064216a8433360745f69edddce19a606659163The Android Open Source Project
24064064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
24164064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_Create()
24264064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
24364064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: Create the Bus Access mailbox object
24464064216a8433360745f69edddce19a606659163The Android Open Source Project *
24564064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: The Created object
24664064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
24764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE eventMbox_Create (TI_HANDLE hOs)
24864064216a8433360745f69edddce19a606659163The Android Open Source Project{
24964064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox;
25064064216a8433360745f69edddce19a606659163The Android Open Source Project
25164064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox = os_memoryAlloc (hOs, sizeof(EventMbox_t));
25264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pEventMbox == NULL)
25364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
25464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT (("eventMbox_Create: Error creating EventMbox object\n"));
25564064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
25664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
25764064216a8433360745f69edddce19a606659163The Android Open Source Project
25864064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero (hOs, pEventMbox, sizeof(EventMbox_t));
25964064216a8433360745f69edddce19a606659163The Android Open Source Project
26064064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->hOs = hOs;
26164064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->CompoundEvent.eventsMask = EVENT_MBOX_ALL_EVENT_ID;
26264064216a8433360745f69edddce19a606659163The Android Open Source Project
26364064216a8433360745f69edddce19a606659163The Android Open Source Project    return (TI_HANDLE)pEventMbox;
26464064216a8433360745f69edddce19a606659163The Android Open Source Project}
26564064216a8433360745f69edddce19a606659163The Android Open Source Project
26664064216a8433360745f69edddce19a606659163The Android Open Source Project
26764064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
26864064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_Destroy()
26964064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
27064064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: Destroy the object
27164064216a8433360745f69edddce19a606659163The Android Open Source Project *
27264064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
27364064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid eventMbox_Destroy (TI_HANDLE hEventMbox)
27464064216a8433360745f69edddce19a606659163The Android Open Source Project{
27564064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
27664064216a8433360745f69edddce19a606659163The Android Open Source Project
27764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pEventMbox)
27864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
27964064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryFree (pEventMbox->hOs, pEventMbox, sizeof(EventMbox_t));
28064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
28164064216a8433360745f69edddce19a606659163The Android Open Source Project}
28264064216a8433360745f69edddce19a606659163The Android Open Source Project
28364064216a8433360745f69edddce19a606659163The Android Open Source Project
28464064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
28564064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_Config()
28664064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
28764064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: Configure the object
28864064216a8433360745f69edddce19a606659163The Android Open Source Project *
28964064216a8433360745f69edddce19a606659163The Android Open Source Project * INPUTS: pEventMbox   this
29064064216a8433360745f69edddce19a606659163The Android Open Source Project *         pHwIntr          Interrupt Object object
29164064216a8433360745f69edddce19a606659163The Android Open Source Project *         hReport          Report Object
29264064216a8433360745f69edddce19a606659163The Android Open Source Project *
29364064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: OK or NOK
29464064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
29564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid eventMbox_Config (TI_HANDLE hEventMbox, TI_HANDLE hTNETWIF, TI_HANDLE hHwIntr,
29664064216a8433360745f69edddce19a606659163The Android Open Source Project                       TI_HANDLE hReport,    TI_HANDLE hFwEvent, TI_HANDLE hWhalCtrl)
29764064216a8433360745f69edddce19a606659163The Android Open Source Project{
29864064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
29964064216a8433360745f69edddce19a606659163The Android Open Source Project
30064064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->hTNETWIF = hTNETWIF;
30164064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->hReport = hReport;
30264064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->hFwEvent = hFwEvent;
30364064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->hWhalCtrl = hWhalCtrl;
30464064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->hReport = hReport;
30564064216a8433360745f69edddce19a606659163The Android Open Source Project
30664064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->state = EVENT_MBOX_STATE_IDLE;
30764064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->bInitComplete = FALSE;
30864064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->CompoundEvent.eventsVector = 0;
30964064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->currentEvent = 0;
31064064216a8433360745f69edddce19a606659163The Android Open Source Project
31164064216a8433360745f69edddce19a606659163The Android Open Source Project    /*
31264064216a8433360745f69edddce19a606659163The Android Open Source Project     * NOTE: don't set eventsMask = 0xffffffff;
31364064216a8433360745f69edddce19a606659163The Android Open Source Project     *       its value is used after recovery has finished
31464064216a8433360745f69edddce19a606659163The Android Open Source Project     */
31564064216a8433360745f69edddce19a606659163The Android Open Source Project
31664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Init callback table */
31764064216a8433360745f69edddce19a606659163The Android Open Source Project    eventMbox_InitCbTable (hEventMbox);
31864064216a8433360745f69edddce19a606659163The Android Open Source Project}
31964064216a8433360745f69edddce19a606659163The Android Open Source Project
32064064216a8433360745f69edddce19a606659163The Android Open Source Project
32164064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
32264064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_InitComplete()
32364064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
32464064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: ReConfigure the object, Send the Mask Vector to the FW
32564064216a8433360745f69edddce19a606659163The Android Open Source Project *
32664064216a8433360745f69edddce19a606659163The Android Open Source Project * INPUTS:  pEventMbox      this
32764064216a8433360745f69edddce19a606659163The Android Open Source Project *
32864064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS:
32964064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
33064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid eventMbox_InitComplete (TI_HANDLE hEventMbox)
33164064216a8433360745f69edddce19a606659163The Android Open Source Project{
33264064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
33364064216a8433360745f69edddce19a606659163The Android Open Source Project
33464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
33564064216a8433360745f69edddce19a606659163The Android Open Source Project        ("eventMbox_InitComplete: mask=0x%x\n", pEventMbox->CompoundEvent.eventsMask));
33664064216a8433360745f69edddce19a606659163The Android Open Source Project
33764064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->bInitComplete = TRUE;
33864064216a8433360745f69edddce19a606659163The Android Open Source Project
33964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Enable Events Interrupts */
34064064216a8433360745f69edddce19a606659163The Android Open Source Project    FwEvent_Enable (pEventMbox->hFwEvent, ACX_INTR_EVENT_A);
34164064216a8433360745f69edddce19a606659163The Android Open Source Project    FwEvent_Enable (pEventMbox->hFwEvent, ACX_INTR_EVENT_B);
34264064216a8433360745f69edddce19a606659163The Android Open Source Project
34364064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_SetInfoElemEventMask (pEventMbox->hWhalCtrl, pEventMbox->CompoundEvent.eventsMask);
34464064216a8433360745f69edddce19a606659163The Android Open Source Project}
34564064216a8433360745f69edddce19a606659163The Android Open Source Project
34664064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
34764064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_Stop()
34864064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
34964064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION:	Stop the object while recovery until Init Complete.
35064064216a8433360745f69edddce19a606659163The Android Open Source Project *
35164064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS:	OK or NOK
35264064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
35364064216a8433360745f69edddce19a606659163The Android Open Source Projectint eventMbox_Stop(TI_HANDLE hEventMbox)
35464064216a8433360745f69edddce19a606659163The Android Open Source Project{
35564064216a8433360745f69edddce19a606659163The Android Open Source Project	EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
35664064216a8433360745f69edddce19a606659163The Android Open Source Project
35764064216a8433360745f69edddce19a606659163The Android Open Source Project	pEventMbox->state = EVENT_MBOX_STATE_IDLE;
35864064216a8433360745f69edddce19a606659163The Android Open Source Project	pEventMbox->CompoundEvent.eventsVector = 0;
35964064216a8433360745f69edddce19a606659163The Android Open Source Project	pEventMbox->currentEvent = 0;
36064064216a8433360745f69edddce19a606659163The Android Open Source Project	pEventMbox->bInitComplete = FALSE;
36164064216a8433360745f69edddce19a606659163The Android Open Source Project
36264064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
36364064216a8433360745f69edddce19a606659163The Android Open Source Project}
36464064216a8433360745f69edddce19a606659163The Android Open Source Project
36564064216a8433360745f69edddce19a606659163The Android Open Source Project
36664064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
36764064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_ConfigCb()
36864064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
36964064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION:Read the SRAM Event mailbox address callback
37064064216a8433360745f69edddce19a606659163The Android Open Source Project *
37164064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: None
37264064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
37364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void eventMbox_ConfigCb (TI_HANDLE hEventMbox, UINT8 module_id, TI_STATUS status)
37464064216a8433360745f69edddce19a606659163The Android Open Source Project{
37564064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
37664064216a8433360745f69edddce19a606659163The Android Open Source Project
37764064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->offset[1] = pEventMbox->offset[0] + sizeof(EventMailBox_t);
37864064216a8433360745f69edddce19a606659163The Android Open Source Project
37964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INIT (pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
38064064216a8433360745f69edddce19a606659163The Android Open Source Project                      ("eventMbox_ConfigCb: event A offset=0x%x, event B offset=0x%x, sizeof=%d\n",
38164064216a8433360745f69edddce19a606659163The Android Open Source Project                      pEventMbox->offset[0], pEventMbox->offset[1], sizeof(EventMailBox_t)));
38264064216a8433360745f69edddce19a606659163The Android Open Source Project
38364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Call upper layer callback */
38464064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->fCb (pEventMbox->hCb, module_id, OK);
38564064216a8433360745f69edddce19a606659163The Android Open Source Project}
38664064216a8433360745f69edddce19a606659163The Android Open Source Project
38764064216a8433360745f69edddce19a606659163The Android Open Source Project
38864064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
38964064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_ConfigHw()
39064064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
39164064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION:Read the SRAM Event mailbox address
39264064216a8433360745f69edddce19a606659163The Android Open Source Project *
39364064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: None
39464064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
39564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS eventMbox_ConfigHw (TI_HANDLE hEventMbox, UINT8 module_id, fnotify_t fCb, TI_HANDLE hCb)
39664064216a8433360745f69edddce19a606659163The Android Open Source Project{
39764064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
39864064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS    status;
39964064216a8433360745f69edddce19a606659163The Android Open Source Project
40064064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->fCb = (TNETWIF_callback_t)fCb;
40164064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->hCb = hCb;
40264064216a8433360745f69edddce19a606659163The Android Open Source Project
40364064216a8433360745f69edddce19a606659163The Android Open Source Project    /*
40464064216a8433360745f69edddce19a606659163The Android Open Source Project     * Get the event mailbox pointer
40564064216a8433360745f69edddce19a606659163The Android Open Source Project     */
40664064216a8433360745f69edddce19a606659163The Android Open Source Project    status = TNETWIF_ReadRegOpt (pEventMbox->hTNETWIF,
40764064216a8433360745f69edddce19a606659163The Android Open Source Project                                 REG_EVENT_MAILBOX_PTR,
40864064216a8433360745f69edddce19a606659163The Android Open Source Project                                 &pEventMbox->offset[0],
40964064216a8433360745f69edddce19a606659163The Android Open Source Project                                 module_id,
41064064216a8433360745f69edddce19a606659163The Android Open Source Project                                 eventMbox_ConfigCb,
41164064216a8433360745f69edddce19a606659163The Android Open Source Project                                 hEventMbox);
41264064216a8433360745f69edddce19a606659163The Android Open Source Project
41364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status == TNETWIF_COMPLETE)
41464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
41564064216a8433360745f69edddce19a606659163The Android Open Source Project        pEventMbox->offset[1] = pEventMbox->offset[0] + sizeof(EventMailBox_t);
41664064216a8433360745f69edddce19a606659163The Android Open Source Project
41764064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INIT (pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
41864064216a8433360745f69edddce19a606659163The Android Open Source Project                          ("eventMbox_ConfigHw: event A offset=0x%x, event B offset=0x%x, sizeof=%d\n",
41964064216a8433360745f69edddce19a606659163The Android Open Source Project                          pEventMbox->offset[0], pEventMbox->offset[1], sizeof(EventMailBox_t)));
42064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
42164064216a8433360745f69edddce19a606659163The Android Open Source Project
42264064216a8433360745f69edddce19a606659163The Android Open Source Project    return status;
42364064216a8433360745f69edddce19a606659163The Android Open Source Project}
42464064216a8433360745f69edddce19a606659163The Android Open Source Project
42564064216a8433360745f69edddce19a606659163The Android Open Source Project
42664064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
42764064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_RegisterEventCB()
42864064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
42964064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: register callback function for Events
43064064216a8433360745f69edddce19a606659163The Android Open Source Project *
43164064216a8433360745f69edddce19a606659163The Android Open Source Project * INPUTS:  EvID    Event ID
43264064216a8433360745f69edddce19a606659163The Android Open Source Project *          fCb     Call Back
43364064216a8433360745f69edddce19a606659163The Android Open Source Project *          hCb     Call Back Handle
43464064216a8433360745f69edddce19a606659163The Android Open Source Project *
43564064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: OK or NOK
43664064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
43764064216a8433360745f69edddce19a606659163The Android Open Source Projectint eventMbox_RegisterEventCB (TI_HANDLE hEventMbox, UINT32 EvID, void* fCb, TI_HANDLE hCb)
43864064216a8433360745f69edddce19a606659163The Android Open Source Project{
43964064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
44064064216a8433360745f69edddce19a606659163The Android Open Source Project
44164064216a8433360745f69edddce19a606659163The Android Open Source Project    if (fCb == NULL || hCb == NULL)
44264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
44364064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR (pEventMbox->hReport, EVENT_MBOX_MODULE_LOG, ("eventMbox_RegisterEventCB: NULL parameters\n"));
44464064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
44564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
44664064216a8433360745f69edddce19a606659163The Android Open Source Project
44764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (EvID >= HAL_EVENT_ALL)
44864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
44964064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG, ("eventMbox_RegisterEventCB: invalid ID\n"));
45064064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
45164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
45264064216a8433360745f69edddce19a606659163The Android Open Source Project
45364064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[EvID].fCb = fCb;
45464064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->cbTable[EvID].hCb = hCb;
45564064216a8433360745f69edddce19a606659163The Android Open Source Project
45664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
45764064216a8433360745f69edddce19a606659163The Android Open Source Project        ("eventMbox_RegisterEventCB: EVENT %s has registered\n", eventTable[EvID].str));
45864064216a8433360745f69edddce19a606659163The Android Open Source Project
45964064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
46064064216a8433360745f69edddce19a606659163The Android Open Source Project}
46164064216a8433360745f69edddce19a606659163The Android Open Source Project
46264064216a8433360745f69edddce19a606659163The Android Open Source Project
46364064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
46464064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_EvMask()
46564064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
46664064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: The function Mask the Event in the Local Mask Vector
46764064216a8433360745f69edddce19a606659163The Android Open Source Project *              And in the FW Mask Vector
46864064216a8433360745f69edddce19a606659163The Android Open Source Project *
46964064216a8433360745f69edddce19a606659163The Android Open Source Project * INPUTS:  Evid:   The Event ID
47064064216a8433360745f69edddce19a606659163The Android Open Source Project *
47164064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: OK or NOK
47264064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
47364064216a8433360745f69edddce19a606659163The Android Open Source Projectint eventMbox_EvMask (TI_HANDLE hEventMbox, UINT32 EvID)
47464064216a8433360745f69edddce19a606659163The Android Open Source Project{
47564064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
47664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32      *pEvMask = (UINT32*)&pEventMbox->CompoundEvent.eventsMask;
47764064216a8433360745f69edddce19a606659163The Android Open Source Project
47864064216a8433360745f69edddce19a606659163The Android Open Source Project    if (EvID >= HAL_EVENT_ALL)
47964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
48064064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG, ("eventMbox_EvMask: invalid ID\n"));
48164064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
48264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
48364064216a8433360745f69edddce19a606659163The Android Open Source Project
48464064216a8433360745f69edddce19a606659163The Android Open Source Project    *pEvMask |= eventTable[EvID].bitMask;
48564064216a8433360745f69edddce19a606659163The Android Open Source Project
48664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
48764064216a8433360745f69edddce19a606659163The Android Open Source Project        ("eventMbox_EvMask: EVENT %s is masked\n", eventTable[EvID].str));
48864064216a8433360745f69edddce19a606659163The Android Open Source Project
48964064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pEventMbox->bInitComplete == TRUE)
49064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
49164064216a8433360745f69edddce19a606659163The Android Open Source Project        whalCtrl_SetInfoElemEventMask (pEventMbox->hWhalCtrl, *pEvMask);
49264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
49364064216a8433360745f69edddce19a606659163The Android Open Source Project
49464064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
49564064216a8433360745f69edddce19a606659163The Android Open Source Project}
49664064216a8433360745f69edddce19a606659163The Android Open Source Project
49764064216a8433360745f69edddce19a606659163The Android Open Source Project
49864064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
49964064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_EvUnMask()
50064064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
50164064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: The function UnMask the Event in the Local Mask Vector
50264064216a8433360745f69edddce19a606659163The Android Open Source Project *              And in the FW Mask Vector
50364064216a8433360745f69edddce19a606659163The Android Open Source Project *
50464064216a8433360745f69edddce19a606659163The Android Open Source Project * INPUTS:  Evid:   The Event ID
50564064216a8433360745f69edddce19a606659163The Android Open Source Project *
50664064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: OK or NOK
50764064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
50864064216a8433360745f69edddce19a606659163The Android Open Source Projectint eventMbox_EvUnMask (TI_HANDLE hEventMbox, UINT32 EvID)
50964064216a8433360745f69edddce19a606659163The Android Open Source Project{
51064064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
51164064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32      *pEvMask = (UINT32*)&pEventMbox->CompoundEvent.eventsMask;
51264064216a8433360745f69edddce19a606659163The Android Open Source Project
51364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (EvID >= HAL_EVENT_ALL)
51464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
51564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG, ("eventMbox_EvUnMask: invalid ID\n"));
51664064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
51764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
51864064216a8433360745f69edddce19a606659163The Android Open Source Project
51964064216a8433360745f69edddce19a606659163The Android Open Source Project    *pEvMask &= ~eventTable[EvID].bitMask;
52064064216a8433360745f69edddce19a606659163The Android Open Source Project
52164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION (pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
52264064216a8433360745f69edddce19a606659163The Android Open Source Project        ("eventMbox_EvUnMask: EVENT %s is unmasked\n", eventTable[EvID].str));
52364064216a8433360745f69edddce19a606659163The Android Open Source Project
52464064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pEventMbox->bInitComplete == TRUE)
52564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
52664064216a8433360745f69edddce19a606659163The Android Open Source Project         whalCtrl_SetInfoElemEventMask (pEventMbox->hWhalCtrl, *pEvMask);
52764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
52864064216a8433360745f69edddce19a606659163The Android Open Source Project
52964064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
53064064216a8433360745f69edddce19a606659163The Android Open Source Project}
53164064216a8433360745f69edddce19a606659163The Android Open Source Project
53264064216a8433360745f69edddce19a606659163The Android Open Source Project
53364064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
53464064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_Event()
53564064216a8433360745f69edddce19a606659163The Android Open Source Project *****************************************************************************
53664064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: Called when Event A or B interrupt occur
53764064216a8433360745f69edddce19a606659163The Android Open Source Project *
53864064216a8433360745f69edddce19a606659163The Android Open Source Project * INPUTS:  hEventMbox - The object
53964064216a8433360745f69edddce19a606659163The Android Open Source Project *
54064064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: TNETWIF_PENDING in case of Async and TNETWIF_OK on Sync
54164064216a8433360745f69edddce19a606659163The Android Open Source Project *
54264064216a8433360745f69edddce19a606659163The Android Open Source Project *****************************************************************************/
54364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS eventMbox_Event (TI_HANDLE hEventMbox)
54464064216a8433360745f69edddce19a606659163The Android Open Source Project{
54564064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
54664064216a8433360745f69edddce19a606659163The Android Open Source Project
54764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Assume the driver is synchronous until opposite is proven */
54864064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->bSync = TRUE;
54964064216a8433360745f69edddce19a606659163The Android Open Source Project
55064064216a8433360745f69edddce19a606659163The Android Open Source Project    eventMbox_StateMachine (pEventMbox, FW_EVENT_MODULE_ID, OK);
55164064216a8433360745f69edddce19a606659163The Android Open Source Project
55264064216a8433360745f69edddce19a606659163The Android Open Source Project    return pEventMbox->returnValue;
55364064216a8433360745f69edddce19a606659163The Android Open Source Project}
55464064216a8433360745f69edddce19a606659163The Android Open Source Project
55564064216a8433360745f69edddce19a606659163The Android Open Source Project
55664064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
55764064216a8433360745f69edddce19a606659163The Android Open Source Project/*                      Internal functions implementation.                      */
55864064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
55964064216a8433360745f69edddce19a606659163The Android Open Source Project
56064064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
56164064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_StateMachine()
56264064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
56364064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: Manage the EventMbox state machine
56464064216a8433360745f69edddce19a606659163The Android Open Source Project *
56564064216a8433360745f69edddce19a606659163The Android Open Source Project *              The SM is running one event at a time (A or B) .
56664064216a8433360745f69edddce19a606659163The Android Open Source Project *              The order of the states is always the same: IDLE --> READ_BUF --> ACK_EVENT
56764064216a8433360745f69edddce19a606659163The Android Open Source Project *              The difference is whether we are using Synch or Asynch API.
56864064216a8433360745f69edddce19a606659163The Android Open Source Project *              In the Synch case (SDIO) we are looping in the while-loop till we return to IDLE, and we return
56964064216a8433360745f69edddce19a606659163The Android Open Source Project *              to FwEvent module a TNETWIF_OK status.
57064064216a8433360745f69edddce19a606659163The Android Open Source Project *              In the Asynch case we use the SM CB to return to the SM after each Asynch call
57164064216a8433360745f69edddce19a606659163The Android Open Source Project *              (In that case the return status is TNETWIF_PENDING, and we are waiting for the CB).
57264064216a8433360745f69edddce19a606659163The Android Open Source Project *              In the Asynch case the FwEvent module gets TNETWIF_PENDING in return, and waits for
57364064216a8433360745f69edddce19a606659163The Android Open Source Project *              the FwEvent_EventComplete() call in order to move the FwEvent SM.
57464064216a8433360745f69edddce19a606659163The Android Open Source Project *
57564064216a8433360745f69edddce19a606659163The Android Open Source Project * INPUTS:  hFwEvent - The object
57664064216a8433360745f69edddce19a606659163The Android Open Source Project *          module_id - not used (for CB API only)
57764064216a8433360745f69edddce19a606659163The Android Open Source Project *          status    - not used (for CB API only)
57864064216a8433360745f69edddce19a606659163The Android Open Source Project *
57964064216a8433360745f69edddce19a606659163The Android Open Source Project * OUTPUT:  None
58064064216a8433360745f69edddce19a606659163The Android Open Source Project *
58164064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: TNETWIF_PENDING in case of Async and TNETWIF_OK on Sync
58264064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
58364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void eventMbox_StateMachine (TI_HANDLE hEventMbox, UINT8 module_id, TI_STATUS status)
58464064216a8433360745f69edddce19a606659163The Android Open Source Project{
58564064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
58664064216a8433360745f69edddce19a606659163The Android Open Source Project
58764064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->returnValue = OK;
58864064216a8433360745f69edddce19a606659163The Android Open Source Project
58964064216a8433360745f69edddce19a606659163The Android Open Source Project    while (pEventMbox->returnValue != TNETWIF_PENDING)
59064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
59164064216a8433360745f69edddce19a606659163The Android Open Source Project        switch (pEventMbox->state)
59264064216a8433360745f69edddce19a606659163The Android Open Source Project        {
59364064216a8433360745f69edddce19a606659163The Android Open Source Project            case EVENT_MBOX_STATE_IDLE:
59464064216a8433360745f69edddce19a606659163The Android Open Source Project
59564064216a8433360745f69edddce19a606659163The Android Open Source Project                pEventMbox->returnValue = TNETWIF_ReadMemOpt (pEventMbox->hTNETWIF,
59664064216a8433360745f69edddce19a606659163The Android Open Source Project                                                              pEventMbox->offset[pEventMbox->currentEvent],
59764064216a8433360745f69edddce19a606659163The Android Open Source Project                                                              PADREAD (&pEventMbox->CompoundEvent),
59864064216a8433360745f69edddce19a606659163The Android Open Source Project                                                              EVENT_REPORT_SIZE,
59964064216a8433360745f69edddce19a606659163The Android Open Source Project                                                              FW_EVENT_MODULE_ID,
60064064216a8433360745f69edddce19a606659163The Android Open Source Project                                                              eventMbox_StateMachine,
60164064216a8433360745f69edddce19a606659163The Android Open Source Project                                                              hEventMbox);
60264064216a8433360745f69edddce19a606659163The Android Open Source Project
60364064216a8433360745f69edddce19a606659163The Android Open Source Project                pEventMbox->state = EVENT_MBOX_STATE_READ_BUF;
60464064216a8433360745f69edddce19a606659163The Android Open Source Project
60564064216a8433360745f69edddce19a606659163The Android Open Source Project                break;
60664064216a8433360745f69edddce19a606659163The Android Open Source Project
60764064216a8433360745f69edddce19a606659163The Android Open Source Project            case EVENT_MBOX_STATE_READ_BUF:
60864064216a8433360745f69edddce19a606659163The Android Open Source Project
60964064216a8433360745f69edddce19a606659163The Android Open Source Project                /* Notify The appropriate layer about the incoming event */
61064064216a8433360745f69edddce19a606659163The Android Open Source Project                eventMbox_HandleEvent (hEventMbox);
61164064216a8433360745f69edddce19a606659163The Android Open Source Project
61264064216a8433360745f69edddce19a606659163The Android Open Source Project                /* Trigger the FW when finishing handle the event */
61364064216a8433360745f69edddce19a606659163The Android Open Source Project                pEventMbox->returnValue = TNETWIF_WriteRegOpt (pEventMbox->hTNETWIF,
61464064216a8433360745f69edddce19a606659163The Android Open Source Project                                                               ACX_REG_INTERRUPT_TRIG,
61564064216a8433360745f69edddce19a606659163The Android Open Source Project                                                               INTR_TRIG_EVENT_ACK,
61664064216a8433360745f69edddce19a606659163The Android Open Source Project                                                               FW_EVENT_MODULE_ID,
61764064216a8433360745f69edddce19a606659163The Android Open Source Project                                                               eventMbox_StateMachine,
61864064216a8433360745f69edddce19a606659163The Android Open Source Project                                                               hEventMbox);
61964064216a8433360745f69edddce19a606659163The Android Open Source Project
62064064216a8433360745f69edddce19a606659163The Android Open Source Project                pEventMbox->state = EVENT_MBOX_STATE_ACK_EVENT;
62164064216a8433360745f69edddce19a606659163The Android Open Source Project
62264064216a8433360745f69edddce19a606659163The Android Open Source Project                break;
62364064216a8433360745f69edddce19a606659163The Android Open Source Project
62464064216a8433360745f69edddce19a606659163The Android Open Source Project            case EVENT_MBOX_STATE_ACK_EVENT:
62564064216a8433360745f69edddce19a606659163The Android Open Source Project
62664064216a8433360745f69edddce19a606659163The Android Open Source Project                /* Handling of the event is done. Switch to the next buffer for the next time */
62764064216a8433360745f69edddce19a606659163The Android Open Source Project                pEventMbox->currentEvent = 1 - pEventMbox->currentEvent;
62864064216a8433360745f69edddce19a606659163The Android Open Source Project
62964064216a8433360745f69edddce19a606659163The Android Open Source Project                if (FALSE == pEventMbox->bSync)
63064064216a8433360745f69edddce19a606659163The Android Open Source Project                {
63164064216a8433360745f69edddce19a606659163The Android Open Source Project                    /* Asynchronous bus - call FwEvent for notifying the completion */
63264064216a8433360745f69edddce19a606659163The Android Open Source Project                    FwEvent_EventComplete (pEventMbox->hFwEvent, TNETWIF_OK);
63364064216a8433360745f69edddce19a606659163The Android Open Source Project                }
63464064216a8433360745f69edddce19a606659163The Android Open Source Project                else
63564064216a8433360745f69edddce19a606659163The Android Open Source Project                {
63664064216a8433360745f69edddce19a606659163The Android Open Source Project                    /* This is the Sync case and we return TNETWIF_OK */
63764064216a8433360745f69edddce19a606659163The Android Open Source Project                    pEventMbox->returnValue = TNETWIF_OK;
63864064216a8433360745f69edddce19a606659163The Android Open Source Project                }
63964064216a8433360745f69edddce19a606659163The Android Open Source Project                /* Exit SM */
64064064216a8433360745f69edddce19a606659163The Android Open Source Project                pEventMbox->state = EVENT_MBOX_STATE_IDLE;
64164064216a8433360745f69edddce19a606659163The Android Open Source Project                return;
64264064216a8433360745f69edddce19a606659163The Android Open Source Project
64364064216a8433360745f69edddce19a606659163The Android Open Source Project            default:
64464064216a8433360745f69edddce19a606659163The Android Open Source Project                WLAN_REPORT_ERROR(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
64564064216a8433360745f69edddce19a606659163The Android Open Source Project                    ("eventMbox_StateMachine: unknown state !!!\n"));
64664064216a8433360745f69edddce19a606659163The Android Open Source Project                break;
64764064216a8433360745f69edddce19a606659163The Android Open Source Project        }
64864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
64964064216a8433360745f69edddce19a606659163The Android Open Source Project
65064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* If we are here - we got TNETWIF_PENDING, so we are in asynchronous mode */
65164064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->bSync = FALSE;
65264064216a8433360745f69edddce19a606659163The Android Open Source Project}
65364064216a8433360745f69edddce19a606659163The Android Open Source Project
65464064216a8433360745f69edddce19a606659163The Android Open Source Project
65564064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
65664064216a8433360745f69edddce19a606659163The Android Open Source Project *                      eventMbox_HandleEvent()
65764064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************
65864064216a8433360745f69edddce19a606659163The Android Open Source Project * DESCRIPTION: The functions reads the parameters in the Event mailBox
65964064216a8433360745f69edddce19a606659163The Android Open Source Project *              and activates the appropriate CallBack function.
66064064216a8433360745f69edddce19a606659163The Android Open Source Project *
66164064216a8433360745f69edddce19a606659163The Android Open Source Project * INPUTS:
66264064216a8433360745f69edddce19a606659163The Android Open Source Project *
66364064216a8433360745f69edddce19a606659163The Android Open Source Project * OUTPUT:  None
66464064216a8433360745f69edddce19a606659163The Android Open Source Project *
66564064216a8433360745f69edddce19a606659163The Android Open Source Project * RETURNS: OK.
66664064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
66764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void eventMbox_HandleEvent (TI_HANDLE hEventMbox)
66864064216a8433360745f69edddce19a606659163The Android Open Source Project{
66964064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
67064064216a8433360745f69edddce19a606659163The Android Open Source Project    EventCB_t   *pEventCb;
67164064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32       EvID;
67264064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32       EvMask   = pEventMbox->CompoundEvent.eventsMask;
67364064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32       EvVector = pEventMbox->CompoundEvent.eventsVector;
67464064216a8433360745f69edddce19a606659163The Android Open Source Project
67564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
67664064216a8433360745f69edddce19a606659163The Android Open Source Project    pEventMbox->uCompounEvCount++;
67764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* TI_DBG */
67864064216a8433360745f69edddce19a606659163The Android Open Source Project
67964064216a8433360745f69edddce19a606659163The Android Open Source Project#if EVMBX_DBG
68064064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
68164064216a8433360745f69edddce19a606659163The Android Open Source Project                             ("eventMbox_HandleEvent: Event Vector = 0x%x\n", EvVector));
68264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
68364064216a8433360745f69edddce19a606659163The Android Open Source Project
68464064216a8433360745f69edddce19a606659163The Android Open Source Project    /*
68564064216a8433360745f69edddce19a606659163The Android Open Source Project    Handle  Events
68664064216a8433360745f69edddce19a606659163The Android Open Source Project    */
68764064216a8433360745f69edddce19a606659163The Android Open Source Project    for (EvID = 0; EvID < HAL_EVENT_ALL; EvID++)
68864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
68964064216a8433360745f69edddce19a606659163The Android Open Source Project        pEventCb = &pEventMbox->cbTable[EvID];
69064064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Check if the Event Bit in the vector in set */
69164064216a8433360745f69edddce19a606659163The Android Open Source Project        if (IS_EVENT_BIT_ON (EvVector, eventTable[EvID].bitMask))
69264064216a8433360745f69edddce19a606659163The Android Open Source Project        {
69364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
69464064216a8433360745f69edddce19a606659163The Android Open Source Project            pEventMbox->uTotalEvCount++;
69564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* TI_DBG */
69664064216a8433360745f69edddce19a606659163The Android Open Source Project            pEventCb->uCount++;
69764064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Check if the Mask Bit in the Mask vector in off */
69864064216a8433360745f69edddce19a606659163The Android Open Source Project            if (IS_EVENT_BIT_OFF (EvMask, eventTable[EvID].bitMask))
69964064216a8433360745f69edddce19a606659163The Android Open Source Project            {
70064064216a8433360745f69edddce19a606659163The Android Open Source Project#if EVMBX_DBG
70164064216a8433360745f69edddce19a606659163The Android Open Source Project                WLAN_REPORT_INFORMATION(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
70264064216a8433360745f69edddce19a606659163The Android Open Source Project                                        ("eventMbox_HandleEvent: EVENT %s has occurred\n", eventTable[EvID].str));
70364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
70464064216a8433360745f69edddce19a606659163The Android Open Source Project                if (pEventCb->fCb != NULL)
70564064216a8433360745f69edddce19a606659163The Android Open Source Project                {
70664064216a8433360745f69edddce19a606659163The Android Open Source Project                    if (eventTable[EvID].dataLen)
70764064216a8433360745f69edddce19a606659163The Android Open Source Project                    {
70864064216a8433360745f69edddce19a606659163The Android Open Source Project                        ((whal_hwMboxDataEvCB)pEventCb->fCb) (pEventCb->hCb,
70964064216a8433360745f69edddce19a606659163The Android Open Source Project                                                              (char *)pEventMbox->cbTable[EvID].pDataOffs,
71064064216a8433360745f69edddce19a606659163The Android Open Source Project                                                              eventTable[EvID].dataLen);
71164064216a8433360745f69edddce19a606659163The Android Open Source Project                    }
71264064216a8433360745f69edddce19a606659163The Android Open Source Project                    else
71364064216a8433360745f69edddce19a606659163The Android Open Source Project                    {
71464064216a8433360745f69edddce19a606659163The Android Open Source Project                        ((whal_hwMboxEvCB)pEventCb->fCb) (pEventCb->hCb);
71564064216a8433360745f69edddce19a606659163The Android Open Source Project                    }
71664064216a8433360745f69edddce19a606659163The Android Open Source Project                }
71764064216a8433360745f69edddce19a606659163The Android Open Source Project            }
71864064216a8433360745f69edddce19a606659163The Android Open Source Project        }
71964064216a8433360745f69edddce19a606659163The Android Open Source Project    } /*End for*/
72064064216a8433360745f69edddce19a606659163The Android Open Source Project}
72164064216a8433360745f69edddce19a606659163The Android Open Source Project
72264064216a8433360745f69edddce19a606659163The Android Open Source Project
72364064216a8433360745f69edddce19a606659163The Android Open Source Project/*
72464064216a8433360745f69edddce19a606659163The Android Open Source Project *  eventMbox_Print: print the Event Mailbox statistic :Number 890
72564064216a8433360745f69edddce19a606659163The Android Open Source Project */
72664064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid eventMbox_Print (TI_HANDLE hEventMbox)
72764064216a8433360745f69edddce19a606659163The Android Open Source Project{
72864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
72964064216a8433360745f69edddce19a606659163The Android Open Source Project    EventMbox_t *pEventMbox = (EventMbox_t *)hEventMbox;
73064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 i;
73164064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 EvMask   = pEventMbox->CompoundEvent.eventsMask;
73264064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32 EvVector = pEventMbox->CompoundEvent.eventsVector;
73364064216a8433360745f69edddce19a606659163The Android Open Source Project
73464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_REPLY(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
73564064216a8433360745f69edddce19a606659163The Android Open Source Project        ("------------------------- EventMbox  Print ----------------------------\n"));
73664064216a8433360745f69edddce19a606659163The Android Open Source Project
73764064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
73864064216a8433360745f69edddce19a606659163The Android Open Source Project        (" eventMbox_HandleEvent: Event Vector = 0x%x\n", EvVector));
73964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
74064064216a8433360745f69edddce19a606659163The Android Open Source Project        (" eventMbox_HandleEvent: Event Mask = 0x%x\n", EvMask));
74164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_REPLY(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
74264064216a8433360745f69edddce19a606659163The Android Open Source Project        (" Total Number Of Compound Event = %d: \n", pEventMbox->uCompounEvCount));
74364064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_REPLY(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
74464064216a8433360745f69edddce19a606659163The Android Open Source Project        (" Total Number Of Events = %d: \n", pEventMbox->uTotalEvCount));
74564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_REPLY(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,("\t\t\t\t *** Event Counters *** :\n"));
74664064216a8433360745f69edddce19a606659163The Android Open Source Project    for (i = 0; i < HAL_EVENT_ALL; i++)
74764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
74864064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_REPLY(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
74964064216a8433360745f69edddce19a606659163The Android Open Source Project            (" %d) Event Name = EVENT %s, Number of Event = %d\n",
75064064216a8433360745f69edddce19a606659163The Android Open Source Project            i, eventTable[i].str, pEventMbox->cbTable[i].uCount));
75164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
75264064216a8433360745f69edddce19a606659163The Android Open Source Project
75364064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_REPLY(pEventMbox->hReport, EVENT_MBOX_MODULE_LOG,
75464064216a8433360745f69edddce19a606659163The Android Open Source Project        ("------------------------- EventMbox  Print End ----------------------------\n"));
75564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* TI_DBG */
75664064216a8433360745f69edddce19a606659163The Android Open Source Project}
75764064216a8433360745f69edddce19a606659163The Android Open Source Project
75864064216a8433360745f69edddce19a606659163The Android Open Source Project
75964064216a8433360745f69edddce19a606659163The Android Open Source Project
760