| /* |
| * Header file for DHD TPA (Traffic Pattern Analyzer) |
| * |
| * Provides type definitions and function prototypes to call into |
| * DHD's QOS on Socket Flow module. |
| * |
| * Copyright (C) 2024, Broadcom. |
| * |
| * Unless you and Broadcom execute a separate written software license |
| * agreement governing use of this software, this software is licensed to you |
| * under the terms of the GNU General Public License version 2 (the "GPL"), |
| * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
| * following added to such license: |
| * |
| * As a special exception, the copyright holders of this software give you |
| * permission to link this software with independent modules, and to copy and |
| * distribute the resulting executable under terms of your choice, provided that |
| * you also meet, for each linked independent module, the terms and conditions of |
| * the license of that module. An independent module is a module which is not |
| * derived from this software. The special exception does not apply to any |
| * modifications of the software. |
| * |
| * |
| * <<Broadcom-WL-IPTag/Dual:>> |
| * |
| */ |
| |
| #ifndef _DHD_LINUX_TPA_H_ |
| #define _DHD_LINUX_TPA_H_ |
| |
| struct dhd_sock_flow_info; |
| |
| #if defined(DHD_QOS_ON_SOCK_FLOW) |
| #define QOS_SAMPLING_INTVL_MS 100 |
| /* Feature Enabed original implementation */ |
| int dhd_init_sock_flows_buf(dhd_info_t *dhd, uint watchdog_ms); |
| int dhd_deinit_sock_flows_buf(dhd_info_t *dhd); |
| void dhd_update_sock_flows(dhd_info_t *dhd, struct sk_buff *skb); |
| void dhd_analyze_sock_flows(dhd_info_t *dhd, uint32 watchdog_ms); |
| |
| /* sysfs call backs */ |
| unsigned long dhd_sock_qos_get_status(dhd_info_t *dhd); |
| void dhd_sock_qos_set_status(dhd_info_t *dhd, unsigned long on_off); |
| ssize_t dhd_sock_qos_show_stats(dhd_info_t *dhd, char *buf, ssize_t sz); |
| void dhd_sock_qos_clear_stats(dhd_info_t *dhd); |
| unsigned long dhd_sock_qos_get_force_upgrade(dhd_info_t *dhd); |
| void dhd_sock_qos_set_force_upgrade(dhd_info_t *dhd, unsigned long force_upgrade); |
| int dhd_sock_qos_get_numfl_upgrd_thresh(dhd_info_t *dhd); |
| void dhd_sock_qos_set_numfl_upgrd_thresh(dhd_info_t *dhd, int upgrade_thresh); |
| void dhd_sock_qos_get_avgpktsize_thresh(dhd_info_t *dhd, |
| unsigned long *avgpktsize_low, |
| unsigned long *avgpktsize_high); |
| void dhd_sock_qos_set_avgpktsize_thresh(dhd_info_t *dhd, |
| unsigned long avgpktsize_low, |
| unsigned long avgpktsize_high); |
| void dhd_sock_qos_get_numpkts_thresh(dhd_info_t *dhd, |
| unsigned long *numpkts_low, |
| unsigned long *numpkts_high); |
| void dhd_sock_qos_set_numpkts_thresh(dhd_info_t *dhd, |
| unsigned long numpkts_low, |
| unsigned long numpkts_high); |
| void dhd_sock_qos_get_detectcnt_thresh(dhd_info_t *dhd, |
| unsigned char *detectcnt_inc, |
| unsigned char *detectcnt_dec); |
| void dhd_sock_qos_set_detectcnt_thresh(dhd_info_t *dhd, |
| unsigned char detectcnt_inc, |
| unsigned char detectcnt_dec); |
| int dhd_sock_qos_get_detectcnt_upgrd_thresh(dhd_info_t *dhd); |
| void dhd_sock_qos_set_detectcnt_upgrd_thresh(dhd_info_t *dhd, |
| unsigned char detect_upgrd_thresh); |
| int dhd_sock_qos_get_maxfl(dhd_info_t *dhd); |
| void dhd_sock_qos_set_maxfl(dhd_info_t *dhd, unsigned int maxfl); |
| |
| /* Update from Bus Layer */ |
| void dhd_sock_qos_update_bus_flowid(dhd_info_t *dhd, void *pktbuf, |
| uint32 bus_flow_id); |
| |
| #else |
| /* Feature Disabled dummy implementations */ |
| |
| static inline int |
| dhd_init_sock_flows_buf(dhd_info_t *dhd, uint watchdog_ms) |
| { |
| BCM_REFERENCE(dhd); |
| return BCME_UNSUPPORTED; |
| } |
| |
| static inline int |
| dhd_deinit_sock_flows_buf(dhd_info_t *dhd) |
| { |
| BCM_REFERENCE(dhd); |
| return BCME_UNSUPPORTED; |
| } |
| |
| static inline void |
| dhd_update_sock_flows(dhd_info_t *dhd, struct sk_buff *skb) |
| { |
| BCM_REFERENCE(dhd); |
| BCM_REFERENCE(skb); |
| return; |
| } |
| |
| static inline void |
| dhd_analyze_sock_flows(dhd_info_t *dhd, uint32 watchdog_ms) |
| { |
| BCM_REFERENCE(dhd); |
| BCM_REFERENCE(dhd_watchdog_ms); |
| return; |
| } |
| |
| static inline void |
| dhd_sock_qos_update_bus_flowid(dhd_info_t *dhd, void *pktbuf, |
| uint32 bus_flow_id) |
| { |
| BCM_REFERENCE(dhd); |
| BCM_REFERENCE(pktbuf); |
| BCM_REFERENCE(bus_flow_id); |
| } |
| #endif /* End of !DHD_QOS_ON_SOCK_FLOW */ |
| |
| #endif /* _DHD_LINUX_TPA_H_ */ |