.. | .. |
---|
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_ */ |
---|