tree-wide: replace config_enabled() with IS_ENABLED()
[deliverable/linux.git] / drivers / net / wireless / ath / ath10k / core.h
CommitLineData
5e3dd157
KV
1/*
2 * Copyright (c) 2005-2011 Atheros Communications Inc.
3 * Copyright (c) 2011-2013 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#ifndef _CORE_H_
19#define _CORE_H_
20
21#include <linux/completion.h>
22#include <linux/if_ether.h>
23#include <linux/types.h>
24#include <linux/pci.h>
384914b2
BG
25#include <linux/uuid.h>
26#include <linux/time.h>
5e3dd157 27
edb8236d 28#include "htt.h"
5e3dd157
KV
29#include "htc.h"
30#include "hw.h"
31#include "targaddrs.h"
32#include "wmi.h"
33#include "../ath.h"
34#include "../regd.h"
9702c686 35#include "../dfs_pattern_detector.h"
855aed12 36#include "spectral.h"
fe6f36d6 37#include "thermal.h"
5fd3ac3c 38#include "wow.h"
dcb02db1 39#include "swap.h"
5e3dd157
KV
40
41#define MS(_v, _f) (((_v) & _f##_MASK) >> _f##_LSB)
42#define SM(_v, _f) (((_v) << _f##_LSB) & _f##_MASK)
43#define WO(_f) ((_f##_OFFSET) >> 2)
44
45#define ATH10K_SCAN_ID 0
46#define WMI_READY_TIMEOUT (5 * HZ)
14e105cd
KV
47#define ATH10K_FLUSH_TIMEOUT_HZ (5 * HZ)
48#define ATH10K_CONNECTION_LOSS_HZ (3 * HZ)
c94aa7ef 49#define ATH10K_NUM_CHANS 39
5e3dd157
KV
50
51/* Antenna noise floor */
52#define ATH10K_DEFAULT_NOISE_FLOOR -95
53
71098615 54#define ATH10K_MAX_NUM_MGMT_PENDING 128
5e00d31a 55
4705e34e
RM
56/* number of failed packets (20 packets with 16 sw reties each) */
57#define ATH10K_KICKOUT_THRESHOLD (20 * 16)
5a13e76e
KV
58
59/*
60 * Use insanely high numbers to make sure that the firmware implementation
61 * won't start, we have the same functionality already in hostapd. Unit
62 * is seconds.
63 */
64#define ATH10K_KEEPALIVE_MIN_IDLE 3747
65#define ATH10K_KEEPALIVE_MAX_IDLE 3895
66#define ATH10K_KEEPALIVE_MAX_UNRESPONSIVE 3900
67
5e3dd157
KV
68struct ath10k;
69
e07db352
KV
70enum ath10k_bus {
71 ATH10K_BUS_PCI,
0b523ced 72 ATH10K_BUS_AHB,
e07db352
KV
73};
74
75static inline const char *ath10k_bus_str(enum ath10k_bus bus)
76{
77 switch (bus) {
78 case ATH10K_BUS_PCI:
79 return "pci";
0b523ced
RM
80 case ATH10K_BUS_AHB:
81 return "ahb";
e07db352
KV
82 }
83
84 return "unknown";
85}
86
66b8a010
MK
87enum ath10k_skb_flags {
88 ATH10K_SKB_F_NO_HWCRYPT = BIT(0),
89 ATH10K_SKB_F_DTIM_ZERO = BIT(1),
90 ATH10K_SKB_F_DELIVER_CAB = BIT(2),
d668dbae 91 ATH10K_SKB_F_MGMT = BIT(3),
609db229 92 ATH10K_SKB_F_QOS = BIT(4),
66b8a010
MK
93};
94
5e3dd157
KV
95struct ath10k_skb_cb {
96 dma_addr_t paddr;
66b8a010 97 u8 flags;
d84a512d 98 u8 eid;
aca146af 99 u16 msdu_id;
609db229 100 struct ieee80211_vif *vif;
dd4717b6 101 struct ieee80211_txq *txq;
5e3dd157
KV
102} __packed;
103
8582bf3b
MK
104struct ath10k_skb_rxcb {
105 dma_addr_t paddr;
c545070e 106 struct hlist_node hlist;
8582bf3b
MK
107};
108
5e3dd157
KV
109static inline struct ath10k_skb_cb *ATH10K_SKB_CB(struct sk_buff *skb)
110{
111 BUILD_BUG_ON(sizeof(struct ath10k_skb_cb) >
112 IEEE80211_TX_INFO_DRIVER_DATA_SIZE);
113 return (struct ath10k_skb_cb *)&IEEE80211_SKB_CB(skb)->driver_data;
114}
115
8582bf3b
MK
116static inline struct ath10k_skb_rxcb *ATH10K_SKB_RXCB(struct sk_buff *skb)
117{
118 BUILD_BUG_ON(sizeof(struct ath10k_skb_rxcb) > sizeof(skb->cb));
119 return (struct ath10k_skb_rxcb *)skb->cb;
120}
121
c545070e
MK
122#define ATH10K_RXCB_SKB(rxcb) \
123 container_of((void *)rxcb, struct sk_buff, cb)
124
5e3dd157
KV
125static inline u32 host_interest_item_address(u32 item_offset)
126{
127 return QCA988X_HOST_INTEREST_ADDRESS + item_offset;
128}
129
130struct ath10k_bmi {
131 bool done_sent;
132};
133
b3effe61
BM
134struct ath10k_mem_chunk {
135 void *vaddr;
136 dma_addr_t paddr;
137 u32 len;
138 u32 req_id;
139};
140
5e3dd157
KV
141struct ath10k_wmi {
142 enum ath10k_htc_ep_id eid;
143 struct completion service_ready;
144 struct completion unified_ready;
be8b3943 145 wait_queue_head_t tx_credits_wq;
acfe7ecf 146 DECLARE_BITMAP(svc_map, WMI_SERVICE_MAX);
ce42870e 147 struct wmi_cmd_map *cmd;
6d1506e7 148 struct wmi_vdev_param_map *vdev_param;
226a339b 149 struct wmi_pdev_param_map *pdev_param;
d7579d12 150 const struct wmi_ops *ops;
3fab30f7 151 const struct wmi_peer_flags_map *peer_flags;
b3effe61
BM
152
153 u32 num_mem_chunks;
ccec9038 154 u32 rx_decap_mode;
5c01aa3d 155 struct ath10k_mem_chunk mem_chunks[WMI_MAX_MEM_REQS];
5e3dd157
KV
156};
157
60ef401a 158struct ath10k_fw_stats_peer {
5326849a
MK
159 struct list_head list;
160
5e3dd157
KV
161 u8 peer_macaddr[ETH_ALEN];
162 u32 peer_rssi;
163 u32 peer_tx_rate;
23c3aae4 164 u32 peer_rx_rate; /* 10x only */
de46c015 165 u32 rx_duration;
5e3dd157
KV
166};
167
4a49ae94
MSS
168struct ath10k_fw_extd_stats_peer {
169 struct list_head list;
170
171 u8 peer_macaddr[ETH_ALEN];
172 u32 rx_duration;
173};
174
7b6b153a
MK
175struct ath10k_fw_stats_vdev {
176 struct list_head list;
177
178 u32 vdev_id;
179 u32 beacon_snr;
180 u32 data_snr;
181 u32 num_tx_frames[4];
182 u32 num_rx_frames;
183 u32 num_tx_frames_retries[4];
184 u32 num_tx_frames_failures[4];
185 u32 num_rts_fail;
186 u32 num_rts_success;
187 u32 num_rx_err;
188 u32 num_rx_discard;
189 u32 num_tx_not_acked;
190 u32 tx_rate_history[10];
191 u32 beacon_rssi_history[10];
192};
193
5326849a
MK
194struct ath10k_fw_stats_pdev {
195 struct list_head list;
196
5e3dd157
KV
197 /* PDEV stats */
198 s32 ch_noise_floor;
199 u32 tx_frame_count;
200 u32 rx_frame_count;
201 u32 rx_clear_count;
202 u32 cycle_count;
203 u32 phy_err_count;
204 u32 chan_tx_power;
52e346d1
CYY
205 u32 ack_rx_bad;
206 u32 rts_bad;
207 u32 rts_good;
208 u32 fcs_bad;
209 u32 no_beacons;
210 u32 mib_int_count;
5e3dd157
KV
211
212 /* PDEV TX stats */
213 s32 comp_queued;
214 s32 comp_delivered;
215 s32 msdu_enqued;
216 s32 mpdu_enqued;
217 s32 wmm_drop;
218 s32 local_enqued;
219 s32 local_freed;
220 s32 hw_queued;
221 s32 hw_reaped;
222 s32 underrun;
98dd2b92 223 u32 hw_paused;
5e3dd157
KV
224 s32 tx_abort;
225 s32 mpdus_requed;
226 u32 tx_ko;
227 u32 data_rc;
228 u32 self_triggers;
229 u32 sw_retry_failure;
230 u32 illgl_rate_phy_err;
231 u32 pdev_cont_xretry;
232 u32 pdev_tx_timeout;
233 u32 pdev_resets;
234 u32 phy_underrun;
235 u32 txop_ovf;
98dd2b92
MP
236 u32 seq_posted;
237 u32 seq_failed_queueing;
238 u32 seq_completed;
239 u32 seq_restarted;
240 u32 mu_seq_posted;
241 u32 mpdus_sw_flush;
242 u32 mpdus_hw_filter;
243 u32 mpdus_truncated;
244 u32 mpdus_ack_failed;
245 u32 mpdus_expired;
5e3dd157
KV
246
247 /* PDEV RX stats */
248 s32 mid_ppdu_route_change;
249 s32 status_rcvd;
250 s32 r0_frags;
251 s32 r1_frags;
252 s32 r2_frags;
253 s32 r3_frags;
254 s32 htt_msdus;
255 s32 htt_mpdus;
256 s32 loc_msdus;
257 s32 loc_mpdus;
258 s32 oversize_amsdu;
259 s32 phy_errs;
260 s32 phy_err_drop;
261 s32 mpdu_errs;
98dd2b92 262 s32 rx_ovfl_errs;
5326849a 263};
5e3dd157 264
5326849a 265struct ath10k_fw_stats {
4a49ae94 266 bool extended;
5326849a 267 struct list_head pdevs;
7b6b153a 268 struct list_head vdevs;
5326849a 269 struct list_head peers;
4a49ae94 270 struct list_head peers_extd;
5e3dd157
KV
271};
272
29542666
MK
273#define ATH10K_TPC_TABLE_TYPE_FLAG 1
274#define ATH10K_TPC_PREAM_TABLE_END 0xFFFF
275
276struct ath10k_tpc_table {
277 u32 pream_idx[WMI_TPC_RATE_MAX];
278 u8 rate_code[WMI_TPC_RATE_MAX];
279 char tpc_value[WMI_TPC_RATE_MAX][WMI_TPC_TX_N_CHAIN * WMI_TPC_BUF_SIZE];
280};
281
282struct ath10k_tpc_stats {
283 u32 reg_domain;
284 u32 chan_freq;
285 u32 phy_mode;
286 u32 twice_antenna_reduction;
287 u32 twice_max_rd_power;
288 s32 twice_antenna_gain;
289 u32 power_limit;
290 u32 num_tx_chain;
291 u32 ctl;
292 u32 rate_max;
293 u8 flag[WMI_TPC_FLAG];
294 struct ath10k_tpc_table tpc_table[WMI_TPC_FLAG];
295};
296
9702c686
JD
297struct ath10k_dfs_stats {
298 u32 phy_errors;
299 u32 pulses_total;
300 u32 pulses_detected;
301 u32 pulses_discarded;
302 u32 radar_detected;
303};
304
5e3dd157
KV
305#define ATH10K_MAX_NUM_PEER_IDS (1 << 11) /* htt rx_desc limit */
306
307struct ath10k_peer {
308 struct list_head list;
6942726f
MK
309 struct ieee80211_vif *vif;
310 struct ieee80211_sta *sta;
311
5e3dd157
KV
312 int vdev_id;
313 u8 addr[ETH_ALEN];
314 DECLARE_BITMAP(peer_ids, ATH10K_MAX_NUM_PEER_IDS);
ae167131
SM
315
316 /* protected by ar->data_lock */
5e3dd157
KV
317 struct ieee80211_key_conf *keys[WMI_MAX_KEY_INDEX + 1];
318};
319
29946878
MK
320struct ath10k_txq {
321 struct list_head list;
3cc0fef6 322 unsigned long num_fw_queued;
426e10ea 323 unsigned long num_push_allowed;
29946878
MK
324};
325
9797febc
MK
326struct ath10k_sta {
327 struct ath10k_vif *arvif;
328
329 /* the following are protected by ar->data_lock */
330 u32 changed; /* IEEE80211_RC_* */
331 u32 bw;
332 u32 nss;
333 u32 smps;
bb8f0c6a 334 u16 peer_id;
9797febc
MK
335
336 struct work_struct update_wk;
f5045988
RM
337
338#ifdef CONFIG_MAC80211_DEBUGFS
339 /* protected by conf_mutex */
340 bool aggr_mode;
856e7c30 341 u64 rx_duration;
f5045988 342#endif
9797febc
MK
343};
344
14e105cd 345#define ATH10K_VDEV_SETUP_TIMEOUT_HZ (5 * HZ)
5e3dd157 346
af21319f
MK
347enum ath10k_beacon_state {
348 ATH10K_BEACON_SCHEDULED = 0,
349 ATH10K_BEACON_SENDING,
350 ATH10K_BEACON_SENT,
351};
352
5e3dd157 353struct ath10k_vif {
0579119f
MK
354 struct list_head list;
355
5e3dd157 356 u32 vdev_id;
bb8f0c6a 357 u16 peer_id;
5e3dd157
KV
358 enum wmi_vdev_type vdev_type;
359 enum wmi_vdev_subtype vdev_subtype;
360 u32 beacon_interval;
361 u32 dtim_period;
ed54388a 362 struct sk_buff *beacon;
748afc47 363 /* protected by data_lock */
af21319f 364 enum ath10k_beacon_state beacon_state;
64badcb6
MK
365 void *beacon_buf;
366 dma_addr_t beacon_paddr;
96d828d4 367 unsigned long tx_paused; /* arbitrary values defined by target */
5e3dd157
KV
368
369 struct ath10k *ar;
370 struct ieee80211_vif *vif;
371
c930f744
MK
372 bool is_started;
373 bool is_up;
855aed12 374 bool spectral_enabled;
cffb41f3 375 bool ps;
c930f744
MK
376 u32 aid;
377 u8 bssid[ETH_ALEN];
378
5e3dd157 379 struct ieee80211_key_conf *wep_keys[WMI_MAX_KEY_INDEX + 1];
627613f8 380 s8 def_wep_key_idx;
5e3dd157
KV
381
382 u16 tx_seq_no;
383
384 union {
385 struct {
5e3dd157
KV
386 u32 uapsd;
387 } sta;
388 struct {
3cec3be3
RM
389 /* 512 stations */
390 u8 tim_bitmap[64];
5e3dd157
KV
391 u8 tim_len;
392 u32 ssid_len;
393 u8 ssid[IEEE80211_MAX_SSID_LEN];
394 bool hidden_ssid;
395 /* P2P_IE with NoA attribute for P2P_GO case */
396 u32 noa_len;
397 u8 *noa_data;
398 } ap;
5e3dd157 399 } u;
51ab1a0a 400
e81bd104 401 bool use_cts_prot;
ccec9038 402 bool nohwcrypt;
e81bd104 403 int num_legacy_stations;
7d9d5587 404 int txpower;
5e752e42 405 struct wmi_wmm_params_all_arg wmm_params;
81a9a17d 406 struct work_struct ap_csa_work;
cc9904e6 407 struct delayed_work connection_loss_work;
45c9abc0 408 struct cfg80211_bitrate_mask bitrate_mask;
5e3dd157
KV
409};
410
411struct ath10k_vif_iter {
412 u32 vdev_id;
413 struct ath10k_vif *arvif;
414};
415
384914b2
BG
416/* used for crash-dump storage, protected by data-lock */
417struct ath10k_fw_crash_data {
418 bool crashed_since_read;
419
420 uuid_le uuid;
421 struct timespec timestamp;
422 __le32 registers[REG_DUMP_COUNT_QCA988X];
423};
424
5e3dd157
KV
425struct ath10k_debug {
426 struct dentry *debugfs_phy;
427
60ef401a
MK
428 struct ath10k_fw_stats fw_stats;
429 struct completion fw_stats_complete;
5326849a 430 bool fw_stats_done;
5e3dd157 431
a3d135e5
KV
432 unsigned long htt_stats_mask;
433 struct delayed_work htt_stats_dwork;
9702c686
JD
434 struct ath10k_dfs_stats dfs_stats;
435 struct ath_dfs_pool_stats dfs_pool_stats;
f118a3e5 436
29542666
MK
437 /* used for tpc-dump storage, protected by data-lock */
438 struct ath10k_tpc_stats *tpc_stats;
439
440 struct completion tpc_complete;
441
90174455 442 /* protected by conf_mutex */
f118a3e5 443 u32 fw_dbglog_mask;
467210a6 444 u32 fw_dbglog_level;
90174455 445 u32 pktlog_filter;
077a3804 446 u32 reg_addr;
a7bd3e99 447 u32 nf_cal_period;
d385623a 448
384914b2 449 struct ath10k_fw_crash_data *fw_crash_data;
5e3dd157
KV
450};
451
f7843d7f
MK
452enum ath10k_state {
453 ATH10K_STATE_OFF = 0,
454 ATH10K_STATE_ON,
affd3217
MK
455
456 /* When doing firmware recovery the device is first powered down.
457 * mac80211 is supposed to call in to start() hook later on. It is
458 * however possible that driver unloading and firmware crash overlap.
459 * mac80211 can wait on conf_mutex in stop() while the device is
460 * stopped in ath10k_core_restart() work holding conf_mutex. The state
461 * RESTARTED means that the device is up and mac80211 has started hw
462 * reconfiguration. Once mac80211 is done with the reconfiguration we
cf2c92d8 463 * set the state to STATE_ON in reconfig_complete(). */
affd3217
MK
464 ATH10K_STATE_RESTARTING,
465 ATH10K_STATE_RESTARTED,
466
467 /* The device has crashed while restarting hw. This state is like ON
468 * but commands are blocked in HTC and -ECOMM response is given. This
469 * prevents completion timeouts and makes the driver more responsive to
470 * userspace commands. This is also prevents recursive recovery. */
471 ATH10K_STATE_WEDGED,
43d2a30f
KV
472
473 /* factory tests */
474 ATH10K_STATE_UTF,
475};
476
477enum ath10k_firmware_mode {
478 /* the default mode, standard 802.11 functionality */
479 ATH10K_FIRMWARE_MODE_NORMAL,
480
481 /* factory tests etc */
482 ATH10K_FIRMWARE_MODE_UTF,
f7843d7f
MK
483};
484
0d9b0438
MK
485enum ath10k_fw_features {
486 /* wmi_mgmt_rx_hdr contains extra RSSI information */
487 ATH10K_FW_FEATURE_EXT_WMI_MGMT_RX = 0,
488
202e86e6 489 /* Firmware from 10X branch. Deprecated, don't use in new code. */
ce42870e
BM
490 ATH10K_FW_FEATURE_WMI_10X = 1,
491
5e00d31a
BM
492 /* firmware support tx frame management over WMI, otherwise it's HTT */
493 ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX = 2,
494
d354181f
BM
495 /* Firmware does not support P2P */
496 ATH10K_FW_FEATURE_NO_P2P = 3,
497
202e86e6
KV
498 /* Firmware 10.2 feature bit. The ATH10K_FW_FEATURE_WMI_10X feature
499 * bit is required to be set as well. Deprecated, don't use in new
500 * code.
24c88f78
MK
501 */
502 ATH10K_FW_FEATURE_WMI_10_2 = 4,
503
cffb41f3
MK
504 /* Some firmware revisions lack proper multi-interface client powersave
505 * implementation. Enabling PS could result in connection drops,
506 * traffic stalls, etc.
507 */
508 ATH10K_FW_FEATURE_MULTI_VIF_PS_SUPPORT = 5,
509
5fd3ac3c
JD
510 /* Some firmware revisions have an incomplete WoWLAN implementation
511 * despite WMI service bit being advertised. This feature flag is used
512 * to distinguish whether WoWLAN is really supported or not.
513 */
514 ATH10K_FW_FEATURE_WOWLAN_SUPPORT = 6,
515
d9153546 516 /* Don't trust error code from otp.bin */
ccec9038 517 ATH10K_FW_FEATURE_IGNORE_OTP_RESULT = 7,
d9153546 518
48f4ca34
MK
519 /* Some firmware revisions pad 4th hw address to 4 byte boundary making
520 * it 8 bytes long in Native Wifi Rx decap.
521 */
ccec9038 522 ATH10K_FW_FEATURE_NO_NWIFI_DECAP_4ADDR_PADDING = 8,
48f4ca34 523
163f5264
RM
524 /* Firmware supports bypassing PLL setting on init. */
525 ATH10K_FW_FEATURE_SUPPORTS_SKIP_CLOCK_INIT = 9,
526
ccec9038
DL
527 /* Raw mode support. If supported, FW supports receiving and trasmitting
528 * frames in raw mode.
529 */
530 ATH10K_FW_FEATURE_RAW_MODE_SUPPORT = 10,
531
62f77f09
M
532 /* Firmware Supports Adaptive CCA*/
533 ATH10K_FW_FEATURE_SUPPORTS_ADAPTIVE_CCA = 11,
534
90eceb3b
T
535 /* Firmware supports management frame protection */
536 ATH10K_FW_FEATURE_MFP_SUPPORT = 12,
537
9b783763
MK
538 /* Firmware supports pull-push model where host shares it's software
539 * queue state with firmware and firmware generates fetch requests
540 * telling host which queues to dequeue tx from.
541 *
542 * Primary function of this is improved MU-MIMO performance with
543 * multiple clients.
544 */
545 ATH10K_FW_FEATURE_PEER_FLOW_CONTROL = 13,
546
64e001f4
RM
547 /* Firmware supports BT-Coex without reloading firmware via pdev param.
548 * To support Bluetooth coexistence pdev param, WMI_COEX_GPIO_SUPPORT of
549 * extended resource config should be enabled always. This firmware IE
550 * is used to configure WMI_COEX_GPIO_SUPPORT.
551 */
552 ATH10K_FW_FEATURE_BTCOEX_PARAM = 14,
553
0d9b0438
MK
554 /* keep last */
555 ATH10K_FW_FEATURE_COUNT,
556};
557
e8a50f8b
MP
558enum ath10k_dev_flags {
559 /* Indicates that ath10k device is during CAC phase of DFS */
560 ATH10K_CAC_RUNNING,
6782cb69 561 ATH10K_FLAG_CORE_REGISTERED,
7962b0d8
MK
562
563 /* Device has crashed and needs to restart. This indicates any pending
564 * waiters should immediately cancel instead of waiting for a time out.
565 */
566 ATH10K_FLAG_CRASH_FLUSH,
ccec9038
DL
567
568 /* Use Raw mode instead of native WiFi Tx/Rx encap mode.
569 * Raw mode supports both hardware and software crypto. Native WiFi only
570 * supports hardware crypto.
571 */
572 ATH10K_FLAG_RAW_MODE,
573
574 /* Disable HW crypto engine */
575 ATH10K_FLAG_HW_CRYPTO_DISABLED,
844fa572
YL
576
577 /* Bluetooth coexistance enabled */
578 ATH10K_FLAG_BTCOEX,
cc61a1bb
MSS
579
580 /* Per Station statistics service */
581 ATH10K_FLAG_PEER_STATS,
e8a50f8b
MP
582};
583
a58227ef
KV
584enum ath10k_cal_mode {
585 ATH10K_CAL_MODE_FILE,
586 ATH10K_CAL_MODE_OTP,
5aabff05 587 ATH10K_CAL_MODE_DT,
3d9195ea
RM
588 ATH10K_PRE_CAL_MODE_FILE,
589 ATH10K_PRE_CAL_MODE_DT,
6847f967 590 ATH10K_CAL_MODE_EEPROM,
a58227ef
KV
591};
592
ccec9038
DL
593enum ath10k_crypt_mode {
594 /* Only use hardware crypto engine */
595 ATH10K_CRYPT_MODE_HW,
596 /* Only use software crypto engine */
597 ATH10K_CRYPT_MODE_SW,
598};
599
a58227ef
KV
600static inline const char *ath10k_cal_mode_str(enum ath10k_cal_mode mode)
601{
602 switch (mode) {
603 case ATH10K_CAL_MODE_FILE:
604 return "file";
605 case ATH10K_CAL_MODE_OTP:
606 return "otp";
5aabff05
TK
607 case ATH10K_CAL_MODE_DT:
608 return "dt";
3d9195ea
RM
609 case ATH10K_PRE_CAL_MODE_FILE:
610 return "pre-cal-file";
611 case ATH10K_PRE_CAL_MODE_DT:
612 return "pre-cal-dt";
6847f967
SE
613 case ATH10K_CAL_MODE_EEPROM:
614 return "eeprom";
a58227ef
KV
615 }
616
617 return "unknown";
618}
619
5c81c7fd
MK
620enum ath10k_scan_state {
621 ATH10K_SCAN_IDLE,
622 ATH10K_SCAN_STARTING,
623 ATH10K_SCAN_RUNNING,
624 ATH10K_SCAN_ABORTING,
625};
626
627static inline const char *ath10k_scan_state_str(enum ath10k_scan_state state)
628{
629 switch (state) {
630 case ATH10K_SCAN_IDLE:
631 return "idle";
632 case ATH10K_SCAN_STARTING:
633 return "starting";
634 case ATH10K_SCAN_RUNNING:
635 return "running";
636 case ATH10K_SCAN_ABORTING:
637 return "aborting";
638 }
639
640 return "unknown";
641}
642
96d828d4
MK
643enum ath10k_tx_pause_reason {
644 ATH10K_TX_PAUSE_Q_FULL,
645 ATH10K_TX_PAUSE_MAX,
646};
647
7ebf721d
KV
648struct ath10k_fw_file {
649 const struct firmware *firmware;
650
45317355
KV
651 char fw_version[ETHTOOL_FWVERS_LEN];
652
c4cdf753
KV
653 DECLARE_BITMAP(fw_features, ATH10K_FW_FEATURE_COUNT);
654
bf3c13ab 655 enum ath10k_fw_wmi_op_version wmi_op_version;
77561f93 656 enum ath10k_fw_htt_op_version htt_op_version;
bf3c13ab 657
7ebf721d
KV
658 const void *firmware_data;
659 size_t firmware_len;
660
661 const void *otp_data;
662 size_t otp_len;
663
664 const void *codeswap_data;
665 size_t codeswap_len;
666};
667
668struct ath10k_fw_components {
669 const struct firmware *board;
670 const void *board_data;
671 size_t board_len;
672
673 struct ath10k_fw_file fw_file;
674};
675
5e3dd157
KV
676struct ath10k {
677 struct ath_common ath_common;
678 struct ieee80211_hw *hw;
4ca18078 679 struct ieee80211_ops *ops;
5e3dd157
KV
680 struct device *dev;
681 u8 mac_addr[ETH_ALEN];
682
d63955b3 683 enum ath10k_hw_rev hw_rev;
36582e5d 684 u16 dev_id;
e01ae68c 685 u32 chip_id;
5e3dd157
KV
686 u32 target_version;
687 u8 fw_version_major;
688 u32 fw_version_minor;
689 u16 fw_version_release;
690 u16 fw_version_build;
6274cd41 691 u32 fw_stats_req_mask;
5e3dd157
KV
692 u32 phy_capability;
693 u32 hw_min_tx_power;
694 u32 hw_max_tx_power;
695 u32 ht_cap_info;
696 u32 vht_cap_info;
8865bee4 697 u32 num_rf_chains;
5c8726ec 698 u32 max_spatial_stream;
b3e71d7a
ARN
699 /* protected by conf_mutex */
700 bool ani_enabled;
5e3dd157 701
5e3dd157
KV
702 bool p2p;
703
704 struct {
e07db352 705 enum ath10k_bus bus;
5e3dd157
KV
706 const struct ath10k_hif_ops *ops;
707 } hif;
708
9042e17d 709 struct completion target_suspend;
5e3dd157 710
d63955b3 711 const struct ath10k_hw_regs *regs;
2f2cfc4a 712 const struct ath10k_hw_values *hw_values;
5e3dd157 713 struct ath10k_bmi bmi;
edb8236d 714 struct ath10k_wmi wmi;
cd003fad 715 struct ath10k_htc htc;
edb8236d 716 struct ath10k_htt htt;
5e3dd157
KV
717
718 struct ath10k_hw_params {
719 u32 id;
079a0490 720 u16 dev_id;
5e3dd157
KV
721 const char *name;
722 u32 patch_load_addr;
3a8200b2 723 int uart_pin;
d772703e 724 u32 otp_exe_param;
5e3dd157 725
26c19760
VT
726 /* Type of hw cycle counter wraparound logic, for more info
727 * refer enum ath10k_hw_cc_wraparound_type.
587f7031 728 */
26c19760 729 enum ath10k_hw_cc_wraparound_type cc_wraparound_type;
587f7031 730
d9156b5f
RM
731 /* Some of chip expects fragment descriptor to be continuous
732 * memory for any TX operation. Set continuous_frag_desc flag
733 * for the hardware which have such requirement.
734 */
735 bool continuous_frag_desc;
736
5269c659
MSS
737 /* CCK hardware rate table mapping for the newer chipsets
738 * like QCA99X0, QCA4019 got revised. The CCK h/w rate values
739 * are in a proper order with respect to the rate/preamble
740 */
741 bool cck_rate_map_rev2;
742
9c8fb548
VT
743 u32 channel_counters_freq_hz;
744
7b7da0a0
VN
745 /* Mgmt tx descriptors threshold for limiting probe response
746 * frames.
747 */
748 u32 max_probe_resp_desc_thres;
749
b8d55fca
YL
750 /* The padding bytes's location is different on various chips */
751 enum ath10k_hw_4addr_pad hw_4addr_pad;
752
5699a6f2
RM
753 u32 tx_chain_mask;
754 u32 rx_chain_mask;
755 u32 max_spatial_stream;
0b8e3c4c 756 u32 cal_data_len;
5699a6f2 757
5e3dd157
KV
758 struct ath10k_hw_params_fw {
759 const char *dir;
5e3dd157 760 const char *board;
9764a2af
MK
761 size_t board_size;
762 size_t board_ext_size;
5e3dd157
KV
763 } fw;
764 } hw_params;
765
7ebf721d
KV
766 /* contains the firmware images used with ATH10K_FIRMWARE_MODE_NORMAL */
767 struct ath10k_fw_components normal_mode_fw;
958df3a0 768
7ebf721d
KV
769 /* READ-ONLY images of the running firmware, which can be either
770 * normal or UTF. Do not modify, release etc!
771 */
772 const struct ath10k_fw_components *running_fw;
29385057 773
b131129d
RM
774 const struct firmware *pre_cal_file;
775 const struct firmware *cal_file;
a58227ef 776
dcb02db1 777 struct {
dcb02db1
VT
778 struct ath10k_swap_code_seg_info *firmware_swap_code_seg_info;
779 } swap;
780
0a51b343
MP
781 struct {
782 u32 vendor;
783 u32 device;
784 u32 subsystem_vendor;
785 u32 subsystem_device;
db0984e5
MP
786
787 bool bmi_ids_valid;
788 u8 bmi_board_id;
789 u8 bmi_chip_id;
0a51b343 790 } id;
de57e2c8 791
1a222435 792 int fw_api;
0a51b343 793 int bd_api;
a58227ef 794 enum ath10k_cal_mode cal_mode;
1a222435 795
5e3dd157
KV
796 struct {
797 struct completion started;
798 struct completion completed;
799 struct completion on_channel;
5c81c7fd
MK
800 struct delayed_work timeout;
801 enum ath10k_scan_state state;
5e3dd157 802 bool is_roc;
5e3dd157
KV
803 int vdev_id;
804 int roc_freq;
d710e75d 805 bool roc_notify;
5e3dd157
KV
806 } scan;
807
808 struct {
57fbcce3 809 struct ieee80211_supported_band sbands[NUM_NL80211_BANDS];
5e3dd157
KV
810 } mac;
811
812 /* should never be NULL; needed for regular htt rx */
813 struct ieee80211_channel *rx_channel;
814
815 /* valid during scan; needed for mgmt rx during scan */
816 struct ieee80211_channel *scan_channel;
817
c930f744
MK
818 /* current operating channel definition */
819 struct cfg80211_chan_def chandef;
820
2ce9b25c
RM
821 /* currently configured operating channel in firmware */
822 struct ieee80211_channel *tgt_oper_chan;
823
16c11176 824 unsigned long long free_vdev_map;
500ff9f9 825 struct ath10k_vif *monitor_arvif;
1bbc0975 826 bool monitor;
5e3dd157 827 int monitor_vdev_id;
1bbc0975 828 bool monitor_started;
5e3dd157 829 unsigned int filter_flags;
e8a50f8b 830 unsigned long dev_flags;
621a5f7a 831 bool dfs_block_radar_events;
5e3dd157 832
d650097b
MK
833 /* protected by conf_mutex */
834 bool radar_enabled;
835 int num_started_vdevs;
836
46acf7bb 837 /* Protected by conf-mutex */
46acf7bb
BG
838 u8 cfg_tx_chainmask;
839 u8 cfg_rx_chainmask;
840
5e3dd157
KV
841 struct completion install_key_done;
842
843 struct completion vdev_setup_done;
844
845 struct workqueue_struct *workqueue;
c8ecfc1c
RM
846 /* Auxiliary workqueue */
847 struct workqueue_struct *workqueue_aux;
5e3dd157
KV
848
849 /* prevents concurrent FW reconfiguration */
850 struct mutex conf_mutex;
851
852 /* protects shared structure data */
853 spinlock_t data_lock;
29946878
MK
854 /* protects: ar->txqs, artxq->list */
855 spinlock_t txqs_lock;
5e3dd157 856
29946878 857 struct list_head txqs;
0579119f 858 struct list_head arvifs;
5e3dd157 859 struct list_head peers;
6942726f 860 struct ath10k_peer *peer_map[ATH10K_MAX_NUM_PEER_IDS];
5e3dd157
KV
861 wait_queue_head_t peer_mapping_wq;
862
292a753d 863 /* protected by conf_mutex */
0e759f36 864 int num_peers;
cfd1061e
MK
865 int num_stations;
866
867 int max_num_peers;
868 int max_num_stations;
30c78167 869 int max_num_vdevs;
8cca3d60 870 int max_num_tdls_vdevs;
d1e52a8e
RM
871 int num_active_peers;
872 int num_tids;
0e759f36 873
c8ecfc1c
RM
874 struct work_struct svc_rdy_work;
875 struct sk_buff *svc_rdy_skb;
876
5e3dd157
KV
877 struct work_struct offchan_tx_work;
878 struct sk_buff_head offchan_tx_queue;
879 struct completion offchan_tx_completed;
880 struct sk_buff *offchan_tx_skb;
881
5e00d31a
BM
882 struct work_struct wmi_mgmt_tx_work;
883 struct sk_buff_head wmi_mgmt_tx_queue;
884
f7843d7f
MK
885 enum ath10k_state state;
886
6782cb69 887 struct work_struct register_work;
affd3217
MK
888 struct work_struct restart_work;
889
2e1dea40
MK
890 /* cycle count is reported twice for each visited channel during scan.
891 * access protected by data_lock */
892 u32 survey_last_rx_clear_count;
893 u32 survey_last_cycle_count;
894 struct survey_info survey[ATH10K_NUM_CHANS];
895
44b7d483
MK
896 /* Channel info events are expected to come in pairs without and with
897 * COMPLETE flag set respectively for each channel visit during scan.
898 *
899 * However there are deviations from this rule. This flag is used to
900 * avoid reporting garbage data.
901 */
902 bool ch_info_can_report_survey;
fa7937e3 903 struct completion bss_survey_done;
44b7d483 904
9702c686
JD
905 struct dfs_pattern_detector *dfs_detector;
906
96d828d4
MK
907 unsigned long tx_paused; /* see ATH10K_TX_PAUSE_ */
908
5e3dd157
KV
909#ifdef CONFIG_ATH10K_DEBUGFS
910 struct ath10k_debug debug;
855aed12
SW
911 struct {
912 /* relay(fs) channel for spectral scan */
913 struct rchan *rfs_chan_spec_scan;
914
915 /* spectral_mode and spec_config are protected by conf_mutex */
916 enum ath10k_spectral_mode mode;
917 struct ath10k_spec_scan config;
918 } spectral;
de46d165 919#endif
e7b54194 920
43d2a30f
KV
921 struct {
922 /* protected by conf_mutex */
7ebf721d 923 struct ath10k_fw_components utf_mode_fw;
7ebf721d 924
43d2a30f
KV
925 /* protected by data_lock */
926 bool utf_monitor;
927 } testmode;
928
f51dbe73
BG
929 struct {
930 /* protected by data_lock */
931 u32 fw_crash_counter;
932 u32 fw_warm_reset_counter;
933 u32 fw_cold_reset_counter;
934 } stats;
935
fe6f36d6 936 struct ath10k_thermal thermal;
5fd3ac3c 937 struct ath10k_wow wow;
fe6f36d6 938
e7b54194
MK
939 /* must be last */
940 u8 drv_priv[0] __aligned(sizeof(void *));
5e3dd157
KV
941};
942
cc61a1bb
MSS
943static inline bool ath10k_peer_stats_enabled(struct ath10k *ar)
944{
945 if (test_bit(ATH10K_FLAG_PEER_STATS, &ar->dev_flags) &&
946 test_bit(WMI_SERVICE_PEER_STATS, ar->wmi.svc_map))
947 return true;
948
949 return false;
950}
951
e7b54194 952struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev,
e07db352 953 enum ath10k_bus bus,
d63955b3 954 enum ath10k_hw_rev hw_rev,
5e3dd157
KV
955 const struct ath10k_hif_ops *hif_ops);
956void ath10k_core_destroy(struct ath10k *ar);
b27bc5a4
MK
957void ath10k_core_get_fw_features_str(struct ath10k *ar,
958 char *buf,
959 size_t max_len);
9dfe240b
KV
960int ath10k_core_fetch_firmware_api_n(struct ath10k *ar, const char *name,
961 struct ath10k_fw_file *fw_file);
5e3dd157 962
7ebf721d
KV
963int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
964 const struct ath10k_fw_components *fw_components);
00f5482b 965int ath10k_wait_for_suspend(struct ath10k *ar, u32 suspend_opt);
dd30a36e 966void ath10k_core_stop(struct ath10k *ar);
e01ae68c 967int ath10k_core_register(struct ath10k *ar, u32 chip_id);
5e3dd157
KV
968void ath10k_core_unregister(struct ath10k *ar);
969
5e3dd157 970#endif /* _CORE_H_ */
This page took 0.275434 seconds and 5 git commands to generate.