|
@@ -115,7 +115,6 @@ void pmo_register_wow_wakeup_events(struct wlan_objmgr_vdev *vdev)
|
|
|
static QDF_STATUS pmo_configure_wow_ap(struct wlan_objmgr_vdev *vdev)
|
|
|
{
|
|
|
QDF_STATUS ret;
|
|
|
- uint8_t arp_offset = 20;
|
|
|
uint8_t mac_mask[QDF_MAC_ADDR_SIZE];
|
|
|
struct pmo_vdev_priv_obj *vdev_ctx;
|
|
|
|
|
@@ -137,16 +136,6 @@ static QDF_STATUS pmo_configure_wow_ap(struct wlan_objmgr_vdev *vdev)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- * Setup all ARP pkt pattern. This is dummy pattern hence the length
|
|
|
- * is zero. Pattern ID should be unique per vdev.
|
|
|
- */
|
|
|
- ret = pmo_tgt_send_wow_patterns_to_fw(vdev,
|
|
|
- pmo_get_and_increment_wow_default_ptrn(vdev_ctx),
|
|
|
- arp_ptrn, 0, arp_offset, arp_mask, 0, false);
|
|
|
- if (ret != QDF_STATUS_SUCCESS)
|
|
|
- pmo_err("Failed to add WOW ARP pattern ret %d", ret);
|
|
|
-
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -255,7 +244,7 @@ static QDF_STATUS pmo_configure_wow_sta(struct wlan_objmgr_vdev *vdev)
|
|
|
uint8_t mac_mask[QDF_MAC_ADDR_SIZE];
|
|
|
QDF_STATUS ret = QDF_STATUS_SUCCESS;
|
|
|
struct pmo_vdev_priv_obj *vdev_ctx;
|
|
|
- struct qdf_mac_addr *mld_addr;
|
|
|
+ struct qdf_mac_addr *ucast_addr;
|
|
|
|
|
|
vdev_ctx = pmo_vdev_get_priv(vdev);
|
|
|
|
|
@@ -265,31 +254,23 @@ static QDF_STATUS pmo_configure_wow_sta(struct wlan_objmgr_vdev *vdev)
|
|
|
* WoW pattern ID should be unique for each vdev
|
|
|
* Different WoW patterns can use same pattern ID
|
|
|
*/
|
|
|
+
|
|
|
+ /* On ML VDEV, configure WoW pattern with MLD address only */
|
|
|
+ ucast_addr = (struct qdf_mac_addr *)wlan_vdev_mlme_get_mldaddr(vdev);
|
|
|
+ if (qdf_is_macaddr_zero(ucast_addr)) {
|
|
|
+ ucast_addr =
|
|
|
+ (struct qdf_mac_addr *)wlan_vdev_mlme_get_macaddr(vdev);
|
|
|
+ }
|
|
|
+
|
|
|
ret = pmo_tgt_send_wow_patterns_to_fw(vdev,
|
|
|
pmo_get_and_increment_wow_default_ptrn(vdev_ctx),
|
|
|
- wlan_vdev_mlme_get_macaddr(vdev),
|
|
|
- QDF_MAC_ADDR_SIZE, 0, mac_mask,
|
|
|
- QDF_MAC_ADDR_SIZE, false);
|
|
|
- if (ret != QDF_STATUS_SUCCESS) {
|
|
|
+ (uint8_t *)ucast_addr, QDF_MAC_ADDR_SIZE, 0,
|
|
|
+ mac_mask, QDF_MAC_ADDR_SIZE, false);
|
|
|
+ if (QDF_IS_STATUS_ERROR(ret)) {
|
|
|
pmo_err("Failed to add WOW unicast pattern ret %d", ret);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- mld_addr = (struct qdf_mac_addr *)wlan_vdev_mlme_get_mldaddr(vdev);
|
|
|
- if (!qdf_is_macaddr_zero(mld_addr)) {
|
|
|
- ret = pmo_tgt_send_wow_patterns_to_fw(
|
|
|
- vdev,
|
|
|
- pmo_get_and_increment_wow_default_ptrn(vdev_ctx),
|
|
|
- (uint8_t *)mld_addr,
|
|
|
- QDF_MAC_ADDR_SIZE, 0, mac_mask,
|
|
|
- QDF_MAC_ADDR_SIZE, false);
|
|
|
- if (QDF_IS_STATUS_ERROR(ret)) {
|
|
|
- pmo_err("Failed to add WOW MLD unicast pattern ret %d",
|
|
|
- ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
ret = pmo_configure_ssdp(vdev);
|
|
|
if (ret != QDF_STATUS_SUCCESS)
|
|
|
pmo_err("Failed to configure SSDP patterns to FW");
|