123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- /*
- * Shared Atheros AR9170 Header
- *
- * EEPROM layout
- *
- * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; see the file COPYING. If not, see
- * http://www.gnu.org/licenses/.
- *
- * This file incorporates work covered by the following copyright and
- * permission notice:
- * Copyright (c) 2007-2008 Atheros Communications, Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
- #ifndef __CARL9170_SHARED_EEPROM_H
- #define __CARL9170_SHARED_EEPROM_H
- #define AR9170_EEPROM_START 0x1600
- #define AR5416_MAX_CHAINS 2
- #define AR5416_MODAL_SPURS 5
- struct ar9170_eeprom_modal {
- __le32 antCtrlChain[AR5416_MAX_CHAINS];
- __le32 antCtrlCommon;
- s8 antennaGainCh[AR5416_MAX_CHAINS];
- u8 switchSettling;
- u8 txRxAttenCh[AR5416_MAX_CHAINS];
- u8 rxTxMarginCh[AR5416_MAX_CHAINS];
- s8 adcDesiredSize;
- s8 pgaDesiredSize;
- u8 xlnaGainCh[AR5416_MAX_CHAINS];
- u8 txEndToXpaOff;
- u8 txEndToRxOn;
- u8 txFrameToXpaOn;
- u8 thresh62;
- s8 noiseFloorThreshCh[AR5416_MAX_CHAINS];
- u8 xpdGain;
- u8 xpd;
- s8 iqCalICh[AR5416_MAX_CHAINS];
- s8 iqCalQCh[AR5416_MAX_CHAINS];
- u8 pdGainOverlap;
- u8 ob;
- u8 db;
- u8 xpaBiasLvl;
- u8 pwrDecreaseFor2Chain;
- u8 pwrDecreaseFor3Chain;
- u8 txFrameToDataStart;
- u8 txFrameToPaOn;
- u8 ht40PowerIncForPdadc;
- u8 bswAtten[AR5416_MAX_CHAINS];
- u8 bswMargin[AR5416_MAX_CHAINS];
- u8 swSettleHt40;
- u8 reserved[22];
- struct spur_channel {
- __le16 spurChan;
- u8 spurRangeLow;
- u8 spurRangeHigh;
- } __packed spur_channels[AR5416_MODAL_SPURS];
- } __packed;
- #define AR5416_NUM_PD_GAINS 4
- #define AR5416_PD_GAIN_ICEPTS 5
- struct ar9170_calibration_data_per_freq {
- u8 pwr_pdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
- u8 vpd_pdg[AR5416_NUM_PD_GAINS][AR5416_PD_GAIN_ICEPTS];
- } __packed;
- #define AR5416_NUM_5G_CAL_PIERS 8
- #define AR5416_NUM_2G_CAL_PIERS 4
- #define AR5416_NUM_5G_TARGET_PWRS 8
- #define AR5416_NUM_2G_CCK_TARGET_PWRS 3
- #define AR5416_NUM_2G_OFDM_TARGET_PWRS 4
- #define AR5416_MAX_NUM_TGT_PWRS 8
- struct ar9170_calibration_target_power_legacy {
- u8 freq;
- u8 power[4];
- } __packed;
- struct ar9170_calibration_target_power_ht {
- u8 freq;
- u8 power[8];
- } __packed;
- #define AR5416_NUM_CTLS 24
- struct ar9170_calctl_edges {
- u8 channel;
- #define AR9170_CALCTL_EDGE_FLAGS 0xC0
- u8 power_flags;
- } __packed;
- #define AR5416_NUM_BAND_EDGES 8
- struct ar9170_calctl_data {
- struct ar9170_calctl_edges
- control_edges[AR5416_MAX_CHAINS][AR5416_NUM_BAND_EDGES];
- } __packed;
- struct ar9170_eeprom {
- __le16 length;
- __le16 checksum;
- __le16 version;
- u8 operating_flags;
- #define AR9170_OPFLAG_5GHZ 1
- #define AR9170_OPFLAG_2GHZ 2
- u8 misc;
- __le16 reg_domain[2];
- u8 mac_address[6];
- u8 rx_mask;
- u8 tx_mask;
- __le16 rf_silent;
- __le16 bluetooth_options;
- __le16 device_capabilities;
- __le32 build_number;
- u8 deviceType;
- u8 reserved[33];
- u8 customer_data[64];
- struct ar9170_eeprom_modal
- modal_header[2];
- u8 cal_freq_pier_5G[AR5416_NUM_5G_CAL_PIERS];
- u8 cal_freq_pier_2G[AR5416_NUM_2G_CAL_PIERS];
- struct ar9170_calibration_data_per_freq
- cal_pier_data_5G[AR5416_MAX_CHAINS][AR5416_NUM_5G_CAL_PIERS],
- cal_pier_data_2G[AR5416_MAX_CHAINS][AR5416_NUM_2G_CAL_PIERS];
- /* power calibration data */
- struct ar9170_calibration_target_power_legacy
- cal_tgt_pwr_5G[AR5416_NUM_5G_TARGET_PWRS];
- struct ar9170_calibration_target_power_ht
- cal_tgt_pwr_5G_ht20[AR5416_NUM_5G_TARGET_PWRS],
- cal_tgt_pwr_5G_ht40[AR5416_NUM_5G_TARGET_PWRS];
- struct ar9170_calibration_target_power_legacy
- cal_tgt_pwr_2G_cck[AR5416_NUM_2G_CCK_TARGET_PWRS],
- cal_tgt_pwr_2G_ofdm[AR5416_NUM_2G_OFDM_TARGET_PWRS];
- struct ar9170_calibration_target_power_ht
- cal_tgt_pwr_2G_ht20[AR5416_NUM_2G_OFDM_TARGET_PWRS],
- cal_tgt_pwr_2G_ht40[AR5416_NUM_2G_OFDM_TARGET_PWRS];
- /* conformance testing limits */
- u8 ctl_index[AR5416_NUM_CTLS];
- struct ar9170_calctl_data
- ctl_data[AR5416_NUM_CTLS];
- u8 pad;
- __le16 subsystem_id;
- } __packed;
- #define AR9170_LED_MODE_POWER_ON 0x0001
- #define AR9170_LED_MODE_RESERVED 0x0002
- #define AR9170_LED_MODE_DISABLE_STATE 0x0004
- #define AR9170_LED_MODE_OFF_IN_PSM 0x0008
- /* AR9170_LED_MODE BIT is set */
- #define AR9170_LED_MODE_FREQUENCY_S 4
- #define AR9170_LED_MODE_FREQUENCY 0x0030
- #define AR9170_LED_MODE_FREQUENCY_1HZ 0x0000
- #define AR9170_LED_MODE_FREQUENCY_0_5HZ 0x0010
- #define AR9170_LED_MODE_FREQUENCY_0_25HZ 0x0020
- #define AR9170_LED_MODE_FREQUENCY_0_125HZ 0x0030
- /* AR9170_LED_MODE BIT is not set */
- #define AR9170_LED_MODE_CONN_STATE_S 4
- #define AR9170_LED_MODE_CONN_STATE 0x0030
- #define AR9170_LED_MODE_CONN_STATE_FORCE_OFF 0x0000
- #define AR9170_LED_MODE_CONN_STATE_FORCE_ON 0x0010
- /* Idle off / Active on */
- #define AR9170_LED_MODE_CONN_STATE_IOFF_AON 0x0020
- /* Idle on / Active off */
- #define AR9170_LED_MODE_CONN_STATE_ION_AOFF 0x0010
- #define AR9170_LED_MODE_MODE 0x0040
- #define AR9170_LED_MODE_RESERVED2 0x0080
- #define AR9170_LED_MODE_TON_SCAN_S 8
- #define AR9170_LED_MODE_TON_SCAN 0x0f00
- #define AR9170_LED_MODE_TOFF_SCAN_S 12
- #define AR9170_LED_MODE_TOFF_SCAN 0xf000
- struct ar9170_led_mode {
- __le16 led;
- };
- #endif /* __CARL9170_SHARED_EEPROM_H */
|