iwlwifi/iwl3945: unify rts_tx_cmd_flag
3945 and 4965 share the functionality for setting RTS and CTS to the tx_cmd. Unify these functions and move the common functionality to core. Signed-off-by: Abhijeet Kolekar <abhijeet.kolekar@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
92a35bda79
commit
37dc70fea8
@@ -2826,6 +2826,7 @@ static struct iwl_lib_ops iwl3945_lib = {
|
|||||||
static struct iwl_hcmd_utils_ops iwl3945_hcmd_utils = {
|
static struct iwl_hcmd_utils_ops iwl3945_hcmd_utils = {
|
||||||
.get_hcmd_size = iwl3945_get_hcmd_size,
|
.get_hcmd_size = iwl3945_get_hcmd_size,
|
||||||
.build_addsta_hcmd = iwl3945_build_addsta_hcmd,
|
.build_addsta_hcmd = iwl3945_build_addsta_hcmd,
|
||||||
|
.rts_tx_cmd_flag = iwlcore_rts_tx_cmd_flag,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct iwl_ops iwl3945_ops = {
|
static struct iwl_ops iwl3945_ops = {
|
||||||
|
@@ -484,18 +484,6 @@ static void iwl4965_gain_computation(struct iwl_priv *priv,
|
|||||||
data->beacon_count = 0;
|
data->beacon_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void iwl4965_rts_tx_cmd_flag(struct ieee80211_tx_info *info,
|
|
||||||
__le32 *tx_flags)
|
|
||||||
{
|
|
||||||
if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) {
|
|
||||||
*tx_flags |= TX_CMD_FLG_RTS_MSK;
|
|
||||||
*tx_flags &= ~TX_CMD_FLG_CTS_MSK;
|
|
||||||
} else if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
|
|
||||||
*tx_flags &= ~TX_CMD_FLG_RTS_MSK;
|
|
||||||
*tx_flags |= TX_CMD_FLG_CTS_MSK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void iwl4965_bg_txpower_work(struct work_struct *work)
|
static void iwl4965_bg_txpower_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct iwl_priv *priv = container_of(work, struct iwl_priv,
|
struct iwl_priv *priv = container_of(work, struct iwl_priv,
|
||||||
@@ -2212,7 +2200,7 @@ static struct iwl_hcmd_utils_ops iwl4965_hcmd_utils = {
|
|||||||
.build_addsta_hcmd = iwl4965_build_addsta_hcmd,
|
.build_addsta_hcmd = iwl4965_build_addsta_hcmd,
|
||||||
.chain_noise_reset = iwl4965_chain_noise_reset,
|
.chain_noise_reset = iwl4965_chain_noise_reset,
|
||||||
.gain_computation = iwl4965_gain_computation,
|
.gain_computation = iwl4965_gain_computation,
|
||||||
.rts_tx_cmd_flag = iwl4965_rts_tx_cmd_flag,
|
.rts_tx_cmd_flag = iwlcore_rts_tx_cmd_flag,
|
||||||
.calc_rssi = iwl4965_calc_rssi,
|
.calc_rssi = iwl4965_calc_rssi,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -604,6 +604,23 @@ void iwlcore_free_geos(struct iwl_priv *priv)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(iwlcore_free_geos);
|
EXPORT_SYMBOL(iwlcore_free_geos);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* iwlcore_rts_tx_cmd_flag: Set rts/cts. 3945 and 4965 only share this
|
||||||
|
* function.
|
||||||
|
*/
|
||||||
|
void iwlcore_rts_tx_cmd_flag(struct ieee80211_tx_info *info,
|
||||||
|
__le32 *tx_flags)
|
||||||
|
{
|
||||||
|
if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS) {
|
||||||
|
*tx_flags |= TX_CMD_FLG_RTS_MSK;
|
||||||
|
*tx_flags &= ~TX_CMD_FLG_CTS_MSK;
|
||||||
|
} else if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
|
||||||
|
*tx_flags &= ~TX_CMD_FLG_RTS_MSK;
|
||||||
|
*tx_flags |= TX_CMD_FLG_CTS_MSK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(iwlcore_rts_tx_cmd_flag);
|
||||||
|
|
||||||
static bool is_single_rx_stream(struct iwl_priv *priv)
|
static bool is_single_rx_stream(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
return !priv->current_ht_config.is_ht ||
|
return !priv->current_ht_config.is_ht ||
|
||||||
|
@@ -329,6 +329,8 @@ int iwl_mac_get_tx_stats(struct ieee80211_hw *hw,
|
|||||||
void iwl_mac_reset_tsf(struct ieee80211_hw *hw);
|
void iwl_mac_reset_tsf(struct ieee80211_hw *hw);
|
||||||
int iwl_alloc_txq_mem(struct iwl_priv *priv);
|
int iwl_alloc_txq_mem(struct iwl_priv *priv);
|
||||||
void iwl_free_txq_mem(struct iwl_priv *priv);
|
void iwl_free_txq_mem(struct iwl_priv *priv);
|
||||||
|
void iwlcore_rts_tx_cmd_flag(struct ieee80211_tx_info *info,
|
||||||
|
__le32 *tx_flags);
|
||||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||||
int iwl_alloc_traffic_mem(struct iwl_priv *priv);
|
int iwl_alloc_traffic_mem(struct iwl_priv *priv);
|
||||||
void iwl_free_traffic_mem(struct iwl_priv *priv);
|
void iwl_free_traffic_mem(struct iwl_priv *priv);
|
||||||
|
@@ -408,7 +408,6 @@ static void iwl3945_build_tx_cmd_basic(struct iwl_priv *priv,
|
|||||||
struct iwl3945_tx_cmd *tx = (struct iwl3945_tx_cmd *)cmd->cmd.payload;
|
struct iwl3945_tx_cmd *tx = (struct iwl3945_tx_cmd *)cmd->cmd.payload;
|
||||||
__le32 tx_flags = tx->tx_flags;
|
__le32 tx_flags = tx->tx_flags;
|
||||||
__le16 fc = hdr->frame_control;
|
__le16 fc = hdr->frame_control;
|
||||||
u8 rc_flags = info->control.rates[0].flags;
|
|
||||||
|
|
||||||
tx->stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
|
tx->stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
|
||||||
if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) {
|
if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) {
|
||||||
@@ -435,13 +434,7 @@ static void iwl3945_build_tx_cmd_basic(struct iwl_priv *priv,
|
|||||||
tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
|
tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc_flags & IEEE80211_TX_RC_USE_RTS_CTS) {
|
priv->cfg->ops->utils->rts_tx_cmd_flag(info, &tx_flags);
|
||||||
tx_flags |= TX_CMD_FLG_RTS_MSK;
|
|
||||||
tx_flags &= ~TX_CMD_FLG_CTS_MSK;
|
|
||||||
} else if (rc_flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
|
|
||||||
tx_flags &= ~TX_CMD_FLG_RTS_MSK;
|
|
||||||
tx_flags |= TX_CMD_FLG_CTS_MSK;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((tx_flags & TX_CMD_FLG_RTS_MSK) || (tx_flags & TX_CMD_FLG_CTS_MSK))
|
if ((tx_flags & TX_CMD_FLG_RTS_MSK) || (tx_flags & TX_CMD_FLG_CTS_MSK))
|
||||||
tx_flags |= TX_CMD_FLG_FULL_TXOP_PROT_MSK;
|
tx_flags |= TX_CMD_FLG_FULL_TXOP_PROT_MSK;
|
||||||
|
Reference in New Issue
Block a user