1 /* 2 * Definitions for ioctls to access DHD iovars. 3 * Based on wlioctl.h (for Broadcom 802.11abg driver). 4 * (Moves towards generic ioctls for BCM drivers/iovars.) 5 * 6 * Definitions subject to change without notice. 7 * 8 * Portions of this code are copyright (c) 2022 Cypress Semiconductor Corporation 9 * 10 * Copyright (C) 1999-2017, Broadcom Corporation 11 * 12 * Unless you and Broadcom execute a separate written software license 13 * agreement governing use of this software, this software is licensed to you 14 * under the terms of the GNU General Public License version 2 (the "GPL"), 15 * available at http://www.broadcom.com/licenses/GPLv2.php, with the 16 * following added to such license: 17 * 18 * As a special exception, the copyright holders of this software give you 19 * permission to link this software with independent modules, and to copy and 20 * distribute the resulting executable under terms of your choice, provided that 21 * you also meet, for each linked independent module, the terms and conditions of 22 * the license of that module. An independent module is a module which is not 23 * derived from this software. The special exception does not apply to any 24 * modifications of the software. 25 * 26 * Notwithstanding the above, under no circumstances may you combine this 27 * software in any way with any other Broadcom software provided under a license 28 * other than the GPL, without Broadcom's express prior written consent. 29 * 30 * 31 * <<Broadcom-WL-IPTag/Open:>> 32 * 33 * $Id: dhdioctl.h 697634 2017-05-04 11:02:38Z $ 34 */ 35 36 #ifndef _dhdioctl_h_ 37 #define _dhdioctl_h_ 38 39 #include <typedefs.h> 40 41 /* Linux network driver ioctl encoding */ 42 typedef struct dhd_ioctl { 43 uint32 cmd; /* common ioctl definition */ 44 void *buf; /* pointer to user buffer */ 45 uint32 len; /* length of user buffer */ 46 uint32 set; /* get or set request boolean (optional) */ 47 uint32 used; /* bytes read or written (optional) */ 48 uint32 needed; /* bytes needed (optional) */ 49 uint32 driver; /* to identify target driver */ 50 } dhd_ioctl_t; 51 52 /* Underlying BUS definition */ 53 enum { 54 BUS_TYPE_USB = 0, /* for USB dongles */ 55 BUS_TYPE_SDIO, /* for SDIO dongles */ 56 BUS_TYPE_PCIE /* for PCIE dongles */ 57 }; 58 59 typedef enum { 60 DMA_XFER_SUCCESS = 0, 61 DMA_XFER_IN_PROGRESS, 62 DMA_XFER_FAILED 63 } dma_xfer_status_t; 64 65 typedef enum d11_lpbk_type { 66 M2M_DMA_LPBK = 0, 67 D11_LPBK = 1, 68 BMC_LPBK = 2, 69 M2M_NON_DMA_LPBK = 3, 70 D11_HOST_MEM_LPBK = 4, 71 BMC_HOST_MEM_LPBK = 5, 72 MAX_LPBK = 6 73 } dma_xfer_type_t; 74 75 typedef struct dmaxfer_info { 76 uint16 version; 77 uint16 length; 78 dma_xfer_status_t status; 79 dma_xfer_type_t type; 80 uint src_delay; 81 uint dest_delay; 82 uint should_wait; 83 uint core_num; 84 int error_code; 85 uint32 num_bytes; 86 uint64 time_taken; 87 uint64 tput; 88 } dma_xfer_info_t; 89 90 #define DHD_DMAXFER_VERSION 0x1 91 92 typedef struct tput_test { 93 uint16 version; 94 uint16 length; 95 uint8 direction; 96 uint8 tput_test_running; 97 uint8 mac_sta[6]; 98 uint8 mac_ap[6]; 99 uint8 PAD[2]; 100 uint32 payload_size; 101 uint32 num_pkts; 102 uint32 timeout_ms; 103 uint32 flags; 104 105 uint32 pkts_good; 106 uint32 pkts_bad; 107 uint32 pkts_cmpl; 108 uint64 time_ms; 109 uint64 tput_bps; 110 } tput_test_t; 111 112 typedef enum { 113 TPUT_DIR_TX = 0, 114 TPUT_DIR_RX 115 } tput_dir_t; 116 117 #define TPUT_TEST_T_VER 1 118 #define TPUT_TEST_T_LEN 68 119 #define TPUT_TEST_MIN_PAYLOAD_SIZE 16 120 #define TPUT_TEST_USE_ETHERNET_HDR 0x1 121 #define TPUT_TEST_USE_802_11_HDR 0x2 122 123 /* per-driver magic numbers */ 124 #define DHD_IOCTL_MAGIC 0x00444944 125 126 /* bump this number if you change the ioctl interface */ 127 #define DHD_IOCTL_VERSION 1 128 129 /* 130 * Increase the DHD_IOCTL_MAXLEN to 16K for supporting download of NVRAM files of size 131 * > 8K. In the existing implementation when NVRAM is to be downloaded via the "vars" 132 * DHD IOVAR, the NVRAM is copied to the DHD Driver memory. Later on when "dwnldstate" is 133 * invoked with FALSE option, the NVRAM gets copied from the DHD driver to the Dongle 134 * memory. The simple way to support this feature without modifying the DHD application, 135 * driver logic is to increase the DHD_IOCTL_MAXLEN size. This macro defines the "size" 136 * of the buffer in which data is exchanged between the DHD App and DHD driver. 137 */ 138 #define DHD_IOCTL_MAXLEN (16384) /* max length ioctl buffer required */ 139 #define DHD_IOCTL_SMLEN 256 /* "small" length ioctl buffer required */ 140 141 /* common ioctl definitions */ 142 #define DHD_GET_MAGIC 0 143 #define DHD_GET_VERSION 1 144 #define DHD_GET_VAR 2 145 #define DHD_SET_VAR 3 146 147 /* message levels */ 148 #define DHD_ERROR_VAL 0x0001 149 #define DHD_TRACE_VAL 0x0002 150 #define DHD_INFO_VAL 0x0004 151 #define DHD_DATA_VAL 0x0008 152 #define DHD_CTL_VAL 0x0010 153 #define DHD_TIMER_VAL 0x0020 154 #define DHD_HDRS_VAL 0x0040 155 #define DHD_BYTES_VAL 0x0080 156 #define DHD_INTR_VAL 0x0100 157 #define DHD_LOG_VAL 0x0200 158 #define DHD_GLOM_VAL 0x0400 159 #define DHD_EVENT_VAL 0x0800 160 #define DHD_BTA_VAL 0x1000 161 #define DHD_ISCAN_VAL 0x2000 162 #define DHD_ARPOE_VAL 0x4000 163 #define DHD_REORDER_VAL 0x8000 164 #define DHD_WL_VAL 0x10000 165 #define DHD_NOCHECKDIED_VAL 0x20000 /* UTF WAR */ 166 #define DHD_WL_VAL2 0x40000 167 #define DHD_PNO_VAL 0x80000 168 #define DHD_RTT_VAL 0x100000 169 #define DHD_MSGTRACE_VAL 0x200000 170 #define DHD_FWLOG_VAL 0x400000 171 #define DHD_DBGIF_VAL 0x800000 172 #ifdef DHD_PCIE_NATIVE_RUNTIMEPM 173 #define DHD_RPM_VAL 0x1000000 174 #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */ 175 #define DHD_PKT_MON_VAL 0x2000000 176 #define DHD_PKT_MON_DUMP_VAL 0x4000000 177 #define DHD_ERROR_MEM_VAL 0x8000000 178 #define DHD_DNGL_IOVAR_SET_VAL 0x10000000 /**< logs the setting of dongle iovars */ 179 #define DHD_LPBKDTDUMP_VAL 0x20000000 180 #define DHD_PRSRV_MEM_VAL 0x40000000 181 #define DHD_IOVAR_MEM_VAL 0x80000000 182 183 #ifdef SDTEST 184 /* For pktgen iovar */ 185 typedef struct dhd_pktgen { 186 uint32 version; /* To allow structure change tracking */ 187 uint32 freq; /* Max ticks between tx/rx attempts */ 188 uint32 count; /* Test packets to send/rcv each attempt */ 189 uint32 print; /* Print counts every <print> attempts */ 190 uint32 total; /* Total packets (or bursts) */ 191 uint32 minlen; /* Minimum length of packets to send */ 192 uint32 maxlen; /* Maximum length of packets to send */ 193 uint32 numsent; /* Count of test packets sent */ 194 uint32 numrcvd; /* Count of test packets received */ 195 uint32 numfail; /* Count of test send failures */ 196 uint32 mode; /* Test mode (type of test packets) */ 197 uint32 stop; /* Stop after this many tx failures */ 198 } dhd_pktgen_t; 199 200 /* Version in case structure changes */ 201 #define DHD_PKTGEN_VERSION 2 202 203 /* Type of test packets to use */ 204 #define DHD_PKTGEN_ECHO 1 /* Send echo requests */ 205 #define DHD_PKTGEN_SEND 2 /* Send discard packets */ 206 #define DHD_PKTGEN_RXBURST 3 /* Request dongle send N packets */ 207 #define DHD_PKTGEN_RECV 4 /* Continuous rx from continuous tx dongle */ 208 #endif /* SDTEST */ 209 210 /* Enter idle immediately (no timeout) */ 211 #define DHD_IDLE_IMMEDIATE (-1) 212 213 /* Values for idleclock iovar: other values are the sd_divisor to use when idle */ 214 #define DHD_IDLE_ACTIVE 0 /* Do not request any SD clock change when idle */ 215 #define DHD_IDLE_STOP (-1) /* Request SD clock be stopped (and use SD1 mode) */ 216 217 enum dhd_maclist_xtlv_type { 218 DHD_MACLIST_XTLV_R = 0x1, 219 DHD_MACLIST_XTLV_X = 0x2, 220 DHD_SVMPLIST_XTLV = 0x3 221 }; 222 223 typedef struct _dhd_maclist_t { 224 uint16 version; /* Version */ 225 uint16 bytes_len; /* Total bytes length of lists, XTLV headers and paddings */ 226 uint8 plist[1]; /* Pointer to the first list */ 227 } dhd_maclist_t; 228 229 typedef struct _dhd_pd11regs_param { 230 uint16 start_idx; 231 uint8 verbose; 232 uint8 pad; 233 uint8 plist[1]; 234 } dhd_pd11regs_param; 235 236 typedef struct _dhd_pd11regs_buf { 237 uint16 idx; 238 uint8 pad[2]; 239 uint8 pbuf[1]; 240 } dhd_pd11regs_buf; 241 242 /* BT logging and memory dump */ 243 244 #define BT_LOG_BUF_MAX_SIZE (DHD_IOCTL_MAXLEN - (2 * sizeof(int))) 245 #define BT_LOG_BUF_NOT_AVAILABLE 0 246 #define BT_LOG_NEXT_BUF_NOT_AVAIL 1 247 #define BT_LOG_NEXT_BUF_AVAIL 2 248 #define BT_LOG_NOT_READY 3 249 250 typedef struct bt_log_buf_info { 251 int availability; 252 int size; 253 char buf[BT_LOG_BUF_MAX_SIZE]; 254 } bt_log_buf_info_t; 255 256 /* request BT memory in chunks */ 257 typedef struct bt_mem_req { 258 int offset; /* offset from BT memory start */ 259 int buf_size; /* buffer size per chunk */ 260 } bt_mem_req_t; 261 262 /* max dest supported */ 263 #define DEBUG_BUF_DEST_MAX 4 264 265 /* debug buf dest stat */ 266 typedef struct debug_buf_dest_stat { 267 uint32 stat[DEBUG_BUF_DEST_MAX]; 268 } debug_buf_dest_stat_t; 269 270 #endif /* _dhdioctl_h_ */ 271