| .. | .. |
|---|
| 1 | | -/* SPDX-License-Identifier: GPL-2.0 */ |
|---|
| 2 | 1 | /* |
|---|
| 3 | 2 | * Header file describing the internal (inter-module) DHD interfaces. |
|---|
| 4 | 3 | * |
|---|
| 5 | 4 | * Provides type definitions and function prototypes used to link the |
|---|
| 6 | 5 | * DHD OS, bus, and protocol modules. |
|---|
| 7 | 6 | * |
|---|
| 8 | | - * Copyright (C) 1999-2019, Broadcom Corporation |
|---|
| 9 | | - * |
|---|
| 7 | + * Portions of this code are copyright (c) 2022 Cypress Semiconductor Corporation |
|---|
| 8 | + * |
|---|
| 9 | + * Copyright (C) 1999-2017, Broadcom Corporation |
|---|
| 10 | + * |
|---|
| 10 | 11 | * Unless you and Broadcom execute a separate written software license |
|---|
| 11 | 12 | * agreement governing use of this software, this software is licensed to you |
|---|
| 12 | 13 | * under the terms of the GNU General Public License version 2 (the "GPL"), |
|---|
| 13 | 14 | * available at http://www.broadcom.com/licenses/GPLv2.php, with the |
|---|
| 14 | 15 | * following added to such license: |
|---|
| 15 | | - * |
|---|
| 16 | + * |
|---|
| 16 | 17 | * As a special exception, the copyright holders of this software give you |
|---|
| 17 | 18 | * permission to link this software with independent modules, and to copy and |
|---|
| 18 | 19 | * distribute the resulting executable under terms of your choice, provided that |
|---|
| .. | .. |
|---|
| 20 | 21 | * the license of that module. An independent module is a module which is not |
|---|
| 21 | 22 | * derived from this software. The special exception does not apply to any |
|---|
| 22 | 23 | * modifications of the software. |
|---|
| 23 | | - * |
|---|
| 24 | + * |
|---|
| 24 | 25 | * Notwithstanding the above, under no circumstances may you combine this |
|---|
| 25 | 26 | * software in any way with any other Broadcom software provided under a license |
|---|
| 26 | 27 | * other than the GPL, without Broadcom's express prior written consent. |
|---|
| .. | .. |
|---|
| 28 | 29 | * |
|---|
| 29 | 30 | * <<Broadcom-WL-IPTag/Open:>> |
|---|
| 30 | 31 | * |
|---|
| 31 | | - * $Id: dhd_proto.h 593174 2015-10-15 13:05:37Z $ |
|---|
| 32 | + * $Id: dhd_proto.h 694343 2017-04-11 19:05:58Z $ |
|---|
| 32 | 33 | */ |
|---|
| 33 | 34 | |
|---|
| 34 | 35 | #ifndef _dhd_proto_h_ |
|---|
| .. | .. |
|---|
| 38 | 39 | #include <wlioctl.h> |
|---|
| 39 | 40 | #ifdef BCMPCIE |
|---|
| 40 | 41 | #include <dhd_flowring.h> |
|---|
| 41 | | -#endif |
|---|
| 42 | +#endif // endif |
|---|
| 42 | 43 | |
|---|
| 43 | | -#define DEFAULT_IOCTL_RESP_TIMEOUT 2000 |
|---|
| 44 | +#define DEFAULT_IOCTL_RESP_TIMEOUT 5000 |
|---|
| 44 | 45 | #ifndef IOCTL_RESP_TIMEOUT |
|---|
| 46 | +#ifdef BCMQT |
|---|
| 47 | +#define IOCTL_RESP_TIMEOUT 130000 /* In milli second */ |
|---|
| 48 | +#else |
|---|
| 45 | 49 | /* In milli second default value for Production FW */ |
|---|
| 46 | 50 | #define IOCTL_RESP_TIMEOUT DEFAULT_IOCTL_RESP_TIMEOUT |
|---|
| 51 | +#endif /* BCMQT */ |
|---|
| 47 | 52 | #endif /* IOCTL_RESP_TIMEOUT */ |
|---|
| 53 | + |
|---|
| 54 | +#ifdef BCMQT |
|---|
| 55 | +#define IOCTL_DMAXFER_TIMEOUT 260000 /* In milli second */ |
|---|
| 56 | +#else |
|---|
| 57 | +/* In milli second default value for Production FW */ |
|---|
| 58 | +#define IOCTL_DMAXFER_TIMEOUT 10000 |
|---|
| 59 | +#endif /* BCMQT */ |
|---|
| 48 | 60 | |
|---|
| 49 | 61 | #ifndef MFG_IOCTL_RESP_TIMEOUT |
|---|
| 50 | 62 | #define MFG_IOCTL_RESP_TIMEOUT 20000 /* In milli second default value for MFG FW */ |
|---|
| 51 | 63 | #endif /* MFG_IOCTL_RESP_TIMEOUT */ |
|---|
| 52 | 64 | |
|---|
| 53 | | -#define DEFAULT_D3_ACK_RESP_TIMEOUT 4000 |
|---|
| 65 | +#define DEFAULT_D3_ACK_RESP_TIMEOUT 2000 |
|---|
| 54 | 66 | #ifndef D3_ACK_RESP_TIMEOUT |
|---|
| 55 | 67 | #define D3_ACK_RESP_TIMEOUT DEFAULT_D3_ACK_RESP_TIMEOUT |
|---|
| 56 | 68 | #endif /* D3_ACK_RESP_TIMEOUT */ |
|---|
| .. | .. |
|---|
| 60 | 72 | #define DHD_BUS_BUSY_TIMEOUT DEFAULT_DHD_BUS_BUSY_TIMEOUT |
|---|
| 61 | 73 | #endif /* DEFAULT_DHD_BUS_BUSY_TIMEOUT */ |
|---|
| 62 | 74 | |
|---|
| 75 | +#define DS_EXIT_TIMEOUT 1000 /* In ms */ |
|---|
| 76 | +#define DS_ENTER_TIMEOUT 1000 /* In ms */ |
|---|
| 77 | + |
|---|
| 63 | 78 | #define IOCTL_DISABLE_TIMEOUT 0 |
|---|
| 79 | + |
|---|
| 64 | 80 | /* |
|---|
| 65 | 81 | * Exported from the dhd protocol module (dhd_cdc, dhd_rndis) |
|---|
| 66 | 82 | */ |
|---|
| .. | .. |
|---|
| 108 | 124 | /* Add prot dump output to a buffer */ |
|---|
| 109 | 125 | extern void dhd_prot_dump(dhd_pub_t *dhdp, struct bcmstrbuf *strbuf); |
|---|
| 110 | 126 | |
|---|
| 127 | +/* Dump extended trap data */ |
|---|
| 128 | +extern int dhd_prot_dump_extended_trap(dhd_pub_t *dhdp, struct bcmstrbuf *b, bool raw); |
|---|
| 129 | + |
|---|
| 111 | 130 | /* Update local copy of dongle statistics */ |
|---|
| 112 | 131 | extern void dhd_prot_dstats(dhd_pub_t *dhdp); |
|---|
| 113 | 132 | |
|---|
| 114 | 133 | extern int dhd_ioctl(dhd_pub_t * dhd_pub, dhd_ioctl_t *ioc, void * buf, uint buflen); |
|---|
| 115 | 134 | |
|---|
| 116 | 135 | extern int dhd_preinit_ioctls(dhd_pub_t *dhd); |
|---|
| 117 | | -#ifdef LOAD_DHD_WITH_FW_ALIVE |
|---|
| 118 | | -extern int dhd_preinit_ioctls_alive(dhd_pub_t *dhd); |
|---|
| 119 | | -#endif /* LOAD_DHD_WITH_FW_ALIVE */ |
|---|
| 120 | 136 | |
|---|
| 121 | 137 | extern int dhd_process_pkt_reorder_info(dhd_pub_t *dhd, uchar *reorder_info_buf, |
|---|
| 122 | 138 | uint reorder_info_len, void **pkt, uint32 *free_buf_count); |
|---|
| 123 | 139 | |
|---|
| 124 | 140 | #ifdef BCMPCIE |
|---|
| 125 | | -extern bool dhd_prot_process_msgbuf_txcpl(dhd_pub_t *dhd, uint bound); |
|---|
| 126 | | -extern bool dhd_prot_process_msgbuf_rxcpl(dhd_pub_t *dhd, uint bound); |
|---|
| 141 | +extern bool dhd_prot_process_msgbuf_txcpl(dhd_pub_t *dhd, uint bound, int ringtype); |
|---|
| 142 | +extern bool dhd_prot_process_msgbuf_rxcpl(dhd_pub_t *dhd, uint bound, int ringtype); |
|---|
| 143 | +extern bool dhd_prot_process_msgbuf_infocpl(dhd_pub_t *dhd, uint bound); |
|---|
| 127 | 144 | extern int dhd_prot_process_ctrlbuf(dhd_pub_t * dhd); |
|---|
| 145 | +extern int dhd_prot_process_trapbuf(dhd_pub_t * dhd); |
|---|
| 128 | 146 | extern bool dhd_prot_dtohsplit(dhd_pub_t * dhd); |
|---|
| 129 | 147 | extern int dhd_post_dummy_msg(dhd_pub_t *dhd); |
|---|
| 130 | 148 | extern int dhdmsgbuf_lpbk_req(dhd_pub_t *dhd, uint len); |
|---|
| 131 | 149 | extern void dhd_prot_rx_dataoffset(dhd_pub_t *dhd, uint32 offset); |
|---|
| 132 | 150 | extern int dhd_prot_txdata(dhd_pub_t *dhd, void *p, uint8 ifidx); |
|---|
| 133 | | -extern int dhdmsgbuf_dmaxfer_req(dhd_pub_t *dhd, uint len, uint srcdelay, uint destdelay); |
|---|
| 151 | +extern int dhdmsgbuf_dmaxfer_req(dhd_pub_t *dhd, |
|---|
| 152 | + uint len, uint srcdelay, uint destdelay, uint d11_lpbk, uint core_num); |
|---|
| 153 | +extern int dhdmsgbuf_dmaxfer_status(dhd_pub_t *dhd, dma_xfer_info_t *result); |
|---|
| 134 | 154 | |
|---|
| 135 | 155 | extern void dhd_dma_buf_init(dhd_pub_t *dhd, void *dma_buf, |
|---|
| 136 | 156 | void *va, uint32 len, dmaaddr_t pa, void *dmah, void *secdma); |
|---|
| .. | .. |
|---|
| 149 | 169 | struct bcmstrbuf *strbuf, const char * fmt); |
|---|
| 150 | 170 | extern void dhd_prot_print_info(dhd_pub_t *dhd, struct bcmstrbuf *strbuf); |
|---|
| 151 | 171 | extern void dhd_prot_update_txflowring(dhd_pub_t *dhdp, uint16 flow_id, void *msgring_info); |
|---|
| 152 | | -extern void dhd_prot_txdata_write_flush(dhd_pub_t *dhd, uint16 flow_id, bool in_lock); |
|---|
| 172 | +extern void dhd_prot_txdata_write_flush(dhd_pub_t *dhd, uint16 flow_id); |
|---|
| 153 | 173 | extern uint32 dhd_prot_txp_threshold(dhd_pub_t *dhd, bool set, uint32 val); |
|---|
| 154 | 174 | extern void dhd_prot_reset(dhd_pub_t *dhd); |
|---|
| 175 | +extern uint16 dhd_get_max_flow_rings(dhd_pub_t *dhd); |
|---|
| 176 | + |
|---|
| 177 | +#ifdef IDLE_TX_FLOW_MGMT |
|---|
| 178 | +extern int dhd_prot_flow_ring_batch_suspend_request(dhd_pub_t *dhd, uint16 *ringid, uint16 count); |
|---|
| 179 | +extern int dhd_prot_flow_ring_resume(dhd_pub_t *dhd, flow_ring_node_t *flow_ring_node); |
|---|
| 180 | +#endif /* IDLE_TX_FLOW_MGMT */ |
|---|
| 181 | +extern int dhd_prot_init_info_rings(dhd_pub_t *dhd); |
|---|
| 182 | +#ifdef DHD_HP2P |
|---|
| 183 | +extern int dhd_prot_init_hp2p_rings(dhd_pub_t *dhd); |
|---|
| 184 | +#endif /* DHD_HP2P */ |
|---|
| 185 | + |
|---|
| 186 | +extern int dhd_prot_check_tx_resource(dhd_pub_t *dhd); |
|---|
| 187 | + |
|---|
| 188 | +extern void dhd_prot_update_pktid_txq_stop_cnt(dhd_pub_t *dhd); |
|---|
| 189 | +extern void dhd_prot_update_pktid_txq_start_cnt(dhd_pub_t *dhd); |
|---|
| 190 | +#else |
|---|
| 191 | +static INLINE void dhd_prot_update_pktid_txq_stop_cnt(dhd_pub_t *dhd) { return; } |
|---|
| 192 | +static INLINE void dhd_prot_update_pktid_txq_start_cnt(dhd_pub_t *dhd) { return; } |
|---|
| 193 | +#endif /* BCMPCIE */ |
|---|
| 194 | + |
|---|
| 155 | 195 | #ifdef DHD_LB |
|---|
| 156 | 196 | extern void dhd_lb_tx_compl_handler(unsigned long data); |
|---|
| 157 | 197 | extern void dhd_lb_rx_compl_handler(unsigned long data); |
|---|
| 158 | 198 | extern void dhd_lb_rx_process_handler(unsigned long data); |
|---|
| 159 | 199 | #endif /* DHD_LB */ |
|---|
| 200 | +extern int dhd_prot_h2d_mbdata_send_ctrlmsg(dhd_pub_t *dhd, uint32 mb_data); |
|---|
| 201 | + |
|---|
| 202 | +#ifdef BCMPCIE |
|---|
| 203 | +extern int dhd_prot_send_host_timestamp(dhd_pub_t *dhdp, uchar *tlv, uint16 tlv_len, |
|---|
| 204 | + uint16 seq, uint16 xt_id); |
|---|
| 205 | +extern bool dhd_prot_data_path_tx_timestamp_logging(dhd_pub_t *dhd, bool enable, bool set); |
|---|
| 206 | +extern bool dhd_prot_data_path_rx_timestamp_logging(dhd_pub_t *dhd, bool enable, bool set); |
|---|
| 207 | +extern bool dhd_prot_pkt_noretry(dhd_pub_t *dhd, bool enable, bool set); |
|---|
| 208 | +extern bool dhd_prot_pkt_noaggr(dhd_pub_t *dhd, bool enable, bool set); |
|---|
| 209 | +extern bool dhd_prot_pkt_fixed_rate(dhd_pub_t *dhd, bool enable, bool set); |
|---|
| 210 | +#else /* BCMPCIE */ |
|---|
| 211 | +#define dhd_prot_send_host_timestamp(a, b, c, d, e) 0 |
|---|
| 212 | +#define dhd_prot_data_path_tx_timestamp_logging(a, b, c) 0 |
|---|
| 213 | +#define dhd_prot_data_path_rx_timestamp_logging(a, b, c) 0 |
|---|
| 160 | 214 | #endif /* BCMPCIE */ |
|---|
| 215 | + |
|---|
| 216 | +extern void dhd_prot_dma_indx_free(dhd_pub_t *dhd); |
|---|
| 217 | + |
|---|
| 218 | +#ifdef EWP_EDL |
|---|
| 219 | +int dhd_prot_init_edl_rings(dhd_pub_t *dhd); |
|---|
| 220 | +bool dhd_prot_process_msgbuf_edl(dhd_pub_t *dhd); |
|---|
| 221 | +int dhd_prot_process_edl_complete(dhd_pub_t *dhd, void *evt_decode_data); |
|---|
| 222 | +#endif /* EWP_EDL */ |
|---|
| 223 | + |
|---|
| 224 | +/* APIs for managing a DMA-able buffer */ |
|---|
| 225 | +int dhd_dma_buf_alloc(dhd_pub_t *dhd, dhd_dma_buf_t *dma_buf, uint32 buf_len); |
|---|
| 226 | +void dhd_dma_buf_free(dhd_pub_t *dhd, dhd_dma_buf_t *dma_buf); |
|---|
| 227 | + |
|---|
| 161 | 228 | /******************************** |
|---|
| 162 | 229 | * For version-string expansion * |
|---|
| 163 | 230 | */ |
|---|
| .. | .. |
|---|
| 169 | 236 | #define DHD_PROTOCOL "unknown" |
|---|
| 170 | 237 | #endif /* proto */ |
|---|
| 171 | 238 | |
|---|
| 239 | +int dhd_get_hscb_info(dhd_pub_t *dhd, void ** va, uint32 *len); |
|---|
| 240 | +int dhd_get_hscb_buff(dhd_pub_t *dhd, uint32 offset, uint32 length, void * buff); |
|---|
| 241 | + |
|---|
| 242 | +#ifdef DHD_HP2P |
|---|
| 243 | +extern uint8 dhd_prot_hp2p_enable(dhd_pub_t *dhd, bool set, int enable); |
|---|
| 244 | +extern uint32 dhd_prot_pkt_threshold(dhd_pub_t *dhd, bool set, uint32 val); |
|---|
| 245 | +extern uint32 dhd_prot_time_threshold(dhd_pub_t *dhd, bool set, uint32 val); |
|---|
| 246 | +extern uint32 dhd_prot_pkt_expiry(dhd_pub_t *dhd, bool set, uint32 val); |
|---|
| 247 | +#endif // endif |
|---|
| 248 | + |
|---|
| 249 | +#ifdef DHD_MAP_LOGGING |
|---|
| 250 | +extern void dhd_prot_smmu_fault_dump(dhd_pub_t *dhdp); |
|---|
| 251 | +#endif /* DHD_MAP_LOGGING */ |
|---|
| 172 | 252 | #endif /* _dhd_proto_h_ */ |
|---|