Jelajahi Sumber

qcacld-3.0: Do not use adapter in os_if of SON

Use vdev instead of adapter in os_if of SON.

Change-Id: Icefc9fb8575511f39676bd742359b3962e746f87
CRs-Fixed: 3119371
Bing Sun 3 tahun lalu
induk
melakukan
d39f2ceb18
3 mengubah file dengan 65 tambahan dan 20 penghapusan
  1. 60 12
      core/hdd/src/wlan_hdd_son.c
  2. 2 2
      os_if/son/inc/os_if_son.h
  3. 3 6
      os_if/son/src/os_if_son.c

+ 60 - 12
core/hdd/src/wlan_hdd_son.c

@@ -30,6 +30,7 @@
 #include <wlan_reg_services_api.h>
 #include <son_ucfg_api.h>
 #include <wlan_hdd_son.h>
+#include <wlan_hdd_object_manager.h>
 
 /**
  * hdd_son_is_acs_in_progress() - whether acs is in progress or not
@@ -2260,21 +2261,42 @@ void hdd_son_register_callbacks(struct hdd_context *hdd_ctx)
 
 int hdd_son_deliver_acs_complete_event(struct hdd_adapter *adapter)
 {
-	int ret;
+	int ret = -EINVAL;
+	struct wlan_objmgr_vdev *vdev;
+
+	if (adapter) {
+		vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_SON_ID);
+		if (!vdev) {
+			hdd_err("null vdev");
+			return ret;
+		}
+		ret = os_if_son_deliver_ald_event(vdev, NULL,
+						  MLME_EVENT_ACS_COMPLETE,
+						  NULL);
+		hdd_objmgr_put_vdev_by_user(vdev, WLAN_SON_ID);
+	}
 
-	ret = os_if_son_deliver_ald_event(adapter, NULL,
-					  MLME_EVENT_ACS_COMPLETE, NULL);
 	return ret;
 }
 
 int hdd_son_deliver_cac_status_event(struct hdd_adapter *adapter,
 				     bool radar_detected)
 {
-	int ret;
+	int ret = -EINVAL;
+	struct wlan_objmgr_vdev *vdev;
+
+	if (adapter) {
+		vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_SON_ID);
+		if (!vdev) {
+			hdd_err("null vdev");
+			return ret;
+		}
+		ret = os_if_son_deliver_ald_event(vdev, NULL,
+						  MLME_EVENT_CAC_STATUS,
+						  &radar_detected);
+		hdd_objmgr_put_vdev_by_user(vdev, WLAN_SON_ID);
+	}
 
-	ret = os_if_son_deliver_ald_event(adapter, NULL,
-					  MLME_EVENT_CAC_STATUS,
-					  &radar_detected);
 	return ret;
 }
 
@@ -2283,15 +2305,26 @@ int hdd_son_deliver_assoc_disassoc_event(struct hdd_adapter *adapter,
 					 uint32_t reason_code,
 					 enum assoc_disassoc_event flag)
 {
-	int ret;
+	int ret = -EINVAL;
 	struct son_ald_assoc_event_info info;
+	struct wlan_objmgr_vdev *vdev;
 
 	qdf_mem_zero(&info, sizeof(info));
 	memcpy(info.macaddr, &sta_mac.bytes, QDF_MAC_ADDR_SIZE);
 	info.flag = flag;
 	info.reason = reason_code;
-	ret = os_if_son_deliver_ald_event(adapter, NULL,
-					  MLME_EVENT_ASSOC_DISASSOC, &info);
+	if (adapter) {
+		vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_SON_ID);
+		if (!vdev) {
+			hdd_err("null vdev");
+			return ret;
+		}
+		ret = os_if_son_deliver_ald_event(vdev, NULL,
+						  MLME_EVENT_ASSOC_DISASSOC,
+						  &info);
+		hdd_objmgr_put_vdev_by_user(vdev, WLAN_SON_ID);
+	}
+
 	return ret;
 }
 
@@ -2300,23 +2333,38 @@ void hdd_son_deliver_peer_authorize_event(struct hdd_adapter *adapter,
 {
 	struct wlan_objmgr_peer *peer;
 	int ret;
+	struct wlan_objmgr_vdev *vdev;
+	struct wlan_objmgr_psoc *psoc;
 
-	if (adapter->device_mode != QDF_SAP_MODE) {
+	if (!adapter || adapter->device_mode != QDF_SAP_MODE) {
 		hdd_err("Non SAP vdev");
 		return;
 	}
+	vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_SON_ID);
+	if (!vdev) {
+		hdd_err("null vdev");
+		return;
+	}
+	psoc = wlan_vdev_get_psoc(vdev);
+	if (!psoc) {
+		hdd_err("null psoc");
+		hdd_objmgr_put_vdev_by_user(vdev, WLAN_SON_ID);
+		return;
+	}
 	peer = wlan_objmgr_get_peer_by_mac(psoc, peer_mac, WLAN_UMAC_COMP_SON);
 	if (!peer) {
 		hdd_err("No peer object for sta" QDF_FULL_MAC_FMT,
 			QDF_FULL_MAC_REF(peer_mac));
+		hdd_objmgr_put_vdev_by_user(vdev, WLAN_SON_ID);
 		return;
 	}
 
-	ret = os_if_son_deliver_ald_event(adapter, peer,
+	ret = os_if_son_deliver_ald_event(vdev, peer,
 					  MLME_EVENT_CLIENT_ASSOCIATED, NULL);
 	if (ret)
 		hdd_err("ALD ASSOCIATED Event failed for" QDF_FULL_MAC_FMT,
 			QDF_FULL_MAC_REF(peer_mac));
 
 	wlan_objmgr_peer_release_ref(peer, WLAN_UMAC_COMP_SON);
+	hdd_objmgr_put_vdev_by_user(vdev, WLAN_SON_ID);
 }

+ 2 - 2
os_if/son/inc/os_if_son.h

@@ -601,14 +601,14 @@ void os_if_son_modify_acl(struct wlan_objmgr_vdev *vdev,
 
 /**
  * os_if_son_deliver_ald_event() - deliver ald events to son
- * @adapter: adapter object
+ * @vdev: vdev object
  * @peer: peer object
  * @event: Name of the event
  * @event_data: event data
  *
  * Return: 0 on success
  */
-int os_if_son_deliver_ald_event(struct hdd_adapter *adapter,
+int os_if_son_deliver_ald_event(struct wlan_objmgr_vdev *vdev,
 				struct wlan_objmgr_peer *peer,
 				enum ieee80211_event_type event,
 				void *event_data);

+ 3 - 6
os_if/son/src/os_if_son.c

@@ -1352,17 +1352,15 @@ QDF_STATUS os_if_son_pdev_ops(struct wlan_objmgr_pdev *pdev,
 
 qdf_export_symbol(os_if_son_pdev_ops);
 
-int os_if_son_deliver_ald_event(struct hdd_adapter *adapter,
+int os_if_son_deliver_ald_event(struct wlan_objmgr_vdev *vdev,
 				struct wlan_objmgr_peer *peer,
 				enum ieee80211_event_type event,
 				void *event_data)
 {
-	struct wlan_objmgr_vdev *vdev;
 	struct wlan_objmgr_psoc *psoc;
 	struct wlan_lmac_if_rx_ops *rx_ops;
 	int ret;
 
-	vdev = hdd_objmgr_get_vdev_by_user(adapter, WLAN_OSIF_SON_ID);
 	if (!vdev) {
 		osif_err("null vdev");
 		return -EINVAL;
@@ -1370,16 +1368,15 @@ int os_if_son_deliver_ald_event(struct hdd_adapter *adapter,
 	psoc = wlan_vdev_get_psoc(vdev);
 	if (!psoc) {
 		osif_err("null posc");
-		hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_SON_ID);
 		return -EINVAL;
 	}
 	rx_ops = wlan_psoc_get_lmac_if_rxops(psoc);
 	if (rx_ops && rx_ops->son_rx_ops.deliver_event)
 		ret = rx_ops->son_rx_ops.deliver_event(vdev, peer, event,
-							event_data);
+						       event_data);
 	else
 		ret = -EINVAL;
-	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_SON_ID);
+
 	return ret;
 }