0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef __il_core_h__
0012 #define __il_core_h__
0013
0014 #include <linux/interrupt.h>
0015 #include <linux/pci.h> /* for struct pci_device_id */
0016 #include <linux/kernel.h>
0017 #include <linux/leds.h>
0018 #include <linux/wait.h>
0019 #include <linux/io.h>
0020 #include <net/mac80211.h>
0021 #include <net/ieee80211_radiotap.h>
0022
0023 #include "commands.h"
0024 #include "csr.h"
0025 #include "prph.h"
0026
0027 struct il_host_cmd;
0028 struct il_cmd;
0029 struct il_tx_queue;
0030
0031 #define IL_ERR(f, a...) dev_err(&il->pci_dev->dev, f, ## a)
0032 #define IL_WARN(f, a...) dev_warn(&il->pci_dev->dev, f, ## a)
0033 #define IL_WARN_ONCE(f, a...) dev_warn_once(&il->pci_dev->dev, f, ## a)
0034 #define IL_INFO(f, a...) dev_info(&il->pci_dev->dev, f, ## a)
0035
0036 #define RX_QUEUE_SIZE 256
0037 #define RX_QUEUE_MASK 255
0038 #define RX_QUEUE_SIZE_LOG 8
0039
0040
0041
0042
0043 #define RX_FREE_BUFFERS 64
0044 #define RX_LOW_WATERMARK 8
0045
0046 #define U32_PAD(n) ((4-(n))&0x3)
0047
0048
0049 #define CT_KILL_THRESHOLD_LEGACY 110
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062 #define IL_NOISE_MEAS_NOT_AVAILABLE (-127)
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072 #define DEFAULT_RTS_THRESHOLD 2347U
0073 #define MIN_RTS_THRESHOLD 0U
0074 #define MAX_RTS_THRESHOLD 2347U
0075 #define MAX_MSDU_SIZE 2304U
0076 #define MAX_MPDU_SIZE 2346U
0077 #define DEFAULT_BEACON_INTERVAL 100U
0078 #define DEFAULT_SHORT_RETRY_LIMIT 7U
0079 #define DEFAULT_LONG_RETRY_LIMIT 4U
0080
0081 struct il_rx_buf {
0082 dma_addr_t page_dma;
0083 struct page *page;
0084 struct list_head list;
0085 };
0086
0087 #define rxb_addr(r) page_address(r->page)
0088
0089
0090 struct il_device_cmd;
0091
0092 struct il_cmd_meta {
0093
0094 struct il_host_cmd *source;
0095
0096
0097
0098
0099
0100
0101
0102 void (*callback) (struct il_priv *il, struct il_device_cmd *cmd,
0103 struct il_rx_pkt *pkt);
0104
0105
0106
0107 u32 flags;
0108
0109 DEFINE_DMA_UNMAP_ADDR(mapping);
0110 DEFINE_DMA_UNMAP_LEN(len);
0111 };
0112
0113
0114
0115
0116
0117
0118 struct il_queue {
0119 int n_bd;
0120 int write_ptr;
0121 int read_ptr;
0122
0123 dma_addr_t dma_addr;
0124 int n_win;
0125 u32 id;
0126 int low_mark;
0127
0128 int high_mark;
0129
0130 };
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147 #define TFD_TX_CMD_SLOTS 256
0148 #define TFD_CMD_SLOTS 32
0149
0150 struct il_tx_queue {
0151 struct il_queue q;
0152 void *tfds;
0153 struct il_device_cmd **cmd;
0154 struct il_cmd_meta *meta;
0155 struct sk_buff **skbs;
0156 unsigned long time_stamp;
0157 u8 need_update;
0158 u8 sched_retry;
0159 u8 active;
0160 u8 swq_id;
0161 };
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171 #define IL_EEPROM_ACCESS_TIMEOUT 5000
0172
0173 #define IL_EEPROM_SEM_TIMEOUT 10
0174 #define IL_EEPROM_SEM_RETRY_LIMIT 1000
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192 #define IL_NUM_TX_CALIB_GROUPS 5
0193 enum {
0194 EEPROM_CHANNEL_VALID = (1 << 0),
0195 EEPROM_CHANNEL_IBSS = (1 << 1),
0196
0197 EEPROM_CHANNEL_ACTIVE = (1 << 3),
0198 EEPROM_CHANNEL_RADAR = (1 << 4),
0199 EEPROM_CHANNEL_WIDE = (1 << 5),
0200
0201 EEPROM_CHANNEL_DFS = (1 << 7),
0202 };
0203
0204
0205
0206 #define EEPROM_SKU_CAP_SW_RF_KILL_ENABLE (1 << 0)
0207 #define EEPROM_SKU_CAP_HW_RF_KILL_ENABLE (1 << 1)
0208
0209
0210
0211 struct il_eeprom_channel {
0212 u8 flags;
0213 s8 max_power_avg;
0214 } __packed;
0215
0216
0217 #define EEPROM_3945_EEPROM_VERSION (0x2f)
0218
0219
0220 #define EEPROM_TX_POWER_TX_CHAINS (2)
0221
0222
0223 #define EEPROM_TX_POWER_BANDS (8)
0224
0225
0226
0227 #define EEPROM_TX_POWER_MEASUREMENTS (3)
0228
0229
0230
0231 #define EEPROM_4965_TX_POWER_VERSION (5)
0232 #define EEPROM_4965_EEPROM_VERSION (0x2f)
0233 #define EEPROM_4965_CALIB_VERSION_OFFSET (2*0xB6)
0234 #define EEPROM_4965_CALIB_TXPOWER_OFFSET (2*0xE8)
0235 #define EEPROM_4965_BOARD_REVISION (2*0x4F)
0236 #define EEPROM_4965_BOARD_PBA (2*0x56+1)
0237
0238
0239 extern const u8 il_eeprom_band_1[14];
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255 struct il_eeprom_calib_measure {
0256 u8 temperature;
0257 u8 gain_idx;
0258 u8 actual_pow;
0259 s8 pa_det;
0260 } __packed;
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270 struct il_eeprom_calib_ch_info {
0271 u8 ch_num;
0272 struct il_eeprom_calib_measure
0273 measurements[EEPROM_TX_POWER_TX_CHAINS]
0274 [EEPROM_TX_POWER_MEASUREMENTS];
0275 } __packed;
0276
0277
0278
0279
0280
0281
0282
0283
0284
0285
0286
0287 struct il_eeprom_calib_subband_info {
0288 u8 ch_from;
0289 u8 ch_to;
0290 struct il_eeprom_calib_ch_info ch1;
0291 struct il_eeprom_calib_ch_info ch2;
0292 } __packed;
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313
0314 struct il_eeprom_calib_info {
0315 u8 saturation_power24;
0316 u8 saturation_power52;
0317 __le16 voltage;
0318 struct il_eeprom_calib_subband_info band_info[EEPROM_TX_POWER_BANDS];
0319 } __packed;
0320
0321
0322 #define EEPROM_DEVICE_ID (2*0x08)
0323 #define EEPROM_MAC_ADDRESS (2*0x15)
0324 #define EEPROM_BOARD_REVISION (2*0x35)
0325 #define EEPROM_BOARD_PBA_NUMBER (2*0x3B+1)
0326 #define EEPROM_VERSION (2*0x44)
0327 #define EEPROM_SKU_CAP (2*0x45)
0328 #define EEPROM_OEM_MODE (2*0x46)
0329 #define EEPROM_WOWLAN_MODE (2*0x47)
0330 #define EEPROM_RADIO_CONFIG (2*0x48)
0331 #define EEPROM_NUM_MAC_ADDRESS (2*0x4C)
0332
0333
0334 #define EEPROM_RF_CFG_TYPE_MSK(x) (x & 0x3)
0335 #define EEPROM_RF_CFG_STEP_MSK(x) ((x >> 2) & 0x3)
0336 #define EEPROM_RF_CFG_DASH_MSK(x) ((x >> 4) & 0x3)
0337 #define EEPROM_RF_CFG_PNUM_MSK(x) ((x >> 6) & 0x3)
0338 #define EEPROM_RF_CFG_TX_ANT_MSK(x) ((x >> 8) & 0xF)
0339 #define EEPROM_RF_CFG_RX_ANT_MSK(x) ((x >> 12) & 0xF)
0340
0341 #define EEPROM_3945_RF_CFG_TYPE_MAX 0x0
0342 #define EEPROM_4965_RF_CFG_TYPE_MAX 0x1
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354
0355
0356 #define EEPROM_REGULATORY_SKU_ID (2*0x60)
0357 #define EEPROM_REGULATORY_BAND_1 (2*0x62)
0358 #define EEPROM_REGULATORY_BAND_1_CHANNELS (2*0x63)
0359
0360
0361
0362
0363
0364
0365 #define EEPROM_REGULATORY_BAND_2 (2*0x71)
0366 #define EEPROM_REGULATORY_BAND_2_CHANNELS (2*0x72)
0367
0368
0369
0370
0371
0372 #define EEPROM_REGULATORY_BAND_3 (2*0x7F)
0373 #define EEPROM_REGULATORY_BAND_3_CHANNELS (2*0x80)
0374
0375
0376
0377
0378
0379 #define EEPROM_REGULATORY_BAND_4 (2*0x8C)
0380 #define EEPROM_REGULATORY_BAND_4_CHANNELS (2*0x8D)
0381
0382
0383
0384
0385
0386 #define EEPROM_REGULATORY_BAND_5 (2*0x98)
0387 #define EEPROM_REGULATORY_BAND_5_CHANNELS (2*0x99)
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404 #define EEPROM_4965_REGULATORY_BAND_24_HT40_CHANNELS (2*0xA0)
0405
0406
0407
0408
0409
0410 #define EEPROM_4965_REGULATORY_BAND_52_HT40_CHANNELS (2*0xA8)
0411
0412 #define EEPROM_REGULATORY_BAND_NO_HT40 (0)
0413
0414 int il_eeprom_init(struct il_priv *il);
0415 void il_eeprom_free(struct il_priv *il);
0416 const u8 *il_eeprom_query_addr(const struct il_priv *il, size_t offset);
0417 u16 il_eeprom_query16(const struct il_priv *il, size_t offset);
0418 int il_init_channel_map(struct il_priv *il);
0419 void il_free_channel_map(struct il_priv *il);
0420 const struct il_channel_info *il_get_channel_info(const struct il_priv *il,
0421 enum nl80211_band band,
0422 u16 channel);
0423
0424 #define IL_NUM_SCAN_RATES (2)
0425
0426 struct il4965_channel_tgd_info {
0427 u8 type;
0428 s8 max_power;
0429 };
0430
0431 struct il4965_channel_tgh_info {
0432 s64 last_radar_time;
0433 };
0434
0435 #define IL4965_MAX_RATE (33)
0436
0437 struct il3945_clip_group {
0438
0439
0440 const s8 clip_powers[IL_MAX_RATES];
0441 };
0442
0443
0444
0445
0446
0447
0448
0449
0450 struct il3945_channel_power_info {
0451 struct il3945_tx_power tpc;
0452 s8 power_table_idx;
0453 s8 base_power_idx;
0454 s8 requested_power;
0455 };
0456
0457
0458
0459 struct il3945_scan_power_info {
0460 struct il3945_tx_power tpc;
0461 s8 power_table_idx;
0462 s8 requested_power;
0463 };
0464
0465
0466
0467
0468
0469
0470 struct il_channel_info {
0471 struct il4965_channel_tgd_info tgd;
0472 struct il4965_channel_tgh_info tgh;
0473 struct il_eeprom_channel eeprom;
0474 struct il_eeprom_channel ht40_eeprom;
0475
0476
0477 u8 channel;
0478 u8 flags;
0479 s8 max_power_avg;
0480 s8 curr_txpow;
0481 s8 min_power;
0482 s8 scan_power;
0483
0484 u8 group_idx;
0485 u8 band_idx;
0486 enum nl80211_band band;
0487
0488
0489 s8 ht40_max_power_avg;
0490 u8 ht40_flags;
0491 u8 ht40_extension_channel;
0492
0493
0494
0495
0496 struct il3945_channel_power_info power_info[IL4965_MAX_RATE];
0497
0498
0499 struct il3945_scan_power_info scan_pwr_info[IL_NUM_SCAN_RATES];
0500 };
0501
0502 #define IL_TX_FIFO_BK 0
0503 #define IL_TX_FIFO_BE 1
0504 #define IL_TX_FIFO_VI 2
0505 #define IL_TX_FIFO_VO 3
0506 #define IL_TX_FIFO_UNUSED -1
0507
0508
0509
0510
0511 #define IL_MIN_NUM_QUEUES 10
0512
0513 #define IL_DEFAULT_CMD_QUEUE_NUM 4
0514
0515 #define IEEE80211_DATA_LEN 2304
0516 #define IEEE80211_4ADDR_LEN 30
0517 #define IEEE80211_HLEN (IEEE80211_4ADDR_LEN)
0518 #define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN)
0519
0520 struct il_frame {
0521 union {
0522 struct ieee80211_hdr frame;
0523 struct il_tx_beacon_cmd beacon;
0524 u8 raw[IEEE80211_FRAME_LEN];
0525 u8 cmd[360];
0526 } u;
0527 struct list_head list;
0528 };
0529
0530 enum {
0531 CMD_SYNC = 0,
0532 CMD_SIZE_NORMAL = 0,
0533 CMD_NO_SKB = 0,
0534 CMD_SIZE_HUGE = (1 << 0),
0535 CMD_ASYNC = (1 << 1),
0536 CMD_WANT_SKB = (1 << 2),
0537 CMD_MAPPED = (1 << 3),
0538 };
0539
0540 #define DEF_CMD_PAYLOAD_SIZE 320
0541
0542
0543
0544
0545
0546
0547
0548
0549 struct il_device_cmd {
0550 struct il_cmd_header hdr;
0551 union {
0552 u32 flags;
0553 u8 val8;
0554 u16 val16;
0555 u32 val32;
0556 struct il_tx_cmd tx;
0557 u8 payload[DEF_CMD_PAYLOAD_SIZE];
0558 } __packed cmd;
0559 } __packed;
0560
0561 #define TFD_MAX_PAYLOAD_SIZE (sizeof(struct il_device_cmd))
0562
0563 struct il_host_cmd {
0564 const void *data;
0565 unsigned long reply_page;
0566 void (*callback) (struct il_priv *il, struct il_device_cmd *cmd,
0567 struct il_rx_pkt *pkt);
0568 u32 flags;
0569 u16 len;
0570 u8 id;
0571 };
0572
0573 #define SUP_RATE_11A_MAX_NUM_CHANNELS 8
0574 #define SUP_RATE_11B_MAX_NUM_CHANNELS 4
0575 #define SUP_RATE_11G_MAX_NUM_CHANNELS 12
0576
0577
0578
0579
0580
0581
0582
0583
0584
0585
0586
0587
0588
0589
0590
0591
0592 struct il_rx_queue {
0593 __le32 *bd;
0594 dma_addr_t bd_dma;
0595 struct il_rx_buf pool[RX_QUEUE_SIZE + RX_FREE_BUFFERS];
0596 struct il_rx_buf *queue[RX_QUEUE_SIZE];
0597 u32 read;
0598 u32 write;
0599 u32 free_count;
0600 u32 write_actual;
0601 struct list_head rx_free;
0602 struct list_head rx_used;
0603 int need_update;
0604 struct il_rb_status *rb_stts;
0605 dma_addr_t rb_stts_dma;
0606 spinlock_t lock;
0607 };
0608
0609 #define IL_SUPPORTED_RATES_IE_LEN 8
0610
0611 #define MAX_TID_COUNT 9
0612
0613 #define IL_INVALID_RATE 0xFF
0614 #define IL_INVALID_VALUE -1
0615
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627
0628
0629
0630 struct il_ht_agg {
0631 u16 txq_id;
0632 u16 frame_count;
0633 u16 wait_for_ba;
0634 u16 start_idx;
0635 u64 bitmap;
0636 u32 rate_n_flags;
0637 #define IL_AGG_OFF 0
0638 #define IL_AGG_ON 1
0639 #define IL_EMPTYING_HW_QUEUE_ADDBA 2
0640 #define IL_EMPTYING_HW_QUEUE_DELBA 3
0641 u8 state;
0642 };
0643
0644 struct il_tid_data {
0645 u16 seq_number;
0646 u16 tfds_in_queue;
0647 struct il_ht_agg agg;
0648 };
0649
0650 struct il_hw_key {
0651 u32 cipher;
0652 int keylen;
0653 u8 keyidx;
0654 u8 key[32];
0655 };
0656
0657 union il_ht_rate_supp {
0658 u16 rates;
0659 struct {
0660 u8 siso_rate;
0661 u8 mimo_rate;
0662 };
0663 };
0664
0665 #define CFG_HT_RX_AMPDU_FACTOR_8K (0x0)
0666 #define CFG_HT_RX_AMPDU_FACTOR_16K (0x1)
0667 #define CFG_HT_RX_AMPDU_FACTOR_32K (0x2)
0668 #define CFG_HT_RX_AMPDU_FACTOR_64K (0x3)
0669 #define CFG_HT_RX_AMPDU_FACTOR_DEF CFG_HT_RX_AMPDU_FACTOR_64K
0670 #define CFG_HT_RX_AMPDU_FACTOR_MAX CFG_HT_RX_AMPDU_FACTOR_64K
0671 #define CFG_HT_RX_AMPDU_FACTOR_MIN CFG_HT_RX_AMPDU_FACTOR_8K
0672
0673
0674
0675
0676
0677
0678
0679
0680 #define CFG_HT_MPDU_DENSITY_2USEC (0x4)
0681 #define CFG_HT_MPDU_DENSITY_4USEC (0x5)
0682 #define CFG_HT_MPDU_DENSITY_8USEC (0x6)
0683 #define CFG_HT_MPDU_DENSITY_16USEC (0x7)
0684 #define CFG_HT_MPDU_DENSITY_DEF CFG_HT_MPDU_DENSITY_4USEC
0685 #define CFG_HT_MPDU_DENSITY_MAX CFG_HT_MPDU_DENSITY_16USEC
0686 #define CFG_HT_MPDU_DENSITY_MIN (0x1)
0687
0688 struct il_ht_config {
0689 bool single_chain_sufficient;
0690 enum ieee80211_smps_mode smps;
0691 };
0692
0693
0694 struct il_qos_info {
0695 int qos_active;
0696 struct il_qosparam_cmd def_qos_parm;
0697 };
0698
0699
0700
0701
0702
0703
0704
0705 struct il_station_entry {
0706 struct il_addsta_cmd sta;
0707 struct il_tid_data tid[MAX_TID_COUNT];
0708 u8 used;
0709 struct il_hw_key keyinfo;
0710 struct il_link_quality_cmd *lq;
0711 };
0712
0713 struct il_station_priv_common {
0714 u8 sta_id;
0715 };
0716
0717
0718
0719
0720
0721
0722
0723 struct il_vif_priv {
0724 u8 ibss_bssid_sta_id;
0725 };
0726
0727
0728 struct fw_desc {
0729 void *v_addr;
0730 dma_addr_t p_addr;
0731 u32 len;
0732 };
0733
0734
0735 struct il_ucode_header {
0736 __le32 ver;
0737 struct {
0738 __le32 inst_size;
0739 __le32 data_size;
0740 __le32 init_size;
0741 __le32 init_data_size;
0742 __le32 boot_size;
0743 u8 data[0];
0744 } v1;
0745 };
0746
0747 struct il4965_ibss_seq {
0748 u8 mac[ETH_ALEN];
0749 u16 seq_num;
0750 u16 frag_num;
0751 unsigned long packet_time;
0752 struct list_head list;
0753 };
0754
0755 struct il_sensitivity_ranges {
0756 u16 min_nrg_cck;
0757 u16 max_nrg_cck;
0758
0759 u16 nrg_th_cck;
0760 u16 nrg_th_ofdm;
0761
0762 u16 auto_corr_min_ofdm;
0763 u16 auto_corr_min_ofdm_mrc;
0764 u16 auto_corr_min_ofdm_x1;
0765 u16 auto_corr_min_ofdm_mrc_x1;
0766
0767 u16 auto_corr_max_ofdm;
0768 u16 auto_corr_max_ofdm_mrc;
0769 u16 auto_corr_max_ofdm_x1;
0770 u16 auto_corr_max_ofdm_mrc_x1;
0771
0772 u16 auto_corr_max_cck;
0773 u16 auto_corr_max_cck_mrc;
0774 u16 auto_corr_min_cck;
0775 u16 auto_corr_min_cck_mrc;
0776
0777 u16 barker_corr_th_min;
0778 u16 barker_corr_th_min_mrc;
0779 u16 nrg_th_cca;
0780 };
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790
0791
0792
0793
0794
0795
0796
0797
0798
0799
0800
0801
0802
0803
0804 struct il_hw_params {
0805 u8 bcast_id;
0806 u8 max_txq_num;
0807 u8 dma_chnl_num;
0808 u16 scd_bc_tbls_size;
0809 u32 tfd_size;
0810 u8 tx_chains_num;
0811 u8 rx_chains_num;
0812 u8 valid_tx_ant;
0813 u8 valid_rx_ant;
0814 u16 max_rxq_size;
0815 u16 max_rxq_log;
0816 u32 rx_page_order;
0817 u32 rx_wrt_ptr_reg;
0818 u8 max_stations;
0819 u8 ht40_channel;
0820 u8 max_beacon_itrvl;
0821 u32 max_inst_size;
0822 u32 max_data_size;
0823 u32 max_bsm_size;
0824 u32 ct_kill_threshold;
0825 u16 beacon_time_tsf_bits;
0826 const struct il_sensitivity_ranges *sens;
0827 };
0828
0829
0830
0831
0832
0833
0834
0835
0836
0837
0838
0839
0840
0841
0842
0843
0844 void il4965_update_chain_flags(struct il_priv *il);
0845 extern const u8 il_bcast_addr[ETH_ALEN];
0846 int il_queue_space(const struct il_queue *q);
0847 static inline int
0848 il_queue_used(const struct il_queue *q, int i)
0849 {
0850 return q->write_ptr >= q->read_ptr ? (i >= q->read_ptr &&
0851 i < q->write_ptr) : !(i <
0852 q->read_ptr
0853 && i >=
0854 q->
0855 write_ptr);
0856 }
0857
0858 static inline u8
0859 il_get_cmd_idx(struct il_queue *q, u32 idx, int is_huge)
0860 {
0861
0862
0863
0864
0865
0866 if (is_huge)
0867 return q->n_win;
0868
0869
0870 return idx & (q->n_win - 1);
0871 }
0872
0873 struct il_dma_ptr {
0874 dma_addr_t dma;
0875 void *addr;
0876 size_t size;
0877 };
0878
0879 #define IL_OPERATION_MODE_AUTO 0
0880 #define IL_OPERATION_MODE_HT_ONLY 1
0881 #define IL_OPERATION_MODE_MIXED 2
0882 #define IL_OPERATION_MODE_20MHZ 3
0883
0884 #define IL_TX_CRC_SIZE 4
0885 #define IL_TX_DELIMITER_SIZE 4
0886
0887 #define TX_POWER_IL_ILLEGAL_VOLTAGE -10000
0888
0889
0890 #define INITIALIZATION_VALUE 0xFFFF
0891 #define IL4965_CAL_NUM_BEACONS 20
0892 #define IL_CAL_NUM_BEACONS 16
0893 #define MAXIMUM_ALLOWED_PATHLOSS 15
0894
0895 #define CHAIN_NOISE_MAX_DELTA_GAIN_CODE 3
0896
0897 #define MAX_FA_OFDM 50
0898 #define MIN_FA_OFDM 5
0899 #define MAX_FA_CCK 50
0900 #define MIN_FA_CCK 5
0901
0902 #define AUTO_CORR_STEP_OFDM 1
0903
0904 #define AUTO_CORR_STEP_CCK 3
0905 #define AUTO_CORR_MAX_TH_CCK 160
0906
0907 #define NRG_DIFF 2
0908 #define NRG_STEP_CCK 2
0909 #define NRG_MARGIN 8
0910 #define MAX_NUMBER_CCK_NO_FA 100
0911
0912 #define AUTO_CORR_CCK_MIN_VAL_DEF (125)
0913
0914 #define CHAIN_A 0
0915 #define CHAIN_B 1
0916 #define CHAIN_C 2
0917 #define CHAIN_NOISE_DELTA_GAIN_INIT_VAL 4
0918 #define ALL_BAND_FILTER 0xFF00
0919 #define IN_BAND_FILTER 0xFF
0920 #define MIN_AVERAGE_NOISE_MAX_VALUE 0xFFFFFFFF
0921
0922 #define NRG_NUM_PREV_STAT_L 20
0923 #define NUM_RX_CHAINS 3
0924
0925 enum il4965_false_alarm_state {
0926 IL_FA_TOO_MANY = 0,
0927 IL_FA_TOO_FEW = 1,
0928 IL_FA_GOOD_RANGE = 2,
0929 };
0930
0931 enum il4965_chain_noise_state {
0932 IL_CHAIN_NOISE_ALIVE = 0,
0933 IL_CHAIN_NOISE_ACCUMULATE,
0934 IL_CHAIN_NOISE_CALIBRATED,
0935 IL_CHAIN_NOISE_DONE,
0936 };
0937
0938 enum ucode_type {
0939 UCODE_NONE = 0,
0940 UCODE_INIT,
0941 UCODE_RT
0942 };
0943
0944
0945 struct il_sensitivity_data {
0946 u32 auto_corr_ofdm;
0947 u32 auto_corr_ofdm_mrc;
0948 u32 auto_corr_ofdm_x1;
0949 u32 auto_corr_ofdm_mrc_x1;
0950 u32 auto_corr_cck;
0951 u32 auto_corr_cck_mrc;
0952
0953 u32 last_bad_plcp_cnt_ofdm;
0954 u32 last_fa_cnt_ofdm;
0955 u32 last_bad_plcp_cnt_cck;
0956 u32 last_fa_cnt_cck;
0957
0958 u32 nrg_curr_state;
0959 u32 nrg_prev_state;
0960 u32 nrg_value[10];
0961 u8 nrg_silence_rssi[NRG_NUM_PREV_STAT_L];
0962 u32 nrg_silence_ref;
0963 u32 nrg_energy_idx;
0964 u32 nrg_silence_idx;
0965 u32 nrg_th_cck;
0966 s32 nrg_auto_corr_silence_diff;
0967 u32 num_in_cck_no_fa;
0968 u32 nrg_th_ofdm;
0969
0970 u16 barker_corr_th_min;
0971 u16 barker_corr_th_min_mrc;
0972 u16 nrg_th_cca;
0973 };
0974
0975
0976 struct il_chain_noise_data {
0977 u32 active_chains;
0978 u32 chain_noise_a;
0979 u32 chain_noise_b;
0980 u32 chain_noise_c;
0981 u32 chain_signal_a;
0982 u32 chain_signal_b;
0983 u32 chain_signal_c;
0984 u16 beacon_count;
0985 u8 disconn_array[NUM_RX_CHAINS];
0986 u8 delta_gain_code[NUM_RX_CHAINS];
0987 u8 radio_write;
0988 u8 state;
0989 };
0990
0991 #define EEPROM_SEM_TIMEOUT 10
0992 #define EEPROM_SEM_RETRY_LIMIT 1000
0993
0994 #define IL_TRAFFIC_ENTRIES (256)
0995 #define IL_TRAFFIC_ENTRY_SIZE (64)
0996
0997 enum {
0998 MEASUREMENT_READY = (1 << 0),
0999 MEASUREMENT_ACTIVE = (1 << 1),
1000 };
1001
1002
1003 struct isr_stats {
1004 u32 hw;
1005 u32 sw;
1006 u32 err_code;
1007 u32 sch;
1008 u32 alive;
1009 u32 rfkill;
1010 u32 ctkill;
1011 u32 wakeup;
1012 u32 rx;
1013 u32 handlers[IL_CN_MAX];
1014 u32 tx;
1015 u32 unhandled;
1016 };
1017
1018
1019 enum il_mgmt_stats {
1020 MANAGEMENT_ASSOC_REQ = 0,
1021 MANAGEMENT_ASSOC_RESP,
1022 MANAGEMENT_REASSOC_REQ,
1023 MANAGEMENT_REASSOC_RESP,
1024 MANAGEMENT_PROBE_REQ,
1025 MANAGEMENT_PROBE_RESP,
1026 MANAGEMENT_BEACON,
1027 MANAGEMENT_ATIM,
1028 MANAGEMENT_DISASSOC,
1029 MANAGEMENT_AUTH,
1030 MANAGEMENT_DEAUTH,
1031 MANAGEMENT_ACTION,
1032 MANAGEMENT_MAX,
1033 };
1034
1035 enum il_ctrl_stats {
1036 CONTROL_BACK_REQ = 0,
1037 CONTROL_BACK,
1038 CONTROL_PSPOLL,
1039 CONTROL_RTS,
1040 CONTROL_CTS,
1041 CONTROL_ACK,
1042 CONTROL_CFEND,
1043 CONTROL_CFENDACK,
1044 CONTROL_MAX,
1045 };
1046
1047 struct traffic_stats {
1048 #ifdef CONFIG_IWLEGACY_DEBUGFS
1049 u32 mgmt[MANAGEMENT_MAX];
1050 u32 ctrl[CONTROL_MAX];
1051 u32 data_cnt;
1052 u64 data_bytes;
1053 #endif
1054 };
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064 #define IL_HOST_INT_TIMEOUT_MAX (0xFF)
1065 #define IL_HOST_INT_TIMEOUT_DEF (0x40)
1066 #define IL_HOST_INT_TIMEOUT_MIN (0x0)
1067 #define IL_HOST_INT_CALIB_TIMEOUT_MAX (0xFF)
1068 #define IL_HOST_INT_CALIB_TIMEOUT_DEF (0x10)
1069 #define IL_HOST_INT_CALIB_TIMEOUT_MIN (0x0)
1070
1071 #define IL_DELAY_NEXT_FORCE_FW_RELOAD (HZ*5)
1072
1073
1074 #define IL_DEF_WD_TIMEOUT (2000)
1075 #define IL_LONG_WD_TIMEOUT (10000)
1076 #define IL_MAX_WD_TIMEOUT (120000)
1077
1078 struct il_force_reset {
1079 int reset_request_count;
1080 int reset_success_count;
1081 int reset_reject_count;
1082 unsigned long reset_duration;
1083 unsigned long last_force_reset_jiffies;
1084 };
1085
1086
1087
1088
1089
1090
1091
1092 #define IL3945_EXT_BEACON_TIME_POS 24
1093
1094
1095
1096
1097
1098 #define IL4965_EXT_BEACON_TIME_POS 22
1099
1100 struct il_rxon_context {
1101 struct ieee80211_vif *vif;
1102 };
1103
1104 struct il_power_mgr {
1105 struct il_powertable_cmd sleep_cmd;
1106 struct il_powertable_cmd sleep_cmd_next;
1107 int debug_sleep_level_override;
1108 bool pci_pm;
1109 bool ps_disabled;
1110 };
1111
1112 struct il_priv {
1113 struct ieee80211_hw *hw;
1114 struct ieee80211_channel *ieee_channels;
1115 struct ieee80211_rate *ieee_rates;
1116
1117 struct il_cfg *cfg;
1118 const struct il_ops *ops;
1119 #ifdef CONFIG_IWLEGACY_DEBUGFS
1120 const struct il_debugfs_ops *debugfs_ops;
1121 #endif
1122
1123
1124 struct list_head free_frames;
1125 int frames_count;
1126
1127 enum nl80211_band band;
1128 int alloc_rxb_page;
1129
1130 void (*handlers[IL_CN_MAX]) (struct il_priv *il,
1131 struct il_rx_buf *rxb);
1132
1133 struct ieee80211_supported_band bands[NUM_NL80211_BANDS];
1134
1135
1136 struct il_spectrum_notification measure_report;
1137 u8 measurement_status;
1138
1139
1140 u32 ucode_beacon_time;
1141 int missed_beacon_threshold;
1142
1143
1144 u32 ibss_manager;
1145
1146
1147 struct il_force_reset force_reset;
1148
1149
1150
1151 struct il_channel_info *channel_info;
1152 u8 channel_count;
1153
1154
1155 s32 temperature;
1156 s32 last_temperature;
1157
1158
1159 unsigned long scan_start;
1160 unsigned long scan_start_tsf;
1161 void *scan_cmd;
1162 enum nl80211_band scan_band;
1163 struct cfg80211_scan_request *scan_request;
1164 struct ieee80211_vif *scan_vif;
1165 u8 scan_tx_ant[NUM_NL80211_BANDS];
1166 u8 mgmt_tx_ant;
1167
1168
1169 spinlock_t lock;
1170 spinlock_t hcmd_lock;
1171 spinlock_t reg_lock;
1172 struct mutex mutex;
1173
1174
1175 struct pci_dev *pci_dev;
1176
1177
1178 void __iomem *hw_base;
1179 u32 hw_rev;
1180 u32 hw_wa_rev;
1181 u8 rev_id;
1182
1183
1184 u8 cmd_queue;
1185
1186
1187 u8 sta_key_max_num;
1188
1189
1190 struct mac_address addresses[1];
1191
1192
1193 int fw_idx;
1194 u32 ucode_ver;
1195
1196 struct fw_desc ucode_code;
1197 struct fw_desc ucode_data;
1198 struct fw_desc ucode_data_backup;
1199 struct fw_desc ucode_init;
1200 struct fw_desc ucode_init_data;
1201 struct fw_desc ucode_boot;
1202 enum ucode_type ucode_type;
1203 u8 ucode_write_complete;
1204 char firmware_name[25];
1205
1206 struct ieee80211_vif *vif;
1207
1208 struct il_qos_info qos_data;
1209
1210 struct {
1211 bool enabled;
1212 bool is_40mhz;
1213 bool non_gf_sta_present;
1214 u8 protection;
1215 u8 extension_chan_offset;
1216 } ht;
1217
1218
1219
1220
1221
1222
1223
1224 const struct il_rxon_cmd active;
1225 struct il_rxon_cmd staging;
1226
1227 struct il_rxon_time_cmd timing;
1228
1229 __le16 switch_channel;
1230
1231
1232
1233 struct il_init_alive_resp card_alive_init;
1234 struct il_alive_resp card_alive;
1235
1236 u16 active_rate;
1237
1238 u8 start_calib;
1239 struct il_sensitivity_data sensitivity_data;
1240 struct il_chain_noise_data chain_noise_data;
1241 __le16 sensitivity_tbl[HD_TBL_SIZE];
1242
1243 struct il_ht_config current_ht_config;
1244
1245
1246 u8 retry_rate;
1247
1248 wait_queue_head_t wait_command_queue;
1249
1250 int activity_timer_active;
1251
1252
1253 struct il_rx_queue rxq;
1254 struct il_tx_queue *txq;
1255 unsigned long txq_ctx_active_msk;
1256 struct il_dma_ptr kw;
1257 struct il_dma_ptr scd_bc_tbls;
1258
1259 u32 scd_base_addr;
1260
1261 unsigned long status;
1262
1263
1264 struct traffic_stats tx_stats;
1265 struct traffic_stats rx_stats;
1266
1267
1268 struct isr_stats isr_stats;
1269
1270 struct il_power_mgr power_data;
1271
1272
1273 u8 bssid[ETH_ALEN];
1274
1275
1276
1277
1278 spinlock_t sta_lock;
1279 int num_stations;
1280 struct il_station_entry stations[IL_STATION_COUNT];
1281 unsigned long ucode_key_table;
1282
1283
1284 #define IL_MAX_HW_QUEUES 32
1285 unsigned long queue_stopped[BITS_TO_LONGS(IL_MAX_HW_QUEUES)];
1286 #define IL_STOP_REASON_PASSIVE 0
1287 unsigned long stop_reason;
1288
1289 atomic_t queue_stop_count[4];
1290
1291
1292 u8 is_open;
1293
1294 u8 mac80211_registered;
1295
1296
1297 u8 *eeprom;
1298 struct il_eeprom_calib_info *calib_info;
1299
1300 enum nl80211_iftype iw_mode;
1301
1302
1303 u64 timestamp;
1304
1305 union {
1306 #if IS_ENABLED(CONFIG_IWL3945)
1307 struct {
1308 void *shared_virt;
1309 dma_addr_t shared_phys;
1310
1311 struct delayed_work thermal_periodic;
1312 struct delayed_work rfkill_poll;
1313
1314 struct il3945_notif_stats stats;
1315 #ifdef CONFIG_IWLEGACY_DEBUGFS
1316 struct il3945_notif_stats accum_stats;
1317 struct il3945_notif_stats delta_stats;
1318 struct il3945_notif_stats max_delta;
1319 #endif
1320
1321 u32 sta_supp_rates;
1322 int last_rx_rssi;
1323
1324
1325 u32 last_beacon_time;
1326 u64 last_tsf;
1327
1328
1329
1330
1331
1332
1333 const struct il3945_clip_group clip_groups[5];
1334
1335 } _3945;
1336 #endif
1337 #if IS_ENABLED(CONFIG_IWL4965)
1338 struct {
1339 struct il_rx_phy_res last_phy_res;
1340 bool last_phy_res_valid;
1341 u32 ampdu_ref;
1342
1343 struct completion firmware_loading_complete;
1344
1345
1346
1347
1348
1349
1350 u8 phy_calib_chain_noise_reset_cmd;
1351 u8 phy_calib_chain_noise_gain_cmd;
1352
1353 u8 key_mapping_keys;
1354 struct il_wep_key wep_keys[WEP_KEYS_MAX];
1355
1356 struct il_notif_stats stats;
1357 #ifdef CONFIG_IWLEGACY_DEBUGFS
1358 struct il_notif_stats accum_stats;
1359 struct il_notif_stats delta_stats;
1360 struct il_notif_stats max_delta;
1361 #endif
1362
1363 } _4965;
1364 #endif
1365 };
1366
1367 struct il_hw_params hw_params;
1368
1369 u32 inta_mask;
1370
1371 struct workqueue_struct *workqueue;
1372
1373 struct work_struct restart;
1374 struct work_struct scan_completed;
1375 struct work_struct rx_replenish;
1376 struct work_struct abort_scan;
1377
1378 bool beacon_enabled;
1379 struct sk_buff *beacon_skb;
1380
1381 struct work_struct tx_flush;
1382
1383 struct tasklet_struct irq_tasklet;
1384
1385 struct delayed_work init_alive_start;
1386 struct delayed_work alive_start;
1387 struct delayed_work scan_check;
1388
1389
1390 s8 tx_power_user_lmt;
1391 s8 tx_power_device_lmt;
1392 s8 tx_power_next;
1393
1394 #ifdef CONFIG_IWLEGACY_DEBUG
1395
1396 u32 debug_level;
1397
1398 #endif
1399 #ifdef CONFIG_IWLEGACY_DEBUGFS
1400
1401 u16 tx_traffic_idx;
1402 u16 rx_traffic_idx;
1403 u8 *tx_traffic;
1404 u8 *rx_traffic;
1405 struct dentry *debugfs_dir;
1406 u32 dbgfs_sram_offset, dbgfs_sram_len;
1407 bool disable_ht40;
1408 #endif
1409
1410 struct work_struct txpower_work;
1411 bool disable_sens_cal;
1412 bool disable_chain_noise_cal;
1413 bool disable_tx_power_cal;
1414 struct work_struct run_time_calib_work;
1415 struct timer_list stats_periodic;
1416 struct timer_list watchdog;
1417 bool hw_ready;
1418
1419 struct led_classdev led;
1420 unsigned long blink_on, blink_off;
1421 bool led_registered;
1422 };
1423
1424 static inline void
1425 il_txq_ctx_activate(struct il_priv *il, int txq_id)
1426 {
1427 set_bit(txq_id, &il->txq_ctx_active_msk);
1428 }
1429
1430 static inline void
1431 il_txq_ctx_deactivate(struct il_priv *il, int txq_id)
1432 {
1433 clear_bit(txq_id, &il->txq_ctx_active_msk);
1434 }
1435
1436 static inline int
1437 il_is_associated(struct il_priv *il)
1438 {
1439 return (il->active.filter_flags & RXON_FILTER_ASSOC_MSK) ? 1 : 0;
1440 }
1441
1442 static inline int
1443 il_is_any_associated(struct il_priv *il)
1444 {
1445 return il_is_associated(il);
1446 }
1447
1448 static inline int
1449 il_is_channel_valid(const struct il_channel_info *ch_info)
1450 {
1451 if (ch_info == NULL)
1452 return 0;
1453 return (ch_info->flags & EEPROM_CHANNEL_VALID) ? 1 : 0;
1454 }
1455
1456 static inline int
1457 il_is_channel_radar(const struct il_channel_info *ch_info)
1458 {
1459 return (ch_info->flags & EEPROM_CHANNEL_RADAR) ? 1 : 0;
1460 }
1461
1462 static inline u8
1463 il_is_channel_a_band(const struct il_channel_info *ch_info)
1464 {
1465 return ch_info->band == NL80211_BAND_5GHZ;
1466 }
1467
1468 static inline int
1469 il_is_channel_passive(const struct il_channel_info *ch)
1470 {
1471 return (!(ch->flags & EEPROM_CHANNEL_ACTIVE)) ? 1 : 0;
1472 }
1473
1474 static inline int
1475 il_is_channel_ibss(const struct il_channel_info *ch)
1476 {
1477 return (ch->flags & EEPROM_CHANNEL_IBSS) ? 1 : 0;
1478 }
1479
1480 static inline void
1481 __il_free_pages(struct il_priv *il, struct page *page)
1482 {
1483 __free_pages(page, il->hw_params.rx_page_order);
1484 il->alloc_rxb_page--;
1485 }
1486
1487 static inline void
1488 il_free_pages(struct il_priv *il, unsigned long page)
1489 {
1490 free_pages(page, il->hw_params.rx_page_order);
1491 il->alloc_rxb_page--;
1492 }
1493
1494 #define IWLWIFI_VERSION "in-tree:"
1495 #define DRV_COPYRIGHT "Copyright(c) 2003-2011 Intel Corporation"
1496 #define DRV_AUTHOR "<ilw@linux.intel.com>"
1497
1498 #define IL_PCI_DEVICE(dev, subdev, cfg) \
1499 .vendor = PCI_VENDOR_ID_INTEL, .device = (dev), \
1500 .subvendor = PCI_ANY_ID, .subdevice = (subdev), \
1501 .driver_data = (kernel_ulong_t)&(cfg)
1502
1503 #define TIME_UNIT 1024
1504
1505 #define IL_SKU_G 0x1
1506 #define IL_SKU_A 0x2
1507 #define IL_SKU_N 0x8
1508
1509 #define IL_CMD(x) case x: return #x
1510
1511
1512 #define IL_RX_BUF_SIZE_3K (3 * 1000)
1513 #define IL_RX_BUF_SIZE_4K (4 * 1024)
1514 #define IL_RX_BUF_SIZE_8K (8 * 1024)
1515
1516 #ifdef CONFIG_IWLEGACY_DEBUGFS
1517 struct il_debugfs_ops {
1518 ssize_t(*rx_stats_read) (struct file *file, char __user *user_buf,
1519 size_t count, loff_t *ppos);
1520 ssize_t(*tx_stats_read) (struct file *file, char __user *user_buf,
1521 size_t count, loff_t *ppos);
1522 ssize_t(*general_stats_read) (struct file *file,
1523 char __user *user_buf, size_t count,
1524 loff_t *ppos);
1525 };
1526 #endif
1527
1528 struct il_ops {
1529
1530 void (*txq_update_byte_cnt_tbl) (struct il_priv *il,
1531 struct il_tx_queue *txq,
1532 u16 byte_cnt);
1533 int (*txq_attach_buf_to_tfd) (struct il_priv *il,
1534 struct il_tx_queue *txq, dma_addr_t addr,
1535 u16 len, u8 reset, u8 pad);
1536 void (*txq_free_tfd) (struct il_priv *il, struct il_tx_queue *txq);
1537 int (*txq_init) (struct il_priv *il, struct il_tx_queue *txq);
1538
1539 void (*init_alive_start) (struct il_priv *il);
1540
1541 int (*is_valid_rtc_data_addr) (u32 addr);
1542
1543 int (*load_ucode) (struct il_priv *il);
1544
1545 void (*dump_nic_error_log) (struct il_priv *il);
1546 int (*dump_fh) (struct il_priv *il, char **buf, bool display);
1547 int (*set_channel_switch) (struct il_priv *il,
1548 struct ieee80211_channel_switch *ch_switch);
1549
1550 int (*apm_init) (struct il_priv *il);
1551
1552
1553 int (*send_tx_power) (struct il_priv *il);
1554 void (*update_chain_flags) (struct il_priv *il);
1555
1556
1557 int (*eeprom_acquire_semaphore) (struct il_priv *il);
1558 void (*eeprom_release_semaphore) (struct il_priv *il);
1559
1560 int (*rxon_assoc) (struct il_priv *il);
1561 int (*commit_rxon) (struct il_priv *il);
1562 void (*set_rxon_chain) (struct il_priv *il);
1563
1564 u16(*get_hcmd_size) (u8 cmd_id, u16 len);
1565 u16(*build_addsta_hcmd) (const struct il_addsta_cmd *cmd, u8 *data);
1566
1567 int (*request_scan) (struct il_priv *il, struct ieee80211_vif *vif);
1568 void (*post_scan) (struct il_priv *il);
1569 void (*post_associate) (struct il_priv *il);
1570 void (*config_ap) (struct il_priv *il);
1571
1572 int (*update_bcast_stations) (struct il_priv *il);
1573 int (*manage_ibss_station) (struct il_priv *il,
1574 struct ieee80211_vif *vif, bool add);
1575
1576 int (*send_led_cmd) (struct il_priv *il, struct il_led_cmd *led_cmd);
1577 };
1578
1579 struct il_mod_params {
1580 int sw_crypto;
1581 int disable_hw_scan;
1582 int num_of_queues;
1583 int disable_11n;
1584 int amsdu_size_8K;
1585 int antenna;
1586 int restart_fw;
1587 };
1588
1589 #define IL_LED_SOLID 11
1590 #define IL_DEF_LED_INTRVL cpu_to_le32(1000)
1591
1592 #define IL_LED_ACTIVITY (0<<1)
1593 #define IL_LED_LINK (1<<1)
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603 enum il_led_mode {
1604 IL_LED_DEFAULT,
1605 IL_LED_RF_STATE,
1606 IL_LED_BLINK,
1607 };
1608
1609 void il_leds_init(struct il_priv *il);
1610 void il_leds_exit(struct il_priv *il);
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643 struct il_cfg {
1644
1645 const char *name;
1646 const char *fw_name_pre;
1647 const unsigned int ucode_api_max;
1648 const unsigned int ucode_api_min;
1649 u8 valid_tx_ant;
1650 u8 valid_rx_ant;
1651 unsigned int sku;
1652 u16 eeprom_ver;
1653 u16 eeprom_calib_ver;
1654
1655 const struct il_mod_params *mod_params;
1656
1657 struct il_base_params *base_params;
1658
1659 u8 scan_rx_antennas[NUM_NL80211_BANDS];
1660 enum il_led_mode led_mode;
1661
1662 int eeprom_size;
1663 int num_of_queues;
1664 int num_of_ampdu_queues;
1665
1666 u32 pll_cfg_val;
1667 bool set_l0s;
1668 bool use_bsm;
1669
1670 u16 led_compensation;
1671 int chain_noise_num_beacons;
1672 unsigned int wd_timeout;
1673 bool temperature_kelvin;
1674 const bool ucode_tracing;
1675 const bool sensitivity_calib_by_driver;
1676 const bool chain_noise_calib_by_driver;
1677
1678 const u32 regulatory_bands[7];
1679 };
1680
1681
1682
1683
1684
1685 int il_mac_conf_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1686 unsigned int link_id, u16 queue,
1687 const struct ieee80211_tx_queue_params *params);
1688 int il_mac_tx_last_beacon(struct ieee80211_hw *hw);
1689
1690 void il_set_rxon_hwcrypto(struct il_priv *il, int hw_decrypt);
1691 int il_check_rxon_cmd(struct il_priv *il);
1692 int il_full_rxon_required(struct il_priv *il);
1693 int il_set_rxon_channel(struct il_priv *il, struct ieee80211_channel *ch);
1694 void il_set_flags_for_band(struct il_priv *il, enum nl80211_band band,
1695 struct ieee80211_vif *vif);
1696 u8 il_get_single_channel_number(struct il_priv *il, enum nl80211_band band);
1697 void il_set_rxon_ht(struct il_priv *il, struct il_ht_config *ht_conf);
1698 bool il_is_ht40_tx_allowed(struct il_priv *il,
1699 struct ieee80211_sta_ht_cap *ht_cap);
1700 void il_connection_init_rx_config(struct il_priv *il);
1701 void il_set_rate(struct il_priv *il);
1702 int il_set_decrypted_flag(struct il_priv *il, struct ieee80211_hdr *hdr,
1703 u32 decrypt_res, struct ieee80211_rx_status *stats);
1704 void il_irq_handle_error(struct il_priv *il);
1705 int il_mac_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
1706 void il_mac_remove_interface(struct ieee80211_hw *hw,
1707 struct ieee80211_vif *vif);
1708 int il_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1709 enum nl80211_iftype newtype, bool newp2p);
1710 void il_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1711 u32 queues, bool drop);
1712 int il_alloc_txq_mem(struct il_priv *il);
1713 void il_free_txq_mem(struct il_priv *il);
1714
1715 #ifdef CONFIG_IWLEGACY_DEBUGFS
1716 void il_update_stats(struct il_priv *il, bool is_tx, __le16 fc, u16 len);
1717 #else
1718 static inline void
1719 il_update_stats(struct il_priv *il, bool is_tx, __le16 fc, u16 len)
1720 {
1721 }
1722 #endif
1723
1724
1725
1726
1727 void il_hdl_pm_sleep(struct il_priv *il, struct il_rx_buf *rxb);
1728 void il_hdl_pm_debug_stats(struct il_priv *il, struct il_rx_buf *rxb);
1729 void il_hdl_error(struct il_priv *il, struct il_rx_buf *rxb);
1730 void il_hdl_csa(struct il_priv *il, struct il_rx_buf *rxb);
1731
1732
1733
1734
1735 void il_cmd_queue_unmap(struct il_priv *il);
1736 void il_cmd_queue_free(struct il_priv *il);
1737 int il_rx_queue_alloc(struct il_priv *il);
1738 void il_rx_queue_update_write_ptr(struct il_priv *il, struct il_rx_queue *q);
1739 int il_rx_queue_space(const struct il_rx_queue *q);
1740 void il_tx_cmd_complete(struct il_priv *il, struct il_rx_buf *rxb);
1741
1742 void il_hdl_spectrum_measurement(struct il_priv *il, struct il_rx_buf *rxb);
1743 void il_recover_from_stats(struct il_priv *il, struct il_rx_pkt *pkt);
1744 void il_chswitch_done(struct il_priv *il, bool is_success);
1745
1746
1747
1748
1749 void il_txq_update_write_ptr(struct il_priv *il, struct il_tx_queue *txq);
1750 int il_tx_queue_init(struct il_priv *il, u32 txq_id);
1751 void il_tx_queue_reset(struct il_priv *il, u32 txq_id);
1752 void il_tx_queue_unmap(struct il_priv *il, int txq_id);
1753 void il_tx_queue_free(struct il_priv *il, int txq_id);
1754 void il_setup_watchdog(struct il_priv *il);
1755
1756
1757
1758 int il_set_tx_power(struct il_priv *il, s8 tx_power, bool force);
1759
1760
1761
1762
1763
1764 u8 il_get_lowest_plcp(struct il_priv *il);
1765
1766
1767
1768
1769 void il_init_scan_params(struct il_priv *il);
1770 int il_scan_cancel(struct il_priv *il);
1771 int il_scan_cancel_timeout(struct il_priv *il, unsigned long ms);
1772 void il_force_scan_end(struct il_priv *il);
1773 int il_mac_hw_scan(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1774 struct ieee80211_scan_request *hw_req);
1775 void il_internal_short_hw_scan(struct il_priv *il);
1776 int il_force_reset(struct il_priv *il, bool external);
1777 u16 il_fill_probe_req(struct il_priv *il, struct ieee80211_mgmt *frame,
1778 const u8 *ta, const u8 *ie, int ie_len, int left);
1779 void il_setup_rx_scan_handlers(struct il_priv *il);
1780 u16 il_get_active_dwell_time(struct il_priv *il, enum nl80211_band band,
1781 u8 n_probes);
1782 u16 il_get_passive_dwell_time(struct il_priv *il, enum nl80211_band band,
1783 struct ieee80211_vif *vif);
1784 void il_setup_scan_deferred_work(struct il_priv *il);
1785 void il_cancel_scan_deferred_work(struct il_priv *il);
1786
1787
1788
1789
1790
1791
1792
1793 #define IL_ACTIVE_QUIET_TIME cpu_to_le16(10)
1794 #define IL_PLCP_QUIET_THRESH cpu_to_le16(1)
1795
1796 #define IL_SCAN_CHECK_WATCHDOG (HZ * 7)
1797
1798
1799
1800
1801
1802 const char *il_get_cmd_string(u8 cmd);
1803 int __must_check il_send_cmd_sync(struct il_priv *il, struct il_host_cmd *cmd);
1804 int il_send_cmd(struct il_priv *il, struct il_host_cmd *cmd);
1805 int __must_check il_send_cmd_pdu(struct il_priv *il, u8 id, u16 len,
1806 const void *data);
1807 int il_send_cmd_pdu_async(struct il_priv *il, u8 id, u16 len, const void *data,
1808 void (*callback) (struct il_priv *il,
1809 struct il_device_cmd *cmd,
1810 struct il_rx_pkt *pkt));
1811
1812 int il_enqueue_hcmd(struct il_priv *il, struct il_host_cmd *cmd);
1813
1814
1815
1816
1817
1818 void il_bg_watchdog(struct timer_list *t);
1819 u32 il_usecs_to_beacons(struct il_priv *il, u32 usec, u32 beacon_interval);
1820 __le32 il_add_beacon_time(struct il_priv *il, u32 base, u32 addon,
1821 u32 beacon_interval);
1822
1823 #ifdef CONFIG_PM_SLEEP
1824 extern const struct dev_pm_ops il_pm_ops;
1825
1826 #define IL_LEGACY_PM_OPS (&il_pm_ops)
1827
1828 #else
1829
1830 #define IL_LEGACY_PM_OPS NULL
1831
1832 #endif
1833
1834
1835
1836
1837 void il4965_dump_nic_error_log(struct il_priv *il);
1838 #ifdef CONFIG_IWLEGACY_DEBUG
1839 void il_print_rx_config_cmd(struct il_priv *il);
1840 #else
1841 static inline void
1842 il_print_rx_config_cmd(struct il_priv *il)
1843 {
1844 }
1845 #endif
1846
1847 void il_clear_isr_stats(struct il_priv *il);
1848
1849
1850
1851
1852 int il_init_geos(struct il_priv *il);
1853 void il_free_geos(struct il_priv *il);
1854
1855
1856
1857 #define S_HCMD_ACTIVE 0
1858
1859 #define S_INT_ENABLED 2
1860 #define S_RFKILL 3
1861 #define S_CT_KILL 4
1862 #define S_INIT 5
1863 #define S_ALIVE 6
1864 #define S_READY 7
1865 #define S_TEMPERATURE 8
1866 #define S_GEO_CONFIGURED 9
1867 #define S_EXIT_PENDING 10
1868 #define S_STATS 12
1869 #define S_SCANNING 13
1870 #define S_SCAN_ABORTING 14
1871 #define S_SCAN_HW 15
1872 #define S_POWER_PMI 16
1873 #define S_FW_ERROR 17
1874 #define S_CHANNEL_SWITCH_PENDING 18
1875
1876 static inline int
1877 il_is_ready(struct il_priv *il)
1878 {
1879
1880
1881 return test_bit(S_READY, &il->status) &&
1882 test_bit(S_GEO_CONFIGURED, &il->status) &&
1883 !test_bit(S_EXIT_PENDING, &il->status);
1884 }
1885
1886 static inline int
1887 il_is_alive(struct il_priv *il)
1888 {
1889 return test_bit(S_ALIVE, &il->status);
1890 }
1891
1892 static inline int
1893 il_is_init(struct il_priv *il)
1894 {
1895 return test_bit(S_INIT, &il->status);
1896 }
1897
1898 static inline int
1899 il_is_rfkill(struct il_priv *il)
1900 {
1901 return test_bit(S_RFKILL, &il->status);
1902 }
1903
1904 static inline int
1905 il_is_ctkill(struct il_priv *il)
1906 {
1907 return test_bit(S_CT_KILL, &il->status);
1908 }
1909
1910 static inline int
1911 il_is_ready_rf(struct il_priv *il)
1912 {
1913
1914 if (il_is_rfkill(il))
1915 return 0;
1916
1917 return il_is_ready(il);
1918 }
1919
1920 void il_send_bt_config(struct il_priv *il);
1921 int il_send_stats_request(struct il_priv *il, u8 flags, bool clear);
1922 void il_apm_stop(struct il_priv *il);
1923 void _il_apm_stop(struct il_priv *il);
1924
1925 int il_apm_init(struct il_priv *il);
1926
1927 int il_send_rxon_timing(struct il_priv *il);
1928
1929 static inline int
1930 il_send_rxon_assoc(struct il_priv *il)
1931 {
1932 return il->ops->rxon_assoc(il);
1933 }
1934
1935 static inline int
1936 il_commit_rxon(struct il_priv *il)
1937 {
1938 return il->ops->commit_rxon(il);
1939 }
1940
1941 static inline const struct ieee80211_supported_band *
1942 il_get_hw_mode(struct il_priv *il, enum nl80211_band band)
1943 {
1944 return il->hw->wiphy->bands[band];
1945 }
1946
1947
1948 int il_mac_config(struct ieee80211_hw *hw, u32 changed);
1949 void il_mac_reset_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
1950 void il_mac_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
1951 struct ieee80211_bss_conf *bss_conf, u64 changes);
1952 void il_tx_cmd_protection(struct il_priv *il, struct ieee80211_tx_info *info,
1953 __le16 fc, __le32 *tx_flags);
1954
1955 irqreturn_t il_isr(int irq, void *data);
1956
1957 void il_set_bit(struct il_priv *p, u32 r, u32 m);
1958 void il_clear_bit(struct il_priv *p, u32 r, u32 m);
1959 bool _il_grab_nic_access(struct il_priv *il);
1960 int _il_poll_bit(struct il_priv *il, u32 addr, u32 bits, u32 mask, int timeout);
1961 int il_poll_bit(struct il_priv *il, u32 addr, u32 mask, int timeout);
1962 u32 il_rd_prph(struct il_priv *il, u32 reg);
1963 void il_wr_prph(struct il_priv *il, u32 addr, u32 val);
1964 u32 il_read_targ_mem(struct il_priv *il, u32 addr);
1965 void il_write_targ_mem(struct il_priv *il, u32 addr, u32 val);
1966
1967 static inline bool il_need_reclaim(struct il_priv *il, struct il_rx_pkt *pkt)
1968 {
1969
1970
1971
1972
1973
1974
1975 return !(pkt->hdr.sequence & SEQ_RX_FRAME) &&
1976 pkt->hdr.cmd != N_STATS && pkt->hdr.cmd != C_TX &&
1977 pkt->hdr.cmd != N_RX_PHY && pkt->hdr.cmd != N_RX &&
1978 pkt->hdr.cmd != N_RX_MPDU && pkt->hdr.cmd != N_COMPRESSED_BA;
1979 }
1980
1981 static inline void
1982 _il_write8(struct il_priv *il, u32 ofs, u8 val)
1983 {
1984 writeb(val, il->hw_base + ofs);
1985 }
1986 #define il_write8(il, ofs, val) _il_write8(il, ofs, val)
1987
1988 static inline void
1989 _il_wr(struct il_priv *il, u32 ofs, u32 val)
1990 {
1991 writel(val, il->hw_base + ofs);
1992 }
1993
1994 static inline u32
1995 _il_rd(struct il_priv *il, u32 ofs)
1996 {
1997 return readl(il->hw_base + ofs);
1998 }
1999
2000 static inline void
2001 _il_clear_bit(struct il_priv *il, u32 reg, u32 mask)
2002 {
2003 _il_wr(il, reg, _il_rd(il, reg) & ~mask);
2004 }
2005
2006 static inline void
2007 _il_set_bit(struct il_priv *il, u32 reg, u32 mask)
2008 {
2009 _il_wr(il, reg, _il_rd(il, reg) | mask);
2010 }
2011
2012 static inline void
2013 _il_release_nic_access(struct il_priv *il)
2014 {
2015 _il_clear_bit(il, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
2016 }
2017
2018 static inline u32
2019 il_rd(struct il_priv *il, u32 reg)
2020 {
2021 u32 value;
2022 unsigned long reg_flags;
2023
2024 spin_lock_irqsave(&il->reg_lock, reg_flags);
2025 _il_grab_nic_access(il);
2026 value = _il_rd(il, reg);
2027 _il_release_nic_access(il);
2028 spin_unlock_irqrestore(&il->reg_lock, reg_flags);
2029 return value;
2030 }
2031
2032 static inline void
2033 il_wr(struct il_priv *il, u32 reg, u32 value)
2034 {
2035 unsigned long reg_flags;
2036
2037 spin_lock_irqsave(&il->reg_lock, reg_flags);
2038 if (likely(_il_grab_nic_access(il))) {
2039 _il_wr(il, reg, value);
2040 _il_release_nic_access(il);
2041 }
2042 spin_unlock_irqrestore(&il->reg_lock, reg_flags);
2043 }
2044
2045 static inline u32
2046 _il_rd_prph(struct il_priv *il, u32 reg)
2047 {
2048 _il_wr(il, HBUS_TARG_PRPH_RADDR, reg | (3 << 24));
2049 return _il_rd(il, HBUS_TARG_PRPH_RDAT);
2050 }
2051
2052 static inline void
2053 _il_wr_prph(struct il_priv *il, u32 addr, u32 val)
2054 {
2055 _il_wr(il, HBUS_TARG_PRPH_WADDR, ((addr & 0x0000FFFF) | (3 << 24)));
2056 _il_wr(il, HBUS_TARG_PRPH_WDAT, val);
2057 }
2058
2059 static inline void
2060 il_set_bits_prph(struct il_priv *il, u32 reg, u32 mask)
2061 {
2062 unsigned long reg_flags;
2063
2064 spin_lock_irqsave(&il->reg_lock, reg_flags);
2065 if (likely(_il_grab_nic_access(il))) {
2066 _il_wr_prph(il, reg, (_il_rd_prph(il, reg) | mask));
2067 _il_release_nic_access(il);
2068 }
2069 spin_unlock_irqrestore(&il->reg_lock, reg_flags);
2070 }
2071
2072 static inline void
2073 il_set_bits_mask_prph(struct il_priv *il, u32 reg, u32 bits, u32 mask)
2074 {
2075 unsigned long reg_flags;
2076
2077 spin_lock_irqsave(&il->reg_lock, reg_flags);
2078 if (likely(_il_grab_nic_access(il))) {
2079 _il_wr_prph(il, reg, ((_il_rd_prph(il, reg) & mask) | bits));
2080 _il_release_nic_access(il);
2081 }
2082 spin_unlock_irqrestore(&il->reg_lock, reg_flags);
2083 }
2084
2085 static inline void
2086 il_clear_bits_prph(struct il_priv *il, u32 reg, u32 mask)
2087 {
2088 unsigned long reg_flags;
2089 u32 val;
2090
2091 spin_lock_irqsave(&il->reg_lock, reg_flags);
2092 if (likely(_il_grab_nic_access(il))) {
2093 val = _il_rd_prph(il, reg);
2094 _il_wr_prph(il, reg, (val & ~mask));
2095 _il_release_nic_access(il);
2096 }
2097 spin_unlock_irqrestore(&il->reg_lock, reg_flags);
2098 }
2099
2100 #define HW_KEY_DYNAMIC 0
2101 #define HW_KEY_DEFAULT 1
2102
2103 #define IL_STA_DRIVER_ACTIVE BIT(0)
2104 #define IL_STA_UCODE_ACTIVE BIT(1)
2105 #define IL_STA_UCODE_INPROGRESS BIT(2)
2106
2107 #define IL_STA_LOCAL BIT(3)
2108
2109 #define IL_STA_BCAST BIT(4)
2110
2111 void il_restore_stations(struct il_priv *il);
2112 void il_clear_ucode_stations(struct il_priv *il);
2113 void il_dealloc_bcast_stations(struct il_priv *il);
2114 int il_get_free_ucode_key_idx(struct il_priv *il);
2115 int il_send_add_sta(struct il_priv *il, struct il_addsta_cmd *sta, u8 flags);
2116 int il_add_station_common(struct il_priv *il, const u8 *addr, bool is_ap,
2117 struct ieee80211_sta *sta, u8 *sta_id_r);
2118 int il_remove_station(struct il_priv *il, const u8 sta_id, const u8 * addr);
2119 int il_mac_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
2120 struct ieee80211_sta *sta);
2121
2122 u8 il_prep_station(struct il_priv *il, const u8 *addr, bool is_ap,
2123 struct ieee80211_sta *sta);
2124
2125 int il_send_lq_cmd(struct il_priv *il, struct il_link_quality_cmd *lq,
2126 u8 flags, bool init);
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137 static inline void
2138 il_clear_driver_stations(struct il_priv *il)
2139 {
2140 unsigned long flags;
2141
2142 spin_lock_irqsave(&il->sta_lock, flags);
2143 memset(il->stations, 0, sizeof(il->stations));
2144 il->num_stations = 0;
2145 il->ucode_key_table = 0;
2146 spin_unlock_irqrestore(&il->sta_lock, flags);
2147 }
2148
2149 static inline int
2150 il_sta_id(struct ieee80211_sta *sta)
2151 {
2152 if (WARN_ON(!sta))
2153 return IL_INVALID_STATION;
2154
2155 return ((struct il_station_priv_common *)sta->drv_priv)->sta_id;
2156 }
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169 static inline int
2170 il_sta_id_or_broadcast(struct il_priv *il, struct ieee80211_sta *sta)
2171 {
2172 int sta_id;
2173
2174 if (!sta)
2175 return il->hw_params.bcast_id;
2176
2177 sta_id = il_sta_id(sta);
2178
2179
2180
2181
2182
2183 WARN_ON(sta_id == IL_INVALID_STATION);
2184
2185 return sta_id;
2186 }
2187
2188
2189
2190
2191
2192
2193 static inline int
2194 il_queue_inc_wrap(int idx, int n_bd)
2195 {
2196 return ++idx & (n_bd - 1);
2197 }
2198
2199
2200
2201
2202
2203
2204 static inline int
2205 il_queue_dec_wrap(int idx, int n_bd)
2206 {
2207 return --idx & (n_bd - 1);
2208 }
2209
2210
2211 static inline void
2212 il_free_fw_desc(struct pci_dev *pci_dev, struct fw_desc *desc)
2213 {
2214 if (desc->v_addr)
2215 dma_free_coherent(&pci_dev->dev, desc->len, desc->v_addr,
2216 desc->p_addr);
2217 desc->v_addr = NULL;
2218 desc->len = 0;
2219 }
2220
2221 static inline int
2222 il_alloc_fw_desc(struct pci_dev *pci_dev, struct fw_desc *desc)
2223 {
2224 if (!desc->len) {
2225 desc->v_addr = NULL;
2226 return -EINVAL;
2227 }
2228
2229 desc->v_addr = dma_alloc_coherent(&pci_dev->dev, desc->len,
2230 &desc->p_addr, GFP_KERNEL);
2231 return (desc->v_addr != NULL) ? 0 : -ENOMEM;
2232 }
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245 static inline void
2246 il_set_swq_id(struct il_tx_queue *txq, u8 ac, u8 hwq)
2247 {
2248 BUG_ON(ac > 3);
2249 BUG_ON(hwq > 31);
2250
2251 txq->swq_id = (hwq << 2) | ac;
2252 }
2253
2254 static inline void
2255 _il_wake_queue(struct il_priv *il, u8 ac)
2256 {
2257 if (atomic_dec_return(&il->queue_stop_count[ac]) <= 0)
2258 ieee80211_wake_queue(il->hw, ac);
2259 }
2260
2261 static inline void
2262 _il_stop_queue(struct il_priv *il, u8 ac)
2263 {
2264 if (atomic_inc_return(&il->queue_stop_count[ac]) > 0)
2265 ieee80211_stop_queue(il->hw, ac);
2266 }
2267 static inline void
2268 il_wake_queue(struct il_priv *il, struct il_tx_queue *txq)
2269 {
2270 u8 queue = txq->swq_id;
2271 u8 ac = queue & 3;
2272 u8 hwq = (queue >> 2) & 0x1f;
2273
2274 if (test_and_clear_bit(hwq, il->queue_stopped))
2275 _il_wake_queue(il, ac);
2276 }
2277
2278 static inline void
2279 il_stop_queue(struct il_priv *il, struct il_tx_queue *txq)
2280 {
2281 u8 queue = txq->swq_id;
2282 u8 ac = queue & 3;
2283 u8 hwq = (queue >> 2) & 0x1f;
2284
2285 if (!test_and_set_bit(hwq, il->queue_stopped))
2286 _il_stop_queue(il, ac);
2287 }
2288
2289 static inline void
2290 il_wake_queues_by_reason(struct il_priv *il, int reason)
2291 {
2292 u8 ac;
2293
2294 if (test_and_clear_bit(reason, &il->stop_reason))
2295 for (ac = 0; ac < 4; ac++)
2296 _il_wake_queue(il, ac);
2297 }
2298
2299 static inline void
2300 il_stop_queues_by_reason(struct il_priv *il, int reason)
2301 {
2302 u8 ac;
2303
2304 if (!test_and_set_bit(reason, &il->stop_reason))
2305 for (ac = 0; ac < 4; ac++)
2306 _il_stop_queue(il, ac);
2307 }
2308
2309 #ifdef ieee80211_stop_queue
2310 #undef ieee80211_stop_queue
2311 #endif
2312
2313 #define ieee80211_stop_queue DO_NOT_USE_ieee80211_stop_queue
2314
2315 #ifdef ieee80211_wake_queue
2316 #undef ieee80211_wake_queue
2317 #endif
2318
2319 #define ieee80211_wake_queue DO_NOT_USE_ieee80211_wake_queue
2320
2321 static inline void
2322 il_disable_interrupts(struct il_priv *il)
2323 {
2324 clear_bit(S_INT_ENABLED, &il->status);
2325
2326
2327 _il_wr(il, CSR_INT_MASK, 0x00000000);
2328
2329
2330
2331 _il_wr(il, CSR_INT, 0xffffffff);
2332 _il_wr(il, CSR_FH_INT_STATUS, 0xffffffff);
2333 }
2334
2335 static inline void
2336 il_enable_rfkill_int(struct il_priv *il)
2337 {
2338 _il_wr(il, CSR_INT_MASK, CSR_INT_BIT_RF_KILL);
2339 }
2340
2341 static inline void
2342 il_enable_interrupts(struct il_priv *il)
2343 {
2344 set_bit(S_INT_ENABLED, &il->status);
2345 _il_wr(il, CSR_INT_MASK, il->inta_mask);
2346 }
2347
2348
2349
2350
2351
2352
2353 static inline u32
2354 il_beacon_time_mask_low(struct il_priv *il, u16 tsf_bits)
2355 {
2356 return (1 << tsf_bits) - 1;
2357 }
2358
2359
2360
2361
2362
2363
2364 static inline u32
2365 il_beacon_time_mask_high(struct il_priv *il, u16 tsf_bits)
2366 {
2367 return ((1 << (32 - tsf_bits)) - 1) << tsf_bits;
2368 }
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380 struct il_rb_status {
2381 __le16 closed_rb_num;
2382 __le16 closed_fr_num;
2383 __le16 finished_rb_num;
2384 __le16 finished_fr_nam;
2385 __le32 __unused;
2386 } __packed;
2387
2388 #define TFD_QUEUE_SIZE_MAX 256
2389 #define TFD_QUEUE_SIZE_BC_DUP 64
2390 #define TFD_QUEUE_BC_SIZE (TFD_QUEUE_SIZE_MAX + TFD_QUEUE_SIZE_BC_DUP)
2391 #define IL_TX_DMA_MASK DMA_BIT_MASK(36)
2392 #define IL_NUM_OF_TBS 20
2393
2394 static inline u8
2395 il_get_dma_hi_addr(dma_addr_t addr)
2396 {
2397 return (sizeof(addr) > sizeof(u32) ? (addr >> 16) >> 16 : 0) & 0xF;
2398 }
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410 struct il_tfd_tb {
2411 __le32 lo;
2412 __le16 hi_n_len;
2413 } __packed;
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443 struct il_tfd {
2444 u8 __reserved1[3];
2445 u8 num_tbs;
2446 struct il_tfd_tb tbs[IL_NUM_OF_TBS];
2447 __le32 __pad;
2448 } __packed;
2449
2450 #define PCI_CFG_RETRY_TIMEOUT 0x041
2451
2452 struct il_rate_info {
2453 u8 plcp;
2454 u8 plcp_siso;
2455 u8 plcp_mimo2;
2456 u8 ieee;
2457 u8 prev_ieee;
2458 u8 next_ieee;
2459 u8 prev_rs;
2460 u8 next_rs;
2461 u8 prev_rs_tgg;
2462 u8 next_rs_tgg;
2463 };
2464
2465 struct il3945_rate_info {
2466 u8 plcp;
2467 u8 ieee;
2468 u8 prev_ieee;
2469 u8 next_ieee;
2470 u8 prev_rs;
2471 u8 next_rs;
2472 u8 prev_rs_tgg;
2473 u8 next_rs_tgg;
2474 u8 table_rs_idx;
2475 u8 prev_table_rs;
2476 };
2477
2478
2479
2480
2481
2482 enum {
2483 RATE_1M_IDX = 0,
2484 RATE_2M_IDX,
2485 RATE_5M_IDX,
2486 RATE_11M_IDX,
2487 RATE_6M_IDX,
2488 RATE_9M_IDX,
2489 RATE_12M_IDX,
2490 RATE_18M_IDX,
2491 RATE_24M_IDX,
2492 RATE_36M_IDX,
2493 RATE_48M_IDX,
2494 RATE_54M_IDX,
2495 RATE_60M_IDX,
2496 RATE_COUNT,
2497 RATE_COUNT_LEGACY = RATE_COUNT - 1,
2498 RATE_COUNT_3945 = RATE_COUNT - 1,
2499 RATE_INVM_IDX = RATE_COUNT,
2500 RATE_INVALID = RATE_COUNT,
2501 };
2502
2503 enum {
2504 RATE_6M_IDX_TBL = 0,
2505 RATE_9M_IDX_TBL,
2506 RATE_12M_IDX_TBL,
2507 RATE_18M_IDX_TBL,
2508 RATE_24M_IDX_TBL,
2509 RATE_36M_IDX_TBL,
2510 RATE_48M_IDX_TBL,
2511 RATE_54M_IDX_TBL,
2512 RATE_1M_IDX_TBL,
2513 RATE_2M_IDX_TBL,
2514 RATE_5M_IDX_TBL,
2515 RATE_11M_IDX_TBL,
2516 RATE_INVM_IDX_TBL = RATE_INVM_IDX - 1,
2517 };
2518
2519 enum {
2520 IL_FIRST_OFDM_RATE = RATE_6M_IDX,
2521 IL39_LAST_OFDM_RATE = RATE_54M_IDX,
2522 IL_LAST_OFDM_RATE = RATE_60M_IDX,
2523 IL_FIRST_CCK_RATE = RATE_1M_IDX,
2524 IL_LAST_CCK_RATE = RATE_11M_IDX,
2525 };
2526
2527
2528 #define RATE_6M_MASK (1 << RATE_6M_IDX)
2529 #define RATE_9M_MASK (1 << RATE_9M_IDX)
2530 #define RATE_12M_MASK (1 << RATE_12M_IDX)
2531 #define RATE_18M_MASK (1 << RATE_18M_IDX)
2532 #define RATE_24M_MASK (1 << RATE_24M_IDX)
2533 #define RATE_36M_MASK (1 << RATE_36M_IDX)
2534 #define RATE_48M_MASK (1 << RATE_48M_IDX)
2535 #define RATE_54M_MASK (1 << RATE_54M_IDX)
2536 #define RATE_60M_MASK (1 << RATE_60M_IDX)
2537 #define RATE_1M_MASK (1 << RATE_1M_IDX)
2538 #define RATE_2M_MASK (1 << RATE_2M_IDX)
2539 #define RATE_5M_MASK (1 << RATE_5M_IDX)
2540 #define RATE_11M_MASK (1 << RATE_11M_IDX)
2541
2542
2543 enum {
2544 RATE_6M_PLCP = 13,
2545 RATE_9M_PLCP = 15,
2546 RATE_12M_PLCP = 5,
2547 RATE_18M_PLCP = 7,
2548 RATE_24M_PLCP = 9,
2549 RATE_36M_PLCP = 11,
2550 RATE_48M_PLCP = 1,
2551 RATE_54M_PLCP = 3,
2552 RATE_60M_PLCP = 3,
2553 RATE_1M_PLCP = 10,
2554 RATE_2M_PLCP = 20,
2555 RATE_5M_PLCP = 55,
2556 RATE_11M_PLCP = 110,
2557
2558 };
2559
2560
2561 enum {
2562 RATE_SISO_6M_PLCP = 0,
2563 RATE_SISO_12M_PLCP = 1,
2564 RATE_SISO_18M_PLCP = 2,
2565 RATE_SISO_24M_PLCP = 3,
2566 RATE_SISO_36M_PLCP = 4,
2567 RATE_SISO_48M_PLCP = 5,
2568 RATE_SISO_54M_PLCP = 6,
2569 RATE_SISO_60M_PLCP = 7,
2570 RATE_MIMO2_6M_PLCP = 0x8,
2571 RATE_MIMO2_12M_PLCP = 0x9,
2572 RATE_MIMO2_18M_PLCP = 0xa,
2573 RATE_MIMO2_24M_PLCP = 0xb,
2574 RATE_MIMO2_36M_PLCP = 0xc,
2575 RATE_MIMO2_48M_PLCP = 0xd,
2576 RATE_MIMO2_54M_PLCP = 0xe,
2577 RATE_MIMO2_60M_PLCP = 0xf,
2578 RATE_SISO_INVM_PLCP,
2579 RATE_MIMO2_INVM_PLCP = RATE_SISO_INVM_PLCP,
2580 };
2581
2582
2583 enum {
2584 RATE_6M_IEEE = 12,
2585 RATE_9M_IEEE = 18,
2586 RATE_12M_IEEE = 24,
2587 RATE_18M_IEEE = 36,
2588 RATE_24M_IEEE = 48,
2589 RATE_36M_IEEE = 72,
2590 RATE_48M_IEEE = 96,
2591 RATE_54M_IEEE = 108,
2592 RATE_60M_IEEE = 120,
2593 RATE_1M_IEEE = 2,
2594 RATE_2M_IEEE = 4,
2595 RATE_5M_IEEE = 11,
2596 RATE_11M_IEEE = 22,
2597 };
2598
2599 #define IL_CCK_BASIC_RATES_MASK \
2600 (RATE_1M_MASK | \
2601 RATE_2M_MASK)
2602
2603 #define IL_CCK_RATES_MASK \
2604 (IL_CCK_BASIC_RATES_MASK | \
2605 RATE_5M_MASK | \
2606 RATE_11M_MASK)
2607
2608 #define IL_OFDM_BASIC_RATES_MASK \
2609 (RATE_6M_MASK | \
2610 RATE_12M_MASK | \
2611 RATE_24M_MASK)
2612
2613 #define IL_OFDM_RATES_MASK \
2614 (IL_OFDM_BASIC_RATES_MASK | \
2615 RATE_9M_MASK | \
2616 RATE_18M_MASK | \
2617 RATE_36M_MASK | \
2618 RATE_48M_MASK | \
2619 RATE_54M_MASK)
2620
2621 #define IL_BASIC_RATES_MASK \
2622 (IL_OFDM_BASIC_RATES_MASK | \
2623 IL_CCK_BASIC_RATES_MASK)
2624
2625 #define RATES_MASK ((1 << RATE_COUNT) - 1)
2626 #define RATES_MASK_3945 ((1 << RATE_COUNT_3945) - 1)
2627
2628 #define IL_INVALID_VALUE -1
2629
2630 #define IL_MIN_RSSI_VAL -100
2631 #define IL_MAX_RSSI_VAL 0
2632
2633
2634
2635 #define IL_LEGACY_FAILURE_LIMIT 160
2636 #define IL_LEGACY_SUCCESS_LIMIT 480
2637 #define IL_LEGACY_TBL_COUNT 160
2638
2639 #define IL_NONE_LEGACY_FAILURE_LIMIT 400
2640 #define IL_NONE_LEGACY_SUCCESS_LIMIT 4500
2641 #define IL_NONE_LEGACY_TBL_COUNT 1500
2642
2643
2644 #define IL_RS_GOOD_RATIO 12800
2645 #define RATE_SCALE_SWITCH 10880
2646 #define RATE_HIGH_TH 10880
2647 #define RATE_INCREASE_TH 6400
2648 #define RATE_DECREASE_TH 1920
2649
2650
2651 #define IL_LEGACY_SWITCH_ANTENNA1 0
2652 #define IL_LEGACY_SWITCH_ANTENNA2 1
2653 #define IL_LEGACY_SWITCH_SISO 2
2654 #define IL_LEGACY_SWITCH_MIMO2_AB 3
2655 #define IL_LEGACY_SWITCH_MIMO2_AC 4
2656 #define IL_LEGACY_SWITCH_MIMO2_BC 5
2657
2658
2659 #define IL_SISO_SWITCH_ANTENNA1 0
2660 #define IL_SISO_SWITCH_ANTENNA2 1
2661 #define IL_SISO_SWITCH_MIMO2_AB 2
2662 #define IL_SISO_SWITCH_MIMO2_AC 3
2663 #define IL_SISO_SWITCH_MIMO2_BC 4
2664 #define IL_SISO_SWITCH_GI 5
2665
2666
2667 #define IL_MIMO2_SWITCH_ANTENNA1 0
2668 #define IL_MIMO2_SWITCH_ANTENNA2 1
2669 #define IL_MIMO2_SWITCH_SISO_A 2
2670 #define IL_MIMO2_SWITCH_SISO_B 3
2671 #define IL_MIMO2_SWITCH_SISO_C 4
2672 #define IL_MIMO2_SWITCH_GI 5
2673
2674 #define IL_MAX_SEARCH IL_MIMO2_SWITCH_GI
2675
2676 #define IL_ACTION_LIMIT 3
2677
2678 #define LQ_SIZE 2
2679
2680
2681 #define IL_AGG_TPT_THREHOLD 0
2682 #define IL_AGG_LOAD_THRESHOLD 10
2683 #define IL_AGG_ALL_TID 0xff
2684 #define TID_QUEUE_CELL_SPACING 50
2685 #define TID_QUEUE_MAX_SIZE 20
2686 #define TID_ROUND_VALUE 5
2687 #define TID_MAX_LOAD_COUNT 8
2688
2689 #define TID_MAX_TIME_DIFF ((TID_QUEUE_MAX_SIZE - 1) * TID_QUEUE_CELL_SPACING)
2690 #define TIME_WRAP_AROUND(x, y) (((y) > (x)) ? (y) - (x) : (0-(x)) + (y))
2691
2692 extern const struct il_rate_info il_rates[RATE_COUNT];
2693
2694 enum il_table_type {
2695 LQ_NONE,
2696 LQ_G,
2697 LQ_A,
2698 LQ_SISO,
2699 LQ_MIMO2,
2700 LQ_MAX,
2701 };
2702
2703 #define is_legacy(tbl) ((tbl) == LQ_G || (tbl) == LQ_A)
2704 #define is_siso(tbl) ((tbl) == LQ_SISO)
2705 #define is_mimo2(tbl) ((tbl) == LQ_MIMO2)
2706 #define is_mimo(tbl) (is_mimo2(tbl))
2707 #define is_Ht(tbl) (is_siso(tbl) || is_mimo(tbl))
2708 #define is_a_band(tbl) ((tbl) == LQ_A)
2709 #define is_g_and(tbl) ((tbl) == LQ_G)
2710
2711 #define ANT_NONE 0x0
2712 #define ANT_A BIT(0)
2713 #define ANT_B BIT(1)
2714 #define ANT_AB (ANT_A | ANT_B)
2715 #define ANT_C BIT(2)
2716 #define ANT_AC (ANT_A | ANT_C)
2717 #define ANT_BC (ANT_B | ANT_C)
2718 #define ANT_ABC (ANT_AB | ANT_C)
2719
2720 #define IL_MAX_MCS_DISPLAY_SIZE 12
2721
2722 struct il_rate_mcs_info {
2723 char mbps[IL_MAX_MCS_DISPLAY_SIZE];
2724 char mcs[IL_MAX_MCS_DISPLAY_SIZE];
2725 };
2726
2727
2728
2729
2730 struct il_rate_scale_data {
2731 u64 data;
2732 s32 success_counter;
2733 s32 success_ratio;
2734 s32 counter;
2735 s32 average_tpt;
2736 unsigned long stamp;
2737 };
2738
2739
2740
2741
2742
2743
2744
2745 struct il_scale_tbl_info {
2746 enum il_table_type lq_type;
2747 u8 ant_type;
2748 u8 is_SGI;
2749 u8 is_ht40;
2750 u8 is_dup;
2751 u8 action;
2752 u8 max_search;
2753 s32 *expected_tpt;
2754 u32 current_rate;
2755 struct il_rate_scale_data win[RATE_COUNT];
2756 };
2757
2758 struct il_traffic_load {
2759 unsigned long time_stamp;
2760 u32 packet_count[TID_QUEUE_MAX_SIZE];
2761
2762 u32 total;
2763
2764 u8 queue_count;
2765
2766 u8 head;
2767 };
2768
2769
2770
2771
2772
2773
2774 struct il_lq_sta {
2775 u8 active_tbl;
2776 u8 enable_counter;
2777 u8 stay_in_tbl;
2778 u8 search_better_tbl;
2779 s32 last_tpt;
2780
2781
2782 u32 table_count_limit;
2783 u32 max_failure_limit;
2784 u32 max_success_limit;
2785 u32 table_count;
2786 u32 total_failed;
2787 u32 total_success;
2788 u64 flush_timer;
2789
2790 u8 action_counter;
2791 u8 is_green;
2792 u8 is_dup;
2793 enum nl80211_band band;
2794
2795
2796 u32 supp_rates;
2797 u16 active_legacy_rate;
2798 u16 active_siso_rate;
2799 u16 active_mimo2_rate;
2800 s8 max_rate_idx;
2801 u8 missed_rate_counter;
2802
2803 struct il_link_quality_cmd lq;
2804 struct il_scale_tbl_info lq_info[LQ_SIZE];
2805 struct il_traffic_load load[TID_MAX_LOAD_COUNT];
2806 u8 tx_agg_tid_en;
2807 #ifdef CONFIG_MAC80211_DEBUGFS
2808 u32 dbg_fixed_rate;
2809 #endif
2810 struct il_priv *drv;
2811
2812
2813 int last_txrate_idx;
2814
2815 u32 last_rate_n_flags;
2816
2817 u8 is_agg;
2818 };
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830 struct il_station_priv {
2831 struct il_station_priv_common common;
2832 struct il_lq_sta lq_sta;
2833 atomic_t pending_frames;
2834 bool client;
2835 bool asleep;
2836 };
2837
2838 static inline u8
2839 il4965_num_of_ant(u8 m)
2840 {
2841 return !!(m & ANT_A) + !!(m & ANT_B) + !!(m & ANT_C);
2842 }
2843
2844 static inline u8
2845 il4965_first_antenna(u8 mask)
2846 {
2847 if (mask & ANT_A)
2848 return ANT_A;
2849 if (mask & ANT_B)
2850 return ANT_B;
2851 return ANT_C;
2852 }
2853
2854
2855
2856
2857
2858
2859
2860 void il3945_rate_scale_init(struct ieee80211_hw *hw, s32 sta_id);
2861
2862
2863 void il4965_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta,
2864 u8 sta_id);
2865 void il3945_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta,
2866 u8 sta_id);
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878 int il4965_rate_control_register(void);
2879 int il3945_rate_control_register(void);
2880
2881
2882
2883
2884
2885
2886
2887 void il4965_rate_control_unregister(void);
2888 void il3945_rate_control_unregister(void);
2889
2890 int il_power_update_mode(struct il_priv *il, bool force);
2891 void il_power_initialize(struct il_priv *il);
2892
2893 extern u32 il_debug_level;
2894
2895 #ifdef CONFIG_IWLEGACY_DEBUG
2896
2897
2898
2899
2900
2901
2902
2903 static inline u32
2904 il_get_debug_level(struct il_priv *il)
2905 {
2906 if (il->debug_level)
2907 return il->debug_level;
2908 else
2909 return il_debug_level;
2910 }
2911 #else
2912 static inline u32
2913 il_get_debug_level(struct il_priv *il)
2914 {
2915 return il_debug_level;
2916 }
2917 #endif
2918
2919 #define il_print_hex_error(il, p, len) \
2920 do { \
2921 print_hex_dump(KERN_ERR, "iwl data: ", \
2922 DUMP_PREFIX_OFFSET, 16, 1, p, len, 1); \
2923 } while (0)
2924
2925 #ifdef CONFIG_IWLEGACY_DEBUG
2926 #define IL_DBG(level, fmt, args...) \
2927 do { \
2928 if (il_get_debug_level(il) & level) \
2929 dev_err(&il->hw->wiphy->dev, "%s " fmt, __func__, \
2930 ##args); \
2931 } while (0)
2932
2933 #define il_print_hex_dump(il, level, p, len) \
2934 do { \
2935 if (il_get_debug_level(il) & level) \
2936 print_hex_dump(KERN_DEBUG, "iwl data: ", \
2937 DUMP_PREFIX_OFFSET, 16, 1, p, len, 1); \
2938 } while (0)
2939
2940 #else
2941 #define IL_DBG(level, fmt, args...) no_printk(fmt, ##args)
2942 static inline void
2943 il_print_hex_dump(struct il_priv *il, int level, const void *p, u32 len)
2944 {
2945 }
2946 #endif
2947
2948 #ifdef CONFIG_IWLEGACY_DEBUGFS
2949 void il_dbgfs_register(struct il_priv *il, const char *name);
2950 void il_dbgfs_unregister(struct il_priv *il);
2951 #else
2952 static inline void il_dbgfs_register(struct il_priv *il, const char *name)
2953 {
2954 }
2955
2956 static inline void
2957 il_dbgfs_unregister(struct il_priv *il)
2958 {
2959 }
2960 #endif
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986 #define IL_DL_INFO (1 << 0)
2987 #define IL_DL_MAC80211 (1 << 1)
2988 #define IL_DL_HCMD (1 << 2)
2989 #define IL_DL_STATE (1 << 3)
2990
2991 #define IL_DL_MACDUMP (1 << 4)
2992 #define IL_DL_HCMD_DUMP (1 << 5)
2993 #define IL_DL_EEPROM (1 << 6)
2994 #define IL_DL_RADIO (1 << 7)
2995
2996 #define IL_DL_POWER (1 << 8)
2997 #define IL_DL_TEMP (1 << 9)
2998 #define IL_DL_NOTIF (1 << 10)
2999 #define IL_DL_SCAN (1 << 11)
3000
3001 #define IL_DL_ASSOC (1 << 12)
3002 #define IL_DL_DROP (1 << 13)
3003 #define IL_DL_TXPOWER (1 << 14)
3004 #define IL_DL_AP (1 << 15)
3005
3006 #define IL_DL_FW (1 << 16)
3007 #define IL_DL_RF_KILL (1 << 17)
3008 #define IL_DL_FW_ERRORS (1 << 18)
3009 #define IL_DL_LED (1 << 19)
3010
3011 #define IL_DL_RATE (1 << 20)
3012 #define IL_DL_CALIB (1 << 21)
3013 #define IL_DL_WEP (1 << 22)
3014 #define IL_DL_TX (1 << 23)
3015
3016 #define IL_DL_RX (1 << 24)
3017 #define IL_DL_ISR (1 << 25)
3018 #define IL_DL_HT (1 << 26)
3019
3020 #define IL_DL_11H (1 << 28)
3021 #define IL_DL_STATS (1 << 29)
3022 #define IL_DL_TX_REPLY (1 << 30)
3023 #define IL_DL_QOS (1 << 31)
3024
3025 #define D_INFO(f, a...) IL_DBG(IL_DL_INFO, f, ## a)
3026 #define D_MAC80211(f, a...) IL_DBG(IL_DL_MAC80211, f, ## a)
3027 #define D_MACDUMP(f, a...) IL_DBG(IL_DL_MACDUMP, f, ## a)
3028 #define D_TEMP(f, a...) IL_DBG(IL_DL_TEMP, f, ## a)
3029 #define D_SCAN(f, a...) IL_DBG(IL_DL_SCAN, f, ## a)
3030 #define D_RX(f, a...) IL_DBG(IL_DL_RX, f, ## a)
3031 #define D_TX(f, a...) IL_DBG(IL_DL_TX, f, ## a)
3032 #define D_ISR(f, a...) IL_DBG(IL_DL_ISR, f, ## a)
3033 #define D_LED(f, a...) IL_DBG(IL_DL_LED, f, ## a)
3034 #define D_WEP(f, a...) IL_DBG(IL_DL_WEP, f, ## a)
3035 #define D_HC(f, a...) IL_DBG(IL_DL_HCMD, f, ## a)
3036 #define D_HC_DUMP(f, a...) IL_DBG(IL_DL_HCMD_DUMP, f, ## a)
3037 #define D_EEPROM(f, a...) IL_DBG(IL_DL_EEPROM, f, ## a)
3038 #define D_CALIB(f, a...) IL_DBG(IL_DL_CALIB, f, ## a)
3039 #define D_FW(f, a...) IL_DBG(IL_DL_FW, f, ## a)
3040 #define D_RF_KILL(f, a...) IL_DBG(IL_DL_RF_KILL, f, ## a)
3041 #define D_DROP(f, a...) IL_DBG(IL_DL_DROP, f, ## a)
3042 #define D_AP(f, a...) IL_DBG(IL_DL_AP, f, ## a)
3043 #define D_TXPOWER(f, a...) IL_DBG(IL_DL_TXPOWER, f, ## a)
3044 #define D_RATE(f, a...) IL_DBG(IL_DL_RATE, f, ## a)
3045 #define D_NOTIF(f, a...) IL_DBG(IL_DL_NOTIF, f, ## a)
3046 #define D_ASSOC(f, a...) IL_DBG(IL_DL_ASSOC, f, ## a)
3047 #define D_HT(f, a...) IL_DBG(IL_DL_HT, f, ## a)
3048 #define D_STATS(f, a...) IL_DBG(IL_DL_STATS, f, ## a)
3049 #define D_TX_REPLY(f, a...) IL_DBG(IL_DL_TX_REPLY, f, ## a)
3050 #define D_QOS(f, a...) IL_DBG(IL_DL_QOS, f, ## a)
3051 #define D_RADIO(f, a...) IL_DBG(IL_DL_RADIO, f, ## a)
3052 #define D_POWER(f, a...) IL_DBG(IL_DL_POWER, f, ## a)
3053 #define D_11H(f, a...) IL_DBG(IL_DL_11H, f, ## a)
3054
3055 #endif