mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 13:13:57 +08:00
mwifiex: handle PS events on AP interface as well
This patch adds support to handle PS events on AP interface as well. Signed-off-by: Avinash Patil <patila@marvell.com> Signed-off-by: Amitkumar Karwar <akarwar@marvell.com> Signed-off-by: Cathy Luo <cluo@marvell.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
cf0523350c
commit
76c504ca1e
@ -315,22 +315,19 @@ static int mwifiex_dnld_sleep_confirm_cmd(struct mwifiex_adapter *adapter)
|
||||
adapter->dbg.num_cmd_sleep_cfm_host_to_card_failure++;
|
||||
return -1;
|
||||
}
|
||||
if (GET_BSS_ROLE(mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY))
|
||||
== MWIFIEX_BSS_ROLE_STA) {
|
||||
if (!le16_to_cpu(sleep_cfm_buf->resp_ctrl))
|
||||
/* Response is not needed for sleep
|
||||
confirm command */
|
||||
adapter->ps_state = PS_STATE_SLEEP;
|
||||
else
|
||||
adapter->ps_state = PS_STATE_SLEEP_CFM;
|
||||
|
||||
if (!le16_to_cpu(sleep_cfm_buf->resp_ctrl) &&
|
||||
(adapter->is_hs_configured &&
|
||||
!adapter->sleep_period.period)) {
|
||||
adapter->pm_wakeup_card_req = true;
|
||||
mwifiex_hs_activated_event(mwifiex_get_priv
|
||||
(adapter, MWIFIEX_BSS_ROLE_STA), true);
|
||||
}
|
||||
if (!le16_to_cpu(sleep_cfm_buf->resp_ctrl))
|
||||
/* Response is not needed for sleep confirm command */
|
||||
adapter->ps_state = PS_STATE_SLEEP;
|
||||
else
|
||||
adapter->ps_state = PS_STATE_SLEEP_CFM;
|
||||
|
||||
if (!le16_to_cpu(sleep_cfm_buf->resp_ctrl) &&
|
||||
(adapter->is_hs_configured &&
|
||||
!adapter->sleep_period.period)) {
|
||||
adapter->pm_wakeup_card_req = true;
|
||||
mwifiex_hs_activated_event(mwifiex_get_priv
|
||||
(adapter, MWIFIEX_BSS_ROLE_ANY), true);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -450,6 +447,7 @@ int mwifiex_process_event(struct mwifiex_adapter *adapter)
|
||||
EVENT_GET_BSS_TYPE(eventcause));
|
||||
if (!priv)
|
||||
priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
|
||||
|
||||
/* Clear BSS_NO_BITS from event */
|
||||
eventcause &= EVENT_ID_MASK;
|
||||
adapter->event_cause = eventcause;
|
||||
@ -462,12 +460,6 @@ int mwifiex_process_event(struct mwifiex_adapter *adapter)
|
||||
}
|
||||
|
||||
dev_dbg(adapter->dev, "EVENT: cause: %#x\n", eventcause);
|
||||
if (eventcause == EVENT_PS_SLEEP || eventcause == EVENT_PS_AWAKE) {
|
||||
/* Handle PS_SLEEP/AWAKE events on STA */
|
||||
priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_STA);
|
||||
if (!priv)
|
||||
priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY);
|
||||
}
|
||||
|
||||
if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP)
|
||||
ret = mwifiex_process_uap_event(priv);
|
||||
|
@ -177,6 +177,45 @@ int mwifiex_process_uap_event(struct mwifiex_private *priv)
|
||||
case EVENT_TX_STATUS_REPORT:
|
||||
dev_dbg(adapter->dev, "event: TX_STATUS Report\n");
|
||||
mwifiex_parse_tx_status_event(priv, adapter->event_body);
|
||||
break;
|
||||
case EVENT_PS_SLEEP:
|
||||
dev_dbg(adapter->dev, "info: EVENT: SLEEP\n");
|
||||
|
||||
adapter->ps_state = PS_STATE_PRE_SLEEP;
|
||||
|
||||
mwifiex_check_ps_cond(adapter);
|
||||
break;
|
||||
|
||||
case EVENT_PS_AWAKE:
|
||||
dev_dbg(adapter->dev, "info: EVENT: AWAKE\n");
|
||||
if (!adapter->pps_uapsd_mode &&
|
||||
priv->media_connected && adapter->sleep_period.period) {
|
||||
adapter->pps_uapsd_mode = true;
|
||||
dev_dbg(adapter->dev,
|
||||
"event: PPS/UAPSD mode activated\n");
|
||||
}
|
||||
adapter->tx_lock_flag = false;
|
||||
if (adapter->pps_uapsd_mode && adapter->gen_null_pkt) {
|
||||
if (mwifiex_check_last_packet_indication(priv)) {
|
||||
if (adapter->data_sent) {
|
||||
adapter->ps_state = PS_STATE_AWAKE;
|
||||
adapter->pm_wakeup_card_req = false;
|
||||
adapter->pm_wakeup_fw_try = false;
|
||||
break;
|
||||
}
|
||||
if (!mwifiex_send_null_packet
|
||||
(priv,
|
||||
MWIFIEX_TxPD_POWER_MGMT_NULL_PACKET |
|
||||
MWIFIEX_TxPD_POWER_MGMT_LAST_PACKET))
|
||||
adapter->ps_state =
|
||||
PS_STATE_SLEEP;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
adapter->ps_state = PS_STATE_AWAKE;
|
||||
adapter->pm_wakeup_card_req = false;
|
||||
adapter->pm_wakeup_fw_try = false;
|
||||
|
||||
break;
|
||||
default:
|
||||
dev_dbg(adapter->dev, "event: unknown event id: %#x\n",
|
||||
|
Loading…
Reference in New Issue
Block a user