Эх сурвалжийг харах

qcacld-3.0: Refine the EXT Stats callback APIs

The EXT and EXT2 stats callbacks currently specify a void pointer for
the context. In the case of these APIs the context is actually known
to be an HDD handle, so update the APIs to explicitly use this
type. This will allow the compiler to verify that the correct type of
parameter is being passed.

Change-Id: I31f6e688a4940cba88b628e76ecd2f295386bb19
CRs-Fixed: 2277297
Jeff Johnson 6 жил өмнө
parent
commit
4584365853

+ 9 - 18
core/hdd/src/wlan_hdd_stats.c

@@ -2905,31 +2905,21 @@ int wlan_hdd_cfg80211_stats_ext_request(struct wiphy *wiphy,
 	return ret;
 }
 
-/**
- * wlan_hdd_cfg80211_stats_ext_callback() - ext stats callback
- * @ctx: Pointer to HDD context
- * @msg: Message received
- *
- * Return: nothing
- */
-void wlan_hdd_cfg80211_stats_ext_callback(void *ctx,
-						 tStatsExtEvent *msg)
+void wlan_hdd_cfg80211_stats_ext_callback(hdd_handle_t hdd_handle,
+					  struct stats_ext_event *data)
 {
-
-	struct hdd_context *hdd_ctx = (struct hdd_context *) ctx;
+	struct hdd_context *hdd_ctx = hdd_handle_to_context(hdd_handle);
 	struct sk_buff *vendor_event;
 	int status;
 	int ret_val;
-	tStatsExtEvent *data = msg;
-	struct hdd_adapter *adapter = NULL;
+	struct hdd_adapter *adapter;
 
 	status = wlan_hdd_validate_context(hdd_ctx);
 	if (status)
 		return;
 
 	adapter = hdd_get_adapter_by_vdev(hdd_ctx, data->vdev_id);
-
-	if (NULL == adapter) {
+	if (!adapter) {
 		hdd_err("vdev_id %d does not exist with host", data->vdev_id);
 		return;
 	}
@@ -2970,10 +2960,11 @@ void wlan_hdd_cfg80211_stats_ext_callback(void *ctx,
 
 }
 
-void wlan_hdd_cfg80211_stats_ext2_callback(void *ctx,
-				struct sir_sme_rx_aggr_hole_ind *pmsg)
+void
+wlan_hdd_cfg80211_stats_ext2_callback(hdd_handle_t hdd_handle,
+				      struct sir_sme_rx_aggr_hole_ind *pmsg)
 {
-	struct hdd_context *hdd_ctx = (struct hdd_context *)ctx;
+	struct hdd_context *hdd_ctx = hdd_handle_to_context(hdd_handle);
 	int status;
 	uint32_t data_size, hole_info_size;
 	struct sk_buff *vendor_event;

+ 14 - 6
core/hdd/src/wlan_hdd_stats.h

@@ -341,18 +341,26 @@ int wlan_hdd_cfg80211_dump_survey(struct wiphy *wiphy,
 void hdd_display_hif_stats(void);
 void hdd_clear_hif_stats(void);
 
-void wlan_hdd_cfg80211_stats_ext_callback(void *ctx,
-					  tStatsExtEvent *msg);
+/**
+ * wlan_hdd_cfg80211_stats_ext_callback() - ext stats callback
+ * @hdd_handle: Opaque handle to HDD context
+ * @data: ext stats payload
+ *
+ * Return: nothing
+ */
+void wlan_hdd_cfg80211_stats_ext_callback(hdd_handle_t hdd_handle,
+					  struct stats_ext_event *data);
 
 /**
- * wlan_hdd_cfg80211_stats_ext2_callback - stats_ext2_callback
- * @ctx: hdd context
+ * wlan_hdd_cfg80211_stats_ext2_callback() - stats_ext2_callback
+ * @hdd_handle: opaque handle to the hdd context
  * @pmsg: sir_sme_rx_aggr_hole_ind
  *
  * Return: void
  */
-void wlan_hdd_cfg80211_stats_ext2_callback(void *ctx,
-				struct sir_sme_rx_aggr_hole_ind *pmsg);
+void
+wlan_hdd_cfg80211_stats_ext2_callback(hdd_handle_t hdd_handle,
+				      struct sir_sme_rx_aggr_hole_ind *pmsg);
 
 /**
  * wlan_hdd_get_rcpi() - Wrapper to get current RCPI

+ 32 - 11
core/sme/inc/sme_api.h

@@ -883,18 +883,37 @@ QDF_STATUS sme_ap_disable_intra_bss_fwd(tHalHandle hHal, uint8_t sessionId,
 		bool disablefwd);
 QDF_STATUS sme_get_channel_bonding_mode5_g(tHalHandle hHal, uint32_t *mode);
 QDF_STATUS sme_get_channel_bonding_mode24_g(tHalHandle hHal, uint32_t *mode);
+
 #ifdef WLAN_FEATURE_STATS_EXT
 typedef struct sStatsExtRequestReq {
 	uint32_t request_data_len;
 	uint8_t *request_data;
 } tStatsExtRequestReq, *tpStatsExtRequestReq;
-typedef void (*StatsExtCallback)(void *, tStatsExtEvent *);
-void sme_stats_ext_register_callback(tHalHandle hHal,
-		StatsExtCallback callback);
+
+/**
+ * sme_stats_ext_register_callback() - Register stats ext callback
+ * @mac_handle: Opaque handle to the MAC context
+ * @callback: Function to be invoked for stats ext events
+ *
+ * This function is called to register the callback that send vendor
+ * event for stats ext
+ */
+void sme_stats_ext_register_callback(mac_handle_t mac_handle,
+				     stats_ext_cb callback);
+
+/**
+ * sme_stats_ext_deregister_callback() - Deregister stats ext callback
+ * @mac_handle: Opaque handle to the MAC context
+ *
+ * This function is called to deregister the callback that send vendor
+ * event for stats ext
+ */
+void sme_stats_ext_deregister_callback(mac_handle_t mac_handle);
+
 /**
- * sme_register_stats_ext2_callback() - Register stats ext2 register
- * @hal_handle: hal handle for getting global mac struct
- * @stats_ext2_cb: callback to be registered
+ * sme_stats_ext2_register_callback() - Register stats ext2 callback
+ * @mac_handle: Opaque handle to the MAC context
+ * @callback: Function to be invoked for stats ext2 events
  *
  * This function will register a callback for frame aggregation failure
  * indications processing.
@@ -902,7 +921,12 @@ void sme_stats_ext_register_callback(tHalHandle hHal,
  * Return: void
  */
 void sme_stats_ext2_register_callback(tHalHandle hal_handle,
-	void (*stats_ext2_cb)(void *, struct sir_sme_rx_aggr_hole_ind *));
+				      stats_ext2_cb callback);
+
+QDF_STATUS sme_stats_ext_request(uint8_t session_id,
+				 tpStatsExtRequestReq input);
+#endif /* WLAN_FEATURE_STATS_EXT */
+
 /**
  * sme_send_unit_test_cmd() - send unit test command to lower layer
  * @session_id: sme session id to be filled while forming the command
@@ -917,10 +941,7 @@ void sme_stats_ext2_register_callback(tHalHandle hal_handle,
  */
 QDF_STATUS sme_send_unit_test_cmd(uint32_t vdev_id, uint32_t module_id,
 				  uint32_t arg_count, uint32_t *arg);
-void sme_stats_ext_deregister_callback(tHalHandle hhal);
-QDF_STATUS sme_stats_ext_request(uint8_t session_id,
-		tpStatsExtRequestReq input);
-#endif
+
 QDF_STATUS sme_update_dfs_scan_mode(tHalHandle hHal,
 		uint8_t sessionId,
 		uint8_t allowDFSChannelRoam);

+ 26 - 4
core/sme/inc/sme_internal.h

@@ -96,11 +96,33 @@ typedef struct tagSmePeerInfoHddCbkInfo {
 	pIbssPeerInfoCb peerInfoCbk;
 } tSmePeerInfoHddCbkInfo;
 
-typedef struct sStatsExtEvent {
+/**
+ * struct stats_ext_event - stats_ext_event payload
+ * @vdev_id: ID of the vdev for the stats
+ * @event_data_len: length of the @event_data
+ * @event_data: actual ext stats
+ */
+struct stats_ext_event {
 	uint32_t vdev_id;
 	uint32_t event_data_len;
 	uint8_t event_data[];
-} tStatsExtEvent, *tpStatsExtEvent;
+};
+
+/**
+ * typedef stats_ext_cb - stats ext callback
+ * @hdd_handle: Opaque handle to the HDD context
+ * @data: stats ext payload from firmware
+ */
+typedef void (*stats_ext_cb)(hdd_handle_t hdd_handle,
+			     struct stats_ext_event *data);
+
+/**
+ * typedef stats_ext2_cb - stats ext2 callback
+ * @hdd_handle: Opaque handle to the HDD context
+ * @data: stats ext2 payload from firmware
+ */
+typedef void (*stats_ext2_cb)(hdd_handle_t hdd_handle,
+			      struct sir_sme_rx_aggr_hole_ind *data);
 
 #define MAX_ACTIVE_CMD_STATS    16
 
@@ -233,7 +255,8 @@ typedef struct tagSmeStruct {
 #endif
 	/* Maximum interfaces allowed by the host */
 	uint8_t max_intf_count;
-	void (*StatsExtCallback)(void *, tStatsExtEvent *);
+	stats_ext_cb stats_ext_cb;
+	stats_ext2_cb stats_ext2_cb;
 	/* linkspeed callback */
 	void (*pLinkSpeedIndCb)(tSirLinkSpeedInfo *indParam,
 			void *pDevContext);
@@ -293,7 +316,6 @@ typedef struct tagSmeStruct {
 	void (*rso_cmd_status_cb)(void *hdd_context,
 			struct rso_cmd_status *rso_status);
 	congestion_cb congestion_cb;
-	void (*stats_ext2_cb)(void *, struct sir_sme_rx_aggr_hole_ind *);
 	pwr_save_fail_cb chip_power_save_fail_cb;
 	void (*bt_activity_info_cb)(void *context, uint32_t bt_activity);
 	void *get_arp_stats_context;

+ 22 - 37
core/sme/src/common/sme_api.c

@@ -74,7 +74,7 @@ static QDF_STATUS sme_process_channel_change_resp(tpAniSirGlobal pMac,
 					   uint16_t msg_type, void *pMsgBuf);
 
 static QDF_STATUS sme_stats_ext_event(tpAniSirGlobal mac,
-				      tpStatsExtEvent msg);
+				      struct stats_ext_event *msg);
 
 /* Internal SME APIs */
 QDF_STATUS sme_acquire_global_lock(tSmeStruct *psSme)
@@ -10653,52 +10653,37 @@ QDF_STATUS sme_ap_disable_intra_bss_fwd(tHalHandle hHal, uint8_t sessionId,
 
 #ifdef WLAN_FEATURE_STATS_EXT
 
-/*
- * sme_stats_ext_register_callback() -
- * This function called to register the callback that send vendor event for
- * stats ext
- *
- * callback - callback to be registered
- */
-void sme_stats_ext_register_callback(tHalHandle hHal, StatsExtCallback callback)
+void sme_stats_ext_register_callback(mac_handle_t mac_handle,
+				     stats_ext_cb callback)
 {
-	tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+	tpAniSirGlobal mac = MAC_CONTEXT(mac_handle);
 
-	pMac->sme.StatsExtCallback = callback;
+	if (!mac) {
+		sme_err("Invalid mac context");
+		return;
+	}
+
+	mac->sme.stats_ext_cb = callback;
 }
 
-void sme_stats_ext2_register_callback(tHalHandle hal_handle,
-	void (*stats_ext2_cb)(void *, struct sir_sme_rx_aggr_hole_ind *))
+void sme_stats_ext_deregister_callback(mac_handle_t mac_handle)
 {
-	tpAniSirGlobal pmac = PMAC_STRUCT(hal_handle);
-
-	pmac->sme.stats_ext2_cb = stats_ext2_cb;
+	sme_stats_ext_register_callback(mac_handle, NULL);
 }
 
-/**
- * sme_stats_ext_deregister_callback() - De-register ext stats callback
- * @h_hal: Hal Handle
- *
- * This function is called to  de initialize the HDD NAN feature.  Currently
- * the only operation required is to de-register a callback with SME.
- *
- * Return: None
- */
-void sme_stats_ext_deregister_callback(tHalHandle h_hal)
+void sme_stats_ext2_register_callback(mac_handle_t mac_handle,
+				      stats_ext2_cb callback)
 {
-	tpAniSirGlobal pmac;
+	tpAniSirGlobal mac = MAC_CONTEXT(mac_handle);
 
-	if (!h_hal) {
-		QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
-			  FL("hHal is not valid"));
+	if (!mac) {
+		sme_err("Invalid mac context");
 		return;
 	}
 
-	pmac = PMAC_STRUCT(h_hal);
-	pmac->sme.StatsExtCallback = NULL;
+	mac->sme.stats_ext2_cb = callback;
 }
 
-
 /*
  * sme_stats_ext_request() -
  * Function called when HDD receives STATS EXT vendor command from userspace
@@ -10752,15 +10737,15 @@ QDF_STATUS sme_stats_ext_request(uint8_t session_id, tpStatsExtRequestReq input)
  * Return: QDF_STATUS
  */
 static QDF_STATUS sme_stats_ext_event(tpAniSirGlobal mac,
-				      tpStatsExtEvent msg)
+				      struct stats_ext_event *msg)
 {
 	if (!msg) {
 		sme_err("Null msg");
 		return QDF_STATUS_E_FAILURE;
 	}
 
-	if (mac->sme.StatsExtCallback)
-		mac->sme.StatsExtCallback(mac->hdd_handle, msg);
+	if (mac->sme.stats_ext_cb)
+		mac->sme.stats_ext_cb(mac->hdd_handle, msg);
 
 	return QDF_STATUS_SUCCESS;
 }
@@ -10768,7 +10753,7 @@ static QDF_STATUS sme_stats_ext_event(tpAniSirGlobal mac,
 #else
 
 static QDF_STATUS sme_stats_ext_event(tpAniSirGlobal mac,
-				      tpStatsExtEvent msg)
+				      struct stats_ext_event *msg)
 {
 	return QDF_STATUS_SUCCESS;
 }