The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/dev/ath/ath_hal/ar9300/ar9300.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: b2d3f49eabda74bcd75abe8638c344ef


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.