Jelajahi Sumber

qcacmn: Add register/deregister data stall detect cb api

Add register and deregister data stall detect callback apis.

Change-Id: I59d5871b7ec03da4b4f69d87b14f7eb5e8606c4a
CRs-Fixed: 2090654
Poddar, Siddarth 7 tahun lalu
induk
melakukan
5c57a8905e

+ 78 - 0
dp/inc/cdp_txrx_cmn_struct.h

@@ -565,6 +565,84 @@ enum cdp_vdev_param_type {
 #define PER_RADIO_FW_STATS_REQUEST 0
 #define PER_VDEV_FW_STATS_REQUEST 1
 
+/**
+ * enum data_stall_log_event_indicator - Module triggering data stall
+ * @DATA_STALL_LOG_INDICATOR_UNUSED: Unused
+ * @DATA_STALL_LOG_INDICATOR_HOST_DRIVER: Host driver indicates data stall
+ * @DATA_STALL_LOG_INDICATOR_FIRMWARE: FW indicates data stall
+ * @DATA_STALL_LOG_INDICATOR_FRAMEWORK: Framework indicates data stall
+ *
+ * Enum indicating the module that indicates data stall event
+ */
+enum data_stall_log_event_indicator {
+	DATA_STALL_LOG_INDICATOR_UNUSED,
+	DATA_STALL_LOG_INDICATOR_HOST_DRIVER,
+	DATA_STALL_LOG_INDICATOR_FIRMWARE,
+	DATA_STALL_LOG_INDICATOR_FRAMEWORK,
+};
+
+/**
+ * enum data_stall_log_event_type - data stall event type
+ * @DATA_STALL_LOG_NONE
+ * @DATA_STALL_LOG_FW_VDEV_PAUSE
+ * @DATA_STALL_LOG_HWSCHED_CMD_FILTER
+ * @DATA_STALL_LOG_HWSCHED_CMD_FLUSH
+ * @DATA_STALL_LOG_FW_RX_REFILL_FAILED
+ * @DATA_STALL_LOG_FW_RX_FCS_LEN_ERROR
+ * @DATA_STALL_LOG_FW_WDOG_ERRORS
+ * @DATA_STALL_LOG_BB_WDOG_ERROR
+ * @DATA_STALL_LOG_HOST_STA_TX_TIMEOUT
+ * @DATA_STALL_LOG_HOST_SOFTAP_TX_TIMEOUT
+ * @DATA_STALL_LOG_NUD_FAILURE
+ *
+ * Enum indicating data stall event type
+ */
+enum data_stall_log_event_type {
+	DATA_STALL_LOG_NONE,
+	DATA_STALL_LOG_FW_VDEV_PAUSE,
+	DATA_STALL_LOG_HWSCHED_CMD_FILTER,
+	DATA_STALL_LOG_HWSCHED_CMD_FLUSH,
+	DATA_STALL_LOG_FW_RX_REFILL_FAILED,
+	DATA_STALL_LOG_FW_RX_FCS_LEN_ERROR,
+	DATA_STALL_LOG_FW_WDOG_ERRORS,
+	DATA_STALL_LOG_BB_WDOG_ERROR,
+	DATA_STALL_LOG_HOST_STA_TX_TIMEOUT,
+	DATA_STALL_LOG_HOST_SOFTAP_TX_TIMEOUT,
+	DATA_STALL_LOG_NUD_FAILURE,
+};
+
+/**
+ * enum data_stall_log_recovery_type - data stall recovery type
+ * @DATA_STALL_LOG_RECOVERY_NONE,
+ * @DATA_STALL_LOG_RECOVERY_CONNECT_DISCONNECT,
+ * @DATA_STALL_LOG_RECOVERY_TRIGGER_PDR
+ *
+ * Enum indicating data stall recovery type
+ */
+enum data_stall_log_recovery_type {
+	DATA_STALL_LOG_RECOVERY_NONE = 0,
+	DATA_STALL_LOG_RECOVERY_CONNECT_DISCONNECT,
+	DATA_STALL_LOG_RECOVERY_TRIGGER_PDR,
+};
+
+/**
+ * struct data_stall_event_info - data stall info
+ * @indicator: Module triggering data stall
+ * @data_stall_type: data stall event type
+ * @vdev_id_bitmap: vdev_id_bitmap
+ * @pdev_id: pdev id
+ * @recovery_type: data stall recovery type
+ */
+struct data_stall_event_info {
+	uint32_t indicator;
+	uint32_t data_stall_type;
+	uint32_t vdev_id_bitmap;
+	uint32_t pdev_id;
+	uint32_t recovery_type;
+};
+
+typedef void (*data_stall_detect_cb)(struct data_stall_event_info *);
+
 /*
  * cdp_stats - options for host and firmware
  * statistics

+ 70 - 0
dp/inc/cdp_txrx_misc.h

@@ -120,6 +120,76 @@ cdp_set_wisa_mode(ol_txrx_soc_handle soc, struct cdp_vdev *vdev, bool enable)
 	return QDF_STATUS_SUCCESS;
 }
 
+/**
+ * cdp_data_stall_cb_register() - register data stall callback
+ * @soc - data path soc handle
+ * @cb - callback function
+ *
+ * Return: QDF_STATUS_SUCCESS register success
+ */
+static inline QDF_STATUS cdp_data_stall_cb_register(ol_txrx_soc_handle soc,
+						    data_stall_detect_cb cb)
+{
+	if (!soc || !soc->ops || !soc->ops->misc_ops) {
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
+			"%s invalid instance", __func__);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	if (soc->ops->misc_ops->txrx_data_stall_cb_register)
+		return soc->ops->misc_ops->txrx_data_stall_cb_register(cb);
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * cdp_data_stall_cb_deregister() - de-register data stall callback
+ * @soc - data path soc handle
+ * @cb - callback function
+ *
+ * Return: QDF_STATUS_SUCCESS de-register success
+ */
+static inline QDF_STATUS cdp_data_stall_cb_deregister(ol_txrx_soc_handle soc,
+						      data_stall_detect_cb cb)
+{
+	if (!soc || !soc->ops || !soc->ops->misc_ops) {
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
+			"%s invalid instance", __func__);
+		return QDF_STATUS_E_INVAL;
+	}
+
+	if (soc->ops->misc_ops->txrx_data_stall_cb_deregister)
+		return soc->ops->misc_ops->txrx_data_stall_cb_deregister(cb);
+	return QDF_STATUS_SUCCESS;
+}
+
+/**
+ * cdp_post_data_stall_event() - post data stall event
+ * @soc - data path soc handle
+ * @indicator: Module triggering data stall
+ * @data_stall_type: data stall event type
+ * @pdev_id: pdev id
+ * @vdev_id_bitmap: vdev id bitmap
+ * @recovery_type: data stall recovery type
+ *
+ * Return: None
+ */
+static inline void
+cdp_post_data_stall_event(ol_txrx_soc_handle soc,
+			  enum data_stall_log_event_indicator indicator,
+			  enum data_stall_log_event_type data_stall_type,
+			  uint32_t pdev_id, uint32_t vdev_id_bitmap,
+			  enum data_stall_log_recovery_type recovery_type)
+{
+	if (!soc || !soc->ops || !soc->ops->misc_ops)
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
+			"%s invalid instance", __func__);
+
+	if (soc->ops->misc_ops->txrx_post_data_stall_event)
+		soc->ops->misc_ops->txrx_post_data_stall_event(
+				indicator, data_stall_type, pdev_id,
+				vdev_id_bitmap, recovery_type);
+}
+
 /**
  * cdp_set_wmm_param() - set wmm parameter
  * @soc - data path soc handle

+ 10 - 0
dp/inc/cdp_txrx_ops.h

@@ -644,6 +644,9 @@ struct ol_if_ops {
  * @tx_non_std:
  * @get_vdev_id:
  * @set_wisa_mode:
+ * @txrx_data_stall_cb_register:
+ * @txrx_data_stall_cb_deregister:
+ * @txrx_post_data_stall_event
  * @runtime_suspend:
  * @runtime_resume:
  */
@@ -661,6 +664,13 @@ struct cdp_misc_ops {
 		enum ol_tx_spec tx_spec, qdf_nbuf_t msdu_list);
 	uint16_t (*get_vdev_id)(struct cdp_vdev *vdev);
 	QDF_STATUS (*set_wisa_mode)(struct cdp_vdev *vdev, bool enable);
+	QDF_STATUS (*txrx_data_stall_cb_register)(data_stall_detect_cb cb);
+	QDF_STATUS (*txrx_data_stall_cb_deregister)(data_stall_detect_cb cb);
+	void (*txrx_post_data_stall_event)(
+			enum data_stall_log_event_indicator indicator,
+			enum data_stall_log_event_type data_stall_type,
+			uint32_t pdev_id, uint32_t vdev_id_bitmap,
+			enum data_stall_log_recovery_type recovery_type);
 	QDF_STATUS (*runtime_suspend)(struct cdp_pdev *pdev);
 	QDF_STATUS (*runtime_resume)(struct cdp_pdev *pdev);
 	int (*get_opmode)(struct cdp_vdev *vdev);

+ 1 - 1
scheduler/inc/scheduler_api.h

@@ -54,7 +54,7 @@ typedef enum {
 	SYS_MSG_ID_MC_TIMER,
 	SYS_MSG_ID_FTM_RSP,
 	SYS_MSG_ID_QVIT,
-
+	SYS_MSG_ID_DATA_STALL_MSG,
 } SYS_MSG_ID;
 
 /**

+ 18 - 0
utils/host_diag_log/inc/host_diag_core_event.h

@@ -394,14 +394,32 @@ enum host_sta_kickout_events {
    ------------------------------------------------------------------------*/
 /**
  * enum host_datastall_events - Enum containing datastall subtype
+ * @DATA_STALL_NONE: Indicate no data stall
+ * @FW_VDEV_PAUSE: Indicate FW vdev Pause
+ * @HWSCHED_CMD_FILTER:Indicate HW sched command filter
+ * @HWSCHED_CMD_FLUSH: Indicate HW sched command flush
+ * @FW_RX_REFILL_FAILED:Indicate FW rx refill failed
+ * @FW_RX_FCS_LEN_ERROR:Indicate FW fcs len error
+ * @FW_WDOG_ERRORS:Indicate watchdog error
+ * @FW_BB_WDOG_ERROR:Indicate BB watchdog error
  * @STA_TX_TIMEOUT: Indicate sta tx timeout
  * @SOFTAP_TX_TIMEOUT:Indicate softap tx timeout
+ * @NUD_FAILURE: Indicare NUD Failure
  *
  * This enum contains the event subtype
  */
 enum host_datastall_events {
+	DATA_STALL_NONE,
+	FW_VDEV_PAUSE,
+	HWSCHED_CMD_FILTER,
+	HWSCHED_CMD_FLUSH,
+	FW_RX_REFILL_FAILED,
+	FW_RX_FCS_LEN_ERROR,
+	FW_WDOG_ERRORS,
+	FW_BB_WDOG_ERROR,
 	STA_TX_TIMEOUT,
 	SOFTAP_TX_TIMEOUT,
+	NUD_FAILURE,
 };
 
 /*-------------------------------------------------------------------------