1 /* 2 * Copyright (c) 2013 Qualcomm Atheros, Inc. 3 * 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 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH 9 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10 * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 11 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR 13 * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14 * PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 #ifndef _ATH_AR9300_H_ 18 #define _ATH_AR9300_H_ 19 20 #include "ar9300_freebsd_inc.h" 21 22 #define AH_BIG_ENDIAN 4321 23 #define AH_LITTLE_ENDIAN 1234 24 25 #if _BYTE_ORDER == _BIG_ENDIAN 26 #define AH_BYTE_ORDER AH_BIG_ENDIAN 27 #else 28 #define AH_BYTE_ORDER AH_LITTLE_ENDIAN 29 #endif 30 31 /* XXX doesn't belong here */ 32 #define AR_EEPROM_MODAL_SPURS 5 33 34 /* 35 * (a) this should be N(a), 36 * (b) FreeBSD does define nitems, 37 * (c) it doesn't have an AH_ prefix, sigh. 38 */ 39 #define ARRAY_LENGTH(a) (sizeof(a) / sizeof((a)[0])) 40 41 #include "ah_internal.h" 42 #include "ah_eeprom.h" 43 #include "ah_devid.h" 44 #include "ar9300eep.h" /* For Eeprom definitions */ 45 46 47 #define AR9300_MAGIC 0x19741014 48 49 50 /* MAC register values */ 51 52 #define INIT_CONFIG_STATUS 0x00000000 53 #define INIT_RSSI_THR 0x7 /* Missed beacon counter initialized to 0x7 (max is 0xff) */ 54 #define INIT_RSSI_BEACON_WEIGHT 8 /* ave beacon rssi weight (0-16) */ 55 56 /* 57 * Various fifo fill before Tx start, in 64-byte units 58 * i.e. put the frame in the air while still DMAing 59 */ 60 #define MIN_TX_FIFO_THRESHOLD 0x1 61 #define MAX_TX_FIFO_THRESHOLD (( 4096 / 64) - 1) 62 #define INIT_TX_FIFO_THRESHOLD MIN_TX_FIFO_THRESHOLD 63 64 #define CHANSEL_DIV 15 65 #define FCLK 40 66 67 #define COEFF ((FCLK * 5) / 2) 68 #define CHANSEL_2G(_freq) (((_freq) * 0x10000) / CHANSEL_DIV) 69 #define CHANSEL_5G(_freq) (((_freq) * 0x8000) / CHANSEL_DIV) 70 #define CHANSEL_5G_DOT5MHZ 2188 71 72 /* 73 * Receive Queue Fifo depth. 74 */ 75 enum RX_FIFO_DEPTH { 76 HAL_HP_RXFIFO_DEPTH = 16, 77 HAL_LP_RXFIFO_DEPTH = 128, 78 }; 79 80 /* 81 * Gain support. 82 */ 83 #define NUM_CORNER_FIX_BITS_2133 7 84 #define CCK_OFDM_GAIN_DELTA 15 85 86 enum GAIN_PARAMS { 87 GP_TXCLIP, 88 GP_PD90, 89 GP_PD84, 90 GP_GSEL 91 }; 92 93 enum GAIN_PARAMS_2133 { 94 GP_MIXGAIN_OVR, 95 GP_PWD_138, 96 GP_PWD_137, 97 GP_PWD_136, 98 GP_PWD_132, 99 GP_PWD_131, 100 GP_PWD_130, 101 }; 102 103 typedef struct _gain_opt_step { 104 int16_t paramVal[NUM_CORNER_FIX_BITS_2133]; 105 int32_t stepGain; 106 int8_t stepName[16]; 107 } GAIN_OPTIMIZATION_STEP; 108 109 typedef struct { 110 u_int32_t numStepsInLadder; 111 u_int32_t defaultStepNum; 112 GAIN_OPTIMIZATION_STEP optStep[10]; 113 } GAIN_OPTIMIZATION_LADDER; 114 115 typedef struct { 116 u_int32_t currStepNum; 117 u_int32_t currGain; 118 u_int32_t targetGain; 119 u_int32_t loTrig; 120 u_int32_t hiTrig; 121 u_int32_t gainFCorrection; 122 u_int32_t active; 123 GAIN_OPTIMIZATION_STEP *curr_step; 124 } GAIN_VALUES; 125 126 typedef struct { 127 u_int16_t synth_center; 128 u_int16_t ctl_center; 129 u_int16_t ext_center; 130 } CHAN_CENTERS; 131 132 /* RF HAL structures */ 133 typedef struct rf_hal_funcs { 134 HAL_BOOL (*set_channel)(struct ath_hal *, struct ieee80211_channel *); 135 HAL_BOOL (*get_chip_power_lim)(struct ath_hal *ah, 136 struct ieee80211_channel *chan); 137 } RF_HAL_FUNCS; 138 139 struct ar9300_ani_default { 140 u_int16_t m1_thresh_low; 141 u_int16_t m2_thresh_low; 142 u_int16_t m1_thresh; 143 u_int16_t m2_thresh; 144 u_int16_t m2_count_thr; 145 u_int16_t m2_count_thr_low; 146 u_int16_t m1_thresh_low_ext; 147 u_int16_t m2_thresh_low_ext; 148 u_int16_t m1_thresh_ext; 149 u_int16_t m2_thresh_ext; 150 u_int16_t firstep; 151 u_int16_t firstep_low; 152 u_int16_t cycpwr_thr1; 153 u_int16_t cycpwr_thr1_ext; 154 }; 155 156 /* 157 * Per-channel ANI state private to the driver. 158 */ 159 struct ar9300_ani_state { 160 struct ieee80211_channel c; /* XXX ew? */ 161 HAL_BOOL must_restore; 162 HAL_BOOL ofdms_turn; 163 u_int8_t ofdm_noise_immunity_level; 164 u_int8_t cck_noise_immunity_level; 165 u_int8_t spur_immunity_level; 166 u_int8_t firstep_level; 167 u_int8_t ofdm_weak_sig_detect_off; 168 u_int8_t mrc_cck_off; 169 170 /* Thresholds */ 171 u_int32_t listen_time; 172 u_int32_t ofdm_trig_high; 173 u_int32_t ofdm_trig_low; 174 int32_t cck_trig_high; 175 int32_t cck_trig_low; 176 int32_t rssi_thr_low; 177 int32_t rssi_thr_high; 178 179 int32_t rssi; /* The current RSSI */ 180 u_int32_t tx_frame_count; /* Last tx_frame_count */ 181 u_int32_t rx_frame_count; /* Last rx Frame count */ 182 u_int32_t rx_busy_count; /* Last rx busy count */ 183 u_int32_t rx_ext_busy_count; /* Last rx busy count; extension channel */ 184 u_int32_t cycle_count; /* Last cycle_count (can detect wrap-around) */ 185 u_int32_t ofdm_phy_err_count;/* OFDM err count since last reset */ 186 u_int32_t cck_phy_err_count; /* CCK err count since last reset */ 187 188 struct ar9300_ani_default ini_def; /* INI default values for ANI registers */ 189 HAL_BOOL phy_noise_spur; /* based on OFDM/CCK Phy errors */ 190 }; 191 192 #define AR9300_ANI_POLLINTERVAL 1000 /* 1000 milliseconds between ANI poll */ 193 194 #define AR9300_CHANNEL_SWITCH_TIME_USEC 1000 /* 1 millisecond needed to change channels */ 195 196 #define HAL_PROCESS_ANI 0x00000001 /* ANI state setup */ 197 #define HAL_RADAR_EN 0x80000000 /* Radar detect is capable */ 198 #define HAL_AR_EN 0x40000000 /* AR detect is capable */ 199 200 #define DO_ANI(ah) \ 201 ((AH9300(ah)->ah_proc_phy_err & HAL_PROCESS_ANI)) 202 203 #if 0 204 struct ar9300_stats { 205 u_int32_t ast_ani_niup; /* ANI increased noise immunity */ 206 u_int32_t ast_ani_nidown; /* ANI decreased noise immunity */ 207 u_int32_t ast_ani_spurup; /* ANI increased spur immunity */ 208 u_int32_t ast_ani_spurdown;/* ANI descreased spur immunity */ 209 u_int32_t ast_ani_ofdmon; /* ANI OFDM weak signal detect on */ 210 u_int32_t ast_ani_ofdmoff;/* ANI OFDM weak signal detect off */ 211 u_int32_t ast_ani_cckhigh;/* ANI CCK weak signal threshold high */ 212 u_int32_t ast_ani_ccklow; /* ANI CCK weak signal threshold low */ 213 u_int32_t ast_ani_stepup; /* ANI increased first step level */ 214 u_int32_t ast_ani_stepdown;/* ANI decreased first step level */ 215 u_int32_t ast_ani_ofdmerrs;/* ANI cumulative ofdm phy err count */ 216 u_int32_t ast_ani_cckerrs;/* ANI cumulative cck phy err count */ 217 u_int32_t ast_ani_reset; /* ANI parameters zero'd for non-STA */ 218 u_int32_t ast_ani_lzero; /* ANI listen time forced to zero */ 219 u_int32_t ast_ani_lneg; /* ANI listen time calculated < 0 */ 220 HAL_MIB_STATS ast_mibstats; /* MIB counter stats */ 221 HAL_NODE_STATS ast_nodestats; /* Latest rssi stats from driver */ 222 }; 223 #endif 224 225 struct ar9300_rad_reader { 226 u_int16_t rd_index; 227 u_int16_t rd_expSeq; 228 u_int32_t rd_resetVal; 229 u_int8_t rd_start; 230 }; 231 232 struct ar9300_rad_writer { 233 u_int16_t wr_index; 234 u_int16_t wr_seq; 235 }; 236 237 struct ar9300_radar_event { 238 u_int32_t re_ts; /* 32 bit time stamp */ 239 u_int8_t re_rssi; /* rssi of radar event */ 240 u_int8_t re_dur; /* duration of radar pulse */ 241 u_int8_t re_chanIndex; /* Channel of event */ 242 }; 243 244 struct ar9300_radar_q_elem { 245 u_int32_t rq_seqNum; 246 u_int32_t rq_busy; /* 32 bit to insure atomic read/write */ 247 struct ar9300_radar_event rq_event; /* Radar event */ 248 }; 249 250 struct ar9300_radar_q_info { 251 u_int16_t ri_qsize; /* q size */ 252 u_int16_t ri_seqSize; /* Size of sequence ring */ 253 struct ar9300_rad_reader ri_reader; /* State for the q reader */ 254 struct ar9300_rad_writer ri_writer; /* state for the q writer */ 255 }; 256 257 #define HAL_MAX_ACK_RADAR_DUR 511 258 #define HAL_MAX_NUM_PEAKS 3 259 #define HAL_ARQ_SIZE 4096 /* 8K AR events for buffer size */ 260 #define HAL_ARQ_SEQSIZE 4097 /* Sequence counter wrap for AR */ 261 #define HAL_RADARQ_SIZE 1024 /* 1K radar events for buffer size */ 262 #define HAL_RADARQ_SEQSIZE 1025 /* Sequence counter wrap for radar */ 263 #define HAL_NUMRADAR_STATES 64 /* Number of radar channels we keep state for */ 264 265 struct ar9300_ar_state { 266 u_int16_t ar_prev_time_stamp; 267 u_int32_t ar_prev_width; 268 u_int32_t ar_phy_err_count[HAL_MAX_ACK_RADAR_DUR]; 269 u_int32_t ar_ack_sum; 270 u_int16_t ar_peak_list[HAL_MAX_NUM_PEAKS]; 271 u_int32_t ar_packet_threshold; /* Thresh to determine traffic load */ 272 u_int32_t ar_par_threshold; /* Thresh to determine peak */ 273 u_int32_t ar_radar_rssi; /* Rssi threshold for AR event */ 274 }; 275 276 struct ar9300_radar_state { 277 struct ieee80211_channel *rs_chan; /* Channel info */ 278 u_int8_t rs_chan_index; /* Channel index in radar structure */ 279 u_int32_t rs_num_radar_events; /* Number of radar events */ 280 int32_t rs_firpwr; /* Thresh to check radar sig is gone */ 281 u_int32_t rs_radar_rssi; /* Thresh to start radar det (dB) */ 282 u_int32_t rs_height; /* Thresh for pulse height (dB)*/ 283 u_int32_t rs_pulse_rssi; /* Thresh to check if pulse is gone (dB) */ 284 u_int32_t rs_inband; /* Thresh to check if pusle is inband (0.5 dB) */ 285 }; 286 typedef struct { 287 u_int8_t uc_receiver_errors; 288 u_int8_t uc_bad_tlp_errors; 289 u_int8_t uc_bad_dllp_errors; 290 u_int8_t uc_replay_timeout_errors; 291 u_int8_t uc_replay_number_rollover_errors; 292 } ar_pcie_error_moniter_counters; 293 294 #define AR9300_OPFLAGS_11A 0x01 /* if set, allow 11a */ 295 #define AR9300_OPFLAGS_11G 0x02 /* if set, allow 11g */ 296 #define AR9300_OPFLAGS_N_5G_HT40 0x04 /* if set, disable 5G HT40 */ 297 #define AR9300_OPFLAGS_N_2G_HT40 0x08 /* if set, disable 2G HT40 */ 298 #define AR9300_OPFLAGS_N_5G_HT20 0x10 /* if set, disable 5G HT20 */ 299 #define AR9300_OPFLAGS_N_2G_HT20 0x20 /* if set, disable 2G HT20 */ 300 301 /* 302 * For Kite and later chipsets, the following bits are not being programmed in EEPROM 303 * and so need to be enabled always. 304 * Bit 0: en_fcc_mid, Bit 1: en_jap_mid, Bit 2: en_fcc_dfs_ht40 305 * Bit 3: en_jap_ht40, Bit 4: en_jap_dfs_ht40 306 */ 307 #define AR9300_RDEXT_DEFAULT 0x1F 308 309 #define AR9300_MAX_CHAINS 3 310 #define AR9300_NUM_CHAINS(chainmask) \ 311 (((chainmask >> 2) & 1) + ((chainmask >> 1) & 1) + (chainmask & 1)) 312 #define AR9300_CHAIN0_MASK 0x1 313 #define AR9300_CHAIN1_MASK 0x2 314 #define AR9300_CHAIN2_MASK 0x4 315 316 /* Support for multiple INIs */ 317 struct ar9300_ini_array { 318 const u_int32_t *ia_array; 319 u_int32_t ia_rows; 320 u_int32_t ia_columns; 321 }; 322 #define INIT_INI_ARRAY(iniarray, array, rows, columns) do { \ 323 (iniarray)->ia_array = (const u_int32_t *)(array); \ 324 (iniarray)->ia_rows = (rows); \ 325 (iniarray)->ia_columns = (columns); \ 326 } while (0) 327 #define INI_RA(iniarray, row, column) (((iniarray)->ia_array)[(row) * ((iniarray)->ia_columns) + (column)]) 328 329 #define INIT_CAL(_perCal) \ 330 (_perCal)->cal_state = CAL_WAITING; \ 331 (_perCal)->cal_next = AH_NULL; 332 333 #define INSERT_CAL(_ahp, _perCal) \ 334 do { \ 335 if ((_ahp)->ah_cal_list_last == AH_NULL) { \ 336 (_ahp)->ah_cal_list = (_ahp)->ah_cal_list_last = (_perCal); \ 337 ((_ahp)->ah_cal_list_last)->cal_next = (_perCal); \ 338 } else { \ 339 ((_ahp)->ah_cal_list_last)->cal_next = (_perCal); \ 340 (_ahp)->ah_cal_list_last = (_perCal); \ 341 (_perCal)->cal_next = (_ahp)->ah_cal_list; \ 342 } \ 343 } while (0) 344 345 typedef enum cal_types { 346 IQ_MISMATCH_CAL = 0x1, 347 TEMP_COMP_CAL = 0x2, 348 } HAL_CAL_TYPES; 349 350 typedef enum cal_state { 351 CAL_INACTIVE, 352 CAL_WAITING, 353 CAL_RUNNING, 354 CAL_DONE 355 } HAL_CAL_STATE; /* Calibrate state */ 356 357 #define MIN_CAL_SAMPLES 1 358 #define MAX_CAL_SAMPLES 64 359 #define INIT_LOG_COUNT 5 360 #define PER_MIN_LOG_COUNT 2 361 #define PER_MAX_LOG_COUNT 10 362 363 #define AR9300_NUM_BT_WEIGHTS 4 364 #define AR9300_NUM_WLAN_WEIGHTS 4 365 366 /* Per Calibration data structure */ 367 typedef struct per_cal_data { 368 HAL_CAL_TYPES cal_type; // Type of calibration 369 u_int32_t cal_num_samples; // Number of SW samples to collect 370 u_int32_t cal_count_max; // Number of HW samples to collect 371 void (*cal_collect)(struct ath_hal *, u_int8_t); // Accumulator func 372 void (*cal_post_proc)(struct ath_hal *, u_int8_t); // Post-processing func 373 } HAL_PERCAL_DATA; 374 375 /* List structure for calibration data */ 376 typedef struct cal_list { 377 const HAL_PERCAL_DATA *cal_data; 378 HAL_CAL_STATE cal_state; 379 struct cal_list *cal_next; 380 } HAL_CAL_LIST; 381 382 #define AR9300_NUM_CAL_TYPES 2 383 #define AR9300_PAPRD_TABLE_SZ 24 384 #define AR9300_PAPRD_GAIN_TABLE_SZ 32 385 #define AR9382_MAX_GPIO_PIN_NUM (16) 386 #define AR9382_GPIO_PIN_8_RESERVED (8) 387 #define AR9382_GPIO_9_INPUT_ONLY (9) 388 #define AR9382_MAX_GPIO_INPUT_PIN_NUM (13) 389 #define AR9382_GPIO_PIN_11_RESERVED (11) 390 #define AR9382_MAX_JTAG_GPIO_PIN_NUM (3) 391 392 /* Paprd tx power adjust data structure */ 393 struct ar9300_paprd_pwr_adjust { 394 u_int32_t target_rate; // rate index 395 u_int32_t reg_addr; // register offset 396 u_int32_t reg_mask; // mask of register 397 u_int32_t reg_mask_offset; // mask offset of register 398 u_int32_t sub_db; // offset value unit of dB 399 }; 400 401 struct ar9300NfLimits { 402 int16_t max; 403 int16_t min; 404 int16_t nominal; 405 }; 406 407 #define AR9300_MAX_RATES 36 /* legacy(4) + ofdm(8) + HTSS(8) + HTDS(8) + HTTS(8)*/ 408 struct ath_hal_9300 { 409 struct ath_hal_private ah_priv; /* base class */ 410 411 /* 412 * Information retrieved from EEPROM. 413 */ 414 ar9300_eeprom_t ah_eeprom; 415 416 GAIN_VALUES ah_gain_values; 417 418 u_int8_t ah_macaddr[IEEE80211_ADDR_LEN]; 419 u_int8_t ah_bssid[IEEE80211_ADDR_LEN]; 420 u_int8_t ah_bssid_mask[IEEE80211_ADDR_LEN]; 421 u_int16_t ah_assoc_id; 422 423 /* 424 * Runtime state. 425 */ 426 u_int32_t ah_mask_reg; /* copy of AR_IMR */ 427 u_int32_t ah_mask2Reg; /* copy of AR_IMR_S2 */ 428 u_int32_t ah_msi_reg; /* copy of AR_PCIE_MSI */ 429 os_atomic_t ah_ier_ref_count; /* reference count for enabling interrupts */ 430 HAL_ANI_STATS ah_stats; /* various statistics */ 431 RF_HAL_FUNCS ah_rf_hal; 432 u_int32_t ah_tx_desc_mask; /* mask for TXDESC */ 433 u_int32_t ah_tx_ok_interrupt_mask; 434 u_int32_t ah_tx_err_interrupt_mask; 435 u_int32_t ah_tx_desc_interrupt_mask; 436 u_int32_t ah_tx_eol_interrupt_mask; 437 u_int32_t ah_tx_urn_interrupt_mask; 438 HAL_TX_QUEUE_INFO ah_txq[HAL_NUM_TX_QUEUES]; 439 HAL_SMPS_MODE ah_sm_power_mode; 440 HAL_BOOL ah_chip_full_sleep; 441 u_int32_t ah_atim_window; 442 HAL_ANT_SETTING ah_diversity_control; /* antenna setting */ 443 u_int16_t ah_antenna_switch_swap; /* Controls mapping of OID request */ 444 u_int8_t ah_tx_chainmask_cfg; /* chain mask config */ 445 u_int8_t ah_rx_chainmask_cfg; 446 u_int32_t ah_beacon_rssi_threshold; /* cache beacon rssi threshold */ 447 /* Calibration related fields */ 448 HAL_CAL_TYPES ah_supp_cals; 449 HAL_CAL_LIST ah_iq_cal_data; /* IQ Cal Data */ 450 HAL_CAL_LIST ah_temp_comp_cal_data; /* Temperature Compensation Cal Data */ 451 HAL_CAL_LIST *ah_cal_list; /* ptr to first cal in list */ 452 HAL_CAL_LIST *ah_cal_list_last; /* ptr to last cal in list */ 453 HAL_CAL_LIST *ah_cal_list_curr; /* ptr to current cal */ 454 // IQ Cal aliases 455 #define ah_total_power_meas_i ah_meas0.unsign 456 #define ah_total_power_meas_q ah_meas1.unsign 457 #define ah_total_iq_corr_meas ah_meas2.sign 458 union { 459 u_int32_t unsign[AR9300_MAX_CHAINS]; 460 int32_t sign[AR9300_MAX_CHAINS]; 461 } ah_meas0; 462 union { 463 u_int32_t unsign[AR9300_MAX_CHAINS]; 464 int32_t sign[AR9300_MAX_CHAINS]; 465 } ah_meas1; 466 union { 467 u_int32_t unsign[AR9300_MAX_CHAINS]; 468 int32_t sign[AR9300_MAX_CHAINS]; 469 } ah_meas2; 470 union { 471 u_int32_t unsign[AR9300_MAX_CHAINS]; 472 int32_t sign[AR9300_MAX_CHAINS]; 473 } ah_meas3; 474 u_int16_t ah_cal_samples; 475 /* end - Calibration related fields */ 476 u_int32_t ah_tx6_power_in_half_dbm; /* power output for 6Mb tx */ 477 u_int32_t ah_sta_id1_defaults; /* STA_ID1 default settings */ 478 u_int32_t ah_misc_mode; /* MISC_MODE settings */ 479 HAL_BOOL ah_get_plcp_hdr; /* setting about MISC_SEL_EVM */ 480 enum { 481 AUTO_32KHZ, /* use it if 32kHz crystal present */ 482 USE_32KHZ, /* do it regardless */ 483 DONT_USE_32KHZ, /* don't use it regardless */ 484 } ah_enable32k_hz_clock; /* whether to sleep at 32kHz */ 485 486 u_int32_t ah_ofdm_tx_power; 487 int16_t ah_tx_power_index_offset; 488 489 u_int ah_slot_time; /* user-specified slot time */ 490 u_int ah_ack_timeout; /* user-specified ack timeout */ 491 /* 492 * XXX 493 * 11g-specific stuff; belongs in the driver. 494 */ 495 u_int8_t ah_g_beacon_rate; /* fixed rate for G beacons */ 496 u_int32_t ah_gpio_mask; /* copy of enabled GPIO mask */ 497 u_int32_t ah_gpio_cause; /* copy of GPIO cause (sync and async) */ 498 /* 499 * RF Silent handling; setup according to the EEPROM. 500 */ 501 u_int32_t ah_gpio_select; /* GPIO pin to use */ 502 u_int32_t ah_polarity; /* polarity to disable RF */ 503 u_int32_t ah_gpio_bit; /* after init, prev value */ 504 HAL_BOOL ah_eep_enabled; /* EEPROM bit for capability */ 505 506 #ifdef ATH_BT_COEX 507 /* 508 * Bluetooth coexistence static setup according to the registry 509 */ 510 HAL_BT_MODULE ah_bt_module; /* Bluetooth module identifier */ 511 u_int8_t ah_bt_coex_config_type; /* BT coex configuration */ 512 u_int8_t ah_bt_active_gpio_select; /* GPIO pin for BT_ACTIVE */ 513 u_int8_t ah_bt_priority_gpio_select; /* GPIO pin for BT_PRIORITY */ 514 u_int8_t ah_wlan_active_gpio_select; /* GPIO pin for WLAN_ACTIVE */ 515 u_int8_t ah_bt_active_polarity; /* Polarity of BT_ACTIVE */ 516 HAL_BOOL ah_bt_coex_single_ant; /* Single or dual antenna configuration */ 517 u_int8_t ah_bt_wlan_isolation; /* Isolation between BT and WLAN in dB */ 518 /* 519 * Bluetooth coexistence runtime settings 520 */ 521 HAL_BOOL ah_bt_coex_enabled; /* If Bluetooth coexistence is enabled */ 522 u_int32_t ah_bt_coex_mode; /* Register setting for AR_BT_COEX_MODE */ 523 u_int32_t ah_bt_coex_bt_weight[AR9300_NUM_BT_WEIGHTS]; /* Register setting for AR_BT_COEX_WEIGHT */ 524 u_int32_t ah_bt_coex_wlan_weight[AR9300_NUM_WLAN_WEIGHTS]; /* Register setting for AR_BT_COEX_WEIGHT */ 525 u_int32_t ah_bt_coex_mode2; /* Register setting for AR_BT_COEX_MODE2 */ 526 u_int32_t ah_bt_coex_flag; /* Special tuning flags for BT coex */ 527 #endif 528 529 /* 530 * Generic timer support 531 */ 532 u_int32_t ah_avail_gen_timers; /* mask of available timers */ 533 u_int32_t ah_intr_gen_timer_trigger; /* generic timer trigger interrupt state */ 534 u_int32_t ah_intr_gen_timer_thresh; /* generic timer trigger interrupt state */ 535 HAL_BOOL ah_enable_tsf2; /* enable TSF2 for gen timer 8-15. */ 536 537 /* 538 * ANI & Radar support. 539 */ 540 u_int32_t ah_proc_phy_err; /* Process Phy errs */ 541 u_int32_t ah_ani_period; /* ani update list period */ 542 struct ar9300_ani_state *ah_curani; /* cached last reference */ 543 struct ar9300_ani_state ah_ani[255]; /* per-channel state */ 544 struct ar9300_radar_state ah_radar[HAL_NUMRADAR_STATES]; /* Per-Channel Radar detector state */ 545 struct ar9300_radar_q_elem *ah_radarq; /* radar event queue */ 546 struct ar9300_radar_q_info ah_radarq_info; /* radar event q read/write state */ 547 struct ar9300_ar_state ah_ar; /* AR detector state */ 548 struct ar9300_radar_q_elem *ah_arq; /* AR event queue */ 549 struct ar9300_radar_q_info ah_arq_info; /* AR event q read/write state */ 550 551 /* 552 * Transmit power state. Note these are maintained 553 * here so they can be retrieved by diagnostic tools. 554 */ 555 u_int16_t ah_rates_array[16]; 556 557 /* 558 * Tx queue interrupt state. 559 */ 560 u_int32_t ah_intr_txqs; 561 562 HAL_BOOL ah_intr_mitigation_rx; /* rx Interrupt Mitigation Settings */ 563 HAL_BOOL ah_intr_mitigation_tx; /* tx Interrupt Mitigation Settings */ 564 565 /* 566 * Extension Channel Rx Clear State 567 */ 568 u_int32_t ah_cycle_count; 569 u_int32_t ah_ctl_busy; 570 u_int32_t ah_ext_busy; 571 572 /* HT CWM state */ 573 HAL_HT_EXTPROTSPACING ah_ext_prot_spacing; 574 u_int8_t ah_tx_chainmask; /* tx chain mask */ 575 u_int8_t ah_rx_chainmask; /* rx chain mask */ 576 577 /* optional tx chainmask */ 578 u_int8_t ah_tx_chainmaskopt; 579 580 u_int8_t ah_tx_cal_chainmask; /* tx cal chain mask */ 581 u_int8_t ah_rx_cal_chainmask; /* rx cal chain mask */ 582 583 int ah_hwp; 584 void *ah_cal_mem; 585 HAL_BOOL ah_emu_eeprom; 586 587 HAL_ANI_CMD ah_ani_function; 588 HAL_BOOL ah_rifs_enabled; 589 u_int32_t ah_rifs_reg[11]; 590 u_int32_t ah_rifs_sec_cnt; 591 592 /* open-loop power control */ 593 u_int32_t original_gain[22]; 594 int32_t init_pdadc; 595 int32_t pdadc_delta; 596 597 /* cycle counts for beacon stuck diagnostics */ 598 u_int32_t ah_cycles; 599 u_int32_t ah_rx_clear; 600 u_int32_t ah_rx_frame; 601 u_int32_t ah_tx_frame; 602 603 #define BB_HANG_SIG1 0 604 #define BB_HANG_SIG2 1 605 #define BB_HANG_SIG3 2 606 #define BB_HANG_SIG4 3 607 #define MAC_HANG_SIG1 4 608 #define MAC_HANG_SIG2 5 609 /* bb hang detection */ 610 int ah_hang[6]; 611 hal_hw_hangs_t ah_hang_wars; 612 613 /* 614 * Keytable type table 615 */ 616 #define AR_KEYTABLE_SIZE 128 /* XXX! */ 617 uint8_t ah_keytype[AR_KEYTABLE_SIZE]; 618 #undef AR_KEYTABLE_SIZE 619 /* 620 * Support for ar9300 multiple INIs 621 */ 622 struct ar9300_ini_array ah_ini_pcie_serdes; 623 struct ar9300_ini_array ah_ini_pcie_serdes_low_power; 624 struct ar9300_ini_array ah_ini_modes_additional; 625 struct ar9300_ini_array ah_ini_modes_additional_40mhz; 626 struct ar9300_ini_array ah_ini_modes_rxgain; 627 struct ar9300_ini_array ah_ini_modes_rxgain_bounds; 628 struct ar9300_ini_array ah_ini_modes_txgain; 629 struct ar9300_ini_array ah_ini_japan2484; 630 struct ar9300_ini_array ah_ini_radio_post_sys2ant; 631 struct ar9300_ini_array ah_ini_BTCOEX_MAX_TXPWR; 632 struct ar9300_ini_array ah_ini_modes_rxgain_xlna; 633 struct ar9300_ini_array ah_ini_modes_rxgain_bb_core; 634 struct ar9300_ini_array ah_ini_modes_rxgain_bb_postamble; 635 636 /* 637 * New INI format starting with Osprey 2.0 INI. 638 * Pre, core, post arrays for each sub-system (mac, bb, radio, soc) 639 */ 640 #define ATH_INI_PRE 0 641 #define ATH_INI_CORE 1 642 #define ATH_INI_POST 2 643 #define ATH_INI_NUM_SPLIT (ATH_INI_POST + 1) 644 struct ar9300_ini_array ah_ini_mac[ATH_INI_NUM_SPLIT]; /* New INI format */ 645 struct ar9300_ini_array ah_ini_bb[ATH_INI_NUM_SPLIT]; /* New INI format */ 646 struct ar9300_ini_array ah_ini_radio[ATH_INI_NUM_SPLIT]; /* New INI format */ 647 struct ar9300_ini_array ah_ini_soc[ATH_INI_NUM_SPLIT]; /* New INI format */ 648 649 /* 650 * Added to support DFS postamble array in INI that we need to apply 651 * in DFS channels 652 */ 653 654 struct ar9300_ini_array ah_ini_dfs; 655 656 #if ATH_WOW 657 struct ar9300_ini_array ah_ini_pcie_serdes_wow; /* SerDes values during WOW sleep */ 658 #endif 659 660 /* To indicate EEPROM mapping used */ 661 u_int32_t ah_immunity_vals[6]; 662 HAL_BOOL ah_immunity_on; 663 /* 664 * snap shot of counter register for debug purposes 665 */ 666 #ifdef AH_DEBUG 667 u_int32_t last_tf; 668 u_int32_t last_rf; 669 u_int32_t last_rc; 670 u_int32_t last_cc; 671 #endif 672 HAL_BOOL ah_dma_stuck; /* Set to AH_TRUE when RX/TX DMA failed to stop. */ 673 u_int32_t nf_tsf32; /* timestamp for NF calibration duration */ 674 675 u_int32_t reg_dmn; /* Regulatory Domain */ 676 int16_t twice_antenna_gain; /* Antenna Gain */ 677 u_int16_t twice_antenna_reduction; /* Antenna Gain Allowed */ 678 679 /* 680 * Upper limit after factoring in the regulatory max, antenna gain and 681 * multichain factor. No TxBF, CDD or STBC gain factored 682 */ 683 int16_t upper_limit[AR9300_MAX_CHAINS]; 684 685 /* adjusted power for descriptor-based TPC for 1, 2, or 3 chains */ 686 int16_t txpower[AR9300_MAX_RATES][AR9300_MAX_CHAINS]; 687 688 /* adjusted power for descriptor-based TPC for 1, 2, or 3 chains with STBC*/ 689 int16_t txpower_stbc[AR9300_MAX_RATES][AR9300_MAX_CHAINS]; 690 691 /* Transmit Status ring support */ 692 struct ar9300_txs *ts_ring; 693 u_int16_t ts_tail; 694 u_int16_t ts_size; 695 u_int32_t ts_paddr_start; 696 u_int32_t ts_paddr_end; 697 698 /* Receive Buffer size */ 699 #define HAL_RXBUFSIZE_DEFAULT 0xfff 700 u_int16_t rx_buf_size; 701 702 u_int32_t ah_wa_reg_val; // Store the permanent value of Reg 0x4004 so we dont have to R/M/W. (We should not be reading this register when in sleep states). 703 704 /* Indicate the PLL source clock rate is 25Mhz or not. 705 * clk_25mhz = 0 by default. 706 */ 707 u_int8_t clk_25mhz; 708 /* For PAPRD uses */ 709 u_int16_t small_signal_gain[AH_MAX_CHAINS]; 710 u_int32_t pa_table[AH_MAX_CHAINS][AR9300_PAPRD_TABLE_SZ]; 711 u_int32_t paprd_gain_table_entries[AR9300_PAPRD_GAIN_TABLE_SZ]; 712 u_int32_t paprd_gain_table_index[AR9300_PAPRD_GAIN_TABLE_SZ]; 713 u_int32_t ah_2g_paprd_rate_mask_ht20; /* Copy of eep->modal_header_2g.paprd_rate_mask_ht20 */ 714 u_int32_t ah_2g_paprd_rate_mask_ht40; /* Copy of eep->modal_header_2g.paprd_rate_mask_ht40 */ 715 u_int32_t ah_5g_paprd_rate_mask_ht20; /* Copy of eep->modal_header_5g.paprd_rate_mask_ht20 */ 716 u_int32_t ah_5g_paprd_rate_mask_ht40; /* Copy of eep->modal_header_5g.paprd_rate_mask_ht40 */ 717 u_int32_t paprd_training_power; 718 /* For GreenTx use to store the default tx power */ 719 u_int8_t ah_default_tx_power[ar9300_rate_size]; 720 HAL_BOOL ah_paprd_broken; 721 722 /* To store offsets of host interface registers */ 723 struct { 724 u_int32_t AR_RC; 725 u_int32_t AR_WA; 726 u_int32_t AR_PM_STATE; 727 u_int32_t AR_H_INFOL; 728 u_int32_t AR_H_INFOH; 729 u_int32_t AR_PCIE_PM_CTRL; 730 u_int32_t AR_HOST_TIMEOUT; 731 u_int32_t AR_EEPROM; 732 u_int32_t AR_SREV; 733 u_int32_t AR_INTR_SYNC_CAUSE; 734 u_int32_t AR_INTR_SYNC_CAUSE_CLR; 735 u_int32_t AR_INTR_SYNC_ENABLE; 736 u_int32_t AR_INTR_ASYNC_MASK; 737 u_int32_t AR_INTR_SYNC_MASK; 738 u_int32_t AR_INTR_ASYNC_CAUSE_CLR; 739 u_int32_t AR_INTR_ASYNC_CAUSE; 740 u_int32_t AR_INTR_ASYNC_ENABLE; 741 u_int32_t AR_PCIE_SERDES; 742 u_int32_t AR_PCIE_SERDES2; 743 u_int32_t AR_GPIO_OUT; 744 u_int32_t AR_GPIO_IN; 745 u_int32_t AR_GPIO_OE_OUT; 746 u_int32_t AR_GPIO_OE1_OUT; 747 u_int32_t AR_GPIO_INTR_POL; 748 u_int32_t AR_GPIO_INPUT_EN_VAL; 749 u_int32_t AR_GPIO_INPUT_MUX1; 750 u_int32_t AR_GPIO_INPUT_MUX2; 751 u_int32_t AR_GPIO_OUTPUT_MUX1; 752 u_int32_t AR_GPIO_OUTPUT_MUX2; 753 u_int32_t AR_GPIO_OUTPUT_MUX3; 754 u_int32_t AR_INPUT_STATE; 755 u_int32_t AR_SPARE; 756 u_int32_t AR_PCIE_CORE_RESET_EN; 757 u_int32_t AR_CLKRUN; 758 u_int32_t AR_EEPROM_STATUS_DATA; 759 u_int32_t AR_OBS; 760 u_int32_t AR_RFSILENT; 761 u_int32_t AR_GPIO_PDPU; 762 u_int32_t AR_GPIO_DS; 763 u_int32_t AR_MISC; 764 u_int32_t AR_PCIE_MSI; 765 u_int32_t AR_TSF_SNAPSHOT_BT_ACTIVE; 766 u_int32_t AR_TSF_SNAPSHOT_BT_PRIORITY; 767 u_int32_t AR_TSF_SNAPSHOT_BT_CNTL; 768 u_int32_t AR_PCIE_PHY_LATENCY_NFTS_ADJ; 769 u_int32_t AR_TDMA_CCA_CNTL; 770 u_int32_t AR_TXAPSYNC; 771 u_int32_t AR_TXSYNC_INIT_SYNC_TMR; 772 u_int32_t AR_INTR_PRIO_SYNC_CAUSE; 773 u_int32_t AR_INTR_PRIO_SYNC_ENABLE; 774 u_int32_t AR_INTR_PRIO_ASYNC_MASK; 775 u_int32_t AR_INTR_PRIO_SYNC_MASK; 776 u_int32_t AR_INTR_PRIO_ASYNC_CAUSE; 777 u_int32_t AR_INTR_PRIO_ASYNC_ENABLE; 778 } ah_hostifregs; 779 780 u_int32_t ah_enterprise_mode; 781 u_int32_t ah_radar1; 782 u_int32_t ah_dc_offset; 783 HAL_BOOL ah_hw_green_tx_enable; /* 1:enalbe H/W Green Tx */ 784 HAL_BOOL ah_smartantenna_enable; /* 1:enalbe H/W */ 785 u_int32_t ah_disable_cck; 786 HAL_BOOL ah_lna_div_use_bt_ant_enable; /* 1:enable Rx(LNA) Diversity */ 787 788 789 /* 790 * Different types of memory where the calibration data might be stored. 791 * All types are searched in Ar9300EepromRestore() in the order flash, eeprom, otp. 792 * To disable searching a type, set its parameter to 0. 793 */ 794 int try_dram; 795 int try_flash; 796 int try_eeprom; 797 int try_otp; 798 #ifdef ATH_CAL_NAND_FLASH 799 int try_nand; 800 #endif 801 /* 802 * This is where we found the calibration data. 803 */ 804 int calibration_data_source; 805 int calibration_data_source_address; 806 /* 807 * This is where we look for the calibration data. must be set before ath_attach() is called 808 */ 809 int calibration_data_try; 810 int calibration_data_try_address; 811 u_int8_t 812 tx_iq_cal_enable : 1, 813 tx_iq_cal_during_agc_cal : 1, 814 tx_cl_cal_enable : 1; 815 816 #if ATH_SUPPORT_MCI 817 /* For MCI */ 818 HAL_BOOL ah_mci_ready; 819 u_int32_t ah_mci_int_raw; 820 u_int32_t ah_mci_int_rx_msg; 821 u_int32_t ah_mci_rx_status; 822 u_int32_t ah_mci_cont_status; 823 u_int8_t ah_mci_bt_state; 824 u_int32_t ah_mci_gpm_addr; 825 u_int8_t *ah_mci_gpm_buf; 826 u_int32_t ah_mci_gpm_len; 827 u_int32_t ah_mci_gpm_idx; 828 u_int32_t ah_mci_sched_addr; 829 u_int8_t *ah_mci_sched_buf; 830 u_int8_t ah_mci_coex_major_version_wlan; 831 u_int8_t ah_mci_coex_minor_version_wlan; 832 u_int8_t ah_mci_coex_major_version_bt; 833 u_int8_t ah_mci_coex_minor_version_bt; 834 HAL_BOOL ah_mci_coex_bt_version_known; 835 HAL_BOOL ah_mci_coex_wlan_channels_update; 836 u_int32_t ah_mci_coex_wlan_channels[4]; 837 HAL_BOOL ah_mci_coex_2g5g_update; 838 HAL_BOOL ah_mci_coex_is_2g; 839 HAL_BOOL ah_mci_query_bt; 840 HAL_BOOL ah_mci_unhalt_bt_gpm; /* need send UNHALT */ 841 HAL_BOOL ah_mci_halted_bt_gpm; /* HALT sent */ 842 HAL_BOOL ah_mci_need_flush_btinfo; 843 HAL_BOOL ah_mci_concur_tx_en; 844 u_int8_t ah_mci_stomp_low_tx_pri; 845 u_int8_t ah_mci_stomp_all_tx_pri; 846 u_int8_t ah_mci_stomp_none_tx_pri; 847 u_int32_t ah_mci_wlan_cal_seq; 848 u_int32_t ah_mci_wlan_cal_done; 849 #if ATH_SUPPORT_AIC 850 HAL_BOOL ah_aic_enabled; 851 u_int32_t ah_aic_sram[ATH_AIC_MAX_BT_CHANNEL]; 852 #endif 853 854 #endif /* ATH_SUPPORT_MCI */ 855 u_int8_t ah_cac_quiet_enabled; 856 #if ATH_WOW_OFFLOAD 857 u_int32_t ah_mcast_filter_l32_set; 858 u_int32_t ah_mcast_filter_u32_set; 859 #endif 860 HAL_BOOL ah_reduced_self_gen_mask; 861 HAL_BOOL ah_chip_reset_done; 862 HAL_BOOL ah_abort_txdma_norx; 863 /* store previous passive RX Cal info */ 864 HAL_BOOL ah_skip_rx_iq_cal; 865 HAL_BOOL ah_rx_cal_complete; /* previous rx cal completed or not */ 866 u_int32_t ah_rx_cal_chan; /* chan on which rx cal is done */ 867 u_int32_t ah_rx_cal_chan_flag; 868 u_int32_t ah_rx_cal_corr[AR9300_MAX_CHAINS]; 869 870 /* Local additions for FreeBSD */ 871 /* 872 * These fields are in the top level HAL in the atheros 873 * codebase; here we place them in the AR9300 HAL and 874 * access them via accessor methods if the driver requires them. 875 */ 876 u_int32_t ah_ob_db1[3]; 877 u_int32_t ah_db2[3]; 878 u_int32_t ah_bb_panic_timeout_ms; 879 u_int32_t ah_bb_panic_last_status; 880 u_int32_t ah_tx_trig_level; 881 u_int16_t ath_hal_spur_chans[AR_EEPROM_MODAL_SPURS][2]; 882 int16_t nf_cw_int_delta; /* diff btwn nominal NF and CW interf threshold */ 883 int ah_phyrestart_disabled; 884 HAL_RSSI_TX_POWER green_tx_status; 885 int green_ap_ps_on; 886 int ah_enable_keysearch_always; 887 int ah_fccaifs; 888 int ah_reset_reason; 889 int ah_dcs_enable; 890 HAL_ANI_STATE ext_ani_state; /* FreeBSD; external facing ANI state */ 891 892 struct ar9300NfLimits nf_2GHz; 893 struct ar9300NfLimits nf_5GHz; 894 struct ar9300NfLimits *nfp; 895 896 uint32_t ah_beaconInterval; 897 }; 898 899 #define AH9300(_ah) ((struct ath_hal_9300 *)(_ah)) 900 901 #define IS_9300_EMU(ah) \ 902 (AH_PRIVATE(ah)->ah_devid == AR9300_DEVID_EMU_PCIE) 903 904 #define ar9300_eep_data_in_flash(_ah) \ 905 (!(AH_PRIVATE(_ah)->ah_flags & AH_USE_EEPROM)) 906 907 #ifdef notyet 908 // Need these additional conditions for IS_5GHZ_FAST_CLOCK_EN when we have valid eeprom contents. 909 && \ 910 ((ar9300_eeprom_get(AH9300(_ah), EEP_MINOR_REV) <= AR9300_EEP_MINOR_VER_16) || \ 911 (ar9300_eeprom_get(AH9300(_ah), EEP_FSTCLK_5G)))) 912 #endif 913 914 /* 915 * WAR for bug 6773. OS_DELAY() does a PIO READ on the PCI bus which allows 916 * other cards' DMA reads to complete in the middle of our reset. 917 */ 918 #define WAR_6773(x) do { \ 919 if ((++(x) % 64) == 0) \ 920 OS_DELAY(1); \ 921 } while (0) 922 923 #define REG_WRITE_ARRAY(iniarray, column, regWr) do { \ 924 int r; \ 925 for (r = 0; r < ((iniarray)->ia_rows); r++) { \ 926 OS_REG_WRITE(ah, INI_RA((iniarray), (r), 0), INI_RA((iniarray), r, (column)));\ 927 WAR_6773(regWr); \ 928 } \ 929 } while (0) 930 931 #define UPPER_5G_SUB_BANDSTART 5700 932 #define MID_5G_SUB_BANDSTART 5400 933 #define TRAINPOWER_DB_OFFSET 6 934 935 #define AH_PAPRD_GET_SCALE_FACTOR(_scale, _eep, _is2G, _channel) do{ if(_is2G) { _scale = (_eep->modal_header_2g.paprd_rate_mask_ht20>>25)&0x7; \ 936 } else { \ 937 if(_channel >= UPPER_5G_SUB_BANDSTART){ _scale = (_eep->modal_header_5g.paprd_rate_mask_ht20>>25)&0x7;} \ 938 else if((UPPER_5G_SUB_BANDSTART < _channel) && (_channel >= MID_5G_SUB_BANDSTART)) \ 939 { _scale = (_eep->modal_header_5g.paprd_rate_mask_ht40>>28)&0x7;} \ 940 else { _scale = (_eep->modal_header_5g.paprd_rate_mask_ht40>>25)&0x7;} } }while(0) 941 942 #ifdef AH_ASSERT 943 #define ar9300FeatureNotSupported(feature, ah, func) \ 944 ath_hal_printf(ah, # feature \ 945 " not supported but called from %s\n", (func)), \ 946 hal_assert(0) 947 #else 948 #define ar9300FeatureNotSupported(feature, ah, func) \ 949 ath_hal_printf(ah, # feature \ 950 " not supported but called from %s\n", (func)) 951 #endif /* AH_ASSERT */ 952 953 /* 954 * Green Tx, Based on different RSSI of Received Beacon thresholds, 955 * using different tx power by modified register tx power related values. 956 * The thresholds are decided by system team. 957 */ 958 #define WB225_SW_GREEN_TX_THRES1_DB 56 /* in dB */ 959 #define WB225_SW_GREEN_TX_THRES2_DB 41 /* in dB */ 960 #define WB225_OB_CALIBRATION_VALUE 5 /* For Green Tx OLPC Delta 961 Calibration Offset */ 962 #define WB225_OB_GREEN_TX_SHORT_VALUE 1 /* For Green Tx OB value 963 in short distance*/ 964 #define WB225_OB_GREEN_TX_MIDDLE_VALUE 3 /* For Green Tx OB value 965 in middle distance */ 966 #define WB225_OB_GREEN_TX_LONG_VALUE 5 /* For Green Tx OB value 967 in long distance */ 968 #define WB225_BBPWRTXRATE9_SW_GREEN_TX_SHORT_VALUE 0x06060606 /* For SwGreen Tx 969 BB_powertx_rate9 reg 970 value in short 971 distance */ 972 #define WB225_BBPWRTXRATE9_SW_GREEN_TX_MIDDLE_VALUE 0x0E0E0E0E /* For SwGreen Tx 973 BB_powertx_rate9 reg 974 value in middle 975 distance */ 976 977 978 /* Tx power for short distacnce in SwGreenTx.*/ 979 static const u_int8_t wb225_sw_gtx_tp_distance_short[ar9300_rate_size] = { 980 6, /*ALL_TARGET_LEGACY_6_24*/ 981 6, /*ALL_TARGET_LEGACY_36*/ 982 6, /*ALL_TARGET_LEGACY_48*/ 983 4, /*ALL_TARGET_LEGACY_54*/ 984 6, /*ALL_TARGET_LEGACY_1L_5L*/ 985 6, /*ALL_TARGET_LEGACY_5S*/ 986 6, /*ALL_TARGET_LEGACY_11L*/ 987 6, /*ALL_TARGET_LEGACY_11S*/ 988 6, /*ALL_TARGET_HT20_0_8_16*/ 989 6, /*ALL_TARGET_HT20_1_3_9_11_17_19*/ 990 4, /*ALL_TARGET_HT20_4*/ 991 4, /*ALL_TARGET_HT20_5*/ 992 4, /*ALL_TARGET_HT20_6*/ 993 2, /*ALL_TARGET_HT20_7*/ 994 0, /*ALL_TARGET_HT20_12*/ 995 0, /*ALL_TARGET_HT20_13*/ 996 0, /*ALL_TARGET_HT20_14*/ 997 0, /*ALL_TARGET_HT20_15*/ 998 0, /*ALL_TARGET_HT20_20*/ 999 0, /*ALL_TARGET_HT20_21*/ 1000 0, /*ALL_TARGET_HT20_22*/ 1001 0, /*ALL_TARGET_HT20_23*/ 1002 6, /*ALL_TARGET_HT40_0_8_16*/ 1003 6, /*ALL_TARGET_HT40_1_3_9_11_17_19*/ 1004 4, /*ALL_TARGET_HT40_4*/ 1005 4, /*ALL_TARGET_HT40_5*/ 1006 4, /*ALL_TARGET_HT40_6*/ 1007 2, /*ALL_TARGET_HT40_7*/ 1008 0, /*ALL_TARGET_HT40_12*/ 1009 0, /*ALL_TARGET_HT40_13*/ 1010 0, /*ALL_TARGET_HT40_14*/ 1011 0, /*ALL_TARGET_HT40_15*/ 1012 0, /*ALL_TARGET_HT40_20*/ 1013 0, /*ALL_TARGET_HT40_21*/ 1014 0, /*ALL_TARGET_HT40_22*/ 1015 0 /*ALL_TARGET_HT40_23*/ 1016 }; 1017 1018 /* Tx power for middle distacnce in SwGreenTx.*/ 1019 static const u_int8_t wb225_sw_gtx_tp_distance_middle[ar9300_rate_size] = { 1020 14, /*ALL_TARGET_LEGACY_6_24*/ 1021 14, /*ALL_TARGET_LEGACY_36*/ 1022 14, /*ALL_TARGET_LEGACY_48*/ 1023 12, /*ALL_TARGET_LEGACY_54*/ 1024 14, /*ALL_TARGET_LEGACY_1L_5L*/ 1025 14, /*ALL_TARGET_LEGACY_5S*/ 1026 14, /*ALL_TARGET_LEGACY_11L*/ 1027 14, /*ALL_TARGET_LEGACY_11S*/ 1028 14, /*ALL_TARGET_HT20_0_8_16*/ 1029 14, /*ALL_TARGET_HT20_1_3_9_11_17_19*/ 1030 14, /*ALL_TARGET_HT20_4*/ 1031 14, /*ALL_TARGET_HT20_5*/ 1032 12, /*ALL_TARGET_HT20_6*/ 1033 10, /*ALL_TARGET_HT20_7*/ 1034 0, /*ALL_TARGET_HT20_12*/ 1035 0, /*ALL_TARGET_HT20_13*/ 1036 0, /*ALL_TARGET_HT20_14*/ 1037 0, /*ALL_TARGET_HT20_15*/ 1038 0, /*ALL_TARGET_HT20_20*/ 1039 0, /*ALL_TARGET_HT20_21*/ 1040 0, /*ALL_TARGET_HT20_22*/ 1041 0, /*ALL_TARGET_HT20_23*/ 1042 14, /*ALL_TARGET_HT40_0_8_16*/ 1043 14, /*ALL_TARGET_HT40_1_3_9_11_17_19*/ 1044 14, /*ALL_TARGET_HT40_4*/ 1045 14, /*ALL_TARGET_HT40_5*/ 1046 12, /*ALL_TARGET_HT40_6*/ 1047 10, /*ALL_TARGET_HT40_7*/ 1048 0, /*ALL_TARGET_HT40_12*/ 1049 0, /*ALL_TARGET_HT40_13*/ 1050 0, /*ALL_TARGET_HT40_14*/ 1051 0, /*ALL_TARGET_HT40_15*/ 1052 0, /*ALL_TARGET_HT40_20*/ 1053 0, /*ALL_TARGET_HT40_21*/ 1054 0, /*ALL_TARGET_HT40_22*/ 1055 0 /*ALL_TARGET_HT40_23*/ 1056 }; 1057 1058 /* OLPC DeltaCalibration Offset unit in half dB.*/ 1059 static const u_int8_t wb225_gtx_olpc_cal_offset[6] = { 1060 0, /* OB0*/ 1061 16, /* OB1*/ 1062 9, /* OB2*/ 1063 5, /* OB3*/ 1064 2, /* OB4*/ 1065 0, /* OB5*/ 1066 }; 1067 1068 /* 1069 * Definitions for HwGreenTx 1070 */ 1071 #define AR9485_HW_GREEN_TX_THRES1_DB 56 /* in dB */ 1072 #define AR9485_HW_GREEN_TX_THRES2_DB 41 /* in dB */ 1073 #define AR9485_BBPWRTXRATE9_HW_GREEN_TX_SHORT_VALUE 0x0C0C0A0A /* For HwGreen Tx 1074 BB_powertx_rate9 reg 1075 value in short 1076 distance */ 1077 #define AR9485_BBPWRTXRATE9_HW_GREEN_TX_MIDDLE_VALUE 0x10100E0E /* For HwGreenTx 1078 BB_powertx_rate9 reg 1079 value in middle 1080 distance */ 1081 1082 /* Tx power for short distacnce in HwGreenTx.*/ 1083 static const u_int8_t ar9485_hw_gtx_tp_distance_short[ar9300_rate_size] = { 1084 14, /*ALL_TARGET_LEGACY_6_24*/ 1085 14, /*ALL_TARGET_LEGACY_36*/ 1086 8, /*ALL_TARGET_LEGACY_48*/ 1087 2, /*ALL_TARGET_LEGACY_54*/ 1088 14, /*ALL_TARGET_LEGACY_1L_5L*/ 1089 14, /*ALL_TARGET_LEGACY_5S*/ 1090 14, /*ALL_TARGET_LEGACY_11L*/ 1091 14, /*ALL_TARGET_LEGACY_11S*/ 1092 12, /*ALL_TARGET_HT20_0_8_16*/ 1093 12, /*ALL_TARGET_HT20_1_3_9_11_17_19*/ 1094 12, /*ALL_TARGET_HT20_4*/ 1095 12, /*ALL_TARGET_HT20_5*/ 1096 8, /*ALL_TARGET_HT20_6*/ 1097 2, /*ALL_TARGET_HT20_7*/ 1098 0, /*ALL_TARGET_HT20_12*/ 1099 0, /*ALL_TARGET_HT20_13*/ 1100 0, /*ALL_TARGET_HT20_14*/ 1101 0, /*ALL_TARGET_HT20_15*/ 1102 0, /*ALL_TARGET_HT20_20*/ 1103 0, /*ALL_TARGET_HT20_21*/ 1104 0, /*ALL_TARGET_HT20_22*/ 1105 0, /*ALL_TARGET_HT20_23*/ 1106 10, /*ALL_TARGET_HT40_0_8_16*/ 1107 10, /*ALL_TARGET_HT40_1_3_9_11_17_19*/ 1108 10, /*ALL_TARGET_HT40_4*/ 1109 10, /*ALL_TARGET_HT40_5*/ 1110 6, /*ALL_TARGET_HT40_6*/ 1111 2, /*ALL_TARGET_HT40_7*/ 1112 0, /*ALL_TARGET_HT40_12*/ 1113 0, /*ALL_TARGET_HT40_13*/ 1114 0, /*ALL_TARGET_HT40_14*/ 1115 0, /*ALL_TARGET_HT40_15*/ 1116 0, /*ALL_TARGET_HT40_20*/ 1117 0, /*ALL_TARGET_HT40_21*/ 1118 0, /*ALL_TARGET_HT40_22*/ 1119 0 /*ALL_TARGET_HT40_23*/ 1120 }; 1121 1122 /* Tx power for middle distacnce in HwGreenTx.*/ 1123 static const u_int8_t ar9485_hw_gtx_tp_distance_middle[ar9300_rate_size] = { 1124 18, /*ALL_TARGET_LEGACY_6_24*/ 1125 18, /*ALL_TARGET_LEGACY_36*/ 1126 14, /*ALL_TARGET_LEGACY_48*/ 1127 12, /*ALL_TARGET_LEGACY_54*/ 1128 18, /*ALL_TARGET_LEGACY_1L_5L*/ 1129 18, /*ALL_TARGET_LEGACY_5S*/ 1130 18, /*ALL_TARGET_LEGACY_11L*/ 1131 18, /*ALL_TARGET_LEGACY_11S*/ 1132 16, /*ALL_TARGET_HT20_0_8_16*/ 1133 16, /*ALL_TARGET_HT20_1_3_9_11_17_19*/ 1134 16, /*ALL_TARGET_HT20_4*/ 1135 16, /*ALL_TARGET_HT20_5*/ 1136 14, /*ALL_TARGET_HT20_6*/ 1137 12, /*ALL_TARGET_HT20_7*/ 1138 0, /*ALL_TARGET_HT20_12*/ 1139 0, /*ALL_TARGET_HT20_13*/ 1140 0, /*ALL_TARGET_HT20_14*/ 1141 0, /*ALL_TARGET_HT20_15*/ 1142 0, /*ALL_TARGET_HT20_20*/ 1143 0, /*ALL_TARGET_HT20_21*/ 1144 0, /*ALL_TARGET_HT20_22*/ 1145 0, /*ALL_TARGET_HT20_23*/ 1146 14, /*ALL_TARGET_HT40_0_8_16*/ 1147 14, /*ALL_TARGET_HT40_1_3_9_11_17_19*/ 1148 14, /*ALL_TARGET_HT40_4*/ 1149 14, /*ALL_TARGET_HT40_5*/ 1150 14, /*ALL_TARGET_HT40_6*/ 1151 12, /*ALL_TARGET_HT40_7*/ 1152 0, /*ALL_TARGET_HT40_12*/ 1153 0, /*ALL_TARGET_HT40_13*/ 1154 0, /*ALL_TARGET_HT40_14*/ 1155 0, /*ALL_TARGET_HT40_15*/ 1156 0, /*ALL_TARGET_HT40_20*/ 1157 0, /*ALL_TARGET_HT40_21*/ 1158 0, /*ALL_TARGET_HT40_22*/ 1159 0 /*ALL_TARGET_HT40_23*/ 1160 }; 1161 1162 /* MIMO Modes used in TPC calculations */ 1163 typedef enum { 1164 AR9300_DEF_MODE = 0, /* Could be CDD or Direct */ 1165 AR9300_TXBF_MODE, 1166 AR9300_STBC_MODE 1167 } AR9300_TXMODES; 1168 typedef enum { 1169 POSEIDON_STORED_REG_OBDB = 0, /* default OB/DB setting from ini */ 1170 POSEIDON_STORED_REG_TPC = 1, /* default txpower value in TPC reg */ 1171 POSEIDON_STORED_REG_BB_PWRTX_RATE9 = 2, /* default txpower value in 1172 * BB_powertx_rate9 reg 1173 */ 1174 POSEIDON_STORED_REG_SZ /* Can not add anymore */ 1175 } POSEIDON_STORED_REGS; 1176 1177 typedef enum { 1178 POSEIDON_STORED_REG_G2_OLPC_OFFSET = 0,/* default OB/DB setting from ini */ 1179 POSEIDON_STORED_REG_G2_SZ /* should not exceed 3 */ 1180 } POSEIDON_STORED_REGS_G2; 1181 1182 #if AH_NEED_TX_DATA_SWAP 1183 #if AH_NEED_RX_DATA_SWAP 1184 #define ar9300_init_cfg_reg(ah) OS_REG_RMW(ah, AR_CFG, AR_CFG_SWTB | AR_CFG_SWRB,0) 1185 #else 1186 #define ar9300_init_cfg_reg(ah) OS_REG_RMW(ah, AR_CFG, AR_CFG_SWTB,0) 1187 #endif 1188 #elif AH_NEED_RX_DATA_SWAP 1189 #define ar9300_init_cfg_reg(ah) OS_REG_RMW(ah, AR_CFG, AR_CFG_SWRB,0) 1190 #else 1191 #define ar9300_init_cfg_reg(ah) OS_REG_RMW(ah, AR_CFG, AR_CFG_SWTD | AR_CFG_SWRD,0) 1192 #endif 1193 1194 extern HAL_BOOL ar9300_rf_attach(struct ath_hal *, HAL_STATUS *); 1195 1196 struct ath_hal; 1197 1198 extern struct ath_hal_9300 * ar9300_new_state(u_int16_t devid, 1199 HAL_SOFTC sc, HAL_BUS_TAG st, HAL_BUS_HANDLE sh, uint16_t *eepromdata, 1200 HAL_OPS_CONFIG *ah_config, 1201 HAL_STATUS *status); 1202 extern struct ath_hal * ar9300_attach(u_int16_t devid, 1203 HAL_SOFTC sc, HAL_BUS_TAG st, HAL_BUS_HANDLE sh, uint16_t *eepromdata, 1204 HAL_OPS_CONFIG *ah_config, HAL_STATUS *status); 1205 extern void ar9300_detach(struct ath_hal *ah); 1206 extern void ar9300_read_revisions(struct ath_hal *ah); 1207 extern HAL_BOOL ar9300_chip_test(struct ath_hal *ah); 1208 extern HAL_BOOL ar9300_get_channel_edges(struct ath_hal *ah, 1209 u_int16_t flags, u_int16_t *low, u_int16_t *high); 1210 extern HAL_BOOL ar9300_fill_capability_info(struct ath_hal *ah); 1211 1212 extern void ar9300_beacon_init(struct ath_hal *ah, 1213 u_int32_t next_beacon, u_int32_t beacon_period, 1214 u_int32_t beacon_period_fraction, HAL_OPMODE opmode); 1215 extern void ar9300_set_sta_beacon_timers(struct ath_hal *ah, 1216 const HAL_BEACON_STATE *); 1217 1218 extern HAL_BOOL ar9300_is_interrupt_pending(struct ath_hal *ah); 1219 extern HAL_BOOL ar9300_get_pending_interrupts(struct ath_hal *ah, HAL_INT *, HAL_INT_TYPE, u_int8_t, HAL_BOOL); 1220 extern HAL_INT ar9300_get_interrupts(struct ath_hal *ah); 1221 extern HAL_INT ar9300_set_interrupts(struct ath_hal *ah, HAL_INT ints, HAL_BOOL); 1222 extern void ar9300_set_intr_mitigation_timer(struct ath_hal* ah, 1223 HAL_INT_MITIGATION reg, u_int32_t value); 1224 extern u_int32_t ar9300_get_intr_mitigation_timer(struct ath_hal* ah, 1225 HAL_INT_MITIGATION reg); 1226 extern u_int32_t ar9300_get_key_cache_size(struct ath_hal *); 1227 extern HAL_BOOL ar9300_is_key_cache_entry_valid(struct ath_hal *, u_int16_t entry); 1228 extern HAL_BOOL ar9300_reset_key_cache_entry(struct ath_hal *ah, u_int16_t entry); 1229 extern HAL_CHANNEL_INTERNAL * ar9300_check_chan(struct ath_hal *ah, 1230 const struct ieee80211_channel *chan); 1231 1232 extern HAL_BOOL ar9300_set_key_cache_entry_mac(struct ath_hal *, 1233 u_int16_t entry, const u_int8_t *mac); 1234 extern HAL_BOOL ar9300_set_key_cache_entry(struct ath_hal *ah, u_int16_t entry, 1235 const HAL_KEYVAL *k, const u_int8_t *mac, int xor_key); 1236 extern HAL_BOOL ar9300_print_keycache(struct ath_hal *ah); 1237 #if ATH_SUPPORT_KEYPLUMB_WAR 1238 extern HAL_BOOL ar9300_check_key_cache_entry(struct ath_hal *ah, u_int16_t entry, 1239 const HAL_KEYVAL *k, int xorKey); 1240 #endif 1241 1242 extern void ar9300_get_mac_address(struct ath_hal *ah, u_int8_t *mac); 1243 extern HAL_BOOL ar9300_set_mac_address(struct ath_hal *ah, const u_int8_t *); 1244 extern void ar9300_get_bss_id_mask(struct ath_hal *ah, u_int8_t *mac); 1245 extern HAL_BOOL ar9300_set_bss_id_mask(struct ath_hal *, const u_int8_t *); 1246 extern HAL_STATUS ar9300_select_ant_config(struct ath_hal *ah, u_int32_t cfg); 1247 #if 0 1248 extern u_int32_t ar9300_ant_ctrl_common_get(struct ath_hal *ah, HAL_BOOL is_2ghz); 1249 #endif 1250 extern HAL_BOOL ar9300_ant_swcom_sel(struct ath_hal *ah, u_int8_t ops, 1251 u_int32_t *common_tbl1, u_int32_t *common_tbl2); 1252 extern HAL_BOOL ar9300_set_regulatory_domain(struct ath_hal *ah, 1253 u_int16_t reg_domain, HAL_STATUS *stats); 1254 extern u_int ar9300_get_wireless_modes(struct ath_hal *ah); 1255 extern void ar9300_enable_rf_kill(struct ath_hal *); 1256 extern HAL_BOOL ar9300_gpio_cfg_output(struct ath_hal *, u_int32_t gpio, HAL_GPIO_MUX_TYPE signalType); 1257 extern HAL_BOOL ar9300_gpio_cfg_output_led_off(struct ath_hal *, u_int32_t gpio, HAL_GPIO_MUX_TYPE signalType); 1258 extern HAL_BOOL ar9300_gpio_cfg_input(struct ath_hal *, u_int32_t gpio); 1259 extern HAL_BOOL ar9300_gpio_set(struct ath_hal *, u_int32_t gpio, u_int32_t val); 1260 extern u_int32_t ar9300_gpio_get(struct ath_hal *ah, u_int32_t gpio); 1261 extern u_int32_t ar9300_gpio_get_intr(struct ath_hal *ah); 1262 extern void ar9300_gpio_set_intr(struct ath_hal *ah, u_int, u_int32_t ilevel); 1263 extern u_int32_t ar9300_gpio_get_polarity(struct ath_hal *ah); 1264 extern void ar9300_gpio_set_polarity(struct ath_hal *ah, u_int32_t, u_int32_t); 1265 extern u_int32_t ar9300_gpio_get_mask(struct ath_hal *ah); 1266 extern int ar9300_gpio_set_mask(struct ath_hal *ah, u_int32_t mask, u_int32_t pol_map); 1267 extern void ar9300_set_led_state(struct ath_hal *ah, HAL_LED_STATE state); 1268 extern void ar9300_set_power_led_state(struct ath_hal *ah, u_int8_t enable); 1269 extern void ar9300_set_network_led_state(struct ath_hal *ah, u_int8_t enable); 1270 extern void ar9300_write_associd(struct ath_hal *ah, const u_int8_t *bssid, 1271 u_int16_t assoc_id); 1272 extern u_int32_t ar9300_ppm_get_rssi_dump(struct ath_hal *); 1273 extern u_int32_t ar9300_ppm_arm_trigger(struct ath_hal *); 1274 extern int ar9300_ppm_get_trigger(struct ath_hal *); 1275 extern u_int32_t ar9300_ppm_force(struct ath_hal *); 1276 extern void ar9300_ppm_un_force(struct ath_hal *); 1277 extern u_int32_t ar9300_ppm_get_force_state(struct ath_hal *); 1278 extern void ar9300_set_dcs_mode(struct ath_hal *ah, u_int32_t); 1279 extern u_int32_t ar9300_get_dcs_mode(struct ath_hal *ah); 1280 extern u_int32_t ar9300_get_tsf32(struct ath_hal *ah); 1281 extern u_int64_t ar9300_get_tsf64(struct ath_hal *ah); 1282 extern u_int32_t ar9300_get_tsf2_32(struct ath_hal *ah); 1283 extern void ar9300_set_tsf64(struct ath_hal *ah, u_int64_t tsf); 1284 extern void ar9300_reset_tsf(struct ath_hal *ah); 1285 extern void ar9300_set_basic_rate(struct ath_hal *ah, HAL_RATE_SET *pSet); 1286 extern u_int32_t ar9300_get_random_seed(struct ath_hal *ah); 1287 extern HAL_BOOL ar9300_detect_card_present(struct ath_hal *ah); 1288 extern void ar9300_update_mib_mac_stats(struct ath_hal *ah); 1289 extern void ar9300_get_mib_mac_stats(struct ath_hal *ah, HAL_MIB_STATS* stats); 1290 extern HAL_BOOL ar9300_is_japan_channel_spread_supported(struct ath_hal *ah); 1291 extern u_int32_t ar9300_get_cur_rssi(struct ath_hal *ah); 1292 extern u_int32_t ar9300_get_rssi_chain0(struct ath_hal *ah); 1293 extern u_int ar9300_get_def_antenna(struct ath_hal *ah); 1294 extern void ar9300_set_def_antenna(struct ath_hal *ah, u_int antenna); 1295 extern HAL_BOOL ar9300_set_antenna_switch(struct ath_hal *ah, 1296 HAL_ANT_SETTING settings, const struct ieee80211_channel *chan, 1297 u_int8_t *, u_int8_t *, u_int8_t *); 1298 extern HAL_BOOL ar9300_is_sleep_after_beacon_broken(struct ath_hal *ah); 1299 extern HAL_BOOL ar9300_set_slot_time(struct ath_hal *, u_int); 1300 extern HAL_BOOL ar9300_set_ack_timeout(struct ath_hal *, u_int); 1301 extern u_int ar9300_get_ack_timeout(struct ath_hal *); 1302 extern HAL_STATUS ar9300_set_quiet(struct ath_hal *ah, u_int32_t period, u_int32_t duration, 1303 u_int32_t next_start, HAL_QUIET_FLAG flag); 1304 extern void ar9300_set_pcu_config(struct ath_hal *); 1305 extern HAL_STATUS ar9300_get_capability(struct ath_hal *, HAL_CAPABILITY_TYPE, 1306 u_int32_t, u_int32_t *); 1307 extern HAL_BOOL ar9300_set_capability(struct ath_hal *, HAL_CAPABILITY_TYPE, 1308 u_int32_t, u_int32_t, HAL_STATUS *); 1309 extern HAL_BOOL ar9300_get_diag_state(struct ath_hal *ah, int request, 1310 const void *args, u_int32_t argsize, 1311 void **result, u_int32_t *resultsize); 1312 extern void ar9300_get_desc_info(struct ath_hal *ah, HAL_DESC_INFO *desc_info); 1313 extern uint32_t ar9300_get_11n_ext_busy(struct ath_hal *ah); 1314 extern void ar9300_set_11n_mac2040(struct ath_hal *ah, HAL_HT_MACMODE mode); 1315 extern HAL_HT_RXCLEAR ar9300_get_11n_rx_clear(struct ath_hal *ah); 1316 extern void ar9300_set_11n_rx_clear(struct ath_hal *ah, HAL_HT_RXCLEAR rxclear); 1317 extern HAL_BOOL ar9300_set_power_mode(struct ath_hal *ah, HAL_POWER_MODE mode, 1318 int set_chip); 1319 extern HAL_POWER_MODE ar9300_get_power_mode(struct ath_hal *ah); 1320 extern HAL_BOOL ar9300_set_power_mode_awake(struct ath_hal *ah, int set_chip); 1321 extern void ar9300_set_sm_power_mode(struct ath_hal *ah, HAL_SMPS_MODE mode); 1322 1323 extern void ar9300_config_pci_power_save(struct ath_hal *ah, int restore, int power_off); 1324 1325 extern void ar9300_force_tsf_sync(struct ath_hal *ah, const u_int8_t *bssid, 1326 u_int16_t assoc_id); 1327 1328 1329 #if ATH_WOW 1330 extern void ar9300_wow_apply_pattern(struct ath_hal *ah, u_int8_t *p_ath_pattern, 1331 u_int8_t *p_ath_mask, int32_t pattern_count, u_int32_t ath_pattern_len); 1332 //extern u_int32_t ar9300_wow_wake_up(struct ath_hal *ah,u_int8_t *chipPatternBytes); 1333 extern u_int32_t ar9300_wow_wake_up(struct ath_hal *ah, HAL_BOOL offloadEnable); 1334 extern bool ar9300_wow_enable(struct ath_hal *ah, u_int32_t pattern_enable, u_int32_t timeout_in_seconds, int clearbssid, 1335 HAL_BOOL offloadEnable); 1336 #if ATH_WOW_OFFLOAD 1337 /* ARP offload */ 1338 #define WOW_OFFLOAD_ARP_INFO_MAX 2 1339 1340 struct hal_wow_offload_arp_info { 1341 u_int32_t valid; 1342 u_int32_t id; 1343 1344 u_int32_t Flags; 1345 union { 1346 u_int8_t u8[4]; 1347 u_int32_t u32; 1348 } RemoteIPv4Address; 1349 union { 1350 u_int8_t u8[4]; 1351 u_int32_t u32; 1352 } HostIPv4Address; 1353 union { 1354 u_int8_t u8[6]; 1355 u_int32_t u32[2]; 1356 } MacAddress; 1357 }; 1358 1359 /* NS offload */ 1360 #define WOW_OFFLOAD_NS_INFO_MAX 2 1361 1362 struct hal_wow_offload_ns_info { 1363 u_int32_t valid; 1364 u_int32_t id; 1365 1366 u_int32_t Flags; 1367 union { 1368 u_int8_t u8[16]; 1369 u_int32_t u32[4]; 1370 } RemoteIPv6Address; 1371 union { 1372 u_int8_t u8[16]; 1373 u_int32_t u32[4]; 1374 } SolicitedNodeIPv6Address; 1375 union { 1376 u_int8_t u8[6]; 1377 u_int32_t u32[2]; 1378 } MacAddress; 1379 union { 1380 u_int8_t u8[16]; 1381 u_int32_t u32[4]; 1382 } TargetIPv6Addresses[2]; 1383 }; 1384 1385 extern void ar9300_wowoffload_prep(struct ath_hal *ah); 1386 extern void ar9300_wowoffload_post(struct ath_hal *ah); 1387 extern u_int32_t ar9300_wowoffload_download_rekey_data(struct ath_hal *ah, u_int32_t *data, u_int32_t size); 1388 extern void ar9300_wowoffload_retrieve_data(struct ath_hal *ah, void *buf, u_int32_t param); 1389 extern void ar9300_wowoffload_download_acer_magic(struct ath_hal *ah, HAL_BOOL valid, u_int8_t* datap, u_int32_t bytes); 1390 extern void ar9300_wowoffload_download_acer_swka(struct ath_hal *ah, u_int32_t id, HAL_BOOL valid, u_int32_t period, u_int32_t size, u_int32_t* datap); 1391 extern void ar9300_wowoffload_download_arp_info(struct ath_hal *ah, u_int32_t id, u_int32_t *data); 1392 extern void ar9300_wowoffload_download_ns_info(struct ath_hal *ah, u_int32_t id, u_int32_t *data); 1393 #endif /* ATH_WOW_OFFLOAD */ 1394 #endif 1395 1396 extern HAL_BOOL ar9300_reset(struct ath_hal *ah, HAL_OPMODE opmode, 1397 struct ieee80211_channel *chan, HAL_HT_MACMODE macmode, u_int8_t txchainmask, 1398 u_int8_t rxchainmask, HAL_HT_EXTPROTSPACING extprotspacing, 1399 HAL_BOOL b_channel_change, HAL_STATUS *status, int is_scan); 1400 extern HAL_BOOL ar9300_lean_channel_change(struct ath_hal *ah, HAL_OPMODE opmode, struct ieee80211_channel *chan, 1401 HAL_HT_MACMODE macmode, u_int8_t txchainmask, u_int8_t rxchainmask); 1402 extern HAL_BOOL ar9300_set_reset_reg(struct ath_hal *ah, u_int32_t type); 1403 extern void ar9300_init_pll(struct ath_hal *ah, struct ieee80211_channel *chan); 1404 extern void ar9300_green_ap_ps_on_off( struct ath_hal *ah, u_int16_t rxMask); 1405 extern u_int16_t ar9300_is_single_ant_power_save_possible(struct ath_hal *ah); 1406 extern void ar9300_set_operating_mode(struct ath_hal *ah, int opmode); 1407 extern HAL_BOOL ar9300_phy_disable(struct ath_hal *ah); 1408 extern HAL_BOOL ar9300_disable(struct ath_hal *ah); 1409 extern HAL_BOOL ar9300_chip_reset(struct ath_hal *ah, struct ieee80211_channel *); 1410 extern HAL_BOOL ar9300_calibration(struct ath_hal *ah, struct ieee80211_channel *chan, 1411 u_int8_t rxchainmask, HAL_BOOL longcal, HAL_BOOL *isIQdone, int is_scan, u_int32_t *sched_cals); 1412 extern void ar9300_reset_cal_valid(struct ath_hal *ah, 1413 const struct ieee80211_channel *chan, 1414 HAL_BOOL *isIQdone, u_int32_t cal_type); 1415 extern void ar9300_iq_cal_collect(struct ath_hal *ah, u_int8_t num_chains); 1416 extern void ar9300_iq_calibration(struct ath_hal *ah, u_int8_t num_chains); 1417 extern void ar9300_temp_comp_cal_collect(struct ath_hal *ah); 1418 extern void ar9300_temp_comp_calibration(struct ath_hal *ah, u_int8_t num_chains); 1419 extern int16_t ar9300_get_min_cca_pwr(struct ath_hal *ah); 1420 extern void ar9300_upload_noise_floor(struct ath_hal *ah, int is2G, int16_t nfarray[]); 1421 1422 extern HAL_BOOL ar9300_set_tx_power_limit(struct ath_hal *ah, u_int32_t limit, 1423 u_int16_t extra_txpow, u_int16_t tpc_in_db); 1424 extern void ar9300_chain_noise_floor(struct ath_hal *ah, int16_t *nf_buf, 1425 struct ieee80211_channel *chan, int is_scan); 1426 extern int16_t ar9300_get_nf_from_reg(struct ath_hal *ah, struct ieee80211_channel *chan, int wait_time); 1427 extern int ar9300_get_rx_nf_offset(struct ath_hal *ah, struct ieee80211_channel *chan, int8_t *nf_pwr, int8_t *nf_cal); 1428 extern HAL_BOOL ar9300_load_nf(struct ath_hal *ah, int16_t nf[]); 1429 1430 extern HAL_RFGAIN ar9300_get_rfgain(struct ath_hal *ah); 1431 extern const HAL_RATE_TABLE *ar9300_get_rate_table(struct ath_hal *, u_int mode); 1432 extern int16_t ar9300_get_rate_txpower(struct ath_hal *ah, u_int mode, 1433 u_int8_t rate_index, u_int8_t chainmask, u_int8_t mimo_mode); 1434 extern void ar9300_init_rate_txpower(struct ath_hal *ah, u_int mode, 1435 const struct ieee80211_channel *chan, 1436 u_int8_t powerPerRate[], 1437 u_int8_t chainmask); 1438 extern void ar9300_adjust_reg_txpower_cdd(struct ath_hal *ah, 1439 u_int8_t powerPerRate[]); 1440 extern HAL_STATUS ath_hal_get_rate_power_limit_from_eeprom(struct ath_hal *ah, 1441 u_int16_t freq, int8_t *max_rate_power, int8_t *min_rate_power); 1442 1443 extern void ar9300_reset_tx_status_ring(struct ath_hal *ah); 1444 extern void ar9300_enable_mib_counters(struct ath_hal *); 1445 extern void ar9300_disable_mib_counters(struct ath_hal *); 1446 extern void ar9300_ani_attach(struct ath_hal *); 1447 extern void ar9300_ani_detach(struct ath_hal *); 1448 extern struct ar9300_ani_state *ar9300_ani_get_current_state(struct ath_hal *); 1449 extern HAL_ANI_STATS *ar9300_ani_get_current_stats(struct ath_hal *); 1450 extern HAL_BOOL ar9300_ani_control(struct ath_hal *, HAL_ANI_CMD cmd, int param); 1451 struct ath_rx_status; 1452 1453 extern void ar9300_process_mib_intr(struct ath_hal *, const HAL_NODE_STATS *); 1454 extern void ar9300_ani_ar_poll(struct ath_hal *, const HAL_NODE_STATS *, 1455 const struct ieee80211_channel *, HAL_ANISTATS *); 1456 extern void ar9300_ani_reset(struct ath_hal *, HAL_BOOL is_scanning); 1457 extern void ar9300_ani_init_defaults(struct ath_hal *ah, HAL_HT_MACMODE macmode); 1458 extern void ar9300_enable_tpc(struct ath_hal *); 1459 1460 extern HAL_BOOL ar9300_rf_gain_cap_apply(struct ath_hal *ah, int is2GHz); 1461 extern void ar9300_rx_gain_table_apply(struct ath_hal *ah); 1462 extern void ar9300_tx_gain_table_apply(struct ath_hal *ah); 1463 extern void ar9300_mat_enable(struct ath_hal *ah, int enable); 1464 extern void ar9300_dump_keycache(struct ath_hal *ah, int n, u_int32_t *entry); 1465 extern HAL_BOOL ar9300_ant_ctrl_set_lna_div_use_bt_ant(struct ath_hal * ah, HAL_BOOL enable, const struct ieee80211_channel * chan); 1466 1467 /* BB Panic Watchdog declarations */ 1468 #define HAL_BB_PANIC_WD_TMO 25 /* in ms, 0 to disable */ 1469 #define HAL_BB_PANIC_WD_TMO_HORNET 85 1470 extern void ar9300_config_bb_panic_watchdog(struct ath_hal *); 1471 extern void ar9300_handle_bb_panic(struct ath_hal *); 1472 extern int ar9300_get_bb_panic_info(struct ath_hal *ah, struct hal_bb_panic_info *bb_panic); 1473 extern HAL_BOOL ar9300_handle_radar_bb_panic(struct ath_hal *ah); 1474 extern void ar9300_set_hal_reset_reason(struct ath_hal *ah, u_int8_t resetreason); 1475 1476 /* DFS declarations */ 1477 extern void ar9300_check_dfs(struct ath_hal *ah, struct ieee80211_channel *chan); 1478 extern void ar9300_dfs_found(struct ath_hal *ah, struct ieee80211_channel *chan, 1479 u_int64_t nolTime); 1480 extern void ar9300_enable_dfs(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); 1481 extern void ar9300_get_dfs_thresh(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); 1482 extern HAL_BOOL ar9300_radar_wait(struct ath_hal *ah, struct ieee80211_channel *chan); 1483 extern struct dfs_pulse * ar9300_get_dfs_radars(struct ath_hal *ah, 1484 u_int32_t dfsdomain, int *numradars, struct dfs_bin5pulse **bin5pulses, 1485 int *numb5radars, HAL_PHYERR_PARAM *pe); 1486 extern HAL_BOOL ar9300_get_default_dfs_thresh(struct ath_hal *ah, HAL_PHYERR_PARAM *pe); 1487 extern void ar9300_adjust_difs(struct ath_hal *ah, u_int32_t val); 1488 extern u_int32_t ar9300_dfs_config_fft(struct ath_hal *ah, HAL_BOOL is_enable); 1489 extern void ar9300_cac_tx_quiet(struct ath_hal *ah, HAL_BOOL enable); 1490 extern void ar9300_dfs_cac_war(struct ath_hal *ah, u_int32_t start); 1491 1492 extern struct ieee80211_channel * ar9300_get_extension_channel(struct ath_hal *ah); 1493 extern HAL_BOOL ar9300_is_fast_clock_enabled(struct ath_hal *ah); 1494 1495 1496 extern void ar9300_mark_phy_inactive(struct ath_hal *ah); 1497 1498 /* Spectral scan declarations */ 1499 extern void ar9300_configure_spectral_scan(struct ath_hal *ah, HAL_SPECTRAL_PARAM *ss); 1500 extern void ar9300_set_cca_threshold(struct ath_hal *ah, u_int8_t thresh62); 1501 extern void ar9300_get_spectral_params(struct ath_hal *ah, HAL_SPECTRAL_PARAM *ss); 1502 extern HAL_BOOL ar9300_is_spectral_active(struct ath_hal *ah); 1503 extern HAL_BOOL ar9300_is_spectral_enabled(struct ath_hal *ah); 1504 extern void ar9300_start_spectral_scan(struct ath_hal *ah); 1505 extern void ar9300_stop_spectral_scan(struct ath_hal *ah); 1506 extern u_int32_t ar9300_get_spectral_config(struct ath_hal *ah); 1507 extern void ar9300_restore_spectral_config(struct ath_hal *ah, u_int32_t restoreval); 1508 int16_t ar9300_get_ctl_chan_nf(struct ath_hal *ah); 1509 int16_t ar9300_get_ext_chan_nf(struct ath_hal *ah); 1510 /* End spectral scan declarations */ 1511 1512 /* Raw ADC capture functions */ 1513 extern void ar9300_enable_test_addac_mode(struct ath_hal *ah); 1514 extern void ar9300_disable_test_addac_mode(struct ath_hal *ah); 1515 extern void ar9300_begin_adc_capture(struct ath_hal *ah, int auto_agc_gain); 1516 extern HAL_STATUS ar9300_retrieve_capture_data(struct ath_hal *ah, u_int16_t chain_mask, int disable_dc_filter, void *sample_buf, u_int32_t *max_samples); 1517 extern HAL_STATUS ar9300_calc_adc_ref_powers(struct ath_hal *ah, int freq_mhz, int16_t *sample_min, int16_t *sample_max, int32_t *chain_ref_pwr, int num_chain_ref_pwr); 1518 extern HAL_STATUS ar9300_get_min_agc_gain(struct ath_hal *ah, int freq_mhz, int32_t *chain_gain, int num_chain_gain); 1519 1520 extern HAL_BOOL ar9300_reset_11n(struct ath_hal *ah, HAL_OPMODE opmode, 1521 struct ieee80211_channel *chan, HAL_BOOL b_channel_change, HAL_STATUS *status); 1522 extern void ar9300_set_coverage_class(struct ath_hal *ah, u_int8_t coverageclass, int now); 1523 1524 extern void ar9300_get_channel_centers(struct ath_hal *ah, 1525 const struct ieee80211_channel *chan, 1526 CHAN_CENTERS *centers); 1527 extern u_int16_t ar9300_get_ctl_center(struct ath_hal *ah, 1528 const struct ieee80211_channel *chan); 1529 extern u_int16_t ar9300_get_ext_center(struct ath_hal *ah, 1530 const struct ieee80211_channel *chan); 1531 extern u_int32_t ar9300_get_mib_cycle_counts_pct(struct ath_hal *, u_int32_t*, u_int32_t*, u_int32_t*); 1532 1533 extern void ar9300_dma_reg_dump(struct ath_hal *); 1534 extern HAL_BOOL ar9300_set_11n_rx_rifs(struct ath_hal *ah, HAL_BOOL enable); 1535 extern HAL_BOOL ar9300_set_rifs_delay(struct ath_hal *ah, HAL_BOOL enable); 1536 extern HAL_BOOL ar9300_set_smart_antenna(struct ath_hal *ah, HAL_BOOL enable); 1537 extern HAL_BOOL ar9300_detect_bb_hang(struct ath_hal *ah); 1538 extern HAL_BOOL ar9300_detect_mac_hang(struct ath_hal *ah); 1539 1540 #ifdef ATH_BT_COEX 1541 extern void ar9300_set_bt_coex_info(struct ath_hal *ah, HAL_BT_COEX_INFO *btinfo); 1542 extern void ar9300_bt_coex_config(struct ath_hal *ah, HAL_BT_COEX_CONFIG *btconf); 1543 extern void ar9300_bt_coex_set_qcu_thresh(struct ath_hal *ah, int qnum); 1544 extern void ar9300_bt_coex_set_weights(struct ath_hal *ah, u_int32_t stomp_type); 1545 extern void ar9300_bt_coex_setup_bmiss_thresh(struct ath_hal *ah, u_int32_t thresh); 1546 extern void ar9300_bt_coex_set_parameter(struct ath_hal *ah, u_int32_t type, u_int32_t value); 1547 extern void ar9300_bt_coex_disable(struct ath_hal *ah); 1548 extern int ar9300_bt_coex_enable(struct ath_hal *ah); 1549 extern void ar9300_init_bt_coex(struct ath_hal *ah); 1550 extern u_int32_t ar9300_get_bt_active_gpio(struct ath_hal *ah, u_int32_t reg); 1551 extern u_int32_t ar9300_get_wlan_active_gpio(struct ath_hal *ah, u_int32_t reg,u_int32_t bOn); 1552 #endif 1553 extern int ar9300_alloc_generic_timer(struct ath_hal *ah, HAL_GEN_TIMER_DOMAIN tsf); 1554 extern void ar9300_free_generic_timer(struct ath_hal *ah, int index); 1555 extern void ar9300_start_generic_timer(struct ath_hal *ah, int index, u_int32_t timer_next, 1556 u_int32_t timer_period); 1557 extern void ar9300_stop_generic_timer(struct ath_hal *ah, int index); 1558 extern void ar9300_get_gen_timer_interrupts(struct ath_hal *ah, u_int32_t *trigger, 1559 u_int32_t *thresh); 1560 extern void ar9300_start_tsf2(struct ath_hal *ah); 1561 1562 extern void ar9300_chk_rssi_update_tx_pwr(struct ath_hal *ah, int rssi); 1563 extern HAL_BOOL ar9300_is_skip_paprd_by_greentx(struct ath_hal *ah); 1564 extern void ar9300_control_signals_for_green_tx_mode(struct ath_hal *ah); 1565 extern void ar9300_hwgreentx_set_pal_spare(struct ath_hal *ah, int value); 1566 extern HAL_BOOL ar9300_is_ani_noise_spur(struct ath_hal *ah); 1567 extern void ar9300_reset_hw_beacon_proc_crc(struct ath_hal *ah); 1568 extern int32_t ar9300_get_hw_beacon_rssi(struct ath_hal *ah); 1569 extern void ar9300_set_hw_beacon_rssi_threshold(struct ath_hal *ah, 1570 u_int32_t rssi_threshold); 1571 extern void ar9300_reset_hw_beacon_rssi(struct ath_hal *ah); 1572 extern void ar9300_set_hw_beacon_proc(struct ath_hal *ah, HAL_BOOL on); 1573 extern void ar9300_get_vow_stats(struct ath_hal *ah, HAL_VOWSTATS *p_stats, 1574 u_int8_t); 1575 1576 extern int ar9300_get_spur_info(struct ath_hal * ah, int *enable, int len, u_int16_t *freq); 1577 extern int ar9300_set_spur_info(struct ath_hal * ah, int enable, int len, u_int16_t *freq); 1578 extern void ar9300_wow_set_gpio_reset_low(struct ath_hal * ah); 1579 extern HAL_BOOL ar9300_get_mib_cycle_counts(struct ath_hal *, HAL_SURVEY_SAMPLE *); 1580 extern void ar9300_clear_mib_counters(struct ath_hal *ah); 1581 1582 /* EEPROM interface functions */ 1583 /* Common Interface functions */ 1584 extern HAL_STATUS ar9300_eeprom_attach(struct ath_hal *); 1585 extern u_int32_t ar9300_eeprom_get(struct ath_hal_9300 *ahp, EEPROM_PARAM param); 1586 1587 extern u_int32_t ar9300_ini_fixup(struct ath_hal *ah, 1588 ar9300_eeprom_t *p_eep_data, 1589 u_int32_t reg, 1590 u_int32_t val); 1591 1592 extern HAL_STATUS ar9300_eeprom_set_transmit_power(struct ath_hal *ah, 1593 ar9300_eeprom_t *p_eep_data, const struct ieee80211_channel *chan, 1594 u_int16_t cfg_ctl, u_int16_t twice_antenna_reduction, 1595 u_int16_t twice_max_regulatory_power, u_int16_t power_limit); 1596 extern void ar9300_eeprom_set_addac(struct ath_hal *, struct ieee80211_channel *); 1597 extern HAL_BOOL ar9300_eeprom_set_param(struct ath_hal *ah, EEPROM_PARAM param, u_int32_t value); 1598 extern HAL_BOOL ar9300_eeprom_set_board_values(struct ath_hal *, const struct ieee80211_channel *); 1599 extern HAL_BOOL ar9300_eeprom_read_word(struct ath_hal *, u_int off, u_int16_t *data); 1600 extern HAL_BOOL ar9300_eeprom_read(struct ath_hal *ah, long address, u_int8_t *buffer, int many); 1601 extern HAL_BOOL ar9300_otp_read(struct ath_hal *ah, u_int off, u_int32_t *data, HAL_BOOL is_wifi); 1602 1603 extern HAL_BOOL ar9300_flash_read(struct ath_hal *, u_int off, u_int16_t *data); 1604 extern HAL_BOOL ar9300_flash_write(struct ath_hal *, u_int off, u_int16_t data); 1605 extern u_int ar9300_eeprom_dump_support(struct ath_hal *ah, void **pp_e); 1606 extern u_int8_t ar9300_eeprom_get_num_ant_config(struct ath_hal_9300 *ahp, HAL_FREQ_BAND freq_band); 1607 extern HAL_STATUS ar9300_eeprom_get_ant_cfg(struct ath_hal_9300 *ahp, const struct ieee80211_channel *chan, 1608 u_int8_t index, u_int16_t *config); 1609 extern u_int8_t* ar9300_eeprom_get_cust_data(struct ath_hal_9300 *ahp); 1610 extern u_int8_t *ar9300_eeprom_get_spur_chans_ptr(struct ath_hal *ah, HAL_BOOL is_2ghz); 1611 extern HAL_BOOL ar9300_interference_is_present(struct ath_hal *ah); 1612 extern HAL_BOOL ar9300_tuning_caps_apply(struct ath_hal *ah); 1613 extern void ar9300_disp_tpc_tables(struct ath_hal *ah); 1614 extern u_int8_t *ar9300_get_tpc_tables(struct ath_hal *ah); 1615 extern u_int8_t ar9300_eeprom_set_tx_gain_cap(struct ath_hal *ah, int *tx_gain_max); 1616 extern u_int8_t ar9300_eeprom_tx_gain_table_index_max_apply(struct ath_hal *ah, u_int16_t channel); 1617 1618 /* Common EEPROM Help function */ 1619 extern void ar9300_set_immunity(struct ath_hal *ah, HAL_BOOL enable); 1620 extern void ar9300_get_hw_hangs(struct ath_hal *ah, hal_hw_hangs_t *hangs); 1621 1622 extern u_int ar9300_mac_to_clks(struct ath_hal *ah, u_int clks); 1623 1624 /* tx_bf interface */ 1625 #define ar9300_init_txbf(ah) 1626 #define ar9300_set_11n_txbf_sounding(ah, ds, series, cec, opt) 1627 #define ar9300_set_11n_txbf_cal(ah, ds, cal_pos, code_rate, cec, opt) 1628 #define ar9300_txbf_save_cv_from_compress( \ 1629 ah, key_idx, mimo_control, compress_rpt) \ 1630 false 1631 #define ar9300_txbf_save_cv_from_non_compress( \ 1632 ah, key_idx, mimo_control, non_compress_rpt) \ 1633 false 1634 #define ar9300_txbf_rc_update( \ 1635 ah, rx_status, local_h, csi_frame, ness_a, ness_b, bw) \ 1636 false 1637 #define ar9300_fill_csi_frame( \ 1638 ah, rx_status, bandwidth, local_h, csi_frame_body) \ 1639 0 1640 #define ar9300_fill_txbf_capabilities(ah) 1641 #define ar9300_get_txbf_capabilities(ah) NULL 1642 #define ar9300_txbf_set_key( \ 1643 ah, entry, rx_staggered_sounding, channel_estimation_cap, mmss) 1644 #define ar9300_read_key_cache_mac(ah, entry, mac) false 1645 #define ar9300_txbf_get_cv_cache_nr(ah, key_idx, nr) 1646 #define ar9300_set_selfgenrate_limit(ah, ts_ratecode) 1647 #define ar9300_reset_lowest_txrate(ah) 1648 #define ar9300_txbf_set_basic_set(ah) 1649 1650 extern void ar9300_crdc_rx_notify(struct ath_hal *ah, struct ath_rx_status *rxs); 1651 extern void ar9300_chain_rssi_diff_compensation(struct ath_hal *ah); 1652 1653 1654 1655 #if ATH_SUPPORT_MCI 1656 extern void ar9300_mci_bt_coex_set_weights(struct ath_hal *ah, u_int32_t stomp_type); 1657 extern void ar9300_mci_bt_coex_disable(struct ath_hal *ah); 1658 extern int ar9300_mci_bt_coex_enable(struct ath_hal *ah); 1659 extern void ar9300_mci_setup (struct ath_hal *ah, u_int32_t gpm_addr, 1660 void *gpm_buf, u_int16_t len, 1661 u_int32_t sched_addr); 1662 extern void ar9300_mci_remote_reset(struct ath_hal *ah, HAL_BOOL wait_done); 1663 extern void ar9300_mci_send_lna_transfer(struct ath_hal *ah, HAL_BOOL wait_done); 1664 extern void ar9300_mci_send_sys_waking(struct ath_hal *ah, HAL_BOOL wait_done); 1665 extern HAL_BOOL ar9300_mci_send_message (struct ath_hal *ah, u_int8_t header, 1666 u_int32_t flag, u_int32_t *payload, u_int8_t len, 1667 HAL_BOOL wait_done, HAL_BOOL check_bt); 1668 extern u_int32_t ar9300_mci_get_interrupt (struct ath_hal *ah, 1669 u_int32_t *mci_int, 1670 u_int32_t *mci_int_rx_msg); 1671 extern u_int32_t ar9300_mci_state (struct ath_hal *ah, u_int32_t state_type, u_int32_t *p_data); 1672 extern void ar9300_mci_reset (struct ath_hal *ah, HAL_BOOL en_int, HAL_BOOL is_2g, HAL_BOOL is_full_sleep); 1673 extern void ar9300_mci_send_coex_halt_bt_gpm(struct ath_hal *ah, HAL_BOOL halt, HAL_BOOL wait_done); 1674 extern void ar9300_mci_mute_bt(struct ath_hal *ah); 1675 extern u_int32_t ar9300_mci_wait_for_gpm(struct ath_hal *ah, u_int8_t gpm_type, u_int8_t gpm_opcode, int32_t time_out); 1676 extern void ar9300_mci_enable_interrupt(struct ath_hal *ah); 1677 extern void ar9300_mci_disable_interrupt(struct ath_hal *ah); 1678 extern void ar9300_mci_detach (struct ath_hal *ah); 1679 extern u_int32_t ar9300_mci_check_int (struct ath_hal *ah, u_int32_t ints); 1680 extern void ar9300_mci_sync_bt_state (struct ath_hal *ah); 1681 extern void ar9300_mci_2g5g_changed(struct ath_hal *ah, HAL_BOOL is_2g); 1682 extern void ar9300_mci_2g5g_switch(struct ath_hal *ah, HAL_BOOL wait_done); 1683 #if ATH_SUPPORT_AIC 1684 extern u_int32_t ar9300_aic_calibration (struct ath_hal *ah); 1685 extern u_int32_t ar9300_aic_start_normal (struct ath_hal *ah); 1686 #endif 1687 #endif 1688 1689 extern HAL_STATUS ar9300_set_proxy_sta(struct ath_hal *ah, HAL_BOOL enable); 1690 1691 extern HAL_BOOL ar9300_regulatory_domain_override( 1692 struct ath_hal *ah, u_int16_t regdmn); 1693 #if ATH_ANT_DIV_COMB 1694 extern void ar9300_ant_div_comb_get_config(struct ath_hal *ah, HAL_ANT_COMB_CONFIG* div_comb_conf); 1695 extern void ar9300_ant_div_comb_set_config(struct ath_hal *ah, HAL_ANT_COMB_CONFIG* div_comb_conf); 1696 #endif /* ATH_ANT_DIV_COMB */ 1697 extern void ar9300_disable_phy_restart(struct ath_hal *ah, 1698 int disable_phy_restart); 1699 extern void ar9300_enable_keysearch_always(struct ath_hal *ah, int enable); 1700 extern HAL_BOOL ar9300ForceVCS( struct ath_hal *ah); 1701 extern HAL_BOOL ar9300SetDfs3StreamFix(struct ath_hal *ah, u_int32_t val); 1702 extern HAL_BOOL ar9300Get3StreamSignature( struct ath_hal *ah); 1703 1704 #ifdef ATH_TX99_DIAG 1705 #ifndef ATH_SUPPORT_HTC 1706 extern void ar9300_tx99_channel_pwr_update(struct ath_hal *ah, struct ieee80211_channel *c, u_int32_t txpower); 1707 extern void ar9300_tx99_chainmsk_setup(struct ath_hal *ah, int tx_chainmask); 1708 extern void ar9300_tx99_set_single_carrier(struct ath_hal *ah, int tx_chain_mask, int chtype); 1709 extern void ar9300_tx99_start(struct ath_hal *ah, u_int8_t *data); 1710 extern void ar9300_tx99_stop(struct ath_hal *ah); 1711 #endif /* ATH_SUPPORT_HTC */ 1712 #endif /* ATH_TX99_DIAG */ 1713 extern HAL_BOOL ar9300_set_ctl_pwr(struct ath_hal *ah, u_int8_t *ctl_array); 1714 extern void ar9300_set_txchainmaskopt(struct ath_hal *ah, u_int8_t mask); 1715 1716 enum { 1717 AR9300_COEFF_TX_TYPE = 0, 1718 AR9300_COEFF_RX_TYPE 1719 }; 1720 1721 #endif /* _ATH_AR9300_H_ */ 1722