From: Ping-Ke Shih <[email protected]>

Convert from the value of ieee80211_tx_queue_params to Realtek's
register value.

Signed-off-by: Ping-Ke Shih <[email protected]>
Signed-off-by: Larry Finger <[email protected]>
Cc: Yan-Hsuan Chuang <[email protected]>
Cc: Birming Chiu <[email protected]>
Cc: Shaofu <[email protected]>
Cc: Steven Ting <[email protected]>
---
v2 - no changes
---
 drivers/net/wireless/realtek/rtlwifi/base.c | 36 +++++++++++++++++++++++++++++
 drivers/net/wireless/realtek/rtlwifi/base.h |  4 ++++
 2 files changed, 40 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c 
b/drivers/net/wireless/realtek/rtlwifi/base.c
index f71b44c48ec0..9e6fcdde7475 100644
--- a/drivers/net/wireless/realtek/rtlwifi/base.c
+++ b/drivers/net/wireless/realtek/rtlwifi/base.c
@@ -1558,6 +1558,42 @@ void rtl_wait_tx_report_acked(struct ieee80211_hw *hw, 
u32 wait_ms)
                         "Wait 1ms (%d/%d) to disable key.\n", i, wait_ms);
        }
 }
+
+u32 rtl_get_hal_edca_param(struct ieee80211_hw *hw,
+                          struct ieee80211_vif *vif,
+                          enum wireless_mode wirelessmode,
+                          struct ieee80211_tx_queue_params *param)
+{
+       u32 reg = 0;
+       u8 sifstime = 10;
+       u8 slottime = 20;
+
+       /* AIFS = AIFSN * slot time + SIFS */
+       switch (wirelessmode) {
+       case WIRELESS_MODE_A:
+       case WIRELESS_MODE_N_24G:
+       case WIRELESS_MODE_N_5G:
+       case WIRELESS_MODE_AC_5G:
+       case WIRELESS_MODE_AC_24G:
+               sifstime = 16;
+               slottime = 9;
+               break;
+       case WIRELESS_MODE_G:
+               slottime = (vif->bss_conf.use_short_slot ? 9 : 20);
+               break;
+       default:
+               break;
+       }
+
+       reg |= (param->txop & 0x7FF) << 16;
+       reg |= (fls(param->cw_max) & 0xF) << 12;
+       reg |= (fls(param->cw_min) & 0xF) << 8;
+       reg |= (param->aifs & 0x0F) * slottime + sifstime;
+
+       return reg;
+}
+EXPORT_SYMBOL_GPL(rtl_get_hal_edca_param);
+
 /*********************************************************
  *
  * functions called by core.c
diff --git a/drivers/net/wireless/realtek/rtlwifi/base.h 
b/drivers/net/wireless/realtek/rtlwifi/base.h
index ab7d81904d25..4371dd4f75cb 100644
--- a/drivers/net/wireless/realtek/rtlwifi/base.h
+++ b/drivers/net/wireless/realtek/rtlwifi/base.h
@@ -135,6 +135,10 @@ void rtl_tx_report_handler(struct ieee80211_hw *hw, u8 
*tmp_buf,
                           u8 c2h_cmd_len);
 bool rtl_check_tx_report_acked(struct ieee80211_hw *hw);
 void rtl_wait_tx_report_acked(struct ieee80211_hw *hw, u32 wait_ms);
+u32 rtl_get_hal_edca_param(struct ieee80211_hw *hw,
+                          struct ieee80211_vif *vif,
+                          enum wireless_mode wirelessmode,
+                          struct ieee80211_tx_queue_params *param);
 
 void rtl_beacon_statistic(struct ieee80211_hw *hw, struct sk_buff *skb);
 void rtl_collect_scan_list(struct ieee80211_hw *hw, struct sk_buff *skb);
-- 
2.12.3

Reply via email to