From 50644c36c84dfd646a75e7e81ce512cf647c004a Mon Sep 17 00:00:00 2001 From: Tomas Winkler Date: Mon, 20 Aug 2007 09:57:10 +0800 Subject: [PATCH 11/31] iwlwifi: kill iwl_rate union This patch kills iwl_rate union. Usage of this union is endianity incorrect. Signed-off-by: Ron Rindjunsky Signed-off-by: Gregory Greenman Signed-off-by: Tomas Winkler Signed-off-by: Zhu Yi --- drivers/net/wireless/iwl-4965-rs.c | 32 +++++++++++++++----------------- 1 files changed, 15 insertions(+), 17 deletions(-) diff --git a/drivers/net/wireless/iwl-4965-rs.c b/drivers/net/wireless/iwl-4965-rs.c index 2c354d4..fcff17e 100644 --- a/drivers/net/wireless/iwl-4965-rs.c +++ b/drivers/net/wireless/iwl-4965-rs.c @@ -70,14 +70,7 @@ static u8 rs_ht_to_legacy[] = { }; struct iwl_rate { - union { - struct { - u8 rate; - u8 flags; - u16 ext_flags; - } s; - u32 rate_n_flags; - }; + u32 rate_n_flags; } __attribute__ ((packed)); struct iwl_rate_scale_data { @@ -187,6 +180,11 @@ static int iwl_lq_sync_callback(struct iwl_priv *priv, return 1; } +static inline u8 iwl_rate_get_rate(u32 rate_n_flags) +{ + return (u8)(rate_n_flags & 0xFF); +} + static int rs_send_lq_cmd(struct iwl_priv *priv, struct iwl_link_quality_cmd *lq, u8 flags) { @@ -216,7 +214,7 @@ static int rs_send_lq_cmd(struct iwl_priv *priv, #ifdef CONFIG_IWLWIFI_DEBUG for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) IWL_DEBUG_RATE("lq index %d 0x%X\n", - i, lq->rs_table[i].rate_n_flags); + i, lq->rs_table[i].rate_n_flags); #endif if (flags & CMD_ASYNC) @@ -389,7 +387,8 @@ static int rs_get_tbl_info_from_mcs(const struct iwl_rate *mcs_rate, } *rate_idx = index; - } else if (mcs_rate->s.rate <= IWL_RATE_SISO_60M_PLCP) { + } else if (iwl_rate_get_rate(mcs_rate->rate_n_flags) + <= IWL_RATE_SISO_60M_PLCP) { tbl->lq_type = LQ_SISO; ant_msk = (mcs_rate->rate_n_flags & RATE_MCS_ANT_AB_MSK); @@ -1923,7 +1922,6 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data, u8 use_ht_possible = 1; u8 repeat_cur_rate = 0; struct iwl_rate new_rate; - struct iwl_rate tbl_rate; struct iwl_scale_tbl_info tbl_type = { 0 }; rs_get_tbl_info_from_mcs(tx_mcs, lq_data->phymode, @@ -1935,10 +1933,10 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data, } else repeat_cur_rate = IWL_HT_NUMBER_TRY; - lq_cmd->rs_table[index].rate_n_flags = - cpu_to_le32(tx_mcs->rate_n_flags); lq_cmd->general_params.mimo_delimiter = is_mimo(tbl_type.lq_type) ? 1 : 0; + lq_cmd->rs_table[index].rate_n_flags = + cpu_to_le32(tx_mcs->rate_n_flags); new_rate.rate_n_flags = tx_mcs->rate_n_flags; if (is_mimo(tbl_type.lq_type) || (tbl_type.antenna_type == ANT_MAIN)) @@ -1965,10 +1963,10 @@ static int rs_fill_link_cmd(struct iwl_rate_scale_priv *lq_data, repeat_cur_rate--; index++; } - tbl_rate.rate_n_flags = - le32_to_cpu(lq_cmd->rs_table[index - 1].rate_n_flags); - rs_get_tbl_info_from_mcs(&tbl_rate, lq_data->phymode, &tbl_type, - &rate_idx); + + rs_get_tbl_info_from_mcs(&new_rate, lq_data->phymode, &tbl_type, + &rate_idx); + if (is_mimo(tbl_type.lq_type)) lq_cmd->general_params.mimo_delimiter = index; -- 1.5.2