1 /* 2 * Copyright (c) 2017-2018 Cavium, Inc. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * POSSIBILITY OF SUCH DAMAGE. 26 * 27 * $FreeBSD$ 28 * 29 */ 30 31 #ifndef _QLNX_IOCTL_H_ 32 #define _QLNX_IOCTL_H_ 33 34 #include <sys/ioccom.h> 35 36 #define QLNX_MAX_HW_FUNCS 2 37 38 /* 39 * Read grcdump and grcdump size 40 */ 41 42 struct qlnx_grcdump { 43 uint16_t pci_func; 44 uint32_t grcdump_size[QLNX_MAX_HW_FUNCS]; 45 void *grcdump[QLNX_MAX_HW_FUNCS]; 46 uint32_t grcdump_dwords[QLNX_MAX_HW_FUNCS]; 47 }; 48 typedef struct qlnx_grcdump qlnx_grcdump_t; 49 50 /* 51 * Read idle_chk and idle_chk size 52 */ 53 struct qlnx_idle_chk { 54 uint16_t pci_func; 55 uint32_t idle_chk_size[QLNX_MAX_HW_FUNCS]; 56 void *idle_chk[QLNX_MAX_HW_FUNCS]; 57 uint32_t idle_chk_dwords[QLNX_MAX_HW_FUNCS]; 58 }; 59 typedef struct qlnx_idle_chk qlnx_idle_chk_t; 60 61 /* 62 * Retrive traces 63 */ 64 struct qlnx_trace { 65 uint16_t pci_func; 66 67 uint16_t cmd; 68 #define QLNX_MCP_TRACE 0x01 69 #define QLNX_REG_FIFO 0x02 70 #define QLNX_IGU_FIFO 0x03 71 #define QLNX_PROTECTION_OVERRIDE 0x04 72 #define QLNX_FW_ASSERTS 0x05 73 74 uint32_t size[QLNX_MAX_HW_FUNCS]; 75 void *buffer[QLNX_MAX_HW_FUNCS]; 76 uint32_t dwords[QLNX_MAX_HW_FUNCS]; 77 }; 78 typedef struct qlnx_trace qlnx_trace_t; 79 80 81 /* 82 * Read driver info 83 */ 84 #define QLNX_DRV_INFO_NAME_LENGTH 32 85 #define QLNX_DRV_INFO_VERSION_LENGTH 32 86 #define QLNX_DRV_INFO_MFW_VERSION_LENGTH 32 87 #define QLNX_DRV_INFO_STORMFW_VERSION_LENGTH 32 88 #define QLNX_DRV_INFO_BUS_INFO_LENGTH 32 89 90 struct qlnx_drvinfo { 91 char drv_name[QLNX_DRV_INFO_NAME_LENGTH]; 92 char drv_version[QLNX_DRV_INFO_VERSION_LENGTH]; 93 char mfw_version[QLNX_DRV_INFO_MFW_VERSION_LENGTH]; 94 char stormfw_version[QLNX_DRV_INFO_STORMFW_VERSION_LENGTH]; 95 uint32_t eeprom_dump_len; /* in bytes */ 96 uint32_t reg_dump_len; /* in bytes */ 97 char bus_info[QLNX_DRV_INFO_BUS_INFO_LENGTH]; 98 }; 99 typedef struct qlnx_drvinfo qlnx_drvinfo_t; 100 101 /* 102 * Read Device Setting 103 */ 104 struct qlnx_dev_setting { 105 uint32_t supported; /* Features this interface supports */ 106 uint32_t advertising; /* Features this interface advertises */ 107 uint32_t speed; /* The forced speed, 10Mb, 100Mb, gigabit */ 108 uint32_t duplex; /* Duplex, half or full */ 109 uint32_t port; /* Which connector port */ 110 uint32_t phy_address; /* port number*/ 111 uint32_t autoneg; /* Enable or disable autonegotiation */ 112 }; 113 typedef struct qlnx_dev_setting qlnx_dev_setting_t; 114 115 /* 116 * Get Registers 117 */ 118 struct qlnx_get_regs { 119 void *reg_buf; 120 uint32_t reg_buf_len; 121 }; 122 typedef struct qlnx_get_regs qlnx_get_regs_t; 123 124 /* 125 * Get/Set NVRAM 126 */ 127 struct qlnx_nvram { 128 uint32_t cmd; 129 #define QLNX_NVRAM_CMD_WRITE_NVRAM 0x01 130 #define QLNX_NVRAM_CMD_READ_NVRAM 0x02 131 #define QLNX_NVRAM_CMD_SET_SECURE_MODE 0x03 132 #define QLNX_NVRAM_CMD_DEL_FILE 0x04 133 #define QLNX_NVRAM_CMD_PUT_FILE_BEGIN 0x05 134 #define QLNX_NVRAM_CMD_GET_NVRAM_RESP 0x06 135 #define QLNX_NVRAM_CMD_PUT_FILE_DATA 0x07 136 137 void *data; 138 uint32_t offset; 139 uint32_t data_len; 140 uint32_t magic; 141 }; 142 typedef struct qlnx_nvram qlnx_nvram_t; 143 144 /* 145 * Get/Set Device registers 146 */ 147 struct qlnx_reg_rd_wr { 148 uint32_t cmd; 149 #define QLNX_REG_READ_CMD 0x01 150 #define QLNX_REG_WRITE_CMD 0x02 151 152 uint32_t addr; 153 uint32_t val; 154 155 uint32_t access_type; 156 #define QLNX_REG_ACCESS_DIRECT 0x01 157 #define QLNX_REG_ACCESS_INDIRECT 0x02 158 159 uint32_t hwfn_index; 160 }; 161 typedef struct qlnx_reg_rd_wr qlnx_reg_rd_wr_t; 162 163 /* 164 * Read/Write PCI Configuration 165 */ 166 struct qlnx_pcicfg_rd_wr { 167 uint32_t cmd; 168 #define QLNX_PCICFG_READ 0x01 169 #define QLNX_PCICFG_WRITE 0x02 170 uint32_t reg; 171 uint32_t val; 172 uint32_t width; 173 }; 174 typedef struct qlnx_pcicfg_rd_wr qlnx_pcicfg_rd_wr_t; 175 176 /* 177 * Read MAC address 178 */ 179 struct qlnx_perm_mac_addr { 180 char addr[32]; 181 }; 182 typedef struct qlnx_perm_mac_addr qlnx_perm_mac_addr_t; 183 184 185 /* 186 * Read STORM statistics registers 187 */ 188 struct qlnx_storm_stats { 189 190 /* xstorm */ 191 uint32_t xstorm_active_cycles; 192 uint32_t xstorm_stall_cycles; 193 uint32_t xstorm_sleeping_cycles; 194 uint32_t xstorm_inactive_cycles; 195 196 /* ystorm */ 197 uint32_t ystorm_active_cycles; 198 uint32_t ystorm_stall_cycles; 199 uint32_t ystorm_sleeping_cycles; 200 uint32_t ystorm_inactive_cycles; 201 202 /* pstorm */ 203 uint32_t pstorm_active_cycles; 204 uint32_t pstorm_stall_cycles; 205 uint32_t pstorm_sleeping_cycles; 206 uint32_t pstorm_inactive_cycles; 207 208 /* tstorm */ 209 uint32_t tstorm_active_cycles; 210 uint32_t tstorm_stall_cycles; 211 uint32_t tstorm_sleeping_cycles; 212 uint32_t tstorm_inactive_cycles; 213 214 /* mstorm */ 215 uint32_t mstorm_active_cycles; 216 uint32_t mstorm_stall_cycles; 217 uint32_t mstorm_sleeping_cycles; 218 uint32_t mstorm_inactive_cycles; 219 220 /* ustorm */ 221 uint32_t ustorm_active_cycles; 222 uint32_t ustorm_stall_cycles; 223 uint32_t ustorm_sleeping_cycles; 224 uint32_t ustorm_inactive_cycles; 225 }; 226 227 typedef struct qlnx_storm_stats qlnx_storm_stats_t; 228 229 #define QLNX_STORM_STATS_SAMPLES_PER_HWFN (10000) 230 231 #define QLNX_STORM_STATS_BYTES_PER_HWFN (sizeof(qlnx_storm_stats_t) * \ 232 QLNX_STORM_STATS_SAMPLES_PER_HWFN) 233 234 struct qlnx_storm_stats_dump { 235 int num_hwfns; 236 int num_samples; 237 void *buffer[QLNX_MAX_HW_FUNCS]; 238 }; 239 240 typedef struct qlnx_storm_stats_dump qlnx_storm_stats_dump_t; 241 242 #define QLNX_LLDP_TYPE_END_OF_LLDPDU 0 243 #define QLNX_LLDP_TYPE_CHASSIS_ID 1 244 #define QLNX_LLDP_TYPE_PORT_ID 2 245 #define QLNX_LLDP_TYPE_TTL 3 246 #define QLNX_LLDP_TYPE_PORT_DESC 4 247 #define QLNX_LLDP_TYPE_SYS_NAME 5 248 #define QLNX_LLDP_TYPE_SYS_DESC 6 249 #define QLNX_LLDP_TYPE_SYS_CAPS 7 250 #define QLNX_LLDP_TYPE_MGMT_ADDR 8 251 #define QLNX_LLDP_TYPE_ORG_SPECIFIC 127 252 253 #define QLNX_LLDP_CHASSIS_ID_SUBTYPE_OCTETS 1 //Subtype is 1 byte 254 #define QLNX_LLDP_CHASSIS_ID_SUBTYPE_MAC 0x04 //Mac Address 255 #define QLNX_LLDP_CHASSIS_ID_MAC_ADDR_LEN 6 // Mac address is 6 bytes 256 #define QLNX_LLDP_CHASSIS_ID_SUBTYPE_IF_NAME 0x06 //Interface Name 257 258 #define QLNX_LLDP_PORT_ID_SUBTYPE_OCTETS 1 //Subtype is 1 byte 259 #define QLNX_LLDP_PORT_ID_SUBTYPE_MAC 0x03 //Mac Address 260 #define QLNX_LLDP_PORT_ID_MAC_ADDR_LEN 6 // Mac address is 6 bytes 261 #define QLNX_LLDP_PORT_ID_SUBTYPE_IF_NAME 0x05 //Interface Name 262 263 #define QLNX_LLDP_SYS_TLV_SIZE 256 264 struct qlnx_lldp_sys_tlvs { 265 int discard_mandatory_tlv; 266 uint8_t buf[QLNX_LLDP_SYS_TLV_SIZE]; 267 uint16_t buf_size; 268 }; 269 typedef struct qlnx_lldp_sys_tlvs qlnx_lldp_sys_tlvs_t; 270 271 272 /* 273 * Read grcdump size 274 */ 275 #define QLNX_GRC_DUMP_SIZE _IOWR('q', 1, qlnx_grcdump_t) 276 277 /* 278 * Read grcdump 279 */ 280 #define QLNX_GRC_DUMP _IOWR('q', 2, qlnx_grcdump_t) 281 282 /* 283 * Read idle_chk size 284 */ 285 #define QLNX_IDLE_CHK_SIZE _IOWR('q', 3, qlnx_idle_chk_t) 286 287 /* 288 * Read idle_chk 289 */ 290 #define QLNX_IDLE_CHK _IOWR('q', 4, qlnx_idle_chk_t) 291 292 /* 293 * Read driver info 294 */ 295 #define QLNX_DRV_INFO _IOWR('q', 5, qlnx_drvinfo_t) 296 297 /* 298 * Read Device Setting 299 */ 300 #define QLNX_DEV_SETTING _IOR('q', 6, qlnx_dev_setting_t) 301 302 /* 303 * Get Registers 304 */ 305 #define QLNX_GET_REGS _IOR('q', 7, qlnx_get_regs_t) 306 307 /* 308 * Get/Set NVRAM 309 */ 310 #define QLNX_NVRAM _IOWR('q', 8, qlnx_nvram_t) 311 312 /* 313 * Get/Set Device registers 314 */ 315 #define QLNX_RD_WR_REG _IOWR('q', 9, qlnx_reg_rd_wr_t) 316 317 /* 318 * Read/Write PCI Configuration 319 */ 320 #define QLNX_RD_WR_PCICFG _IOWR('q', 10, qlnx_pcicfg_rd_wr_t) 321 322 /* 323 * Read MAC address 324 */ 325 #define QLNX_MAC_ADDR _IOWR('q', 11, qlnx_perm_mac_addr_t) 326 327 /* 328 * Read STORM statistics 329 */ 330 #define QLNX_STORM_STATS _IOWR('q', 12, qlnx_storm_stats_dump_t) 331 332 /* 333 * Read trace size 334 */ 335 #define QLNX_TRACE_SIZE _IOWR('q', 13, qlnx_trace_t) 336 337 /* 338 * Read trace 339 */ 340 #define QLNX_TRACE _IOWR('q', 14, qlnx_trace_t) 341 342 /* 343 * Set LLDP TLVS 344 */ 345 #define QLNX_SET_LLDP_TLVS _IOWR('q', 15, qlnx_lldp_sys_tlvs_t) 346 347 #endif /* #ifndef _QLNX_IOCTL_H_ */ 348