aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-agn.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn.h')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.h225
1 files changed, 180 insertions, 45 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h
index cc6464dc72e5..d1716844002e 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.h
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.h
@@ -5,7 +5,7 @@
5 * 5 *
6 * GPL LICENSE SUMMARY 6 * GPL LICENSE SUMMARY
7 * 7 *
8 * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved. 8 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
9 * 9 *
10 * This program is free software; you can redistribute it and/or modify 10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of version 2 of the GNU General Public License as 11 * it under the terms of version 2 of the GNU General Public License as
@@ -30,7 +30,7 @@
30 * 30 *
31 * BSD LICENSE 31 * BSD LICENSE
32 * 32 *
33 * Copyright(c) 2005 - 2010 Intel Corporation. All rights reserved. 33 * Copyright(c) 2005 - 2011 Intel Corporation. All rights reserved.
34 * All rights reserved. 34 * All rights reserved.
35 * 35 *
36 * Redistribution and use in source and binary forms, with or without 36 * Redistribution and use in source and binary forms, with or without
@@ -66,7 +66,6 @@
66#include "iwl-dev.h" 66#include "iwl-dev.h"
67 67
68/* configuration for the _agn devices */ 68/* configuration for the _agn devices */
69extern struct iwl_cfg iwl4965_agn_cfg;
70extern struct iwl_cfg iwl5300_agn_cfg; 69extern struct iwl_cfg iwl5300_agn_cfg;
71extern struct iwl_cfg iwl5100_agn_cfg; 70extern struct iwl_cfg iwl5100_agn_cfg;
72extern struct iwl_cfg iwl5350_agn_cfg; 71extern struct iwl_cfg iwl5350_agn_cfg;
@@ -74,36 +73,66 @@ extern struct iwl_cfg iwl5100_bgn_cfg;
74extern struct iwl_cfg iwl5100_abg_cfg; 73extern struct iwl_cfg iwl5100_abg_cfg;
75extern struct iwl_cfg iwl5150_agn_cfg; 74extern struct iwl_cfg iwl5150_agn_cfg;
76extern struct iwl_cfg iwl5150_abg_cfg; 75extern struct iwl_cfg iwl5150_abg_cfg;
77extern struct iwl_cfg iwl6000g2a_2agn_cfg; 76extern struct iwl_cfg iwl6005_2agn_cfg;
78extern struct iwl_cfg iwl6000g2a_2abg_cfg; 77extern struct iwl_cfg iwl6005_2abg_cfg;
79extern struct iwl_cfg iwl6000g2a_2bg_cfg; 78extern struct iwl_cfg iwl6005_2bg_cfg;
80extern struct iwl_cfg iwl6000g2b_bgn_cfg; 79extern struct iwl_cfg iwl1030_bgn_cfg;
81extern struct iwl_cfg iwl6000g2b_bg_cfg; 80extern struct iwl_cfg iwl1030_bg_cfg;
82extern struct iwl_cfg iwl6000g2b_2agn_cfg; 81extern struct iwl_cfg iwl6030_2agn_cfg;
83extern struct iwl_cfg iwl6000g2b_2abg_cfg; 82extern struct iwl_cfg iwl6030_2abg_cfg;
84extern struct iwl_cfg iwl6000g2b_2bgn_cfg; 83extern struct iwl_cfg iwl6030_2bgn_cfg;
85extern struct iwl_cfg iwl6000g2b_2bg_cfg; 84extern struct iwl_cfg iwl6030_2bg_cfg;
86extern struct iwl_cfg iwl6000i_2agn_cfg; 85extern struct iwl_cfg iwl6000i_2agn_cfg;
87extern struct iwl_cfg iwl6000i_2abg_cfg; 86extern struct iwl_cfg iwl6000i_2abg_cfg;
88extern struct iwl_cfg iwl6000i_2bg_cfg; 87extern struct iwl_cfg iwl6000i_2bg_cfg;
89extern struct iwl_cfg iwl6000_3agn_cfg; 88extern struct iwl_cfg iwl6000_3agn_cfg;
90extern struct iwl_cfg iwl6050_2agn_cfg; 89extern struct iwl_cfg iwl6050_2agn_cfg;
91extern struct iwl_cfg iwl6050_2abg_cfg; 90extern struct iwl_cfg iwl6050_2abg_cfg;
92extern struct iwl_cfg iwl6050g2_bgn_cfg; 91extern struct iwl_cfg iwl6150_bgn_cfg;
92extern struct iwl_cfg iwl6150_bg_cfg;
93extern struct iwl_cfg iwl1000_bgn_cfg; 93extern struct iwl_cfg iwl1000_bgn_cfg;
94extern struct iwl_cfg iwl1000_bg_cfg; 94extern struct iwl_cfg iwl1000_bg_cfg;
95extern struct iwl_cfg iwl100_bgn_cfg;
96extern struct iwl_cfg iwl100_bg_cfg;
97extern struct iwl_cfg iwl130_bgn_cfg;
98extern struct iwl_cfg iwl130_bg_cfg;
99extern struct iwl_cfg iwl2000_2bgn_cfg;
100extern struct iwl_cfg iwl2000_2bg_cfg;
101extern struct iwl_cfg iwl2030_2bgn_cfg;
102extern struct iwl_cfg iwl2030_2bg_cfg;
103extern struct iwl_cfg iwl6035_2agn_cfg;
104extern struct iwl_cfg iwl6035_2abg_cfg;
105extern struct iwl_cfg iwl6035_2bg_cfg;
106extern struct iwl_cfg iwl105_bg_cfg;
107extern struct iwl_cfg iwl105_bgn_cfg;
108extern struct iwl_cfg iwl135_bg_cfg;
109extern struct iwl_cfg iwl135_bgn_cfg;
95 110
96extern struct iwl_mod_params iwlagn_mod_params; 111extern struct iwl_mod_params iwlagn_mod_params;
97extern struct iwl_hcmd_ops iwlagn_hcmd; 112extern struct iwl_hcmd_ops iwlagn_hcmd;
113extern struct iwl_hcmd_ops iwlagn_bt_hcmd;
98extern struct iwl_hcmd_utils_ops iwlagn_hcmd_utils; 114extern struct iwl_hcmd_utils_ops iwlagn_hcmd_utils;
99 115
116extern struct ieee80211_ops iwlagn_hw_ops;
117
100int iwl_reset_ict(struct iwl_priv *priv); 118int iwl_reset_ict(struct iwl_priv *priv);
101void iwl_disable_ict(struct iwl_priv *priv); 119void iwl_disable_ict(struct iwl_priv *priv);
102int iwl_alloc_isr_ict(struct iwl_priv *priv); 120int iwl_alloc_isr_ict(struct iwl_priv *priv);
103void iwl_free_isr_ict(struct iwl_priv *priv); 121void iwl_free_isr_ict(struct iwl_priv *priv);
104irqreturn_t iwl_isr_ict(int irq, void *data); 122irqreturn_t iwl_isr_ict(int irq, void *data);
105bool iwl_good_ack_health(struct iwl_priv *priv, 123
106 struct iwl_rx_packet *pkt); 124/* call this function to flush any scheduled tasklet */
125static inline void iwl_synchronize_irq(struct iwl_priv *priv)
126{
127 /* wait to make sure we flush pending tasklet*/
128 synchronize_irq(priv->pci_dev->irq);
129 tasklet_kill(&priv->irq_tasklet);
130}
131
132int iwl_prepare_card_hw(struct iwl_priv *priv);
133
134int iwlagn_start_device(struct iwl_priv *priv);
135void iwlagn_stop_device(struct iwl_priv *priv);
107 136
108/* tx queue */ 137/* tx queue */
109void iwlagn_set_wr_ptrs(struct iwl_priv *priv, 138void iwlagn_set_wr_ptrs(struct iwl_priv *priv,
@@ -111,28 +140,28 @@ void iwlagn_set_wr_ptrs(struct iwl_priv *priv,
111void iwlagn_tx_queue_set_status(struct iwl_priv *priv, 140void iwlagn_tx_queue_set_status(struct iwl_priv *priv,
112 struct iwl_tx_queue *txq, 141 struct iwl_tx_queue *txq,
113 int tx_fifo_id, int scd_retry); 142 int tx_fifo_id, int scd_retry);
114void iwlagn_txq_update_byte_cnt_tbl(struct iwl_priv *priv,
115 struct iwl_tx_queue *txq,
116 u16 byte_cnt);
117void iwlagn_txq_inval_byte_cnt_tbl(struct iwl_priv *priv,
118 struct iwl_tx_queue *txq);
119int iwlagn_txq_agg_enable(struct iwl_priv *priv, int txq_id,
120 int tx_fifo, int sta_id, int tid, u16 ssn_idx);
121int iwlagn_txq_agg_disable(struct iwl_priv *priv, u16 txq_id,
122 u16 ssn_idx, u8 tx_fifo);
123void iwlagn_txq_set_sched(struct iwl_priv *priv, u32 mask); 143void iwlagn_txq_set_sched(struct iwl_priv *priv, u32 mask);
124void iwl_free_tfds_in_queue(struct iwl_priv *priv, 144void iwl_free_tfds_in_queue(struct iwl_priv *priv,
125 int sta_id, int tid, int freed); 145 int sta_id, int tid, int freed);
126 146
147/* RXON */
148int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx);
149void iwlagn_set_rxon_chain(struct iwl_priv *priv, struct iwl_rxon_context *ctx);
150int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed);
151void iwlagn_bss_info_changed(struct ieee80211_hw *hw,
152 struct ieee80211_vif *vif,
153 struct ieee80211_bss_conf *bss_conf,
154 u32 changes);
155
127/* uCode */ 156/* uCode */
128int iwlagn_load_ucode(struct iwl_priv *priv);
129void iwlagn_rx_calib_result(struct iwl_priv *priv, 157void iwlagn_rx_calib_result(struct iwl_priv *priv,
130 struct iwl_rx_mem_buffer *rxb); 158 struct iwl_rx_mem_buffer *rxb);
131void iwlagn_rx_calib_complete(struct iwl_priv *priv, 159int iwlagn_send_bt_env(struct iwl_priv *priv, u8 action, u8 type);
132 struct iwl_rx_mem_buffer *rxb); 160void iwlagn_send_prio_tbl(struct iwl_priv *priv);
133void iwlagn_init_alive_start(struct iwl_priv *priv); 161int iwlagn_run_init_ucode(struct iwl_priv *priv);
134int iwlagn_alive_notify(struct iwl_priv *priv); 162int iwlagn_load_ucode_wait_alive(struct iwl_priv *priv,
135int iwl_verify_ucode(struct iwl_priv *priv); 163 struct fw_img *image,
164 int subtype, int alternate_subtype);
136 165
137/* lib */ 166/* lib */
138void iwl_check_abort_status(struct iwl_priv *priv, 167void iwl_check_abort_status(struct iwl_priv *priv,
@@ -160,12 +189,13 @@ void iwlagn_rx_replenish_now(struct iwl_priv *priv);
160void iwlagn_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq); 189void iwlagn_rx_queue_free(struct iwl_priv *priv, struct iwl_rx_queue *rxq);
161int iwlagn_rxq_stop(struct iwl_priv *priv); 190int iwlagn_rxq_stop(struct iwl_priv *priv);
162int iwlagn_hwrate_to_mac80211_idx(u32 rate_n_flags, enum ieee80211_band band); 191int iwlagn_hwrate_to_mac80211_idx(u32 rate_n_flags, enum ieee80211_band band);
163void iwlagn_rx_reply_rx(struct iwl_priv *priv, 192void iwl_setup_rx_handlers(struct iwl_priv *priv);
164 struct iwl_rx_mem_buffer *rxb);
165void iwlagn_rx_reply_rx_phy(struct iwl_priv *priv,
166 struct iwl_rx_mem_buffer *rxb);
167 193
168/* tx */ 194/* tx */
195void iwlagn_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq);
196int iwlagn_txq_attach_buf_to_tfd(struct iwl_priv *priv,
197 struct iwl_tx_queue *txq,
198 dma_addr_t addr, u16 len, u8 reset);
169void iwlagn_hwrate_to_tx_control(struct iwl_priv *priv, u32 rate_n_flags, 199void iwlagn_hwrate_to_tx_control(struct iwl_priv *priv, u32 rate_n_flags,
170 struct ieee80211_tx_info *info); 200 struct ieee80211_tx_info *info);
171int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb); 201int iwlagn_tx_skb(struct iwl_priv *priv, struct sk_buff *skb);
@@ -173,6 +203,9 @@ int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif,
173 struct ieee80211_sta *sta, u16 tid, u16 *ssn); 203 struct ieee80211_sta *sta, u16 tid, u16 *ssn);
174int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif, 204int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif,
175 struct ieee80211_sta *sta, u16 tid); 205 struct ieee80211_sta *sta, u16 tid);
206void iwlagn_txq_agg_queue_setup(struct iwl_priv *priv,
207 struct ieee80211_sta *sta,
208 int tid, int frame_limit);
176int iwlagn_txq_check_empty(struct iwl_priv *priv, 209int iwlagn_txq_check_empty(struct iwl_priv *priv,
177 int sta_id, u8 tid, int txq_id); 210 int sta_id, u8 tid, int txq_id);
178void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv, 211void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
@@ -192,6 +225,7 @@ static inline u32 iwl_tx_status_to_mac80211(u32 status)
192 case TX_STATUS_DIRECT_DONE: 225 case TX_STATUS_DIRECT_DONE:
193 return IEEE80211_TX_STAT_ACK; 226 return IEEE80211_TX_STAT_ACK;
194 case TX_STATUS_FAIL_DEST_PS: 227 case TX_STATUS_FAIL_DEST_PS:
228 case TX_STATUS_FAIL_PASSIVE_NO_RX:
195 return IEEE80211_TX_STAT_TX_FILTERED; 229 return IEEE80211_TX_STAT_TX_FILTERED;
196 default: 230 default:
197 return 0; 231 return 0;
@@ -205,25 +239,126 @@ static inline bool iwl_is_tx_success(u32 status)
205 (status == TX_STATUS_DIRECT_DONE); 239 (status == TX_STATUS_DIRECT_DONE);
206} 240}
207 241
208/* rx */ 242u8 iwl_toggle_tx_ant(struct iwl_priv *priv, u8 ant_idx, u8 valid);
209void iwl_rx_missed_beacon_notif(struct iwl_priv *priv,
210 struct iwl_rx_mem_buffer *rxb);
211bool iwl_good_plcp_health(struct iwl_priv *priv,
212 struct iwl_rx_packet *pkt);
213void iwl_rx_statistics(struct iwl_priv *priv,
214 struct iwl_rx_mem_buffer *rxb);
215void iwl_reply_statistics(struct iwl_priv *priv,
216 struct iwl_rx_mem_buffer *rxb);
217 243
218/* scan */ 244/* scan */
219void iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif); 245int iwlagn_request_scan(struct iwl_priv *priv, struct ieee80211_vif *vif);
246void iwlagn_post_scan(struct iwl_priv *priv);
220 247
221/* station mgmt */ 248/* station mgmt */
222int iwlagn_manage_ibss_station(struct iwl_priv *priv, 249int iwlagn_manage_ibss_station(struct iwl_priv *priv,
223 struct ieee80211_vif *vif, bool add); 250 struct ieee80211_vif *vif, bool add);
224 251
225/* hcmd */ 252/* hcmd */
226int iwlagn_send_rxon_assoc(struct iwl_priv *priv);
227int iwlagn_send_tx_ant_config(struct iwl_priv *priv, u8 valid_tx_ant); 253int iwlagn_send_tx_ant_config(struct iwl_priv *priv, u8 valid_tx_ant);
254int iwlagn_send_beacon_cmd(struct iwl_priv *priv);
255
256/* bt coex */
257void iwlagn_send_advance_bt_config(struct iwl_priv *priv);
258void iwlagn_bt_coex_profile_notif(struct iwl_priv *priv,
259 struct iwl_rx_mem_buffer *rxb);
260void iwlagn_bt_rx_handler_setup(struct iwl_priv *priv);
261void iwlagn_bt_setup_deferred_work(struct iwl_priv *priv);
262void iwlagn_bt_cancel_deferred_work(struct iwl_priv *priv);
263
264#ifdef CONFIG_IWLWIFI_DEBUG
265const char *iwl_get_tx_fail_reason(u32 status);
266const char *iwl_get_agg_tx_fail_reason(u16 status);
267#else
268static inline const char *iwl_get_tx_fail_reason(u32 status) { return ""; }
269static inline const char *iwl_get_agg_tx_fail_reason(u16 status) { return ""; }
270#endif
271
272/* station management */
273int iwlagn_alloc_bcast_station(struct iwl_priv *priv,
274 struct iwl_rxon_context *ctx);
275int iwlagn_add_bssid_station(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
276 const u8 *addr, u8 *sta_id_r);
277int iwl_remove_default_wep_key(struct iwl_priv *priv,
278 struct iwl_rxon_context *ctx,
279 struct ieee80211_key_conf *key);
280int iwl_set_default_wep_key(struct iwl_priv *priv,
281 struct iwl_rxon_context *ctx,
282 struct ieee80211_key_conf *key);
283int iwl_restore_default_wep_keys(struct iwl_priv *priv,
284 struct iwl_rxon_context *ctx);
285int iwl_set_dynamic_key(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
286 struct ieee80211_key_conf *key, u8 sta_id);
287int iwl_remove_dynamic_key(struct iwl_priv *priv, struct iwl_rxon_context *ctx,
288 struct ieee80211_key_conf *key, u8 sta_id);
289void iwl_update_tkip_key(struct iwl_priv *priv,
290 struct iwl_rxon_context *ctx,
291 struct ieee80211_key_conf *keyconf,
292 struct ieee80211_sta *sta, u32 iv32, u16 *phase1key);
293int iwl_sta_tx_modify_enable_tid(struct iwl_priv *priv, int sta_id, int tid);
294int iwl_sta_rx_agg_start(struct iwl_priv *priv, struct ieee80211_sta *sta,
295 int tid, u16 ssn);
296int iwl_sta_rx_agg_stop(struct iwl_priv *priv, struct ieee80211_sta *sta,
297 int tid);
298void iwl_sta_modify_sleep_tx_count(struct iwl_priv *priv, int sta_id, int cnt);
299int iwl_update_bcast_stations(struct iwl_priv *priv);
300void iwlagn_mac_sta_notify(struct ieee80211_hw *hw,
301 struct ieee80211_vif *vif,
302 enum sta_notify_cmd cmd,
303 struct ieee80211_sta *sta);
304
305/* rate */
306static inline u32 iwl_ant_idx_to_flags(u8 ant_idx)
307{
308 return BIT(ant_idx) << RATE_MCS_ANT_POS;
309}
310
311static inline u8 iwl_hw_get_rate(__le32 rate_n_flags)
312{
313 return le32_to_cpu(rate_n_flags) & RATE_MCS_RATE_MSK;
314}
315
316static inline __le32 iwl_hw_set_rate_n_flags(u8 rate, u32 flags)
317{
318 return cpu_to_le32(flags|(u32)rate);
319}
320
321/* eeprom */
322void iwlcore_eeprom_enhanced_txpower(struct iwl_priv *priv);
323void iwl_eeprom_get_mac(const struct iwl_priv *priv, u8 *mac);
324
325/* notification wait support */
326void __acquires(wait_entry)
327iwlagn_init_notification_wait(struct iwl_priv *priv,
328 struct iwl_notification_wait *wait_entry,
329 u8 cmd,
330 void (*fn)(struct iwl_priv *priv,
331 struct iwl_rx_packet *pkt,
332 void *data),
333 void *fn_data);
334int __must_check __releases(wait_entry)
335iwlagn_wait_notification(struct iwl_priv *priv,
336 struct iwl_notification_wait *wait_entry,
337 unsigned long timeout);
338void __releases(wait_entry)
339iwlagn_remove_notification(struct iwl_priv *priv,
340 struct iwl_notification_wait *wait_entry);
341extern int iwlagn_init_alive_start(struct iwl_priv *priv);
342extern int iwl_alive_start(struct iwl_priv *priv);
343/* svtool */
344#ifdef CONFIG_IWLWIFI_DEVICE_SVTOOL
345extern int iwl_testmode_cmd(struct ieee80211_hw *hw, void *data, int len);
346extern void iwl_testmode_init(struct iwl_priv *priv);
347extern void iwl_testmode_cleanup(struct iwl_priv *priv);
348#else
349static inline
350int iwl_testmode_cmd(struct ieee80211_hw *hw, void *data, int len)
351{
352 return -ENOSYS;
353}
354static inline
355void iwl_testmode_init(struct iwl_priv *priv)
356{
357}
358static inline
359void iwl_testmode_cleanup(struct iwl_priv *priv)
360{
361}
362#endif
228 363
229#endif /* __iwl_agn_h__ */ 364#endif /* __iwl_agn_h__ */