diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath9k/hw.h')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hw.h | 275 |
1 files changed, 250 insertions, 25 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index dbbf7ca5f97d..77245dff5993 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) 2008-2009 Atheros Communications Inc. | 2 | * Copyright (c) 2008-2010 Atheros Communications Inc. |
3 | * | 3 | * |
4 | * Permission to use, copy, modify, and/or distribute this software for any | 4 | * Permission to use, copy, modify, and/or distribute this software for any |
5 | * purpose with or without fee is hereby granted, provided that the above | 5 | * purpose with or without fee is hereby granted, provided that the above |
@@ -41,18 +41,16 @@ | |||
41 | #define AR9280_DEVID_PCIE 0x002a | 41 | #define AR9280_DEVID_PCIE 0x002a |
42 | #define AR9285_DEVID_PCIE 0x002b | 42 | #define AR9285_DEVID_PCIE 0x002b |
43 | #define AR2427_DEVID_PCIE 0x002c | 43 | #define AR2427_DEVID_PCIE 0x002c |
44 | #define AR9287_DEVID_PCI 0x002d | ||
45 | #define AR9287_DEVID_PCIE 0x002e | ||
46 | #define AR9300_DEVID_PCIE 0x0030 | ||
44 | 47 | ||
45 | #define AR5416_AR9100_DEVID 0x000b | 48 | #define AR5416_AR9100_DEVID 0x000b |
46 | 49 | ||
47 | #define AR9271_USB 0x9271 | ||
48 | |||
49 | #define AR_SUBVENDOR_ID_NOG 0x0e11 | 50 | #define AR_SUBVENDOR_ID_NOG 0x0e11 |
50 | #define AR_SUBVENDOR_ID_NEW_A 0x7065 | 51 | #define AR_SUBVENDOR_ID_NEW_A 0x7065 |
51 | #define AR5416_MAGIC 0x19641014 | 52 | #define AR5416_MAGIC 0x19641014 |
52 | 53 | ||
53 | #define AR5416_DEVID_AR9287_PCI 0x002D | ||
54 | #define AR5416_DEVID_AR9287_PCIE 0x002E | ||
55 | |||
56 | #define AR9280_COEX2WIRE_SUBSYSID 0x309b | 54 | #define AR9280_COEX2WIRE_SUBSYSID 0x309b |
57 | #define AT9285_COEX3WIRE_SA_SUBSYSID 0x30aa | 55 | #define AT9285_COEX3WIRE_SA_SUBSYSID 0x30aa |
58 | #define AT9285_COEX3WIRE_DA_SUBSYSID 0x30ab | 56 | #define AT9285_COEX3WIRE_DA_SUBSYSID 0x30ab |
@@ -70,6 +68,24 @@ | |||
70 | #define REG_READ(_ah, _reg) \ | 68 | #define REG_READ(_ah, _reg) \ |
71 | ath9k_hw_common(_ah)->ops->read((_ah), (_reg)) | 69 | ath9k_hw_common(_ah)->ops->read((_ah), (_reg)) |
72 | 70 | ||
71 | #define ENABLE_REGWRITE_BUFFER(_ah) \ | ||
72 | do { \ | ||
73 | if (AR_SREV_9271(_ah)) \ | ||
74 | ath9k_hw_common(_ah)->ops->enable_write_buffer((_ah)); \ | ||
75 | } while (0) | ||
76 | |||
77 | #define DISABLE_REGWRITE_BUFFER(_ah) \ | ||
78 | do { \ | ||
79 | if (AR_SREV_9271(_ah)) \ | ||
80 | ath9k_hw_common(_ah)->ops->disable_write_buffer((_ah)); \ | ||
81 | } while (0) | ||
82 | |||
83 | #define REGWRITE_BUFFER_FLUSH(_ah) \ | ||
84 | do { \ | ||
85 | if (AR_SREV_9271(_ah)) \ | ||
86 | ath9k_hw_common(_ah)->ops->write_flush((_ah)); \ | ||
87 | } while (0) | ||
88 | |||
73 | #define SM(_v, _f) (((_v) << _f##_S) & _f) | 89 | #define SM(_v, _f) (((_v) << _f##_S) & _f) |
74 | #define MS(_v, _f) (((_v) & _f) >> _f##_S) | 90 | #define MS(_v, _f) (((_v) & _f) >> _f##_S) |
75 | #define REG_RMW(_a, _r, _set, _clr) \ | 91 | #define REG_RMW(_a, _r, _set, _clr) \ |
@@ -77,6 +93,8 @@ | |||
77 | #define REG_RMW_FIELD(_a, _r, _f, _v) \ | 93 | #define REG_RMW_FIELD(_a, _r, _f, _v) \ |
78 | REG_WRITE(_a, _r, \ | 94 | REG_WRITE(_a, _r, \ |
79 | (REG_READ(_a, _r) & ~_f) | (((_v) << _f##_S) & _f)) | 95 | (REG_READ(_a, _r) & ~_f) | (((_v) << _f##_S) & _f)) |
96 | #define REG_READ_FIELD(_a, _r, _f) \ | ||
97 | (((REG_READ(_a, _r) & _f) >> _f##_S)) | ||
80 | #define REG_SET_BIT(_a, _r, _f) \ | 98 | #define REG_SET_BIT(_a, _r, _f) \ |
81 | REG_WRITE(_a, _r, REG_READ(_a, _r) | _f) | 99 | REG_WRITE(_a, _r, REG_READ(_a, _r) | _f) |
82 | #define REG_CLR_BIT(_a, _r, _f) \ | 100 | #define REG_CLR_BIT(_a, _r, _f) \ |
@@ -137,6 +155,16 @@ | |||
137 | 155 | ||
138 | #define TU_TO_USEC(_tu) ((_tu) << 10) | 156 | #define TU_TO_USEC(_tu) ((_tu) << 10) |
139 | 157 | ||
158 | #define ATH9K_HW_RX_HP_QDEPTH 16 | ||
159 | #define ATH9K_HW_RX_LP_QDEPTH 128 | ||
160 | |||
161 | enum ath_ini_subsys { | ||
162 | ATH_INI_PRE = 0, | ||
163 | ATH_INI_CORE, | ||
164 | ATH_INI_POST, | ||
165 | ATH_INI_NUM_SPLIT, | ||
166 | }; | ||
167 | |||
140 | enum wireless_mode { | 168 | enum wireless_mode { |
141 | ATH9K_MODE_11A = 0, | 169 | ATH9K_MODE_11A = 0, |
142 | ATH9K_MODE_11G, | 170 | ATH9K_MODE_11G, |
@@ -167,13 +195,16 @@ enum ath9k_hw_caps { | |||
167 | ATH9K_HW_CAP_ENHANCEDPM = BIT(14), | 195 | ATH9K_HW_CAP_ENHANCEDPM = BIT(14), |
168 | ATH9K_HW_CAP_AUTOSLEEP = BIT(15), | 196 | ATH9K_HW_CAP_AUTOSLEEP = BIT(15), |
169 | ATH9K_HW_CAP_4KB_SPLITTRANS = BIT(16), | 197 | ATH9K_HW_CAP_4KB_SPLITTRANS = BIT(16), |
198 | ATH9K_HW_CAP_EDMA = BIT(17), | ||
199 | ATH9K_HW_CAP_RAC_SUPPORTED = BIT(18), | ||
200 | ATH9K_HW_CAP_LDPC = BIT(19), | ||
201 | ATH9K_HW_CAP_FASTCLOCK = BIT(20), | ||
170 | }; | 202 | }; |
171 | 203 | ||
172 | enum ath9k_capability_type { | 204 | enum ath9k_capability_type { |
173 | ATH9K_CAP_CIPHER = 0, | 205 | ATH9K_CAP_CIPHER = 0, |
174 | ATH9K_CAP_TKIP_MIC, | 206 | ATH9K_CAP_TKIP_MIC, |
175 | ATH9K_CAP_TKIP_SPLIT, | 207 | ATH9K_CAP_TKIP_SPLIT, |
176 | ATH9K_CAP_DIVERSITY, | ||
177 | ATH9K_CAP_TXPOW, | 208 | ATH9K_CAP_TXPOW, |
178 | ATH9K_CAP_MCAST_KEYSRCH, | 209 | ATH9K_CAP_MCAST_KEYSRCH, |
179 | ATH9K_CAP_DS | 210 | ATH9K_CAP_DS |
@@ -194,6 +225,11 @@ struct ath9k_hw_capabilities { | |||
194 | u8 num_gpio_pins; | 225 | u8 num_gpio_pins; |
195 | u8 num_antcfg_2ghz; | 226 | u8 num_antcfg_2ghz; |
196 | u8 num_antcfg_5ghz; | 227 | u8 num_antcfg_5ghz; |
228 | u8 rx_hp_qdepth; | ||
229 | u8 rx_lp_qdepth; | ||
230 | u8 rx_status_len; | ||
231 | u8 tx_desc_len; | ||
232 | u8 txs_len; | ||
197 | }; | 233 | }; |
198 | 234 | ||
199 | struct ath9k_ops_config { | 235 | struct ath9k_ops_config { |
@@ -214,6 +250,7 @@ struct ath9k_ops_config { | |||
214 | u32 enable_ani; | 250 | u32 enable_ani; |
215 | int serialize_regmode; | 251 | int serialize_regmode; |
216 | bool rx_intr_mitigation; | 252 | bool rx_intr_mitigation; |
253 | bool tx_intr_mitigation; | ||
217 | #define SPUR_DISABLE 0 | 254 | #define SPUR_DISABLE 0 |
218 | #define SPUR_ENABLE_IOCTL 1 | 255 | #define SPUR_ENABLE_IOCTL 1 |
219 | #define SPUR_ENABLE_EEPROM 2 | 256 | #define SPUR_ENABLE_EEPROM 2 |
@@ -225,6 +262,7 @@ struct ath9k_ops_config { | |||
225 | #define AR_BASE_FREQ_5GHZ 4900 | 262 | #define AR_BASE_FREQ_5GHZ 4900 |
226 | #define AR_SPUR_FEEQ_BOUND_HT40 19 | 263 | #define AR_SPUR_FEEQ_BOUND_HT40 19 |
227 | #define AR_SPUR_FEEQ_BOUND_HT20 10 | 264 | #define AR_SPUR_FEEQ_BOUND_HT20 10 |
265 | bool tx_iq_calibration; /* Only available for >= AR9003 */ | ||
228 | int spurmode; | 266 | int spurmode; |
229 | u16 spurchans[AR_EEPROM_MODAL_SPURS][2]; | 267 | u16 spurchans[AR_EEPROM_MODAL_SPURS][2]; |
230 | u8 max_txtrig_level; | 268 | u8 max_txtrig_level; |
@@ -233,6 +271,8 @@ struct ath9k_ops_config { | |||
233 | enum ath9k_int { | 271 | enum ath9k_int { |
234 | ATH9K_INT_RX = 0x00000001, | 272 | ATH9K_INT_RX = 0x00000001, |
235 | ATH9K_INT_RXDESC = 0x00000002, | 273 | ATH9K_INT_RXDESC = 0x00000002, |
274 | ATH9K_INT_RXHP = 0x00000001, | ||
275 | ATH9K_INT_RXLP = 0x00000002, | ||
236 | ATH9K_INT_RXNOFRM = 0x00000008, | 276 | ATH9K_INT_RXNOFRM = 0x00000008, |
237 | ATH9K_INT_RXEOL = 0x00000010, | 277 | ATH9K_INT_RXEOL = 0x00000010, |
238 | ATH9K_INT_RXORN = 0x00000020, | 278 | ATH9K_INT_RXORN = 0x00000020, |
@@ -329,10 +369,9 @@ struct ath9k_channel { | |||
329 | #define IS_CHAN_2GHZ(_c) (((_c)->channelFlags & CHANNEL_2GHZ) != 0) | 369 | #define IS_CHAN_2GHZ(_c) (((_c)->channelFlags & CHANNEL_2GHZ) != 0) |
330 | #define IS_CHAN_HALF_RATE(_c) (((_c)->channelFlags & CHANNEL_HALF) != 0) | 370 | #define IS_CHAN_HALF_RATE(_c) (((_c)->channelFlags & CHANNEL_HALF) != 0) |
331 | #define IS_CHAN_QUARTER_RATE(_c) (((_c)->channelFlags & CHANNEL_QUARTER) != 0) | 371 | #define IS_CHAN_QUARTER_RATE(_c) (((_c)->channelFlags & CHANNEL_QUARTER) != 0) |
332 | #define IS_CHAN_A_5MHZ_SPACED(_c) \ | 372 | #define IS_CHAN_A_FAST_CLOCK(_ah, _c) \ |
333 | ((((_c)->channelFlags & CHANNEL_5GHZ) != 0) && \ | 373 | ((((_c)->channelFlags & CHANNEL_5GHZ) != 0) && \ |
334 | (((_c)->channel % 20) != 0) && \ | 374 | ((_ah)->caps.hw_caps & ATH9K_HW_CAP_FASTCLOCK)) |
335 | (((_c)->channel % 10) != 0)) | ||
336 | 375 | ||
337 | /* These macros check chanmode and not channelFlags */ | 376 | /* These macros check chanmode and not channelFlags */ |
338 | #define IS_CHAN_B(_c) ((_c)->chanmode == CHANNEL_B) | 377 | #define IS_CHAN_B(_c) ((_c)->chanmode == CHANNEL_B) |
@@ -365,6 +404,12 @@ enum ser_reg_mode { | |||
365 | SER_REG_MODE_AUTO = 2, | 404 | SER_REG_MODE_AUTO = 2, |
366 | }; | 405 | }; |
367 | 406 | ||
407 | enum ath9k_rx_qtype { | ||
408 | ATH9K_RX_QUEUE_HP, | ||
409 | ATH9K_RX_QUEUE_LP, | ||
410 | ATH9K_RX_QUEUE_MAX, | ||
411 | }; | ||
412 | |||
368 | struct ath9k_beacon_state { | 413 | struct ath9k_beacon_state { |
369 | u32 bs_nexttbtt; | 414 | u32 bs_nexttbtt; |
370 | u32 bs_nextdtim; | 415 | u32 bs_nextdtim; |
@@ -442,6 +487,124 @@ struct ath_gen_timer_table { | |||
442 | } timer_mask; | 487 | } timer_mask; |
443 | }; | 488 | }; |
444 | 489 | ||
490 | /** | ||
491 | * struct ath_hw_private_ops - callbacks used internally by hardware code | ||
492 | * | ||
493 | * This structure contains private callbacks designed to only be used internally | ||
494 | * by the hardware core. | ||
495 | * | ||
496 | * @init_cal_settings: setup types of calibrations supported | ||
497 | * @init_cal: starts actual calibration | ||
498 | * | ||
499 | * @init_mode_regs: Initializes mode registers | ||
500 | * @init_mode_gain_regs: Initialize TX/RX gain registers | ||
501 | * @macversion_supported: If this specific mac revision is supported | ||
502 | * | ||
503 | * @rf_set_freq: change frequency | ||
504 | * @spur_mitigate_freq: spur mitigation | ||
505 | * @rf_alloc_ext_banks: | ||
506 | * @rf_free_ext_banks: | ||
507 | * @set_rf_regs: | ||
508 | * @compute_pll_control: compute the PLL control value to use for | ||
509 | * AR_RTC_PLL_CONTROL for a given channel | ||
510 | * @setup_calibration: set up calibration | ||
511 | * @iscal_supported: used to query if a type of calibration is supported | ||
512 | * @loadnf: load noise floor read from each chain on the CCA registers | ||
513 | */ | ||
514 | struct ath_hw_private_ops { | ||
515 | /* Calibration ops */ | ||
516 | void (*init_cal_settings)(struct ath_hw *ah); | ||
517 | bool (*init_cal)(struct ath_hw *ah, struct ath9k_channel *chan); | ||
518 | |||
519 | void (*init_mode_regs)(struct ath_hw *ah); | ||
520 | void (*init_mode_gain_regs)(struct ath_hw *ah); | ||
521 | bool (*macversion_supported)(u32 macversion); | ||
522 | void (*setup_calibration)(struct ath_hw *ah, | ||
523 | struct ath9k_cal_list *currCal); | ||
524 | bool (*iscal_supported)(struct ath_hw *ah, | ||
525 | enum ath9k_cal_types calType); | ||
526 | |||
527 | /* PHY ops */ | ||
528 | int (*rf_set_freq)(struct ath_hw *ah, | ||
529 | struct ath9k_channel *chan); | ||
530 | void (*spur_mitigate_freq)(struct ath_hw *ah, | ||
531 | struct ath9k_channel *chan); | ||
532 | int (*rf_alloc_ext_banks)(struct ath_hw *ah); | ||
533 | void (*rf_free_ext_banks)(struct ath_hw *ah); | ||
534 | bool (*set_rf_regs)(struct ath_hw *ah, | ||
535 | struct ath9k_channel *chan, | ||
536 | u16 modesIndex); | ||
537 | void (*set_channel_regs)(struct ath_hw *ah, struct ath9k_channel *chan); | ||
538 | void (*init_bb)(struct ath_hw *ah, | ||
539 | struct ath9k_channel *chan); | ||
540 | int (*process_ini)(struct ath_hw *ah, struct ath9k_channel *chan); | ||
541 | void (*olc_init)(struct ath_hw *ah); | ||
542 | void (*set_rfmode)(struct ath_hw *ah, struct ath9k_channel *chan); | ||
543 | void (*mark_phy_inactive)(struct ath_hw *ah); | ||
544 | void (*set_delta_slope)(struct ath_hw *ah, struct ath9k_channel *chan); | ||
545 | bool (*rfbus_req)(struct ath_hw *ah); | ||
546 | void (*rfbus_done)(struct ath_hw *ah); | ||
547 | void (*enable_rfkill)(struct ath_hw *ah); | ||
548 | void (*restore_chainmask)(struct ath_hw *ah); | ||
549 | void (*set_diversity)(struct ath_hw *ah, bool value); | ||
550 | u32 (*compute_pll_control)(struct ath_hw *ah, | ||
551 | struct ath9k_channel *chan); | ||
552 | bool (*ani_control)(struct ath_hw *ah, enum ath9k_ani_cmd cmd, | ||
553 | int param); | ||
554 | void (*do_getnf)(struct ath_hw *ah, int16_t nfarray[NUM_NF_READINGS]); | ||
555 | void (*loadnf)(struct ath_hw *ah, struct ath9k_channel *chan); | ||
556 | }; | ||
557 | |||
558 | /** | ||
559 | * struct ath_hw_ops - callbacks used by hardware code and driver code | ||
560 | * | ||
561 | * This structure contains callbacks designed to to be used internally by | ||
562 | * hardware code and also by the lower level driver. | ||
563 | * | ||
564 | * @config_pci_powersave: | ||
565 | * @calibrate: periodic calibration for NF, ANI, IQ, ADC gain, ADC-DC | ||
566 | */ | ||
567 | struct ath_hw_ops { | ||
568 | void (*config_pci_powersave)(struct ath_hw *ah, | ||
569 | int restore, | ||
570 | int power_off); | ||
571 | void (*rx_enable)(struct ath_hw *ah); | ||
572 | void (*set_desc_link)(void *ds, u32 link); | ||
573 | void (*get_desc_link)(void *ds, u32 **link); | ||
574 | bool (*calibrate)(struct ath_hw *ah, | ||
575 | struct ath9k_channel *chan, | ||
576 | u8 rxchainmask, | ||
577 | bool longcal); | ||
578 | bool (*get_isr)(struct ath_hw *ah, enum ath9k_int *masked); | ||
579 | void (*fill_txdesc)(struct ath_hw *ah, void *ds, u32 seglen, | ||
580 | bool is_firstseg, bool is_is_lastseg, | ||
581 | const void *ds0, dma_addr_t buf_addr, | ||
582 | unsigned int qcu); | ||
583 | int (*proc_txdesc)(struct ath_hw *ah, void *ds, | ||
584 | struct ath_tx_status *ts); | ||
585 | void (*set11n_txdesc)(struct ath_hw *ah, void *ds, | ||
586 | u32 pktLen, enum ath9k_pkt_type type, | ||
587 | u32 txPower, u32 keyIx, | ||
588 | enum ath9k_key_type keyType, | ||
589 | u32 flags); | ||
590 | void (*set11n_ratescenario)(struct ath_hw *ah, void *ds, | ||
591 | void *lastds, | ||
592 | u32 durUpdateEn, u32 rtsctsRate, | ||
593 | u32 rtsctsDuration, | ||
594 | struct ath9k_11n_rate_series series[], | ||
595 | u32 nseries, u32 flags); | ||
596 | void (*set11n_aggr_first)(struct ath_hw *ah, void *ds, | ||
597 | u32 aggrLen); | ||
598 | void (*set11n_aggr_middle)(struct ath_hw *ah, void *ds, | ||
599 | u32 numDelims); | ||
600 | void (*set11n_aggr_last)(struct ath_hw *ah, void *ds); | ||
601 | void (*clr11n_aggr)(struct ath_hw *ah, void *ds); | ||
602 | void (*set11n_burstduration)(struct ath_hw *ah, void *ds, | ||
603 | u32 burstDuration); | ||
604 | void (*set11n_virtualmorefrag)(struct ath_hw *ah, void *ds, | ||
605 | u32 vmf); | ||
606 | }; | ||
607 | |||
445 | struct ath_hw { | 608 | struct ath_hw { |
446 | struct ieee80211_hw *hw; | 609 | struct ieee80211_hw *hw; |
447 | struct ath_common common; | 610 | struct ath_common common; |
@@ -455,13 +618,18 @@ struct ath_hw { | |||
455 | struct ar5416_eeprom_def def; | 618 | struct ar5416_eeprom_def def; |
456 | struct ar5416_eeprom_4k map4k; | 619 | struct ar5416_eeprom_4k map4k; |
457 | struct ar9287_eeprom map9287; | 620 | struct ar9287_eeprom map9287; |
621 | struct ar9300_eeprom ar9300_eep; | ||
458 | } eeprom; | 622 | } eeprom; |
459 | const struct eeprom_ops *eep_ops; | 623 | const struct eeprom_ops *eep_ops; |
460 | enum ath9k_eep_map eep_map; | ||
461 | 624 | ||
462 | bool sw_mgmt_crypto; | 625 | bool sw_mgmt_crypto; |
463 | bool is_pciexpress; | 626 | bool is_pciexpress; |
627 | bool need_an_top2_fixup; | ||
464 | u16 tx_trig_level; | 628 | u16 tx_trig_level; |
629 | s16 nf_2g_max; | ||
630 | s16 nf_2g_min; | ||
631 | s16 nf_5g_max; | ||
632 | s16 nf_5g_min; | ||
465 | u16 rfsilent; | 633 | u16 rfsilent; |
466 | u32 rfkill_gpio; | 634 | u32 rfkill_gpio; |
467 | u32 rfkill_polarity; | 635 | u32 rfkill_polarity; |
@@ -478,7 +646,8 @@ struct ath_hw { | |||
478 | struct ath9k_tx_queue_info txq[ATH9K_NUM_TX_QUEUES]; | 646 | struct ath9k_tx_queue_info txq[ATH9K_NUM_TX_QUEUES]; |
479 | 647 | ||
480 | int16_t curchan_rad_index; | 648 | int16_t curchan_rad_index; |
481 | u32 mask_reg; | 649 | enum ath9k_int imask; |
650 | u32 imrs2_reg; | ||
482 | u32 txok_interrupt_mask; | 651 | u32 txok_interrupt_mask; |
483 | u32 txerr_interrupt_mask; | 652 | u32 txerr_interrupt_mask; |
484 | u32 txdesc_interrupt_mask; | 653 | u32 txdesc_interrupt_mask; |
@@ -493,6 +662,7 @@ struct ath_hw { | |||
493 | struct ath9k_cal_list adcgain_caldata; | 662 | struct ath9k_cal_list adcgain_caldata; |
494 | struct ath9k_cal_list adcdc_calinitdata; | 663 | struct ath9k_cal_list adcdc_calinitdata; |
495 | struct ath9k_cal_list adcdc_caldata; | 664 | struct ath9k_cal_list adcdc_caldata; |
665 | struct ath9k_cal_list tempCompCalData; | ||
496 | struct ath9k_cal_list *cal_list; | 666 | struct ath9k_cal_list *cal_list; |
497 | struct ath9k_cal_list *cal_list_last; | 667 | struct ath9k_cal_list *cal_list_last; |
498 | struct ath9k_cal_list *cal_list_curr; | 668 | struct ath9k_cal_list *cal_list_curr; |
@@ -533,12 +703,10 @@ struct ath_hw { | |||
533 | DONT_USE_32KHZ, | 703 | DONT_USE_32KHZ, |
534 | } enable_32kHz_clock; | 704 | } enable_32kHz_clock; |
535 | 705 | ||
536 | /* Callback for radio frequency change */ | 706 | /* Private to hardware code */ |
537 | int (*ath9k_hw_rf_set_freq)(struct ath_hw *ah, struct ath9k_channel *chan); | 707 | struct ath_hw_private_ops private_ops; |
538 | 708 | /* Accessed by the lower level driver */ | |
539 | /* Callback for baseband spur frequency */ | 709 | struct ath_hw_ops ops; |
540 | void (*ath9k_hw_spur_mitigate_freq)(struct ath_hw *ah, | ||
541 | struct ath9k_channel *chan); | ||
542 | 710 | ||
543 | /* Used to program the radio on non single-chip devices */ | 711 | /* Used to program the radio on non single-chip devices */ |
544 | u32 *analogBank0Data; | 712 | u32 *analogBank0Data; |
@@ -551,6 +719,7 @@ struct ath_hw { | |||
551 | u32 *addac5416_21; | 719 | u32 *addac5416_21; |
552 | u32 *bank6Temp; | 720 | u32 *bank6Temp; |
553 | 721 | ||
722 | u8 txpower_limit; | ||
554 | int16_t txpower_indexoffset; | 723 | int16_t txpower_indexoffset; |
555 | int coverage_class; | 724 | int coverage_class; |
556 | u32 beacon_interval; | 725 | u32 beacon_interval; |
@@ -592,16 +761,34 @@ struct ath_hw { | |||
592 | struct ar5416IniArray iniBank7; | 761 | struct ar5416IniArray iniBank7; |
593 | struct ar5416IniArray iniAddac; | 762 | struct ar5416IniArray iniAddac; |
594 | struct ar5416IniArray iniPcieSerdes; | 763 | struct ar5416IniArray iniPcieSerdes; |
764 | struct ar5416IniArray iniPcieSerdesLowPower; | ||
595 | struct ar5416IniArray iniModesAdditional; | 765 | struct ar5416IniArray iniModesAdditional; |
596 | struct ar5416IniArray iniModesRxGain; | 766 | struct ar5416IniArray iniModesRxGain; |
597 | struct ar5416IniArray iniModesTxGain; | 767 | struct ar5416IniArray iniModesTxGain; |
598 | struct ar5416IniArray iniModes_9271_1_0_only; | 768 | struct ar5416IniArray iniModes_9271_1_0_only; |
599 | struct ar5416IniArray iniCckfirNormal; | 769 | struct ar5416IniArray iniCckfirNormal; |
600 | struct ar5416IniArray iniCckfirJapan2484; | 770 | struct ar5416IniArray iniCckfirJapan2484; |
771 | struct ar5416IniArray iniCommon_normal_cck_fir_coeff_9271; | ||
772 | struct ar5416IniArray iniCommon_japan_2484_cck_fir_coeff_9271; | ||
773 | struct ar5416IniArray iniModes_9271_ANI_reg; | ||
774 | struct ar5416IniArray iniModes_high_power_tx_gain_9271; | ||
775 | struct ar5416IniArray iniModes_normal_power_tx_gain_9271; | ||
776 | |||
777 | struct ar5416IniArray iniMac[ATH_INI_NUM_SPLIT]; | ||
778 | struct ar5416IniArray iniBB[ATH_INI_NUM_SPLIT]; | ||
779 | struct ar5416IniArray iniRadio[ATH_INI_NUM_SPLIT]; | ||
780 | struct ar5416IniArray iniSOC[ATH_INI_NUM_SPLIT]; | ||
601 | 781 | ||
602 | u32 intr_gen_timer_trigger; | 782 | u32 intr_gen_timer_trigger; |
603 | u32 intr_gen_timer_thresh; | 783 | u32 intr_gen_timer_thresh; |
604 | struct ath_gen_timer_table hw_gen_timers; | 784 | struct ath_gen_timer_table hw_gen_timers; |
785 | |||
786 | struct ar9003_txs *ts_ring; | ||
787 | void *ts_start; | ||
788 | u32 ts_paddr_start; | ||
789 | u32 ts_paddr_end; | ||
790 | u16 ts_tail; | ||
791 | u8 ts_size; | ||
605 | }; | 792 | }; |
606 | 793 | ||
607 | static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah) | 794 | static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah) |
@@ -614,6 +801,16 @@ static inline struct ath_regulatory *ath9k_hw_regulatory(struct ath_hw *ah) | |||
614 | return &(ath9k_hw_common(ah)->regulatory); | 801 | return &(ath9k_hw_common(ah)->regulatory); |
615 | } | 802 | } |
616 | 803 | ||
804 | static inline struct ath_hw_private_ops *ath9k_hw_private_ops(struct ath_hw *ah) | ||
805 | { | ||
806 | return &ah->private_ops; | ||
807 | } | ||
808 | |||
809 | static inline struct ath_hw_ops *ath9k_hw_ops(struct ath_hw *ah) | ||
810 | { | ||
811 | return &ah->ops; | ||
812 | } | ||
813 | |||
617 | /* Initialization, Detach, Reset */ | 814 | /* Initialization, Detach, Reset */ |
618 | const char *ath9k_hw_probe(u16 vendorid, u16 devid); | 815 | const char *ath9k_hw_probe(u16 vendorid, u16 devid); |
619 | void ath9k_hw_deinit(struct ath_hw *ah); | 816 | void ath9k_hw_deinit(struct ath_hw *ah); |
@@ -625,6 +822,7 @@ bool ath9k_hw_getcapability(struct ath_hw *ah, enum ath9k_capability_type type, | |||
625 | u32 capability, u32 *result); | 822 | u32 capability, u32 *result); |
626 | bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type, | 823 | bool ath9k_hw_setcapability(struct ath_hw *ah, enum ath9k_capability_type type, |
627 | u32 capability, u32 setting, int *status); | 824 | u32 capability, u32 setting, int *status); |
825 | u32 ath9k_regd_get_ctl(struct ath_regulatory *reg, struct ath9k_channel *chan); | ||
628 | 826 | ||
629 | /* Key Cache Management */ | 827 | /* Key Cache Management */ |
630 | bool ath9k_hw_keyreset(struct ath_hw *ah, u16 entry); | 828 | bool ath9k_hw_keyreset(struct ath_hw *ah, u16 entry); |
@@ -673,16 +871,10 @@ void ath9k_hw_set11nmac2040(struct ath_hw *ah); | |||
673 | void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period); | 871 | void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period); |
674 | void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah, | 872 | void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah, |
675 | const struct ath9k_beacon_state *bs); | 873 | const struct ath9k_beacon_state *bs); |
874 | bool ath9k_hw_check_alive(struct ath_hw *ah); | ||
676 | 875 | ||
677 | bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode); | 876 | bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode); |
678 | 877 | ||
679 | void ath9k_hw_configpcipowersave(struct ath_hw *ah, int restore, int power_off); | ||
680 | |||
681 | /* Interrupt Handling */ | ||
682 | bool ath9k_hw_intrpend(struct ath_hw *ah); | ||
683 | bool ath9k_hw_getisr(struct ath_hw *ah, enum ath9k_int *masked); | ||
684 | enum ath9k_int ath9k_hw_set_interrupts(struct ath_hw *ah, enum ath9k_int ints); | ||
685 | |||
686 | /* Generic hw timer primitives */ | 878 | /* Generic hw timer primitives */ |
687 | struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah, | 879 | struct ath_gen_timer *ath_gen_timer_alloc(struct ath_hw *ah, |
688 | void (*trigger)(void *), | 880 | void (*trigger)(void *), |
@@ -701,6 +893,39 @@ u32 ath9k_hw_gettsf32(struct ath_hw *ah); | |||
701 | 893 | ||
702 | void ath9k_hw_name(struct ath_hw *ah, char *hw_name, size_t len); | 894 | void ath9k_hw_name(struct ath_hw *ah, char *hw_name, size_t len); |
703 | 895 | ||
896 | /* HTC */ | ||
897 | void ath9k_hw_htc_resetinit(struct ath_hw *ah); | ||
898 | |||
899 | /* PHY */ | ||
900 | void ath9k_hw_get_delta_slope_vals(struct ath_hw *ah, u32 coef_scaled, | ||
901 | u32 *coef_mantissa, u32 *coef_exponent); | ||
902 | |||
903 | /* | ||
904 | * Code Specific to AR5008, AR9001 or AR9002, | ||
905 | * we stuff these here to avoid callbacks for AR9003. | ||
906 | */ | ||
907 | void ar9002_hw_cck_chan14_spread(struct ath_hw *ah); | ||
908 | int ar9002_hw_rf_claim(struct ath_hw *ah); | ||
909 | void ar9002_hw_enable_async_fifo(struct ath_hw *ah); | ||
910 | void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah); | ||
911 | |||
912 | /* | ||
913 | * Code specifric to AR9003, we stuff these here to avoid callbacks | ||
914 | * for older families | ||
915 | */ | ||
916 | void ar9003_hw_set_nf_limits(struct ath_hw *ah); | ||
917 | |||
918 | /* Hardware family op attach helpers */ | ||
919 | void ar5008_hw_attach_phy_ops(struct ath_hw *ah); | ||
920 | void ar9002_hw_attach_phy_ops(struct ath_hw *ah); | ||
921 | void ar9003_hw_attach_phy_ops(struct ath_hw *ah); | ||
922 | |||
923 | void ar9002_hw_attach_calib_ops(struct ath_hw *ah); | ||
924 | void ar9003_hw_attach_calib_ops(struct ath_hw *ah); | ||
925 | |||
926 | void ar9002_hw_attach_ops(struct ath_hw *ah); | ||
927 | void ar9003_hw_attach_ops(struct ath_hw *ah); | ||
928 | |||
704 | #define ATH_PCIE_CAP_LINK_CTRL 0x70 | 929 | #define ATH_PCIE_CAP_LINK_CTRL 0x70 |
705 | #define ATH_PCIE_CAP_LINK_L0S 1 | 930 | #define ATH_PCIE_CAP_LINK_L0S 1 |
706 | #define ATH_PCIE_CAP_LINK_L1 2 | 931 | #define ATH_PCIE_CAP_LINK_L1 2 |