Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
wmi.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2011 Atheros Communications Inc.
3  * Copyright (c) 2011-2012 Qualcomm Atheros, Inc.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
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.
16  */
17 
18 /*
19  * This file contains the definitions of the WMI protocol specified in the
20  * Wireless Module Interface (WMI). It includes definitions of all the
21  * commands and events. Commands are messages from the host to the WM.
22  * Events and Replies are messages from the WM to the host.
23  */
24 
25 #ifndef WMI_H
26 #define WMI_H
27 
28 #include <linux/ieee80211.h>
29 
30 #include "htc.h"
31 
32 #define HTC_PROTOCOL_VERSION 0x0002
33 #define WMI_PROTOCOL_VERSION 0x0002
34 #define WMI_CONTROL_MSG_MAX_LEN 256
35 #define is_ethertype(type_or_len) ((type_or_len) >= 0x0600)
36 
37 #define IP_ETHERTYPE 0x0800
38 
39 #define WMI_IMPLICIT_PSTREAM 0xFF
40 #define WMI_MAX_THINSTREAM 15
41 
42 #define SSID_IE_LEN_INDEX 13
43 
44 /* Host side link management data structures */
45 #define SIG_QUALITY_THRESH_LVLS 6
46 #define SIG_QUALITY_UPPER_THRESH_LVLS SIG_QUALITY_THRESH_LVLS
47 #define SIG_QUALITY_LOWER_THRESH_LVLS SIG_QUALITY_THRESH_LVLS
48 
49 #define A_BAND_24GHZ 0
50 #define A_BAND_5GHZ 1
51 #define A_NUM_BANDS 2
52 
53 /* in ms */
54 #define WMI_IMPLICIT_PSTREAM_INACTIVITY_INT 5000
55 
56 /*
57  * There are no signed versions of __le16 and __le32, so for a temporary
58  * solution come up with our own version. The idea is from fs/ntfs/types.h.
59  *
60  * Use a_ prefix so that it doesn't conflict if we get proper support to
61  * linux/types.h.
62  */
65 
66 static inline a_sle32 a_cpu_to_sle32(s32 val)
67 {
68  return (__force a_sle32) cpu_to_le32(val);
69 }
70 
71 static inline s32 a_sle32_to_cpu(a_sle32 val)
72 {
73  return le32_to_cpu((__force __le32) val);
74 }
75 
76 static inline a_sle16 a_cpu_to_sle16(s16 val)
77 {
78  return (__force a_sle16) cpu_to_le16(val);
79 }
80 
81 static inline s16 a_sle16_to_cpu(a_sle16 val)
82 {
83  return le16_to_cpu((__force __le16) val);
84 }
85 
95 };
96 
99  struct sk_buff *skb;
100 };
101 
102 /* WMM stream classes */
103 #define WMM_NUM_AC 4
104 #define WMM_AC_BE 0 /* best effort */
105 #define WMM_AC_BK 1 /* background */
106 #define WMM_AC_VI 2 /* video */
107 #define WMM_AC_VO 3 /* voice */
108 
109 #define WMI_VOICE_USER_PRIORITY 0x7
110 
111 struct wmi {
116 
117  /* protects fat_pipe_exist and stream_exist_for_ac */
125 
129 };
130 
133 } __packed;
134 
140 };
141 
142 /*
143  * Macros for operating on WMI_DATA_HDR (info) field
144  */
145 
146 #define WMI_DATA_HDR_MSG_TYPE_MASK 0x03
147 #define WMI_DATA_HDR_MSG_TYPE_SHIFT 0
148 #define WMI_DATA_HDR_UP_MASK 0x07
149 #define WMI_DATA_HDR_UP_SHIFT 2
150 
151 /* In AP mode, the same bit (b5) is used to indicate Power save state in
152  * the Rx dir and More data bit state in the tx direction.
153  */
154 #define WMI_DATA_HDR_PS_MASK 0x1
155 #define WMI_DATA_HDR_PS_SHIFT 5
156 
157 #define WMI_DATA_HDR_MORE 0x20
158 
162 
163  /* used to be used for the PAL */
165 };
166 
167 /* Bitmap of data header flags */
172 };
173 
174 #define WMI_DATA_HDR_DATA_TYPE_MASK 0x3
175 #define WMI_DATA_HDR_DATA_TYPE_SHIFT 6
176 
177 /* Macros for operating on WMI_DATA_HDR (info2) field */
178 #define WMI_DATA_HDR_SEQNO_MASK 0xFFF
179 #define WMI_DATA_HDR_SEQNO_SHIFT 0
180 
181 #define WMI_DATA_HDR_AMSDU_MASK 0x1
182 #define WMI_DATA_HDR_AMSDU_SHIFT 12
183 
184 #define WMI_DATA_HDR_META_MASK 0x7
185 #define WMI_DATA_HDR_META_SHIFT 13
186 
187 #define WMI_DATA_HDR_PAD_BEFORE_DATA_MASK 0xFF
188 #define WMI_DATA_HDR_PAD_BEFORE_DATA_SHIFT 0x8
189 
190 /* Macros for operating on WMI_DATA_HDR (info3) field */
191 #define WMI_DATA_HDR_IF_IDX_MASK 0xF
192 
193 #define WMI_DATA_HDR_TRIG 0x10
194 #define WMI_DATA_HDR_EOSP 0x10
195 
196 struct wmi_data_hdr {
198 
199  /*
200  * usage of 'info' field(8-bit):
201  *
202  * b1:b0 - WMI_MSG_TYPE
203  * b4:b3:b2 - UP(tid)
204  * b5 - Used in AP mode.
205  * More-data in tx dir, PS in rx.
206  * b7:b6 - Dot3 header(0),
207  * Dot11 Header(1),
208  * ACL data(2)
209  */
211 
212  /*
213  * usage of 'info2' field(16-bit):
214  *
215  * b11:b0 - seq_no
216  * b12 - A-MSDU?
217  * b15:b13 - META_DATA_VERSION 0 - 7
218  */
220 
221  /*
222  * usage of info3, 16-bit:
223  * b3:b0 - Interface index
224  * b4 - uAPSD trigger in rx & EOSP in tx
225  * b15:b5 - Reserved
226  */
228 } __packed;
229 
230 static inline u8 wmi_data_hdr_get_up(struct wmi_data_hdr *dhdr)
231 {
232  return (dhdr->info >> WMI_DATA_HDR_UP_SHIFT) & WMI_DATA_HDR_UP_MASK;
233 }
234 
235 static inline void wmi_data_hdr_set_up(struct wmi_data_hdr *dhdr,
236  u8 usr_pri)
237 {
239  dhdr->info |= usr_pri << WMI_DATA_HDR_UP_SHIFT;
240 }
241 
242 static inline u8 wmi_data_hdr_get_dot11(struct wmi_data_hdr *dhdr)
243 {
244  u8 data_type;
245 
246  data_type = (dhdr->info >> WMI_DATA_HDR_DATA_TYPE_SHIFT) &
248  return (data_type == WMI_DATA_HDR_DATA_TYPE_802_11);
249 }
250 
251 static inline u16 wmi_data_hdr_get_seqno(struct wmi_data_hdr *dhdr)
252 {
253  return (le16_to_cpu(dhdr->info2) >> WMI_DATA_HDR_SEQNO_SHIFT) &
255 }
256 
257 static inline u8 wmi_data_hdr_is_amsdu(struct wmi_data_hdr *dhdr)
258 {
259  return (le16_to_cpu(dhdr->info2) >> WMI_DATA_HDR_AMSDU_SHIFT) &
261 }
262 
263 static inline u8 wmi_data_hdr_get_meta(struct wmi_data_hdr *dhdr)
264 {
265  return (le16_to_cpu(dhdr->info2) >> WMI_DATA_HDR_META_SHIFT) &
267 }
268 
269 static inline u8 wmi_data_hdr_get_if_idx(struct wmi_data_hdr *dhdr)
270 {
272 }
273 
274 /* Tx meta version definitions */
275 #define WMI_MAX_TX_META_SZ 12
276 #define WMI_META_VERSION_1 0x01
277 #define WMI_META_VERSION_2 0x02
278 
279 /* Flag to signal to FW to calculate TCP checksum */
280 #define WMI_META_V2_FLAG_CSUM_OFFLOAD 0x01
281 
283  /* packet ID to identify the tx request */
285 
286  /* rate policy to be used for the tx of this frame */
288 } __packed;
289 
291  /*
292  * Offset from start of the WMI header for csum calculation to
293  * begin.
294  */
296 
297  /* offset from start of WMI header where final csum goes */
299 
300  /* no of bytes over which csum is calculated */
302 } __packed;
303 
306 
307  /* rate index mapped to rate at which this packet was received. */
309 
310  /* rssi of packet */
312 
313  /* rf channel during packet reception */
315 
317 } __packed;
318 
321 
322  /* bit 0 set -partial csum valid bit 1 set -test mode */
324 } __packed;
325 
326 #define WMI_CMD_HDR_IF_ID_MASK 0xF
327 
328 /* Control Path */
329 struct wmi_cmd_hdr {
331 
332  /* info1 - 16 bits
333  * b03:b00 - id
334  * b15:b04 - unused */
336 
337  /* for alignment */
339 } __packed;
340 
341 static inline u8 wmi_cmd_hdr_get_if_idx(struct wmi_cmd_hdr *chdr)
342 {
343  return le16_to_cpu(chdr->info1) & WMI_CMD_HDR_IF_ID_MASK;
344 }
345 
346 /* List of WMI commands */
354  /* WMI_START_SCAN_CMDID is to be deprecated. Use
355  * WMI_BEGIN_SCAN_CMDID instead. The new cmd supports P2P mgmt
356  * operations using station interface.
357  */
397  WMI_EXTENSION_CMDID, /* Non-wireless extensions */
410 
411  /* COEX AR6002 only */
414 
420 
421  /* Wake on Wireless */
427 
432 
433  /* WMI_THIN_RESERVED_... mark the start and end
434  * values for WMI_THIN_RESERVED command IDs. These
435  * command IDs can be found in wmi_thin.h */
438 
439  /* Developer commands starts at 0xF000 */
449 
450  /* Unused */
453 
454  /* AP mode commands */
467 
472 
481 
486 
490 
491  /* COEX CMDID AR6003 */
502 
507 
508  /* P2P commands */
516 
521 
522  /* WAC commands */
527 
532 
533  /* ACS command, consists of sub-commands */
536  WMI_SET_TBD_TIME_CMDID, /*added for wmiconfig command for TBD */
537 
538  /* Pktlog cmds */
541 
542  /* More P2P Cmds */
550 
555 
559  /* Ultra low power store / recall commands */
564 
572  /* WMI_SEND_ACTION_CMDID is to be deprecated. Use
573  * WMI_SEND_MGMT_CMDID instead. The new cmd supports P2P mgmt
574  * operations using station interface.
575  */
582 
586  /* LPL specific commands*/
593 
595 
596  /*GreenTx specific commands*/
597 
599 
603 
604  /* WPS Commands */
607 
608  /* More P2P commands */
615 
616  /* 802.11w cmd */
620 
623 
626 
629 
631 };
632 
640 };
641 
644  WMI_IE_FULL = 0xFF, /* indicats full IE */
645 };
646 
647 /* WMI_CONNECT_CMDID */
652  AP_NETWORK = 0x10,
653 };
654 
661 };
662 
664  OPEN_AUTH = 0x01,
665  SHARED_AUTH = 0x02,
666 
667  /* different from IEEE_AUTH_MODE definitions */
668  LEAP_AUTH = 0x04,
669 };
670 
671 enum auth_mode {
672  NONE_AUTH = 0x01,
673  WPA_AUTH = 0x02,
674  WPA2_AUTH = 0x04,
675  WPA_PSK_AUTH = 0x08,
679 };
680 
681 #define WMI_MAX_KEY_INDEX 3
682 
683 #define WMI_MAX_KEY_LEN 32
684 
685 /*
686  * NB: these values are ordered carefully; there are lots of
687  * of implications in any reordering. In particular beware
688  * that 4 is not used to avoid conflicting with IEEE80211_F_PRIVACY.
689  */
690 #define ATH6KL_CIPHER_WEP 0
691 #define ATH6KL_CIPHER_TKIP 1
692 #define ATH6KL_CIPHER_AES_OCB 2
693 #define ATH6KL_CIPHER_AES_CCM 3
694 #define ATH6KL_CIPHER_CKIP 5
695 #define ATH6KL_CIPHER_CCKM_KRK 6
696 #define ATH6KL_CIPHER_NONE 7 /* pseudo value */
697 
698 /*
699  * 802.11 rate set.
700  */
701 #define ATH6KL_RATE_MAXSIZE 15 /* max rates we'll handle */
702 
703 #define ATH_OUI_TYPE 0x01
704 #define WPA_OUI_TYPE 0x01
705 #define WMM_PARAM_OUI_SUBTYPE 0x01
706 #define WMM_OUI_TYPE 0x02
707 #define WSC_OUT_TYPE 0x04
708 
719 };
720 
735 } __packed;
736 
737 /* WMI_RECONNECT_CMDID */
739  /* channel hint */
741 
742  /* mandatory if set */
744 } __packed;
745 
746 /* WMI_ADD_CIPHER_KEY_CMDID */
747 enum key_usage {
749  GROUP_USAGE = 0x01,
750 
751  /* default Tx Key - static WEP only */
752  TX_USAGE = 0x02,
753 };
754 
755 /*
756  * Bit Flag
757  * Bit 0 - Initialise TSC - default is Initialize
758  */
759 #define KEY_OP_INIT_TSC 0x01
760 #define KEY_OP_INIT_RSC 0x02
761 
762 /* default initialise the TSC & RSC */
763 #define KEY_OP_INIT_VAL 0x03
764 #define KEY_OP_VALID_MASK 0x03
765 
769 
770  /* enum key_usage */
772 
774 
775  /* key replay sequence counter */
777 
779 
780  /* additional key control info */
782 
784 } __packed;
785 
786 /* WMI_DELETE_CIPHER_KEY_CMDID */
789 } __packed;
790 
791 #define WMI_KRK_LEN 16
792 
793 /* WMI_ADD_KRK_CMDID */
796 } __packed;
797 
798 /* WMI_SETPMKID_CMDID */
799 
800 #define WMI_PMKID_LEN 16
801 
805 };
806 
809 
810  /* enum pmkid_enable_flg */
812 
814 } __packed;
815 
816 /* WMI_START_SCAN_CMD */
820 };
821 
825 };
826 
829 
830  /* for legacy cisco AP compatibility */
832 
833  /* max duration in the home channel(msec) */
835 
836  /* time interval between scans (msec) */
838 
839  /* no CCK rates */
841 
842  /* enum wmi_scan_type */
844 
845  /* Supported rates to advertise in the probe request frames */
847 
848  /* how many channels follow */
850 
851  /* channels in Mhz */
853 } __packed;
854 
855 /* wmi_start_scan_cmd is to be deprecated. Use
856  * wmi_begin_scan_cmd instead. The new structure supports P2P mgmt
857  * operations using station interface.
858  */
861 
862  /* for legacy cisco AP compatibility */
864 
865  /* max duration in the home channel(msec) */
867 
868  /* time interval between scans (msec) */
870 
871  /* enum wmi_scan_type */
873 
874  /* how many channels follow */
876 
877  /* channels in Mhz */
879 } __packed;
880 
881 /*
882  * Warning: scan control flag value of 0xFF is used to disable
883  * all flags in WMI_SCAN_PARAMS_CMD. Do not add any more
884  * flags here
885  */
887 
888  /* set if can scan in the connect cmd */
890 
891  /* set if scan for the SSID it is already connected to */
893 
894  /* set if enable active scan */
896 
897  /* set if enable roam scan when bmiss and lowrssi */
899 
900  /* set if follows customer BSSINFO reporting rule */
902 
903  /* if disabled, target doesn't scan after a disconnect event */
905 
906  /*
907  * Scan complete event with canceled status will be generated when
908  * a scan is prempted before it gets completed.
909  */
911 };
912 
914  /* sec */
916 
917  /* sec */
919 
920  /* sec */
922 
923  /* msec */
925 
926  /* msec */
928 
929  /* how many shorts scan for one long */
931 
933 
934  /* msec */
936 
937  /* max active scans per ssid */
939 
940  /* msecs */
942 } __packed;
943 
944 /* WMI_SET_BSS_FILTER_CMDID */
946  /* no beacons forwarded */
948 
949  /* all beacons forwarded */
951 
952  /* only beacons matching profile */
954 
955  /* all but beacons matching profile */
957 
958  /* only beacons matching current BSS */
960 
961  /* all but beacons matching BSS */
963 
964  /* beacons matching probed ssid */
966 
967  /* beacons matching matched ssid */
969 
970  /* marker only */
972 };
973 
975  /* see, enum wmi_bss_filter */
977 
978  /* for alignment */
980 
981  /* for alignment */
983 
985 } __packed;
986 
987 /* WMI_SET_PROBED_SSID_CMDID */
988 #define MAX_PROBED_SSIDS 16
989 
991  /* disables entry */
993 
994  /* probes specified ssid */
996 
997  /* probes for any ssid */
999 
1000  /* match for ssid */
1002 };
1003 
1005  /* 0 to MAX_PROBED_SSIDS - 1 */
1007 
1008  /* see, enum wmi_ssid_flg */
1010 
1013 } __packed;
1014 
1015 /*
1016  * WMI_SET_LISTEN_INT_CMDID
1017  * The Listen interval is between 15 and 3000 TUs
1018  */
1022 } __packed;
1023 
1024 /* WMI_SET_BMISS_TIME_CMDID */
1028 };
1029 
1030 /* WMI_STA_ENHANCE_BMISS_CMDID */
1033 } __packed;
1034 
1035 /* WMI_SET_POWER_MODE_CMDID */
1037  REC_POWER = 0x01,
1039 };
1040 
1042  /* see, enum wmi_power_mode */
1044 } __packed;
1045 
1046 /*
1047  * Policy to determnine whether power save failure event should be sent to
1048  * host during scanning
1049  */
1053 };
1054 
1056  /* msec */
1058 
1064 } __packed;
1065 
1066 /*
1067  * Ratemask for below modes should be passed
1068  * to WMI_SET_TX_SELECT_RATES_CMDID.
1069  * AR6003 has 32 bit mask for each modes.
1070  * First 12 bits for legacy rates, 13 to 20
1071  * bits for HT 20 rates and 21 to 28 bits for
1072  * HT 40 rates
1073  */
1084 };
1085 
1086 /* WMI_SET_TX_SELECT_RATES_CMDID */
1089 } __packed;
1090 
1091 /* WMI_SET_TX_SELECT_RATES_CMDID */
1094 } __packed;
1095 
1096 /* WMI_SET_DISC_TIMEOUT_CMDID */
1098  /* seconds */
1100 } __packed;
1101 
1102 enum dir_type {
1106 };
1107 
1112 };
1113 
1117 };
1118 
1119 /* WMI_SYNCHRONIZE_CMDID */
1122 } __packed;
1123 
1124 /* WMI_CREATE_PSTREAM_CMDID */
1126  /* msec */
1128 
1129  /* msec */
1131 
1132  /* msec */
1134 
1135  /* msec */
1137 
1139 
1140  /* in bps */
1142 
1143  /* in bps */
1145 
1146  /* in bps */
1148 
1151 
1152  /* in bps */
1154 
1157 
1158  /* in octects */
1160 
1161  /* in octects */
1163 
1165 
1166  /* see, enum dir_type */
1168 
1170 
1171  /* see, enum traffic_type */
1173 
1174  /* see, enum voiceps_cap_type */
1177 
1178  /* 802.1D user priority */
1180 
1181  /* nominal phy rate */
1183 } __packed;
1184 
1185 /* WMI_DELETE_PSTREAM_CMDID */
1192 } __packed;
1193 
1194 /* WMI_SET_CHANNEL_PARAMS_CMDID */
1202 };
1203 
1204 #define WMI_MAX_CHANNELS 32
1205 
1206 /*
1207  * WMI_RSSI_THRESHOLD_PARAMS_CMDID
1208  * Setting the polltime to 0 would disable polling. Threshold values are
1209  * in the ascending order, and should agree to:
1210  * (lowThreshold_lowerVal < lowThreshold_upperVal < highThreshold_lowerVal
1211  * < highThreshold_upperVal)
1212  */
1213 
1215  /* polling time as a factor of LI */
1217 
1218  /* lowest of upper */
1220 
1225 
1226  /* highest of upper */
1228 
1229  /* lowest of bellow */
1231 
1236 
1237  /* highest of bellow */
1239 
1240  /* "alpha" */
1242 
1244 } __packed;
1245 
1246 /*
1247  * WMI_SNR_THRESHOLD_PARAMS_CMDID
1248  * Setting the polltime to 0 would disable polling.
1249  */
1250 
1252  /* polling time as a factor of LI */
1254 
1255  /* "alpha" */
1257 
1258  /* lowest of uppper */
1260 
1263 
1264  /* highest of upper */
1266 
1267  /* lowest of bellow */
1269 
1272 
1273  /* highest of bellow */
1275 
1277 } __packed;
1278 
1282 };
1283 
1287 } __packed;
1288 
1291 } __packed;
1292 
1293 /* WMI_SET_TX_PWR_CMDID */
1295  /* in dbM units */
1297 } __packed;
1298 
1300  /* in dbM units */
1302 } __packed;
1303 
1306 };
1307 
1311 };
1313  /* default */
1315 
1317 };
1318 
1321 } __packed;
1322 
1323 #define ATH6KL_MCAST_FILTER_MAC_ADDR_SIZE 6
1326 } __packed;
1327 
1336 } __packed;
1337 
1338 /* Command Replies */
1339 
1340 /* WMI_GET_CHANNEL_LIST_CMDID reply */
1343 
1344  /* number of channels in reply */
1346 
1347  /* channel in Mhz */
1349 } __packed;
1350 
1351 /* List of Events (target to host) */
1394 
1395  /* DFS Events */
1406 
1407  /* CCX Evants */
1409 
1410  /* P2P Events */
1412 
1417 
1420 
1421  /* More P2P Events */
1428 
1429  /* RFKILL Events */
1432 
1435 
1437 
1439  /* Events in this range are reserved for thinmode */
1441 
1444 
1445  /* Generic ACS event */
1458 };
1459 
1465 } __packed;
1466 
1467 /* WMI_PHY_CAPABILITY */
1469  WMI_11A_CAP = 0x01,
1470  WMI_11G_CAP = 0x02,
1475 };
1476 
1477 /* Connect Event */
1479  union {
1480  struct {
1486  } sta;
1487  struct {
1496  } ap_sta;
1497  struct {
1498  __le16 ch;
1499  u8 bssid[ETH_ALEN];
1500  u8 unused[8];
1501  } ap_bss;
1502  } u;
1507 } __packed;
1508 
1509 /* Disconnect Event */
1512 
1513  /* bmiss */
1514  LOST_LINK = 0x02,
1515 
1518  AUTH_FAILED = 0x05,
1526  IBSS_MERGE = 0xe,
1527 };
1528 
1529 /* AP mode disconnect proto_reasons */
1538 };
1539 
1540 #define ATH6KL_COUNTRY_RD_SHIFT 16
1541 
1544 };
1545 
1547  /* reason code, see 802.11 spec. */
1549 
1550  /* set if known */
1552 
1553  /* see WMI_DISCONNECT_REASON */
1555 
1558 } __packed;
1559 
1560 /*
1561  * BSS Info Event.
1562  * Mechanism used to inform host of the presence and characteristic of
1563  * wireless networks present. Consists of bss info header followed by
1564  * the beacon or probe-response frame body. The 802.11 header is no included.
1565  */
1571 };
1572 
1573 #define DEF_LRSSI_SCAN_PERIOD 5
1574 #define DEF_LRSSI_ROAM_THRESHOLD 20
1575 #define DEF_LRSSI_ROAM_FLOOR 60
1576 #define DEF_SCAN_FOR_ROAM_INTVL 2
1577 
1583 };
1584 
1586  WMI_DEFAULT_ROAM_MODE = 1, /* RSSI based roam */
1587  WMI_HOST_BIAS_ROAM_MODE = 2, /* Host bias based roam */
1588  WMI_LOCK_BSS_MODE = 3, /* Lock to the current BSS */
1589 };
1590 
1591 struct bss_bias {
1594 } __packed;
1595 
1598  struct bss_bias bss_bias[0];
1599 } __packed;
1600 
1607 } __packed;
1608 
1610  union {
1611  u8 bssid[ETH_ALEN]; /* WMI_FORCE_ROAM */
1612  u8 roam_mode; /* WMI_SET_ROAM_MODE */
1613  struct bss_bias_info bss; /* WMI_SET_HOST_BIAS */
1614  struct low_rssi_scan_params params; /* WMI_SET_LRSSI_SCAN_PARAMS
1615  */
1616  } __packed info;
1618 } __packed;
1619 
1622 } __packed;
1623 
1624 /* BSS INFO HDR version 2.0 */
1626  __le16 ch; /* frequency in MHz */
1627 
1628  /* see, enum wmi_bi_ftype */
1630 
1631  u8 snr; /* note: rssi = snr - 95 dBm */
1634 } __packed;
1635 
1636 /* Command Error Event */
1641 };
1642 
1646 } __packed;
1647 
1653 } __packed;
1654 
1655 /*
1656  * The WMI_NEIGHBOR_REPORT Event is generated by the target to inform
1657  * the host of BSS's it has found that matches the current profile.
1658  * It can be used by the host to cache PMKs and/to initiate pre-authentication
1659  * if the BSS supports it. The first bssid is always the current associated
1660  * BSS.
1661  * The bssid and bssFlags information repeats according to the number
1662  * or APs reported.
1663  */
1668 };
1669 
1672  u8 bss_flags; /* enum wmi_bss_flags */
1673 } __packed;
1674 
1678 } __packed;
1679 
1680 /* TKIP MIC Error Event */
1684 } __packed;
1685 
1688 };
1689 
1690 /* WMI_SCAN_COMPLETE_EVENTID */
1693 } __packed;
1694 
1695 #define MAX_OPT_DATA_LEN 1400
1696 
1697 /*
1698  * Special frame receive Event.
1699  * Mechanism used to inform host of the receiption of the special frames.
1700  * Consists of special frame info header followed by special frame body.
1701  * The 802.11 header is not included.
1702  */
1709 } __packed;
1710 
1711 /* Reporting statistic */
1712 struct tx_stats {
1724 
1731 } __packed;
1732 
1733 struct rx_stats {
1743 
1750 } __packed;
1751 
1759 } __packed;
1760 
1761 struct pm_stats {
1767 } __packed;
1768 
1769 struct cserv_stats {
1780 } __packed;
1781 
1783  struct tx_stats tx;
1784  struct rx_stats rx;
1786 } __packed;
1787 
1788 struct arp_stats {
1792 } __packed;
1793 
1799 } __packed;
1800 
1809 } __packed;
1810 
1811 /*
1812  * WMI_RSSI_THRESHOLD_EVENTID.
1813  * Indicate the RSSI events to host. Events are indicated when we breach a
1814  * thresold value.
1815  */
1829 };
1830 
1834 } __packed;
1835 
1845 };
1846 
1848  /* see, enum wmi_snr_threshold_val */
1850 
1852 } __packed;
1853 
1854 /* WMI_REPORT_ROAM_TBL_EVENTID */
1855 #define MAX_ROAM_TBL_CAND 5
1856 
1865 
1866  /* for alignment */
1868 } __packed;
1869 
1874 } __packed;
1875 
1876 /* WMI_CAC_EVENTID */
1882 };
1883 
1884 #define WMM_TSPEC_IE_LEN 63
1885 
1891 } __packed;
1892 
1893 /* WMI_APLIST_EVENTID */
1894 
1897 };
1898 
1902 } __packed;
1903 
1906 } __packed;
1907 
1912 } __packed;
1913 
1914 /* Developer Commands */
1915 
1916 /*
1917  * WMI_SET_BITRATE_CMDID
1918  *
1919  * Get bit rate cmd uses same definition as set bit rate cmd
1920  */
1951 };
1952 
1954  /* see, enum wmi_bit_rate */
1956 } __packed;
1957 
1958 /*
1959  * WMI_SET_FIXRATES_CMDID
1960  *
1961  * Get fix rates cmd uses same definition as set fix rates cmd
1962  */
1964  /* see wmi_bit_rate */
1966 } __packed;
1967 
1969  /* get the roam time data */
1971 };
1972 
1982 } __packed;
1983 
1987 };
1988 
1991 } __packed;
1992 
1995 } __packed;
1996 
2000 } __packed;
2001 
2003  u8 mgmt_frm_type; /* enum wmi_mgmt_frame_type */
2006 } __packed;
2007 
2010  u8 ie_field; /* enum wmi_ie_field_type */
2014 } __packed;
2015 
2016 /* Notify the WSC registration status to the target */
2017 #define WSC_REG_ACTIVE 1
2018 #define WSC_REG_INACTIVE 0
2019 
2020 #define WOW_MAX_FILTERS_PER_LIST 4
2021 #define WOW_PATTERN_SIZE 64
2022 #define WOW_MASK_SIZE 64
2023 
2024 #define MAC_MAX_FILTERS_PER_LIST 4
2025 
2026 struct wow_filter {
2033 } __packed;
2034 
2035 #define MAX_IP_ADDRS 2
2036 
2038  /* IP in network byte order */
2040 } __packed;
2041 
2055 };
2056 
2060 };
2061 
2065 } __packed;
2066 
2070 };
2071 
2076 } __packed;
2077 
2083 } __packed;
2084 
2088 } __packed;
2089 
2090 /* WMI_SET_AKMP_PARAMS_CMD */
2091 
2092 struct wmi_pmkid {
2094 } __packed;
2095 
2096 /* WMI_GET_PMKID_LIST_CMD Reply */
2101 } __packed;
2102 
2103 /* WMI_ADDBA_REQ_EVENTID */
2108 
2109  /* f/w response for ADDBA Req; OK (0) or failure (!=0) */
2111 } __packed;
2112 
2113 /* WMI_ADDBA_RESP_EVENTID */
2116 
2117  /* OK (0), failure (!=0) */
2119 
2120  /* three values: not supported(0), 3839, 8k */
2122 } __packed;
2123 
2124 /* WMI_DELBA_EVENTID
2125  * f/w received a DELBA for peer and processed it.
2126  * Host is notified of this
2127  */
2132 } __packed;
2133 
2134 #define PEER_NODE_JOIN_EVENT 0x00
2135 #define PEER_NODE_LEAVE_EVENT 0x01
2136 #define PEER_FIRST_NODE_JOIN_EVENT 0x10
2137 #define PEER_LAST_NODE_LEAVE_EVENT 0x11
2138 
2142 } __packed;
2143 
2144 /* Transmit complete event data structure(s) */
2145 
2146 /* version 1 of tx complete msg */
2148 #define TX_COMPLETE_STATUS_SUCCESS 0
2149 #define TX_COMPLETE_STATUS_RETRIES 1
2150 #define TX_COMPLETE_STATUS_NOLINK 2
2151 #define TX_COMPLETE_STATUS_TIMEOUT 3
2152 #define TX_COMPLETE_STATUS_OTHER 4
2153 
2155 
2156  /* packet ID to identify parent packet */
2158 
2159  /* rate index on successful transmission */
2161 
2162  /* number of ACK failures in tx attempt */
2164 } __packed;
2165 
2167  /* no of tx comp msgs following this struct */
2169 
2170  /* length in bytes for each individual msg following this struct */
2172 
2173  /* version of tx complete msg data following this struct */
2175 
2176  /* individual messages follow this header */
2178 } __packed;
2179 
2180 /*
2181  * ------- AP Mode definitions --------------
2182  */
2183 
2184 /*
2185  * !!! Warning !!!
2186  * -Changing the following values needs compilation of both driver and firmware
2187  */
2188 #define AP_MAX_NUM_STA 10
2189 
2190 /* Spl. AID used to set DTIM flag in the beacons */
2191 #define MCAST_AID 0xFF
2192 
2193 #define DEF_AP_COUNTRY_CODE "US "
2194 
2195 /* Used with WMI_AP_SET_NUM_STA_CMDID */
2196 
2197 /*
2198  * Used with WMI_AP_SET_MLME_CMDID
2199  */
2200 
2201 /* MLME Commands */
2202 #define WMI_AP_MLME_ASSOC 1 /* associate station */
2203 #define WMI_AP_DISASSOC 2 /* disassociate station */
2204 #define WMI_AP_DEAUTH 3 /* deauthenticate station */
2205 #define WMI_AP_MLME_AUTHORIZE 4 /* authorize station */
2206 #define WMI_AP_MLME_UNAUTHORIZE 5 /* unauthorize station */
2207 
2210  __le16 reason; /* 802.11 reason code */
2211  u8 cmd; /* operation to perform (WMI_AP_*) */
2212 } __packed;
2213 
2218 } __packed;
2219 
2221  /* version of meta data for rx packets <0 = default> (0-7 = valid) */
2223 
2224  /*
2225  * 1 == leave .11 header intact,
2226  * 0 == replace .11 header with .3 <default>
2227  */
2229 
2230  /*
2231  * 1 == defragmentation is performed by host,
2232  * 0 == performed by target <default>
2233  */
2235 
2236  /* for alignment */
2238 } __packed;
2239 
2242 } __packed;
2243 
2247 } __packed;
2248 
2249 /* AP mode events */
2252 } __packed;
2253 
2256 };
2257 
2262 } __packed;
2263 
2264 /* WMI_PS_POLL_EVENT */
2267 } __packed;
2268 
2279 } __packed;
2280 
2284 } __packed;
2285 
2286 /* End of AP mode definitions */
2287 
2291 } __packed;
2292 
2293 /* wmi_send_action_cmd is to be deprecated. Use
2294  * wmi_send_mgmt_cmd instead. The new structure supports P2P mgmt
2295  * operations using station interface.
2296  */
2302  u8 data[0];
2303 } __packed;
2304 
2311  u8 data[0];
2312 } __packed;
2313 
2317 } __packed;
2318 
2321 } __packed;
2322 
2325 } __packed;
2326 
2332 } __packed;
2333 
2337 } __packed;
2338 
2343 } __packed;
2344 
2348  u8 data[0];
2349 } __packed;
2350 
2353  u8 data[0];
2354 } __packed;
2355 
2359  u8 data[0];
2360 } __packed;
2361 
2362 #define P2P_FLAG_CAPABILITIES_REQ (0x00000001)
2363 #define P2P_FLAG_MACADDR_REQ (0x00000002)
2364 #define P2P_FLAG_HMODEL_REQ (0x00000002)
2365 
2368 } __packed;
2369 
2373  u8 data[0];
2374 } __packed;
2375 
2378 } __packed;
2379 
2382 } __packed;
2383 
2386 } __packed;
2387 
2392  u8 data[0];
2393 } __packed;
2394 
2395 /* Extended WMI (WMIX)
2396  *
2397  * Extended WMIX commands are encapsulated in a WMI message with
2398  * cmd=WMI_EXTENSION_CMD.
2399  *
2400  * Extended WMI commands are those that are needed during wireless
2401  * operation, but which are not really wireless commands. This allows,
2402  * for instance, platform-specific commands. Extended WMI commands are
2403  * embedded in a WMI command message with WMI_COMMAND_ID=WMI_EXTENSION_CMDID.
2404  * Extended WMI events are similarly embedded in a WMI event message with
2405  * WMI_EVENT_ID=WMI_EXTENSION_EVENTID.
2406  */
2409 } __packed;
2410 
2421  WMIX_PROF_CFG_CMDID, /* 0x200a */
2426 };
2427 
2438 };
2439 
2440 /*
2441  * ------Error Detection support-------
2442  */
2443 
2444 /*
2445  * WMIX_HB_CHALLENGE_RESP_CMDID
2446  * Heartbeat Challenge Response command
2447  */
2451 } __packed;
2452 
2456 } __packed;
2457 
2458 /* End of Extended WMI (WMIX) */
2459 
2462 
2463  /* transmit all queued data before cmd */
2465 
2466  /* any new data waits until cmd execs */
2468 
2470 
2471  /* end marker */
2473 };
2474 
2476 void ath6kl_wmi_set_control_ep(struct wmi *wmi, enum htc_endpoint_id ep_id);
2477 int ath6kl_wmi_dix_2_dot3(struct wmi *wmi, struct sk_buff *skb);
2478 int ath6kl_wmi_data_hdr_add(struct wmi *wmi, struct sk_buff *skb,
2479  u8 msg_type, u32 flags,
2480  enum wmi_data_hdr_data_type data_type,
2481  u8 meta_ver, void *tx_meta_info, u8 if_idx);
2482 
2483 int ath6kl_wmi_dot11_hdr_remove(struct wmi *wmi, struct sk_buff *skb);
2484 int ath6kl_wmi_dot3_2_dix(struct sk_buff *skb);
2485 int ath6kl_wmi_implicit_create_pstream(struct wmi *wmi, u8 if_idx,
2486  struct sk_buff *skb, u32 layer2_priority,
2487  bool wmm_enabled, u8 *ac);
2488 
2489 int ath6kl_wmi_control_rx(struct wmi *wmi, struct sk_buff *skb);
2490 
2491 int ath6kl_wmi_cmd_send(struct wmi *wmi, u8 if_idx, struct sk_buff *skb,
2492  enum wmi_cmd_id cmd_id, enum wmi_sync_flag sync_flag);
2493 
2494 int ath6kl_wmi_connect_cmd(struct wmi *wmi, u8 if_idx,
2495  enum network_type nw_type,
2497  enum auth_mode auth_mode,
2498  enum crypto_type pairwise_crypto,
2499  u8 pairwise_crypto_len,
2500  enum crypto_type group_crypto,
2501  u8 group_crypto_len, int ssid_len, u8 *ssid,
2502  u8 *bssid, u16 channel, u32 ctrl_flags,
2503  u8 nw_subtype);
2504 
2505 int ath6kl_wmi_reconnect_cmd(struct wmi *wmi, u8 if_idx, u8 *bssid,
2506  u16 channel);
2507 int ath6kl_wmi_disconnect_cmd(struct wmi *wmi, u8 if_idx);
2508 int ath6kl_wmi_startscan_cmd(struct wmi *wmi, u8 if_idx,
2509  enum wmi_scan_type scan_type,
2510  u32 force_fgscan, u32 is_legacy,
2511  u32 home_dwell_time, u32 force_scan_interval,
2512  s8 num_chan, u16 *ch_list);
2513 
2514 int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx,
2515  enum wmi_scan_type scan_type,
2516  u32 force_fgscan, u32 is_legacy,
2517  u32 home_dwell_time, u32 force_scan_interval,
2518  s8 num_chan, u16 *ch_list, u32 no_cck,
2519  u32 *rates);
2520 
2521 int ath6kl_wmi_scanparams_cmd(struct wmi *wmi, u8 if_idx, u16 fg_start_sec,
2522  u16 fg_end_sec, u16 bg_sec,
2523  u16 minact_chdw_msec, u16 maxact_chdw_msec,
2524  u16 pas_chdw_msec, u8 short_scan_ratio,
2525  u8 scan_ctrl_flag, u32 max_dfsch_act_time,
2526  u16 maxact_scan_per_ssid);
2527 int ath6kl_wmi_bssfilter_cmd(struct wmi *wmi, u8 if_idx, u8 filter,
2528  u32 ie_mask);
2529 int ath6kl_wmi_probedssid_cmd(struct wmi *wmi, u8 if_idx, u8 index, u8 flag,
2530  u8 ssid_len, u8 *ssid);
2531 int ath6kl_wmi_listeninterval_cmd(struct wmi *wmi, u8 if_idx,
2533  u16 listen_beacons);
2534 int ath6kl_wmi_bmisstime_cmd(struct wmi *wmi, u8 if_idx,
2535  u16 bmiss_time, u16 num_beacons);
2536 int ath6kl_wmi_powermode_cmd(struct wmi *wmi, u8 if_idx, u8 pwr_mode);
2537 int ath6kl_wmi_pmparams_cmd(struct wmi *wmi, u8 if_idx, u16 idle_period,
2538  u16 ps_poll_num, u16 dtim_policy,
2539  u16 tx_wakup_policy, u16 num_tx_to_wakeup,
2540  u16 ps_fail_event_policy);
2541 int ath6kl_wmi_create_pstream_cmd(struct wmi *wmi, u8 if_idx,
2542  struct wmi_create_pstream_cmd *pstream);
2543 int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,
2544  u8 tsid);
2545 int ath6kl_wmi_disctimeout_cmd(struct wmi *wmi, u8 if_idx, u8 timeout);
2546 
2548 int ath6kl_wmi_set_lpreamble_cmd(struct wmi *wmi, u8 if_idx, u8 status,
2549  u8 preamble_policy);
2550 
2553 
2554 int ath6kl_wmi_get_stats_cmd(struct wmi *wmi, u8 if_idx);
2555 int ath6kl_wmi_addkey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index,
2556  enum crypto_type key_type,
2558  u8 *key_rsc, unsigned int key_rsc_len,
2559  u8 *key_material,
2560  u8 key_op_ctrl, u8 *mac_addr,
2561  enum wmi_sync_flag sync_flag);
2562 int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, u8 *krk);
2563 int ath6kl_wmi_deletekey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index);
2564 int ath6kl_wmi_setpmkid_cmd(struct wmi *wmi, u8 if_idx, const u8 *bssid,
2565  const u8 *pmkid, bool set);
2566 int ath6kl_wmi_set_tx_pwr_cmd(struct wmi *wmi, u8 if_idx, u8 dbM);
2567 int ath6kl_wmi_get_tx_pwr_cmd(struct wmi *wmi, u8 if_idx);
2568 int ath6kl_wmi_get_roam_tbl_cmd(struct wmi *wmi);
2569 
2570 int ath6kl_wmi_set_wmm_txop(struct wmi *wmi, u8 if_idx, enum wmi_txop_cfg cfg);
2571 int ath6kl_wmi_set_keepalive_cmd(struct wmi *wmi, u8 if_idx,
2572  u8 keep_alive_intvl);
2573 int ath6kl_wmi_set_htcap_cmd(struct wmi *wmi, u8 if_idx,
2574  enum ieee80211_band band,
2575  struct ath6kl_htcap *htcap);
2576 int ath6kl_wmi_test_cmd(struct wmi *wmi, void *buf, size_t len);
2577 
2578 s32 ath6kl_wmi_get_rate(s8 rate_index);
2579 
2580 int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, u8 if_idx,
2581  __be32 ips0, __be32 ips1);
2582 int ath6kl_wmi_set_host_sleep_mode_cmd(struct wmi *wmi, u8 if_idx,
2583  enum ath6kl_host_mode host_mode);
2584 int ath6kl_wmi_set_bitrate_mask(struct wmi *wmi, u8 if_idx,
2585  const struct cfg80211_bitrate_mask *mask);
2586 int ath6kl_wmi_set_wow_mode_cmd(struct wmi *wmi, u8 if_idx,
2587  enum ath6kl_wow_mode wow_mode,
2588  u32 filter, u16 host_req_delay);
2589 int ath6kl_wmi_add_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
2590  u8 list_id, u8 filter_size,
2591  u8 filter_offset, const u8 *filter,
2592  const u8 *mask);
2593 int ath6kl_wmi_del_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
2594  u16 list_id, u16 filter_id);
2595 int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi);
2596 int ath6kl_wmi_ap_set_dtim_cmd(struct wmi *wmi, u8 if_idx, u32 dtim_period);
2597 int ath6kl_wmi_force_roam_cmd(struct wmi *wmi, const u8 *bssid);
2599 int ath6kl_wmi_mcast_filter_cmd(struct wmi *wmi, u8 if_idx, bool mc_all_on);
2600 int ath6kl_wmi_add_del_mcast_filter_cmd(struct wmi *wmi, u8 if_idx,
2601  u8 *filter, bool add_filter);
2602 int ath6kl_wmi_sta_bmiss_enhance_cmd(struct wmi *wmi, u8 if_idx, bool enable);
2603 
2604 /* AP mode uAPSD */
2605 int ath6kl_wmi_ap_set_apsd(struct wmi *wmi, u8 if_idx, u8 enable);
2606 
2608  u8 if_idx, u16 aid,
2609  u16 bitmap, u32 flags);
2610 
2612 
2613 u8 ath6kl_wmi_determine_user_priority(u8 *pkt, u32 layer2_pri);
2614 /* AP mode */
2615 int ath6kl_wmi_ap_hidden_ssid(struct wmi *wmi, u8 if_idx, bool enable);
2616 int ath6kl_wmi_ap_profile_commit(struct wmi *wmip, u8 if_idx,
2617  struct wmi_connect_cmd *p);
2618 
2619 int ath6kl_wmi_ap_set_mlme(struct wmi *wmip, u8 if_idx, u8 cmd,
2620  const u8 *mac, u16 reason);
2621 
2622 int ath6kl_wmi_set_pvb_cmd(struct wmi *wmi, u8 if_idx, u16 aid, bool flag);
2623 
2624 int ath6kl_wmi_set_rx_frame_format_cmd(struct wmi *wmi, u8 if_idx,
2625  u8 rx_meta_version,
2626  bool rx_dot11_hdr, bool defrag_on_host);
2627 
2628 int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
2629  const u8 *ie, u8 ie_len);
2630 
2631 int ath6kl_wmi_set_ie_cmd(struct wmi *wmi, u8 if_idx, u8 ie_id, u8 ie_field,
2632  const u8 *ie_info, u8 ie_len);
2633 
2634 /* P2P */
2635 int ath6kl_wmi_disable_11b_rates_cmd(struct wmi *wmi, bool disable);
2636 
2637 int ath6kl_wmi_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx, u32 freq,
2638  u32 dur);
2639 
2640 int ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id, u32 freq,
2641  u32 wait, const u8 *data, u16 data_len,
2642  u32 no_cck);
2643 
2644 int ath6kl_wmi_send_probe_response_cmd(struct wmi *wmi, u8 if_idx, u32 freq,
2645  const u8 *dst, const u8 *data,
2646  u16 data_len);
2647 
2648 int ath6kl_wmi_probe_report_req_cmd(struct wmi *wmi, u8 if_idx, bool enable);
2649 
2650 int ath6kl_wmi_info_req_cmd(struct wmi *wmi, u8 if_idx, u32 info_req_flags);
2651 
2652 int ath6kl_wmi_cancel_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx);
2653 
2654 int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
2655  const u8 *ie, u8 ie_len);
2656 
2657 int ath6kl_wmi_set_inact_period(struct wmi *wmi, u8 if_idx, int inact_timeout);
2658 
2659 void ath6kl_wmi_sscan_timer(unsigned long ptr);
2660 
2661 struct ath6kl_vif *ath6kl_get_vif_by_index(struct ath6kl *ar, u8 if_idx);
2662 void *ath6kl_wmi_init(struct ath6kl *devt);
2663 void ath6kl_wmi_shutdown(struct wmi *wmi);
2664 void ath6kl_wmi_reset(struct wmi *wmi);
2665 
2666 #endif /* WMI_H */