Ver Fonte

qcacld-3.0: Configure the mld address wow pattern during vdev create

Currently mac address is getting configured as the wow pattern
while the vdev is getting created, configure the mld address also
during the vdev creation so during legacy connection or roaming
between the ml-legacy vice versa there wont be packet drops because
of pattern mismatch.

Change-Id: I9b98649bca132a6665f2e4dd94d9c6b840223827
CRs-Fixed: 3124115
Arun Kumar Khandavalli há 3 anos atrás
pai
commit
2fa9d87942

+ 17 - 1
components/pmo/core/src/wlan_pmo_static_config.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -255,6 +255,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;
 
 	vdev_ctx = pmo_vdev_get_priv(vdev);
 
@@ -274,6 +275,21 @@ static QDF_STATUS pmo_configure_wow_sta(struct wlan_objmgr_vdev *vdev)
 		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");

+ 15 - 1
components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -1010,6 +1010,15 @@ QDF_STATUS
 ucfg_pmo_add_wow_user_pattern(struct wlan_objmgr_vdev *vdev,
 			      struct pmo_wow_add_pattern *ptrn);
 
+/**
+ * ucfg_pmo_register_wow_default_patterns() - register default wow patterns
+ *                                            with fw
+ * @vdev: Pointer to object manager vdev
+ *
+ * Return: none
+ */
+void ucfg_pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev);
+
 /**
  * ucfg_pmo_del_wow_pattern() - Delete WoWl patterns
  * @vdev: objmgr vdev
@@ -1826,6 +1835,11 @@ ucfg_pmo_del_wow_user_pattern(
 	return QDF_STATUS_SUCCESS;
 }
 
+static inline void
+ucfg_pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev)
+{
+}
+
 QDF_STATUS
 ucfg_pmo_del_wow_pattern(struct wlan_objmgr_vdev *vdev)
 {

+ 6 - 1
components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -485,6 +485,11 @@ ucfg_pmo_add_wow_user_pattern(struct wlan_objmgr_vdev *vdev,
 	return pmo_core_add_wow_user_pattern(vdev, ptrn);
 }
 
+void ucfg_pmo_register_wow_default_patterns(struct wlan_objmgr_vdev *vdev)
+{
+	pmo_register_wow_default_patterns(vdev);
+}
+
 QDF_STATUS
 ucfg_pmo_del_wow_pattern(struct wlan_objmgr_vdev *vdev)
 {

+ 4 - 0
core/hdd/src/wlan_hdd_main.c

@@ -5417,6 +5417,10 @@ status_ret:
 	}
 	sme_vdev_set_data_tx_callback(adapter->vdev);
 
+	/* Update FW WoW pattern with new MAC address */
+	ucfg_pmo_del_wow_pattern(adapter->vdev);
+	ucfg_pmo_register_wow_default_patterns(adapter->vdev);
+
 	return ret;
 }