1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63#ifndef __iwl_core_h__
64#define __iwl_core_h__
65
66
67
68
69struct iwl_host_cmd;
70struct iwl_cmd;
71
72
73#define IWLWIFI_VERSION "in-tree:"
74#define DRV_COPYRIGHT "Copyright(c) 2003-2010 Intel Corporation"
75#define DRV_AUTHOR "<ilw@linux.intel.com>"
76
77#define IWL_PCI_DEVICE(dev, subdev, cfg) \
78 .vendor = PCI_VENDOR_ID_INTEL, .device = (dev), \
79 .subvendor = PCI_ANY_ID, .subdevice = (subdev), \
80 .driver_data = (kernel_ulong_t)&(cfg)
81
82#define IWL_SKU_G 0x1
83#define IWL_SKU_A 0x2
84#define IWL_SKU_N 0x8
85
86#define IWL_CMD(x) case x: return #x
87
88struct iwl_hcmd_ops {
89 int (*rxon_assoc)(struct iwl_priv *priv);
90 int (*commit_rxon)(struct iwl_priv *priv);
91 void (*set_rxon_chain)(struct iwl_priv *priv);
92 int (*set_tx_ant)(struct iwl_priv *priv, u8 valid_tx_ant);
93};
94
95struct iwl_hcmd_utils_ops {
96 u16 (*get_hcmd_size)(u8 cmd_id, u16 len);
97 u16 (*build_addsta_hcmd)(const struct iwl_addsta_cmd *cmd, u8 *data);
98 void (*gain_computation)(struct iwl_priv *priv,
99 u32 *average_noise,
100 u16 min_average_noise_antennat_i,
101 u32 min_average_noise,
102 u8 default_chain);
103 void (*chain_noise_reset)(struct iwl_priv *priv);
104 void (*rts_tx_cmd_flag)(struct ieee80211_tx_info *info,
105 __le32 *tx_flags);
106 int (*calc_rssi)(struct iwl_priv *priv,
107 struct iwl_rx_phy_res *rx_resp);
108};
109
110struct iwl_apm_ops {
111 int (*init)(struct iwl_priv *priv);
112 void (*stop)(struct iwl_priv *priv);
113 void (*config)(struct iwl_priv *priv);
114 int (*set_pwr_src)(struct iwl_priv *priv, enum iwl_pwr_src src);
115};
116
117struct iwl_temp_ops {
118 void (*temperature)(struct iwl_priv *priv);
119 void (*set_ct_kill)(struct iwl_priv *priv);
120 void (*set_calib_version)(struct iwl_priv *priv);
121};
122
123struct iwl_ucode_ops {
124 u32 (*get_header_size)(u32);
125 u32 (*get_build)(const struct iwl_ucode_header *, u32);
126 u32 (*get_inst_size)(const struct iwl_ucode_header *, u32);
127 u32 (*get_data_size)(const struct iwl_ucode_header *, u32);
128 u32 (*get_init_size)(const struct iwl_ucode_header *, u32);
129 u32 (*get_init_data_size)(const struct iwl_ucode_header *, u32);
130 u32 (*get_boot_size)(const struct iwl_ucode_header *, u32);
131 u8 * (*get_data)(const struct iwl_ucode_header *, u32);
132};
133
134struct iwl_lib_ops {
135
136 int (*set_hw_params)(struct iwl_priv *priv);
137
138 void (*txq_update_byte_cnt_tbl)(struct iwl_priv *priv,
139 struct iwl_tx_queue *txq,
140 u16 byte_cnt);
141 void (*txq_inval_byte_cnt_tbl)(struct iwl_priv *priv,
142 struct iwl_tx_queue *txq);
143 void (*txq_set_sched)(struct iwl_priv *priv, u32 mask);
144 int (*txq_attach_buf_to_tfd)(struct iwl_priv *priv,
145 struct iwl_tx_queue *txq,
146 dma_addr_t addr,
147 u16 len, u8 reset, u8 pad);
148 void (*txq_free_tfd)(struct iwl_priv *priv,
149 struct iwl_tx_queue *txq);
150 int (*txq_init)(struct iwl_priv *priv,
151 struct iwl_tx_queue *txq);
152
153 int (*txq_agg_enable)(struct iwl_priv *priv, int txq_id, int tx_fifo,
154 int sta_id, int tid, u16 ssn_idx);
155 int (*txq_agg_disable)(struct iwl_priv *priv, u16 txq_id, u16 ssn_idx,
156 u8 tx_fifo);
157
158 void (*rx_handler_setup)(struct iwl_priv *priv);
159
160 void (*setup_deferred_work)(struct iwl_priv *priv);
161
162 void (*cancel_deferred_work)(struct iwl_priv *priv);
163
164 void (*init_alive_start)(struct iwl_priv *priv);
165
166 int (*alive_notify)(struct iwl_priv *priv);
167
168 int (*is_valid_rtc_data_addr)(u32 addr);
169
170 int (*load_ucode)(struct iwl_priv *priv);
171 int (*dump_nic_event_log)(struct iwl_priv *priv,
172 bool full_log, char **buf, bool display);
173 void (*dump_nic_error_log)(struct iwl_priv *priv);
174 void (*dump_csr)(struct iwl_priv *priv);
175 int (*dump_fh)(struct iwl_priv *priv, char **buf, bool display);
176 int (*set_channel_switch)(struct iwl_priv *priv, u16 channel);
177
178 struct iwl_apm_ops apm_ops;
179
180
181 int (*send_tx_power) (struct iwl_priv *priv);
182 void (*update_chain_flags)(struct iwl_priv *priv);
183 void (*post_associate) (struct iwl_priv *priv);
184 void (*config_ap) (struct iwl_priv *priv);
185 irqreturn_t (*isr) (int irq, void *data);
186
187
188 struct iwl_eeprom_ops eeprom_ops;
189
190
191 struct iwl_temp_ops temp_ops;
192
193 void (*add_bcast_station)(struct iwl_priv *priv);
194};
195
196struct iwl_led_ops {
197 int (*cmd)(struct iwl_priv *priv, struct iwl_led_cmd *led_cmd);
198 int (*on)(struct iwl_priv *priv);
199 int (*off)(struct iwl_priv *priv);
200};
201
202struct iwl_ops {
203 const struct iwl_ucode_ops *ucode;
204 const struct iwl_lib_ops *lib;
205 const struct iwl_hcmd_ops *hcmd;
206 const struct iwl_hcmd_utils_ops *utils;
207 const struct iwl_led_ops *led;
208};
209
210struct iwl_mod_params {
211 int sw_crypto;
212 int disable_hw_scan;
213 int num_of_queues;
214 int disable_11n;
215 int amsdu_size_8K;
216 int antenna;
217 int restart_fw;
218};
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262struct iwl_cfg {
263 const char *name;
264 const char *fw_name_pre;
265 const unsigned int ucode_api_max;
266 const unsigned int ucode_api_min;
267 unsigned int sku;
268 int eeprom_size;
269 u16 eeprom_ver;
270 u16 eeprom_calib_ver;
271 int num_of_queues;
272 int num_of_ampdu_queues;
273 const struct iwl_ops *ops;
274 const struct iwl_mod_params *mod_params;
275 u8 valid_tx_ant;
276 u8 valid_rx_ant;
277
278
279 u32 pll_cfg_val;
280 bool set_l0s;
281 bool use_bsm;
282
283 bool use_isr_legacy;
284 enum iwl_pa_type pa_type;
285 const u16 max_ll_items;
286 const bool shadow_ram_support;
287 const bool ht_greenfield_support;
288 u16 led_compensation;
289 const bool broken_powersave;
290 bool use_rts_for_ht;
291 int chain_noise_num_beacons;
292 const bool supports_idle;
293 bool adv_thermal_throttle;
294 bool support_ct_kill_exit;
295 const bool support_wimax_coexist;
296 u8 plcp_delta_threshold;
297 s32 chain_noise_scale;
298};
299
300
301
302
303
304struct ieee80211_hw *iwl_alloc_all(struct iwl_cfg *cfg,
305 struct ieee80211_ops *hw_ops);
306void iwl_hw_detect(struct iwl_priv *priv);
307void iwl_reset_qos(struct iwl_priv *priv);
308void iwl_activate_qos(struct iwl_priv *priv, u8 force);
309int iwl_mac_conf_tx(struct ieee80211_hw *hw, u16 queue,
310 const struct ieee80211_tx_queue_params *params);
311void iwl_set_rxon_hwcrypto(struct iwl_priv *priv, int hw_decrypt);
312int iwl_check_rxon_cmd(struct iwl_priv *priv);
313int iwl_full_rxon_required(struct iwl_priv *priv);
314void iwl_set_rxon_chain(struct iwl_priv *priv);
315int iwl_set_rxon_channel(struct iwl_priv *priv, struct ieee80211_channel *ch);
316void iwl_set_rxon_ht(struct iwl_priv *priv, struct iwl_ht_config *ht_conf);
317u8 iwl_is_ht40_tx_allowed(struct iwl_priv *priv,
318 struct ieee80211_sta_ht_cap *sta_ht_inf);
319void iwl_set_flags_for_band(struct iwl_priv *priv, enum ieee80211_band band);
320void iwl_connection_init_rx_config(struct iwl_priv *priv, int mode);
321int iwl_set_decrypted_flag(struct iwl_priv *priv,
322 struct ieee80211_hdr *hdr,
323 u32 decrypt_res,
324 struct ieee80211_rx_status *stats);
325void iwl_irq_handle_error(struct iwl_priv *priv);
326void iwl_configure_filter(struct ieee80211_hw *hw,
327 unsigned int changed_flags,
328 unsigned int *total_flags, u64 multicast);
329int iwl_hw_nic_init(struct iwl_priv *priv);
330int iwl_set_hw_params(struct iwl_priv *priv);
331bool iwl_is_monitor_mode(struct iwl_priv *priv);
332void iwl_post_associate(struct iwl_priv *priv);
333void iwl_bss_info_changed(struct ieee80211_hw *hw,
334 struct ieee80211_vif *vif,
335 struct ieee80211_bss_conf *bss_conf,
336 u32 changes);
337int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb);
338int iwl_commit_rxon(struct iwl_priv *priv);
339int iwl_set_mode(struct iwl_priv *priv, int mode);
340int iwl_mac_add_interface(struct ieee80211_hw *hw,
341 struct ieee80211_vif *vif);
342void iwl_mac_remove_interface(struct ieee80211_hw *hw,
343 struct ieee80211_vif *vif);
344int iwl_mac_config(struct ieee80211_hw *hw, u32 changed);
345void iwl_config_ap(struct iwl_priv *priv);
346void iwl_mac_reset_tsf(struct ieee80211_hw *hw);
347int iwl_alloc_txq_mem(struct iwl_priv *priv);
348void iwl_free_txq_mem(struct iwl_priv *priv);
349void iwlcore_rts_tx_cmd_flag(struct ieee80211_tx_info *info,
350 __le32 *tx_flags);
351int iwl_send_wimax_coex(struct iwl_priv *priv);
352#ifdef CONFIG_IWLWIFI_DEBUGFS
353int iwl_alloc_traffic_mem(struct iwl_priv *priv);
354void iwl_free_traffic_mem(struct iwl_priv *priv);
355void iwl_reset_traffic_log(struct iwl_priv *priv);
356void iwl_dbg_log_tx_data_frame(struct iwl_priv *priv,
357 u16 length, struct ieee80211_hdr *header);
358void iwl_dbg_log_rx_data_frame(struct iwl_priv *priv,
359 u16 length, struct ieee80211_hdr *header);
360const char *get_mgmt_string(int cmd);
361const char *get_ctrl_string(int cmd);
362void iwl_clear_traffic_stats(struct iwl_priv *priv);
363void iwl_update_stats(struct iwl_priv *priv, bool is_tx, __le16 fc,
364 u16 len);
365#else
366static inline int iwl_alloc_traffic_mem(struct iwl_priv *priv)
367{
368 return 0;
369}
370static inline void iwl_free_traffic_mem(struct iwl_priv *priv)
371{
372}
373static inline void iwl_reset_traffic_log(struct iwl_priv *priv)
374{
375}
376static inline void iwl_dbg_log_tx_data_frame(struct iwl_priv *priv,
377 u16 length, struct ieee80211_hdr *header)
378{
379}
380static inline void iwl_dbg_log_rx_data_frame(struct iwl_priv *priv,
381 u16 length, struct ieee80211_hdr *header)
382{
383}
384static inline void iwl_update_stats(struct iwl_priv *priv, bool is_tx,
385 __le16 fc, u16 len)
386{
387 struct traffic_stats *stats;
388
389 if (is_tx)
390 stats = &priv->tx_stats;
391 else
392 stats = &priv->rx_stats;
393
394 if (ieee80211_is_data(fc)) {
395
396 stats->data_bytes += len;
397 }
398 iwl_leds_background(priv);
399}
400#endif
401
402
403
404void iwl_rx_pm_sleep_notif(struct iwl_priv *priv,
405 struct iwl_rx_mem_buffer *rxb);
406void iwl_rx_pm_debug_statistics_notif(struct iwl_priv *priv,
407 struct iwl_rx_mem_buffer *rxb);
408void iwl_rx_reply_error(struct iwl_priv *priv,
409 struct iwl_rx_mem_buffer *rxb);
410
411
412
413
414void iwl_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq);
415void iwl_cmd_queue_free(struct iwl_priv *priv);
416int iwl_rx_queue_alloc(struct iwl_priv *priv);
417void iwl_rx_handle(struct iwl_priv *priv);
418void iwl_rx_queue_update_write_ptr(struct iwl_priv *priv,
419 struct iwl_rx_queue *q);
420void iwl_rx_queue_reset(struct iwl_priv *priv, struct iwl_rx_queue *rxq);
421void iwl_rx_replenish(struct iwl_priv *priv);
422void iwl_rx_replenish_now(struct iwl_priv *priv);
423int iwl_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq);
424void iwl_rx_queue_restock(struct iwl_priv *priv);
425int iwl_rx_queue_space(const struct iwl_rx_queue *q);
426void iwl_rx_allocate(struct iwl_priv *priv, gfp_t priority);
427void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb);
428int iwl_tx_queue_reclaim(struct iwl_priv *priv, int txq_id, int index);
429
430void iwl_rx_missed_beacon_notif(struct iwl_priv *priv,
431 struct iwl_rx_mem_buffer *rxb);
432void iwl_rx_spectrum_measure_notif(struct iwl_priv *priv,
433 struct iwl_rx_mem_buffer *rxb);
434void iwl_rx_statistics(struct iwl_priv *priv,
435 struct iwl_rx_mem_buffer *rxb);
436void iwl_reply_statistics(struct iwl_priv *priv,
437 struct iwl_rx_mem_buffer *rxb);
438void iwl_rx_csa(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb);
439
440
441
442
443
444
445int iwl_txq_ctx_alloc(struct iwl_priv *priv);
446void iwl_txq_ctx_reset(struct iwl_priv *priv);
447void iwl_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq);
448int iwl_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv,
449 struct iwl_tx_queue *txq,
450 dma_addr_t addr, u16 len, u8 reset, u8 pad);
451int iwl_tx_skb(struct iwl_priv *priv, struct sk_buff *skb);
452void iwl_hw_txq_ctx_free(struct iwl_priv *priv);
453int iwl_hw_tx_queue_init(struct iwl_priv *priv,
454 struct iwl_tx_queue *txq);
455void iwl_free_tfds_in_queue(struct iwl_priv *priv,
456 int sta_id, int tid, int freed);
457void iwl_txq_update_write_ptr(struct iwl_priv *priv, struct iwl_tx_queue *txq);
458int iwl_tx_queue_init(struct iwl_priv *priv, struct iwl_tx_queue *txq,
459 int slots_num, u32 txq_id);
460void iwl_tx_queue_reset(struct iwl_priv *priv, struct iwl_tx_queue *txq,
461 int slots_num, u32 txq_id);
462void iwl_tx_queue_free(struct iwl_priv *priv, int txq_id);
463int iwl_tx_agg_start(struct iwl_priv *priv, const u8 *ra, u16 tid, u16 *ssn);
464int iwl_tx_agg_stop(struct iwl_priv *priv , const u8 *ra, u16 tid);
465int iwl_txq_check_empty(struct iwl_priv *priv, int sta_id, u8 tid, int txq_id);
466
467
468
469int iwl_set_tx_power(struct iwl_priv *priv, s8 tx_power, bool force);
470
471
472
473
474
475void iwl_hwrate_to_tx_control(struct iwl_priv *priv, u32 rate_n_flags,
476 struct ieee80211_tx_info *info);
477int iwl_hwrate_to_plcp_idx(u32 rate_n_flags);
478int iwl_hwrate_to_mac80211_idx(u32 rate_n_flags, enum ieee80211_band band);
479
480u8 iwl_rate_get_lowest_plcp(struct iwl_priv *priv);
481
482u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant_idx);
483
484static inline u32 iwl_ant_idx_to_flags(u8 ant_idx)
485{
486 return BIT(ant_idx) << RATE_MCS_ANT_POS;
487}
488
489static inline u8 iwl_hw_get_rate(__le32 rate_n_flags)
490{
491 return le32_to_cpu(rate_n_flags) & 0xFF;
492}
493static inline u32 iwl_hw_get_rate_n_flags(__le32 rate_n_flags)
494{
495 return le32_to_cpu(rate_n_flags) & 0x1FFFF;
496}
497static inline __le32 iwl_hw_set_rate_n_flags(u8 rate, u32 flags)
498{
499 return cpu_to_le32(flags|(u32)rate);
500}
501
502
503
504
505void iwl_init_scan_params(struct iwl_priv *priv);
506int iwl_scan_cancel(struct iwl_priv *priv);
507int iwl_scan_cancel_timeout(struct iwl_priv *priv, unsigned long ms);
508int iwl_mac_hw_scan(struct ieee80211_hw *hw, struct cfg80211_scan_request *req);
509void iwl_internal_short_hw_scan(struct iwl_priv *priv);
510int iwl_force_reset(struct iwl_priv *priv, int mode);
511u16 iwl_fill_probe_req(struct iwl_priv *priv, struct ieee80211_mgmt *frame,
512 const u8 *ie, int ie_len, int left);
513void iwl_setup_rx_scan_handlers(struct iwl_priv *priv);
514u16 iwl_get_active_dwell_time(struct iwl_priv *priv,
515 enum ieee80211_band band,
516 u8 n_probes);
517u16 iwl_get_passive_dwell_time(struct iwl_priv *priv,
518 enum ieee80211_band band);
519void iwl_bg_scan_check(struct work_struct *data);
520void iwl_bg_abort_scan(struct work_struct *work);
521void iwl_bg_scan_completed(struct work_struct *work);
522void iwl_setup_scan_deferred_work(struct iwl_priv *priv);
523
524
525
526
527
528
529
530#define IWL_ACTIVE_QUIET_TIME cpu_to_le16(10)
531#define IWL_PLCP_QUIET_THRESH cpu_to_le16(1)
532
533
534
535
536
537int iwl_send_calib_results(struct iwl_priv *priv);
538int iwl_calib_set(struct iwl_calib_result *res, const u8 *buf, int len);
539void iwl_calib_free_results(struct iwl_priv *priv);
540
541
542
543
544
545const char *get_cmd_string(u8 cmd);
546int __must_check iwl_send_cmd_sync(struct iwl_priv *priv,
547 struct iwl_host_cmd *cmd);
548int iwl_send_cmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd);
549int __must_check iwl_send_cmd_pdu(struct iwl_priv *priv, u8 id,
550 u16 len, const void *data);
551int iwl_send_cmd_pdu_async(struct iwl_priv *priv, u8 id, u16 len,
552 const void *data,
553 void (*callback)(struct iwl_priv *priv,
554 struct iwl_device_cmd *cmd,
555 struct iwl_rx_packet *pkt));
556
557int iwl_enqueue_hcmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd);
558
559int iwl_send_card_state(struct iwl_priv *priv, u32 flags,
560 u8 meta_flag);
561
562
563
564
565irqreturn_t iwl_isr_legacy(int irq, void *data);
566int iwl_reset_ict(struct iwl_priv *priv);
567void iwl_disable_ict(struct iwl_priv *priv);
568int iwl_alloc_isr_ict(struct iwl_priv *priv);
569void iwl_free_isr_ict(struct iwl_priv *priv);
570irqreturn_t iwl_isr_ict(int irq, void *data);
571
572static inline u16 iwl_pcie_link_ctl(struct iwl_priv *priv)
573{
574 int pos;
575 u16 pci_lnk_ctl;
576 pos = pci_find_capability(priv->pci_dev, PCI_CAP_ID_EXP);
577 pci_read_config_word(priv->pci_dev, pos + PCI_EXP_LNKCTL, &pci_lnk_ctl);
578 return pci_lnk_ctl;
579}
580#ifdef CONFIG_PM
581int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state);
582int iwl_pci_resume(struct pci_dev *pdev);
583#endif
584
585
586
587
588void iwl_dump_nic_error_log(struct iwl_priv *priv);
589int iwl_dump_nic_event_log(struct iwl_priv *priv,
590 bool full_log, char **buf, bool display);
591void iwl_dump_csr(struct iwl_priv *priv);
592int iwl_dump_fh(struct iwl_priv *priv, char **buf, bool display);
593#ifdef CONFIG_IWLWIFI_DEBUG
594void iwl_print_rx_config_cmd(struct iwl_priv *priv);
595#else
596static inline void iwl_print_rx_config_cmd(struct iwl_priv *priv)
597{
598}
599#endif
600
601void iwl_clear_isr_stats(struct iwl_priv *priv);
602
603
604
605
606int iwlcore_init_geos(struct iwl_priv *priv);
607void iwlcore_free_geos(struct iwl_priv *priv);
608
609
610
611#define STATUS_HCMD_ACTIVE 0
612
613#define STATUS_INT_ENABLED 2
614#define STATUS_RF_KILL_HW 3
615#define STATUS_CT_KILL 4
616#define STATUS_INIT 5
617#define STATUS_ALIVE 6
618#define STATUS_READY 7
619#define STATUS_TEMPERATURE 8
620#define STATUS_GEO_CONFIGURED 9
621#define STATUS_EXIT_PENDING 10
622#define STATUS_STATISTICS 12
623#define STATUS_SCANNING 13
624#define STATUS_SCAN_ABORTING 14
625#define STATUS_SCAN_HW 15
626#define STATUS_POWER_PMI 16
627#define STATUS_FW_ERROR 17
628#define STATUS_MODE_PENDING 18
629
630
631static inline int iwl_is_ready(struct iwl_priv *priv)
632{
633
634
635 return test_bit(STATUS_READY, &priv->status) &&
636 test_bit(STATUS_GEO_CONFIGURED, &priv->status) &&
637 !test_bit(STATUS_EXIT_PENDING, &priv->status);
638}
639
640static inline int iwl_is_alive(struct iwl_priv *priv)
641{
642 return test_bit(STATUS_ALIVE, &priv->status);
643}
644
645static inline int iwl_is_init(struct iwl_priv *priv)
646{
647 return test_bit(STATUS_INIT, &priv->status);
648}
649
650static inline int iwl_is_rfkill_hw(struct iwl_priv *priv)
651{
652 return test_bit(STATUS_RF_KILL_HW, &priv->status);
653}
654
655static inline int iwl_is_rfkill(struct iwl_priv *priv)
656{
657 return iwl_is_rfkill_hw(priv);
658}
659
660static inline int iwl_is_ctkill(struct iwl_priv *priv)
661{
662 return test_bit(STATUS_CT_KILL, &priv->status);
663}
664
665static inline int iwl_is_ready_rf(struct iwl_priv *priv)
666{
667
668 if (iwl_is_rfkill(priv))
669 return 0;
670
671 return iwl_is_ready(priv);
672}
673
674extern void iwl_rf_kill_ct_config(struct iwl_priv *priv);
675extern int iwl_send_bt_config(struct iwl_priv *priv);
676extern int iwl_send_statistics_request(struct iwl_priv *priv,
677 u8 flags, bool clear);
678extern int iwl_verify_ucode(struct iwl_priv *priv);
679extern int iwl_send_lq_cmd(struct iwl_priv *priv,
680 struct iwl_link_quality_cmd *lq, u8 flags);
681extern void iwl_rx_reply_rx(struct iwl_priv *priv,
682 struct iwl_rx_mem_buffer *rxb);
683extern void iwl_rx_reply_rx_phy(struct iwl_priv *priv,
684 struct iwl_rx_mem_buffer *rxb);
685void iwl_rx_reply_compressed_ba(struct iwl_priv *priv,
686 struct iwl_rx_mem_buffer *rxb);
687void iwl_apm_stop(struct iwl_priv *priv);
688int iwl_apm_stop_master(struct iwl_priv *priv);
689int iwl_apm_init(struct iwl_priv *priv);
690
691void iwl_setup_rxon_timing(struct iwl_priv *priv);
692static inline int iwl_send_rxon_assoc(struct iwl_priv *priv)
693{
694 return priv->cfg->ops->hcmd->rxon_assoc(priv);
695}
696static inline int iwlcore_commit_rxon(struct iwl_priv *priv)
697{
698 return priv->cfg->ops->hcmd->commit_rxon(priv);
699}
700static inline void iwlcore_config_ap(struct iwl_priv *priv)
701{
702 priv->cfg->ops->lib->config_ap(priv);
703}
704static inline const struct ieee80211_supported_band *iwl_get_hw_mode(
705 struct iwl_priv *priv, enum ieee80211_band band)
706{
707 return priv->hw->wiphy->bands[band];
708}
709#endif
710