Commit e6148917 authored by Samuel Ortiz's avatar Samuel Ortiz Committed by John W. Linville

iwl3945: Use iwl-eeprom.c routines

By adding the eeprom ops to the 3945 code, we can now use the iwlcore eeprom
routines (defined in iwl-eeprom.c).
We also removed the heavy eeprom39 reference from iwl_priv and use the eeprom
pointer instead.
Signed-off-by: default avatarSamuel Ortiz <samuel.ortiz@intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent a8e74e27
...@@ -182,7 +182,7 @@ struct iwl3945_eeprom { ...@@ -182,7 +182,7 @@ struct iwl3945_eeprom {
* 2.4 GHz channels 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 * 2.4 GHz channels 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
*/ */
u16 band_1_count; /* abs.ofs: 196 */ u16 band_1_count; /* abs.ofs: 196 */
struct iwl_eeprom_channel band_1_channels[14]; /* abs.ofs: 196 */ struct iwl_eeprom_channel band_1_channels[14]; /* abs.ofs: 198 */
/* /*
* 4.9 GHz channels 183, 184, 185, 187, 188, 189, 192, 196, * 4.9 GHz channels 183, 184, 185, 187, 188, 189, 192, 196,
...@@ -225,7 +225,7 @@ struct iwl3945_eeprom { ...@@ -225,7 +225,7 @@ struct iwl3945_eeprom {
u8 reserved16[172]; /* fill out to full 1024 byte block */ u8 reserved16[172]; /* fill out to full 1024 byte block */
} __attribute__ ((packed)); } __attribute__ ((packed));
#define IWL_EEPROM_IMAGE_SIZE 1024 #define IWL3945_EEPROM_IMG_SIZE 1024
/* End of EEPROM */ /* End of EEPROM */
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include "iwl-3945-fh.h" #include "iwl-3945-fh.h"
#include "iwl-commands.h" #include "iwl-commands.h"
#include "iwl-3945.h" #include "iwl-3945.h"
#include "iwl-eeprom.h"
#include "iwl-helpers.h" #include "iwl-helpers.h"
#include "iwl-core.h" #include "iwl-core.h"
#include "iwl-agn-rs.h" #include "iwl-agn-rs.h"
...@@ -209,17 +210,19 @@ static int iwl3945_hwrate_to_plcp_idx(u8 plcp) ...@@ -209,17 +210,19 @@ static int iwl3945_hwrate_to_plcp_idx(u8 plcp)
*/ */
__le32 iwl3945_get_antenna_flags(const struct iwl_priv *priv) __le32 iwl3945_get_antenna_flags(const struct iwl_priv *priv)
{ {
struct iwl3945_eeprom *eeprom = (struct iwl3945_eeprom *)priv->eeprom;
switch (priv->antenna) { switch (priv->antenna) {
case IWL_ANTENNA_DIVERSITY: case IWL_ANTENNA_DIVERSITY:
return 0; return 0;
case IWL_ANTENNA_MAIN: case IWL_ANTENNA_MAIN:
if (priv->eeprom39.antenna_switch_type) if (eeprom->antenna_switch_type)
return RXON_FLG_DIS_DIV_MSK | RXON_FLG_ANT_B_MSK; return RXON_FLG_DIS_DIV_MSK | RXON_FLG_ANT_B_MSK;
return RXON_FLG_DIS_DIV_MSK | RXON_FLG_ANT_A_MSK; return RXON_FLG_DIS_DIV_MSK | RXON_FLG_ANT_A_MSK;
case IWL_ANTENNA_AUX: case IWL_ANTENNA_AUX:
if (priv->eeprom39.antenna_switch_type) if (eeprom->antenna_switch_type)
return RXON_FLG_DIS_DIV_MSK | RXON_FLG_ANT_A_MSK; return RXON_FLG_DIS_DIV_MSK | RXON_FLG_ANT_A_MSK;
return RXON_FLG_DIS_DIV_MSK | RXON_FLG_ANT_B_MSK; return RXON_FLG_DIS_DIV_MSK | RXON_FLG_ANT_B_MSK;
} }
...@@ -1128,6 +1131,7 @@ static int iwl3945_apm_init(struct iwl_priv *priv) ...@@ -1128,6 +1131,7 @@ static int iwl3945_apm_init(struct iwl_priv *priv)
static void iwl3945_nic_config(struct iwl_priv *priv) static void iwl3945_nic_config(struct iwl_priv *priv)
{ {
struct iwl3945_eeprom *eeprom = (struct iwl3945_eeprom *)priv->eeprom;
unsigned long flags; unsigned long flags;
u8 rev_id = 0; u8 rev_id = 0;
...@@ -1145,42 +1149,42 @@ static void iwl3945_nic_config(struct iwl_priv *priv) ...@@ -1145,42 +1149,42 @@ static void iwl3945_nic_config(struct iwl_priv *priv)
CSR39_HW_IF_CONFIG_REG_BIT_3945_MM); CSR39_HW_IF_CONFIG_REG_BIT_3945_MM);
} }
if (EEPROM_SKU_CAP_OP_MODE_MRC == priv->eeprom39.sku_cap) { if (EEPROM_SKU_CAP_OP_MODE_MRC == eeprom->sku_cap) {
IWL_DEBUG_INFO("SKU OP mode is mrc\n"); IWL_DEBUG_INFO("SKU OP mode is mrc\n");
iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
CSR39_HW_IF_CONFIG_REG_BIT_SKU_MRC); CSR39_HW_IF_CONFIG_REG_BIT_SKU_MRC);
} else } else
IWL_DEBUG_INFO("SKU OP mode is basic\n"); IWL_DEBUG_INFO("SKU OP mode is basic\n");
if ((priv->eeprom39.board_revision & 0xF0) == 0xD0) { if ((eeprom->board_revision & 0xF0) == 0xD0) {
IWL_DEBUG_INFO("3945ABG revision is 0x%X\n", IWL_DEBUG_INFO("3945ABG revision is 0x%X\n",
priv->eeprom39.board_revision); eeprom->board_revision);
iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
CSR39_HW_IF_CONFIG_REG_BIT_BOARD_TYPE); CSR39_HW_IF_CONFIG_REG_BIT_BOARD_TYPE);
} else { } else {
IWL_DEBUG_INFO("3945ABG revision is 0x%X\n", IWL_DEBUG_INFO("3945ABG revision is 0x%X\n",
priv->eeprom39.board_revision); eeprom->board_revision);
iwl_clear_bit(priv, CSR_HW_IF_CONFIG_REG, iwl_clear_bit(priv, CSR_HW_IF_CONFIG_REG,
CSR39_HW_IF_CONFIG_REG_BIT_BOARD_TYPE); CSR39_HW_IF_CONFIG_REG_BIT_BOARD_TYPE);
} }
if (priv->eeprom39.almgor_m_version <= 1) { if (eeprom->almgor_m_version <= 1) {
iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_A); CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_A);
IWL_DEBUG_INFO("Card M type A version is 0x%X\n", IWL_DEBUG_INFO("Card M type A version is 0x%X\n",
priv->eeprom39.almgor_m_version); eeprom->almgor_m_version);
} else { } else {
IWL_DEBUG_INFO("Card M type B version is 0x%X\n", IWL_DEBUG_INFO("Card M type B version is 0x%X\n",
priv->eeprom39.almgor_m_version); eeprom->almgor_m_version);
iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG, iwl_set_bit(priv, CSR_HW_IF_CONFIG_REG,
CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_B); CSR39_HW_IF_CONFIG_REG_BITS_SILICON_TYPE_B);
} }
spin_unlock_irqrestore(&priv->lock, flags); spin_unlock_irqrestore(&priv->lock, flags);
if (priv->eeprom39.sku_cap & EEPROM_SKU_CAP_SW_RF_KILL_ENABLE) if (eeprom->sku_cap & EEPROM_SKU_CAP_SW_RF_KILL_ENABLE)
IWL_DEBUG_RF_KILL("SW RF KILL supported in EEPROM.\n"); IWL_DEBUG_RF_KILL("SW RF KILL supported in EEPROM.\n");
if (priv->eeprom39.sku_cap & EEPROM_SKU_CAP_HW_RF_KILL_ENABLE) if (eeprom->sku_cap & EEPROM_SKU_CAP_HW_RF_KILL_ENABLE)
IWL_DEBUG_RF_KILL("HW RF KILL supported in EEPROM.\n"); IWL_DEBUG_RF_KILL("HW RF KILL supported in EEPROM.\n");
} }
...@@ -1406,6 +1410,7 @@ int iwl3945_hw_get_temperature(struct iwl_priv *priv) ...@@ -1406,6 +1410,7 @@ int iwl3945_hw_get_temperature(struct iwl_priv *priv)
*/ */
static int iwl3945_hw_reg_txpower_get_temperature(struct iwl_priv *priv) static int iwl3945_hw_reg_txpower_get_temperature(struct iwl_priv *priv)
{ {
struct iwl3945_eeprom *eeprom = (struct iwl3945_eeprom *)priv->eeprom;
int temperature; int temperature;
temperature = iwl3945_hw_get_temperature(priv); temperature = iwl3945_hw_get_temperature(priv);
...@@ -1421,7 +1426,7 @@ static int iwl3945_hw_reg_txpower_get_temperature(struct iwl_priv *priv) ...@@ -1421,7 +1426,7 @@ static int iwl3945_hw_reg_txpower_get_temperature(struct iwl_priv *priv)
/* if really really hot(?), /* if really really hot(?),
* substitute the 3rd band/group's temp measured at factory */ * substitute the 3rd band/group's temp measured at factory */
if (priv->last_temperature > 100) if (priv->last_temperature > 100)
temperature = priv->eeprom39.groups[2].temperature; temperature = eeprom->groups[2].temperature;
else /* else use most recent "sane" value from driver */ else /* else use most recent "sane" value from driver */
temperature = priv->last_temperature; temperature = priv->last_temperature;
} }
...@@ -1720,7 +1725,7 @@ int iwl3945_send_tx_power(struct iwl_priv *priv) ...@@ -1720,7 +1725,7 @@ int iwl3945_send_tx_power(struct iwl_priv *priv)
}; };
txpower.band = (priv->band == IEEE80211_BAND_5GHZ) ? 0 : 1; txpower.band = (priv->band == IEEE80211_BAND_5GHZ) ? 0 : 1;
ch_info = iwl3945_get_channel_info(priv, ch_info = iwl_get_channel_info(priv,
priv->band, priv->band,
le16_to_cpu(priv->active39_rxon.channel)); le16_to_cpu(priv->active39_rxon.channel));
if (!ch_info) { if (!ch_info) {
...@@ -1881,6 +1886,7 @@ static int iwl3945_hw_reg_get_ch_txpower_limit(struct iwl_channel_info *ch_info) ...@@ -1881,6 +1886,7 @@ static int iwl3945_hw_reg_get_ch_txpower_limit(struct iwl_channel_info *ch_info)
static int iwl3945_hw_reg_comp_txpower_temp(struct iwl_priv *priv) static int iwl3945_hw_reg_comp_txpower_temp(struct iwl_priv *priv)
{ {
struct iwl_channel_info *ch_info = NULL; struct iwl_channel_info *ch_info = NULL;
struct iwl3945_eeprom *eeprom = (struct iwl3945_eeprom *)priv->eeprom;
int delta_index; int delta_index;
const s8 *clip_pwrs; /* array of h/w max power levels for each rate */ const s8 *clip_pwrs; /* array of h/w max power levels for each rate */
u8 a_band; u8 a_band;
...@@ -1896,7 +1902,7 @@ static int iwl3945_hw_reg_comp_txpower_temp(struct iwl_priv *priv) ...@@ -1896,7 +1902,7 @@ static int iwl3945_hw_reg_comp_txpower_temp(struct iwl_priv *priv)
a_band = is_channel_a_band(ch_info); a_band = is_channel_a_band(ch_info);
/* Get this chnlgrp's factory calibration temperature */ /* Get this chnlgrp's factory calibration temperature */
ref_temp = (s16)priv->eeprom39.groups[ch_info->group_index]. ref_temp = (s16)eeprom->groups[ch_info->group_index].
temperature; temperature;
/* get power index adjustment based on current and factory /* get power index adjustment based on current and factory
...@@ -2041,7 +2047,8 @@ static void iwl3945_bg_reg_txpower_periodic(struct work_struct *work) ...@@ -2041,7 +2047,8 @@ static void iwl3945_bg_reg_txpower_periodic(struct work_struct *work)
static u16 iwl3945_hw_reg_get_ch_grp_index(struct iwl_priv *priv, static u16 iwl3945_hw_reg_get_ch_grp_index(struct iwl_priv *priv,
const struct iwl_channel_info *ch_info) const struct iwl_channel_info *ch_info)
{ {
struct iwl3945_eeprom_txpower_group *ch_grp = &priv->eeprom39.groups[0]; struct iwl3945_eeprom *eeprom = (struct iwl3945_eeprom *)priv->eeprom;
struct iwl3945_eeprom_txpower_group *ch_grp = &eeprom->groups[0];
u8 group; u8 group;
u16 group_index = 0; /* based on factory calib frequencies */ u16 group_index = 0; /* based on factory calib frequencies */
u8 grp_channel; u8 grp_channel;
...@@ -2077,6 +2084,7 @@ static int iwl3945_hw_reg_get_matched_power_index(struct iwl_priv *priv, ...@@ -2077,6 +2084,7 @@ static int iwl3945_hw_reg_get_matched_power_index(struct iwl_priv *priv,
s32 setting_index, s32 *new_index) s32 setting_index, s32 *new_index)
{ {
const struct iwl3945_eeprom_txpower_group *chnl_grp = NULL; const struct iwl3945_eeprom_txpower_group *chnl_grp = NULL;
struct iwl3945_eeprom *eeprom = (struct iwl3945_eeprom *)priv->eeprom;
s32 index0, index1; s32 index0, index1;
s32 power = 2 * requested_power; s32 power = 2 * requested_power;
s32 i; s32 i;
...@@ -2085,7 +2093,7 @@ static int iwl3945_hw_reg_get_matched_power_index(struct iwl_priv *priv, ...@@ -2085,7 +2093,7 @@ static int iwl3945_hw_reg_get_matched_power_index(struct iwl_priv *priv,
s32 res; s32 res;
s32 denominator; s32 denominator;
chnl_grp = &priv->eeprom39.groups[setting_index]; chnl_grp = &eeprom->groups[setting_index];
samples = chnl_grp->samples; samples = chnl_grp->samples;
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
if (power == samples[i].power) { if (power == samples[i].power) {
...@@ -2124,6 +2132,7 @@ static void iwl3945_hw_reg_init_channel_groups(struct iwl_priv *priv) ...@@ -2124,6 +2132,7 @@ static void iwl3945_hw_reg_init_channel_groups(struct iwl_priv *priv)
{ {
u32 i; u32 i;
s32 rate_index; s32 rate_index;
struct iwl3945_eeprom *eeprom = (struct iwl3945_eeprom *)priv->eeprom;
const struct iwl3945_eeprom_txpower_group *group; const struct iwl3945_eeprom_txpower_group *group;
IWL_DEBUG_POWER("Initializing factory calib info from EEPROM\n"); IWL_DEBUG_POWER("Initializing factory calib info from EEPROM\n");
...@@ -2131,7 +2140,7 @@ static void iwl3945_hw_reg_init_channel_groups(struct iwl_priv *priv) ...@@ -2131,7 +2140,7 @@ static void iwl3945_hw_reg_init_channel_groups(struct iwl_priv *priv)
for (i = 0; i < IWL_NUM_TX_CALIB_GROUPS; i++) { for (i = 0; i < IWL_NUM_TX_CALIB_GROUPS; i++) {
s8 *clip_pwrs; /* table of power levels for each rate */ s8 *clip_pwrs; /* table of power levels for each rate */
s8 satur_pwr; /* saturation power for each chnl group */ s8 satur_pwr; /* saturation power for each chnl group */
group = &priv->eeprom39.groups[i]; group = &eeprom->groups[i];
/* sanity check on factory saturation power value */ /* sanity check on factory saturation power value */
if (group->saturation_power < 40) { if (group->saturation_power < 40) {
...@@ -2204,6 +2213,7 @@ int iwl3945_txpower_set_from_eeprom(struct iwl_priv *priv) ...@@ -2204,6 +2213,7 @@ int iwl3945_txpower_set_from_eeprom(struct iwl_priv *priv)
{ {
struct iwl_channel_info *ch_info = NULL; struct iwl_channel_info *ch_info = NULL;
struct iwl3945_channel_power_info *pwr_info; struct iwl3945_channel_power_info *pwr_info;
struct iwl3945_eeprom *eeprom = (struct iwl3945_eeprom *)priv->eeprom;
int delta_index; int delta_index;
u8 rate_index; u8 rate_index;
u8 scan_tbl_index; u8 scan_tbl_index;
...@@ -2238,7 +2248,7 @@ int iwl3945_txpower_set_from_eeprom(struct iwl_priv *priv) ...@@ -2238,7 +2248,7 @@ int iwl3945_txpower_set_from_eeprom(struct iwl_priv *priv)
/* calculate power index *adjustment* value according to /* calculate power index *adjustment* value according to
* diff between current temperature and factory temperature */ * diff between current temperature and factory temperature */
delta_index = iwl3945_hw_reg_adjust_power_by_temp(temperature, delta_index = iwl3945_hw_reg_adjust_power_by_temp(temperature,
priv->eeprom39.groups[ch_info->group_index]. eeprom->groups[ch_info->group_index].
temperature); temperature);
IWL_DEBUG_POWER("Delta index for channel %d: %d [%d]\n", IWL_DEBUG_POWER("Delta index for channel %d: %d [%d]\n",
...@@ -2585,6 +2595,33 @@ static int iwl3945_verify_bsm(struct iwl_priv *priv) ...@@ -2585,6 +2595,33 @@ static int iwl3945_verify_bsm(struct iwl_priv *priv)
return 0; return 0;
} }
/******************************************************************************
*
* EEPROM related functions
*
******************************************************************************/
/*
* Clear the OWNER_MSK, to establish driver (instead of uCode running on
* embedded controller) as EEPROM reader; each read is a series of pulses
* to/from the EEPROM chip, not a single event, so even reads could conflict
* if they weren't arbitrated by some ownership mechanism. Here, the driver
* simply claims ownership, which should be safe when this function is called
* (i.e. before loading uCode!).
*/
static int iwl3945_eeprom_acquire_semaphore(struct iwl_priv *priv)
{
_iwl_clear_bit(priv, CSR_EEPROM_GP, CSR_EEPROM_GP_IF_OWNER_MSK);
return 0;
}
static void iwl3945_eeprom_release_semaphore(struct iwl_priv *priv)
{
return;
}
/** /**
* iwl3945_load_bsm - Load bootstrap instructions * iwl3945_load_bsm - Load bootstrap instructions
* *
...@@ -2715,6 +2752,21 @@ static struct iwl_lib_ops iwl3945_lib = { ...@@ -2715,6 +2752,21 @@ static struct iwl_lib_ops iwl3945_lib = {
.config = iwl3945_nic_config, .config = iwl3945_nic_config,
.set_pwr_src = iwl3945_set_pwr_src, .set_pwr_src = iwl3945_set_pwr_src,
}, },
.eeprom_ops = {
.regulatory_bands = {
EEPROM_REGULATORY_BAND_1_CHANNELS,
EEPROM_REGULATORY_BAND_2_CHANNELS,
EEPROM_REGULATORY_BAND_3_CHANNELS,
EEPROM_REGULATORY_BAND_4_CHANNELS,
EEPROM_REGULATORY_BAND_5_CHANNELS,
IWL3945_EEPROM_IMG_SIZE,
IWL3945_EEPROM_IMG_SIZE,
},
.verify_signature = iwlcore_eeprom_verify_signature,
.acquire_semaphore = iwl3945_eeprom_acquire_semaphore,
.release_semaphore = iwl3945_eeprom_release_semaphore,
.query_addr = iwlcore_eeprom_query_addr,
},
.send_tx_power = iwl3945_send_tx_power, .send_tx_power = iwl3945_send_tx_power,
}; };
...@@ -2733,6 +2785,8 @@ static struct iwl_cfg iwl3945_bg_cfg = { ...@@ -2733,6 +2785,8 @@ static struct iwl_cfg iwl3945_bg_cfg = {
.ucode_api_max = IWL3945_UCODE_API_MAX, .ucode_api_max = IWL3945_UCODE_API_MAX,
.ucode_api_min = IWL3945_UCODE_API_MIN, .ucode_api_min = IWL3945_UCODE_API_MIN,
.sku = IWL_SKU_G, .sku = IWL_SKU_G,
.eeprom_size = IWL3945_EEPROM_IMG_SIZE,
.eeprom_ver = EEPROM_3945_EEPROM_VERSION,
.ops = &iwl3945_ops, .ops = &iwl3945_ops,
.mod_params = &iwl3945_mod_params .mod_params = &iwl3945_mod_params
}; };
...@@ -2743,6 +2797,8 @@ static struct iwl_cfg iwl3945_abg_cfg = { ...@@ -2743,6 +2797,8 @@ static struct iwl_cfg iwl3945_abg_cfg = {
.ucode_api_max = IWL3945_UCODE_API_MAX, .ucode_api_max = IWL3945_UCODE_API_MAX,
.ucode_api_min = IWL3945_UCODE_API_MIN, .ucode_api_min = IWL3945_UCODE_API_MIN,
.sku = IWL_SKU_A|IWL_SKU_G, .sku = IWL_SKU_A|IWL_SKU_G,
.eeprom_size = IWL3945_EEPROM_IMG_SIZE,
.eeprom_ver = EEPROM_3945_EEPROM_VERSION,
.ops = &iwl3945_ops, .ops = &iwl3945_ops,
.mod_params = &iwl3945_mod_params .mod_params = &iwl3945_mod_params
}; };
......
...@@ -1091,9 +1091,6 @@ struct iwl_priv { ...@@ -1091,9 +1091,6 @@ struct iwl_priv {
struct iwl3945_station_entry stations_39[IWL_STATION_COUNT]; struct iwl3945_station_entry stations_39[IWL_STATION_COUNT];
/* eeprom */
struct iwl3945_eeprom eeprom39;
u32 sta_supp_rates; u32 sta_supp_rates;
}; /*iwl_priv */ }; /*iwl_priv */
......
...@@ -531,6 +531,13 @@ int iwl_init_channel_map(struct iwl_priv *priv) ...@@ -531,6 +531,13 @@ int iwl_init_channel_map(struct iwl_priv *priv)
} }
} }
/* Check if we do have FAT channels */
if (priv->cfg->ops->lib->eeprom_ops.regulatory_bands[5] >=
priv->cfg->eeprom_size &&
priv->cfg->ops->lib->eeprom_ops.regulatory_bands[6] >=
priv->cfg->eeprom_size)
return 0;
/* Two additional EEPROM bands for 2.4 and 5 GHz FAT channels */ /* Two additional EEPROM bands for 2.4 and 5 GHz FAT channels */
for (band = 6; band <= 7; band++) { for (band = 6; band <= 7; band++) {
enum ieee80211_band ieeeband; enum ieee80211_band ieeeband;
...@@ -582,6 +589,7 @@ void iwl_free_channel_map(struct iwl_priv *priv) ...@@ -582,6 +589,7 @@ void iwl_free_channel_map(struct iwl_priv *priv)
kfree(priv->channel_info); kfree(priv->channel_info);
priv->channel_count = 0; priv->channel_count = 0;
} }
EXPORT_SYMBOL(iwl_free_channel_map);
/** /**
* iwl_get_channel_info - Find driver's private channel info * iwl_get_channel_info - Find driver's private channel info
......
...@@ -118,6 +118,9 @@ struct iwl_eeprom_channel { ...@@ -118,6 +118,9 @@ struct iwl_eeprom_channel {
s8 max_power_avg; /* max power (dBm) on this chnl, limit 31 */ s8 max_power_avg; /* max power (dBm) on this chnl, limit 31 */
} __attribute__ ((packed)); } __attribute__ ((packed));
/* 3945 Specific */
#define EEPROM_3945_EEPROM_VERSION (0x2f)
/* 4965 has two radio transmitters (and 3 radio receivers) */ /* 4965 has two radio transmitters (and 3 radio receivers) */
#define EEPROM_TX_POWER_TX_CHAINS (2) #define EEPROM_TX_POWER_TX_CHAINS (2)
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment