blob: 426f00e6ad3e138135089fc1e7f487152ceda526 [file] [log] [blame]
Jeff Johnson295189b2012-06-20 16:38:30 -07001/*
Gopichand Nakkala92f07d82013-01-08 21:16:34 -08002 * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21/*
Jeff Johnson32d95a32012-09-10 13:15:23 -070022 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
Jeff Johnson295189b2012-06-20 16:38:30 -070023 *
24 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
25 *
26 *
27 * Permission to use, copy, modify, and/or distribute this software for
28 * any purpose with or without fee is hereby granted, provided that the
29 * above copyright notice and this permission notice appear in all
30 * copies.
31 *
32 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
33 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
35 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
36 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
37 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
38 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
39 * PERFORMANCE OF THIS SOFTWARE.
40 */
41
42/*===========================================================================
43
44 b a p A p i LinkSupervision . C
45
46 OVERVIEW:
47
48 This software unit holds the implementation of the WLAN BAP modules
49 "platform independent" Data path functions.
50
51 The functions externalized by this module are to be called ONLY by other
52 WLAN modules (HDD) that properly register with the BAP Layer initially.
53
54 DEPENDENCIES:
55
56 Are listed for each API below.
57
58
59 Copyright (c) 2008 QUALCOMM Incorporated.
60 All Rights Reserved.
61 Qualcomm Confidential and Proprietary
62===========================================================================*/
63
64/*===========================================================================
65
66 EDIT HISTORY FOR FILE
67
68
69 This section contains comments describing changes made to the module.
70 Notice that changes are listed in reverse chronological order.
71
72
73
74 when who what, where, why
75---------- --- --------------------------------------------------------
762008-03-25 arulv Created module
77
78===========================================================================*/
79
80/*----------------------------------------------------------------------------
81 * Include Files
82 * -------------------------------------------------------------------------*/
83//#include "wlan_qct_tl.h"
84#include "vos_trace.h"
85//I need the TL types and API
86#include "wlan_qct_tl.h"
87
88/* BT-AMP PAL API header file */
89#include "bapApi.h"
90#include "bapInternal.h"
91#include "bapApiTimer.h"
92
93/*----------------------------------------------------------------------------
94 * Preprocessor Definitions and Constants
95 * -------------------------------------------------------------------------*/
96
97#if 1
98//*BT-AMP packet LLC OUI value*/
99static const v_U8_t WLANBAP_BT_AMP_OUI[] = {0x00, 0x19, 0x58 };
100
101/*LLC header value*/
102static v_U8_t WLANBAP_LLC_HEADER[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00 };
103#endif
104
105/*----------------------------------------------------------------------------
106 * Global Data Definitions
107 * -------------------------------------------------------------------------*/
108
109/*----------------------------------------------------------------------------
110 * Static Variable Definitions
111 * -------------------------------------------------------------------------*/
112
113/*----------------------------------------------------------------------------
114 * Static Function Declarations and Definitions
115 * -------------------------------------------------------------------------*/
116
117/*----------------------------------------------------------------------------
118 * Externalized Function Definitions
119* -------------------------------------------------------------------------*/
120
121/*----------------------------------------------------------------------------
122 * Function Declarations and Documentation
123 * -------------------------------------------------------------------------*/
124VOS_STATUS
125WLANBAP_AcquireLSPacket( ptBtampContext pBtampCtx, vos_pkt_t **ppPacket, v_U16_t size, tANI_BOOLEAN isLsReq )
126{
127 VOS_STATUS vosStatus;
128 vos_pkt_t *pPacket;
129 WLANBAP_8023HeaderType w8023Header;
130 v_U8_t aucLLCHeader[WLANBAP_LLC_HEADER_LEN];
131 v_U16_t headerLength; /* The 802.3 frame length*/
132 v_U16_t protoType;
133 v_U8_t *pData = NULL;
134
135
136 if(isLsReq)
137 {
138 protoType = WLANTL_BT_AMP_TYPE_LS_REQ;
139 }
140 else
141 {
142 protoType = WLANTL_BT_AMP_TYPE_LS_REP;
143 }
144
145 //If success, vosTxLsPacket is the packet and pData points to the head.
146 vosStatus = vos_pkt_get_packet( &pPacket, VOS_PKT_TYPE_TX_802_11_MGMT,size, 1,
147 VOS_TRUE, NULL, NULL );
148 if( VOS_IS_STATUS_SUCCESS( vosStatus ) )
149 {
150 vosStatus = vos_pkt_reserve_head( pPacket, (v_VOID_t *)&pData, size );
151 if( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
152 {
153 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700154 "%s: failed to reserve size = %d\n",__func__, size );
Jeff Johnson295189b2012-06-20 16:38:30 -0700155 vos_pkt_return_packet( pPacket );
156 }
157 }
158
159 if( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
160 {
161 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
162 "WLANBAP_LinkSupervisionTimerHandler failed to get vos_pkt\n" );
163 return vosStatus;
164 }
165
166 // Form the 802.3 header
167 vos_mem_copy( w8023Header.vDA, pBtampCtx->peer_mac_addr, VOS_MAC_ADDR_SIZE);
168 vos_mem_copy( w8023Header.vSA, pBtampCtx->self_mac_addr, VOS_MAC_ADDR_SIZE);
169
170 headerLength = WLANBAP_LLC_HEADER_LEN;
171 /* Now the 802.3 length field is big-endian?! */
172 w8023Header.usLenType = vos_cpu_to_be16(headerLength);
173
174 /* Now adjust the protocol type bytes*/
175 protoType = vos_cpu_to_be16( protoType);
176 /* Now form the LLC header */
177 vos_mem_copy(aucLLCHeader,
178 WLANBAP_LLC_HEADER,
179 sizeof(WLANBAP_LLC_HEADER));
180 vos_mem_copy(&aucLLCHeader[WLANBAP_LLC_OUI_OFFSET],
181 WLANBAP_BT_AMP_OUI,
182 WLANBAP_LLC_OUI_SIZE);
183 vos_mem_copy(&aucLLCHeader[WLANBAP_LLC_PROTO_TYPE_OFFSET],
184 &protoType, //WLANBAP_BT_AMP_TYPE_LS_REQ
185 WLANBAP_LLC_PROTO_TYPE_SIZE);
186
187 /* Push on the LLC header */
188 vos_pkt_push_head(pPacket,
189 aucLLCHeader,
190 WLANBAP_LLC_HEADER_LEN);
191
192 /* Push on the 802.3 header */
193 vos_pkt_push_head(pPacket, &w8023Header, sizeof(w8023Header));
194 *ppPacket = pPacket;
195 return vosStatus;
196}
197
198
199
200/*===========================================================================
201
202 FUNCTION WLANBAP_InitLinkSupervision
203
204 DESCRIPTION
205
206 This API will be called when Link Supervision module is to be initialized when connected at BAP
207
208 PARAMETERS
209
210 btampHandle: The BT-AMP PAL handle returned in WLANBAP_GetNewHndl.
211
212 RETURN VALUE
213
214 The result code associated with performing the operation
215
216 VOS_STATUS_E_INVAL: Input parameters are invalid
217 VOS_STATUS_E_FAULT: BAP handle is NULL
218 VOS_STATUS_SUCCESS: Everything is good :)
219
220 SIDE EFFECTS
221
222============================================================================*/
223#define TX_LS_DATALEN 32
224
225VOS_STATUS
226WLANBAP_InitLinkSupervision
227(
228 ptBtampHandle btampHandle
229)
230{
231 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
232 ptBtampContext pBtampCtx = (ptBtampContext) btampHandle;
233 vos_pkt_t *pLSReqPacket;
234 vos_pkt_t *pLSRepPacket;
235 v_U16_t lsPktln;
236
237 if ( NULL == pBtampCtx)
238 {
239 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700240 "Invalid BAP handle value in %s", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700241 return VOS_STATUS_E_FAULT;
242 }
243
244#if 0
245 /* Initialize Link supervision data structure */
246 vos_mem_set(pLsInfo, sizeof(tBtampLS),0);
247
248 /* Allocate memory for Static Tx Data */
249 pLsInfo->pTxPktData = vos_mem_malloc(sizeof(tBtampLsPktData)+TX_LS_DATALEN);
250
251 /* Initialize Static data for LS pkt Tx */
252 pLsInfo->pTxPktData->BufLen = TX_LS_DATALEN;
253 vos_mem_copy (&pLsInfo->pTxPktData->pBuf, LsTxData, pLsInfo->pTxPktData->BufLen);
254#endif
255 pBtampCtx->lsReqPktPending = VOS_FALSE;
256 pBtampCtx->retries = 0;
257
258 vosStatus = WLANBAP_AcquireLSPacket( pBtampCtx, &pLSReqPacket,32, TRUE );
259 if( VOS_IS_STATUS_SUCCESS( vosStatus ) )
260 {
261 pBtampCtx->lsReqPacket = pLSReqPacket;
262 }
263 else
264 {
265 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700266 "%s:AcquireLSPacket failed\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700267 pBtampCtx->lsReqPacket = NULL;
268 return vosStatus;
269 }
270
271 vosStatus = WLANBAP_AcquireLSPacket( pBtampCtx, &pLSRepPacket,32,FALSE );
272 if( VOS_IS_STATUS_SUCCESS( vosStatus ) )
273 {
274 pBtampCtx->lsRepPacket = pLSRepPacket;
275 }
276 else
277 {
278 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700279 "%s:AcquireLSPacket failed\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700280 pBtampCtx->lsRepPacket = NULL;
281 return vosStatus;
282 }
283
284 vosStatus = vos_pkt_get_packet_length(pBtampCtx->lsRepPacket,&lsPktln);
285
286 if ( VOS_STATUS_SUCCESS != vosStatus )
287 {
288 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700289 "%s:vos_pkt_get_length error",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700290 return VOS_STATUS_E_FAULT;
291 }
292 pBtampCtx->lsPktln = lsPktln;
293
294 /* Start Link Supervision Timer if not configured for infinite */
295 if (pBtampCtx->bapLinkSupervisionTimerInterval)
296 {
297 vosStatus = WLANBAP_StartLinkSupervisionTimer (pBtampCtx,
298 pBtampCtx->bapLinkSupervisionTimerInterval * WLANBAP_BREDR_BASEBAND_SLOT_TIME);
299 }
300 else
301 {
302 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700303 "%s:No LS configured for infinite",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700304 }
305
306 return vosStatus;
307}
308
309/*===========================================================================
310
311 FUNCTION WLANBAP_DeInitLinkSupervision
312
313 DESCRIPTION
314
315 This API will be called when Link Supervision module is to be stopped after disconnected at BAP
316
317 PARAMETERS
318
319 btampHandle: The BT-AMP PAL handle returned in WLANBAP_GetNewHndl.
320
321 RETURN VALUE
322
323 The result code associated with performing the operation
324
325 VOS_STATUS_E_INVAL: Input parameters are invalid
326 VOS_STATUS_E_FAULT: BAP handle is NULL
327 VOS_STATUS_SUCCESS: Everything is good :)
328
329 SIDE EFFECTS
330
331============================================================================*/
332VOS_STATUS
333WLANBAP_DeInitLinkSupervision
334(
335 ptBtampHandle btampHandle
336)
337{
338 VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
339 ptBtampContext pBtampCtx = (ptBtampContext) btampHandle;
340
341 if ( NULL == pBtampCtx)
342 {
343 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700344 "Invalid BAP handle value in %s", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700345 return VOS_STATUS_E_FAULT;
346 }
347 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700348 "In: %s", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700349
350 vosStatus = WLANBAP_StopLinkSupervisionTimer(pBtampCtx);
351
352
353 /*Free the vos packet*/
354 if ( pBtampCtx->lsRepPacket )
355 {
356 vosStatus = vos_pkt_return_packet(pBtampCtx->lsRepPacket);
357 pBtampCtx->lsRepPacket = NULL;
358 }
359
360 if ( pBtampCtx->lsReqPacket )
361 {
362 vosStatus = vos_pkt_return_packet(pBtampCtx->lsReqPacket);
363 pBtampCtx->lsReqPacket = NULL;
364 }
365
366
367 return vosStatus;
368}
369
370/*===========================================================================
371
372 FUNCTION WLANBAP_RxProcLsPkt
373
374 DESCRIPTION
375
376 This API will be called when Link Supervision frames are received at BAP
377
378 PARAMETERS
379
380 btampHandle: The BT-AMP PAL handle returned in WLANBAP_GetNewHndl.
381 pucAC: Pointer to return the access category
382 vosDataBuff: The data buffer containing the 802.3 frame to be
383 translated to BT HCI Data Packet
384
385 RETURN VALUE
386
387 The result code associated with performing the operation
388
389 VOS_STATUS_E_INVAL: Input parameters are invalid
390 VOS_STATUS_E_FAULT: BAP handle is NULL
391 VOS_STATUS_SUCCESS: Everything is good :)
392
393 SIDE EFFECTS
394
395============================================================================*/
396VOS_STATUS
397WLANBAP_RxProcLsPkt
398(
399 ptBtampHandle btampHandle,
400 v_U8_t phy_link_handle, /* Used by BAP to indentify the WLAN assoc. (StaId) */
401 v_U16_t RxProtoType, /* Protocol Type from the frame received */
402 vos_pkt_t *vosRxLsBuff
403)
404{
405 VOS_STATUS vosStatus;
406 ptBtampContext pBtampCtx = (ptBtampContext) btampHandle;
407 WLANBAP_8023HeaderType w8023Header;
408 v_SIZE_t HeaderLen = sizeof(w8023Header);
409
410
411 /*------------------------------------------------------------------------
412 Sanity check params
413 ------------------------------------------------------------------------*/
414 if ( NULL == pBtampCtx)
415 {
416 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700417 "Invalid BAP handle value in %s", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700418 return VOS_STATUS_E_FAULT;
419 }
420
421 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700422 "In %s Received RxProtoType=%x", __func__,RxProtoType);
Jeff Johnson295189b2012-06-20 16:38:30 -0700423
424 vos_pkt_extract_data(vosRxLsBuff,0,(v_VOID_t*)&w8023Header,&HeaderLen);
425 if ( !(vos_mem_compare( w8023Header.vDA, pBtampCtx->self_mac_addr, VOS_MAC_ADDR_SIZE)
426 && vos_mem_compare( w8023Header.vSA, pBtampCtx->peer_mac_addr, VOS_MAC_ADDR_SIZE)))
427 {
428
429 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700430 "MAC address mismatch in %s", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700431 return VOS_STATUS_E_FAULT;
432 }
433
434 /*Free the vos packet*/
435 vosStatus = vos_pkt_return_packet( vosRxLsBuff );
436 if ( VOS_STATUS_SUCCESS != vosStatus)
437 {
438 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700439 "Failed to free VOS packet in %s", __func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700440 return VOS_STATUS_E_FAULT;
441 }
442
443
444 /* Reset Link Supervision timer */
445 if (RxProtoType == WLANTL_BT_AMP_TYPE_LS_REP)
446 {
447 pBtampCtx->lsReqPktPending = FALSE;
448 pBtampCtx->retries = 0;
449 if (pBtampCtx->bapLinkSupervisionTimerInterval)
450 {
451 /* Restart the LS timer */
452 WLANBAP_StopLinkSupervisionTimer(pBtampCtx);
453 vosStatus = WLANBAP_StartLinkSupervisionTimer (pBtampCtx,
454 pBtampCtx->bapLinkSupervisionTimerInterval * WLANBAP_BREDR_BASEBAND_SLOT_TIME);
455 }
456 }
457 else if(RxProtoType == WLANTL_BT_AMP_TYPE_LS_REQ)
458 {
459 if (pBtampCtx->bapLinkSupervisionTimerInterval)
460 {
461 /* Restart the LS timer */
462 WLANBAP_StopLinkSupervisionTimer(pBtampCtx);
463 vosStatus = WLANBAP_StartLinkSupervisionTimer (pBtampCtx,
464 pBtampCtx->bapLinkSupervisionTimerInterval * WLANBAP_BREDR_BASEBAND_SLOT_TIME);
465 }
466 pBtampCtx->pPacket = pBtampCtx->lsRepPacket;
467 // Handle LS rep frame
468 vosStatus = WLANBAP_TxLinkSupervision( btampHandle, phy_link_handle, pBtampCtx->pPacket, WLANTL_BT_AMP_TYPE_LS_REP);
469 }
470
471 return vosStatus;
472
473}
474
475/* Tx callback function for LS packet */
476static VOS_STATUS WLANBAP_TxLinkSupervisionCB
477(
478 v_PVOID_t pvosGCtx,
479 vos_pkt_t *pPacket,
480 VOS_STATUS retStatus
481)
482{
483 VOS_STATUS vosStatus;
484 ptBtampContext bapContext; /* Holds the btampContext value returned */
485 vos_pkt_t *pLSPacket;
486
487 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO,
488 "TxCompCB reached for LS Pkt");
489
490 /* Get the BT AMP context from the global */
491 bapContext = gpBtampCtx;
492
493 if (!VOS_IS_STATUS_SUCCESS (retStatus))
494 {
495 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
496 "TxCompCB:Transmit status Failure");
497 }
498
499 if ( pPacket == NULL )
500 {
501 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
502 "WLANBAP_TxCompCB bad input\n" );
503 return VOS_STATUS_E_FAILURE;
504 }
505
506
507 /* Return the packet & reallocate */
508
509 if( pPacket == bapContext->lsReqPacket )
510 {
511 vosStatus = WLANBAP_AcquireLSPacket( bapContext, &pLSPacket,32, TRUE );
512 if( VOS_IS_STATUS_SUCCESS( vosStatus ) )
513 {
514 bapContext->lsReqPacket = pLSPacket;
515 }
516 else
517 {
518 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700519 "%s:AcquireLSPacket failed\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700520 bapContext->lsReqPacket = NULL;
521 return vosStatus;
522 }
523 }
524 else
525 {
526 vosStatus = WLANBAP_AcquireLSPacket( bapContext, &pLSPacket,32, FALSE );
527 if( VOS_IS_STATUS_SUCCESS( vosStatus ) )
528 {
529 bapContext->lsRepPacket = pLSPacket;
530 }
531 else
532 {
533 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700534 "%s:AcquireLSPacket failed\n",__func__);
Jeff Johnson295189b2012-06-20 16:38:30 -0700535 bapContext->lsRepPacket = NULL;
536 return vosStatus;
537 }
538 }
539 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_INFO,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700540 "%s:Returned Vos Packet:%x\n",__func__, pPacket );
Jeff Johnson295189b2012-06-20 16:38:30 -0700541
542 vos_pkt_return_packet( pPacket );
543
544 return (VOS_STATUS_SUCCESS );
545}
546
547/*===========================================================================
548
549 FUNCTION WLANBAP_TxLinkSupervision
550
551 DESCRIPTION
552
553 This API will be called to process Link Supervision Request received
554
555 PARAMETERS
556
557 btampHandle: The BT-AMP PAL handle returned in WLANBAP_GetNewHndl.
558 pucAC: Pointer to return the access category
559 vosDataBuff: The data buffer containing the 802.3 frame to be
560 translated to BT HCI Data Packet
561
562 RETURN VALUE
563
564 The result code associated with performing the operation
565
566 VOS_STATUS_E_INVAL: Input parameters are invalid
567 VOS_STATUS_E_FAULT: BAP handle is NULL
568 VOS_STATUS_SUCCESS: Everything is good :)
569
570 SIDE EFFECTS
571
572============================================================================*/
573VOS_STATUS
574WLANBAP_TxLinkSupervision
575(
576 ptBtampHandle btampHandle,
577 v_U8_t phy_link_handle, /* Used by BAP to indentify the WLAN assoc. (StaId) */
578 vos_pkt_t *pPacket,
579 v_U16_t protoType
580)
581{
582 ptBtampContext pBtampCtx = (ptBtampContext)btampHandle;
583 VOS_STATUS vosStatus = VOS_STATUS_E_FAILURE;
584 v_PVOID_t pvosGCtx;
585 v_U8_t ucSTAId; /* The StaId (used by TL, PE, and HAL) */
586 v_PVOID_t pHddHdl; /* Handle to return BSL context in */
587 WLANTL_MetaInfoType metaInfo;
588
589
590 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
Madan Mohan Koyyalamudi87054ba2012-11-02 13:24:12 -0700591 "In : %s protoType=%x", __func__,protoType);
Jeff Johnson295189b2012-06-20 16:38:30 -0700592
593 // Retrieve the VOSS context
594 pvosGCtx = pBtampCtx->pvosGCtx;
595
596 /* Lookup the StaId using the phy_link_handle and the BAP context */
597
598 vosStatus = WLANBAP_GetStaIdFromLinkCtx (
599 btampHandle, /* btampHandle value in */
600 phy_link_handle, /* phy_link_handle value in */
601 &ucSTAId, /* The StaId (used by TL, PE, and HAL) */
602 &pHddHdl); /* Handle to return BSL context */
603
604 if ( VOS_STATUS_SUCCESS != vosStatus )
605 {
606 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
607 "Unable to retrieve STA Id from BAP context and phy_link_handle in WLANBAP_TxLinKSupervisionReq");
608 return VOS_STATUS_E_FAULT;
609 }
610
611 vos_mem_zero( &metaInfo, sizeof( WLANTL_MetaInfoType ) );
612
613 metaInfo.ucTID = 0x00 ;
614 metaInfo.ucUP = 0x00;
615 metaInfo.ucIsEapol = VOS_FALSE;//Notify TL that this is NOT an EAPOL frame
616 metaInfo.ucDisableFrmXtl = VOS_FALSE;
617 metaInfo.ucType = 0x00;
618 pBtampCtx->metaInfo = metaInfo;
619
620 vosStatus = WLANTL_TxBAPFrm( pvosGCtx, pPacket, &metaInfo, WLANBAP_TxLinkSupervisionCB );
621 if( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
622 {
623 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
624 "Tx: Packet rejected by TL in WLANBAP_TxLinkSupervisionReq");
625 return vosStatus;
626 }
627
628 if(protoType == WLANTL_BT_AMP_TYPE_LS_REQ)
629 {
630 pBtampCtx->lsReqPktPending = TRUE;
631 pBtampCtx->retries++;
632 }
633
634 if (pBtampCtx->bapLinkSupervisionTimerInterval)
635 {
636 /* Restart the LS timer */
637 WLANBAP_StopLinkSupervisionTimer(pBtampCtx);
638 vosStatus = WLANBAP_StartLinkSupervisionTimer (pBtampCtx,
639 pBtampCtx->bapLinkSupervisionTimerInterval * WLANBAP_BREDR_BASEBAND_SLOT_TIME);
640 }
641
642 if( !VOS_IS_STATUS_SUCCESS( vosStatus ) )
643 {
644 VOS_TRACE( VOS_MODULE_ID_BAP, VOS_TRACE_LEVEL_ERROR,
645 "WLANBAP_TxLinkSupervisionReq failed to Start LinkSupervision Timer\n" );
646 return vosStatus;
647 }
648
649 return vosStatus;
650} /* WLANBAP_RxLinkSupervisionReq */
651
652
653