]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/net/wireless/realtek/rtw88/ps.c
rtw88: not to control LPS by each vif
[linux.git] / drivers / net / wireless / realtek / rtw88 / ps.c
index 9ecd14feb76b49d461443e6b06b7ac01829905e9..a1541774cf0d344687a83a4eb077c32769d7fed6 100644 (file)
@@ -18,14 +18,14 @@ static int rtw_ips_pwr_up(struct rtw_dev *rtwdev)
                rtw_err(rtwdev, "leave idle state failed\n");
 
        rtw_set_channel(rtwdev);
-       rtw_flag_clear(rtwdev, RTW_FLAG_INACTIVE_PS);
+       clear_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags);
 
        return ret;
 }
 
 int rtw_enter_ips(struct rtw_dev *rtwdev)
 {
-       rtw_flag_set(rtwdev, RTW_FLAG_INACTIVE_PS);
+       set_bit(RTW_FLAG_INACTIVE_PS, rtwdev->flags);
 
        rtw_coex_ips_notify(rtwdev, COEX_IPS_ENTER);
 
@@ -71,7 +71,7 @@ static void rtw_leave_lps_core(struct rtw_dev *rtwdev)
        conf->smart_ps = 0;
 
        rtw_fw_set_pwr_mode(rtwdev);
-       rtw_flag_clear(rtwdev, RTW_FLAG_LEISURE_PS);
+       clear_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags);
 
        rtw_coex_lps_notify(rtwdev, COEX_LPS_DISABLE);
 }
@@ -88,88 +88,35 @@ static void rtw_enter_lps_core(struct rtw_dev *rtwdev)
        rtw_coex_lps_notify(rtwdev, COEX_LPS_ENABLE);
 
        rtw_fw_set_pwr_mode(rtwdev);
-       rtw_flag_set(rtwdev, RTW_FLAG_LEISURE_PS);
-}
-
-void rtw_lps_work(struct work_struct *work)
-{
-       struct rtw_dev *rtwdev = container_of(work, struct rtw_dev,
-                                             lps_work.work);
-       struct rtw_lps_conf *conf = &rtwdev->lps_conf;
-       struct rtw_vif *rtwvif = conf->rtwvif;
-
-       if (WARN_ON(!rtwvif))
-               return;
-
-       if (conf->mode == RTW_MODE_LPS)
-               rtw_enter_lps_core(rtwdev);
-       else
-               rtw_leave_lps_core(rtwdev);
-}
-
-void rtw_enter_lps_irqsafe(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
-{
-       struct rtw_lps_conf *conf = &rtwdev->lps_conf;
-
-       if (rtwvif->in_lps)
-               return;
-
-       conf->mode = RTW_MODE_LPS;
-       conf->rtwvif = rtwvif;
-       rtwvif->in_lps = true;
-
-       ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->lps_work, 0);
-}
-
-void rtw_leave_lps_irqsafe(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
-{
-       struct rtw_lps_conf *conf = &rtwdev->lps_conf;
-
-       if (!rtwvif->in_lps)
-               return;
-
-       conf->mode = RTW_MODE_ACTIVE;
-       conf->rtwvif = rtwvif;
-       rtwvif->in_lps = false;
-
-       ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->lps_work, 0);
+       set_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags);
 }
 
 bool rtw_in_lps(struct rtw_dev *rtwdev)
 {
-       return rtw_flag_check(rtwdev, RTW_FLAG_LEISURE_PS);
+       return test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags);
 }
 
-void rtw_enter_lps(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
+void rtw_enter_lps(struct rtw_dev *rtwdev, u8 port_id)
 {
        struct rtw_lps_conf *conf = &rtwdev->lps_conf;
 
-       if (WARN_ON(!rtwvif))
-               return;
-
-       if (rtwvif->in_lps)
+       if (test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags))
                return;
 
        conf->mode = RTW_MODE_LPS;
-       conf->rtwvif = rtwvif;
-       rtwvif->in_lps = true;
+       conf->port_id = port_id;
 
        rtw_enter_lps_core(rtwdev);
 }
 
-void rtw_leave_lps(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
+void rtw_leave_lps(struct rtw_dev *rtwdev)
 {
        struct rtw_lps_conf *conf = &rtwdev->lps_conf;
 
-       if (WARN_ON(!rtwvif))
-               return;
-
-       if (!rtwvif->in_lps)
+       if (!test_bit(RTW_FLAG_LEISURE_PS, rtwdev->flags))
                return;
 
        conf->mode = RTW_MODE_ACTIVE;
-       conf->rtwvif = rtwvif;
-       rtwvif->in_lps = false;
 
        rtw_leave_lps_core(rtwdev);
 }