73
69
#define MAX_WLIW_IOCTL_LEN 1024
75
#if defined(IL_BIGENDIAN)
76
#include <bcmendian.h>
77
#define htod32(i) (bcmswap32(i))
78
#define htod16(i) (bcmswap16(i))
79
#define dtoh32(i) (bcmswap32(i))
80
#define dtoh16(i) (bcmswap16(i))
81
#define htodchanspec(i) htod16(i)
82
#define dtohchanspec(i) dtoh16(i)
88
#define htodchanspec(i) i
89
#define dtohchanspec(i) i
92
71
#ifdef CONFIG_WIRELESS_EXT
94
73
extern struct iw_statistics *dhd_get_wireless_stats(struct net_device *dev);
159
141
static void swap_key_from_BE(wl_wsec_key_t *key)
161
key->index = htod32(key->index);
162
key->len = htod32(key->len);
163
key->algo = htod32(key->algo);
164
key->flags = htod32(key->flags);
165
key->rxiv.hi = htod32(key->rxiv.hi);
166
key->rxiv.lo = htod16(key->rxiv.lo);
167
key->iv_initialized = htod32(key->iv_initialized);
143
key->index = cpu_to_le32(key->index);
144
key->len = cpu_to_le32(key->len);
145
key->algo = cpu_to_le32(key->algo);
146
key->flags = cpu_to_le32(key->flags);
147
key->rxiv.hi = cpu_to_le32(key->rxiv.hi);
148
key->rxiv.lo = cpu_to_le16(key->rxiv.lo);
149
key->iv_initialized = cpu_to_le32(key->iv_initialized);
170
152
static void swap_key_to_BE(wl_wsec_key_t *key)
172
key->index = dtoh32(key->index);
173
key->len = dtoh32(key->len);
174
key->algo = dtoh32(key->algo);
175
key->flags = dtoh32(key->flags);
176
key->rxiv.hi = dtoh32(key->rxiv.hi);
177
key->rxiv.lo = dtoh16(key->rxiv.lo);
178
key->iv_initialized = dtoh32(key->iv_initialized);
154
key->index = le32_to_cpu(key->index);
155
key->len = le32_to_cpu(key->len);
156
key->algo = le32_to_cpu(key->algo);
157
key->flags = le32_to_cpu(key->flags);
158
key->rxiv.hi = le32_to_cpu(key->rxiv.hi);
159
key->rxiv.lo = le16_to_cpu(key->rxiv.lo);
160
key->iv_initialized = le32_to_cpu(key->iv_initialized);
181
163
static int dev_wlc_ioctl(struct net_device *dev, int cmd, void *arg, int len)
518
500
range->min_nwid = range->max_nwid = 0;
520
list->count = htod32(MAXCHANNEL);
502
list->count = cpu_to_le32(MAXCHANNEL);
521
503
error = dev_wlc_ioctl(dev, WLC_GET_VALID_CHANNELS, channels,
522
504
(MAXCHANNEL + 1) * 4);
527
for (i = 0; i < dtoh32(list->count) && i < IW_MAX_FREQUENCIES; i++) {
528
range->freq[i].i = dtoh32(list->element[i]);
530
ch = dtoh32(list->element[i]);
531
if (ch <= CH_MAX_2G_CHANNEL)
532
sf = WF_CHAN_FACTOR_2_4_G;
534
sf = WF_CHAN_FACTOR_5_G;
536
range->freq[i].m = wf_channel2mhz(ch, sf);
509
for (i = 0; i < le32_to_cpu(list->count) && i < IW_MAX_FREQUENCIES;
511
range->freq[i].i = le32_to_cpu(list->element[i]);
513
ch = le32_to_cpu(list->element[i]);
514
if (ch <= CH_MAX_2G_CHANNEL) {
515
range->freq[i].m = ieee80211_dsss_chan_to_freq(ch);
517
range->freq[i].m = ieee80211_ofdm_chan_to_freq(
518
WF_CHAN_FACTOR_5_G/2, ch);
537
520
range->freq[i].e = 6;
539
522
range->num_frequency = range->num_channels = i;
607
590
range->max_encoding_tokens = DOT11_MAX_DEFAULT_KEYS;
608
591
range->num_encoding_sizes = 4;
609
range->encoding_size[0] = WEP1_KEY_SIZE;
610
range->encoding_size[1] = WEP128_KEY_SIZE;
592
range->encoding_size[0] = WLAN_KEY_LEN_WEP40;
593
range->encoding_size[1] = WLAN_KEY_LEN_WEP104;
611
594
#if WIRELESS_EXT > 17
612
range->encoding_size[2] = TKIP_KEY_SIZE;
595
range->encoding_size[2] = WLAN_KEY_LEN_TKIP;
614
597
range->encoding_size[2] = 0;
616
range->encoding_size[3] = AES_KEY_SIZE;
599
range->encoding_size[3] = WLAN_KEY_LEN_AES_CMAC;
618
601
range->min_pmp = 0;
619
602
range->max_pmp = 0;
691
674
iw->spy_num = min_t(int, ARRAY_SIZE(iw->spy_addr), dwrq->length);
692
675
for (i = 0; i < iw->spy_num; i++)
693
memcpy(&iw->spy_addr[i], addr[i].sa_data, ETH_ALEN);
676
memcpy(iw->spy_addr[i], addr[i].sa_data, ETH_ALEN);
694
677
memset(iw->spy_qual, 0, sizeof(iw->spy_qual));
713
696
dwrq->length = iw->spy_num;
714
697
for (i = 0; i < iw->spy_num; i++) {
715
memcpy(addr[i].sa_data, &iw->spy_addr[i], ETH_ALEN);
698
memcpy(addr[i].sa_data, iw->spy_addr[i], ETH_ALEN);
716
699
addr[i].sa_family = AF_UNIX;
717
700
memcpy(&qual[i], &iw->spy_qual[i], sizeof(struct iw_quality));
718
701
iw->spy_qual[i].updated = 0;
745
728
join_params->params.chanspec_list[0] &= WL_CHANSPEC_CHAN_MASK;
746
729
join_params->params.chanspec_list[0] |= chanspec;
747
730
join_params->params.chanspec_list[0] =
748
htodchanspec(join_params->params.chanspec_list[0]);
731
cpu_to_le16(join_params->params.chanspec_list[0]);
750
733
join_params->params.chanspec_num =
751
htod32(join_params->params.chanspec_num);
734
cpu_to_le32(join_params->params.chanspec_num);
753
736
WL_TRACE("%s join_params->params.chanspec_list[0]= %X\n",
754
737
__func__, join_params->params.chanspec_list[0]);
784
767
join_params_size = sizeof(join_params.ssid);
786
769
memcpy(join_params.ssid.SSID, g_ssid.SSID, g_ssid.SSID_len);
787
join_params.ssid.SSID_len = htod32(g_ssid.SSID_len);
770
join_params.ssid.SSID_len = cpu_to_le32(g_ssid.SSID_len);
788
771
memcpy(&join_params.params.bssid, awrq->sa_data, ETH_ALEN);
790
773
WL_TRACE("%s target_channel=%d\n",
842
825
scbval.val = mlme->reason_code;
843
bcopy(&mlme->addr.sa_data, &scbval.ea, ETH_ALEN);
826
memcpy(&scbval.ea, &mlme->addr.sa_data, ETH_ALEN);
845
828
if (mlme->cmd == IW_MLME_DISASSOC) {
846
scbval.val = htod32(scbval.val);
829
scbval.val = cpu_to_le32(scbval.val);
848
831
dev_wlc_ioctl(dev, WLC_DISASSOC, &scbval,
849
832
sizeof(scb_val_t));
850
833
} else if (mlme->cmd == IW_MLME_DEAUTH) {
851
scbval.val = htod32(scbval.val);
834
scbval.val = cpu_to_le32(scbval.val);
853
836
dev_wlc_ioctl(dev, WLC_SCB_DEAUTHENTICATE_FOR_REASON,
854
837
&scbval, sizeof(scb_val_t));
882
list = kmalloc(buflen, GFP_KERNEL);
865
list = kzalloc(buflen, GFP_KERNEL);
885
memset(list, 0, buflen);
886
list->buflen = htod32(buflen);
868
list->buflen = cpu_to_le32(buflen);
887
869
error = dev_wlc_ioctl(dev, WLC_SCAN_RESULTS, list, buflen);
889
871
WL_ERROR("%d: Scan results error %d\n", __LINE__, error);
893
list->buflen = dtoh32(list->buflen);
894
list->version = dtoh32(list->version);
895
list->count = dtoh32(list->count);
875
list->buflen = le32_to_cpu(list->buflen);
876
list->version = le32_to_cpu(list->version);
877
list->count = le32_to_cpu(list->count);
896
878
if (list->version != WL_BSS_INFO_VERSION) {
897
879
WL_ERROR("%s : list->version %d != WL_BSS_INFO_VERSION\n",
898
880
__func__, list->version);
903
885
for (i = 0, dwrq->length = 0;
904
886
i < list->count && dwrq->length < IW_MAX_AP; i++) {
905
887
bi = bi ? (wl_bss_info_t *) ((unsigned long)bi +
906
dtoh32(bi->length)) : list->
888
le32_to_cpu(bi->length)) : list->
908
ASSERT(((unsigned long)bi + dtoh32(bi->length)) <=
890
ASSERT(((unsigned long)bi + le32_to_cpu(bi->length)) <=
909
891
((unsigned long)list + buflen));
911
if (!(dtoh16(bi->capability) & DOT11_CAP_ESS))
893
if (!(le16_to_cpu(bi->capability) & WLAN_CAPABILITY_ESS))
914
896
memcpy(addr[dwrq->length].sa_data, &bi->BSSID, ETH_ALEN);
915
897
addr[dwrq->length].sa_family = ARPHRD_ETHER;
916
qual[dwrq->length].qual = rssi_to_qual(dtoh16(bi->RSSI));
917
qual[dwrq->length].level = 0x100 + dtoh16(bi->RSSI);
898
qual[dwrq->length].qual = rssi_to_qual(le16_to_cpu(bi->RSSI));
899
qual[dwrq->length].level = 0x100 + le16_to_cpu(bi->RSSI);
918
900
qual[dwrq->length].noise = 0x100 + bi->phy_noise;
920
902
#if WIRELESS_EXT > 18
975
957
for (i = 0, dwrq->length = 0;
976
958
i < list->count && dwrq->length < IW_MAX_AP; i++) {
977
959
bi = bi ? (wl_bss_info_t *) ((unsigned long)bi +
978
dtoh32(bi->length)) :
960
le32_to_cpu(bi->length)) :
980
ASSERT(((unsigned long)bi + dtoh32(bi->length)) <=
962
ASSERT(((unsigned long)bi + le32_to_cpu(bi->length)) <=
981
963
((unsigned long)list + WLC_IW_ISCAN_MAXLEN));
983
if (!(dtoh16(bi->capability) & DOT11_CAP_ESS))
965
if (!(le16_to_cpu(bi->capability) &
966
WLAN_CAPABILITY_ESS))
986
969
memcpy(addr[dwrq->length].sa_data, &bi->BSSID,
988
971
addr[dwrq->length].sa_family = ARPHRD_ETHER;
989
972
qual[dwrq->length].qual =
990
rssi_to_qual(dtoh16(bi->RSSI));
991
qual[dwrq->length].level = 0x100 + dtoh16(bi->RSSI);
973
rssi_to_qual(le16_to_cpu(bi->RSSI));
974
qual[dwrq->length].level = 0x100 +
975
le16_to_cpu(bi->RSSI);
992
976
qual[dwrq->length].noise = 0x100 + bi->phy_noise;
994
978
#if WIRELESS_EXT > 18
1024
1008
params->home_time = -1;
1025
1009
params->channel_num = 0;
1027
params->nprobes = htod32(params->nprobes);
1028
params->active_time = htod32(params->active_time);
1029
params->passive_time = htod32(params->passive_time);
1030
params->home_time = htod32(params->home_time);
1011
params->nprobes = cpu_to_le32(params->nprobes);
1012
params->active_time = cpu_to_le32(params->active_time);
1013
params->passive_time = cpu_to_le32(params->passive_time);
1014
params->home_time = cpu_to_le32(params->home_time);
1031
1015
if (ssid && ssid->SSID_len)
1032
1016
memcpy(¶ms->ssid, ssid, sizeof(wlc_ssid_t));
1041
iscan->iscan_ex_params_p->version = htod32(ISCAN_REQ_VERSION);
1042
iscan->iscan_ex_params_p->action = htod16(action);
1043
iscan->iscan_ex_params_p->scan_duration = htod16(0);
1025
iscan->iscan_ex_params_p->version = cpu_to_le32(ISCAN_REQ_VERSION);
1026
iscan->iscan_ex_params_p->action = cpu_to_le16(action);
1027
iscan->iscan_ex_params_p->scan_duration = cpu_to_le16(0);
1045
1029
WL_SCAN("%s : nprobes=%d\n",
1046
1030
__func__, iscan->iscan_ex_params_p->params.nprobes);
1077
1061
char iovbuf[WL_EVENTING_MASK_LEN + 12];
1079
1063
dev_iw_iovar_getbuf(dev, "event_msgs", "", 0, iovbuf, sizeof(iovbuf));
1080
bcopy(iovbuf, eventmask, WL_EVENTING_MASK_LEN);
1064
memcpy(eventmask, iovbuf, WL_EVENTING_MASK_LEN);
1081
1065
setbit(eventmask, WLC_E_SCAN_COMPLETE);
1082
1066
dev_iw_iovar_setbuf(dev, "event_msgs", eventmask, WL_EVENTING_MASK_LEN,
1083
1067
iovbuf, sizeof(iovbuf));
1124
1108
results->count = 0;
1126
1110
memset(&list, 0, sizeof(list));
1127
list.results.buflen = htod32(WLC_IW_ISCAN_MAXLEN);
1111
list.results.buflen = cpu_to_le32(WLC_IW_ISCAN_MAXLEN);
1128
1112
res = dev_iw_iovar_getbuf(iscan->dev,
1129
1113
"iscanresults",
1131
1115
WL_ISCAN_RESULTS_FIXED_SIZE,
1132
1116
buf->iscan_buf, WLC_IW_ISCAN_MAXLEN);
1133
1117
if (res == 0) {
1134
results->buflen = dtoh32(results->buflen);
1135
results->version = dtoh32(results->version);
1136
results->count = dtoh32(results->count);
1118
results->buflen = le32_to_cpu(results->buflen);
1119
results->version = le32_to_cpu(results->version);
1120
results->count = le32_to_cpu(results->count);
1137
1121
WL_TRACE("results->count = %d\n", results->count);
1138
1122
WL_TRACE("results->buflen = %d\n", results->buflen);
1139
status = dtoh32(list_buf->status);
1123
status = le32_to_cpu(list_buf->status);
1141
1125
WL_ERROR("%s returns error %d\n", __func__, res);
1142
1126
status = WL_SCAN_RESULTS_NO_MEM;
1283
1267
memcpy(g_specific_ssid.SSID, req->essid,
1284
1268
g_specific_ssid.SSID_len);
1285
1269
g_specific_ssid.SSID_len =
1286
htod32(g_specific_ssid.SSID_len);
1270
cpu_to_le32(g_specific_ssid.SSID_len);
1287
1271
g_scan_specified_ssid = 1;
1288
1272
WL_TRACE("### Specific scan ssid=%s len=%d\n",
1289
1273
g_specific_ssid.SSID,
1517
1501
IWE_STREAM_ADD_EVENT(info, event, end, &iwe,
1518
1502
IW_EV_ADDR_LEN);
1519
iwe.u.data.length = dtoh32(bi->SSID_len);
1503
iwe.u.data.length = le32_to_cpu(bi->SSID_len);
1520
1504
iwe.cmd = SIOCGIWESSID;
1521
1505
iwe.u.data.flags = 1;
1522
1506
event = IWE_STREAM_ADD_POINT(info, event, end, &iwe, bi->SSID);
1524
if (dtoh16(bi->capability) & (DOT11_CAP_ESS | DOT11_CAP_IBSS)) {
1508
if (le16_to_cpu(bi->capability) & (WLAN_CAPABILITY_ESS |
1509
WLAN_CAPABILITY_IBSS)) {
1525
1510
iwe.cmd = SIOCGIWMODE;
1526
if (dtoh16(bi->capability) & DOT11_CAP_ESS)
1511
if (le16_to_cpu(bi->capability) & WLAN_CAPABILITY_ESS)
1527
1512
iwe.u.mode = IW_MODE_INFRA;
1529
1514
iwe.u.mode = IW_MODE_ADHOC;
1535
1520
iwe.cmd = SIOCGIWFREQ;
1536
iwe.u.freq.m = wf_channel2mhz(CHSPEC_CHANNEL(bi->chanspec),
1537
CHSPEC_CHANNEL(bi->chanspec) <=
1539
WF_CHAN_FACTOR_2_4_G :
1540
WF_CHAN_FACTOR_5_G);
1522
if (CHSPEC_CHANNEL(bi->chanspec) <= CH_MAX_2G_CHANNEL)
1523
iwe.u.freq.m = ieee80211_dsss_chan_to_freq(
1524
CHSPEC_CHANNEL(bi->chanspec));
1526
iwe.u.freq.m = ieee80211_ofdm_chan_to_freq(
1527
WF_CHAN_FACTOR_5_G/2,
1528
CHSPEC_CHANNEL(bi->chanspec));
1541
1530
iwe.u.freq.e = 6;
1543
1532
IWE_STREAM_ADD_EVENT(info, event, end, &iwe,
1544
1533
IW_EV_FREQ_LEN);
1546
1535
iwe.cmd = IWEVQUAL;
1547
iwe.u.qual.qual = rssi_to_qual(dtoh16(bi->RSSI));
1548
iwe.u.qual.level = 0x100 + dtoh16(bi->RSSI);
1536
iwe.u.qual.qual = rssi_to_qual(le16_to_cpu(bi->RSSI));
1537
iwe.u.qual.level = 0x100 + le16_to_cpu(bi->RSSI);
1549
1538
iwe.u.qual.noise = 0x100 + bi->phy_noise;
1551
1540
IWE_STREAM_ADD_EVENT(info, event, end, &iwe,
1651
list->buflen = dtoh32(list->buflen);
1652
list->version = dtoh32(list->version);
1653
list->count = dtoh32(list->count);
1640
list->buflen = le32_to_cpu(list->buflen);
1641
list->version = le32_to_cpu(list->version);
1642
list->count = le32_to_cpu(list->count);
1655
1644
if (list->version != WL_BSS_INFO_VERSION) {
1656
1645
WL_ERROR("%s : list->version %d != WL_BSS_INFO_VERSION\n",
1787
1776
IWE_STREAM_ADD_EVENT(info, event, end, &iwe,
1788
1777
IW_EV_ADDR_LEN);
1790
iwe.u.data.length = dtoh32(bi->SSID_len);
1779
iwe.u.data.length = le32_to_cpu(bi->SSID_len);
1791
1780
iwe.cmd = SIOCGIWESSID;
1792
1781
iwe.u.data.flags = 1;
1794
1783
IWE_STREAM_ADD_POINT(info, event, end, &iwe,
1797
if (dtoh16(bi->capability) &
1798
(DOT11_CAP_ESS | DOT11_CAP_IBSS)) {
1786
if (le16_to_cpu(bi->capability) &
1787
(WLAN_CAPABILITY_ESS | WLAN_CAPABILITY_IBSS)) {
1799
1788
iwe.cmd = SIOCGIWMODE;
1800
if (dtoh16(bi->capability) & DOT11_CAP_ESS)
1789
if (le16_to_cpu(bi->capability) &
1790
WLAN_CAPABILITY_ESS)
1801
1791
iwe.u.mode = IW_MODE_INFRA;
1803
1793
iwe.u.mode = IW_MODE_ADHOC;
1812
1802
0) ? CHSPEC_CHANNEL(bi->chanspec) : bi->ctl_ch;
1814
wf_channel2mhz(channel,
1817
WF_CHAN_FACTOR_2_4_G :
1818
WF_CHAN_FACTOR_5_G);
1804
if (channel <= CH_MAX_2G_CHANNEL)
1806
ieee80211_dsss_chan_to_freq(channel);
1808
iwe.u.freq.m = ieee80211_ofdm_chan_to_freq(
1809
WF_CHAN_FACTOR_5_G/2,
1819
1812
iwe.u.freq.e = 6;
1821
1814
IWE_STREAM_ADD_EVENT(info, event, end, &iwe,
1822
1815
IW_EV_FREQ_LEN);
1824
1817
iwe.cmd = IWEVQUAL;
1825
iwe.u.qual.qual = rssi_to_qual(dtoh16(bi->RSSI));
1826
iwe.u.qual.level = 0x100 + dtoh16(bi->RSSI);
1818
iwe.u.qual.qual = rssi_to_qual(le16_to_cpu(bi->RSSI));
1819
iwe.u.qual.level = 0x100 + le16_to_cpu(bi->RSSI);
1827
1820
iwe.u.qual.noise = 0x100 + bi->phy_noise;
1829
1822
IWE_STREAM_ADD_EVENT(info, event, end, &iwe,
1913
1907
g_ssid.SSID_len = 0;
1915
g_ssid.SSID_len = htod32(g_ssid.SSID_len);
1909
g_ssid.SSID_len = cpu_to_le32(g_ssid.SSID_len);
1917
1911
memset(&join_params, 0, sizeof(join_params));
1918
1912
join_params_size = sizeof(join_params.ssid);
1920
1914
memcpy(&join_params.ssid.SSID, g_ssid.SSID, g_ssid.SSID_len);
1921
join_params.ssid.SSID_len = htod32(g_ssid.SSID_len);
1922
memcpy(&join_params.params.bssid, ðer_bcast, ETH_ALEN);
1915
join_params.ssid.SSID_len = cpu_to_le32(g_ssid.SSID_len);
1916
memcpy(join_params.params.bssid, ether_bcast, ETH_ALEN);
1924
1918
wl_iw_ch_to_chanspec(g_wl_iw_params.target_channel, &join_params,
1925
1919
&join_params_size);
2438
2432
swap_key_to_BE(&key);
2440
wsec = dtoh32(wsec);
2441
auth = dtoh32(auth);
2442
dwrq->length = min_t(u16, DOT11_MAX_KEY_SIZE, key.len);
2434
wsec = le32_to_cpu(wsec);
2435
auth = le32_to_cpu(auth);
2436
dwrq->length = min_t(u16, WLAN_MAX_KEY_LEN, key.len);
2444
2438
dwrq->flags = key.index + 1;
2445
2439
if (!(wsec & (WEP_ENABLED | TKIP_ENABLED | AES_ENABLED)))
2545
2539
key.len = iwe->key_len;
2547
2541
if (!is_multicast_ether_addr(iwe->addr.sa_data))
2548
bcopy((void *)&iwe->addr.sa_data, (char *)&key.ea,
2542
memcpy(&key.ea, &iwe->addr.sa_data, ETH_ALEN);
2551
2544
if (key.len == 0) {
2552
2545
if (iwe->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
2553
2546
WL_WSEC("Changing the the primary Key to %d\n",
2555
key.index = htod32(key.index);
2548
key.index = cpu_to_le32(key.index);
2556
2549
error = dev_wlc_ioctl(dev, WLC_SET_KEY_PRIMARY,
2557
2550
&key.index, sizeof(key.index));
2571
2564
key.flags = WL_PRIMARY_KEY;
2574
bcopy((void *)iwe->key, key.data, iwe->key_len);
2567
memcpy(key.data, iwe->key, iwe->key_len);
2576
2569
if (iwe->alg == IW_ENCODE_ALG_TKIP) {
2578
bcopy(&key.data[24], keybuf, sizeof(keybuf));
2579
bcopy(&key.data[16], &key.data[24], sizeof(keybuf));
2580
bcopy(keybuf, &key.data[16], sizeof(keybuf));
2571
memcpy(keybuf, &key.data[24], sizeof(keybuf));
2572
memcpy(&key.data[24], &key.data[16], sizeof(keybuf));
2573
memcpy(&key.data[16], keybuf, sizeof(keybuf));
2583
2576
if (iwe->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) {
2652
2645
pmkidptr = &pmkid;
2654
bcopy(&iwpmksa->bssid.sa_data[0],
2655
&pmkidptr->pmkid[0].BSSID, ETH_ALEN);
2656
bcopy(&iwpmksa->pmkid[0], &pmkidptr->pmkid[0].PMKID,
2647
memcpy(&pmkidptr->pmkid[0].BSSID,
2648
&iwpmksa->bssid.sa_data[0],
2650
memcpy(&pmkidptr->pmkid[0].PMKID,
2659
WL_WSEC("wl_iw_set_pmksa:IW_PMKSA_REMOVE:PMKID: %pM = ",
2660
&pmkidptr->pmkid[0].BSSID);
2661
for (j = 0; j < WPA2_PMKID_LEN; j++)
2654
WL_WSEC("wl_iw_set_pmksa:IW_PMKSA_REMOVE:PMKID: "
2655
"%pM = ", &pmkidptr->pmkid[0].BSSID);
2656
for (j = 0; j < WLAN_PMKID_LEN; j++)
2662
2657
WL_WSEC("%02x ", pmkidptr->pmkid[0].PMKID[j]);
2673
2668
&& (i < pmkid_list.pmkids.npmkid)) {
2674
2669
memset(&pmkid_list.pmkids.pmkid[i], 0, sizeof(pmkid_t));
2675
2670
for (; i < (pmkid_list.pmkids.npmkid - 1); i++) {
2676
bcopy(&pmkid_list.pmkids.pmkid[i + 1].BSSID,
2677
&pmkid_list.pmkids.pmkid[i].BSSID,
2679
bcopy(&pmkid_list.pmkids.pmkid[i + 1].PMKID,
2680
&pmkid_list.pmkids.pmkid[i].PMKID,
2671
memcpy(&pmkid_list.pmkids.pmkid[i].BSSID,
2672
&pmkid_list.pmkids.pmkid[i + 1].BSSID,
2674
memcpy(&pmkid_list.pmkids.pmkid[i].PMKID,
2675
&pmkid_list.pmkids.pmkid[i + 1].PMKID,
2683
2678
pmkid_list.pmkids.npmkid--;
2692
2687
&pmkid_list.pmkids.pmkid[i].BSSID, ETH_ALEN))
2694
2689
if (i < MAXPMKID) {
2695
bcopy(&iwpmksa->bssid.sa_data[0],
2696
&pmkid_list.pmkids.pmkid[i].BSSID,
2698
bcopy(&iwpmksa->pmkid[0],
2699
&pmkid_list.pmkids.pmkid[i].PMKID,
2690
memcpy(&pmkid_list.pmkids.pmkid[i].BSSID,
2691
&iwpmksa->bssid.sa_data[0],
2693
memcpy(&pmkid_list.pmkids.pmkid[i].PMKID,
2701
2696
if (i == pmkid_list.pmkids.npmkid)
2702
2697
pmkid_list.pmkids.npmkid++;
3343
3338
wl_iw_check_conn_fail(wl_event_msg_t *e, char *stringBuf, uint buflen)
3345
u32 event = ntoh32(e->event_type);
3346
u32 status = ntoh32(e->status);
3347
u32 reason = ntoh32(e->reason);
3340
u32 event = be32_to_cpu(e->event_type);
3341
u32 status = be32_to_cpu(e->status);
3342
u32 reason = be32_to_cpu(e->reason);
3349
3344
if (wl_iw_conn_status_str(event, status, reason, stringBuf, buflen)) {
3363
3358
union iwreq_data wrqu;
3364
3359
char extra[IW_CUSTOM_MAX + 1];
3366
u32 event_type = ntoh32(e->event_type);
3367
u16 flags = ntoh16(e->flags);
3368
u32 datalen = ntoh32(e->datalen);
3369
u32 status = ntoh32(e->status);
3361
u32 event_type = be32_to_cpu(e->event_type);
3362
u16 flags = be16_to_cpu(e->flags);
3363
u32 datalen = be32_to_cpu(e->datalen);
3364
u32 status = be32_to_cpu(e->status);
3372
3367
memset(&wrqu, 0, sizeof(wrqu));
3409
3404
if (!(flags & WLC_EVENT_MSG_LINK)) {
3410
3405
memset(wrqu.addr.sa_data, 0, ETH_ALEN);
3411
3406
memset(&extra, 0, ETH_ALEN);
3412
WAKE_LOCK_TIMEOUT(iw->pub, WAKE_LOCK_LINK_DOWN_TMOUT,
3415
3408
memcpy(wrqu.addr.sa_data, &e->addr, ETH_ALEN);
3416
3409
WL_TRACE("Link UP\n");
3436
3429
wrqu.data.length = sizeof(status) + 1;
3437
3430
extra[0] = WLC_E_ACTION_FRAME_COMPLETE;
3438
3431
memcpy(&extra[1], &status, sizeof(status));
3439
printf("wl_iw_event status %d PacketId %d\n", status,
3441
printf("WLC_E_ACTION_FRAME_COMPLETE len %d\n",
3432
WL_TRACE("wl_iw_event status %d PacketId %d\n", status,
3434
WL_TRACE("WLC_E_ACTION_FRAME_COMPLETE len %d\n",
3445
3438
#endif /* WIRELESS_EXT > 14 */
3523
3515
WL_ERROR("%s Event WLC_E_PFN_NET_FOUND, send %s up : find %s len=%d\n",
3524
3516
__func__, PNO_EVENT_UP,
3525
3517
ssid->SSID, ssid->SSID_len);
3526
WAKE_LOCK_TIMEOUT(iw->pub, WAKE_LOCK_PNO_FIND_TMOUT,
3528
3518
cmd = IWEVCUSTOM;
3529
3519
memset(&wrqu, 0, sizeof(wrqu));
3530
3520
strcpy(extra, PNO_EVENT_UP);
3607
3597
#if WIRELESS_EXT > 11
3608
WL_TRACE("wl_iw_get_wireless_stats counters=%zu\n", sizeof(wl_cnt_t));
3598
WL_TRACE("wl_iw_get_wireless_stats counters=%zu\n",
3599
sizeof(struct wl_cnt));
3610
memset(&cnt, 0, sizeof(wl_cnt_t));
3601
memset(&cnt, 0, sizeof(struct wl_cnt));
3612
dev_wlc_bufvar_get(dev, "counters", (char *)&cnt, sizeof(wl_cnt_t));
3603
dev_wlc_bufvar_get(dev, "counters", (char *)&cnt,
3604
sizeof(struct wl_cnt));
3614
3606
WL_ERROR("wl_iw_get_wireless_stats counters failed error=%d\n",
3619
cnt.version = dtoh16(cnt.version);
3611
cnt.version = le16_to_cpu(cnt.version);
3620
3612
if (cnt.version != WL_CNT_T_VERSION) {
3621
WL_TRACE("\tIncorrect version of counters struct: expected %d; got %d\n",
3613
WL_TRACE("\tIncorrect counter version: expected %d; got %d\n",
3622
3614
WL_CNT_T_VERSION, cnt.version);
3626
3618
wstats->discard.nwid = 0;
3627
wstats->discard.code = dtoh32(cnt.rxundec);
3628
wstats->discard.fragment = dtoh32(cnt.rxfragerr);
3629
wstats->discard.retries = dtoh32(cnt.txfail);
3630
wstats->discard.misc = dtoh32(cnt.rxrunt) + dtoh32(cnt.rxgiant);
3619
wstats->discard.code = le32_to_cpu(cnt.rxundec);
3620
wstats->discard.fragment = le32_to_cpu(cnt.rxfragerr);
3621
wstats->discard.retries = le32_to_cpu(cnt.txfail);
3622
wstats->discard.misc = le32_to_cpu(cnt.rxrunt) +
3623
le32_to_cpu(cnt.rxgiant);
3631
3624
wstats->miss.beacon = 0;
3633
3626
WL_TRACE("wl_iw_get_wireless_stats counters txframe=%d txbyte=%d\n",
3634
dtoh32(cnt.txframe), dtoh32(cnt.txbyte));
3627
le32_to_cpu(cnt.txframe), le32_to_cpu(cnt.txbyte));
3635
3628
WL_TRACE("wl_iw_get_wireless_stats counters rxfrmtoolong=%d\n",
3636
dtoh32(cnt.rxfrmtoolong));
3629
le32_to_cpu(cnt.rxfrmtoolong));
3637
3630
WL_TRACE("wl_iw_get_wireless_stats counters rxbadplcp=%d\n",
3638
dtoh32(cnt.rxbadplcp));
3631
le32_to_cpu(cnt.rxbadplcp));
3639
3632
WL_TRACE("wl_iw_get_wireless_stats counters rxundec=%d\n",
3640
dtoh32(cnt.rxundec));
3633
le32_to_cpu(cnt.rxundec));
3641
3634
WL_TRACE("wl_iw_get_wireless_stats counters rxfragerr=%d\n",
3642
dtoh32(cnt.rxfragerr));
3635
le32_to_cpu(cnt.rxfragerr));
3643
3636
WL_TRACE("wl_iw_get_wireless_stats counters txfail=%d\n",
3644
dtoh32(cnt.txfail));
3637
le32_to_cpu(cnt.txfail));
3645
3638
WL_TRACE("wl_iw_get_wireless_stats counters rxrunt=%d\n",
3646
dtoh32(cnt.rxrunt));
3639
le32_to_cpu(cnt.rxrunt));
3647
3640
WL_TRACE("wl_iw_get_wireless_stats counters rxgiant=%d\n",
3648
dtoh32(cnt.rxgiant));
3641
le32_to_cpu(cnt.rxgiant));
3649
3642
#endif /* WIRELESS_EXT > 11 */
3674
3667
(WL_SCAN_PARAMS_FIXED_SIZE + offsetof(wl_iscan_params_t, params));
3676
iscan = kmalloc(sizeof(iscan_info_t), GFP_KERNEL);
3669
iscan = kzalloc(sizeof(iscan_info_t), GFP_KERNEL);
3679
3672
return -ENOMEM;
3680
memset(iscan, 0, sizeof(iscan_info_t));
3682
3674
iscan->iscan_ex_params_p = kmalloc(params_size, GFP_KERNEL);
3683
3675
if (!iscan->iscan_ex_params_p)