• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * CmdDispatcher.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 
35 /** \file   CmdDispatcher.c
36  *  \brief  The CmdDispatcher module. Handles user commbands dispatching to the driver modules.
37  *
38  *  \see    CmdDispatcher.h
39  */
40 
41 #define __FILE_ID__  FILE_ID_47
42 #include "tidef.h"
43 #include "osApi.h"
44 #include "report.h"
45 #include "DrvMain.h"
46 #include "connApi.h"
47 #include "siteMgrApi.h"
48 #include "smeApi.h"
49 #include "SoftGeminiApi.h"
50 #include "roamingMngrApi.h"
51 #include "qosMngr_API.h"
52 #include "PowerMgr_API.h"
53 #include "ScanCncn.h"
54 #include "scanMngrApi.h"
55 #include "regulatoryDomainApi.h"
56 #include "measurementMgrApi.h"
57 #include "TWDriver.h"
58 #include "debug.h"
59 #include "DrvMainModules.h"
60 #include "CmdDispatcher.h"
61 #include "healthMonitor.h"
62 #include "currBssApi.h"
63 #ifdef XCC_MODULE_INCLUDED
64 #include "XCCMngr.h"
65 #endif
66 
67 
68 /* Set/get params function prototype */
69 typedef TI_STATUS (*TParamFunc) (TI_HANDLE handle, paramInfo_t *pParam);
70 
71 typedef struct
72 {
73     TParamFunc          set;
74     TParamFunc          get;
75     TI_HANDLE           handle;
76 
77 } TParamAccess;
78 
79 /* The module's object */
80 typedef struct
81 {
82     /* Other modules handles */
83     TI_HANDLE    hOs;
84     TI_HANDLE    hReport;
85     TI_HANDLE    hAuth;
86     TI_HANDLE    hAssoc;
87     TI_HANDLE    hRxData;
88     TI_HANDLE    hTxCtrl;
89     TI_HANDLE    hCtrlData;
90     TI_HANDLE    hSiteMgr;
91     TI_HANDLE    hConn;
92     TI_HANDLE    hRsn;
93     TI_HANDLE    hSme;
94     TI_HANDLE    hScanCncn;
95     TI_HANDLE    hScanMngr;
96     TI_HANDLE    hMlmeSm;
97     TI_HANDLE    hRegulatoryDomain;
98     TI_HANDLE    hMeasurementMgr;
99     TI_HANDLE    hRoamingMngr;
100     TI_HANDLE    hSoftGemini;
101     TI_HANDLE    hQosMngr;
102     TI_HANDLE    hPowerMgr;
103     TI_HANDLE    hHealthMonitor;
104     TI_HANDLE    hTWD;
105     TI_HANDLE    hCurrBss;
106 #ifdef XCC_MODULE_INCLUDED
107     TI_HANDLE    hXCCMngr;
108 #endif
109 
110     /* Table of params set/get functions */
111     TParamAccess paramAccessTable[MAX_PARAM_MODULE_NUMBER];
112 
113 #ifdef TI_DBG
114     TStadHandlesList *pStadHandles;  /* Save modules list pointer just for the debug functions */
115 #endif
116 
117 } TCmdDispatchObj;
118 
119 
120 /* Internal functions prototypes */
121 static void      cmdDispatch_ConfigParamsAccessTable (TCmdDispatchObj *pCmdDispatch);
122 static TI_STATUS cmdDispatch_SetTwdParam  (TI_HANDLE hCmdDispatch, paramInfo_t *pParam);
123 static TI_STATUS cmdDispatch_GetTwdParam  (TI_HANDLE hCmdDispatch, paramInfo_t *pParam);
124 
125 #ifdef TI_DBG
126 static TI_STATUS cmdDispatch_DebugFuncSet (TI_HANDLE hCmdDispatch, paramInfo_t *pParam);
127 static TI_STATUS cmdDispatch_DebugFuncGet (TI_HANDLE hCmdDispatch, paramInfo_t *pParam);	/*yael - this function is not in use*/
128 #endif
129 
130 
131 
132 /**
133  * \fn     cmdDispatch_Create
134  * \brief  Create the module
135  *
136  * Create the Command-Dispatcher module
137  *
138  * \note
139  * \param  hOs - Handle to the Os Abstraction Layer
140  * \return Handle to the allocated module (NULL if failed)
141  * \sa
142  */
cmdDispatch_Create(TI_HANDLE hOs)143 TI_HANDLE cmdDispatch_Create (TI_HANDLE hOs)
144 {
145     TCmdDispatchObj *pCmdDispatch;
146 
147     /* allocate CmdDispatcher module */
148     pCmdDispatch = os_memoryAlloc (hOs, (sizeof(TCmdDispatchObj)));
149 
150     if (!pCmdDispatch)
151     {
152         WLAN_OS_REPORT(("Error allocating the CmdDispatcher Module\n"));
153         return NULL;
154     }
155 
156     /* Reset CmdDispatcher module */
157     os_memoryZero (hOs, pCmdDispatch, (sizeof(TCmdDispatchObj)));
158 
159     pCmdDispatch->hOs = hOs;
160 
161     return (TI_HANDLE)pCmdDispatch;
162 }
163 
164 
165 /**
166  * \fn     cmdDispatch_Init
167  * \brief  Save modules handles and fill the configuration table
168  *
169  * Save other modules handles, and fill the configuration table
170  *     with the Get/Set functions.
171  *
172  * \note
173  * \param  pStadHandles  - The driver modules handles
174  * \return void
175  * \sa
176  */
cmdDispatch_Init(TStadHandlesList * pStadHandles)177 void cmdDispatch_Init (TStadHandlesList *pStadHandles)
178 {
179     TCmdDispatchObj *pCmdDispatch = (TCmdDispatchObj *)(pStadHandles->hCmdDispatch);
180 
181     /* Save modules handles */
182     pCmdDispatch->hReport           = pStadHandles->hReport;
183     pCmdDispatch->hAuth             = pStadHandles->hAuth;
184     pCmdDispatch->hAssoc            = pStadHandles->hAssoc;
185     pCmdDispatch->hRxData           = pStadHandles->hRxData;
186     pCmdDispatch->hTxCtrl           = pStadHandles->hTxCtrl;
187     pCmdDispatch->hCtrlData         = pStadHandles->hCtrlData;
188     pCmdDispatch->hSiteMgr          = pStadHandles->hSiteMgr;
189     pCmdDispatch->hConn             = pStadHandles->hConn;
190     pCmdDispatch->hRsn              = pStadHandles->hRsn;
191     pCmdDispatch->hSme              = pStadHandles->hSme;
192     pCmdDispatch->hScanCncn         = pStadHandles->hScanCncn;
193     pCmdDispatch->hScanMngr         = pStadHandles->hScanMngr;
194     pCmdDispatch->hMlmeSm           = pStadHandles->hMlmeSm;
195     pCmdDispatch->hRegulatoryDomain = pStadHandles->hRegulatoryDomain;
196     pCmdDispatch->hMeasurementMgr   = pStadHandles->hMeasurementMgr;
197     pCmdDispatch->hRoamingMngr      = pStadHandles->hRoamingMngr;
198     pCmdDispatch->hSoftGemini       = pStadHandles->hSoftGemini;
199     pCmdDispatch->hQosMngr          = pStadHandles->hQosMngr;
200     pCmdDispatch->hPowerMgr         = pStadHandles->hPowerMgr;
201     pCmdDispatch->hHealthMonitor    = pStadHandles->hHealthMonitor;
202     pCmdDispatch->hTWD              = pStadHandles->hTWD;
203     pCmdDispatch->hCurrBss          = pStadHandles->hCurrBss;
204 #ifdef XCC_MODULE_INCLUDED
205     pCmdDispatch->hXCCMngr          = pStadHandles->hXCCMngr;
206 #endif
207 
208 #ifdef TI_DBG
209     pCmdDispatch->pStadHandles = pStadHandles;  /* Save modules list pointer just for the debug functions */
210 #endif
211 
212     /* Fill the configuration table with the Get/Set functions */
213     cmdDispatch_ConfigParamsAccessTable (pCmdDispatch);
214 }
215 
216 
217 /**
218  * \fn     cmdDispatch_Destroy
219  * \brief  Destroy the module object
220  *
221  * Destroy the module object.
222  *
223  * \note
224  * \param  hCmdDispatch - The object
225  * \return TI_OK - Unload succesfull, TI_NOK - Unload unsuccesfull
226  * \sa
227  */
cmdDispatch_Destroy(TI_HANDLE hCmdDispatch)228 TI_STATUS cmdDispatch_Destroy (TI_HANDLE hCmdDispatch)
229 {
230     TCmdDispatchObj  *pCmdDispatch = (TCmdDispatchObj *)hCmdDispatch;
231 
232     /* Free the module object */
233     os_memoryFree (pCmdDispatch->hOs, pCmdDispatch, sizeof(TCmdDispatchObj));
234 
235     return TI_OK;
236 }
237 
238 
239 /**
240  * \fn     cmdDispatch_ConfigParamsAccessTable
241  * \brief  Fill the configuration table with the Get/Set functions
242  *
243  * Called in the configuration phase by the driver, performs the following:
244  *   - for each module that supply a Get/Set services to his parameters,
245  *        fill the corresponding entry in the params access table with the following:
246  *          - Get function
247  *          - Set function
248  *          - Handle to the module
249  * This table is used when Getting/Setting a parameter from the OS abstraction layer.
250  *
251  * \note
252  * \param  pCmdDispatch - The object
253  * \return void
254  * \sa
255  */
cmdDispatch_ConfigParamsAccessTable(TCmdDispatchObj * pCmdDispatch)256 static void cmdDispatch_ConfigParamsAccessTable (TCmdDispatchObj *pCmdDispatch)
257 {
258     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(AUTH_MODULE_PARAM) - 1].set = auth_setParam;
259     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(AUTH_MODULE_PARAM) - 1].get = auth_getParam;
260     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(AUTH_MODULE_PARAM) - 1].handle = pCmdDispatch->hAuth;
261 
262     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(ASSOC_MODULE_PARAM) - 1].set = assoc_setParam;
263     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(ASSOC_MODULE_PARAM) - 1].get = assoc_getParam;
264     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(ASSOC_MODULE_PARAM) - 1].handle = pCmdDispatch->hAssoc;
265 
266     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(RX_DATA_MODULE_PARAM) - 1].set = rxData_setParam;
267     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(RX_DATA_MODULE_PARAM) - 1].get = rxData_getParam;
268     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(RX_DATA_MODULE_PARAM) - 1].handle = pCmdDispatch->hRxData;
269 
270     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(TX_CTRL_MODULE_PARAM) - 1].set = txCtrlParams_setParam;
271     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(TX_CTRL_MODULE_PARAM) - 1].get = txCtrlParams_getParam;
272     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(TX_CTRL_MODULE_PARAM) - 1].handle = pCmdDispatch->hTxCtrl;
273 
274     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(CTRL_DATA_MODULE_PARAM) - 1].set = ctrlData_setParam;
275     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(CTRL_DATA_MODULE_PARAM) - 1].get = ctrlData_getParam;
276     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(CTRL_DATA_MODULE_PARAM) - 1].handle = pCmdDispatch->hCtrlData;
277 
278     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SITE_MGR_MODULE_PARAM) - 1].set = siteMgr_setParam;
279     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SITE_MGR_MODULE_PARAM) - 1].get = siteMgr_getParam;
280     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SITE_MGR_MODULE_PARAM) - 1].handle = pCmdDispatch->hSiteMgr;
281 
282     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(CONN_MODULE_PARAM) - 1].set = conn_setParam;
283     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(CONN_MODULE_PARAM) - 1].get = conn_getParam;
284     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(CONN_MODULE_PARAM) - 1].handle = pCmdDispatch->hConn;
285 
286     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(RSN_MODULE_PARAM) - 1].set = (TParamFunc)rsn_setParam;
287     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(RSN_MODULE_PARAM) - 1].get = (TParamFunc)rsn_getParam;
288     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(RSN_MODULE_PARAM) - 1].handle = pCmdDispatch->hRsn;
289 
290     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(TWD_MODULE_PARAM) - 1].set = cmdDispatch_SetTwdParam;
291     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(TWD_MODULE_PARAM) - 1].get = cmdDispatch_GetTwdParam;
292     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(TWD_MODULE_PARAM) - 1].handle = (TI_HANDLE)pCmdDispatch;
293 
294     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(REPORT_MODULE_PARAM) - 1].set = (TParamFunc)report_SetParam;
295     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(REPORT_MODULE_PARAM) - 1].get = (TParamFunc)report_GetParam;
296     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(REPORT_MODULE_PARAM) - 1].handle = pCmdDispatch->hReport;
297 
298     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SME_MODULE_PARAM) - 1].set = sme_SetParam;
299     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SME_MODULE_PARAM) - 1].get = sme_GetParam;
300     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SME_MODULE_PARAM) - 1].handle = pCmdDispatch->hSme;
301 
302     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SCAN_CNCN_PARAM) - 1].set = scanCncnApp_SetParam;
303     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SCAN_CNCN_PARAM) - 1].get = scanCncnApp_GetParam;
304     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SCAN_CNCN_PARAM) - 1].handle = pCmdDispatch->hScanCncn;
305 
306     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SCAN_MNGR_PARAM) - 1].set = scanMngr_setParam;
307     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SCAN_MNGR_PARAM) - 1].get = scanMngr_getParam;
308     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SCAN_MNGR_PARAM) - 1].handle = pCmdDispatch->hScanMngr;
309 
310     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(MLME_SM_MODULE_PARAM) - 1].set = mlme_setParam;
311     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(MLME_SM_MODULE_PARAM) - 1].get = mlme_getParam;
312     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(MLME_SM_MODULE_PARAM) - 1].handle = pCmdDispatch->hMlmeSm;
313 
314     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(REGULATORY_DOMAIN_MODULE_PARAM) - 1].set = regulatoryDomain_setParam;
315     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(REGULATORY_DOMAIN_MODULE_PARAM) - 1].get = regulatoryDomain_getParam;
316     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(REGULATORY_DOMAIN_MODULE_PARAM) - 1].handle = pCmdDispatch->hRegulatoryDomain;
317 
318     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(MEASUREMENT_MODULE_PARAM) - 1].set = measurementMgr_setParam;
319     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(MEASUREMENT_MODULE_PARAM) - 1].get = measurementMgr_getParam;
320     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(MEASUREMENT_MODULE_PARAM) - 1].handle = pCmdDispatch->hMeasurementMgr;
321 
322 #ifdef XCC_MODULE_INCLUDED
323     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(XCC_MANAGER_MODULE_PARAM) - 1].set = XCCMngr_setParam;
324     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(XCC_MANAGER_MODULE_PARAM) - 1].get = XCCMngr_getParam;
325     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(XCC_MANAGER_MODULE_PARAM) - 1].handle = pCmdDispatch->hXCCMngr;
326 #endif
327 
328     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(ROAMING_MANAGER_MODULE_PARAM) - 1].set = roamingMngr_setParam;
329     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(ROAMING_MANAGER_MODULE_PARAM) - 1].get = roamingMngr_getParam;
330     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(ROAMING_MANAGER_MODULE_PARAM) - 1].handle = pCmdDispatch->hRoamingMngr;
331 
332     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SOFT_GEMINI_PARAM) - 1].set = SoftGemini_setParam;
333     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SOFT_GEMINI_PARAM) - 1].get = SoftGemini_getParam;
334     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(SOFT_GEMINI_PARAM) - 1].handle = pCmdDispatch->hSoftGemini;
335 
336     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(QOS_MANAGER_PARAM) - 1].set = qosMngr_setParams;
337     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(QOS_MANAGER_PARAM) - 1].get = qosMngr_getParams;
338     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(QOS_MANAGER_PARAM) - 1].handle = pCmdDispatch->hQosMngr;
339 
340     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(POWER_MANAGER_PARAM) - 1].set = powerMgr_setParam;
341     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(POWER_MANAGER_PARAM) - 1].get = powerMgr_getParam;
342     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(POWER_MANAGER_PARAM) - 1].handle = pCmdDispatch->hPowerMgr;
343 
344 #ifdef TI_DBG
345     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(MISC_MODULE_PARAM) - 1].set = cmdDispatch_DebugFuncSet;
346     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(MISC_MODULE_PARAM) - 1].get = cmdDispatch_DebugFuncGet;	/*yael - this function is not in use*/
347     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(MISC_MODULE_PARAM) - 1].handle = (TI_HANDLE)pCmdDispatch;
348 #endif
349 
350     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(HEALTH_MONITOR_MODULE_PARAM) - 1].set = healthMonitor_SetParam;
351     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(HEALTH_MONITOR_MODULE_PARAM) - 1].get = healthMonitor_GetParam;
352     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(HEALTH_MONITOR_MODULE_PARAM) - 1].handle = pCmdDispatch->hHealthMonitor;
353 
354     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(CURR_BSS_MODULE_PARAM) - 1].set = currBSS_setParam;
355     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(CURR_BSS_MODULE_PARAM) - 1].get = currBSS_getParam;
356     pCmdDispatch->paramAccessTable[GET_PARAM_MODULE_NUMBER(CURR_BSS_MODULE_PARAM) - 1].handle = pCmdDispatch->hCurrBss;
357 }
358 
359 
360 /**
361  * \fn     cmdDispatch_SetParam
362  * \brief  Set a driver parameter
363  *
364  * Called by the OS abstraction layer in order to set a parameter in the driver.
365  * If the parameter can not be set from outside the driver it returns a failure status.
366  * The parameters is set to the module that uses as its father in the system
367  *     (refer to the file paramOut.h for more explanations).
368  *
369  * \note
370  * \param  hCmdDispatch - The object
371  * \param  param        - The parameter information
372  * \return result of parameter setting
373  * \sa
374  */
cmdDispatch_SetParam(TI_HANDLE hCmdDispatch,void * param)375 TI_STATUS cmdDispatch_SetParam (TI_HANDLE hCmdDispatch, void *param)
376 {
377     TCmdDispatchObj *pCmdDispatch = (TCmdDispatchObj *)hCmdDispatch;
378     paramInfo_t     *pParam = (paramInfo_t *)param;
379     TI_UINT32        moduleNumber;
380 
381     moduleNumber = GET_PARAM_MODULE_NUMBER(pParam->paramType);
382 
383     if  (moduleNumber > MAX_PARAM_MODULE_NUMBER)
384     {
385         return PARAM_MODULE_NUMBER_INVALID;
386     }
387 
388 	if ((pCmdDispatch->paramAccessTable[moduleNumber - 1].set == 0) ||
389 		(pCmdDispatch->paramAccessTable[moduleNumber - 1].get == 0) ||
390 		(pCmdDispatch->paramAccessTable[moduleNumber - 1].handle == 0))
391 	{
392 	    WLAN_OS_REPORT(("cmdDispatch_SetParam(): NULL pointers!!!, return, ParamType=0x%x\n", pParam->paramType));
393 		return TI_NOK;
394 	}
395 
396     TRACE2(pCmdDispatch->hReport, REPORT_SEVERITY_INFORMATION , "cmdDispatch_SetParam(): ParamType=0x%x, ModuleNumber=0x%x\n",							 pParam->paramType, moduleNumber);
397 
398     return pCmdDispatch->paramAccessTable[moduleNumber - 1].set(pCmdDispatch->paramAccessTable[moduleNumber - 1].handle, pParam);
399 }
400 
401 
402 /**
403  * \fn     cmdDispatch_GetParam
404  * \brief  Get a driver parameter
405  *
406  * Called by the OS abstraction layer in order to get a parameter the driver.
407  * If the parameter can not be get from outside the driver it returns a failure status.
408  * The parameter is get from the module that uses as its father in the system
409  *    (refer to the file paramOut.h for more explanations).
410  *
411  * \note
412  * \param  hCmdDispatch - The object
413  * \param  param        - The parameter information
414  * \return result of parameter getting
415  * \sa
416  */
cmdDispatch_GetParam(TI_HANDLE hCmdDispatch,void * param)417 TI_STATUS cmdDispatch_GetParam (TI_HANDLE hCmdDispatch, void *param)
418 {
419     TCmdDispatchObj *pCmdDispatch = (TCmdDispatchObj *) hCmdDispatch;
420     paramInfo_t     *pParam = (paramInfo_t *) param;
421     TI_UINT32        moduleNumber;
422     TI_STATUS        status;
423 
424     moduleNumber = GET_PARAM_MODULE_NUMBER(pParam->paramType);
425 
426     if  (moduleNumber > MAX_PARAM_MODULE_NUMBER)
427     {
428         return PARAM_MODULE_NUMBER_INVALID;
429     }
430 
431 	if ((pCmdDispatch->paramAccessTable[moduleNumber - 1].set == 0) ||
432 		(pCmdDispatch->paramAccessTable[moduleNumber - 1].get == 0) ||
433 		(pCmdDispatch->paramAccessTable[moduleNumber - 1].handle == 0))
434 	{
435 	    WLAN_OS_REPORT(("cmdDispatch_GetParam(): NULL pointers!!!, return, ParamType=0x%x\n", pParam->paramType));
436 		return TI_NOK;
437 	}
438 
439     TRACE2(pCmdDispatch->hReport, REPORT_SEVERITY_INFORMATION , "cmdDispatch_GetParam(): ParamType=0x%x, ModuleNumber=0x%x\n",							 pParam->paramType, moduleNumber);
440 
441     status = pCmdDispatch->paramAccessTable[moduleNumber - 1].get(pCmdDispatch->paramAccessTable[moduleNumber - 1].handle, pParam);
442 
443     return status;
444 }
445 
446 
447 /**
448  * \fn     cmdDispatch_SetTwdParam / cmdDispatch_GetParam
449  * \brief  Set/Get a TWD parameter
450  *
451  * Set/Get a TWD parameter.
452  *
453  * \note
454  * \param  hCmdDispatch - The object
455  * \param  param        - The parameter information
456  * \return parameter set/get result
457  * \sa
458  */
cmdDispatch_SetTwdParam(TI_HANDLE hCmdDispatch,paramInfo_t * pParam)459 static TI_STATUS cmdDispatch_SetTwdParam (TI_HANDLE hCmdDispatch, paramInfo_t *pParam)
460 {
461     TCmdDispatchObj *pCmdDispatch = (TCmdDispatchObj *)hCmdDispatch;
462 
463     pParam->paramType &= ~(SET_BIT | GET_BIT | TWD_MODULE_PARAM | ASYNC_PARAM | ALLOC_NEEDED_PARAM);
464 
465     return TWD_SetParam (pCmdDispatch->hTWD, (TTwdParamInfo *)pParam);
466 }
467 
cmdDispatch_GetTwdParam(TI_HANDLE hCmdDispatch,paramInfo_t * pParam)468 static TI_STATUS cmdDispatch_GetTwdParam (TI_HANDLE hCmdDispatch, paramInfo_t *pParam)
469 {
470     TCmdDispatchObj *pCmdDispatch = (TCmdDispatchObj *)hCmdDispatch;
471 
472     pParam->paramType &= ~(SET_BIT | GET_BIT | TWD_MODULE_PARAM | ASYNC_PARAM | ALLOC_NEEDED_PARAM);
473 
474     return TWD_GetParam (pCmdDispatch->hTWD, (TTwdParamInfo *)pParam);
475 }
476 
477 
478 
479 
480 /**
481  * \fn     cmdDispatch_DebugFuncSet / cmdDispatch_DebugFuncGet
482  * \brief  Set/Get a debug function parameter
483  *
484  * Set/Get a debug function parameter.
485  *
486  * \note
487  * \param  hCmdDispatch - The object
488  * \param  param        - The parameter information
489  * \return parameter set/get result
490  * \sa
491  */
492 
493 #ifdef TI_DBG
494 
cmdDispatch_DebugFuncSet(TI_HANDLE hCmdDispatch,paramInfo_t * pParam)495 static TI_STATUS cmdDispatch_DebugFuncSet (TI_HANDLE hCmdDispatch, paramInfo_t *pParam)
496 {
497     TCmdDispatchObj *pCmdDispatch = (TCmdDispatchObj *)hCmdDispatch;
498 
499     if (hCmdDispatch == NULL || pParam == NULL)
500     {
501         return TI_NOK;
502     }
503 
504     switch (pParam->paramType)
505     {
506 	case DEBUG_ACTIVATE_FUNCTION:
507 		debugFunction (pCmdDispatch->pStadHandles,
508 					   *(TI_UINT32*)&pParam->content,
509                        (void*)((TI_UINT32*)&pParam->content + 1));
510 		break;
511 	default:
512 TRACE1(pCmdDispatch->hReport, REPORT_SEVERITY_ERROR, "cmdDispatch_DebugFuncSet bad param=%X\n", pParam->paramType);
513 		break;
514     }
515     return TI_OK;
516 }
517 
518 
519 
520 /*yael - this function is not in use*/
cmdDispatch_DebugFuncGet(TI_HANDLE hCmdDispatch,paramInfo_t * pParam)521 static TI_STATUS cmdDispatch_DebugFuncGet (TI_HANDLE hCmdDispatch, paramInfo_t *pParam)
522 {
523     if (hCmdDispatch == NULL || pParam == NULL)
524     {
525         return TI_NOK;
526     }
527 
528 	/*yael - no use for that function */
529 
530     return TI_OK;
531 }
532 
533 #endif  /* TI_DBG */
534 
535 
536