[PATCH 3/4] UBUNTU: SAUCE: Redpine: Add deep sleep enable before connection
Amitkumar Karwar
amitkarwar at gmail.com
Thu Mar 1 14:13:18 UTC 2018
From: Sanjay Kumar Konduri <sanjay.konduri at redpinesignals.com>
BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1742090
BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1742094
As in coex mode radio will be shared between BT and WLAN,
we need enable deep sleep before scan. Before scan deep
sleep can be disabled and re-enabed after scan. For any TX
frame before assoc, deep sleep shall be disable.
Signed-off-by: Sanjay Kumar Konduri <sanjay.konduri at redpinesignals.com>
Signed-off-by: Amitkumar Karwar <amit.karwar at redpinesignals.com>
---
ubuntu/rsi/rsi_91x_mac80211.c | 7 ++++++-
ubuntu/rsi/rsi_91x_mgmt.c | 18 +++++++++++++++---
ubuntu/rsi/rsi_91x_ps.c | 2 +-
3 files changed, 22 insertions(+), 5 deletions(-)
diff --git a/ubuntu/rsi/rsi_91x_mac80211.c b/ubuntu/rsi/rsi_91x_mac80211.c
index 2983c73..36c0cfd 100644
--- a/ubuntu/rsi/rsi_91x_mac80211.c
+++ b/ubuntu/rsi/rsi_91x_mac80211.c
@@ -549,7 +549,8 @@ static void rsi_mac80211_tx(struct ieee80211_hw *hw,
struct rsi_hw *adapter = hw->priv;
struct rsi_common *common = adapter->priv;
struct ieee80211_hdr *wlh = (struct ieee80211_hdr *)skb->data;
- struct ieee80211_vif *vif = adapter->vifs[adapter->sc_nvifs - 1];
+ struct ieee80211_vif *vif = adapter->vifs[adapter->sc_nvifs - 1];
+ struct ieee80211_bss_conf *bss = &adapter->vifs[0]->bss_conf;
#ifdef CONFIG_VEN_RSI_WOW
if (common->wow_flags & RSI_WOW_ENABLED) {
@@ -561,6 +562,10 @@ static void rsi_mac80211_tx(struct ieee80211_hw *hw,
ieee80211_free_txskb(common->priv->hw, skb);
return;
}
+ if ((!bss->assoc) &&
+ (adapter->ps_state == PS_ENABLED) &&
+ (vif->type == NL80211_IFTYPE_STATION))
+ rsi_disable_ps(adapter);
if ((common->coex_mode == 4) &&
(vif->type == NL80211_IFTYPE_STATION) &&
diff --git a/ubuntu/rsi/rsi_91x_mgmt.c b/ubuntu/rsi/rsi_91x_mgmt.c
index c66e14d..11b2046 100644
--- a/ubuntu/rsi/rsi_91x_mgmt.c
+++ b/ubuntu/rsi/rsi_91x_mgmt.c
@@ -2068,11 +2068,12 @@ EXPORT_SYMBOL_GPL(rsi_send_rx_filter_frame);
int rsi_send_ps_request(struct rsi_hw *adapter, bool enable)
{
struct rsi_common *common = adapter->priv;
- struct ieee80211_bss_conf *bss = &adapter->vifs[0]->bss_conf;
+ struct ieee80211_bss_conf *bss;
struct rsi_request_ps *ps = NULL;
struct rsi_ps_info *ps_info = NULL;
struct sk_buff *skb = NULL;
int frame_len = sizeof(*ps);
+ bool assoc;
skb = dev_alloc_skb(frame_len);
if (!skb)
@@ -2110,7 +2111,16 @@ int rsi_send_ps_request(struct rsi_hw *adapter, bool enable)
ps->ps_sleep.sleep_duration =
cpu_to_le32(ps_info->deep_sleep_wakeup_period);
- if (bss->assoc)
+ if (adapter->sc_nvifs == 0) {
+ assoc = false;
+ } else {
+ bss = &adapter->vifs[0]->bss_conf;
+ if (bss->assoc)
+ assoc = true;
+ else
+ assoc = false;
+ }
+ if (assoc)
ps->ps_sleep.connected_sleep = CONNECTED_SLEEP;
else
ps->ps_sleep.connected_sleep = DEEP_SLEEP;
@@ -2396,6 +2406,7 @@ void rsi_scan_start(struct work_struct *work)
return;
common->scan_in_prog = true;
+ rsi_disable_ps(common->priv);
for (ii =0; ii < scan_req->n_channels ; ii++) {
if (common->iface_down)
@@ -2458,7 +2469,7 @@ void rsi_scan_start(struct work_struct *work)
del_timer(&common->scan_timer);
common->scan_in_prog = false;
-
+ rsi_enable_ps(common->priv);
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0))
info.aborted = false;
ieee80211_scan_completed(common->priv->hw, &info);
@@ -2653,6 +2664,7 @@ static int rsi_handle_ta_confirm(struct rsi_common *common, u8 *msg)
complete(&common->wlan_init_completion);
common->reinit_hw = false;
} else {
+ rsi_enable_ps(adapter);
return rsi_mac80211_attach(common);
}
}
diff --git a/ubuntu/rsi/rsi_91x_ps.c b/ubuntu/rsi/rsi_91x_ps.c
index 61294a2..8fa1a3b 100644
--- a/ubuntu/rsi/rsi_91x_ps.c
+++ b/ubuntu/rsi/rsi_91x_ps.c
@@ -100,7 +100,7 @@ void rsi_default_ps_params(struct rsi_hw *adapter)
ps_info->num_bcns_per_lis_int = 0;
ps_info->dtim_interval_duration = 0;
ps_info->num_dtims_per_sleep = 0;
- ps_info->deep_sleep_wakeup_period = 200;
+ ps_info->deep_sleep_wakeup_period = 0;
}
EXPORT_SYMBOL_GPL(rsi_default_ps_params);
--
2.7.4
More information about the kernel-team
mailing list