iwl3945: Remaining host command cleanups
[safe/jmp/linux-2.6] / drivers / net / wireless / iwlwifi / iwl-agn.c
1 /******************************************************************************
2  *
3  * Copyright(c) 2003 - 2009 Intel Corporation. All rights reserved.
4  *
5  * Portions of this file are derived from the ipw3945 project, as well
6  * as portions of the ieee80211 subsystem header files.
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of version 2 of the GNU General Public License as
10  * published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful, but WITHOUT
13  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  * more details.
16  *
17  * You should have received a copy of the GNU General Public License along with
18  * this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
20  *
21  * The full GNU General Public License is included in this distribution in the
22  * file called LICENSE.
23  *
24  * Contact Information:
25  *  Intel Linux Wireless <ilw@linux.intel.com>
26  * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27  *
28  *****************************************************************************/
29
30 #include <linux/kernel.h>
31 #include <linux/module.h>
32 #include <linux/init.h>
33 #include <linux/pci.h>
34 #include <linux/dma-mapping.h>
35 #include <linux/delay.h>
36 #include <linux/skbuff.h>
37 #include <linux/netdevice.h>
38 #include <linux/wireless.h>
39 #include <linux/firmware.h>
40 #include <linux/etherdevice.h>
41 #include <linux/if_arp.h>
42
43 #include <net/mac80211.h>
44
45 #include <asm/div64.h>
46
47 #define DRV_NAME        "iwlagn"
48
49 #include "iwl-eeprom.h"
50 #include "iwl-dev.h"
51 #include "iwl-core.h"
52 #include "iwl-io.h"
53 #include "iwl-helpers.h"
54 #include "iwl-sta.h"
55 #include "iwl-calib.h"
56
57
58 /******************************************************************************
59  *
60  * module boiler plate
61  *
62  ******************************************************************************/
63
64 /*
65  * module name, copyright, version, etc.
66  */
67 #define DRV_DESCRIPTION "Intel(R) Wireless WiFi Link AGN driver for Linux"
68
69 #ifdef CONFIG_IWLWIFI_DEBUG
70 #define VD "d"
71 #else
72 #define VD
73 #endif
74
75 #ifdef CONFIG_IWLAGN_SPECTRUM_MEASUREMENT
76 #define VS "s"
77 #else
78 #define VS
79 #endif
80
81 #define DRV_VERSION     IWLWIFI_VERSION VD VS
82
83
84 MODULE_DESCRIPTION(DRV_DESCRIPTION);
85 MODULE_VERSION(DRV_VERSION);
86 MODULE_AUTHOR(DRV_COPYRIGHT " " DRV_AUTHOR);
87 MODULE_LICENSE("GPL");
88 MODULE_ALIAS("iwl4965");
89
90 /*************** STATION TABLE MANAGEMENT ****
91  * mac80211 should be examined to determine if sta_info is duplicating
92  * the functionality provided here
93  */
94
95 /**************************************************************/
96
97
98
99 static void iwl_set_rxon_hwcrypto(struct iwl_priv *priv, int hw_decrypt)
100 {
101         struct iwl_rxon_cmd *rxon = &priv->staging_rxon;
102
103         if (hw_decrypt)
104                 rxon->filter_flags &= ~RXON_FILTER_DIS_DECRYPT_MSK;
105         else
106                 rxon->filter_flags |= RXON_FILTER_DIS_DECRYPT_MSK;
107
108 }
109
110 /**
111  * iwl_full_rxon_required - check if full RXON (vs RXON_ASSOC) cmd is needed
112  * @priv: staging_rxon is compared to active_rxon
113  *
114  * If the RXON structure is changing enough to require a new tune,
115  * or is clearing the RXON_FILTER_ASSOC_MSK, then return 1 to indicate that
116  * a new tune (full RXON command, rather than RXON_ASSOC cmd) is required.
117  */
118 static int iwl_full_rxon_required(struct iwl_priv *priv)
119 {
120
121         /* These items are only settable from the full RXON command */
122         if (!(iwl_is_associated(priv)) ||
123             compare_ether_addr(priv->staging_rxon.bssid_addr,
124                                priv->active_rxon.bssid_addr) ||
125             compare_ether_addr(priv->staging_rxon.node_addr,
126                                priv->active_rxon.node_addr) ||
127             compare_ether_addr(priv->staging_rxon.wlap_bssid_addr,
128                                priv->active_rxon.wlap_bssid_addr) ||
129             (priv->staging_rxon.dev_type != priv->active_rxon.dev_type) ||
130             (priv->staging_rxon.channel != priv->active_rxon.channel) ||
131             (priv->staging_rxon.air_propagation !=
132              priv->active_rxon.air_propagation) ||
133             (priv->staging_rxon.ofdm_ht_single_stream_basic_rates !=
134              priv->active_rxon.ofdm_ht_single_stream_basic_rates) ||
135             (priv->staging_rxon.ofdm_ht_dual_stream_basic_rates !=
136              priv->active_rxon.ofdm_ht_dual_stream_basic_rates) ||
137             (priv->staging_rxon.assoc_id != priv->active_rxon.assoc_id))
138                 return 1;
139
140         /* flags, filter_flags, ofdm_basic_rates, and cck_basic_rates can
141          * be updated with the RXON_ASSOC command -- however only some
142          * flag transitions are allowed using RXON_ASSOC */
143
144         /* Check if we are not switching bands */
145         if ((priv->staging_rxon.flags & RXON_FLG_BAND_24G_MSK) !=
146             (priv->active_rxon.flags & RXON_FLG_BAND_24G_MSK))
147                 return 1;
148
149         /* Check if we are switching association toggle */
150         if ((priv->staging_rxon.filter_flags & RXON_FILTER_ASSOC_MSK) !=
151                 (priv->active_rxon.filter_flags & RXON_FILTER_ASSOC_MSK))
152                 return 1;
153
154         return 0;
155 }
156
157 /**
158  * iwl_commit_rxon - commit staging_rxon to hardware
159  *
160  * The RXON command in staging_rxon is committed to the hardware and
161  * the active_rxon structure is updated with the new data.  This
162  * function correctly transitions out of the RXON_ASSOC_MSK state if
163  * a HW tune is required based on the RXON structure changes.
164  */
165 static int iwl_commit_rxon(struct iwl_priv *priv)
166 {
167         /* cast away the const for active_rxon in this function */
168         struct iwl_rxon_cmd *active_rxon = (void *)&priv->active_rxon;
169         int ret;
170         bool new_assoc =
171                 !!(priv->staging_rxon.filter_flags & RXON_FILTER_ASSOC_MSK);
172
173         if (!iwl_is_alive(priv))
174                 return -EBUSY;
175
176         /* always get timestamp with Rx frame */
177         priv->staging_rxon.flags |= RXON_FLG_TSF2HOST_MSK;
178         /* allow CTS-to-self if possible. this is relevant only for
179          * 5000, but will not damage 4965 */
180         priv->staging_rxon.flags |= RXON_FLG_SELF_CTS_EN;
181
182         ret = iwl_agn_check_rxon_cmd(priv);
183         if (ret) {
184                 IWL_ERR(priv, "Invalid RXON configuration.  Not committing.\n");
185                 return -EINVAL;
186         }
187
188         /* If we don't need to send a full RXON, we can use
189          * iwl_rxon_assoc_cmd which is used to reconfigure filter
190          * and other flags for the current radio configuration. */
191         if (!iwl_full_rxon_required(priv)) {
192                 ret = iwl_send_rxon_assoc(priv);
193                 if (ret) {
194                         IWL_ERR(priv, "Error setting RXON_ASSOC (%d)\n", ret);
195                         return ret;
196                 }
197
198                 memcpy(active_rxon, &priv->staging_rxon, sizeof(*active_rxon));
199                 return 0;
200         }
201
202         /* station table will be cleared */
203         priv->assoc_station_added = 0;
204
205         /* If we are currently associated and the new config requires
206          * an RXON_ASSOC and the new config wants the associated mask enabled,
207          * we must clear the associated from the active configuration
208          * before we apply the new config */
209         if (iwl_is_associated(priv) && new_assoc) {
210                 IWL_DEBUG_INFO("Toggling associated bit on current RXON\n");
211                 active_rxon->filter_flags &= ~RXON_FILTER_ASSOC_MSK;
212
213                 ret = iwl_send_cmd_pdu(priv, REPLY_RXON,
214                                       sizeof(struct iwl_rxon_cmd),
215                                       &priv->active_rxon);
216
217                 /* If the mask clearing failed then we set
218                  * active_rxon back to what it was previously */
219                 if (ret) {
220                         active_rxon->filter_flags |= RXON_FILTER_ASSOC_MSK;
221                         IWL_ERR(priv, "Error clearing ASSOC_MSK (%d)\n", ret);
222                         return ret;
223                 }
224         }
225
226         IWL_DEBUG_INFO("Sending RXON\n"
227                        "* with%s RXON_FILTER_ASSOC_MSK\n"
228                        "* channel = %d\n"
229                        "* bssid = %pM\n",
230                        (new_assoc ? "" : "out"),
231                        le16_to_cpu(priv->staging_rxon.channel),
232                        priv->staging_rxon.bssid_addr);
233
234         iwl_set_rxon_hwcrypto(priv, !priv->hw_params.sw_crypto);
235
236         /* Apply the new configuration
237          * RXON unassoc clears the station table in uCode, send it before
238          * we add the bcast station. If assoc bit is set, we will send RXON
239          * after having added the bcast and bssid station.
240          */
241         if (!new_assoc) {
242                 ret = iwl_send_cmd_pdu(priv, REPLY_RXON,
243                               sizeof(struct iwl_rxon_cmd), &priv->staging_rxon);
244                 if (ret) {
245                         IWL_ERR(priv, "Error setting new RXON (%d)\n", ret);
246                         return ret;
247                 }
248                 memcpy(active_rxon, &priv->staging_rxon, sizeof(*active_rxon));
249         }
250
251         iwl_clear_stations_table(priv);
252
253         if (!priv->error_recovering)
254                 priv->start_calib = 0;
255
256         /* Add the broadcast address so we can send broadcast frames */
257         if (iwl_rxon_add_station(priv, iwl_bcast_addr, 0) ==
258                                                 IWL_INVALID_STATION) {
259                 IWL_ERR(priv, "Error adding BROADCAST address for transmit.\n");
260                 return -EIO;
261         }
262
263         /* If we have set the ASSOC_MSK and we are in BSS mode then
264          * add the IWL_AP_ID to the station rate table */
265         if (new_assoc) {
266                 if (priv->iw_mode == NL80211_IFTYPE_STATION) {
267                         ret = iwl_rxon_add_station(priv,
268                                            priv->active_rxon.bssid_addr, 1);
269                         if (ret == IWL_INVALID_STATION) {
270                                 IWL_ERR(priv,
271                                         "Error adding AP address for TX.\n");
272                                 return -EIO;
273                         }
274                         priv->assoc_station_added = 1;
275                         if (priv->default_wep_key &&
276                             iwl_send_static_wepkey_cmd(priv, 0))
277                                 IWL_ERR(priv,
278                                         "Could not send WEP static key.\n");
279                 }
280
281                 /* Apply the new configuration
282                  * RXON assoc doesn't clear the station table in uCode,
283                  */
284                 ret = iwl_send_cmd_pdu(priv, REPLY_RXON,
285                               sizeof(struct iwl_rxon_cmd), &priv->staging_rxon);
286                 if (ret) {
287                         IWL_ERR(priv, "Error setting new RXON (%d)\n", ret);
288                         return ret;
289                 }
290                 memcpy(active_rxon, &priv->staging_rxon, sizeof(*active_rxon));
291         }
292
293         iwl_init_sensitivity(priv);
294
295         /* If we issue a new RXON command which required a tune then we must
296          * send a new TXPOWER command or we won't be able to Tx any frames */
297         ret = iwl_set_tx_power(priv, priv->tx_power_user_lmt, true);
298         if (ret) {
299                 IWL_ERR(priv, "Error sending TX power (%d)\n", ret);
300                 return ret;
301         }
302
303         return 0;
304 }
305
306 void iwl_update_chain_flags(struct iwl_priv *priv)
307 {
308
309         iwl_set_rxon_chain(priv);
310         iwl_commit_rxon(priv);
311 }
312
313 static void iwl_clear_free_frames(struct iwl_priv *priv)
314 {
315         struct list_head *element;
316
317         IWL_DEBUG_INFO("%d frames on pre-allocated heap on clear.\n",
318                        priv->frames_count);
319
320         while (!list_empty(&priv->free_frames)) {
321                 element = priv->free_frames.next;
322                 list_del(element);
323                 kfree(list_entry(element, struct iwl_frame, list));
324                 priv->frames_count--;
325         }
326
327         if (priv->frames_count) {
328                 IWL_WARN(priv, "%d frames still in use.  Did we lose one?\n",
329                             priv->frames_count);
330                 priv->frames_count = 0;
331         }
332 }
333
334 static struct iwl_frame *iwl_get_free_frame(struct iwl_priv *priv)
335 {
336         struct iwl_frame *frame;
337         struct list_head *element;
338         if (list_empty(&priv->free_frames)) {
339                 frame = kzalloc(sizeof(*frame), GFP_KERNEL);
340                 if (!frame) {
341                         IWL_ERR(priv, "Could not allocate frame!\n");
342                         return NULL;
343                 }
344
345                 priv->frames_count++;
346                 return frame;
347         }
348
349         element = priv->free_frames.next;
350         list_del(element);
351         return list_entry(element, struct iwl_frame, list);
352 }
353
354 static void iwl_free_frame(struct iwl_priv *priv, struct iwl_frame *frame)
355 {
356         memset(frame, 0, sizeof(*frame));
357         list_add(&frame->list, &priv->free_frames);
358 }
359
360 static unsigned int iwl_fill_beacon_frame(struct iwl_priv *priv,
361                                           struct ieee80211_hdr *hdr,
362                                           int left)
363 {
364         if (!iwl_is_associated(priv) || !priv->ibss_beacon ||
365             ((priv->iw_mode != NL80211_IFTYPE_ADHOC) &&
366              (priv->iw_mode != NL80211_IFTYPE_AP)))
367                 return 0;
368
369         if (priv->ibss_beacon->len > left)
370                 return 0;
371
372         memcpy(hdr, priv->ibss_beacon->data, priv->ibss_beacon->len);
373
374         return priv->ibss_beacon->len;
375 }
376
377 static u8 iwl_rate_get_lowest_plcp(struct iwl_priv *priv)
378 {
379         int i;
380         int rate_mask;
381
382         /* Set rate mask*/
383         if (priv->staging_rxon.flags & RXON_FLG_BAND_24G_MSK)
384                 rate_mask = priv->active_rate_basic & IWL_CCK_RATES_MASK;
385         else
386                 rate_mask = priv->active_rate_basic & IWL_OFDM_RATES_MASK;
387
388         /* Find lowest valid rate */
389         for (i = IWL_RATE_1M_INDEX; i != IWL_RATE_INVALID;
390                                         i = iwl_rates[i].next_ieee) {
391                 if (rate_mask & (1 << i))
392                         return iwl_rates[i].plcp;
393         }
394
395         /* No valid rate was found. Assign the lowest one */
396         if (priv->staging_rxon.flags & RXON_FLG_BAND_24G_MSK)
397                 return IWL_RATE_1M_PLCP;
398         else
399                 return IWL_RATE_6M_PLCP;
400 }
401
402 static unsigned int iwl_hw_get_beacon_cmd(struct iwl_priv *priv,
403                                        struct iwl_frame *frame, u8 rate)
404 {
405         struct iwl_tx_beacon_cmd *tx_beacon_cmd;
406         unsigned int frame_size;
407
408         tx_beacon_cmd = &frame->u.beacon;
409         memset(tx_beacon_cmd, 0, sizeof(*tx_beacon_cmd));
410
411         tx_beacon_cmd->tx.sta_id = priv->hw_params.bcast_sta_id;
412         tx_beacon_cmd->tx.stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
413
414         frame_size = iwl_fill_beacon_frame(priv, tx_beacon_cmd->frame,
415                                 sizeof(frame->u) - sizeof(*tx_beacon_cmd));
416
417         BUG_ON(frame_size > MAX_MPDU_SIZE);
418         tx_beacon_cmd->tx.len = cpu_to_le16((u16)frame_size);
419
420         if ((rate == IWL_RATE_1M_PLCP) || (rate >= IWL_RATE_2M_PLCP))
421                 tx_beacon_cmd->tx.rate_n_flags =
422                         iwl_hw_set_rate_n_flags(rate, RATE_MCS_CCK_MSK);
423         else
424                 tx_beacon_cmd->tx.rate_n_flags =
425                         iwl_hw_set_rate_n_flags(rate, 0);
426
427         tx_beacon_cmd->tx.tx_flags = TX_CMD_FLG_SEQ_CTL_MSK |
428                                      TX_CMD_FLG_TSF_MSK |
429                                      TX_CMD_FLG_STA_RATE_MSK;
430
431         return sizeof(*tx_beacon_cmd) + frame_size;
432 }
433 static int iwl_send_beacon_cmd(struct iwl_priv *priv)
434 {
435         struct iwl_frame *frame;
436         unsigned int frame_size;
437         int rc;
438         u8 rate;
439
440         frame = iwl_get_free_frame(priv);
441
442         if (!frame) {
443                 IWL_ERR(priv, "Could not obtain free frame buffer for beacon "
444                           "command.\n");
445                 return -ENOMEM;
446         }
447
448         rate = iwl_rate_get_lowest_plcp(priv);
449
450         frame_size = iwl_hw_get_beacon_cmd(priv, frame, rate);
451
452         rc = iwl_send_cmd_pdu(priv, REPLY_TX_BEACON, frame_size,
453                               &frame->u.cmd[0]);
454
455         iwl_free_frame(priv, frame);
456
457         return rc;
458 }
459
460 static inline dma_addr_t iwl_tfd_tb_get_addr(struct iwl_tfd *tfd, u8 idx)
461 {
462         struct iwl_tfd_tb *tb = &tfd->tbs[idx];
463
464         dma_addr_t addr = get_unaligned_le32(&tb->lo);
465         if (sizeof(dma_addr_t) > sizeof(u32))
466                 addr |=
467                 ((dma_addr_t)(le16_to_cpu(tb->hi_n_len) & 0xF) << 16) << 16;
468
469         return addr;
470 }
471
472 static inline u16 iwl_tfd_tb_get_len(struct iwl_tfd *tfd, u8 idx)
473 {
474         struct iwl_tfd_tb *tb = &tfd->tbs[idx];
475
476         return le16_to_cpu(tb->hi_n_len) >> 4;
477 }
478
479 static inline void iwl_tfd_set_tb(struct iwl_tfd *tfd, u8 idx,
480                                   dma_addr_t addr, u16 len)
481 {
482         struct iwl_tfd_tb *tb = &tfd->tbs[idx];
483         u16 hi_n_len = len << 4;
484
485         put_unaligned_le32(addr, &tb->lo);
486         if (sizeof(dma_addr_t) > sizeof(u32))
487                 hi_n_len |= ((addr >> 16) >> 16) & 0xF;
488
489         tb->hi_n_len = cpu_to_le16(hi_n_len);
490
491         tfd->num_tbs = idx + 1;
492 }
493
494 static inline u8 iwl_tfd_get_num_tbs(struct iwl_tfd *tfd)
495 {
496         return tfd->num_tbs & 0x1f;
497 }
498
499 /**
500  * iwl_hw_txq_free_tfd - Free all chunks referenced by TFD [txq->q.read_ptr]
501  * @priv - driver private data
502  * @txq - tx queue
503  *
504  * Does NOT advance any TFD circular buffer read/write indexes
505  * Does NOT free the TFD itself (which is within circular buffer)
506  */
507 void iwl_hw_txq_free_tfd(struct iwl_priv *priv, struct iwl_tx_queue *txq)
508 {
509         struct iwl_tfd *tfd_tmp = (struct iwl_tfd *)txq->tfds;
510         struct iwl_tfd *tfd;
511         struct pci_dev *dev = priv->pci_dev;
512         int index = txq->q.read_ptr;
513         int i;
514         int num_tbs;
515
516         tfd = &tfd_tmp[index];
517
518         /* Sanity check on number of chunks */
519         num_tbs = iwl_tfd_get_num_tbs(tfd);
520
521         if (num_tbs >= IWL_NUM_OF_TBS) {
522                 IWL_ERR(priv, "Too many chunks: %i\n", num_tbs);
523                 /* @todo issue fatal error, it is quite serious situation */
524                 return;
525         }
526
527         /* Unmap tx_cmd */
528         if (num_tbs)
529                 pci_unmap_single(dev,
530                                 pci_unmap_addr(&txq->cmd[index]->meta, mapping),
531                                 pci_unmap_len(&txq->cmd[index]->meta, len),
532                                 PCI_DMA_TODEVICE);
533
534         /* Unmap chunks, if any. */
535         for (i = 1; i < num_tbs; i++) {
536                 pci_unmap_single(dev, iwl_tfd_tb_get_addr(tfd, i),
537                                 iwl_tfd_tb_get_len(tfd, i), PCI_DMA_TODEVICE);
538
539                 if (txq->txb) {
540                         dev_kfree_skb(txq->txb[txq->q.read_ptr].skb[i - 1]);
541                         txq->txb[txq->q.read_ptr].skb[i - 1] = NULL;
542                 }
543         }
544 }
545
546 int iwl_hw_txq_attach_buf_to_tfd(struct iwl_priv *priv,
547                                  struct iwl_tx_queue *txq,
548                                  dma_addr_t addr, u16 len,
549                                  u8 reset, u8 pad)
550 {
551         struct iwl_queue *q;
552         struct iwl_tfd *tfd, *tfd_tmp;
553         u32 num_tbs;
554
555         q = &txq->q;
556         tfd_tmp = (struct iwl_tfd *)txq->tfds;
557         tfd = &tfd_tmp[q->write_ptr];
558
559         if (reset)
560                 memset(tfd, 0, sizeof(*tfd));
561
562         num_tbs = iwl_tfd_get_num_tbs(tfd);
563
564         /* Each TFD can point to a maximum 20 Tx buffers */
565         if (num_tbs >= IWL_NUM_OF_TBS) {
566                 IWL_ERR(priv, "Error can not send more than %d chunks\n",
567                           IWL_NUM_OF_TBS);
568                 return -EINVAL;
569         }
570
571         BUG_ON(addr & ~DMA_BIT_MASK(36));
572         if (unlikely(addr & ~IWL_TX_DMA_MASK))
573                 IWL_ERR(priv, "Unaligned address = %llx\n",
574                           (unsigned long long)addr);
575
576         iwl_tfd_set_tb(tfd, num_tbs, addr, len);
577
578         return 0;
579 }
580
581 /*
582  * Tell nic where to find circular buffer of Tx Frame Descriptors for
583  * given Tx queue, and enable the DMA channel used for that queue.
584  *
585  * 4965 supports up to 16 Tx queues in DRAM, mapped to up to 8 Tx DMA
586  * channels supported in hardware.
587  */
588 int iwl_hw_tx_queue_init(struct iwl_priv *priv,
589                          struct iwl_tx_queue *txq)
590 {
591         int ret;
592         unsigned long flags;
593         int txq_id = txq->q.id;
594
595         spin_lock_irqsave(&priv->lock, flags);
596         ret = iwl_grab_nic_access(priv);
597         if (ret) {
598                 spin_unlock_irqrestore(&priv->lock, flags);
599                 return ret;
600         }
601
602         /* Circular buffer (TFD queue in DRAM) physical base address */
603         iwl_write_direct32(priv, FH_MEM_CBBC_QUEUE(txq_id),
604                              txq->q.dma_addr >> 8);
605
606         iwl_release_nic_access(priv);
607         spin_unlock_irqrestore(&priv->lock, flags);
608
609         return 0;
610 }
611
612
613 /******************************************************************************
614  *
615  * Misc. internal state and helper functions
616  *
617  ******************************************************************************/
618
619 static void iwl_ht_conf(struct iwl_priv *priv,
620                             struct ieee80211_bss_conf *bss_conf)
621 {
622         struct ieee80211_sta_ht_cap *ht_conf;
623         struct iwl_ht_info *iwl_conf = &priv->current_ht_config;
624         struct ieee80211_sta *sta;
625
626         IWL_DEBUG_MAC80211("enter: \n");
627
628         if (!iwl_conf->is_ht)
629                 return;
630
631
632         /*
633          * It is totally wrong to base global information on something
634          * that is valid only when associated, alas, this driver works
635          * that way and I don't know how to fix it.
636          */
637
638         rcu_read_lock();
639         sta = ieee80211_find_sta(priv->hw, priv->bssid);
640         if (!sta) {
641                 rcu_read_unlock();
642                 return;
643         }
644         ht_conf = &sta->ht_cap;
645
646         if (ht_conf->cap & IEEE80211_HT_CAP_SGI_20)
647                 iwl_conf->sgf |= HT_SHORT_GI_20MHZ;
648         if (ht_conf->cap & IEEE80211_HT_CAP_SGI_40)
649                 iwl_conf->sgf |= HT_SHORT_GI_40MHZ;
650
651         iwl_conf->is_green_field = !!(ht_conf->cap & IEEE80211_HT_CAP_GRN_FLD);
652         iwl_conf->max_amsdu_size =
653                 !!(ht_conf->cap & IEEE80211_HT_CAP_MAX_AMSDU);
654
655         iwl_conf->supported_chan_width =
656                 !!(ht_conf->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40);
657
658         /*
659          * XXX: The HT configuration needs to be moved into iwl_mac_config()
660          *      to be done there correctly.
661          */
662
663         iwl_conf->extension_chan_offset = IEEE80211_HT_PARAM_CHA_SEC_NONE;
664         if (conf_is_ht40_minus(&priv->hw->conf))
665                 iwl_conf->extension_chan_offset = IEEE80211_HT_PARAM_CHA_SEC_BELOW;
666         else if (conf_is_ht40_plus(&priv->hw->conf))
667                 iwl_conf->extension_chan_offset = IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
668
669         /* If no above or below channel supplied disable FAT channel */
670         if (iwl_conf->extension_chan_offset != IEEE80211_HT_PARAM_CHA_SEC_ABOVE &&
671             iwl_conf->extension_chan_offset != IEEE80211_HT_PARAM_CHA_SEC_BELOW)
672                 iwl_conf->supported_chan_width = 0;
673
674         iwl_conf->sm_ps = (u8)((ht_conf->cap & IEEE80211_HT_CAP_SM_PS) >> 2);
675
676         memcpy(&iwl_conf->mcs, &ht_conf->mcs, 16);
677
678         iwl_conf->tx_chan_width = iwl_conf->supported_chan_width != 0;
679         iwl_conf->ht_protection =
680                 bss_conf->ht.operation_mode & IEEE80211_HT_OP_MODE_PROTECTION;
681         iwl_conf->non_GF_STA_present =
682                 !!(bss_conf->ht.operation_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT);
683
684         rcu_read_unlock();
685
686         IWL_DEBUG_MAC80211("leave\n");
687 }
688
689 /*
690  * QoS  support
691 */
692 static void iwl_activate_qos(struct iwl_priv *priv, u8 force)
693 {
694         if (test_bit(STATUS_EXIT_PENDING, &priv->status))
695                 return;
696
697         priv->qos_data.def_qos_parm.qos_flags = 0;
698
699         if (priv->qos_data.qos_cap.q_AP.queue_request &&
700             !priv->qos_data.qos_cap.q_AP.txop_request)
701                 priv->qos_data.def_qos_parm.qos_flags |=
702                         QOS_PARAM_FLG_TXOP_TYPE_MSK;
703         if (priv->qos_data.qos_active)
704                 priv->qos_data.def_qos_parm.qos_flags |=
705                         QOS_PARAM_FLG_UPDATE_EDCA_MSK;
706
707         if (priv->current_ht_config.is_ht)
708                 priv->qos_data.def_qos_parm.qos_flags |= QOS_PARAM_FLG_TGN_MSK;
709
710         if (force || iwl_is_associated(priv)) {
711                 IWL_DEBUG_QOS("send QoS cmd with Qos active=%d FLAGS=0x%X\n",
712                                 priv->qos_data.qos_active,
713                                 priv->qos_data.def_qos_parm.qos_flags);
714
715                 iwl_send_cmd_pdu_async(priv, REPLY_QOS_PARAM,
716                                        sizeof(struct iwl_qosparam_cmd),
717                                        &priv->qos_data.def_qos_parm, NULL);
718         }
719 }
720
721 #define MAX_UCODE_BEACON_INTERVAL       4096
722
723 static u16 iwl_adjust_beacon_interval(u16 beacon_val)
724 {
725         u16 new_val = 0;
726         u16 beacon_factor = 0;
727
728         beacon_factor = (beacon_val + MAX_UCODE_BEACON_INTERVAL)
729                                         / MAX_UCODE_BEACON_INTERVAL;
730         new_val = beacon_val / beacon_factor;
731
732         return new_val;
733 }
734
735 static void iwl_setup_rxon_timing(struct iwl_priv *priv)
736 {
737         u64 tsf;
738         s32 interval_tm, rem;
739         unsigned long flags;
740         struct ieee80211_conf *conf = NULL;
741         u16 beacon_int = 0;
742
743         conf = ieee80211_get_hw_conf(priv->hw);
744
745         spin_lock_irqsave(&priv->lock, flags);
746         priv->rxon_timing.timestamp = cpu_to_le64(priv->timestamp);
747         priv->rxon_timing.listen_interval = cpu_to_le16(conf->listen_interval);
748
749         if (priv->iw_mode == NL80211_IFTYPE_STATION) {
750                 beacon_int = iwl_adjust_beacon_interval(priv->beacon_int);
751                 priv->rxon_timing.atim_window = 0;
752         } else {
753                 beacon_int = iwl_adjust_beacon_interval(conf->beacon_int);
754
755                 /* TODO: we need to get atim_window from upper stack
756                  * for now we set to 0 */
757                 priv->rxon_timing.atim_window = 0;
758         }
759
760         priv->rxon_timing.beacon_interval = cpu_to_le16(beacon_int);
761
762         tsf = priv->timestamp; /* tsf is modifed by do_div: copy it */
763         interval_tm = beacon_int * 1024;
764         rem = do_div(tsf, interval_tm);
765         priv->rxon_timing.beacon_init_val = cpu_to_le32(interval_tm - rem);
766
767         spin_unlock_irqrestore(&priv->lock, flags);
768         IWL_DEBUG_ASSOC("beacon interval %d beacon timer %d beacon tim %d\n",
769                         le16_to_cpu(priv->rxon_timing.beacon_interval),
770                         le32_to_cpu(priv->rxon_timing.beacon_init_val),
771                         le16_to_cpu(priv->rxon_timing.atim_window));
772 }
773
774 static void iwl_set_flags_for_band(struct iwl_priv *priv,
775                                    enum ieee80211_band band)
776 {
777         if (band == IEEE80211_BAND_5GHZ) {
778                 priv->staging_rxon.flags &=
779                     ~(RXON_FLG_BAND_24G_MSK | RXON_FLG_AUTO_DETECT_MSK
780                       | RXON_FLG_CCK_MSK);
781                 priv->staging_rxon.flags |= RXON_FLG_SHORT_SLOT_MSK;
782         } else {
783                 /* Copied from iwl_post_associate() */
784                 if (priv->assoc_capability & WLAN_CAPABILITY_SHORT_SLOT_TIME)
785                         priv->staging_rxon.flags |= RXON_FLG_SHORT_SLOT_MSK;
786                 else
787                         priv->staging_rxon.flags &= ~RXON_FLG_SHORT_SLOT_MSK;
788
789                 if (priv->iw_mode == NL80211_IFTYPE_ADHOC)
790                         priv->staging_rxon.flags &= ~RXON_FLG_SHORT_SLOT_MSK;
791
792                 priv->staging_rxon.flags |= RXON_FLG_BAND_24G_MSK;
793                 priv->staging_rxon.flags |= RXON_FLG_AUTO_DETECT_MSK;
794                 priv->staging_rxon.flags &= ~RXON_FLG_CCK_MSK;
795         }
796 }
797
798 /*
799  * initialize rxon structure with default values from eeprom
800  */
801 static void iwl_connection_init_rx_config(struct iwl_priv *priv, int mode)
802 {
803         const struct iwl_channel_info *ch_info;
804
805         memset(&priv->staging_rxon, 0, sizeof(priv->staging_rxon));
806
807         switch (mode) {
808         case NL80211_IFTYPE_AP:
809                 priv->staging_rxon.dev_type = RXON_DEV_TYPE_AP;
810                 break;
811
812         case NL80211_IFTYPE_STATION:
813                 priv->staging_rxon.dev_type = RXON_DEV_TYPE_ESS;
814                 priv->staging_rxon.filter_flags = RXON_FILTER_ACCEPT_GRP_MSK;
815                 break;
816
817         case NL80211_IFTYPE_ADHOC:
818                 priv->staging_rxon.dev_type = RXON_DEV_TYPE_IBSS;
819                 priv->staging_rxon.flags = RXON_FLG_SHORT_PREAMBLE_MSK;
820                 priv->staging_rxon.filter_flags = RXON_FILTER_BCON_AWARE_MSK |
821                                                   RXON_FILTER_ACCEPT_GRP_MSK;
822                 break;
823
824         case NL80211_IFTYPE_MONITOR:
825                 priv->staging_rxon.dev_type = RXON_DEV_TYPE_SNIFFER;
826                 priv->staging_rxon.filter_flags = RXON_FILTER_PROMISC_MSK |
827                     RXON_FILTER_CTL2HOST_MSK | RXON_FILTER_ACCEPT_GRP_MSK;
828                 break;
829         default:
830                 IWL_ERR(priv, "Unsupported interface type %d\n", mode);
831                 break;
832         }
833
834 #if 0
835         /* TODO:  Figure out when short_preamble would be set and cache from
836          * that */
837         if (!hw_to_local(priv->hw)->short_preamble)
838                 priv->staging_rxon.flags &= ~RXON_FLG_SHORT_PREAMBLE_MSK;
839         else
840                 priv->staging_rxon.flags |= RXON_FLG_SHORT_PREAMBLE_MSK;
841 #endif
842
843         ch_info = iwl_get_channel_info(priv, priv->band,
844                                        le16_to_cpu(priv->active_rxon.channel));
845
846         if (!ch_info)
847                 ch_info = &priv->channel_info[0];
848
849         /*
850          * in some case A channels are all non IBSS
851          * in this case force B/G channel
852          */
853         if ((priv->iw_mode == NL80211_IFTYPE_ADHOC) &&
854             !(is_channel_ibss(ch_info)))
855                 ch_info = &priv->channel_info[0];
856
857         priv->staging_rxon.channel = cpu_to_le16(ch_info->channel);
858         priv->band = ch_info->band;
859
860         iwl_set_flags_for_band(priv, priv->band);
861
862         priv->staging_rxon.ofdm_basic_rates =
863             (IWL_OFDM_RATES_MASK >> IWL_FIRST_OFDM_RATE) & 0xFF;
864         priv->staging_rxon.cck_basic_rates =
865             (IWL_CCK_RATES_MASK >> IWL_FIRST_CCK_RATE) & 0xF;
866
867         priv->staging_rxon.flags &= ~(RXON_FLG_CHANNEL_MODE_MIXED_MSK |
868                                         RXON_FLG_CHANNEL_MODE_PURE_40_MSK);
869         memcpy(priv->staging_rxon.node_addr, priv->mac_addr, ETH_ALEN);
870         memcpy(priv->staging_rxon.wlap_bssid_addr, priv->mac_addr, ETH_ALEN);
871         priv->staging_rxon.ofdm_ht_single_stream_basic_rates = 0xff;
872         priv->staging_rxon.ofdm_ht_dual_stream_basic_rates = 0xff;
873         iwl_set_rxon_chain(priv);
874 }
875
876 static int iwl_set_mode(struct iwl_priv *priv, int mode)
877 {
878         iwl_connection_init_rx_config(priv, mode);
879         memcpy(priv->staging_rxon.node_addr, priv->mac_addr, ETH_ALEN);
880
881         iwl_clear_stations_table(priv);
882
883         /* dont commit rxon if rf-kill is on*/
884         if (!iwl_is_ready_rf(priv))
885                 return -EAGAIN;
886
887         cancel_delayed_work(&priv->scan_check);
888         if (iwl_scan_cancel_timeout(priv, 100)) {
889                 IWL_WARN(priv, "Aborted scan still in progress after 100ms\n");
890                 IWL_DEBUG_MAC80211("leaving - scan abort failed.\n");
891                 return -EAGAIN;
892         }
893
894         iwl_commit_rxon(priv);
895
896         return 0;
897 }
898
899 static void iwl_set_rate(struct iwl_priv *priv)
900 {
901         const struct ieee80211_supported_band *hw = NULL;
902         struct ieee80211_rate *rate;
903         int i;
904
905         hw = iwl_get_hw_mode(priv, priv->band);
906         if (!hw) {
907                 IWL_ERR(priv, "Failed to set rate: unable to get hw mode\n");
908                 return;
909         }
910
911         priv->active_rate = 0;
912         priv->active_rate_basic = 0;
913
914         for (i = 0; i < hw->n_bitrates; i++) {
915                 rate = &(hw->bitrates[i]);
916                 if (rate->hw_value < IWL_RATE_COUNT)
917                         priv->active_rate |= (1 << rate->hw_value);
918         }
919
920         IWL_DEBUG_RATE("Set active_rate = %0x, active_rate_basic = %0x\n",
921                        priv->active_rate, priv->active_rate_basic);
922
923         /*
924          * If a basic rate is configured, then use it (adding IWL_RATE_1M_MASK)
925          * otherwise set it to the default of all CCK rates and 6, 12, 24 for
926          * OFDM
927          */
928         if (priv->active_rate_basic & IWL_CCK_BASIC_RATES_MASK)
929                 priv->staging_rxon.cck_basic_rates =
930                     ((priv->active_rate_basic &
931                       IWL_CCK_RATES_MASK) >> IWL_FIRST_CCK_RATE) & 0xF;
932         else
933                 priv->staging_rxon.cck_basic_rates =
934                     (IWL_CCK_BASIC_RATES_MASK >> IWL_FIRST_CCK_RATE) & 0xF;
935
936         if (priv->active_rate_basic & IWL_OFDM_BASIC_RATES_MASK)
937                 priv->staging_rxon.ofdm_basic_rates =
938                     ((priv->active_rate_basic &
939                       (IWL_OFDM_BASIC_RATES_MASK | IWL_RATE_6M_MASK)) >>
940                       IWL_FIRST_OFDM_RATE) & 0xFF;
941         else
942                 priv->staging_rxon.ofdm_basic_rates =
943                    (IWL_OFDM_BASIC_RATES_MASK >> IWL_FIRST_OFDM_RATE) & 0xFF;
944 }
945
946
947 /******************************************************************************
948  *
949  * Generic RX handler implementations
950  *
951  ******************************************************************************/
952 static void iwl_rx_reply_alive(struct iwl_priv *priv,
953                                 struct iwl_rx_mem_buffer *rxb)
954 {
955         struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;
956         struct iwl_alive_resp *palive;
957         struct delayed_work *pwork;
958
959         palive = &pkt->u.alive_frame;
960
961         IWL_DEBUG_INFO("Alive ucode status 0x%08X revision "
962                        "0x%01X 0x%01X\n",
963                        palive->is_valid, palive->ver_type,
964                        palive->ver_subtype);
965
966         if (palive->ver_subtype == INITIALIZE_SUBTYPE) {
967                 IWL_DEBUG_INFO("Initialization Alive received.\n");
968                 memcpy(&priv->card_alive_init,
969                        &pkt->u.alive_frame,
970                        sizeof(struct iwl_init_alive_resp));
971                 pwork = &priv->init_alive_start;
972         } else {
973                 IWL_DEBUG_INFO("Runtime Alive received.\n");
974                 memcpy(&priv->card_alive, &pkt->u.alive_frame,
975                        sizeof(struct iwl_alive_resp));
976                 pwork = &priv->alive_start;
977         }
978
979         /* We delay the ALIVE response by 5ms to
980          * give the HW RF Kill time to activate... */
981         if (palive->is_valid == UCODE_VALID_OK)
982                 queue_delayed_work(priv->workqueue, pwork,
983                                    msecs_to_jiffies(5));
984         else
985                 IWL_WARN(priv, "uCode did not respond OK.\n");
986 }
987
988 static void iwl_rx_reply_error(struct iwl_priv *priv,
989                                    struct iwl_rx_mem_buffer *rxb)
990 {
991         struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;
992
993         IWL_ERR(priv, "Error Reply type 0x%08X cmd %s (0x%02X) "
994                 "seq 0x%04X ser 0x%08X\n",
995                 le32_to_cpu(pkt->u.err_resp.error_type),
996                 get_cmd_string(pkt->u.err_resp.cmd_id),
997                 pkt->u.err_resp.cmd_id,
998                 le16_to_cpu(pkt->u.err_resp.bad_cmd_seq_num),
999                 le32_to_cpu(pkt->u.err_resp.error_info));
1000 }
1001
1002 #define TX_STATUS_ENTRY(x) case TX_STATUS_FAIL_ ## x: return #x
1003
1004 static void iwl_rx_csa(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb)
1005 {
1006         struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;
1007         struct iwl_rxon_cmd *rxon = (void *)&priv->active_rxon;
1008         struct iwl_csa_notification *csa = &(pkt->u.csa_notif);
1009         IWL_DEBUG_11H("CSA notif: channel %d, status %d\n",
1010                       le16_to_cpu(csa->channel), le32_to_cpu(csa->status));
1011         rxon->channel = csa->channel;
1012         priv->staging_rxon.channel = csa->channel;
1013 }
1014
1015 static void iwl_rx_pm_sleep_notif(struct iwl_priv *priv,
1016                                       struct iwl_rx_mem_buffer *rxb)
1017 {
1018 #ifdef CONFIG_IWLWIFI_DEBUG
1019         struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;
1020         struct iwl_sleep_notification *sleep = &(pkt->u.sleep_notif);
1021         IWL_DEBUG_RX("sleep mode: %d, src: %d\n",
1022                      sleep->pm_sleep_mode, sleep->pm_wakeup_src);
1023 #endif
1024 }
1025
1026 static void iwl_rx_pm_debug_statistics_notif(struct iwl_priv *priv,
1027                                              struct iwl_rx_mem_buffer *rxb)
1028 {
1029         struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;
1030         IWL_DEBUG_RADIO("Dumping %d bytes of unhandled "
1031                         "notification for %s:\n",
1032                         le32_to_cpu(pkt->len), get_cmd_string(pkt->hdr.cmd));
1033         iwl_print_hex_dump(priv, IWL_DL_RADIO, pkt->u.raw, le32_to_cpu(pkt->len));
1034 }
1035
1036 static void iwl_bg_beacon_update(struct work_struct *work)
1037 {
1038         struct iwl_priv *priv =
1039                 container_of(work, struct iwl_priv, beacon_update);
1040         struct sk_buff *beacon;
1041
1042         /* Pull updated AP beacon from mac80211. will fail if not in AP mode */
1043         beacon = ieee80211_beacon_get(priv->hw, priv->vif);
1044
1045         if (!beacon) {
1046                 IWL_ERR(priv, "update beacon failed\n");
1047                 return;
1048         }
1049
1050         mutex_lock(&priv->mutex);
1051         /* new beacon skb is allocated every time; dispose previous.*/
1052         if (priv->ibss_beacon)
1053                 dev_kfree_skb(priv->ibss_beacon);
1054
1055         priv->ibss_beacon = beacon;
1056         mutex_unlock(&priv->mutex);
1057
1058         iwl_send_beacon_cmd(priv);
1059 }
1060
1061 /**
1062  * iwl_bg_statistics_periodic - Timer callback to queue statistics
1063  *
1064  * This callback is provided in order to send a statistics request.
1065  *
1066  * This timer function is continually reset to execute within
1067  * REG_RECALIB_PERIOD seconds since the last STATISTICS_NOTIFICATION
1068  * was received.  We need to ensure we receive the statistics in order
1069  * to update the temperature used for calibrating the TXPOWER.
1070  */
1071 static void iwl_bg_statistics_periodic(unsigned long data)
1072 {
1073         struct iwl_priv *priv = (struct iwl_priv *)data;
1074
1075         if (test_bit(STATUS_EXIT_PENDING, &priv->status))
1076                 return;
1077
1078         /* dont send host command if rf-kill is on */
1079         if (!iwl_is_ready_rf(priv))
1080                 return;
1081
1082         iwl_send_statistics_request(priv, CMD_ASYNC);
1083 }
1084
1085 static void iwl_rx_beacon_notif(struct iwl_priv *priv,
1086                                 struct iwl_rx_mem_buffer *rxb)
1087 {
1088 #ifdef CONFIG_IWLWIFI_DEBUG
1089         struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;
1090         struct iwl4965_beacon_notif *beacon =
1091                 (struct iwl4965_beacon_notif *)pkt->u.raw;
1092         u8 rate = iwl_hw_get_rate(beacon->beacon_notify_hdr.rate_n_flags);
1093
1094         IWL_DEBUG_RX("beacon status %x retries %d iss %d "
1095                 "tsf %d %d rate %d\n",
1096                 le32_to_cpu(beacon->beacon_notify_hdr.u.status) & TX_STATUS_MSK,
1097                 beacon->beacon_notify_hdr.failure_frame,
1098                 le32_to_cpu(beacon->ibss_mgr_status),
1099                 le32_to_cpu(beacon->high_tsf),
1100                 le32_to_cpu(beacon->low_tsf), rate);
1101 #endif
1102
1103         if ((priv->iw_mode == NL80211_IFTYPE_AP) &&
1104             (!test_bit(STATUS_EXIT_PENDING, &priv->status)))
1105                 queue_work(priv->workqueue, &priv->beacon_update);
1106 }
1107
1108 /* Handle notification from uCode that card's power state is changing
1109  * due to software, hardware, or critical temperature RFKILL */
1110 static void iwl_rx_card_state_notif(struct iwl_priv *priv,
1111                                     struct iwl_rx_mem_buffer *rxb)
1112 {
1113         struct iwl_rx_packet *pkt = (struct iwl_rx_packet *)rxb->skb->data;
1114         u32 flags = le32_to_cpu(pkt->u.card_state_notif.flags);
1115         unsigned long status = priv->status;
1116
1117         IWL_DEBUG_RF_KILL("Card state received: HW:%s SW:%s\n",
1118                           (flags & HW_CARD_DISABLED) ? "Kill" : "On",
1119                           (flags & SW_CARD_DISABLED) ? "Kill" : "On");
1120
1121         if (flags & (SW_CARD_DISABLED | HW_CARD_DISABLED |
1122                      RF_CARD_DISABLED)) {
1123
1124                 iwl_write32(priv, CSR_UCODE_DRV_GP1_SET,
1125                             CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED);
1126
1127                 if (!iwl_grab_nic_access(priv)) {
1128                         iwl_write_direct32(
1129                                 priv, HBUS_TARG_MBX_C,
1130                                 HBUS_TARG_MBX_C_REG_BIT_CMD_BLOCKED);
1131
1132                         iwl_release_nic_access(priv);
1133                 }
1134
1135                 if (!(flags & RXON_CARD_DISABLED)) {
1136                         iwl_write32(priv, CSR_UCODE_DRV_GP1_CLR,
1137                                     CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED);
1138                         if (!iwl_grab_nic_access(priv)) {
1139                                 iwl_write_direct32(
1140                                         priv, HBUS_TARG_MBX_C,
1141                                         HBUS_TARG_MBX_C_REG_BIT_CMD_BLOCKED);
1142
1143                                 iwl_release_nic_access(priv);
1144                         }
1145                 }
1146
1147                 if (flags & RF_CARD_DISABLED) {
1148                         iwl_write32(priv, CSR_UCODE_DRV_GP1_SET,
1149                                     CSR_UCODE_DRV_GP1_REG_BIT_CT_KILL_EXIT);
1150                         iwl_read32(priv, CSR_UCODE_DRV_GP1);
1151                         if (!iwl_grab_nic_access(priv))
1152                                 iwl_release_nic_access(priv);
1153                 }
1154         }
1155
1156         if (flags & HW_CARD_DISABLED)
1157                 set_bit(STATUS_RF_KILL_HW, &priv->status);
1158         else
1159                 clear_bit(STATUS_RF_KILL_HW, &priv->status);
1160
1161
1162         if (flags & SW_CARD_DISABLED)
1163                 set_bit(STATUS_RF_KILL_SW, &priv->status);
1164         else
1165                 clear_bit(STATUS_RF_KILL_SW, &priv->status);
1166
1167         if (!(flags & RXON_CARD_DISABLED))
1168                 iwl_scan_cancel(priv);
1169
1170         if ((test_bit(STATUS_RF_KILL_HW, &status) !=
1171              test_bit(STATUS_RF_KILL_HW, &priv->status)) ||
1172             (test_bit(STATUS_RF_KILL_SW, &status) !=
1173              test_bit(STATUS_RF_KILL_SW, &priv->status)))
1174                 queue_work(priv->workqueue, &priv->rf_kill);
1175         else
1176                 wake_up_interruptible(&priv->wait_command_queue);
1177 }
1178
1179 int iwl_set_pwr_src(struct iwl_priv *priv, enum iwl_pwr_src src)
1180 {
1181         int ret;
1182         unsigned long flags;
1183
1184         spin_lock_irqsave(&priv->lock, flags);
1185         ret = iwl_grab_nic_access(priv);
1186         if (ret)
1187                 goto err;
1188
1189         if (src == IWL_PWR_SRC_VAUX) {
1190                 u32 val;
1191                 ret = pci_read_config_dword(priv->pci_dev, PCI_CFG_POWER_SOURCE,
1192                                             &val);
1193
1194                 if (val & PCI_CFG_PMC_PME_FROM_D3COLD_SUPPORT)
1195                         iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG,
1196                                                APMG_PS_CTRL_VAL_PWR_SRC_VAUX,
1197                                                ~APMG_PS_CTRL_MSK_PWR_SRC);
1198         } else {
1199                 iwl_set_bits_mask_prph(priv, APMG_PS_CTRL_REG,
1200                                        APMG_PS_CTRL_VAL_PWR_SRC_VMAIN,
1201                                        ~APMG_PS_CTRL_MSK_PWR_SRC);
1202         }
1203
1204         iwl_release_nic_access(priv);
1205 err:
1206         spin_unlock_irqrestore(&priv->lock, flags);
1207         return ret;
1208 }
1209
1210 /**
1211  * iwl_setup_rx_handlers - Initialize Rx handler callbacks
1212  *
1213  * Setup the RX handlers for each of the reply types sent from the uCode
1214  * to the host.
1215  *
1216  * This function chains into the hardware specific files for them to setup
1217  * any hardware specific handlers as well.
1218  */
1219 static void iwl_setup_rx_handlers(struct iwl_priv *priv)
1220 {
1221         priv->rx_handlers[REPLY_ALIVE] = iwl_rx_reply_alive;
1222         priv->rx_handlers[REPLY_ERROR] = iwl_rx_reply_error;
1223         priv->rx_handlers[CHANNEL_SWITCH_NOTIFICATION] = iwl_rx_csa;
1224         priv->rx_handlers[PM_SLEEP_NOTIFICATION] = iwl_rx_pm_sleep_notif;
1225         priv->rx_handlers[PM_DEBUG_STATISTIC_NOTIFIC] =
1226             iwl_rx_pm_debug_statistics_notif;
1227         priv->rx_handlers[BEACON_NOTIFICATION] = iwl_rx_beacon_notif;
1228
1229         /*
1230          * The same handler is used for both the REPLY to a discrete
1231          * statistics request from the host as well as for the periodic
1232          * statistics notifications (after received beacons) from the uCode.
1233          */
1234         priv->rx_handlers[REPLY_STATISTICS_CMD] = iwl_rx_statistics;
1235         priv->rx_handlers[STATISTICS_NOTIFICATION] = iwl_rx_statistics;
1236
1237         iwl_setup_spectrum_handlers(priv);
1238         iwl_setup_rx_scan_handlers(priv);
1239
1240         /* status change handler */
1241         priv->rx_handlers[CARD_STATE_NOTIFICATION] = iwl_rx_card_state_notif;
1242
1243         priv->rx_handlers[MISSED_BEACONS_NOTIFICATION] =
1244             iwl_rx_missed_beacon_notif;
1245         /* Rx handlers */
1246         priv->rx_handlers[REPLY_RX_PHY_CMD] = iwl_rx_reply_rx_phy;
1247         priv->rx_handlers[REPLY_RX_MPDU_CMD] = iwl_rx_reply_rx;
1248         /* block ack */
1249         priv->rx_handlers[REPLY_COMPRESSED_BA] = iwl_rx_reply_compressed_ba;
1250         /* Set up hardware specific Rx handlers */
1251         priv->cfg->ops->lib->rx_handler_setup(priv);
1252 }
1253
1254 /**
1255  * iwl_rx_handle - Main entry function for receiving responses from uCode
1256  *
1257  * Uses the priv->rx_handlers callback function array to invoke
1258  * the appropriate handlers, including command responses,
1259  * frame-received notifications, and other notifications.
1260  */
1261 void iwl_rx_handle(struct iwl_priv *priv)
1262 {
1263         struct iwl_rx_mem_buffer *rxb;
1264         struct iwl_rx_packet *pkt;
1265         struct iwl_rx_queue *rxq = &priv->rxq;
1266         u32 r, i;
1267         int reclaim;
1268         unsigned long flags;
1269         u8 fill_rx = 0;
1270         u32 count = 8;
1271
1272         /* uCode's read index (stored in shared DRAM) indicates the last Rx
1273          * buffer that the driver may process (last buffer filled by ucode). */
1274         r = le16_to_cpu(rxq->rb_stts->closed_rb_num) &  0x0FFF;
1275         i = rxq->read;
1276
1277         /* Rx interrupt, but nothing sent from uCode */
1278         if (i == r)
1279                 IWL_DEBUG(IWL_DL_RX, "r = %d, i = %d\n", r, i);
1280
1281         if (iwl_rx_queue_space(rxq) > (RX_QUEUE_SIZE / 2))
1282                 fill_rx = 1;
1283
1284         while (i != r) {
1285                 rxb = rxq->queue[i];
1286
1287                 /* If an RXB doesn't have a Rx queue slot associated with it,
1288                  * then a bug has been introduced in the queue refilling
1289                  * routines -- catch it here */
1290                 BUG_ON(rxb == NULL);
1291
1292                 rxq->queue[i] = NULL;
1293
1294                 dma_sync_single_range_for_cpu(
1295                                 &priv->pci_dev->dev, rxb->real_dma_addr,
1296                                 rxb->aligned_dma_addr - rxb->real_dma_addr,
1297                                 priv->hw_params.rx_buf_size,
1298                                 PCI_DMA_FROMDEVICE);
1299                 pkt = (struct iwl_rx_packet *)rxb->skb->data;
1300
1301                 /* Reclaim a command buffer only if this packet is a response
1302                  *   to a (driver-originated) command.
1303                  * If the packet (e.g. Rx frame) originated from uCode,
1304                  *   there is no command buffer to reclaim.
1305                  * Ucode should set SEQ_RX_FRAME bit if ucode-originated,
1306                  *   but apparently a few don't get set; catch them here. */
1307                 reclaim = !(pkt->hdr.sequence & SEQ_RX_FRAME) &&
1308                         (pkt->hdr.cmd != REPLY_RX_PHY_CMD) &&
1309                         (pkt->hdr.cmd != REPLY_RX) &&
1310                         (pkt->hdr.cmd != REPLY_RX_MPDU_CMD) &&
1311                         (pkt->hdr.cmd != REPLY_COMPRESSED_BA) &&
1312                         (pkt->hdr.cmd != STATISTICS_NOTIFICATION) &&
1313                         (pkt->hdr.cmd != REPLY_TX);
1314
1315                 /* Based on type of command response or notification,
1316                  *   handle those that need handling via function in
1317                  *   rx_handlers table.  See iwl_setup_rx_handlers() */
1318                 if (priv->rx_handlers[pkt->hdr.cmd]) {
1319                         IWL_DEBUG(IWL_DL_RX, "r = %d, i = %d, %s, 0x%02x\n", r,
1320                                 i, get_cmd_string(pkt->hdr.cmd), pkt->hdr.cmd);
1321                         priv->rx_handlers[pkt->hdr.cmd] (priv, rxb);
1322                 } else {
1323                         /* No handling needed */
1324                         IWL_DEBUG(IWL_DL_RX,
1325                                 "r %d i %d No handler needed for %s, 0x%02x\n",
1326                                 r, i, get_cmd_string(pkt->hdr.cmd),
1327                                 pkt->hdr.cmd);
1328                 }
1329
1330                 if (reclaim) {
1331                         /* Invoke any callbacks, transfer the skb to caller, and
1332                          * fire off the (possibly) blocking iwl_send_cmd()
1333                          * as we reclaim the driver command queue */
1334                         if (rxb && rxb->skb)
1335                                 iwl_tx_cmd_complete(priv, rxb);
1336                         else
1337                                 IWL_WARN(priv, "Claim null rxb?\n");
1338                 }
1339
1340                 /* For now we just don't re-use anything.  We can tweak this
1341                  * later to try and re-use notification packets and SKBs that
1342                  * fail to Rx correctly */
1343                 if (rxb->skb != NULL) {
1344                         priv->alloc_rxb_skb--;
1345                         dev_kfree_skb_any(rxb->skb);
1346                         rxb->skb = NULL;
1347                 }
1348
1349                 pci_unmap_single(priv->pci_dev, rxb->real_dma_addr,
1350                                  priv->hw_params.rx_buf_size + 256,
1351                                  PCI_DMA_FROMDEVICE);
1352                 spin_lock_irqsave(&rxq->lock, flags);
1353                 list_add_tail(&rxb->list, &priv->rxq.rx_used);
1354                 spin_unlock_irqrestore(&rxq->lock, flags);
1355                 i = (i + 1) & RX_QUEUE_MASK;
1356                 /* If there are a lot of unused frames,
1357                  * restock the Rx queue so ucode wont assert. */
1358                 if (fill_rx) {
1359                         count++;
1360                         if (count >= 8) {
1361                                 priv->rxq.read = i;
1362                                 iwl_rx_queue_restock(priv);
1363                                 count = 0;
1364                         }
1365                 }
1366         }
1367
1368         /* Backtrack one entry */
1369         priv->rxq.read = i;
1370         iwl_rx_queue_restock(priv);
1371 }
1372
1373 #ifdef CONFIG_IWLWIFI_DEBUG
1374 static void iwl_print_rx_config_cmd(struct iwl_priv *priv)
1375 {
1376         struct iwl_rxon_cmd *rxon = &priv->staging_rxon;
1377
1378         IWL_DEBUG_RADIO("RX CONFIG:\n");
1379         iwl_print_hex_dump(priv, IWL_DL_RADIO, (u8 *) rxon, sizeof(*rxon));
1380         IWL_DEBUG_RADIO("u16 channel: 0x%x\n", le16_to_cpu(rxon->channel));
1381         IWL_DEBUG_RADIO("u32 flags: 0x%08X\n", le32_to_cpu(rxon->flags));
1382         IWL_DEBUG_RADIO("u32 filter_flags: 0x%08x\n",
1383                         le32_to_cpu(rxon->filter_flags));
1384         IWL_DEBUG_RADIO("u8 dev_type: 0x%x\n", rxon->dev_type);
1385         IWL_DEBUG_RADIO("u8 ofdm_basic_rates: 0x%02x\n",
1386                         rxon->ofdm_basic_rates);
1387         IWL_DEBUG_RADIO("u8 cck_basic_rates: 0x%02x\n", rxon->cck_basic_rates);
1388         IWL_DEBUG_RADIO("u8[6] node_addr: %pM\n", rxon->node_addr);
1389         IWL_DEBUG_RADIO("u8[6] bssid_addr: %pM\n", rxon->bssid_addr);
1390         IWL_DEBUG_RADIO("u16 assoc_id: 0x%x\n", le16_to_cpu(rxon->assoc_id));
1391 }
1392 #endif
1393
1394 /* call this function to flush any scheduled tasklet */
1395 static inline void iwl_synchronize_irq(struct iwl_priv *priv)
1396 {
1397         /* wait to make sure we flush pending tasklet*/
1398         synchronize_irq(priv->pci_dev->irq);
1399         tasklet_kill(&priv->irq_tasklet);
1400 }
1401
1402 /**
1403  * iwl_irq_handle_error - called for HW or SW error interrupt from card
1404  */
1405 static void iwl_irq_handle_error(struct iwl_priv *priv)
1406 {
1407         /* Set the FW error flag -- cleared on iwl_down */
1408         set_bit(STATUS_FW_ERROR, &priv->status);
1409
1410         /* Cancel currently queued command. */
1411         clear_bit(STATUS_HCMD_ACTIVE, &priv->status);
1412
1413 #ifdef CONFIG_IWLWIFI_DEBUG
1414         if (priv->debug_level & IWL_DL_FW_ERRORS) {
1415                 iwl_dump_nic_error_log(priv);
1416                 iwl_dump_nic_event_log(priv);
1417                 iwl_print_rx_config_cmd(priv);
1418         }
1419 #endif
1420
1421         wake_up_interruptible(&priv->wait_command_queue);
1422
1423         /* Keep the restart process from trying to send host
1424          * commands by clearing the INIT status bit */
1425         clear_bit(STATUS_READY, &priv->status);
1426
1427         if (!test_bit(STATUS_EXIT_PENDING, &priv->status)) {
1428                 IWL_DEBUG(IWL_DL_FW_ERRORS,
1429                           "Restarting adapter due to uCode error.\n");
1430
1431                 if (iwl_is_associated(priv)) {
1432                         memcpy(&priv->recovery_rxon, &priv->active_rxon,
1433                                sizeof(priv->recovery_rxon));
1434                         priv->error_recovering = 1;
1435                 }
1436                 if (priv->cfg->mod_params->restart_fw)
1437                         queue_work(priv->workqueue, &priv->restart);
1438         }
1439 }
1440
1441 static void iwl_error_recovery(struct iwl_priv *priv)
1442 {
1443         unsigned long flags;
1444
1445         memcpy(&priv->staging_rxon, &priv->recovery_rxon,
1446                sizeof(priv->staging_rxon));
1447         priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
1448         iwl_commit_rxon(priv);
1449
1450         iwl_rxon_add_station(priv, priv->bssid, 1);
1451
1452         spin_lock_irqsave(&priv->lock, flags);
1453         priv->assoc_id = le16_to_cpu(priv->staging_rxon.assoc_id);
1454         priv->error_recovering = 0;
1455         spin_unlock_irqrestore(&priv->lock, flags);
1456 }
1457
1458 static void iwl_irq_tasklet(struct iwl_priv *priv)
1459 {
1460         u32 inta, handled = 0;
1461         u32 inta_fh;
1462         unsigned long flags;
1463 #ifdef CONFIG_IWLWIFI_DEBUG
1464         u32 inta_mask;
1465 #endif
1466
1467         spin_lock_irqsave(&priv->lock, flags);
1468
1469         /* Ack/clear/reset pending uCode interrupts.
1470          * Note:  Some bits in CSR_INT are "OR" of bits in CSR_FH_INT_STATUS,
1471          *  and will clear only when CSR_FH_INT_STATUS gets cleared. */
1472         inta = iwl_read32(priv, CSR_INT);
1473         iwl_write32(priv, CSR_INT, inta);
1474
1475         /* Ack/clear/reset pending flow-handler (DMA) interrupts.
1476          * Any new interrupts that happen after this, either while we're
1477          * in this tasklet, or later, will show up in next ISR/tasklet. */
1478         inta_fh = iwl_read32(priv, CSR_FH_INT_STATUS);
1479         iwl_write32(priv, CSR_FH_INT_STATUS, inta_fh);
1480
1481 #ifdef CONFIG_IWLWIFI_DEBUG
1482         if (priv->debug_level & IWL_DL_ISR) {
1483                 /* just for debug */
1484                 inta_mask = iwl_read32(priv, CSR_INT_MASK);
1485                 IWL_DEBUG_ISR("inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
1486                               inta, inta_mask, inta_fh);
1487         }
1488 #endif
1489
1490         /* Since CSR_INT and CSR_FH_INT_STATUS reads and clears are not
1491          * atomic, make sure that inta covers all the interrupts that
1492          * we've discovered, even if FH interrupt came in just after
1493          * reading CSR_INT. */
1494         if (inta_fh & CSR49_FH_INT_RX_MASK)
1495                 inta |= CSR_INT_BIT_FH_RX;
1496         if (inta_fh & CSR49_FH_INT_TX_MASK)
1497                 inta |= CSR_INT_BIT_FH_TX;
1498
1499         /* Now service all interrupt bits discovered above. */
1500         if (inta & CSR_INT_BIT_HW_ERR) {
1501                 IWL_ERR(priv, "Microcode HW error detected.  Restarting.\n");
1502
1503                 /* Tell the device to stop sending interrupts */
1504                 iwl_disable_interrupts(priv);
1505
1506                 iwl_irq_handle_error(priv);
1507
1508                 handled |= CSR_INT_BIT_HW_ERR;
1509
1510                 spin_unlock_irqrestore(&priv->lock, flags);
1511
1512                 return;
1513         }
1514
1515 #ifdef CONFIG_IWLWIFI_DEBUG
1516         if (priv->debug_level & (IWL_DL_ISR)) {
1517                 /* NIC fires this, but we don't use it, redundant with WAKEUP */
1518                 if (inta & CSR_INT_BIT_SCD)
1519                         IWL_DEBUG_ISR("Scheduler finished to transmit "
1520                                       "the frame/frames.\n");
1521
1522                 /* Alive notification via Rx interrupt will do the real work */
1523                 if (inta & CSR_INT_BIT_ALIVE)
1524                         IWL_DEBUG_ISR("Alive interrupt\n");
1525         }
1526 #endif
1527         /* Safely ignore these bits for debug checks below */
1528         inta &= ~(CSR_INT_BIT_SCD | CSR_INT_BIT_ALIVE);
1529
1530         /* HW RF KILL switch toggled */
1531         if (inta & CSR_INT_BIT_RF_KILL) {
1532                 int hw_rf_kill = 0;
1533                 if (!(iwl_read32(priv, CSR_GP_CNTRL) &
1534                                 CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW))
1535                         hw_rf_kill = 1;
1536
1537                 IWL_DEBUG(IWL_DL_RF_KILL, "RF_KILL bit toggled to %s.\n",
1538                                 hw_rf_kill ? "disable radio" : "enable radio");
1539
1540                 /* driver only loads ucode once setting the interface up.
1541                  * the driver allows loading the ucode even if the radio
1542                  * is killed. Hence update the killswitch state here. The
1543                  * rfkill handler will care about restarting if needed.
1544                  */
1545                 if (!test_bit(STATUS_ALIVE, &priv->status)) {
1546                         if (hw_rf_kill)
1547                                 set_bit(STATUS_RF_KILL_HW, &priv->status);
1548                         else
1549                                 clear_bit(STATUS_RF_KILL_HW, &priv->status);
1550                         queue_work(priv->workqueue, &priv->rf_kill);
1551                 }
1552
1553                 handled |= CSR_INT_BIT_RF_KILL;
1554         }
1555
1556         /* Chip got too hot and stopped itself */
1557         if (inta & CSR_INT_BIT_CT_KILL) {
1558                 IWL_ERR(priv, "Microcode CT kill error detected.\n");
1559                 handled |= CSR_INT_BIT_CT_KILL;
1560         }
1561
1562         /* Error detected by uCode */
1563         if (inta & CSR_INT_BIT_SW_ERR) {
1564                 IWL_ERR(priv, "Microcode SW error detected. "
1565                         " Restarting 0x%X.\n", inta);
1566                 iwl_irq_handle_error(priv);
1567                 handled |= CSR_INT_BIT_SW_ERR;
1568         }
1569
1570         /* uCode wakes up after power-down sleep */
1571         if (inta & CSR_INT_BIT_WAKEUP) {
1572                 IWL_DEBUG_ISR("Wakeup interrupt\n");
1573                 iwl_rx_queue_update_write_ptr(priv, &priv->rxq);
1574                 iwl_txq_update_write_ptr(priv, &priv->txq[0]);
1575                 iwl_txq_update_write_ptr(priv, &priv->txq[1]);
1576                 iwl_txq_update_write_ptr(priv, &priv->txq[2]);
1577                 iwl_txq_update_write_ptr(priv, &priv->txq[3]);
1578                 iwl_txq_update_write_ptr(priv, &priv->txq[4]);
1579                 iwl_txq_update_write_ptr(priv, &priv->txq[5]);
1580
1581                 handled |= CSR_INT_BIT_WAKEUP;
1582         }
1583
1584         /* All uCode command responses, including Tx command responses,
1585          * Rx "responses" (frame-received notification), and other
1586          * notifications from uCode come through here*/
1587         if (inta & (CSR_INT_BIT_FH_RX | CSR_INT_BIT_SW_RX)) {
1588                 iwl_rx_handle(priv);
1589                 handled |= (CSR_INT_BIT_FH_RX | CSR_INT_BIT_SW_RX);
1590         }
1591
1592         if (inta & CSR_INT_BIT_FH_TX) {
1593                 IWL_DEBUG_ISR("Tx interrupt\n");
1594                 handled |= CSR_INT_BIT_FH_TX;
1595                 /* FH finished to write, send event */
1596                 priv->ucode_write_complete = 1;
1597                 wake_up_interruptible(&priv->wait_command_queue);
1598         }
1599
1600         if (inta & ~handled)
1601                 IWL_ERR(priv, "Unhandled INTA bits 0x%08x\n", inta & ~handled);
1602
1603         if (inta & ~CSR_INI_SET_MASK) {
1604                 IWL_WARN(priv, "Disabled INTA bits 0x%08x were pending\n",
1605                          inta & ~CSR_INI_SET_MASK);
1606                 IWL_WARN(priv, "   with FH_INT = 0x%08x\n", inta_fh);
1607         }
1608
1609         /* Re-enable all interrupts */
1610         /* only Re-enable if diabled by irq */
1611         if (test_bit(STATUS_INT_ENABLED, &priv->status))
1612                 iwl_enable_interrupts(priv);
1613
1614 #ifdef CONFIG_IWLWIFI_DEBUG
1615         if (priv->debug_level & (IWL_DL_ISR)) {
1616                 inta = iwl_read32(priv, CSR_INT);
1617                 inta_mask = iwl_read32(priv, CSR_INT_MASK);
1618                 inta_fh = iwl_read32(priv, CSR_FH_INT_STATUS);
1619                 IWL_DEBUG_ISR("End inta 0x%08x, enabled 0x%08x, fh 0x%08x, "
1620                         "flags 0x%08lx\n", inta, inta_mask, inta_fh, flags);
1621         }
1622 #endif
1623         spin_unlock_irqrestore(&priv->lock, flags);
1624 }
1625
1626 static irqreturn_t iwl_isr(int irq, void *data)
1627 {
1628         struct iwl_priv *priv = data;
1629         u32 inta, inta_mask;
1630         u32 inta_fh;
1631         if (!priv)
1632                 return IRQ_NONE;
1633
1634         spin_lock(&priv->lock);
1635
1636         /* Disable (but don't clear!) interrupts here to avoid
1637          *    back-to-back ISRs and sporadic interrupts from our NIC.
1638          * If we have something to service, the tasklet will re-enable ints.
1639          * If we *don't* have something, we'll re-enable before leaving here. */
1640         inta_mask = iwl_read32(priv, CSR_INT_MASK);  /* just for debug */
1641         iwl_write32(priv, CSR_INT_MASK, 0x00000000);
1642
1643         /* Discover which interrupts are active/pending */
1644         inta = iwl_read32(priv, CSR_INT);
1645         inta_fh = iwl_read32(priv, CSR_FH_INT_STATUS);
1646
1647         /* Ignore interrupt if there's nothing in NIC to service.
1648          * This may be due to IRQ shared with another device,
1649          * or due to sporadic interrupts thrown from our NIC. */
1650         if (!inta && !inta_fh) {
1651                 IWL_DEBUG_ISR("Ignore interrupt, inta == 0, inta_fh == 0\n");
1652                 goto none;
1653         }
1654
1655         if ((inta == 0xFFFFFFFF) || ((inta & 0xFFFFFFF0) == 0xa5a5a5a0)) {
1656                 /* Hardware disappeared. It might have already raised
1657                  * an interrupt */
1658                 IWL_WARN(priv, "HARDWARE GONE?? INTA == 0x%08x\n", inta);
1659                 goto unplugged;
1660         }
1661
1662         IWL_DEBUG_ISR("ISR inta 0x%08x, enabled 0x%08x, fh 0x%08x\n",
1663                       inta, inta_mask, inta_fh);
1664
1665         inta &= ~CSR_INT_BIT_SCD;
1666
1667         /* iwl_irq_tasklet() will service interrupts and re-enable them */
1668         if (likely(inta || inta_fh))
1669                 tasklet_schedule(&priv->irq_tasklet);
1670
1671  unplugged:
1672         spin_unlock(&priv->lock);
1673         return IRQ_HANDLED;
1674
1675  none:
1676         /* re-enable interrupts here since we don't have anything to service. */
1677         /* only Re-enable if diabled by irq */
1678         if (test_bit(STATUS_INT_ENABLED, &priv->status))
1679                 iwl_enable_interrupts(priv);
1680         spin_unlock(&priv->lock);
1681         return IRQ_NONE;
1682 }
1683
1684 /******************************************************************************
1685  *
1686  * uCode download functions
1687  *
1688  ******************************************************************************/
1689
1690 static void iwl_dealloc_ucode_pci(struct iwl_priv *priv)
1691 {
1692         iwl_free_fw_desc(priv->pci_dev, &priv->ucode_code);
1693         iwl_free_fw_desc(priv->pci_dev, &priv->ucode_data);
1694         iwl_free_fw_desc(priv->pci_dev, &priv->ucode_data_backup);
1695         iwl_free_fw_desc(priv->pci_dev, &priv->ucode_init);
1696         iwl_free_fw_desc(priv->pci_dev, &priv->ucode_init_data);
1697         iwl_free_fw_desc(priv->pci_dev, &priv->ucode_boot);
1698 }
1699
1700 static void iwl_nic_start(struct iwl_priv *priv)
1701 {
1702         /* Remove all resets to allow NIC to operate */
1703         iwl_write32(priv, CSR_RESET, 0);
1704 }
1705
1706
1707 /**
1708  * iwl_read_ucode - Read uCode images from disk file.
1709  *
1710  * Copy into buffers for card to fetch via bus-mastering
1711  */
1712 static int iwl_read_ucode(struct iwl_priv *priv)
1713 {
1714         struct iwl_ucode *ucode;
1715         int ret = -EINVAL, index;
1716         const struct firmware *ucode_raw;
1717         const char *name_pre = priv->cfg->fw_name_pre;
1718         const unsigned int api_max = priv->cfg->ucode_api_max;
1719         const unsigned int api_min = priv->cfg->ucode_api_min;
1720         char buf[25];
1721         u8 *src;
1722         size_t len;
1723         u32 api_ver, inst_size, data_size, init_size, init_data_size, boot_size;
1724
1725         /* Ask kernel firmware_class module to get the boot firmware off disk.
1726          * request_firmware() is synchronous, file is in memory on return. */
1727         for (index = api_max; index >= api_min; index--) {
1728                 sprintf(buf, "%s%d%s", name_pre, index, ".ucode");
1729                 ret = request_firmware(&ucode_raw, buf, &priv->pci_dev->dev);
1730                 if (ret < 0) {
1731                         IWL_ERR(priv, "%s firmware file req failed: %d\n",
1732                                   buf, ret);
1733                         if (ret == -ENOENT)
1734                                 continue;
1735                         else
1736                                 goto error;
1737                 } else {
1738                         if (index < api_max)
1739                                 IWL_ERR(priv, "Loaded firmware %s, "
1740                                         "which is deprecated. "
1741                                         "Please use API v%u instead.\n",
1742                                           buf, api_max);
1743
1744                         IWL_DEBUG_INFO("Got firmware '%s' file (%zd bytes) from disk\n",
1745                                        buf, ucode_raw->size);
1746                         break;
1747                 }
1748         }
1749
1750         if (ret < 0)
1751                 goto error;
1752
1753         /* Make sure that we got at least our header! */
1754         if (ucode_raw->size < sizeof(*ucode)) {
1755                 IWL_ERR(priv, "File size way too small!\n");
1756                 ret = -EINVAL;
1757                 goto err_release;
1758         }
1759
1760         /* Data from ucode file:  header followed by uCode images */
1761         ucode = (void *)ucode_raw->data;
1762
1763         priv->ucode_ver = le32_to_cpu(ucode->ver);
1764         api_ver = IWL_UCODE_API(priv->ucode_ver);
1765         inst_size = le32_to_cpu(ucode->inst_size);
1766         data_size = le32_to_cpu(ucode->data_size);
1767         init_size = le32_to_cpu(ucode->init_size);
1768         init_data_size = le32_to_cpu(ucode->init_data_size);
1769         boot_size = le32_to_cpu(ucode->boot_size);
1770
1771         /* api_ver should match the api version forming part of the
1772          * firmware filename ... but we don't check for that and only rely
1773          * on the API version read from firware header from here on forward */
1774
1775         if (api_ver < api_min || api_ver > api_max) {
1776                 IWL_ERR(priv, "Driver unable to support your firmware API. "
1777                           "Driver supports v%u, firmware is v%u.\n",
1778                           api_max, api_ver);
1779                 priv->ucode_ver = 0;
1780                 ret = -EINVAL;
1781                 goto err_release;
1782         }
1783         if (api_ver != api_max)
1784                 IWL_ERR(priv, "Firmware has old API version. Expected v%u, "
1785                           "got v%u. New firmware can be obtained "
1786                           "from http://www.intellinuxwireless.org.\n",
1787                           api_max, api_ver);
1788
1789         IWL_INFO(priv, "loaded firmware version %u.%u.%u.%u\n",
1790                IWL_UCODE_MAJOR(priv->ucode_ver),
1791                IWL_UCODE_MINOR(priv->ucode_ver),
1792                IWL_UCODE_API(priv->ucode_ver),
1793                IWL_UCODE_SERIAL(priv->ucode_ver));
1794
1795         IWL_DEBUG_INFO("f/w package hdr ucode version raw = 0x%x\n",
1796                        priv->ucode_ver);
1797         IWL_DEBUG_INFO("f/w package hdr runtime inst size = %u\n",
1798                        inst_size);
1799         IWL_DEBUG_INFO("f/w package hdr runtime data size = %u\n",
1800                        data_size);
1801         IWL_DEBUG_INFO("f/w package hdr init inst size = %u\n",
1802                        init_size);
1803         IWL_DEBUG_INFO("f/w package hdr init data size = %u\n",
1804                        init_data_size);
1805         IWL_DEBUG_INFO("f/w package hdr boot inst size = %u\n",
1806                        boot_size);
1807
1808         /* Verify size of file vs. image size info in file's header */
1809         if (ucode_raw->size < sizeof(*ucode) +
1810                 inst_size + data_size + init_size +
1811                 init_data_size + boot_size) {
1812
1813                 IWL_DEBUG_INFO("uCode file size %d too small\n",
1814                                (int)ucode_raw->size);
1815                 ret = -EINVAL;
1816                 goto err_release;
1817         }
1818
1819         /* Verify that uCode images will fit in card's SRAM */
1820         if (inst_size > priv->hw_params.max_inst_size) {
1821                 IWL_DEBUG_INFO("uCode instr len %d too large to fit in\n",
1822                                inst_size);
1823                 ret = -EINVAL;
1824                 goto err_release;
1825         }
1826
1827         if (data_size > priv->hw_params.max_data_size) {
1828                 IWL_DEBUG_INFO("uCode data len %d too large to fit in\n",
1829                                 data_size);
1830                 ret = -EINVAL;
1831                 goto err_release;
1832         }
1833         if (init_size > priv->hw_params.max_inst_size) {
1834                 IWL_DEBUG_INFO
1835                     ("uCode init instr len %d too large to fit in\n",
1836                       init_size);
1837                 ret = -EINVAL;
1838                 goto err_release;
1839         }
1840         if (init_data_size > priv->hw_params.max_data_size) {
1841                 IWL_DEBUG_INFO
1842                     ("uCode init data len %d too large to fit in\n",
1843                       init_data_size);
1844                 ret = -EINVAL;
1845                 goto err_release;
1846         }
1847         if (boot_size > priv->hw_params.max_bsm_size) {
1848                 IWL_DEBUG_INFO
1849                     ("uCode boot instr len %d too large to fit in\n",
1850                       boot_size);
1851                 ret = -EINVAL;
1852                 goto err_release;
1853         }
1854
1855         /* Allocate ucode buffers for card's bus-master loading ... */
1856
1857         /* Runtime instructions and 2 copies of data:
1858          * 1) unmodified from disk
1859          * 2) backup cache for save/restore during power-downs */
1860         priv->ucode_code.len = inst_size;
1861         iwl_alloc_fw_desc(priv->pci_dev, &priv->ucode_code);
1862
1863         priv->ucode_data.len = data_size;
1864         iwl_alloc_fw_desc(priv->pci_dev, &priv->ucode_data);
1865
1866         priv->ucode_data_backup.len = data_size;
1867         iwl_alloc_fw_desc(priv->pci_dev, &priv->ucode_data_backup);
1868
1869         /* Initialization instructions and data */
1870         if (init_size && init_data_size) {
1871                 priv->ucode_init.len = init_size;
1872                 iwl_alloc_fw_desc(priv->pci_dev, &priv->ucode_init);
1873
1874                 priv->ucode_init_data.len = init_data_size;
1875                 iwl_alloc_fw_desc(priv->pci_dev, &priv->ucode_init_data);
1876
1877                 if (!priv->ucode_init.v_addr || !priv->ucode_init_data.v_addr)
1878                         goto err_pci_alloc;
1879         }
1880
1881         /* Bootstrap (instructions only, no data) */
1882         if (boot_size) {
1883                 priv->ucode_boot.len = boot_size;
1884                 iwl_alloc_fw_desc(priv->pci_dev, &priv->ucode_boot);
1885
1886                 if (!priv->ucode_boot.v_addr)
1887                         goto err_pci_alloc;
1888         }
1889
1890         /* Copy images into buffers for card's bus-master reads ... */
1891
1892         /* Runtime instructions (first block of data in file) */
1893         src = &ucode->data[0];
1894         len = priv->ucode_code.len;
1895         IWL_DEBUG_INFO("Copying (but not loading) uCode instr len %Zd\n", len);
1896         memcpy(priv->ucode_code.v_addr, src, len);
1897         IWL_DEBUG_INFO("uCode instr buf vaddr = 0x%p, paddr = 0x%08x\n",
1898                 priv->ucode_code.v_addr, (u32)priv->ucode_code.p_addr);
1899
1900         /* Runtime data (2nd block)
1901          * NOTE:  Copy into backup buffer will be done in iwl_up()  */
1902         src = &ucode->data[inst_size];
1903         len = priv->ucode_data.len;
1904         IWL_DEBUG_INFO("Copying (but not loading) uCode data len %Zd\n", len);
1905         memcpy(priv->ucode_data.v_addr, src, len);
1906         memcpy(priv->ucode_data_backup.v_addr, src, len);
1907
1908         /* Initialization instructions (3rd block) */
1909         if (init_size) {
1910                 src = &ucode->data[inst_size + data_size];
1911                 len = priv->ucode_init.len;
1912                 IWL_DEBUG_INFO("Copying (but not loading) init instr len %Zd\n",
1913                                 len);
1914                 memcpy(priv->ucode_init.v_addr, src, len);
1915         }
1916
1917         /* Initialization data (4th block) */
1918         if (init_data_size) {
1919                 src = &ucode->data[inst_size + data_size + init_size];
1920                 len = priv->ucode_init_data.len;
1921                 IWL_DEBUG_INFO("Copying (but not loading) init data len %Zd\n",
1922                                len);
1923                 memcpy(priv->ucode_init_data.v_addr, src, len);
1924         }
1925
1926         /* Bootstrap instructions (5th block) */
1927         src = &ucode->data[inst_size + data_size + init_size + init_data_size];
1928         len = priv->ucode_boot.len;
1929         IWL_DEBUG_INFO("Copying (but not loading) boot instr len %Zd\n", len);
1930         memcpy(priv->ucode_boot.v_addr, src, len);
1931
1932         /* We have our copies now, allow OS release its copies */
1933         release_firmware(ucode_raw);
1934         return 0;
1935
1936  err_pci_alloc:
1937         IWL_ERR(priv, "failed to allocate pci memory\n");
1938         ret = -ENOMEM;
1939         iwl_dealloc_ucode_pci(priv);
1940
1941  err_release:
1942         release_firmware(ucode_raw);
1943
1944  error:
1945         return ret;
1946 }
1947
1948 /* temporary */
1949 static int iwl_mac_beacon_update(struct ieee80211_hw *hw,
1950                                  struct sk_buff *skb);
1951
1952 /**
1953  * iwl_alive_start - called after REPLY_ALIVE notification received
1954  *                   from protocol/runtime uCode (initialization uCode's
1955  *                   Alive gets handled by iwl_init_alive_start()).
1956  */
1957 static void iwl_alive_start(struct iwl_priv *priv)
1958 {
1959         int ret = 0;
1960
1961         IWL_DEBUG_INFO("Runtime Alive received.\n");
1962
1963         if (priv->card_alive.is_valid != UCODE_VALID_OK) {
1964                 /* We had an error bringing up the hardware, so take it
1965                  * all the way back down so we can try again */
1966                 IWL_DEBUG_INFO("Alive failed.\n");
1967                 goto restart;
1968         }
1969
1970         /* Initialize uCode has loaded Runtime uCode ... verify inst image.
1971          * This is a paranoid check, because we would not have gotten the
1972          * "runtime" alive if code weren't properly loaded.  */
1973         if (iwl_verify_ucode(priv)) {
1974                 /* Runtime instruction load was bad;
1975                  * take it all the way back down so we can try again */
1976                 IWL_DEBUG_INFO("Bad runtime uCode load.\n");
1977                 goto restart;
1978         }
1979
1980         iwl_clear_stations_table(priv);
1981         ret = priv->cfg->ops->lib->alive_notify(priv);
1982         if (ret) {
1983                 IWL_WARN(priv,
1984                         "Could not complete ALIVE transition [ntf]: %d\n", ret);
1985                 goto restart;
1986         }
1987
1988         /* After the ALIVE response, we can send host commands to the uCode */
1989         set_bit(STATUS_ALIVE, &priv->status);
1990
1991         if (iwl_is_rfkill(priv))
1992                 return;
1993
1994         ieee80211_wake_queues(priv->hw);
1995
1996         priv->active_rate = priv->rates_mask;
1997         priv->active_rate_basic = priv->rates_mask & IWL_BASIC_RATES_MASK;
1998
1999         if (iwl_is_associated(priv)) {
2000                 struct iwl_rxon_cmd *active_rxon =
2001                                 (struct iwl_rxon_cmd *)&priv->active_rxon;
2002
2003                 memcpy(&priv->staging_rxon, &priv->active_rxon,
2004                        sizeof(priv->staging_rxon));
2005                 active_rxon->filter_flags &= ~RXON_FILTER_ASSOC_MSK;
2006         } else {
2007                 /* Initialize our rx_config data */
2008                 iwl_connection_init_rx_config(priv, priv->iw_mode);
2009                 memcpy(priv->staging_rxon.node_addr, priv->mac_addr, ETH_ALEN);
2010         }
2011
2012         /* Configure Bluetooth device coexistence support */
2013         iwl_send_bt_config(priv);
2014
2015         iwl_reset_run_time_calib(priv);
2016
2017         /* Configure the adapter for unassociated operation */
2018         iwl_commit_rxon(priv);
2019
2020         /* At this point, the NIC is initialized and operational */
2021         iwl_rf_kill_ct_config(priv);
2022
2023         iwl_leds_register(priv);
2024
2025         IWL_DEBUG_INFO("ALIVE processing complete.\n");
2026         set_bit(STATUS_READY, &priv->status);
2027         wake_up_interruptible(&priv->wait_command_queue);
2028
2029         if (priv->error_recovering)
2030                 iwl_error_recovery(priv);
2031
2032         iwl_power_update_mode(priv, 1);
2033
2034         /* reassociate for ADHOC mode */
2035         if (priv->vif && (priv->iw_mode == NL80211_IFTYPE_ADHOC)) {
2036                 struct sk_buff *beacon = ieee80211_beacon_get(priv->hw,
2037                                                                 priv->vif);
2038                 if (beacon)
2039                         iwl_mac_beacon_update(priv->hw, beacon);
2040         }
2041
2042
2043         if (test_and_clear_bit(STATUS_MODE_PENDING, &priv->status))
2044                 iwl_set_mode(priv, priv->iw_mode);
2045
2046         return;
2047
2048  restart:
2049         queue_work(priv->workqueue, &priv->restart);
2050 }
2051
2052 static void iwl_cancel_deferred_work(struct iwl_priv *priv);
2053
2054 static void __iwl_down(struct iwl_priv *priv)
2055 {
2056         unsigned long flags;
2057         int exit_pending = test_bit(STATUS_EXIT_PENDING, &priv->status);
2058
2059         IWL_DEBUG_INFO(DRV_NAME " is going down\n");
2060
2061         if (!exit_pending)
2062                 set_bit(STATUS_EXIT_PENDING, &priv->status);
2063
2064         iwl_leds_unregister(priv);
2065
2066         iwl_clear_stations_table(priv);
2067
2068         /* Unblock any waiting calls */
2069         wake_up_interruptible_all(&priv->wait_command_queue);
2070
2071         /* Wipe out the EXIT_PENDING status bit if we are not actually
2072          * exiting the module */
2073         if (!exit_pending)
2074                 clear_bit(STATUS_EXIT_PENDING, &priv->status);
2075
2076         /* stop and reset the on-board processor */
2077         iwl_write32(priv, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET);
2078
2079         /* tell the device to stop sending interrupts */
2080         spin_lock_irqsave(&priv->lock, flags);
2081         iwl_disable_interrupts(priv);
2082         spin_unlock_irqrestore(&priv->lock, flags);
2083         iwl_synchronize_irq(priv);
2084
2085         if (priv->mac80211_registered)
2086                 ieee80211_stop_queues(priv->hw);
2087
2088         /* If we have not previously called iwl_init() then
2089          * clear all bits but the RF Kill and SUSPEND bits and return */
2090         if (!iwl_is_init(priv)) {
2091                 priv->status = test_bit(STATUS_RF_KILL_HW, &priv->status) <<
2092                                         STATUS_RF_KILL_HW |
2093                                test_bit(STATUS_RF_KILL_SW, &priv->status) <<
2094                                         STATUS_RF_KILL_SW |
2095                                test_bit(STATUS_GEO_CONFIGURED, &priv->status) <<
2096                                         STATUS_GEO_CONFIGURED |
2097                                test_bit(STATUS_IN_SUSPEND, &priv->status) <<
2098                                         STATUS_IN_SUSPEND |
2099                                test_bit(STATUS_EXIT_PENDING, &priv->status) <<
2100                                         STATUS_EXIT_PENDING;
2101                 goto exit;
2102         }
2103
2104         /* ...otherwise clear out all the status bits but the RF Kill and
2105          * SUSPEND bits and continue taking the NIC down. */
2106         priv->status &= test_bit(STATUS_RF_KILL_HW, &priv->status) <<
2107                                 STATUS_RF_KILL_HW |
2108                         test_bit(STATUS_RF_KILL_SW, &priv->status) <<
2109                                 STATUS_RF_KILL_SW |
2110                         test_bit(STATUS_GEO_CONFIGURED, &priv->status) <<
2111                                 STATUS_GEO_CONFIGURED |
2112                         test_bit(STATUS_IN_SUSPEND, &priv->status) <<
2113                                 STATUS_IN_SUSPEND |
2114                         test_bit(STATUS_FW_ERROR, &priv->status) <<
2115                                 STATUS_FW_ERROR |
2116                        test_bit(STATUS_EXIT_PENDING, &priv->status) <<
2117                                 STATUS_EXIT_PENDING;
2118
2119         spin_lock_irqsave(&priv->lock, flags);
2120         iwl_clear_bit(priv, CSR_GP_CNTRL,
2121                          CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
2122         spin_unlock_irqrestore(&priv->lock, flags);
2123
2124         iwl_txq_ctx_stop(priv);
2125         iwl_rxq_stop(priv);
2126
2127         spin_lock_irqsave(&priv->lock, flags);
2128         if (!iwl_grab_nic_access(priv)) {
2129                 iwl_write_prph(priv, APMG_CLK_DIS_REG,
2130                                          APMG_CLK_VAL_DMA_CLK_RQT);
2131                 iwl_release_nic_access(priv);
2132         }
2133         spin_unlock_irqrestore(&priv->lock, flags);
2134
2135         udelay(5);
2136
2137         /* FIXME: apm_ops.suspend(priv) */
2138         if (exit_pending || test_bit(STATUS_IN_SUSPEND, &priv->status))
2139                 priv->cfg->ops->lib->apm_ops.stop(priv);
2140         else
2141                 priv->cfg->ops->lib->apm_ops.reset(priv);
2142  exit:
2143         memset(&priv->card_alive, 0, sizeof(struct iwl_alive_resp));
2144
2145         if (priv->ibss_beacon)
2146                 dev_kfree_skb(priv->ibss_beacon);
2147         priv->ibss_beacon = NULL;
2148
2149         /* clear out any free frames */
2150         iwl_clear_free_frames(priv);
2151 }
2152
2153 static void iwl_down(struct iwl_priv *priv)
2154 {
2155         mutex_lock(&priv->mutex);
2156         __iwl_down(priv);
2157         mutex_unlock(&priv->mutex);
2158
2159         iwl_cancel_deferred_work(priv);
2160 }
2161
2162 #define MAX_HW_RESTARTS 5
2163
2164 static int __iwl_up(struct iwl_priv *priv)
2165 {
2166         int i;
2167         int ret;
2168
2169         if (test_bit(STATUS_EXIT_PENDING, &priv->status)) {
2170                 IWL_WARN(priv, "Exit pending; will not bring the NIC up\n");
2171                 return -EIO;
2172         }
2173
2174         if (!priv->ucode_data_backup.v_addr || !priv->ucode_data.v_addr) {
2175                 IWL_ERR(priv, "ucode not available for device bringup\n");
2176                 return -EIO;
2177         }
2178
2179         /* If platform's RF_KILL switch is NOT set to KILL */
2180         if (iwl_read32(priv, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)
2181                 clear_bit(STATUS_RF_KILL_HW, &priv->status);
2182         else
2183                 set_bit(STATUS_RF_KILL_HW, &priv->status);
2184
2185         if (iwl_is_rfkill(priv)) {
2186                 iwl_enable_interrupts(priv);
2187                 IWL_WARN(priv, "Radio disabled by %s RF Kill switch\n",
2188                     test_bit(STATUS_RF_KILL_HW, &priv->status) ? "HW" : "SW");
2189                 return 0;
2190         }
2191
2192         iwl_write32(priv, CSR_INT, 0xFFFFFFFF);
2193
2194         ret = iwl_hw_nic_init(priv);
2195         if (ret) {
2196                 IWL_ERR(priv, "Unable to init nic\n");
2197                 return ret;
2198         }
2199
2200         /* make sure rfkill handshake bits are cleared */
2201         iwl_write32(priv, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL);
2202         iwl_write32(priv, CSR_UCODE_DRV_GP1_CLR,
2203                     CSR_UCODE_DRV_GP1_BIT_CMD_BLOCKED);
2204
2205         /* clear (again), then enable host interrupts */
2206         iwl_write32(priv, CSR_INT, 0xFFFFFFFF);
2207         iwl_enable_interrupts(priv);
2208
2209         /* really make sure rfkill handshake bits are cleared */
2210         iwl_write32(priv, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL);
2211         iwl_write32(priv, CSR_UCODE_DRV_GP1_CLR, CSR_UCODE_SW_BIT_RFKILL);
2212
2213         /* Copy original ucode data image from disk into backup cache.
2214          * This will be used to initialize the on-board processor's
2215          * data SRAM for a clean start when the runtime program first loads. */
2216         memcpy(priv->ucode_data_backup.v_addr, priv->ucode_data.v_addr,
2217                priv->ucode_data.len);
2218
2219         for (i = 0; i < MAX_HW_RESTARTS; i++) {
2220
2221                 iwl_clear_stations_table(priv);
2222
2223                 /* load bootstrap state machine,
2224                  * load bootstrap program into processor's memory,
2225                  * prepare to load the "initialize" uCode */
2226                 ret = priv->cfg->ops->lib->load_ucode(priv);
2227
2228                 if (ret) {
2229                         IWL_ERR(priv, "Unable to set up bootstrap uCode: %d\n",
2230                                 ret);
2231                         continue;
2232                 }
2233
2234                 /* Clear out the uCode error bit if it is set */
2235                 clear_bit(STATUS_FW_ERROR, &priv->status);
2236
2237                 /* start card; "initialize" will load runtime ucode */
2238                 iwl_nic_start(priv);
2239
2240                 IWL_DEBUG_INFO(DRV_NAME " is coming up\n");
2241
2242                 return 0;
2243         }
2244
2245         set_bit(STATUS_EXIT_PENDING, &priv->status);
2246         __iwl_down(priv);
2247         clear_bit(STATUS_EXIT_PENDING, &priv->status);
2248
2249         /* tried to restart and config the device for as long as our
2250          * patience could withstand */
2251         IWL_ERR(priv, "Unable to initialize device after %d attempts.\n", i);
2252         return -EIO;
2253 }
2254
2255
2256 /*****************************************************************************
2257  *
2258  * Workqueue callbacks
2259  *
2260  *****************************************************************************/
2261
2262 static void iwl_bg_init_alive_start(struct work_struct *data)
2263 {
2264         struct iwl_priv *priv =
2265             container_of(data, struct iwl_priv, init_alive_start.work);
2266
2267         if (test_bit(STATUS_EXIT_PENDING, &priv->status))
2268                 return;
2269
2270         mutex_lock(&priv->mutex);
2271         priv->cfg->ops->lib->init_alive_start(priv);
2272         mutex_unlock(&priv->mutex);
2273 }
2274
2275 static void iwl_bg_alive_start(struct work_struct *data)
2276 {
2277         struct iwl_priv *priv =
2278             container_of(data, struct iwl_priv, alive_start.work);
2279
2280         if (test_bit(STATUS_EXIT_PENDING, &priv->status))
2281                 return;
2282
2283         mutex_lock(&priv->mutex);
2284         iwl_alive_start(priv);
2285         mutex_unlock(&priv->mutex);
2286 }
2287
2288 static void iwl_bg_run_time_calib_work(struct work_struct *work)
2289 {
2290         struct iwl_priv *priv = container_of(work, struct iwl_priv,
2291                         run_time_calib_work);
2292
2293         mutex_lock(&priv->mutex);
2294
2295         if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
2296             test_bit(STATUS_SCANNING, &priv->status)) {
2297                 mutex_unlock(&priv->mutex);
2298                 return;
2299         }
2300
2301         if (priv->start_calib) {
2302                 iwl_chain_noise_calibration(priv, &priv->statistics);
2303
2304                 iwl_sensitivity_calibration(priv, &priv->statistics);
2305         }
2306
2307         mutex_unlock(&priv->mutex);
2308         return;
2309 }
2310
2311 static void iwl_bg_up(struct work_struct *data)
2312 {
2313         struct iwl_priv *priv = container_of(data, struct iwl_priv, up);
2314
2315         if (test_bit(STATUS_EXIT_PENDING, &priv->status))
2316                 return;
2317
2318         mutex_lock(&priv->mutex);
2319         __iwl_up(priv);
2320         mutex_unlock(&priv->mutex);
2321         iwl_rfkill_set_hw_state(priv);
2322 }
2323
2324 static void iwl_bg_restart(struct work_struct *data)
2325 {
2326         struct iwl_priv *priv = container_of(data, struct iwl_priv, restart);
2327
2328         if (test_bit(STATUS_EXIT_PENDING, &priv->status))
2329                 return;
2330
2331         iwl_down(priv);
2332         queue_work(priv->workqueue, &priv->up);
2333 }
2334
2335 static void iwl_bg_rx_replenish(struct work_struct *data)
2336 {
2337         struct iwl_priv *priv =
2338             container_of(data, struct iwl_priv, rx_replenish);
2339
2340         if (test_bit(STATUS_EXIT_PENDING, &priv->status))
2341                 return;
2342
2343         mutex_lock(&priv->mutex);
2344         iwl_rx_replenish(priv);
2345         mutex_unlock(&priv->mutex);
2346 }
2347
2348 #define IWL_DELAY_NEXT_SCAN (HZ*2)
2349
2350 static void iwl_post_associate(struct iwl_priv *priv)
2351 {
2352         struct ieee80211_conf *conf = NULL;
2353         int ret = 0;
2354         unsigned long flags;
2355
2356         if (priv->iw_mode == NL80211_IFTYPE_AP) {
2357                 IWL_ERR(priv, "%s Should not be called in AP mode\n", __func__);
2358                 return;
2359         }
2360
2361         IWL_DEBUG_ASSOC("Associated as %d to: %pM\n",
2362                         priv->assoc_id, priv->active_rxon.bssid_addr);
2363
2364
2365         if (test_bit(STATUS_EXIT_PENDING, &priv->status))
2366                 return;
2367
2368
2369         if (!priv->vif || !priv->is_open)
2370                 return;
2371
2372         iwl_power_cancel_timeout(priv);
2373         iwl_scan_cancel_timeout(priv, 200);
2374
2375         conf = ieee80211_get_hw_conf(priv->hw);
2376
2377         priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
2378         iwl_commit_rxon(priv);
2379
2380         iwl_setup_rxon_timing(priv);
2381         ret = iwl_send_cmd_pdu(priv, REPLY_RXON_TIMING,
2382                               sizeof(priv->rxon_timing), &priv->rxon_timing);
2383         if (ret)
2384                 IWL_WARN(priv, "REPLY_RXON_TIMING failed - "
2385                             "Attempting to continue.\n");
2386
2387         priv->staging_rxon.filter_flags |= RXON_FILTER_ASSOC_MSK;
2388
2389         iwl_set_rxon_ht(priv, &priv->current_ht_config);
2390
2391         iwl_set_rxon_chain(priv);
2392         priv->staging_rxon.assoc_id = cpu_to_le16(priv->assoc_id);
2393
2394         IWL_DEBUG_ASSOC("assoc id %d beacon interval %d\n",
2395                         priv->assoc_id, priv->beacon_int);
2396
2397         if (priv->assoc_capability & WLAN_CAPABILITY_SHORT_PREAMBLE)
2398                 priv->staging_rxon.flags |= RXON_FLG_SHORT_PREAMBLE_MSK;
2399         else
2400                 priv->staging_rxon.flags &= ~RXON_FLG_SHORT_PREAMBLE_MSK;
2401
2402         if (priv->staging_rxon.flags & RXON_FLG_BAND_24G_MSK) {
2403                 if (priv->assoc_capability & WLAN_CAPABILITY_SHORT_SLOT_TIME)
2404                         priv->staging_rxon.flags |= RXON_FLG_SHORT_SLOT_MSK;
2405                 else
2406                         priv->staging_rxon.flags &= ~RXON_FLG_SHORT_SLOT_MSK;
2407
2408                 if (priv->iw_mode == NL80211_IFTYPE_ADHOC)
2409                         priv->staging_rxon.flags &= ~RXON_FLG_SHORT_SLOT_MSK;
2410
2411         }
2412
2413         iwl_commit_rxon(priv);
2414
2415         switch (priv->iw_mode) {
2416         case NL80211_IFTYPE_STATION:
2417                 break;
2418
2419         case NL80211_IFTYPE_ADHOC:
2420
2421                 /* assume default assoc id */
2422                 priv->assoc_id = 1;
2423
2424                 iwl_rxon_add_station(priv, priv->bssid, 0);
2425                 iwl_send_beacon_cmd(priv);
2426
2427                 break;
2428
2429         default:
2430                 IWL_ERR(priv, "%s Should not be called in %d mode\n",
2431                           __func__, priv->iw_mode);
2432                 break;
2433         }
2434
2435         if (priv->iw_mode == NL80211_IFTYPE_ADHOC)
2436                 priv->assoc_station_added = 1;
2437
2438         spin_lock_irqsave(&priv->lock, flags);
2439         iwl_activate_qos(priv, 0);
2440         spin_unlock_irqrestore(&priv->lock, flags);
2441
2442         /* the chain noise calibration will enabled PM upon completion
2443          * If chain noise has already been run, then we need to enable
2444          * power management here */
2445         if (priv->chain_noise_data.state == IWL_CHAIN_NOISE_DONE)
2446                 iwl_power_enable_management(priv);
2447
2448         /* Enable Rx differential gain and sensitivity calibrations */
2449         iwl_chain_noise_reset(priv);
2450         priv->start_calib = 1;
2451
2452 }
2453
2454 /*****************************************************************************
2455  *
2456  * mac80211 entry point functions
2457  *
2458  *****************************************************************************/
2459
2460 #define UCODE_READY_TIMEOUT     (4 * HZ)
2461
2462 static int iwl_mac_start(struct ieee80211_hw *hw)
2463 {
2464         struct iwl_priv *priv = hw->priv;
2465         int ret;
2466
2467         IWL_DEBUG_MAC80211("enter\n");
2468
2469         /* we should be verifying the device is ready to be opened */
2470         mutex_lock(&priv->mutex);
2471
2472         memset(&priv->staging_rxon, 0, sizeof(struct iwl_rxon_cmd));
2473         /* fetch ucode file from disk, alloc and copy to bus-master buffers ...
2474          * ucode filename and max sizes are card-specific. */
2475
2476         if (!priv->ucode_code.len) {
2477                 ret = iwl_read_ucode(priv);
2478                 if (ret) {
2479                         IWL_ERR(priv, "Could not read microcode: %d\n", ret);
2480                         mutex_unlock(&priv->mutex);
2481                         return ret;
2482                 }
2483         }
2484
2485         ret = __iwl_up(priv);
2486
2487         mutex_unlock(&priv->mutex);
2488
2489         iwl_rfkill_set_hw_state(priv);
2490
2491         if (ret)
2492                 return ret;
2493
2494         if (iwl_is_rfkill(priv))
2495                 goto out;
2496
2497         IWL_DEBUG_INFO("Start UP work done.\n");
2498
2499         if (test_bit(STATUS_IN_SUSPEND, &priv->status))
2500                 return 0;
2501
2502         /* Wait for START_ALIVE from Run Time ucode. Otherwise callbacks from
2503          * mac80211 will not be run successfully. */
2504         ret = wait_event_interruptible_timeout(priv->wait_command_queue,
2505                         test_bit(STATUS_READY, &priv->status),
2506                         UCODE_READY_TIMEOUT);
2507         if (!ret) {
2508                 if (!test_bit(STATUS_READY, &priv->status)) {
2509                         IWL_ERR(priv, "START_ALIVE timeout after %dms.\n",
2510                                 jiffies_to_msecs(UCODE_READY_TIMEOUT));
2511                         return -ETIMEDOUT;
2512                 }
2513         }
2514
2515 out:
2516         priv->is_open = 1;
2517         IWL_DEBUG_MAC80211("leave\n");
2518         return 0;
2519 }
2520
2521 static void iwl_mac_stop(struct ieee80211_hw *hw)
2522 {
2523         struct iwl_priv *priv = hw->priv;
2524
2525         IWL_DEBUG_MAC80211("enter\n");
2526
2527         if (!priv->is_open) {
2528                 IWL_DEBUG_MAC80211("leave - skip\n");
2529                 return;
2530         }
2531
2532         priv->is_open = 0;
2533
2534         if (iwl_is_ready_rf(priv)) {
2535                 /* stop mac, cancel any scan request and clear
2536                  * RXON_FILTER_ASSOC_MSK BIT
2537                  */
2538                 mutex_lock(&priv->mutex);
2539                 iwl_scan_cancel_timeout(priv, 100);
2540                 mutex_unlock(&priv->mutex);
2541         }
2542
2543         iwl_down(priv);
2544
2545         flush_workqueue(priv->workqueue);
2546
2547         /* enable interrupts again in order to receive rfkill changes */
2548         iwl_write32(priv, CSR_INT, 0xFFFFFFFF);
2549         iwl_enable_interrupts(priv);
2550
2551         IWL_DEBUG_MAC80211("leave\n");
2552 }
2553
2554 static int iwl_mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
2555 {
2556         struct iwl_priv *priv = hw->priv;
2557
2558         IWL_DEBUG_MACDUMP("enter\n");
2559
2560         IWL_DEBUG_TX("dev->xmit(%d bytes) at rate 0x%02x\n", skb->len,
2561                      ieee80211_get_tx_rate(hw, IEEE80211_SKB_CB(skb))->bitrate);
2562
2563         if (iwl_tx_skb(priv, skb))
2564                 dev_kfree_skb_any(skb);
2565
2566         IWL_DEBUG_MACDUMP("leave\n");
2567         return NETDEV_TX_OK;
2568 }
2569
2570 static int iwl_mac_add_interface(struct ieee80211_hw *hw,
2571                                  struct ieee80211_if_init_conf *conf)
2572 {
2573         struct iwl_priv *priv = hw->priv;
2574         unsigned long flags;
2575
2576         IWL_DEBUG_MAC80211("enter: type %d\n", conf->type);
2577
2578         if (priv->vif) {
2579                 IWL_DEBUG_MAC80211("leave - vif != NULL\n");
2580                 return -EOPNOTSUPP;
2581         }
2582
2583         spin_lock_irqsave(&priv->lock, flags);
2584         priv->vif = conf->vif;
2585         priv->iw_mode = conf->type;
2586
2587         spin_unlock_irqrestore(&priv->lock, flags);
2588
2589         mutex_lock(&priv->mutex);
2590
2591         if (conf->mac_addr) {
2592                 IWL_DEBUG_MAC80211("Set %pM\n", conf->mac_addr);
2593                 memcpy(priv->mac_addr, conf->mac_addr, ETH_ALEN);
2594         }
2595
2596         if (iwl_set_mode(priv, conf->type) == -EAGAIN)
2597                 /* we are not ready, will run again when ready */
2598                 set_bit(STATUS_MODE_PENDING, &priv->status);
2599
2600         mutex_unlock(&priv->mutex);
2601
2602         IWL_DEBUG_MAC80211("leave\n");
2603         return 0;
2604 }
2605
2606 /**
2607  * iwl_mac_config - mac80211 config callback
2608  *
2609  * We ignore conf->flags & IEEE80211_CONF_SHORT_SLOT_TIME since it seems to
2610  * be set inappropriately and the driver currently sets the hardware up to
2611  * use it whenever needed.
2612  */
2613 static int iwl_mac_config(struct ieee80211_hw *hw, u32 changed)
2614 {
2615         struct iwl_priv *priv = hw->priv;
2616         const struct iwl_channel_info *ch_info;
2617         struct ieee80211_conf *conf = &hw->conf;
2618         unsigned long flags;
2619         int ret = 0;
2620         u16 channel;
2621
2622         mutex_lock(&priv->mutex);
2623         IWL_DEBUG_MAC80211("enter to channel %d\n", conf->channel->hw_value);
2624
2625         priv->current_ht_config.is_ht = conf_is_ht(conf);
2626
2627         if (conf->radio_enabled && iwl_radio_kill_sw_enable_radio(priv)) {
2628                 IWL_DEBUG_MAC80211("leave - RF-KILL - waiting for uCode\n");
2629                 goto out;
2630         }
2631
2632         if (!conf->radio_enabled)
2633                 iwl_radio_kill_sw_disable_radio(priv);
2634
2635         if (!iwl_is_ready(priv)) {
2636                 IWL_DEBUG_MAC80211("leave - not ready\n");
2637                 ret = -EIO;
2638                 goto out;
2639         }
2640
2641         if (unlikely(!priv->cfg->mod_params->disable_hw_scan &&
2642                      test_bit(STATUS_SCANNING, &priv->status))) {
2643                 IWL_DEBUG_MAC80211("leave - scanning\n");
2644                 mutex_unlock(&priv->mutex);
2645                 return 0;
2646         }
2647
2648         channel = ieee80211_frequency_to_channel(conf->channel->center_freq);
2649         ch_info = iwl_get_channel_info(priv, conf->channel->band, channel);
2650         if (!is_channel_valid(ch_info)) {
2651                 IWL_DEBUG_MAC80211("leave - invalid channel\n");
2652                 ret = -EINVAL;
2653                 goto out;
2654         }
2655
2656         if (priv->iw_mode == NL80211_IFTYPE_ADHOC &&
2657             !is_channel_ibss(ch_info)) {
2658                 IWL_ERR(priv, "channel %d in band %d not IBSS channel\n",
2659                         conf->channel->hw_value, conf->channel->band);
2660                 ret = -EINVAL;
2661                 goto out;
2662         }
2663
2664         spin_lock_irqsave(&priv->lock, flags);
2665
2666
2667         /* if we are switching from ht to 2.4 clear flags
2668          * from any ht related info since 2.4 does not
2669          * support ht */
2670         if ((le16_to_cpu(priv->staging_rxon.channel) != channel)
2671 #ifdef IEEE80211_CONF_CHANNEL_SWITCH
2672             && !(conf->flags & IEEE80211_CONF_CHANNEL_SWITCH)
2673 #endif
2674         )
2675                 priv->staging_rxon.flags = 0;
2676
2677         iwl_set_rxon_channel(priv, conf->channel);
2678
2679         iwl_set_flags_for_band(priv, conf->channel->band);
2680
2681         /* The list of supported rates and rate mask can be different
2682          * for each band; since the band may have changed, reset
2683          * the rate mask to what mac80211 lists */
2684         iwl_set_rate(priv);
2685
2686         spin_unlock_irqrestore(&priv->lock, flags);
2687
2688 #ifdef IEEE80211_CONF_CHANNEL_SWITCH
2689         if (conf->flags & IEEE80211_CONF_CHANNEL_SWITCH) {
2690                 iwl_hw_channel_switch(priv, conf->channel);
2691                 goto out;
2692         }
2693 #endif
2694
2695         if (!conf->radio_enabled) {
2696                 IWL_DEBUG_MAC80211("leave - radio disabled\n");
2697                 goto out;
2698         }
2699
2700         if (iwl_is_rfkill(priv)) {
2701                 IWL_DEBUG_MAC80211("leave - RF kill\n");
2702                 ret = -EIO;
2703                 goto out;
2704         }
2705
2706         if (conf->flags & IEEE80211_CONF_PS)
2707                 ret = iwl_power_set_user_mode(priv, IWL_POWER_INDEX_3);
2708         else
2709                 ret = iwl_power_set_user_mode(priv, IWL_POWER_MODE_CAM);
2710         if (ret)
2711                 IWL_DEBUG_MAC80211("Error setting power level\n");
2712
2713         IWL_DEBUG_MAC80211("TX Power old=%d new=%d\n",
2714                            priv->tx_power_user_lmt, conf->power_level);
2715
2716         iwl_set_tx_power(priv, conf->power_level, false);
2717
2718         iwl_set_rate(priv);
2719
2720         /* call to ensure that 4965 rx_chain is set properly in monitor mode */
2721         iwl_set_rxon_chain(priv);
2722
2723         if (memcmp(&priv->active_rxon,
2724                    &priv->staging_rxon, sizeof(priv->staging_rxon)))
2725                 iwl_commit_rxon(priv);
2726         else
2727                 IWL_DEBUG_INFO("No re-sending same RXON configuration.\n");
2728
2729         IWL_DEBUG_MAC80211("leave\n");
2730
2731 out:
2732         mutex_unlock(&priv->mutex);
2733         return ret;
2734 }
2735
2736 static void iwl_config_ap(struct iwl_priv *priv)
2737 {
2738         int ret = 0;
2739         unsigned long flags;
2740
2741         if (test_bit(STATUS_EXIT_PENDING, &priv->status))
2742                 return;
2743
2744         /* The following should be done only at AP bring up */
2745         if (!iwl_is_associated(priv)) {
2746
2747                 /* RXON - unassoc (to set timing command) */
2748                 priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
2749                 iwl_commit_rxon(priv);
2750
2751                 /* RXON Timing */
2752                 iwl_setup_rxon_timing(priv);
2753                 ret = iwl_send_cmd_pdu(priv, REPLY_RXON_TIMING,
2754                                 sizeof(priv->rxon_timing), &priv->rxon_timing);
2755                 if (ret)
2756                         IWL_WARN(priv, "REPLY_RXON_TIMING failed - "
2757                                         "Attempting to continue.\n");
2758
2759                 iwl_set_rxon_chain(priv);
2760
2761                 /* FIXME: what should be the assoc_id for AP? */
2762                 priv->staging_rxon.assoc_id = cpu_to_le16(priv->assoc_id);
2763                 if (priv->assoc_capability & WLAN_CAPABILITY_SHORT_PREAMBLE)
2764                         priv->staging_rxon.flags |=
2765                                 RXON_FLG_SHORT_PREAMBLE_MSK;
2766                 else
2767                         priv->staging_rxon.flags &=
2768                                 ~RXON_FLG_SHORT_PREAMBLE_MSK;
2769
2770                 if (priv->staging_rxon.flags & RXON_FLG_BAND_24G_MSK) {
2771                         if (priv->assoc_capability &
2772                                 WLAN_CAPABILITY_SHORT_SLOT_TIME)
2773                                 priv->staging_rxon.flags |=
2774                                         RXON_FLG_SHORT_SLOT_MSK;
2775                         else
2776                                 priv->staging_rxon.flags &=
2777                                         ~RXON_FLG_SHORT_SLOT_MSK;
2778
2779                         if (priv->iw_mode == NL80211_IFTYPE_ADHOC)
2780                                 priv->staging_rxon.flags &=
2781                                         ~RXON_FLG_SHORT_SLOT_MSK;
2782                 }
2783                 /* restore RXON assoc */
2784                 priv->staging_rxon.filter_flags |= RXON_FILTER_ASSOC_MSK;
2785                 iwl_commit_rxon(priv);
2786                 spin_lock_irqsave(&priv->lock, flags);
2787                 iwl_activate_qos(priv, 1);
2788                 spin_unlock_irqrestore(&priv->lock, flags);
2789                 iwl_rxon_add_station(priv, iwl_bcast_addr, 0);
2790         }
2791         iwl_send_beacon_cmd(priv);
2792
2793         /* FIXME - we need to add code here to detect a totally new
2794          * configuration, reset the AP, unassoc, rxon timing, assoc,
2795          * clear sta table, add BCAST sta... */
2796 }
2797
2798
2799 static int iwl_mac_config_interface(struct ieee80211_hw *hw,
2800                                         struct ieee80211_vif *vif,
2801                                     struct ieee80211_if_conf *conf)
2802 {
2803         struct iwl_priv *priv = hw->priv;
2804         int rc;
2805
2806         if (conf == NULL)
2807                 return -EIO;
2808
2809         if (priv->vif != vif) {
2810                 IWL_DEBUG_MAC80211("leave - priv->vif != vif\n");
2811                 return 0;
2812         }
2813
2814         if (priv->iw_mode == NL80211_IFTYPE_ADHOC &&
2815             conf->changed & IEEE80211_IFCC_BEACON) {
2816                 struct sk_buff *beacon = ieee80211_beacon_get(hw, vif);
2817                 if (!beacon)
2818                         return -ENOMEM;
2819                 mutex_lock(&priv->mutex);
2820                 rc = iwl_mac_beacon_update(hw, beacon);
2821                 mutex_unlock(&priv->mutex);
2822                 if (rc)
2823                         return rc;
2824         }
2825
2826         if (!iwl_is_alive(priv))
2827                 return -EAGAIN;
2828
2829         mutex_lock(&priv->mutex);
2830
2831         if (conf->bssid)
2832                 IWL_DEBUG_MAC80211("bssid: %pM\n", conf->bssid);
2833
2834 /*
2835  * very dubious code was here; the probe filtering flag is never set:
2836  *
2837         if (unlikely(test_bit(STATUS_SCANNING, &priv->status)) &&
2838             !(priv->hw->flags & IEEE80211_HW_NO_PROBE_FILTERING)) {
2839  */
2840
2841         if (priv->iw_mode == NL80211_IFTYPE_AP) {
2842                 if (!conf->bssid) {
2843                         conf->bssid = priv->mac_addr;
2844                         memcpy(priv->bssid, priv->mac_addr, ETH_ALEN);
2845                         IWL_DEBUG_MAC80211("bssid was set to: %pM\n",
2846                                            conf->bssid);
2847                 }
2848                 if (priv->ibss_beacon)
2849                         dev_kfree_skb(priv->ibss_beacon);
2850
2851                 priv->ibss_beacon = ieee80211_beacon_get(hw, vif);
2852         }
2853
2854         if (iwl_is_rfkill(priv))
2855                 goto done;
2856
2857         if (conf->bssid && !is_zero_ether_addr(conf->bssid) &&
2858             !is_multicast_ether_addr(conf->bssid)) {
2859                 /* If there is currently a HW scan going on in the background
2860                  * then we need to cancel it else the RXON below will fail. */
2861                 if (iwl_scan_cancel_timeout(priv, 100)) {
2862                         IWL_WARN(priv, "Aborted scan still in progress "
2863                                     "after 100ms\n");
2864                         IWL_DEBUG_MAC80211("leaving - scan abort failed.\n");
2865                         mutex_unlock(&priv->mutex);
2866                         return -EAGAIN;
2867                 }
2868                 memcpy(priv->staging_rxon.bssid_addr, conf->bssid, ETH_ALEN);
2869
2870                 /* TODO: Audit driver for usage of these members and see
2871                  * if mac80211 deprecates them (priv->bssid looks like it
2872                  * shouldn't be there, but I haven't scanned the IBSS code
2873                  * to verify) - jpk */
2874                 memcpy(priv->bssid, conf->bssid, ETH_ALEN);
2875
2876                 if (priv->iw_mode == NL80211_IFTYPE_AP)
2877                         iwl_config_ap(priv);
2878                 else {
2879                         rc = iwl_commit_rxon(priv);
2880                         if ((priv->iw_mode == NL80211_IFTYPE_STATION) && rc)
2881                                 iwl_rxon_add_station(
2882                                         priv, priv->active_rxon.bssid_addr, 1);
2883                 }
2884
2885         } else {
2886                 iwl_scan_cancel_timeout(priv, 100);
2887                 priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
2888                 iwl_commit_rxon(priv);
2889         }
2890
2891  done:
2892         IWL_DEBUG_MAC80211("leave\n");
2893         mutex_unlock(&priv->mutex);
2894
2895         return 0;
2896 }
2897
2898 static void iwl_configure_filter(struct ieee80211_hw *hw,
2899                                  unsigned int changed_flags,
2900                                  unsigned int *total_flags,
2901                                  int mc_count, struct dev_addr_list *mc_list)
2902 {
2903         struct iwl_priv *priv = hw->priv;
2904         __le32 *filter_flags = &priv->staging_rxon.filter_flags;
2905
2906         IWL_DEBUG_MAC80211("Enter: changed: 0x%x, total: 0x%x\n",
2907                         changed_flags, *total_flags);
2908
2909         if (changed_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS)) {
2910                 if (*total_flags & (FIF_OTHER_BSS | FIF_PROMISC_IN_BSS))
2911                         *filter_flags |= RXON_FILTER_PROMISC_MSK;
2912                 else
2913                         *filter_flags &= ~RXON_FILTER_PROMISC_MSK;
2914         }
2915         if (changed_flags & FIF_ALLMULTI) {
2916                 if (*total_flags & FIF_ALLMULTI)
2917                         *filter_flags |= RXON_FILTER_ACCEPT_GRP_MSK;
2918                 else
2919                         *filter_flags &= ~RXON_FILTER_ACCEPT_GRP_MSK;
2920         }
2921         if (changed_flags & FIF_CONTROL) {
2922                 if (*total_flags & FIF_CONTROL)
2923                         *filter_flags |= RXON_FILTER_CTL2HOST_MSK;
2924                 else
2925                         *filter_flags &= ~RXON_FILTER_CTL2HOST_MSK;
2926         }
2927         if (changed_flags & FIF_BCN_PRBRESP_PROMISC) {
2928                 if (*total_flags & FIF_BCN_PRBRESP_PROMISC)
2929                         *filter_flags |= RXON_FILTER_BCON_AWARE_MSK;
2930                 else
2931                         *filter_flags &= ~RXON_FILTER_BCON_AWARE_MSK;
2932         }
2933
2934         /* We avoid iwl_commit_rxon here to commit the new filter flags
2935          * since mac80211 will call ieee80211_hw_config immediately.
2936          * (mc_list is not supported at this time). Otherwise, we need to
2937          * queue a background iwl_commit_rxon work.
2938          */
2939
2940         *total_flags &= FIF_OTHER_BSS | FIF_ALLMULTI | FIF_PROMISC_IN_BSS |
2941                         FIF_BCN_PRBRESP_PROMISC | FIF_CONTROL;
2942 }
2943
2944 static void iwl_mac_remove_interface(struct ieee80211_hw *hw,
2945                                      struct ieee80211_if_init_conf *conf)
2946 {
2947         struct iwl_priv *priv = hw->priv;
2948
2949         IWL_DEBUG_MAC80211("enter\n");
2950
2951         mutex_lock(&priv->mutex);
2952
2953         if (iwl_is_ready_rf(priv)) {
2954                 iwl_scan_cancel_timeout(priv, 100);
2955                 priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
2956                 iwl_commit_rxon(priv);
2957         }
2958         if (priv->vif == conf->vif) {
2959                 priv->vif = NULL;
2960                 memset(priv->bssid, 0, ETH_ALEN);
2961         }
2962         mutex_unlock(&priv->mutex);
2963
2964         IWL_DEBUG_MAC80211("leave\n");
2965
2966 }
2967
2968 #define IWL_DELAY_NEXT_SCAN_AFTER_ASSOC (HZ*6)
2969 static void iwl_bss_info_changed(struct ieee80211_hw *hw,
2970                                      struct ieee80211_vif *vif,
2971                                      struct ieee80211_bss_conf *bss_conf,
2972                                      u32 changes)
2973 {
2974         struct iwl_priv *priv = hw->priv;
2975
2976         IWL_DEBUG_MAC80211("changes = 0x%X\n", changes);
2977
2978         if (changes & BSS_CHANGED_ERP_PREAMBLE) {
2979                 IWL_DEBUG_MAC80211("ERP_PREAMBLE %d\n",
2980                                    bss_conf->use_short_preamble);
2981                 if (bss_conf->use_short_preamble)
2982                         priv->staging_rxon.flags |= RXON_FLG_SHORT_PREAMBLE_MSK;
2983                 else
2984                         priv->staging_rxon.flags &= ~RXON_FLG_SHORT_PREAMBLE_MSK;
2985         }
2986
2987         if (changes & BSS_CHANGED_ERP_CTS_PROT) {
2988                 IWL_DEBUG_MAC80211("ERP_CTS %d\n", bss_conf->use_cts_prot);
2989                 if (bss_conf->use_cts_prot && (priv->band != IEEE80211_BAND_5GHZ))
2990                         priv->staging_rxon.flags |= RXON_FLG_TGG_PROTECT_MSK;
2991                 else
2992                         priv->staging_rxon.flags &= ~RXON_FLG_TGG_PROTECT_MSK;
2993         }
2994
2995         if (changes & BSS_CHANGED_HT) {
2996                 iwl_ht_conf(priv, bss_conf);
2997                 iwl_set_rxon_chain(priv);
2998         }
2999
3000         if (changes & BSS_CHANGED_ASSOC) {
3001                 IWL_DEBUG_MAC80211("ASSOC %d\n", bss_conf->assoc);
3002                 /* This should never happen as this function should
3003                  * never be called from interrupt context. */
3004                 if (WARN_ON_ONCE(in_interrupt()))
3005                         return;
3006                 if (bss_conf->assoc) {
3007                         priv->assoc_id = bss_conf->aid;
3008                         priv->beacon_int = bss_conf->beacon_int;
3009                         priv->power_data.dtim_period = bss_conf->dtim_period;
3010                         priv->timestamp = bss_conf->timestamp;
3011                         priv->assoc_capability = bss_conf->assoc_capability;
3012
3013                         /* we have just associated, don't start scan too early
3014                          * leave time for EAPOL exchange to complete
3015                          */
3016                         priv->next_scan_jiffies = jiffies +
3017                                         IWL_DELAY_NEXT_SCAN_AFTER_ASSOC;
3018                         mutex_lock(&priv->mutex);
3019                         iwl_post_associate(priv);
3020                         mutex_unlock(&priv->mutex);
3021                 } else {
3022                         priv->assoc_id = 0;
3023                         IWL_DEBUG_MAC80211("DISASSOC %d\n", bss_conf->assoc);
3024                 }
3025         } else if (changes && iwl_is_associated(priv) && priv->assoc_id) {
3026                         IWL_DEBUG_MAC80211("Associated Changes %d\n", changes);
3027                         iwl_send_rxon_assoc(priv);
3028         }
3029
3030 }
3031
3032 static int iwl_mac_hw_scan(struct ieee80211_hw *hw, u8 *ssid, size_t ssid_len)
3033 {
3034         unsigned long flags;
3035         struct iwl_priv *priv = hw->priv;
3036         int ret;
3037
3038         IWL_DEBUG_MAC80211("enter\n");
3039
3040         mutex_lock(&priv->mutex);
3041         spin_lock_irqsave(&priv->lock, flags);
3042
3043         if (!iwl_is_ready_rf(priv)) {
3044                 ret = -EIO;
3045                 IWL_DEBUG_MAC80211("leave - not ready or exit pending\n");
3046                 goto out_unlock;
3047         }
3048
3049         /* We don't schedule scan within next_scan_jiffies period.
3050          * Avoid scanning during possible EAPOL exchange, return
3051          * success immediately.
3052          */
3053         if (priv->next_scan_jiffies &&
3054             time_after(priv->next_scan_jiffies, jiffies)) {
3055                 IWL_DEBUG_SCAN("scan rejected: within next scan period\n");
3056                 queue_work(priv->workqueue, &priv->scan_completed);
3057                 ret = 0;
3058                 goto out_unlock;
3059         }
3060
3061         /* if we just finished scan ask for delay */
3062         if (iwl_is_associated(priv) && priv->last_scan_jiffies &&
3063             time_after(priv->last_scan_jiffies + IWL_DELAY_NEXT_SCAN, jiffies)) {
3064                 IWL_DEBUG_SCAN("scan rejected: within previous scan period\n");
3065                 queue_work(priv->workqueue, &priv->scan_completed);
3066                 ret = 0;
3067                 goto out_unlock;
3068         }
3069
3070         if (ssid_len) {
3071                 priv->one_direct_scan = 1;
3072                 priv->direct_ssid_len =  min_t(u8, ssid_len, IW_ESSID_MAX_SIZE);
3073                 memcpy(priv->direct_ssid, ssid, priv->direct_ssid_len);
3074         } else {
3075                 priv->one_direct_scan = 0;
3076         }
3077
3078         ret = iwl_scan_initiate(priv);
3079
3080         IWL_DEBUG_MAC80211("leave\n");
3081
3082 out_unlock:
3083         spin_unlock_irqrestore(&priv->lock, flags);
3084         mutex_unlock(&priv->mutex);
3085
3086         return ret;
3087 }
3088
3089 static void iwl_mac_update_tkip_key(struct ieee80211_hw *hw,
3090                         struct ieee80211_key_conf *keyconf, const u8 *addr,
3091                         u32 iv32, u16 *phase1key)
3092 {
3093
3094         struct iwl_priv *priv = hw->priv;
3095         IWL_DEBUG_MAC80211("enter\n");
3096
3097         iwl_update_tkip_key(priv, keyconf, addr, iv32, phase1key);
3098
3099         IWL_DEBUG_MAC80211("leave\n");
3100 }
3101
3102 static int iwl_mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
3103                            struct ieee80211_vif *vif,
3104                            struct ieee80211_sta *sta,
3105                            struct ieee80211_key_conf *key)
3106 {
3107         struct iwl_priv *priv = hw->priv;
3108         const u8 *addr;
3109         int ret;
3110         u8 sta_id;
3111         bool is_default_wep_key = false;
3112
3113         IWL_DEBUG_MAC80211("enter\n");
3114
3115         if (priv->hw_params.sw_crypto) {
3116                 IWL_DEBUG_MAC80211("leave - hwcrypto disabled\n");
3117                 return -EOPNOTSUPP;
3118         }
3119         addr = sta ? sta->addr : iwl_bcast_addr;
3120         sta_id = iwl_find_station(priv, addr);
3121         if (sta_id == IWL_INVALID_STATION) {
3122                 IWL_DEBUG_MAC80211("leave - %pM not in station map.\n",
3123                                    addr);
3124                 return -EINVAL;
3125
3126         }
3127
3128         mutex_lock(&priv->mutex);
3129         iwl_scan_cancel_timeout(priv, 100);
3130         mutex_unlock(&priv->mutex);
3131
3132         /* If we are getting WEP group key and we didn't receive any key mapping
3133          * so far, we are in legacy wep mode (group key only), otherwise we are
3134          * in 1X mode.
3135          * In legacy wep mode, we use another host command to the uCode */
3136         if (key->alg == ALG_WEP && sta_id == priv->hw_params.bcast_sta_id &&
3137                 priv->iw_mode != NL80211_IFTYPE_AP) {
3138                 if (cmd == SET_KEY)
3139                         is_default_wep_key = !priv->key_mapping_key;
3140                 else
3141                         is_default_wep_key =
3142                                         (key->hw_key_idx == HW_KEY_DEFAULT);
3143         }
3144
3145         switch (cmd) {
3146         case SET_KEY:
3147                 if (is_default_wep_key)
3148                         ret = iwl_set_default_wep_key(priv, key);
3149                 else
3150                         ret = iwl_set_dynamic_key(priv, key, sta_id);
3151
3152                 IWL_DEBUG_MAC80211("enable hwcrypto key\n");
3153                 break;
3154         case DISABLE_KEY:
3155                 if (is_default_wep_key)
3156                         ret = iwl_remove_default_wep_key(priv, key);
3157                 else
3158                         ret = iwl_remove_dynamic_key(priv, key, sta_id);
3159
3160                 IWL_DEBUG_MAC80211("disable hwcrypto key\n");
3161                 break;
3162         default:
3163                 ret = -EINVAL;
3164         }
3165
3166         IWL_DEBUG_MAC80211("leave\n");
3167
3168         return ret;
3169 }
3170
3171 static int iwl_mac_conf_tx(struct ieee80211_hw *hw, u16 queue,
3172                            const struct ieee80211_tx_queue_params *params)
3173 {
3174         struct iwl_priv *priv = hw->priv;
3175         unsigned long flags;
3176         int q;
3177
3178         IWL_DEBUG_MAC80211("enter\n");
3179
3180         if (!iwl_is_ready_rf(priv)) {
3181                 IWL_DEBUG_MAC80211("leave - RF not ready\n");
3182                 return -EIO;
3183         }
3184
3185         if (queue >= AC_NUM) {
3186                 IWL_DEBUG_MAC80211("leave - queue >= AC_NUM %d\n", queue);
3187                 return 0;
3188         }
3189
3190         q = AC_NUM - 1 - queue;
3191
3192         spin_lock_irqsave(&priv->lock, flags);
3193
3194         priv->qos_data.def_qos_parm.ac[q].cw_min = cpu_to_le16(params->cw_min);
3195         priv->qos_data.def_qos_parm.ac[q].cw_max = cpu_to_le16(params->cw_max);
3196         priv->qos_data.def_qos_parm.ac[q].aifsn = params->aifs;
3197         priv->qos_data.def_qos_parm.ac[q].edca_txop =
3198                         cpu_to_le16((params->txop * 32));
3199
3200         priv->qos_data.def_qos_parm.ac[q].reserved1 = 0;
3201         priv->qos_data.qos_active = 1;
3202
3203         if (priv->iw_mode == NL80211_IFTYPE_AP)
3204                 iwl_activate_qos(priv, 1);
3205         else if (priv->assoc_id && iwl_is_associated(priv))
3206                 iwl_activate_qos(priv, 0);
3207
3208         spin_unlock_irqrestore(&priv->lock, flags);
3209
3210         IWL_DEBUG_MAC80211("leave\n");
3211         return 0;
3212 }
3213
3214 static int iwl_mac_ampdu_action(struct ieee80211_hw *hw,
3215                              enum ieee80211_ampdu_mlme_action action,
3216                              struct ieee80211_sta *sta, u16 tid, u16 *ssn)
3217 {
3218         struct iwl_priv *priv = hw->priv;
3219
3220         IWL_DEBUG_HT("A-MPDU action on addr %pM tid %d\n",
3221                      sta->addr, tid);
3222
3223         if (!(priv->cfg->sku & IWL_SKU_N))
3224                 return -EACCES;
3225
3226         switch (action) {
3227         case IEEE80211_AMPDU_RX_START:
3228                 IWL_DEBUG_HT("start Rx\n");
3229                 return iwl_sta_rx_agg_start(priv, sta->addr, tid, *ssn);
3230         case IEEE80211_AMPDU_RX_STOP:
3231                 IWL_DEBUG_HT("stop Rx\n");
3232                 return iwl_sta_rx_agg_stop(priv, sta->addr, tid);
3233         case IEEE80211_AMPDU_TX_START:
3234                 IWL_DEBUG_HT("start Tx\n");
3235                 return iwl_tx_agg_start(priv, sta->addr, tid, ssn);
3236         case IEEE80211_AMPDU_TX_STOP:
3237                 IWL_DEBUG_HT("stop Tx\n");
3238                 return iwl_tx_agg_stop(priv, sta->addr, tid);
3239         default:
3240                 IWL_DEBUG_HT("unknown\n");
3241                 return -EINVAL;
3242                 break;
3243         }
3244         return 0;
3245 }
3246
3247 static int iwl_mac_get_tx_stats(struct ieee80211_hw *hw,
3248                                 struct ieee80211_tx_queue_stats *stats)
3249 {
3250         struct iwl_priv *priv = hw->priv;
3251         int i, avail;
3252         struct iwl_tx_queue *txq;
3253         struct iwl_queue *q;
3254         unsigned long flags;
3255
3256         IWL_DEBUG_MAC80211("enter\n");
3257
3258         if (!iwl_is_ready_rf(priv)) {
3259                 IWL_DEBUG_MAC80211("leave - RF not ready\n");
3260                 return -EIO;
3261         }
3262
3263         spin_lock_irqsave(&priv->lock, flags);
3264
3265         for (i = 0; i < AC_NUM; i++) {
3266                 txq = &priv->txq[i];
3267                 q = &txq->q;
3268                 avail = iwl_queue_space(q);
3269
3270                 stats[i].len = q->n_window - avail;
3271                 stats[i].limit = q->n_window - q->high_mark;
3272                 stats[i].count = q->n_window;
3273
3274         }
3275         spin_unlock_irqrestore(&priv->lock, flags);
3276
3277         IWL_DEBUG_MAC80211("leave\n");
3278
3279         return 0;
3280 }
3281
3282 static int iwl_mac_get_stats(struct ieee80211_hw *hw,
3283                              struct ieee80211_low_level_stats *stats)
3284 {
3285         struct iwl_priv *priv = hw->priv;
3286
3287         priv = hw->priv;
3288         IWL_DEBUG_MAC80211("enter\n");
3289         IWL_DEBUG_MAC80211("leave\n");
3290
3291         return 0;
3292 }
3293
3294 static void iwl_mac_reset_tsf(struct ieee80211_hw *hw)
3295 {
3296         struct iwl_priv *priv = hw->priv;
3297         unsigned long flags;
3298
3299         mutex_lock(&priv->mutex);
3300         IWL_DEBUG_MAC80211("enter\n");
3301
3302         spin_lock_irqsave(&priv->lock, flags);
3303         memset(&priv->current_ht_config, 0, sizeof(struct iwl_ht_info));
3304         spin_unlock_irqrestore(&priv->lock, flags);
3305
3306         iwl_reset_qos(priv);
3307
3308         spin_lock_irqsave(&priv->lock, flags);
3309         priv->assoc_id = 0;
3310         priv->assoc_capability = 0;
3311         priv->assoc_station_added = 0;
3312
3313         /* new association get rid of ibss beacon skb */
3314         if (priv->ibss_beacon)
3315                 dev_kfree_skb(priv->ibss_beacon);
3316
3317         priv->ibss_beacon = NULL;
3318
3319         priv->beacon_int = priv->hw->conf.beacon_int;
3320         priv->timestamp = 0;
3321         if ((priv->iw_mode == NL80211_IFTYPE_STATION))
3322                 priv->beacon_int = 0;
3323
3324         spin_unlock_irqrestore(&priv->lock, flags);
3325
3326         if (!iwl_is_ready_rf(priv)) {
3327                 IWL_DEBUG_MAC80211("leave - not ready\n");
3328                 mutex_unlock(&priv->mutex);
3329                 return;
3330         }
3331
3332         /* we are restarting association process
3333          * clear RXON_FILTER_ASSOC_MSK bit
3334          */
3335         if (priv->iw_mode != NL80211_IFTYPE_AP) {
3336                 iwl_scan_cancel_timeout(priv, 100);
3337                 priv->staging_rxon.filter_flags &= ~RXON_FILTER_ASSOC_MSK;
3338                 iwl_commit_rxon(priv);
3339         }
3340
3341         iwl_power_update_mode(priv, 0);
3342
3343         /* Per mac80211.h: This is only used in IBSS mode... */
3344         if (priv->iw_mode != NL80211_IFTYPE_ADHOC) {
3345
3346                 /* switch to CAM during association period.
3347                  * the ucode will block any association/authentication
3348                  * frome during assiciation period if it can not hear
3349                  * the AP because of PM. the timer enable PM back is
3350                  * association do not complete
3351                  */
3352                 if (priv->hw->conf.channel->flags & (IEEE80211_CHAN_PASSIVE_SCAN |
3353                                                      IEEE80211_CHAN_RADAR))
3354                                 iwl_power_disable_management(priv, 3000);
3355
3356                 IWL_DEBUG_MAC80211("leave - not in IBSS\n");
3357                 mutex_unlock(&priv->mutex);
3358                 return;
3359         }
3360
3361         iwl_set_rate(priv);
3362
3363         mutex_unlock(&priv->mutex);
3364
3365         IWL_DEBUG_MAC80211("leave\n");
3366 }
3367
3368 static int iwl_mac_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
3369 {
3370         struct iwl_priv *priv = hw->priv;
3371         unsigned long flags;
3372         __le64 timestamp;
3373
3374         IWL_DEBUG_MAC80211("enter\n");
3375
3376         if (!iwl_is_ready_rf(priv)) {
3377                 IWL_DEBUG_MAC80211("leave - RF not ready\n");
3378                 return -EIO;
3379         }
3380
3381         if (priv->iw_mode != NL80211_IFTYPE_ADHOC) {
3382                 IWL_DEBUG_MAC80211("leave - not IBSS\n");
3383                 return -EIO;
3384         }
3385
3386         spin_lock_irqsave(&priv->lock, flags);
3387
3388         if (priv->ibss_beacon)
3389                 dev_kfree_skb(priv->ibss_beacon);
3390
3391         priv->ibss_beacon = skb;
3392
3393         priv->assoc_id = 0;
3394         timestamp = ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp;
3395         priv->timestamp = le64_to_cpu(timestamp);
3396
3397         IWL_DEBUG_MAC80211("leave\n");
3398         spin_unlock_irqrestore(&priv->lock, flags);
3399
3400         iwl_reset_qos(priv);
3401
3402         iwl_post_associate(priv);
3403
3404
3405         return 0;
3406 }
3407
3408 /*****************************************************************************
3409  *
3410  * sysfs attributes
3411  *
3412  *****************************************************************************/
3413
3414 #ifdef CONFIG_IWLWIFI_DEBUG
3415
3416 /*
3417  * The following adds a new attribute to the sysfs representation
3418  * of this device driver (i.e. a new file in /sys/class/net/wlan0/device/)
3419  * used for controlling the debug level.
3420  *
3421  * See the level definitions in iwl for details.
3422  */
3423
3424 static ssize_t show_debug_level(struct device *d,
3425                                 struct device_attribute *attr, char *buf)
3426 {
3427         struct iwl_priv *priv = d->driver_data;
3428
3429         return sprintf(buf, "0x%08X\n", priv->debug_level);
3430 }
3431 static ssize_t store_debug_level(struct device *d,
3432                                 struct device_attribute *attr,
3433                                  const char *buf, size_t count)
3434 {
3435         struct iwl_priv *priv = d->driver_data;
3436         unsigned long val;
3437         int ret;
3438
3439         ret = strict_strtoul(buf, 0, &val);
3440         if (ret)
3441                 IWL_ERR(priv, "%s is not in hex or decimal form.\n", buf);
3442         else
3443                 priv->debug_level = val;
3444
3445         return strnlen(buf, count);
3446 }
3447
3448 static DEVICE_ATTR(debug_level, S_IWUSR | S_IRUGO,
3449                         show_debug_level, store_debug_level);
3450
3451
3452 #endif /* CONFIG_IWLWIFI_DEBUG */
3453
3454
3455 static ssize_t show_version(struct device *d,
3456                                 struct device_attribute *attr, char *buf)
3457 {
3458         struct iwl_priv *priv = d->driver_data;
3459         struct iwl_alive_resp *palive = &priv->card_alive;
3460         ssize_t pos = 0;
3461         u16 eeprom_ver;
3462
3463         if (palive->is_valid)
3464                 pos += sprintf(buf + pos,
3465                                 "fw version: 0x%01X.0x%01X.0x%01X.0x%01X\n"
3466                                 "fw type: 0x%01X 0x%01X\n",
3467                                 palive->ucode_major, palive->ucode_minor,
3468                                 palive->sw_rev[0], palive->sw_rev[1],
3469                                 palive->ver_type, palive->ver_subtype);
3470         else
3471                 pos += sprintf(buf + pos, "fw not loaded\n");
3472
3473         if (priv->eeprom) {
3474                 eeprom_ver = iwl_eeprom_query16(priv, EEPROM_VERSION);
3475                 pos += sprintf(buf + pos, "EEPROM version: 0x%x\n",
3476                                  eeprom_ver);
3477         } else {
3478                 pos += sprintf(buf + pos, "EEPROM not initialzed\n");
3479         }
3480
3481         return pos;
3482 }
3483
3484 static DEVICE_ATTR(version, S_IWUSR | S_IRUGO, show_version, NULL);
3485
3486 static ssize_t show_temperature(struct device *d,
3487                                 struct device_attribute *attr, char *buf)
3488 {
3489         struct iwl_priv *priv = (struct iwl_priv *)d->driver_data;
3490
3491         if (!iwl_is_alive(priv))
3492                 return -EAGAIN;
3493
3494         return sprintf(buf, "%d\n", priv->temperature);
3495 }
3496
3497 static DEVICE_ATTR(temperature, S_IRUGO, show_temperature, NULL);
3498
3499 static ssize_t show_tx_power(struct device *d,
3500                              struct device_attribute *attr, char *buf)
3501 {
3502         struct iwl_priv *priv = (struct iwl_priv *)d->driver_data;
3503
3504         if (!iwl_is_ready_rf(priv))
3505                 return sprintf(buf, "off\n");
3506         else
3507                 return sprintf(buf, "%d\n", priv->tx_power_user_lmt);
3508 }
3509
3510 static ssize_t store_tx_power(struct device *d,
3511                               struct device_attribute *attr,
3512                               const char *buf, size_t count)
3513 {
3514         struct iwl_priv *priv = (struct iwl_priv *)d->driver_data;
3515         unsigned long val;
3516         int ret;
3517
3518         ret = strict_strtoul(buf, 10, &val);
3519         if (ret)
3520                 IWL_INFO(priv, "%s is not in decimal form.\n", buf);
3521         else
3522                 iwl_set_tx_power(priv, val, false);
3523
3524         return count;
3525 }
3526
3527 static DEVICE_ATTR(tx_power, S_IWUSR | S_IRUGO, show_tx_power, store_tx_power);
3528
3529 static ssize_t show_flags(struct device *d,
3530                           struct device_attribute *attr, char *buf)
3531 {
3532         struct iwl_priv *priv = (struct iwl_priv *)d->driver_data;
3533
3534         return sprintf(buf, "0x%04X\n", priv->active_rxon.flags);
3535 }
3536
3537 static ssize_t store_flags(struct device *d,
3538                            struct device_attribute *attr,
3539                            const char *buf, size_t count)
3540 {
3541         struct iwl_priv *priv = (struct iwl_priv *)d->driver_data;
3542         unsigned long val;
3543         u32 flags;
3544         int ret = strict_strtoul(buf, 0, &val);
3545         if (ret)
3546                 return ret;
3547         flags = (u32)val;
3548
3549         mutex_lock(&priv->mutex);
3550         if (le32_to_cpu(priv->staging_rxon.flags) != flags) {
3551                 /* Cancel any currently running scans... */
3552                 if (iwl_scan_cancel_timeout(priv, 100))
3553                         IWL_WARN(priv, "Could not cancel scan.\n");
3554                 else {
3555                         IWL_DEBUG_INFO("Commit rxon.flags = 0x%04X\n", flags);
3556                         priv->staging_rxon.flags = cpu_to_le32(flags);
3557                         iwl_commit_rxon(priv);
3558                 }
3559         }
3560         mutex_unlock(&priv->mutex);
3561
3562         return count;
3563 }
3564
3565 static DEVICE_ATTR(flags, S_IWUSR | S_IRUGO, show_flags, store_flags);
3566
3567 static ssize_t show_filter_flags(struct device *d,
3568                                  struct device_attribute *attr, char *buf)
3569 {
3570         struct iwl_priv *priv = (struct iwl_priv *)d->driver_data;
3571
3572         return sprintf(buf, "0x%04X\n",
3573                 le32_to_cpu(priv->active_rxon.filter_flags));
3574 }
3575
3576 static ssize_t store_filter_flags(struct device *d,
3577                                   struct device_attribute *attr,
3578                                   const char *buf, size_t count)
3579 {
3580         struct iwl_priv *priv = (struct iwl_priv *)d->driver_data;
3581         unsigned long val;
3582         u32 filter_flags;
3583         int ret = strict_strtoul(buf, 0, &val);
3584         if (ret)
3585                 return ret;
3586         filter_flags = (u32)val;
3587
3588         mutex_lock(&priv->mutex);
3589         if (le32_to_cpu(priv->staging_rxon.filter_flags) != filter_flags) {
3590                 /* Cancel any currently running scans... */
3591                 if (iwl_scan_cancel_timeout(priv, 100))
3592                         IWL_WARN(priv, "Could not cancel scan.\n");
3593                 else {
3594                         IWL_DEBUG_INFO("Committing rxon.filter_flags = "
3595                                        "0x%04X\n", filter_flags);
3596                         priv->staging_rxon.filter_flags =
3597                                 cpu_to_le32(filter_flags);
3598                         iwl_commit_rxon(priv);
3599                 }
3600         }
3601         mutex_unlock(&priv->mutex);
3602
3603         return count;
3604 }
3605
3606 static DEVICE_ATTR(filter_flags, S_IWUSR | S_IRUGO, show_filter_flags,
3607                    store_filter_flags);
3608
3609 static ssize_t store_power_level(struct device *d,
3610                                  struct device_attribute *attr,
3611                                  const char *buf, size_t count)
3612 {
3613         struct iwl_priv *priv = dev_get_drvdata(d);
3614         int ret;
3615         unsigned long mode;
3616
3617
3618         mutex_lock(&priv->mutex);
3619
3620         if (!iwl_is_ready(priv)) {
3621                 ret = -EAGAIN;
3622                 goto out;
3623         }
3624
3625         ret = strict_strtoul(buf, 10, &mode);
3626         if (ret)
3627                 goto out;
3628
3629         ret = iwl_power_set_user_mode(priv, mode);
3630         if (ret) {
3631                 IWL_DEBUG_MAC80211("failed setting power mode.\n");
3632                 goto out;
3633         }
3634         ret = count;
3635
3636  out:
3637         mutex_unlock(&priv->mutex);
3638         return ret;
3639 }
3640
3641 static ssize_t show_power_level(struct device *d,
3642                                 struct device_attribute *attr, char *buf)
3643 {
3644         struct iwl_priv *priv = dev_get_drvdata(d);
3645         int mode = priv->power_data.user_power_setting;
3646         int system = priv->power_data.system_power_setting;
3647         int level = priv->power_data.power_mode;
3648         char *p = buf;
3649
3650         switch (system) {
3651         case IWL_POWER_SYS_AUTO:
3652                 p += sprintf(p, "SYSTEM:auto");
3653                 break;
3654         case IWL_POWER_SYS_AC:
3655                 p += sprintf(p, "SYSTEM:ac");
3656                 break;
3657         case IWL_POWER_SYS_BATTERY:
3658                 p += sprintf(p, "SYSTEM:battery");
3659                 break;
3660         }
3661
3662         p += sprintf(p, "\tMODE:%s", (mode < IWL_POWER_AUTO) ?
3663                         "fixed" : "auto");
3664         p += sprintf(p, "\tINDEX:%d", level);
3665         p += sprintf(p, "\n");
3666         return p - buf + 1;
3667 }
3668
3669 static DEVICE_ATTR(power_level, S_IWUSR | S_IRUSR, show_power_level,
3670                    store_power_level);
3671
3672
3673 static ssize_t show_statistics(struct device *d,
3674                                struct device_attribute *attr, char *buf)
3675 {
3676         struct iwl_priv *priv = dev_get_drvdata(d);
3677         u32 size = sizeof(struct iwl_notif_statistics);
3678         u32 len = 0, ofs = 0;
3679         u8 *data = (u8 *)&priv->statistics;
3680         int rc = 0;
3681
3682         if (!iwl_is_alive(priv))
3683                 return -EAGAIN;
3684
3685         mutex_lock(&priv->mutex);
3686         rc = iwl_send_statistics_request(priv, 0);
3687         mutex_unlock(&priv->mutex);
3688
3689         if (rc) {
3690                 len = sprintf(buf,
3691                               "Error sending statistics request: 0x%08X\n", rc);
3692                 return len;
3693         }
3694
3695         while (size && (PAGE_SIZE - len)) {
3696                 hex_dump_to_buffer(data + ofs, size, 16, 1, buf + len,
3697                                    PAGE_SIZE - len, 1);
3698                 len = strlen(buf);
3699                 if (PAGE_SIZE - len)
3700                         buf[len++] = '\n';
3701
3702                 ofs += 16;
3703                 size -= min(size, 16U);
3704         }
3705
3706         return len;
3707 }
3708
3709 static DEVICE_ATTR(statistics, S_IRUGO, show_statistics, NULL);
3710
3711
3712 /*****************************************************************************
3713  *
3714  * driver setup and teardown
3715  *
3716  *****************************************************************************/
3717
3718 static void iwl_setup_deferred_work(struct iwl_priv *priv)
3719 {
3720         priv->workqueue = create_workqueue(DRV_NAME);
3721
3722         init_waitqueue_head(&priv->wait_command_queue);
3723
3724         INIT_WORK(&priv->up, iwl_bg_up);
3725         INIT_WORK(&priv->restart, iwl_bg_restart);
3726         INIT_WORK(&priv->rx_replenish, iwl_bg_rx_replenish);
3727         INIT_WORK(&priv->rf_kill, iwl_bg_rf_kill);
3728         INIT_WORK(&priv->beacon_update, iwl_bg_beacon_update);
3729         INIT_WORK(&priv->run_time_calib_work, iwl_bg_run_time_calib_work);
3730         INIT_DELAYED_WORK(&priv->init_alive_start, iwl_bg_init_alive_start);
3731         INIT_DELAYED_WORK(&priv->alive_start, iwl_bg_alive_start);
3732
3733         iwl_setup_scan_deferred_work(priv);
3734         iwl_setup_power_deferred_work(priv);
3735
3736         if (priv->cfg->ops->lib->setup_deferred_work)
3737                 priv->cfg->ops->lib->setup_deferred_work(priv);
3738
3739         init_timer(&priv->statistics_periodic);
3740         priv->statistics_periodic.data = (unsigned long)priv;
3741         priv->statistics_periodic.function = iwl_bg_statistics_periodic;
3742
3743         tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
3744                      iwl_irq_tasklet, (unsigned long)priv);
3745 }
3746
3747 static void iwl_cancel_deferred_work(struct iwl_priv *priv)
3748 {
3749         if (priv->cfg->ops->lib->cancel_deferred_work)
3750                 priv->cfg->ops->lib->cancel_deferred_work(priv);
3751
3752         cancel_delayed_work_sync(&priv->init_alive_start);
3753         cancel_delayed_work(&priv->scan_check);
3754         cancel_delayed_work_sync(&priv->set_power_save);
3755         cancel_delayed_work(&priv->alive_start);
3756         cancel_work_sync(&priv->beacon_update);
3757         del_timer_sync(&priv->statistics_periodic);
3758 }
3759
3760 static struct attribute *iwl_sysfs_entries[] = {
3761         &dev_attr_flags.attr,
3762         &dev_attr_filter_flags.attr,
3763         &dev_attr_power_level.attr,
3764         &dev_attr_statistics.attr,
3765         &dev_attr_temperature.attr,
3766         &dev_attr_tx_power.attr,
3767 #ifdef CONFIG_IWLWIFI_DEBUG
3768         &dev_attr_debug_level.attr,
3769 #endif
3770         &dev_attr_version.attr,
3771
3772         NULL
3773 };
3774
3775 static struct attribute_group iwl_attribute_group = {
3776         .name = NULL,           /* put in device directory */
3777         .attrs = iwl_sysfs_entries,
3778 };
3779
3780 static struct ieee80211_ops iwl_hw_ops = {
3781         .tx = iwl_mac_tx,
3782         .start = iwl_mac_start,
3783         .stop = iwl_mac_stop,
3784         .add_interface = iwl_mac_add_interface,
3785         .remove_interface = iwl_mac_remove_interface,
3786         .config = iwl_mac_config,
3787         .config_interface = iwl_mac_config_interface,
3788         .configure_filter = iwl_configure_filter,
3789         .set_key = iwl_mac_set_key,
3790         .update_tkip_key = iwl_mac_update_tkip_key,
3791         .get_stats = iwl_mac_get_stats,
3792         .get_tx_stats = iwl_mac_get_tx_stats,
3793         .conf_tx = iwl_mac_conf_tx,
3794         .reset_tsf = iwl_mac_reset_tsf,
3795         .bss_info_changed = iwl_bss_info_changed,
3796         .ampdu_action = iwl_mac_ampdu_action,
3797         .hw_scan = iwl_mac_hw_scan
3798 };
3799
3800 static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3801 {
3802         int err = 0;
3803         struct iwl_priv *priv;
3804         struct ieee80211_hw *hw;
3805         struct iwl_cfg *cfg = (struct iwl_cfg *)(ent->driver_data);
3806         unsigned long flags;
3807         u16 pci_cmd;
3808
3809         /************************
3810          * 1. Allocating HW data
3811          ************************/
3812
3813         /* Disabling hardware scan means that mac80211 will perform scans
3814          * "the hard way", rather than using device's scan. */
3815         if (cfg->mod_params->disable_hw_scan) {
3816                 if (cfg->mod_params->debug & IWL_DL_INFO)
3817                         dev_printk(KERN_DEBUG, &(pdev->dev),
3818                                    "Disabling hw_scan\n");
3819                 iwl_hw_ops.hw_scan = NULL;
3820         }
3821
3822         hw = iwl_alloc_all(cfg, &iwl_hw_ops);
3823         if (!hw) {
3824                 err = -ENOMEM;
3825                 goto out;
3826         }
3827         priv = hw->priv;
3828         /* At this point both hw and priv are allocated. */
3829
3830         SET_IEEE80211_DEV(hw, &pdev->dev);
3831
3832         IWL_DEBUG_INFO("*** LOAD DRIVER ***\n");
3833         priv->cfg = cfg;
3834         priv->pci_dev = pdev;
3835
3836 #ifdef CONFIG_IWLWIFI_DEBUG
3837         priv->debug_level = priv->cfg->mod_params->debug;
3838         atomic_set(&priv->restrict_refcnt, 0);
3839 #endif
3840
3841         /**************************
3842          * 2. Initializing PCI bus
3843          **************************/
3844         if (pci_enable_device(pdev)) {
3845                 err = -ENODEV;
3846                 goto out_ieee80211_free_hw;
3847         }
3848
3849         pci_set_master(pdev);
3850
3851         err = pci_set_dma_mask(pdev, DMA_BIT_MASK(36));
3852         if (!err)
3853                 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(36));
3854         if (err) {
3855                 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
3856                 if (!err)
3857                         err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3858                 /* both attempts failed: */
3859                 if (err) {
3860                         IWL_WARN(priv, "No suitable DMA available.\n");
3861                         goto out_pci_disable_device;
3862                 }
3863         }
3864
3865         err = pci_request_regions(pdev, DRV_NAME);
3866         if (err)
3867                 goto out_pci_disable_device;
3868
3869         pci_set_drvdata(pdev, priv);
3870
3871
3872         /***********************
3873          * 3. Read REV register
3874          ***********************/
3875         priv->hw_base = pci_iomap(pdev, 0, 0);
3876         if (!priv->hw_base) {
3877                 err = -ENODEV;
3878                 goto out_pci_release_regions;
3879         }
3880
3881         IWL_DEBUG_INFO("pci_resource_len = 0x%08llx\n",
3882                 (unsigned long long) pci_resource_len(pdev, 0));
3883         IWL_DEBUG_INFO("pci_resource_base = %p\n", priv->hw_base);
3884
3885         iwl_hw_detect(priv);
3886         IWL_INFO(priv, "Detected Intel Wireless WiFi Link %s REV=0x%X\n",
3887                 priv->cfg->name, priv->hw_rev);
3888
3889         /* We disable the RETRY_TIMEOUT register (0x41) to keep
3890          * PCI Tx retries from interfering with C3 CPU state */
3891         pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00);
3892
3893         /* amp init */
3894         err = priv->cfg->ops->lib->apm_ops.init(priv);
3895         if (err < 0) {
3896                 IWL_DEBUG_INFO("Failed to init APMG\n");
3897                 goto out_iounmap;
3898         }
3899         /*****************
3900          * 4. Read EEPROM
3901          *****************/
3902         /* Read the EEPROM */
3903         err = iwl_eeprom_init(priv);
3904         if (err) {
3905                 IWL_ERR(priv, "Unable to init EEPROM\n");
3906                 goto out_iounmap;
3907         }
3908         err = iwl_eeprom_check_version(priv);
3909         if (err)
3910                 goto out_iounmap;
3911
3912         /* extract MAC Address */
3913         iwl_eeprom_get_mac(priv, priv->mac_addr);
3914         IWL_DEBUG_INFO("MAC address: %pM\n", priv->mac_addr);
3915         SET_IEEE80211_PERM_ADDR(priv->hw, priv->mac_addr);
3916
3917         /************************
3918          * 5. Setup HW constants
3919          ************************/
3920         if (iwl_set_hw_params(priv)) {
3921                 IWL_ERR(priv, "failed to set hw parameters\n");
3922                 goto out_free_eeprom;
3923         }
3924
3925         /*******************
3926          * 6. Setup priv
3927          *******************/
3928
3929         err = iwl_init_drv(priv);
3930         if (err)
3931                 goto out_free_eeprom;
3932         /* At this point both hw and priv are initialized. */
3933
3934         /**********************************
3935          * 7. Initialize module parameters
3936          **********************************/
3937
3938         /* Disable radio (SW RF KILL) via parameter when loading driver */
3939         if (priv->cfg->mod_params->disable) {
3940                 set_bit(STATUS_RF_KILL_SW, &priv->status);
3941                 IWL_DEBUG_INFO("Radio disabled.\n");
3942         }
3943
3944         /********************
3945          * 8. Setup services
3946          ********************/
3947         spin_lock_irqsave(&priv->lock, flags);
3948         iwl_disable_interrupts(priv);
3949         spin_unlock_irqrestore(&priv->lock, flags);
3950
3951         pci_enable_msi(priv->pci_dev);
3952
3953         err = request_irq(priv->pci_dev->irq, iwl_isr, IRQF_SHARED,
3954                           DRV_NAME, priv);
3955         if (err) {
3956                 IWL_ERR(priv, "Error allocating IRQ %d\n", priv->pci_dev->irq);
3957                 goto out_disable_msi;
3958         }
3959         err = sysfs_create_group(&pdev->dev.kobj, &iwl_attribute_group);
3960         if (err) {
3961                 IWL_ERR(priv, "failed to create sysfs device attributes\n");
3962                 goto out_uninit_drv;
3963         }
3964
3965         iwl_setup_deferred_work(priv);
3966         iwl_setup_rx_handlers(priv);
3967
3968         /**********************************
3969          * 9. Setup and register mac80211
3970          **********************************/
3971
3972         /* enable interrupts if needed: hw bug w/a */
3973         pci_read_config_word(priv->pci_dev, PCI_COMMAND, &pci_cmd);
3974         if (pci_cmd & PCI_COMMAND_INTX_DISABLE) {
3975                 pci_cmd &= ~PCI_COMMAND_INTX_DISABLE;
3976                 pci_write_config_word(priv->pci_dev, PCI_COMMAND, pci_cmd);
3977         }
3978
3979         iwl_enable_interrupts(priv);
3980
3981         err = iwl_setup_mac(priv);
3982         if (err)
3983                 goto out_remove_sysfs;
3984
3985         err = iwl_dbgfs_register(priv, DRV_NAME);
3986         if (err)
3987                 IWL_ERR(priv, "failed to create debugfs files\n");
3988
3989         /* If platform's RF_KILL switch is NOT set to KILL */
3990         if (iwl_read32(priv, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW)
3991                 clear_bit(STATUS_RF_KILL_HW, &priv->status);
3992         else
3993                 set_bit(STATUS_RF_KILL_HW, &priv->status);
3994
3995         err = iwl_rfkill_init(priv);
3996         if (err)
3997                 IWL_ERR(priv, "Unable to initialize RFKILL system. "
3998                                   "Ignoring error: %d\n", err);
3999         else
4000                 iwl_rfkill_set_hw_state(priv);
4001
4002         iwl_power_initialize(priv);
4003         return 0;
4004
4005  out_remove_sysfs:
4006         sysfs_remove_group(&pdev->dev.kobj, &iwl_attribute_group);
4007  out_disable_msi:
4008         pci_disable_msi(priv->pci_dev);
4009         pci_disable_device(priv->pci_dev);
4010  out_uninit_drv:
4011         iwl_uninit_drv(priv);
4012  out_free_eeprom:
4013         iwl_eeprom_free(priv);
4014  out_iounmap:
4015         pci_iounmap(pdev, priv->hw_base);
4016  out_pci_release_regions:
4017         pci_release_regions(pdev);
4018         pci_set_drvdata(pdev, NULL);
4019  out_pci_disable_device:
4020         pci_disable_device(pdev);
4021  out_ieee80211_free_hw:
4022         ieee80211_free_hw(priv->hw);
4023  out:
4024         return err;
4025 }
4026
4027 static void __devexit iwl_pci_remove(struct pci_dev *pdev)
4028 {
4029         struct iwl_priv *priv = pci_get_drvdata(pdev);
4030         unsigned long flags;
4031
4032         if (!priv)
4033                 return;
4034
4035         IWL_DEBUG_INFO("*** UNLOAD DRIVER ***\n");
4036
4037         iwl_dbgfs_unregister(priv);
4038         sysfs_remove_group(&pdev->dev.kobj, &iwl_attribute_group);
4039
4040         /* ieee80211_unregister_hw call wil cause iwl_mac_stop to
4041          * to be called and iwl_down since we are removing the device
4042          * we need to set STATUS_EXIT_PENDING bit.
4043          */
4044         set_bit(STATUS_EXIT_PENDING, &priv->status);
4045         if (priv->mac80211_registered) {
4046                 ieee80211_unregister_hw(priv->hw);
4047                 priv->mac80211_registered = 0;
4048         } else {
4049                 iwl_down(priv);
4050         }
4051
4052         /* make sure we flush any pending irq or
4053          * tasklet for the driver
4054          */
4055         spin_lock_irqsave(&priv->lock, flags);
4056         iwl_disable_interrupts(priv);
4057         spin_unlock_irqrestore(&priv->lock, flags);
4058
4059         iwl_synchronize_irq(priv);
4060
4061         iwl_rfkill_unregister(priv);
4062         iwl_dealloc_ucode_pci(priv);
4063
4064         if (priv->rxq.bd)
4065                 iwl_rx_queue_free(priv, &priv->rxq);
4066         iwl_hw_txq_ctx_free(priv);
4067
4068         iwl_clear_stations_table(priv);
4069         iwl_eeprom_free(priv);
4070
4071
4072         /*netif_stop_queue(dev); */
4073         flush_workqueue(priv->workqueue);
4074
4075         /* ieee80211_unregister_hw calls iwl_mac_stop, which flushes
4076          * priv->workqueue... so we can't take down the workqueue
4077          * until now... */
4078         destroy_workqueue(priv->workqueue);
4079         priv->workqueue = NULL;
4080
4081         free_irq(priv->pci_dev->irq, priv);
4082         pci_disable_msi(priv->pci_dev);
4083         pci_iounmap(pdev, priv->hw_base);
4084         pci_release_regions(pdev);
4085         pci_disable_device(pdev);
4086         pci_set_drvdata(pdev, NULL);
4087
4088         iwl_uninit_drv(priv);
4089
4090         if (priv->ibss_beacon)
4091                 dev_kfree_skb(priv->ibss_beacon);
4092
4093         ieee80211_free_hw(priv->hw);
4094 }
4095
4096 #ifdef CONFIG_PM
4097
4098 static int iwl_pci_suspend(struct pci_dev *pdev, pm_message_t state)
4099 {
4100         struct iwl_priv *priv = pci_get_drvdata(pdev);
4101
4102         if (priv->is_open) {
4103                 set_bit(STATUS_IN_SUSPEND, &priv->status);
4104                 iwl_mac_stop(priv->hw);
4105                 priv->is_open = 1;
4106         }
4107
4108         pci_save_state(pdev);
4109         pci_disable_device(pdev);
4110         pci_set_power_state(pdev, PCI_D3hot);
4111
4112         return 0;
4113 }
4114
4115 static int iwl_pci_resume(struct pci_dev *pdev)
4116 {
4117         struct iwl_priv *priv = pci_get_drvdata(pdev);
4118
4119         pci_set_power_state(pdev, PCI_D0);
4120         pci_enable_device(pdev);
4121         pci_restore_state(pdev);
4122         iwl_enable_interrupts(priv);
4123
4124         if (priv->is_open)
4125                 iwl_mac_start(priv->hw);
4126
4127         clear_bit(STATUS_IN_SUSPEND, &priv->status);
4128         return 0;
4129 }
4130
4131 #endif /* CONFIG_PM */
4132
4133 /*****************************************************************************
4134  *
4135  * driver and module entry point
4136  *
4137  *****************************************************************************/
4138
4139 /* Hardware specific file defines the PCI IDs table for that hardware module */
4140 static struct pci_device_id iwl_hw_card_ids[] = {
4141 #ifdef CONFIG_IWL4965
4142         {IWL_PCI_DEVICE(0x4229, PCI_ANY_ID, iwl4965_agn_cfg)},
4143         {IWL_PCI_DEVICE(0x4230, PCI_ANY_ID, iwl4965_agn_cfg)},
4144 #endif /* CONFIG_IWL4965 */
4145 #ifdef CONFIG_IWL5000
4146         {IWL_PCI_DEVICE(0x4232, 0x1205, iwl5100_bg_cfg)},
4147         {IWL_PCI_DEVICE(0x4232, 0x1305, iwl5100_bg_cfg)},
4148         {IWL_PCI_DEVICE(0x4232, 0x1206, iwl5100_abg_cfg)},
4149         {IWL_PCI_DEVICE(0x4232, 0x1306, iwl5100_abg_cfg)},
4150         {IWL_PCI_DEVICE(0x4232, 0x1326, iwl5100_abg_cfg)},
4151         {IWL_PCI_DEVICE(0x4237, 0x1216, iwl5100_abg_cfg)},
4152         {IWL_PCI_DEVICE(0x4232, PCI_ANY_ID, iwl5100_agn_cfg)},
4153         {IWL_PCI_DEVICE(0x4235, PCI_ANY_ID, iwl5300_agn_cfg)},
4154         {IWL_PCI_DEVICE(0x4236, PCI_ANY_ID, iwl5300_agn_cfg)},
4155         {IWL_PCI_DEVICE(0x4237, PCI_ANY_ID, iwl5100_agn_cfg)},
4156 /* 5350 WiFi/WiMax */
4157         {IWL_PCI_DEVICE(0x423A, 0x1001, iwl5350_agn_cfg)},
4158         {IWL_PCI_DEVICE(0x423A, 0x1021, iwl5350_agn_cfg)},
4159         {IWL_PCI_DEVICE(0x423B, 0x1011, iwl5350_agn_cfg)},
4160 /* 5150 Wifi/WiMax */
4161         {IWL_PCI_DEVICE(0x423C, PCI_ANY_ID, iwl5150_agn_cfg)},
4162         {IWL_PCI_DEVICE(0x423D, PCI_ANY_ID, iwl5150_agn_cfg)},
4163 /* 6000/6050 Series */
4164         {IWL_PCI_DEVICE(0x0082, 0x1102, iwl6000_2ag_cfg)},
4165         {IWL_PCI_DEVICE(0x0085, 0x1112, iwl6000_2ag_cfg)},
4166         {IWL_PCI_DEVICE(0x0082, 0x1122, iwl6000_2ag_cfg)},
4167         {IWL_PCI_DEVICE(0x422B, PCI_ANY_ID, iwl6000_3agn_cfg)},
4168         {IWL_PCI_DEVICE(0x4238, PCI_ANY_ID, iwl6000_3agn_cfg)},
4169         {IWL_PCI_DEVICE(0x0082, PCI_ANY_ID, iwl6000_2agn_cfg)},
4170         {IWL_PCI_DEVICE(0x0085, PCI_ANY_ID, iwl6000_3agn_cfg)},
4171         {IWL_PCI_DEVICE(0x0086, PCI_ANY_ID, iwl6050_3agn_cfg)},
4172         {IWL_PCI_DEVICE(0x0087, PCI_ANY_ID, iwl6050_2agn_cfg)},
4173         {IWL_PCI_DEVICE(0x0088, PCI_ANY_ID, iwl6050_3agn_cfg)},
4174         {IWL_PCI_DEVICE(0x0089, PCI_ANY_ID, iwl6050_2agn_cfg)},
4175 /* 100 Series WiFi */
4176         {IWL_PCI_DEVICE(0x0083, PCI_ANY_ID, iwl100_bgn_cfg)},
4177         {IWL_PCI_DEVICE(0x0084, PCI_ANY_ID, iwl100_bgn_cfg)},
4178 #endif /* CONFIG_IWL5000 */
4179
4180         {0}
4181 };
4182 MODULE_DEVICE_TABLE(pci, iwl_hw_card_ids);
4183
4184 static struct pci_driver iwl_driver = {
4185         .name = DRV_NAME,
4186         .id_table = iwl_hw_card_ids,
4187         .probe = iwl_pci_probe,
4188         .remove = __devexit_p(iwl_pci_remove),
4189 #ifdef CONFIG_PM
4190         .suspend = iwl_pci_suspend,
4191         .resume = iwl_pci_resume,
4192 #endif
4193 };
4194
4195 static int __init iwl_init(void)
4196 {
4197
4198         int ret;
4199         printk(KERN_INFO DRV_NAME ": " DRV_DESCRIPTION ", " DRV_VERSION "\n");
4200         printk(KERN_INFO DRV_NAME ": " DRV_COPYRIGHT "\n");
4201
4202         ret = iwlagn_rate_control_register();
4203         if (ret) {
4204                 printk(KERN_ERR DRV_NAME
4205                        "Unable to register rate control algorithm: %d\n", ret);
4206                 return ret;
4207         }
4208
4209         ret = pci_register_driver(&iwl_driver);
4210         if (ret) {
4211                 printk(KERN_ERR DRV_NAME "Unable to initialize PCI module\n");
4212                 goto error_register;
4213         }
4214
4215         return ret;
4216
4217 error_register:
4218         iwlagn_rate_control_unregister();
4219         return ret;
4220 }
4221
4222 static void __exit iwl_exit(void)
4223 {
4224         pci_unregister_driver(&iwl_driver);
4225         iwlagn_rate_control_unregister();
4226 }
4227
4228 module_exit(iwl_exit);
4229 module_init(iwl_init);