1 /* 2 * Copyright (c) 2012-2014, 2016-2018, 2020 The Linux Foundation. 3 * All rights reserved. 4 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 5 * 6 * Permission to use, copy, modify, and/or distribute this software for 7 * any purpose with or without fee is hereby granted, provided that the 8 * above copyright notice and this permission notice appear in all 9 * copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 12 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 13 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 14 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 15 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 16 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 17 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 18 * PERFORMANCE OF THIS SOFTWARE. 19 */ 20 21 /* 22 * The file is used to define structures that are shared between 23 * kernel space and user space pktlog application. 24 */ 25 26 #ifndef _PKTLOG_AC_API_ 27 #define _PKTLOG_AC_API_ 28 #if defined(CONNECTIVITY_PKTLOG) || !defined(REMOVE_PKT_LOG) 29 30 struct hif_opaque_softc; 31 /** 32 * typedef hif_opaque_softc_handle - opaque handle for hif_opaque_softc 33 */ 34 typedef struct hif_opaque_softc * hif_opaque_softc_handle; 35 36 enum pktlog_callback_regtype { 37 PKTLOG_DEFAULT_CALLBACK_REGISTRATION, 38 PKTLOG_LITE_CALLBACK_REGISTRATION 39 }; 40 41 struct net_device; 42 /** 43 * typedef net_device_handle - opaque handle to linux net device object 44 */ 45 typedef struct net_device * net_device_handle; 46 47 struct pktlog_dev_t; 48 49 void pktlog_sethandle(struct pktlog_dev_t **pl_handle, 50 hif_opaque_softc_handle scn); 51 void pktlog_set_pdev_id(struct pktlog_dev_t *pl_dev, uint8_t pdev_id); 52 53 void *get_txrx_context(void); 54 55 struct pktlog_dev_t *get_pktlog_handle(void); 56 void pktlog_set_callback_regtype(enum pktlog_callback_regtype callback_type); 57 58 /* Packet log state information */ 59 #ifndef _PKTLOG_INFO 60 #define _PKTLOG_INFO 61 62 /** 63 * enum ath_pktlog_state - pktlog status 64 * @PKTLOG_OPR_IN_PROGRESS : pktlog command in progress 65 * @PKTLOG_OPR_IN_PROGRESS_READ_START: pktlog read is issued 66 * @PKTLOG_OPR_IN_PROGRESS_READ_START_PKTLOG_DISABLED: 67 * as part of pktlog read, pktlog is disabled 68 * @PKTLOG_OPR_IN_PROGRESS_READ_COMPLETE: 69 * as part of read, till pktlog read is complete 70 * @PKTLOG_OPR_IN_PROGRESS_CLEARBUFF_COMPLETE: 71 * as part of read, pktlog clear buffer is done 72 * @PKTLOG_OPR_NOT_IN_PROGRESS: no pktlog command in progress 73 */ 74 enum ath_pktlog_state { 75 PKTLOG_OPR_IN_PROGRESS = 0, 76 PKTLOG_OPR_IN_PROGRESS_READ_START, 77 PKTLOG_OPR_IN_PROGRESS_READ_START_PKTLOG_DISABLED, 78 PKTLOG_OPR_IN_PROGRESS_READ_COMPLETE, 79 PKTLOG_OPR_IN_PROGRESS_CLEARBUFF_COMPLETE, 80 PKTLOG_OPR_NOT_IN_PROGRESS 81 }; 82 83 struct ath_pktlog_info { 84 struct ath_pktlog_buf *buf; 85 uint32_t log_state; 86 uint32_t saved_state; 87 uint32_t options; 88 /* Initial saved state: It will save the log state in pktlog 89 * open and used in pktlog release after 90 * pktlog read is complete. 91 */ 92 uint32_t init_saved_state; 93 enum ath_pktlog_state curr_pkt_state; 94 95 /* Size of buffer in bytes */ 96 int32_t buf_size; 97 qdf_spinlock_t log_lock; 98 struct mutex pktlog_mutex; 99 100 /* Threshold of TCP SACK packets for triggered stop */ 101 int sack_thr; 102 103 /* # of tail packets to log after triggered stop */ 104 int tail_length; 105 106 /* throuput threshold in bytes for triggered stop */ 107 uint32_t thruput_thresh; 108 109 /* (aggregated or single) packet size in bytes */ 110 uint32_t pktlen; 111 112 /* a temporary variable for counting TX throughput only */ 113 /* PER threshold for triggered stop, 10 for 10%, range [1, 99] */ 114 uint32_t per_thresh; 115 116 /* Phyerr threshold for triggered stop */ 117 uint32_t phyerr_thresh; 118 119 /* time period for counting trigger parameters, in millisecond */ 120 uint32_t trigger_interval; 121 uint32_t start_time_thruput; 122 uint32_t start_time_per; 123 }; 124 #endif /* _PKTLOG_INFO */ 125 #else /* REMOVE_PKT_LOG */ 126 typedef void *pktlog_dev_handle; 127 #define pktlog_set_pdev_id(pl_dev, pdev_id) \ 128 do { \ 129 (void)pl_dev; \ 130 (void)pdev_id; \ 131 } while (0) 132 133 #define pktlog_sethandle(pl_handle, scn) \ 134 do { \ 135 (void)pl_handle; \ 136 (void)scn; \ 137 } while (0) 138 139 #define ol_pl_set_name(dev) \ 140 do { \ 141 (void)scn; \ 142 (void)dev; \ 143 } while (0) 144 145 #endif /* REMOVE_PKT_LOG */ 146 #endif /* _PKTLOG_AC_API_ */ 147