Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Side by Side Diff: chromeos/drivers/ath6kl/wmi/wmi.c

Issue 3579004: ath6kl: Bringing in the upstream version (Closed) Base URL: http://git.chromium.org/git/kernel.git
Patch Set: Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chromeos/drivers/ath6kl/wmi/makefile ('k') | chromeos/drivers/ath6kl/wmi/wmi_host.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //------------------------------------------------------------------------------ 1 //------------------------------------------------------------------------------
2 // <copyright file="wmi.c" company="Atheros"> 2 // Copyright (c) 2004-2010 Atheros Corporation. All rights reserved.
3 // Copyright (c) 2004-2010 Atheros Corporation. All rights reserved.
4 // 3 //
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License version 2 as
7 // published by the Free Software Foundation;
8 // 4 //
9 // Software distributed under the License is distributed on an "AS 5 // Permission to use, copy, modify, and/or distribute this software for any
10 // IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 6 // purpose with or without fee is hereby granted, provided that the above
11 // implied. See the License for the specific language governing 7 // copyright notice and this permission notice appear in all copies.
12 // rights and limitations under the License. 8 //
9 // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
13 // 16 //
14 // 17 //
15 //------------------------------------------------------------------------------ 18 //------------------------------------------------------------------------------
16 //============================================================================== 19 //==============================================================================
17 // This module implements the hardware independent layer of the 20 // This module implements the hardware independent layer of the
18 // Wireless Module Interface (WMI) protocol. 21 // Wireless Module Interface (WMI) protocol.
19 // 22 //
20 // Author(s): ="Atheros" 23 // Author(s): ="Atheros"
21 //============================================================================== 24 //==============================================================================
22 25
(...skipping 13 matching lines...) Expand all
36 #include "wmi_host.h" 39 #include "wmi_host.h"
37 #include "a_drv.h" 40 #include "a_drv.h"
38 #include "a_drv_api.h" 41 #include "a_drv_api.h"
39 #define ATH_MODULE_NAME wmi 42 #define ATH_MODULE_NAME wmi
40 #include "a_debug.h" 43 #include "a_debug.h"
41 #include "dbglog_api.h" 44 #include "dbglog_api.h"
42 #include "roaming.h" 45 #include "roaming.h"
43 46
44 #define ATH_DEBUG_WMI ATH_DEBUG_MAKE_MODULE_MASK(0) 47 #define ATH_DEBUG_WMI ATH_DEBUG_MAKE_MODULE_MASK(0)
45 48
46 #ifdef DEBUG 49 #ifdef ATH_DEBUG_MODULE
47 50
48 static ATH_DEBUG_MASK_DESCRIPTION wmi_debug_desc[] = { 51 static ATH_DEBUG_MASK_DESCRIPTION wmi_debug_desc[] = {
49 { ATH_DEBUG_WMI , "General WMI Tracing"}, 52 { ATH_DEBUG_WMI , "General WMI Tracing"},
50 }; 53 };
51 54
52 ATH_DEBUG_INSTANTIATE_MODULE_VAR(wmi, 55 ATH_DEBUG_INSTANTIATE_MODULE_VAR(wmi,
53 "wmi", 56 "wmi",
54 "Wireless Module Interface", 57 "Wireless Module Interface",
55 ATH_DEBUG_MASK_DEFAULTS, 58 ATH_DEBUG_MASK_DEFAULTS,
56 ATH_DEBUG_DESCRIPTION_COUNT(wmi_debug_desc), 59 ATH_DEBUG_DESCRIPTION_COUNT(wmi_debug_desc),
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 static A_STATUS wmi_roam_data_event_rx(struct wmi_t *wmip, A_UINT8 *datap, 122 static A_STATUS wmi_roam_data_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
120 int len); 123 int len);
121 static A_STATUS wmi_get_wow_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, 124 static A_STATUS wmi_get_wow_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
122 int len); 125 int len);
123 static A_STATUS 126 static A_STATUS
124 wmi_get_pmkid_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len); 127 wmi_get_pmkid_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len);
125 128
126 static A_STATUS 129 static A_STATUS
127 wmi_set_params_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len); 130 wmi_set_params_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len);
128 131
132 static A_STATUS
133 wmi_acm_reject_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len);
134
129 #ifdef CONFIG_HOST_GPIO_SUPPORT 135 #ifdef CONFIG_HOST_GPIO_SUPPORT
130 static A_STATUS wmi_gpio_intr_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); 136 static A_STATUS wmi_gpio_intr_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
131 static A_STATUS wmi_gpio_data_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); 137 static A_STATUS wmi_gpio_data_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
132 static A_STATUS wmi_gpio_ack_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); 138 static A_STATUS wmi_gpio_ack_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
133 #endif /* CONFIG_HOST_GPIO_SUPPORT */ 139 #endif /* CONFIG_HOST_GPIO_SUPPORT */
134 140
135 #ifdef CONFIG_HOST_TCMD_SUPPORT 141 #ifdef CONFIG_HOST_TCMD_SUPPORT
136 static A_STATUS 142 static A_STATUS
137 wmi_tcmd_test_report_rx(struct wmi_t *wmip, A_UINT8 *datap, int len); 143 wmi_tcmd_test_report_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
138 #endif 144 #endif
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */ 287 #define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
282 A_UINT8 ip_ttl; /* time to live */ 288 A_UINT8 ip_ttl; /* time to live */
283 A_UINT8 ip_p; /* protocol */ 289 A_UINT8 ip_p; /* protocol */
284 A_UINT16 ip_sum; /* checksum */ 290 A_UINT16 ip_sum; /* checksum */
285 A_UINT8 ip_src[4]; /* source and dest address */ 291 A_UINT8 ip_src[4]; /* source and dest address */
286 A_UINT8 ip_dst[4]; 292 A_UINT8 ip_dst[4];
287 } POSTPACK iphdr; 293 } POSTPACK iphdr;
288 294
289 #include "athendpack.h" 295 #include "athendpack.h"
290 296
291 A_INT16 rssi_event_value = 0; 297 static A_INT16 rssi_event_value = 0;
292 A_INT16 snr_event_value = 0; 298 static A_INT16 snr_event_value = 0;
293 299
294 A_BOOL is_probe_ssid = FALSE; 300 A_BOOL is_probe_ssid = FALSE;
295 301
296 void * 302 void *
297 wmi_init(void *devt) 303 wmi_init(void *devt)
298 { 304 {
299 struct wmi_t *wmip; 305 struct wmi_t *wmip;
300 306
301 A_REGISTER_MODULE_DEBUG_INFO(wmi); 307 A_REGISTER_MODULE_DEBUG_INFO(wmi);
302 308
303 wmip = A_MALLOC(sizeof(struct wmi_t)); 309 wmip = A_MALLOC (sizeof(struct wmi_t));
304 if (wmip == NULL) { 310 if (wmip == NULL) {
305 return (NULL); 311 return (NULL);
306 } 312 }
307 A_MEMZERO(wmip, sizeof(*wmip)); 313 A_MEMZERO(wmip, sizeof(struct wmi_t ));
308 A_MUTEX_INIT(&wmip->wmi_lock); 314 #ifdef THREAD_X
315 INIT_WMI_LOCK(wmip);
316 #else
317 » A_MUTEX_INIT(&wmip->wmi_lock);
318 #endif
309 wmip->wmi_devt = devt; 319 wmip->wmi_devt = devt;
310 wlan_node_table_init(wmip, &wmip->wmi_scan_table); 320 wlan_node_table_init(wmip, &wmip->wmi_scan_table);
311 wmi_qos_state_init(wmip); 321 wmi_qos_state_init(wmip);
312 322
313 wmip->wmi_powerMode = REC_POWER; 323 wmip->wmi_powerMode = REC_POWER;
314 wmip->wmi_phyMode = WMI_11G_MODE; 324 wmip->wmi_phyMode = WMI_11G_MODE;
315 325
316 wmip->wmi_pair_crypto_type = NONE_CRYPT; 326 wmip->wmi_pair_crypto_type = NONE_CRYPT;
317 wmip->wmi_grp_crypto_type = NONE_CRYPT; 327 wmip->wmi_grp_crypto_type = NONE_CRYPT;
318 328
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 { 368 {
359 return(wmip->wmi_endpoint_id); 369 return(wmip->wmi_endpoint_id);
360 } 370 }
361 371
362 void 372 void
363 wmi_shutdown(struct wmi_t *wmip) 373 wmi_shutdown(struct wmi_t *wmip)
364 { 374 {
365 if (wmip != NULL) { 375 if (wmip != NULL) {
366 wlan_node_table_cleanup(&wmip->wmi_scan_table); 376 wlan_node_table_cleanup(&wmip->wmi_scan_table);
367 if (A_IS_MUTEX_VALID(&wmip->wmi_lock)) { 377 if (A_IS_MUTEX_VALID(&wmip->wmi_lock)) {
378 #ifdef THREAD_X
379 DELETE_WMI_LOCK(&wmip);
380 #else
368 A_MUTEX_DELETE(&wmip->wmi_lock); 381 A_MUTEX_DELETE(&wmip->wmi_lock);
382 #endif
369 } 383 }
370 A_FREE(wmip); 384 A_FREE(wmip);
371 } 385 }
372 } 386 }
373 387
374 /* 388 /*
375 * performs DIX to 802.3 encapsulation for transmit packets. 389 * performs DIX to 802.3 encapsulation for transmit packets.
376 * uses passed in buffer. Returns buffer or NULL if failed. 390 * uses passed in buffer. Returns buffer or NULL if failed.
377 * Assumes the entire DIX header is contigous and that there is 391 * Assumes the entire DIX header is contigous and that there is
378 * enough room in the buffer for a 802.3 mac header and LLC+SNAP headers. 392 * enough room in the buffer for a 802.3 mac header and LLC+SNAP headers.
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 /* Extract the endpoint info from the TOS field in the IP header */ 581 /* Extract the endpoint info from the TOS field in the IP header */
568 582
569 userPriority = wmi_determine_userPriority (((A_UINT8 *)llcHdr) + siz eof(ATH_LLC_SNAP_HDR),layer2Priority); 583 userPriority = wmi_determine_userPriority (((A_UINT8 *)llcHdr) + siz eof(ATH_LLC_SNAP_HDR),layer2Priority);
570 } 584 }
571 else 585 else
572 { 586 {
573 userPriority = layer2Priority & 0x7; 587 userPriority = layer2Priority & 0x7;
574 } 588 }
575 } 589 }
576 590
591
592 /* workaround for WMM S5 */
593 if ((WMM_AC_VI == wmip->wmi_traffic_class) && ((5 == userPriority) || (4 == userPriority)))
594 {
595 userPriority = 1;
596 }
597
577 trafficClass = convert_userPriority_to_trafficClass(userPriority); 598 trafficClass = convert_userPriority_to_trafficClass(userPriority);
578 599
579 WMI_DATA_HDR_SET_UP(dtHdr, userPriority); 600 WMI_DATA_HDR_SET_UP(dtHdr, userPriority);
580 //dtHdr->info |= (userPriority & WMI_DATA_HDR_UP_MASK) << WMI_DATA_HDR_UP_SH IFT; /* lower 3-bits are 802.1d priority */ 601 /* lower 3-bits are 802.1d priority */
602 //dtHdr->info |= (userPriority & WMI_DATA_HDR_UP_MASK) << WMI_DATA_HDR_UP_SH IFT;
581 603
582 LOCK_WMI(wmip); 604 LOCK_WMI(wmip);
583 streamExists = wmip->wmi_fatPipeExists; 605 streamExists = wmip->wmi_fatPipeExists;
584 UNLOCK_WMI(wmip); 606 UNLOCK_WMI(wmip);
585 607
586 if (!(streamExists & (1 << trafficClass))) 608 if (!(streamExists & (1 << trafficClass)))
587 { 609 {
588 610
589 A_MEMZERO(&cmd, sizeof(cmd)); 611 A_MEMZERO(&cmd, sizeof(cmd));
590 cmd.trafficClass = trafficClass; 612 cmd.trafficClass = trafficClass;
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
715 hdrsize = A_ROUND_UP(sizeof(struct ieee80211_qosframe),sizeof(A_UINT32)) ; 737 hdrsize = A_ROUND_UP(sizeof(struct ieee80211_qosframe),sizeof(A_UINT32)) ;
716 A_NETBUF_PULL(osbuf, hdrsize); 738 A_NETBUF_PULL(osbuf, hdrsize);
717 } else if (subtype == IEEE80211_FC0_SUBTYPE_DATA) { 739 } else if (subtype == IEEE80211_FC0_SUBTYPE_DATA) {
718 A_NETBUF_PULL(osbuf, sizeof(struct ieee80211_frame)); 740 A_NETBUF_PULL(osbuf, sizeof(struct ieee80211_frame));
719 } 741 }
720 742
721 datap = A_NETBUF_DATA(osbuf); 743 datap = A_NETBUF_DATA(osbuf);
722 llcHdr = (ATH_LLC_SNAP_HDR *)(datap); 744 llcHdr = (ATH_LLC_SNAP_HDR *)(datap);
723 745
724 macHdr.typeOrLen = llcHdr->etherType; 746 macHdr.typeOrLen = llcHdr->etherType;
747 A_MEMZERO(macHdr.dstMac, sizeof(macHdr.dstMac));
748 A_MEMZERO(macHdr.srcMac, sizeof(macHdr.srcMac));
725 749
726 switch (wh.i_fc[1] & IEEE80211_FC1_DIR_MASK) { 750 switch (wh.i_fc[1] & IEEE80211_FC1_DIR_MASK) {
727 case IEEE80211_FC1_DIR_NODS: 751 case IEEE80211_FC1_DIR_NODS:
728 IEEE80211_ADDR_COPY(macHdr.dstMac, wh.i_addr1); 752 IEEE80211_ADDR_COPY(macHdr.dstMac, wh.i_addr1);
729 IEEE80211_ADDR_COPY(macHdr.srcMac, wh.i_addr2); 753 IEEE80211_ADDR_COPY(macHdr.srcMac, wh.i_addr2);
730 break; 754 break;
731 case IEEE80211_FC1_DIR_TODS: 755 case IEEE80211_FC1_DIR_TODS:
732 IEEE80211_ADDR_COPY(macHdr.dstMac, wh.i_addr3); 756 IEEE80211_ADDR_COPY(macHdr.dstMac, wh.i_addr3);
733 IEEE80211_ADDR_COPY(macHdr.srcMac, wh.i_addr2); 757 IEEE80211_ADDR_COPY(macHdr.srcMac, wh.i_addr2);
734 break; 758 break;
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 status = wmi_pspoll_event_rx(wmip, datap, len); 1126 status = wmi_pspoll_event_rx(wmip, datap, len);
1103 break; 1127 break;
1104 case (WMI_DTIMEXPIRY_EVENTID): 1128 case (WMI_DTIMEXPIRY_EVENTID):
1105 A_DPRINTF(DBG_WMI, (DBGFMT "WMI_DTIMEXPIRY_EVENT\n", DBGARG)); 1129 A_DPRINTF(DBG_WMI, (DBGFMT "WMI_DTIMEXPIRY_EVENT\n", DBGARG));
1106 status = wmi_dtimexpiry_event_rx(wmip, datap, len); 1130 status = wmi_dtimexpiry_event_rx(wmip, datap, len);
1107 break; 1131 break;
1108 case (WMI_SET_PARAMS_REPLY_EVENTID): 1132 case (WMI_SET_PARAMS_REPLY_EVENTID):
1109 A_DPRINTF(DBG_WMI, (DBGFMT "WMI_SET_PARAMS_REPLY Event\n", DBGARG)); 1133 A_DPRINTF(DBG_WMI, (DBGFMT "WMI_SET_PARAMS_REPLY Event\n", DBGARG));
1110 status = wmi_set_params_event_rx(wmip, datap, len); 1134 status = wmi_set_params_event_rx(wmip, datap, len);
1111 break; 1135 break;
1136 case (WMI_ACM_REJECT_EVENTID):
1137 A_DPRINTF(DBG_WMI, (DBGFMT "WMI_SET_PARAMS_REPLY Event\n", DBGARG));
1138 status = wmi_acm_reject_event_rx(wmip, datap, len);
1139 break;
1112 #ifdef ATH_AR6K_11N_SUPPORT 1140 #ifdef ATH_AR6K_11N_SUPPORT
1113 case (WMI_ADDBA_REQ_EVENTID): 1141 case (WMI_ADDBA_REQ_EVENTID):
1114 status = wmi_addba_req_event_rx(wmip, datap, len); 1142 status = wmi_addba_req_event_rx(wmip, datap, len);
1115 break; 1143 break;
1116 case (WMI_ADDBA_RESP_EVENTID): 1144 case (WMI_ADDBA_RESP_EVENTID):
1117 status = wmi_addba_resp_event_rx(wmip, datap, len); 1145 status = wmi_addba_resp_event_rx(wmip, datap, len);
1118 break; 1146 break;
1119 case (WMI_DELBA_REQ_EVENTID): 1147 case (WMI_DELBA_REQ_EVENTID):
1120 status = wmi_delba_req_event_rx(wmip, datap, len); 1148 status = wmi_delba_req_event_rx(wmip, datap, len);
1121 break; 1149 break;
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
1322 1350
1323 A_WMI_NEIGHBORREPORT_EVENT(wmip->wmi_devt, numAps, ev->neighbor); 1351 A_WMI_NEIGHBORREPORT_EVENT(wmip->wmi_devt, numAps, ev->neighbor);
1324 1352
1325 return A_OK; 1353 return A_OK;
1326 } 1354 }
1327 1355
1328 static A_STATUS 1356 static A_STATUS
1329 wmi_disconnect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) 1357 wmi_disconnect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
1330 { 1358 {
1331 WMI_DISCONNECT_EVENT *ev; 1359 WMI_DISCONNECT_EVENT *ev;
1360 wmip->wmi_traffic_class = 100;
1332 1361
1333 if (len < sizeof(WMI_DISCONNECT_EVENT)) { 1362 if (len < sizeof(WMI_DISCONNECT_EVENT)) {
1334 return A_EINVAL; 1363 return A_EINVAL;
1335 } 1364 }
1336 A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); 1365 A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
1337 1366
1338 ev = (WMI_DISCONNECT_EVENT *)datap; 1367 ev = (WMI_DISCONNECT_EVENT *)datap;
1339 1368
1340 A_MEMZERO(wmip->wmi_bssid, sizeof(wmip->wmi_bssid)); 1369 A_MEMZERO(wmip->wmi_bssid, sizeof(wmip->wmi_bssid));
1341 1370
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 } 1449 }
1421 1450
1422 if(!nodeCachingAllowed) { 1451 if(!nodeCachingAllowed) {
1423 wmi_node_return(wmip, bss); 1452 wmi_node_return(wmip, bss);
1424 return A_OK; 1453 return A_OK;
1425 } 1454 }
1426 1455
1427 buf = datap + sizeof(WMI_BSS_INFO_HDR); 1456 buf = datap + sizeof(WMI_BSS_INFO_HDR);
1428 len -= sizeof(WMI_BSS_INFO_HDR); 1457 len -= sizeof(WMI_BSS_INFO_HDR);
1429 1458
1430 A_DPRINTF(DBG_WMI2, (DBGFMT "bssInfo event - ch %u, rssi %02x, " 1459 » A_DPRINTF(DBG_WMI2, (DBGFMT "bssInfo event - ch %u, rssi %02x, "
1431 "bssid \"%02x:%02x:%02x:%02x:%02x:%02x\"\n", DBGARG, 1460 » » "bssid \"%pM\"\n", DBGARG, bih->channel,
1432 bih->channel, (unsigned char) bih->rssi, bih->bssid[0], 1461 » » (unsigned char) bih->rssi, bih->bssid));
1433 bih->bssid[1], bih->bssid[2], bih->bssid[3], bih->bssid[4],
1434 bih->bssid[5]));
1435 1462
1436 if(wps_enable && (bih->frameType == PROBERESP_FTYPE) ) { 1463 if(wps_enable && (bih->frameType == PROBERESP_FTYPE) ) {
1437 wmi_node_return(wmip, bss); 1464 wmi_node_return(wmip, bss);
1438 return A_OK; 1465 return A_OK;
1439 } 1466 }
1440 1467
1441 if (bss != NULL) { 1468 if (bss != NULL) {
1442 /* 1469 /*
1443 * Free up the node. Not the most efficient process given 1470 * Free up the node. Not the most efficient process given
1444 * we are about to allocate a new node but it is simple and should be 1471 * we are about to allocate a new node but it is simple and should be
1445 * adequate. 1472 * adequate.
1446 */ 1473 */
1447 1474
1448 /* In case of hidden AP, beacon will not have ssid, 1475 /* In case of hidden AP, beacon will not have ssid,
1449 * but a directed probe response will have it, 1476 * but a directed probe response will have it,
1450 * so cache the probe-resp-ssid if already present. */ 1477 * so cache the probe-resp-ssid if already present. */
1451 if ((TRUE == is_probe_ssid) && (BEACON_FTYPE == bih->frameType)) 1478 if ((TRUE == is_probe_ssid) && (BEACON_FTYPE == bih->frameType))
1452 { 1479 {
1453 A_UCHAR *ie_ssid; 1480 A_UCHAR *ie_ssid;
1454 1481
1455 ie_ssid = bss->ni_cie.ie_ssid; 1482 ie_ssid = bss->ni_cie.ie_ssid;
1456 if(ie_ssid && (ie_ssid[1] <= IEEE80211_NWID_LEN) && (ie_ssid[2] != 0 )) 1483 if(ie_ssid && (ie_ssid[1] <= IEEE80211_NWID_LEN) && (ie_ssid[2] != 0 ))
1457 { 1484 {
1458 cached_ssid_len = ie_ssid[1]; 1485 cached_ssid_len = ie_ssid[1];
1459 memcpy(cached_ssid_buf, ie_ssid + 2, cached_ssid_len); 1486 memcpy(cached_ssid_buf, ie_ssid + 2, cached_ssid_len);
1460 } 1487 }
1461 } 1488 }
1462 1489
1463 /* 1490 /*
1464 * Use the current average rssi of associated AP base on assumpiton 1491 * Use the current average rssi of associated AP base on assumpiton
1465 * 1. Most os with GUI will update RSSI by wmi_get_stats_cmd() periodica lly 1492 * 1. Most os with GUI will update RSSI by wmi_get_stats_cmd() periodica lly
1466 * 2. wmi_get_stats_cmd(..) will be called when calling wmi_startscan_cm d(...) 1493 * 2. wmi_get_stats_cmd(..) will be called when calling wmi_startscan_cm d(...)
1467 * The average value of RSSI give end-user better feeling for instance v alue of scan result 1494 * The average value of RSSI give end-user better feeling for instance v alue of scan result
1468 * It also sync up RSSI info in GUI between scan result and RSSI signal icon 1495 * It also sync up RSSI info in GUI between scan result and RSSI signal icon
1469 */ 1496 */
1470 if (bss && IEEE80211_ADDR_EQ(wmip->wmi_bssid, bih->bssid)) { 1497 if (IEEE80211_ADDR_EQ(wmip->wmi_bssid, bih->bssid)) {
1471 bih->rssi = bss->ni_rssi; 1498 bih->rssi = bss->ni_rssi;
1472 bih->snr = bss->ni_snr; 1499 bih->snr = bss->ni_snr;
1473 } 1500 }
1474 1501
1475 wlan_node_reclaim(&wmip->wmi_scan_table, bss); 1502 wlan_node_reclaim(&wmip->wmi_scan_table, bss);
1476 } 1503 }
1477 1504
1478 /* beacon/probe response frame format 1505 /* beacon/probe response frame format
1479 * [8] time stamp 1506 * [8] time stamp
1480 * [2] beacon interval 1507 * [2] beacon interval
1481 * [2] capability information 1508 * [2] capability information
1482 * [tlv] ssid */ 1509 * [tlv] ssid */
1483 beacon_ssid_len = buf[SSID_IE_LEN_INDEX]; 1510 beacon_ssid_len = buf[SSID_IE_LEN_INDEX];
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1782 return A_OK; 1809 return A_OK;
1783 } 1810 }
1784 #endif /* CONFIG_HOST_DSET_SUPPORT */ 1811 #endif /* CONFIG_HOST_DSET_SUPPORT */
1785 1812
1786 static A_STATUS 1813 static A_STATUS
1787 wmi_scanComplete_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) 1814 wmi_scanComplete_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
1788 { 1815 {
1789 WMI_SCAN_COMPLETE_EVENT *ev; 1816 WMI_SCAN_COMPLETE_EVENT *ev;
1790 1817
1791 ev = (WMI_SCAN_COMPLETE_EVENT *)datap; 1818 ev = (WMI_SCAN_COMPLETE_EVENT *)datap;
1819 if ((A_STATUS)ev->status == A_OK) {
1820 wlan_refresh_inactive_nodes(&wmip->wmi_scan_table);
1821 }
1792 A_WMI_SCANCOMPLETE_EVENT(wmip->wmi_devt, (A_STATUS) ev->status); 1822 A_WMI_SCANCOMPLETE_EVENT(wmip->wmi_devt, (A_STATUS) ev->status);
1793 is_probe_ssid = FALSE; 1823 is_probe_ssid = FALSE;
1794 1824
1795 return A_OK; 1825 return A_OK;
1796 } 1826 }
1797 1827
1798 /* 1828 /*
1799 * Target is reporting a programming error. This is for 1829 * Target is reporting a programming error. This is for
1800 * developer aid only. Target only checks a few common violations 1830 * developer aid only. Target only checks a few common violations
1801 * and it is responsibility of host to do all error checking. 1831 * and it is responsibility of host to do all error checking.
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1954 A_WMI_REPORT_ERROR_EVENT(wmip->wmi_devt, (WMI_TARGET_ERROR_VAL) reply->error Val); 1984 A_WMI_REPORT_ERROR_EVENT(wmip->wmi_devt, (WMI_TARGET_ERROR_VAL) reply->error Val);
1955 1985
1956 return A_OK; 1986 return A_OK;
1957 } 1987 }
1958 1988
1959 static A_STATUS 1989 static A_STATUS
1960 wmi_cac_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) 1990 wmi_cac_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
1961 { 1991 {
1962 WMI_CAC_EVENT *reply; 1992 WMI_CAC_EVENT *reply;
1963 WMM_TSPEC_IE *tspec_ie; 1993 WMM_TSPEC_IE *tspec_ie;
1994 A_UINT16 activeTsids;
1964 1995
1965 if (len < sizeof(*reply)) { 1996 if (len < sizeof(*reply)) {
1966 return A_EINVAL; 1997 return A_EINVAL;
1967 } 1998 }
1968 reply = (WMI_CAC_EVENT *)datap; 1999 reply = (WMI_CAC_EVENT *)datap;
1969 2000
1970 A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG)); 2001 A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
1971 2002
1972 if ((reply->cac_indication == CAC_INDICATION_ADMISSION_RESP) && 2003 if ((reply->cac_indication == CAC_INDICATION_ADMISSION_RESP) &&
1973 (reply->statusCode != TSPEC_STATUS_CODE_ADMISSION_ACCEPTED)) { 2004 (reply->statusCode != TSPEC_STATUS_CODE_ADMISSION_ACCEPTED)) {
1974 tspec_ie = (WMM_TSPEC_IE *) &(reply->tspecSuggestion); 2005 tspec_ie = (WMM_TSPEC_IE *) &(reply->tspecSuggestion);
1975 2006
1976 wmi_delete_pstream_cmd(wmip, reply->ac, 2007 wmi_delete_pstream_cmd(wmip, reply->ac,
1977 (tspec_ie->tsInfo_info >> TSPEC_TSID_S) & TSPEC_TSID_MASK); 2008 (tspec_ie->tsInfo_info >> TSPEC_TSID_S) & TSPEC_TSID_MASK);
1978 } 2009 }
1979 else if (reply->cac_indication == CAC_INDICATION_NO_RESP) { 2010 else if (reply->cac_indication == CAC_INDICATION_NO_RESP) {
1980 A_UINT16 activeTsids;
1981 A_UINT8 i; 2011 A_UINT8 i;
1982 2012
1983 /* following assumes that there is only one outstanding ADDTS request 2013 /* following assumes that there is only one outstanding ADDTS request
1984 when this event is received */ 2014 when this event is received */
1985 LOCK_WMI(wmip); 2015 LOCK_WMI(wmip);
1986 activeTsids = wmip->wmi_streamExistsForAC[reply->ac]; 2016 activeTsids = wmip->wmi_streamExistsForAC[reply->ac];
1987 UNLOCK_WMI(wmip); 2017 UNLOCK_WMI(wmip);
1988 2018
1989 for (i = 0; i < sizeof(activeTsids) * 8; i++) { 2019 for (i = 0; i < sizeof(activeTsids) * 8; i++) {
1990 if ((activeTsids >> i) & 1) { 2020 if ((activeTsids >> i) & 1) {
1991 break; 2021 break;
1992 } 2022 }
1993 } 2023 }
1994 if (i < (sizeof(activeTsids) * 8)) { 2024 if (i < (sizeof(activeTsids) * 8)) {
1995 wmi_delete_pstream_cmd(wmip, reply->ac, i); 2025 wmi_delete_pstream_cmd(wmip, reply->ac, i);
1996 } 2026 }
1997 } 2027 }
2028 /*
2029 * Ev#72990: Clear active tsids and Add missing handling
2030 * for delete qos stream from AP
2031 */
2032 else if (reply->cac_indication == CAC_INDICATION_DELETE) {
2033 A_UINT8 tsid = 0;
2034
2035 tspec_ie = (WMM_TSPEC_IE *) &(reply->tspecSuggestion);
2036 tsid= ((tspec_ie->tsInfo_info >> TSPEC_TSID_S) & TSPEC_TSID_MASK);
2037 LOCK_WMI(wmip);
2038 wmip->wmi_streamExistsForAC[reply->ac] &= ~(1<<tsid);
2039 activeTsids = wmip->wmi_streamExistsForAC[reply->ac];
2040 UNLOCK_WMI(wmip);
2041
2042
2043 /* Indicate stream inactivity to driver layer only if all tsids
2044 * within this AC are deleted.
2045 */
2046 if (!activeTsids) {
2047 A_WMI_STREAM_TX_INACTIVE(wmip->wmi_devt, reply->ac);
2048 wmip->wmi_fatPipeExists &= ~(1 << reply->ac);
2049 }
2050 }
1998 2051
1999 A_WMI_CAC_EVENT(wmip->wmi_devt, reply->ac, 2052 A_WMI_CAC_EVENT(wmip->wmi_devt, reply->ac,
2000 reply->cac_indication, reply->statusCode, 2053 reply->cac_indication, reply->statusCode,
2001 reply->tspecSuggestion); 2054 reply->tspecSuggestion);
2002 2055
2003 return A_OK; 2056 return A_OK;
2004 } 2057 }
2005 2058
2006 static A_STATUS 2059 static A_STATUS
2007 wmi_channel_change_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len) 2060 wmi_channel_change_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
2365 A_STATUS 2418 A_STATUS
2366 wmi_connect_cmd(struct wmi_t *wmip, NETWORK_TYPE netType, 2419 wmi_connect_cmd(struct wmi_t *wmip, NETWORK_TYPE netType,
2367 DOT11_AUTH_MODE dot11AuthMode, AUTH_MODE authMode, 2420 DOT11_AUTH_MODE dot11AuthMode, AUTH_MODE authMode,
2368 CRYPTO_TYPE pairwiseCrypto, A_UINT8 pairwiseCryptoLen, 2421 CRYPTO_TYPE pairwiseCrypto, A_UINT8 pairwiseCryptoLen,
2369 CRYPTO_TYPE groupCrypto, A_UINT8 groupCryptoLen, 2422 CRYPTO_TYPE groupCrypto, A_UINT8 groupCryptoLen,
2370 int ssidLength, A_UCHAR *ssid, 2423 int ssidLength, A_UCHAR *ssid,
2371 A_UINT8 *bssid, A_UINT16 channel, A_UINT32 ctrl_flags) 2424 A_UINT8 *bssid, A_UINT16 channel, A_UINT32 ctrl_flags)
2372 { 2425 {
2373 void *osbuf; 2426 void *osbuf;
2374 WMI_CONNECT_CMD *cc; 2427 WMI_CONNECT_CMD *cc;
2428 wmip->wmi_traffic_class = 100;
2375 2429
2376 if ((pairwiseCrypto == NONE_CRYPT) && (groupCrypto != NONE_CRYPT)) { 2430 if ((pairwiseCrypto == NONE_CRYPT) && (groupCrypto != NONE_CRYPT)) {
2377 return A_EINVAL; 2431 return A_EINVAL;
2378 } 2432 }
2379 if ((pairwiseCrypto != NONE_CRYPT) && (groupCrypto == NONE_CRYPT)) { 2433 if ((pairwiseCrypto != NONE_CRYPT) && (groupCrypto == NONE_CRYPT)) {
2380 return A_EINVAL; 2434 return A_EINVAL;
2381 } 2435 }
2382 2436
2383 osbuf = A_NETBUF_ALLOC(sizeof(WMI_CONNECT_CMD)); 2437 osbuf = A_NETBUF_ALLOC(sizeof(WMI_CONNECT_CMD));
2384 if (osbuf == NULL) { 2438 if (osbuf == NULL) {
(...skipping 17 matching lines...) Expand all
2402 cc->pairwiseCryptoType = pairwiseCrypto; 2456 cc->pairwiseCryptoType = pairwiseCrypto;
2403 cc->pairwiseCryptoLen = pairwiseCryptoLen; 2457 cc->pairwiseCryptoLen = pairwiseCryptoLen;
2404 cc->groupCryptoType = groupCrypto; 2458 cc->groupCryptoType = groupCrypto;
2405 cc->groupCryptoLen = groupCryptoLen; 2459 cc->groupCryptoLen = groupCryptoLen;
2406 cc->channel = channel; 2460 cc->channel = channel;
2407 cc->ctrl_flags = ctrl_flags; 2461 cc->ctrl_flags = ctrl_flags;
2408 2462
2409 if (bssid != NULL) { 2463 if (bssid != NULL) {
2410 A_MEMCPY(cc->bssid, bssid, ATH_MAC_LEN); 2464 A_MEMCPY(cc->bssid, bssid, ATH_MAC_LEN);
2411 } 2465 }
2412 2466
2413 wmip->wmi_pair_crypto_type = pairwiseCrypto; 2467 wmip->wmi_pair_crypto_type = pairwiseCrypto;
2414 wmip->wmi_grp_crypto_type = groupCrypto; 2468 wmip->wmi_grp_crypto_type = groupCrypto;
2415 2469
2416 return (wmi_cmd_send(wmip, osbuf, WMI_CONNECT_CMDID, NO_SYNC_WMIFLAG)); 2470 return (wmi_cmd_send(wmip, osbuf, WMI_CONNECT_CMDID, NO_SYNC_WMIFLAG));
2417 } 2471 }
2418 2472
2419 A_STATUS 2473 A_STATUS
2420 wmi_reconnect_cmd(struct wmi_t *wmip, A_UINT8 *bssid, A_UINT16 channel) 2474 wmi_reconnect_cmd(struct wmi_t *wmip, A_UINT8 *bssid, A_UINT16 channel)
2421 { 2475 {
2422 void *osbuf; 2476 void *osbuf;
2423 WMI_RECONNECT_CMD *cc; 2477 WMI_RECONNECT_CMD *cc;
2478 wmip->wmi_traffic_class = 100;
2424 2479
2425 osbuf = A_NETBUF_ALLOC(sizeof(WMI_RECONNECT_CMD)); 2480 osbuf = A_NETBUF_ALLOC(sizeof(WMI_RECONNECT_CMD));
2426 if (osbuf == NULL) { 2481 if (osbuf == NULL) {
2427 return A_NO_MEMORY; 2482 return A_NO_MEMORY;
2428 } 2483 }
2429 2484
2430 A_NETBUF_PUT(osbuf, sizeof(WMI_RECONNECT_CMD)); 2485 A_NETBUF_PUT(osbuf, sizeof(WMI_RECONNECT_CMD));
2431 2486
2432 cc = (WMI_RECONNECT_CMD *)(A_NETBUF_DATA(osbuf)); 2487 cc = (WMI_RECONNECT_CMD *)(A_NETBUF_DATA(osbuf));
2433 A_MEMZERO(cc, sizeof(*cc)); 2488 A_MEMZERO(cc, sizeof(*cc));
2434 2489
2435 cc->channel = channel; 2490 cc->channel = channel;
2436 2491
2437 if (bssid != NULL) { 2492 if (bssid != NULL) {
2438 A_MEMCPY(cc->bssid, bssid, ATH_MAC_LEN); 2493 A_MEMCPY(cc->bssid, bssid, ATH_MAC_LEN);
2439 } 2494 }
2440 2495
2441 return (wmi_cmd_send(wmip, osbuf, WMI_RECONNECT_CMDID, NO_SYNC_WMIFLAG)); 2496 return (wmi_cmd_send(wmip, osbuf, WMI_RECONNECT_CMDID, NO_SYNC_WMIFLAG));
2442 } 2497 }
2443 2498
2444 A_STATUS 2499 A_STATUS
2445 wmi_disconnect_cmd(struct wmi_t *wmip) 2500 wmi_disconnect_cmd(struct wmi_t *wmip)
2446 { 2501 {
2447 A_STATUS status; 2502 A_STATUS status;
2503 wmip->wmi_traffic_class = 100;
2448 2504
2449 /* Bug fix for 24817(elevator bug) - the disconnect command does not 2505 /* Bug fix for 24817(elevator bug) - the disconnect command does not
2450 need to do a SYNC before.*/ 2506 need to do a SYNC before.*/
2451 status = wmi_simple_cmd(wmip, WMI_DISCONNECT_CMDID); 2507 status = wmi_simple_cmd(wmip, WMI_DISCONNECT_CMDID);
2452 2508
2453 return status; 2509 return status;
2454 } 2510 }
2455 2511
2456 A_STATUS 2512 A_STATUS
2457 wmi_startscan_cmd(struct wmi_t *wmip, WMI_SCAN_TYPE scanType, 2513 wmi_startscan_cmd(struct wmi_t *wmip, WMI_SCAN_TYPE scanType,
(...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after
3336 3392
3337 /* 3393 /*
3338 * used to set the bit rate. rate is in Kbps. If rate == -1 3394 * used to set the bit rate. rate is in Kbps. If rate == -1
3339 * then auto selection is used. 3395 * then auto selection is used.
3340 */ 3396 */
3341 A_STATUS 3397 A_STATUS
3342 wmi_set_bitrate_cmd(struct wmi_t *wmip, A_INT32 dataRate, A_INT32 mgmtRate, A_IN T32 ctlRate) 3398 wmi_set_bitrate_cmd(struct wmi_t *wmip, A_INT32 dataRate, A_INT32 mgmtRate, A_IN T32 ctlRate)
3343 { 3399 {
3344 void *osbuf; 3400 void *osbuf;
3345 WMI_BIT_RATE_CMD *cmd; 3401 WMI_BIT_RATE_CMD *cmd;
3346 A_INT8 drix, mrix, crix; 3402 A_INT8 drix, mrix, crix, ret_val;
3347 3403
3348 if (dataRate != -1) { 3404 if (dataRate != -1) {
3349 drix = wmi_validate_bitrate(wmip, dataRate); 3405 ret_val = wmi_validate_bitrate(wmip, dataRate, &drix);
3350 if(drix == A_EINVAL){ 3406 if(ret_val == A_EINVAL){
3351 return A_EINVAL; 3407 return A_EINVAL;
3352 } 3408 }
3353 } else { 3409 } else {
3354 drix = -1; 3410 drix = -1;
3355 } 3411 }
3356 3412
3357 if (mgmtRate != -1) { 3413 if (mgmtRate != -1) {
3358 mrix = wmi_validate_bitrate(wmip, mgmtRate); 3414 ret_val = wmi_validate_bitrate(wmip, mgmtRate, &mrix);
3359 if(mrix == A_EINVAL){ 3415 if(ret_val == A_EINVAL){
3360 return A_EINVAL; 3416 return A_EINVAL;
3361 } 3417 }
3362 } else { 3418 } else {
3363 mrix = -1; 3419 mrix = -1;
3364 } 3420 }
3365 if (ctlRate != -1) { 3421 if (ctlRate != -1) {
3366 crix = wmi_validate_bitrate(wmip, ctlRate); 3422 ret_val = wmi_validate_bitrate(wmip, ctlRate, &crix);
3367 if(crix == A_EINVAL){ 3423 if(ret_val == A_EINVAL){
3368 return A_EINVAL; 3424 return A_EINVAL;
3369 } 3425 }
3370 } else { 3426 } else {
3371 crix = -1; 3427 crix = -1;
3372 } 3428 }
3373 osbuf = A_NETBUF_ALLOC(sizeof(*cmd)); 3429 osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
3374 if (osbuf == NULL) { 3430 if (osbuf == NULL) {
3375 return A_NO_MEMORY; 3431 return A_NO_MEMORY;
3376 } 3432 }
3377 3433
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
3427 isValid = FALSE; 3483 isValid = FALSE;
3428 } 3484 }
3429 } else { 3485 } else {
3430 if ((rateIndex < MODE_GONLY_SUPPORT_RATE_START) || (rateIndex > MODE_GONLY_SUPPORT_RATE_STOP)) { 3486 if ((rateIndex < MODE_GONLY_SUPPORT_RATE_START) || (rateIndex > MODE_GONLY_SUPPORT_RATE_STOP)) {
3431 isValid = FALSE; 3487 isValid = FALSE;
3432 } 3488 }
3433 } 3489 }
3434 break; 3490 break;
3435 3491
3436 case WMI_11G_MODE: 3492 case WMI_11G_MODE:
3437 case WMI_11AG_MODE: 3493 case WMI_11AG_MODE:
3438 if (wmip->wmi_ht_allowed[A_BAND_24GHZ]){ 3494 if (wmip->wmi_ht_allowed[A_BAND_24GHZ]){
3439 if ((rateIndex < MODE_G_SUPPORT_RATE_START) || (rateIndex > MODE _GHT20_SUPPORT_RATE_STOP)) { 3495 if ((rateIndex < MODE_G_SUPPORT_RATE_START) || (rateIndex > MODE _GHT20_SUPPORT_RATE_STOP)) {
3440 isValid = FALSE; 3496 isValid = FALSE;
3441 } 3497 }
3442 } else { 3498 } else {
3443 if ((rateIndex < MODE_G_SUPPORT_RATE_START) || (rateIndex > MODE _G_SUPPORT_RATE_STOP)) { 3499 if ((rateIndex < MODE_G_SUPPORT_RATE_START) || (rateIndex > MODE _G_SUPPORT_RATE_STOP)) {
3444 isValid = FALSE; 3500 isValid = FALSE;
3445 } 3501 }
3446 } 3502 }
3447 break; 3503 break;
3448 default: 3504 default:
3449 A_ASSERT(FALSE); 3505 A_ASSERT(FALSE);
3450 break; 3506 break;
3451 } 3507 }
3452 3508
3453 return isValid; 3509 return isValid;
3454 } 3510 }
3455 3511
3456 A_INT8 3512 A_INT8
3457 wmi_validate_bitrate(struct wmi_t *wmip, A_INT32 rate) 3513 wmi_validate_bitrate(struct wmi_t *wmip, A_INT32 rate, A_INT8 *rate_idx)
3458 { 3514 {
3459 A_INT8 i; 3515 A_INT8 i;
3460 if (rate != -1) 3516
3517 for (i=0;;i++)
3461 { 3518 {
3462 for (i=0;;i++) 3519 if (wmi_rateTable[(A_UINT32) i][0] == 0) {
3463 { 3520 return A_EINVAL;
3464 if (wmi_rateTable[(A_UINT32) i][0] == 0) {
3465 return A_EINVAL;
3466 }
3467 if (wmi_rateTable[(A_UINT32) i][0] == rate) {
3468 break;
3469 }
3470 } 3521 }
3471 } 3522 if (wmi_rateTable[(A_UINT32) i][0] == rate) {
3472 else{ 3523 break;
3473 i = -1; 3524 }
3474 } 3525 }
3475 3526
3476 if(wmi_is_bitrate_index_valid(wmip, (A_INT32) i) != TRUE) { 3527 if(wmi_is_bitrate_index_valid(wmip, (A_INT32) i) != TRUE) {
3477 return A_EINVAL; 3528 return A_EINVAL;
3478 } 3529 }
3479 3530
3480 return i; 3531 *rate_idx = i;
3532 return A_OK;
3481 } 3533 }
3482 3534
3483 A_STATUS 3535 A_STATUS
3484 wmi_set_fixrates_cmd(struct wmi_t *wmip, A_UINT32 fixRatesMask) 3536 wmi_set_fixrates_cmd(struct wmi_t *wmip, A_UINT32 fixRatesMask)
3485 { 3537 {
3486 void *osbuf; 3538 void *osbuf;
3487 WMI_FIX_RATES_CMD *cmd; 3539 WMI_FIX_RATES_CMD *cmd;
3488 #if 0 3540 #if 0
3489 A_INT32 rateIndex; 3541 A_INT32 rateIndex;
3490 /* This check does not work for AR6003 as the HT modes are enabled only when 3542 /* This check does not work for AR6003 as the HT modes are enabled only when
(...skipping 1841 matching lines...) Expand 10 before | Expand all | Expand 10 after
5332 wmi_find_Ssidnode (struct wmi_t *wmip, A_UCHAR *pSsid, 5384 wmi_find_Ssidnode (struct wmi_t *wmip, A_UCHAR *pSsid,
5333 A_UINT32 ssidLength, A_BOOL bIsWPA2, A_BOOL bMatchSSID) 5385 A_UINT32 ssidLength, A_BOOL bIsWPA2, A_BOOL bMatchSSID)
5334 { 5386 {
5335 bss_t *node = NULL; 5387 bss_t *node = NULL;
5336 node = wlan_find_Ssidnode (&wmip->wmi_scan_table, pSsid, 5388 node = wlan_find_Ssidnode (&wmip->wmi_scan_table, pSsid,
5337 ssidLength, bIsWPA2, bMatchSSID); 5389 ssidLength, bIsWPA2, bMatchSSID);
5338 return node; 5390 return node;
5339 } 5391 }
5340 5392
5341 5393
5394 #ifdef THREAD_X
5395 void
5396 wmi_refresh_scan_table (struct wmi_t *wmip)
5397 {
5398 wlan_refresh_inactive_nodes (&wmip->wmi_scan_table);
5399 }
5400 #endif
5401
5342 void 5402 void
5343 wmi_free_allnodes(struct wmi_t *wmip) 5403 wmi_free_allnodes(struct wmi_t *wmip)
5344 { 5404 {
5345 wlan_free_allnodes(&wmip->wmi_scan_table); 5405 wlan_free_allnodes(&wmip->wmi_scan_table);
5346 } 5406 }
5347 5407
5348 bss_t * 5408 bss_t *
5349 wmi_find_node(struct wmi_t *wmip, const A_UINT8 *macaddr) 5409 wmi_find_node(struct wmi_t *wmip, const A_UINT8 *macaddr)
5350 { 5410 {
5351 bss_t *ni=NULL; 5411 bss_t *ni=NULL;
(...skipping 20 matching lines...) Expand all
5372 A_UINT32 access_cookie, 5432 A_UINT32 access_cookie,
5373 A_UINT32 dset_size, 5433 A_UINT32 dset_size,
5374 A_UINT32 dset_version, 5434 A_UINT32 dset_version,
5375 A_UINT32 targ_handle, 5435 A_UINT32 targ_handle,
5376 A_UINT32 targ_reply_fn, 5436 A_UINT32 targ_reply_fn,
5377 A_UINT32 targ_reply_arg) 5437 A_UINT32 targ_reply_arg)
5378 { 5438 {
5379 void *osbuf; 5439 void *osbuf;
5380 WMIX_DSETOPEN_REPLY_CMD *open_reply; 5440 WMIX_DSETOPEN_REPLY_CMD *open_reply;
5381 5441
5382 A_DPRINTF(DBG_WMI, (DBGFMT "Enter - wmip=0x%x\n", DBGARG, (int)wmip)); 5442 A_DPRINTF(DBG_WMI, (DBGFMT "Enter - wmip=0x%lx\n", DBGARG, (unsigned long)wm ip));
5383 5443
5384 osbuf = A_NETBUF_ALLOC(sizeof(*open_reply)); 5444 osbuf = A_NETBUF_ALLOC(sizeof(*open_reply));
5385 if (osbuf == NULL) { 5445 if (osbuf == NULL) {
5386 return A_NO_MEMORY; 5446 return A_NO_MEMORY;
5387 } 5447 }
5388 5448
5389 A_NETBUF_PUT(osbuf, sizeof(*open_reply)); 5449 A_NETBUF_PUT(osbuf, sizeof(*open_reply));
5390 open_reply = (WMIX_DSETOPEN_REPLY_CMD *)(A_NETBUF_DATA(osbuf)); 5450 open_reply = (WMIX_DSETOPEN_REPLY_CMD *)(A_NETBUF_DATA(osbuf));
5391 5451
5392 open_reply->status = status; 5452 open_reply->status = status;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
5441 else 5501 else
5442 { 5502 {
5443 5503
5444 } 5504 }
5445 5505
5446 return A_OK; 5506 return A_OK;
5447 } 5507 }
5448 5508
5449 5509
5450 5510
5511 static A_STATUS
5512 wmi_acm_reject_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len)
5513 {
5514 WMI_ACM_REJECT_EVENT *ev;
5515
5516 ev = (WMI_ACM_REJECT_EVENT *)datap;
5517 wmip->wmi_traffic_class = ev->trafficClass;
5518 printk("ACM REJECT %d\n",wmip->wmi_traffic_class);
5519 return A_OK;
5520 }
5521
5522
5451 #ifdef CONFIG_HOST_DSET_SUPPORT 5523 #ifdef CONFIG_HOST_DSET_SUPPORT
5452 A_STATUS 5524 A_STATUS
5453 wmi_dset_data_reply(struct wmi_t *wmip, 5525 wmi_dset_data_reply(struct wmi_t *wmip,
5454 A_UINT32 status, 5526 A_UINT32 status,
5455 A_UINT8 *user_buf, 5527 A_UINT8 *user_buf,
5456 A_UINT32 length, 5528 A_UINT32 length,
5457 A_UINT32 targ_buf, 5529 A_UINT32 targ_buf,
5458 A_UINT32 targ_reply_fn, 5530 A_UINT32 targ_reply_fn,
5459 A_UINT32 targ_reply_arg) 5531 A_UINT32 targ_reply_arg)
5460 { 5532 {
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after
6323 } 6395 }
6324 6396
6325 A_NETBUF_PUT(osbuf, sizeof(*htCap)); 6397 A_NETBUF_PUT(osbuf, sizeof(*htCap));
6326 6398
6327 band = (cmd->band)? A_BAND_5GHZ : A_BAND_24GHZ; 6399 band = (cmd->band)? A_BAND_5GHZ : A_BAND_24GHZ;
6328 wmip->wmi_ht_allowed[band] = (cmd->enable)? 1:0; 6400 wmip->wmi_ht_allowed[band] = (cmd->enable)? 1:0;
6329 6401
6330 htCap = (WMI_SET_HT_CAP_CMD *)(A_NETBUF_DATA(osbuf)); 6402 htCap = (WMI_SET_HT_CAP_CMD *)(A_NETBUF_DATA(osbuf));
6331 A_MEMZERO(htCap, sizeof(*htCap)); 6403 A_MEMZERO(htCap, sizeof(*htCap));
6332 A_MEMCPY(htCap, cmd, sizeof(*htCap)); 6404 A_MEMCPY(htCap, cmd, sizeof(*htCap));
6333 6405
6334 return (wmi_cmd_send(wmip, osbuf, WMI_SET_HT_CAP_CMDID, 6406 return (wmi_cmd_send(wmip, osbuf, WMI_SET_HT_CAP_CMDID,
6335 NO_SYNC_WMIFLAG)); 6407 NO_SYNC_WMIFLAG));
6336 } 6408 }
6337 6409
6338 A_STATUS 6410 A_STATUS
6339 wmi_set_ht_op_cmd(struct wmi_t *wmip, A_UINT8 sta_chan_width) 6411 wmi_set_ht_op_cmd(struct wmi_t *wmip, A_UINT8 sta_chan_width)
6340 { 6412 {
6341 void *osbuf; 6413 void *osbuf;
6342 WMI_SET_HT_OP_CMD *htInfo; 6414 WMI_SET_HT_OP_CMD *htInfo;
6343 6415
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
6539 A_NETBUF_PUT(osbuf, sizeof(WMI_SET_PMK_CMD)); 6611 A_NETBUF_PUT(osbuf, sizeof(WMI_SET_PMK_CMD));
6540 6612
6541 p = (WMI_SET_PMK_CMD *)(A_NETBUF_DATA(osbuf)); 6613 p = (WMI_SET_PMK_CMD *)(A_NETBUF_DATA(osbuf));
6542 A_MEMZERO(p, sizeof(*p)); 6614 A_MEMZERO(p, sizeof(*p));
6543 6615
6544 A_MEMCPY(p->pmk, pmk, WMI_PMK_LEN); 6616 A_MEMCPY(p->pmk, pmk, WMI_PMK_LEN);
6545 6617
6546 return (wmi_cmd_send(wmip, osbuf, WMI_SET_PMK_CMDID, NO_SYNC_WMIFLAG)); 6618 return (wmi_cmd_send(wmip, osbuf, WMI_SET_PMK_CMDID, NO_SYNC_WMIFLAG));
6547 } 6619 }
6548 6620
6621 A_STATUS
6622 wmi_SGI_cmd(struct wmi_t *wmip, A_UINT32 sgiMask, A_UINT8 sgiPERThreshold)
6623 {
6624 void *osbuf;
6625 WMI_SET_TX_SGI_PARAM_CMD *cmd;
6626
6627 osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
6628 if (osbuf == NULL) {
6629 return A_NO_MEMORY ;
6630 }
6631
6632 A_NETBUF_PUT(osbuf, sizeof(*cmd));
6633
6634 cmd = (WMI_SET_TX_SGI_PARAM_CMD *)(A_NETBUF_DATA(osbuf));
6635 A_MEMZERO(cmd, sizeof(*cmd));
6636 cmd->sgiMask = sgiMask;
6637 cmd->sgiPERThreshold = sgiPERThreshold;
6638 return (wmi_cmd_send(wmip, osbuf, WMI_SET_TX_SGI_PARAM_CMDID,
6639 NO_SYNC_WMIFLAG));
6640 }
6641
6549 bss_t * 6642 bss_t *
6550 wmi_find_matching_Ssidnode (struct wmi_t *wmip, A_UCHAR *pSsid, 6643 wmi_find_matching_Ssidnode (struct wmi_t *wmip, A_UCHAR *pSsid,
6551 A_UINT32 ssidLength, 6644 A_UINT32 ssidLength,
6552 A_UINT32 dot11AuthMode, A_UINT32 authMode, 6645 A_UINT32 dot11AuthMode, A_UINT32 authMode,
6553 A_UINT32 pairwiseCryptoType, A_UINT32 grpwiseCryptoTyp) 6646 A_UINT32 pairwiseCryptoType, A_UINT32 grpwiseCryptoTyp)
6554 { 6647 {
6555 bss_t *node = NULL; 6648 bss_t *node = NULL;
6556 node = wlan_find_matching_Ssidnode (&wmip->wmi_scan_table, pSsid, 6649 node = wlan_find_matching_Ssidnode (&wmip->wmi_scan_table, pSsid,
6557 ssidLength, dot11AuthMode, authMode, pairwiseCryp toType, grpwiseCryptoTyp); 6650 ssidLength, dot11AuthMode, authMode, pairwiseCryp toType, grpwiseCryptoTyp);
6558 6651
6559 return node; 6652 return node;
6560 } 6653 }
6561 6654
6562 A_UINT16 6655 A_UINT16
6563 wmi_ieee2freq (int chan) 6656 wmi_ieee2freq (int chan)
6564 { 6657 {
6565 A_UINT16 freq = 0; 6658 A_UINT16 freq = 0;
6566 freq = wlan_ieee2freq (chan); 6659 freq = wlan_ieee2freq (chan);
6567 return freq; 6660 return freq;
6568 6661
6569 } 6662 }
6570 6663
6571 A_UINT32 6664 A_UINT32
6572 wmi_freq2ieee (A_UINT16 freq) 6665 wmi_freq2ieee (A_UINT16 freq)
6573 { 6666 {
6574 A_UINT16 chan = 0; 6667 A_UINT16 chan = 0;
6575 chan = wlan_freq2ieee (freq); 6668 chan = wlan_freq2ieee (freq);
6576 return chan; 6669 return chan;
6577 } 6670 }
OLDNEW
« no previous file with comments | « chromeos/drivers/ath6kl/wmi/makefile ('k') | chromeos/drivers/ath6kl/wmi/wmi_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698