Baochen Qiang <quic_bqiang@xxxxxxxxxxx> writes: > With WoWLAN enabled and after sleeping for a rather long time, > we are seeing that with some APs, it is not able to wake up > the STA though the correct wake up pattern has been configured. > This is because the host doesn't send keepalive command to > firmware, thus firmware will not send any packet to the AP and > after a specific time the AP kicks out the STA. > > Fix this issue by enabling keepalive before going to suspend > and disabling it after resume back. > > Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-01720.1-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1 > > Signed-off-by: Baochen Qiang <quic_bqiang@xxxxxxxxxxx> [...] > +int ath11k_wmi_sta_keepalive(struct ath11k *ar, > + const struct wmi_sta_keepalive_arg *arg) > +{ > + struct ath11k_pdev_wmi *wmi = ar->wmi; > + struct wmi_sta_keepalive_cmd *cmd; > + struct wmi_sta_keepalive_arp_resp *arp; > + struct sk_buff *skb; > + size_t len; > + > + len = sizeof(*cmd) + sizeof(*arp); > + skb = ath11k_wmi_alloc_skb(wmi->wmi_ab, len); > + if (!skb) > + return -ENOMEM; > + > + cmd = (struct wmi_sta_keepalive_cmd *)skb->data; > + cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG, > + WMI_TAG_STA_KEEPALIVE_CMD) | > + FIELD_PREP(WMI_TLV_LEN, sizeof(*cmd) - TLV_HDR_SIZE); > + cmd->vdev_id = arg->vdev_id; > + cmd->enabled = arg->enabled; > + cmd->interval = arg->interval; > + cmd->method = arg->method; > + > + if (arg->method == WMI_STA_KEEPALIVE_METHOD_UNSOLICITED_ARP_RESPONSE || > + arg->method == WMI_STA_KEEPALIVE_METHOD_GRATUITOUS_ARP_REQUEST) { > + arp = (struct wmi_sta_keepalive_arp_resp *)(cmd + 1); > + arp->tlv_header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_STA_KEEPALVE_ARP_RESPONSE) | > + FIELD_PREP(WMI_TLV_LEN, sizeof(*arp) - TLV_HDR_SIZE); This added a new warning: drivers/net/wireless/ath/ath11k/wmi.c:8989: line length of 94 exceeds 90 columns I fixed it in the pending branch, no need to resend because of this. -- https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches