diff --git a/qdf/inc/qdf_ipa.h b/qdf/inc/qdf_ipa.h index 7bce4391e1..83e6f3105d 100644 --- a/qdf/inc/qdf_ipa.h +++ b/qdf/inc/qdf_ipa.h @@ -221,6 +221,18 @@ typedef __qdf_ipa_dp_evt_type_t qdf_ipa_dp_evt_type_t; * embedded TX information. */ typedef __qdf_ipa_wdi_tx_info_t qdf_ipa_wdi_tx_info_t; + +/** + * qdf_ipa_wdi_bw_info_t - BW threshold levels to be monitored + * by IPA uC + */ +typedef __qdf_ipa_wdi_bw_info_t qdf_ipa_wdi_bw_info_t; + +/** + * qdf_ipa_inform_wlan_bw_t - BW information given by IPA driver + * whenever uC detects threshold level reached + */ +typedef __qdf_ipa_inform_wlan_bw_t qdf_ipa_inform_wlan_bw_t; #endif typedef __qdf_ipa_hdr_add_t qdf_ipa_hdr_add_t; diff --git a/qdf/inc/qdf_ipa_wdi3.h b/qdf/inc/qdf_ipa_wdi3.h index 0416b249a3..cdb133e262 100644 --- a/qdf/inc/qdf_ipa_wdi3.h +++ b/qdf/inc/qdf_ipa_wdi3.h @@ -410,6 +410,17 @@ static inline int qdf_ipa_wdi_wlan_stats(qdf_ipa_wdi_tx_info_t *tx_stats) { return __qdf_ipa_wdi_wlan_stats(tx_stats); } + +/** + * qdf_ipa_uc_bw_monitor() - start/stop uc bw monitoring + * @bw_info: set bw info levels to monitor + * + * Returns: 0 on success, negative on failure + */ +static inline int qdf_ipa_uc_bw_monitor(qdf_ipa_wdi_bw_info_t *bw_info) +{ + return __qdf_ipa_uc_bw_monitor(bw_info); +} #endif #endif /* IPA_OFFLOAD */ diff --git a/qdf/linux/src/i_qdf_ipa.h b/qdf/linux/src/i_qdf_ipa.h index e84e61e163..edd99fdd67 100644 --- a/qdf/linux/src/i_qdf_ipa.h +++ b/qdf/linux/src/i_qdf_ipa.h @@ -387,7 +387,31 @@ typedef struct ipa_wdi_tx_info __qdf_ipa_wdi_tx_info_t; (((struct ipa_wdi_tx_info *)stats_info)->sta_tx) #define QDF_IPA_WDI_TX_INFO_SAP_TX_BYTES(stats_info) \ (((struct ipa_wdi_tx_info *)stats_info)->ap_tx) -#endif +/** + * __qdf_ipa_wdi_bw_info_t - BW levels to be monitored by uC + */ +typedef struct ipa_wdi_bw_info __qdf_ipa_wdi_bw_info_t; + +#define QDF_IPA_WDI_BW_INFO_THRESHOLD_LEVEL_1(bw_info) \ + (((struct ipa_wdi_bw_info *)bw_info)->threshold[0]) +#define QDF_IPA_WDI_BW_INFO_THRESHOLD_LEVEL_2(bw_info) \ + (((struct ipa_wdi_bw_info *)bw_info)->threshold[1]) +#define QDF_IPA_WDI_BW_INFO_THRESHOLD_LEVEL_3(bw_info) \ + (((struct ipa_wdi_bw_info *)bw_info)->threshold[2]) +#define QDF_IPA_WDI_BW_INFO_START_STOP(bw_info) \ + (((struct ipa_wdi_bw_info *)bw_info)->stop) + +/** + * __qdf_ipa_inform_wlan_bw_t - BW information given by IPA driver + */ +typedef struct ipa_inform_wlan_bw __qdf_ipa_inform_wlan_bw_t; + +#define QDF_IPA_INFORM_WLAN_BW_INDEX(bw_inform) \ + (((struct ipa_inform_wlan_bw*)bw_inform)->index) +#define QDF_IPA_INFORM_WLAN_BW_THROUGHPUT(bw_inform) \ + (((struct ipa_inform_wlan_bw*)bw_inform)->throughput) + +#endif /* WDI3_STATS_UPDATE */ /** * __qdf_ipa_dp_evt_type_t - type of event client callback is diff --git a/qdf/linux/src/i_qdf_ipa_wdi3.h b/qdf/linux/src/i_qdf_ipa_wdi3.h index b05467a998..b7d8d79b00 100644 --- a/qdf/linux/src/i_qdf_ipa_wdi3.h +++ b/qdf/linux/src/i_qdf_ipa_wdi3.h @@ -398,8 +398,18 @@ static inline int __qdf_ipa_wdi_wlan_stats(struct ipa_wdi_tx_info *tx_stats) { return ipa_wdi_sw_stats(tx_stats); } -#endif +/** + * ipa_uc_bw_monitor() - start/stop uc bw monitoring + * @bw_info: set bw info levels to monitor + * + * Returns: 0 on success, negative on failure + */ +static inline int __qdf_ipa_uc_bw_monitor(struct ipa_wdi_bw_info *bw_info) +{ + return ipa_uc_bw_monitor(bw_info); +} +#endif #else /* CONFIG_IPA_WDI_UNIFIED_API */ /**