diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-5000.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-5000.c | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index 91b3e563bbea..545970b0caa1 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
@@ -133,8 +133,56 @@ static const u8 *iwl5000_eeprom_query_addr(const struct iwl_priv *priv, | |||
133 | return &priv->eeprom[address]; | 133 | return &priv->eeprom[address]; |
134 | } | 134 | } |
135 | 135 | ||
136 | static int iwl5000_hw_set_hw_params(struct iwl_priv *priv) | ||
137 | { | ||
138 | if ((priv->cfg->mod_params->num_of_queues > IWL50_NUM_QUEUES) || | ||
139 | (priv->cfg->mod_params->num_of_queues < IWL_MIN_NUM_QUEUES)) { | ||
140 | IWL_ERROR("invalid queues_num, should be between %d and %d\n", | ||
141 | IWL_MIN_NUM_QUEUES, IWL50_NUM_QUEUES); | ||
142 | return -EINVAL; | ||
143 | } | ||
136 | 144 | ||
137 | 145 | priv->hw_params.max_txq_num = priv->cfg->mod_params->num_of_queues; | |
146 | priv->hw_params.sw_crypto = priv->cfg->mod_params->sw_crypto; | ||
147 | priv->hw_params.tx_cmd_len = sizeof(struct iwl4965_tx_cmd); | ||
148 | priv->hw_params.max_rxq_size = RX_QUEUE_SIZE; | ||
149 | priv->hw_params.max_rxq_log = RX_QUEUE_SIZE_LOG; | ||
150 | if (priv->cfg->mod_params->amsdu_size_8K) | ||
151 | priv->hw_params.rx_buf_size = IWL_RX_BUF_SIZE_8K; | ||
152 | else | ||
153 | priv->hw_params.rx_buf_size = IWL_RX_BUF_SIZE_4K; | ||
154 | priv->hw_params.max_pkt_size = priv->hw_params.rx_buf_size - 256; | ||
155 | priv->hw_params.max_stations = IWL5000_STATION_COUNT; | ||
156 | priv->hw_params.bcast_sta_id = IWL5000_BROADCAST_ID; | ||
157 | priv->hw_params.max_data_size = IWL50_RTC_DATA_SIZE; | ||
158 | priv->hw_params.max_inst_size = IWL50_RTC_INST_SIZE; | ||
159 | priv->hw_params.max_bsm_size = BSM_SRAM_SIZE; | ||
160 | priv->hw_params.fat_channel = BIT(IEEE80211_BAND_2GHZ) | | ||
161 | BIT(IEEE80211_BAND_5GHZ); | ||
162 | |||
163 | switch (priv->hw_rev & CSR_HW_REV_TYPE_MSK) { | ||
164 | case CSR_HW_REV_TYPE_5100: | ||
165 | case CSR_HW_REV_TYPE_5150: | ||
166 | priv->hw_params.tx_chains_num = 1; | ||
167 | priv->hw_params.rx_chains_num = 2; | ||
168 | /* FIXME: move to ANT_A, ANT_B, ANT_C enum */ | ||
169 | priv->hw_params.valid_tx_ant = IWL_ANTENNA_MAIN; | ||
170 | priv->hw_params.valid_rx_ant = (IWL_ANTENNA_MAIN | | ||
171 | IWL_ANTENNA_AUX); | ||
172 | break; | ||
173 | case CSR_HW_REV_TYPE_5300: | ||
174 | case CSR_HW_REV_TYPE_5350: | ||
175 | priv->hw_params.tx_chains_num = 3; | ||
176 | priv->hw_params.rx_chains_num = 3; | ||
177 | /* FIXME: move to ANT_A, ANT_B, ANT_C enum */ | ||
178 | priv->hw_params.valid_tx_ant = (IWL_ANTENNA_MAIN | | ||
179 | IWL_ANTENNA_AUX | 0x04); | ||
180 | priv->hw_params.valid_rx_ant = (IWL_ANTENNA_MAIN | | ||
181 | IWL_ANTENNA_AUX | 0x04); | ||
182 | break; | ||
183 | } | ||
184 | return 0; | ||
185 | } | ||
138 | static struct iwl_hcmd_ops iwl5000_hcmd = { | 186 | static struct iwl_hcmd_ops iwl5000_hcmd = { |
139 | }; | 187 | }; |
140 | 188 | ||
@@ -142,6 +190,7 @@ static struct iwl_hcmd_utils_ops iwl5000_hcmd_utils = { | |||
142 | }; | 190 | }; |
143 | 191 | ||
144 | static struct iwl_lib_ops iwl5000_lib = { | 192 | static struct iwl_lib_ops iwl5000_lib = { |
193 | .set_hw_params = iwl5000_hw_set_hw_params, | ||
145 | .apm_ops = { | 194 | .apm_ops = { |
146 | .init = iwl5000_apm_init, | 195 | .init = iwl5000_apm_init, |
147 | .set_pwr_src = iwl4965_set_pwr_src, | 196 | .set_pwr_src = iwl4965_set_pwr_src, |