1 /* 2 * Copyright (c) 2013-2014 Qlogic Corporation 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 * File: qls_hw.h 31 * Author : David C Somayajulu, Qlogic Corporation, Aliso Viejo, CA 92656. 32 */ 33 #ifndef _QLS_HW_H_ 34 #define _QLS_HW_H_ 35 36 #define Q8_MAX_NUM_MULTICAST_ADDRS 32 37 #define Q8_MAC_ADDR_LEN 6 38 39 #define BIT_0 (0x1 << 0) 40 #define BIT_1 (0x1 << 1) 41 #define BIT_2 (0x1 << 2) 42 #define BIT_3 (0x1 << 3) 43 #define BIT_4 (0x1 << 4) 44 #define BIT_5 (0x1 << 5) 45 #define BIT_6 (0x1 << 6) 46 #define BIT_7 (0x1 << 7) 47 #define BIT_8 (0x1 << 8) 48 #define BIT_9 (0x1 << 9) 49 #define BIT_10 (0x1 << 10) 50 #define BIT_11 (0x1 << 11) 51 #define BIT_12 (0x1 << 12) 52 #define BIT_13 (0x1 << 13) 53 #define BIT_14 (0x1 << 14) 54 #define BIT_15 (0x1 << 15) 55 #define BIT_16 (0x1 << 16) 56 #define BIT_17 (0x1 << 17) 57 #define BIT_18 (0x1 << 18) 58 #define BIT_19 (0x1 << 19) 59 #define BIT_20 (0x1 << 20) 60 #define BIT_21 (0x1 << 21) 61 #define BIT_22 (0x1 << 22) 62 #define BIT_23 (0x1 << 23) 63 #define BIT_24 (0x1 << 24) 64 #define BIT_25 (0x1 << 25) 65 #define BIT_11 (0x1 << 11) 66 #define BIT_12 (0x1 << 12) 67 #define BIT_13 (0x1 << 13) 68 #define BIT_14 (0x1 << 14) 69 #define BIT_15 (0x1 << 15) 70 #define BIT_16 (0x1 << 16) 71 #define BIT_17 (0x1 << 17) 72 #define BIT_18 (0x1 << 18) 73 #define BIT_19 (0x1 << 19) 74 #define BIT_20 (0x1 << 20) 75 #define BIT_21 (0x1 << 21) 76 #define BIT_22 (0x1 << 22) 77 #define BIT_23 (0x1 << 23) 78 #define BIT_24 (0x1 << 24) 79 #define BIT_25 (0x1 << 25) 80 #define BIT_26 (0x1 << 26) 81 #define BIT_27 (0x1 << 27) 82 #define BIT_28 (0x1 << 28) 83 #define BIT_29 (0x1 << 29) 84 #define BIT_30 (0x1 << 30) 85 #define BIT_31 (0x1 << 31) 86 87 88 /* 89 * Firmware Interface 90 */ 91 92 /********************************************************************* 93 * Work Queue Register Map 94 *********************************************************************/ 95 #define Q81_WRKQ_INDEX_REG 0x00 96 #define Q81_WRKQ_CONS_INDEX_MASK 0xFFFF0000 97 #define Q81_WRKQ_PROD_INDEX_MASK 0x0000FFFF 98 #define Q81_WRKQ_VALID_REG 0x04 99 #define Q81_WRKQ_VALID_ONQ BIT_25 100 #define Q81_WRKQ_VALID_V BIT_4 101 102 /********************************************************************* 103 * Completion Queue Register Map 104 *********************************************************************/ 105 #define Q81_COMPQ_INDEX_REG 0x00 106 #define Q81_COMPQ_PROD_INDEX_MASK 0xFFFF0000 107 #define Q81_COMPQ_CONS_INDEX_MASK 0x0000FFFF 108 #define Q81_COMPQ_VALID_REG 0x04 109 #define Q81_COMPQ_VALID_V BIT_4 110 #define Q81_LRGBQ_INDEX_REG 0x18 111 #define Q81_LRGBQ_CONS_INDEX_MASK 0xFFFF0000 112 #define Q81_LRGBQ_PROD_INDEX_MASK 0x0000FFFF 113 #define Q81_SMBQ_INDEX_REG 0x1C 114 #define Q81_SMBQ_CONS_INDEX_MASK 0xFFFF0000 115 #define Q81_SMBQ_PROD_INDEX_MASK 0x0000FFFF 116 117 /********************************************************************* 118 * Control Register Definitions 119 * (Access, Function Specific, Shared via Semaphore, Control by MPI FW) 120 *********************************************************************/ 121 #define Q81_CTL_PROC_ADDR 0x00 /* R/W - Y - */ 122 #define Q81_CTL_PROC_DATA 0x04 /* R/W - Y - */ 123 #define Q81_CTL_SYSTEM 0x08 /* MWR - - - */ 124 #define Q81_CTL_RESET 0x0C /* MWR Y - - */ 125 #define Q81_CTL_FUNC_SPECIFIC 0x10 /* MWR Y - - */ 126 #define Q81_CTL_HOST_CMD_STATUS 0x14 /* R/W Y - - */ 127 #define Q81_CTL_LED 0x18 /* R/W Y - Y */ 128 #define Q81_CTL_ICB_ACCESS_ADDR_LO 0x20 /* R/W - Y - */ 129 #define Q81_CTL_ICB_ACCESS_ADDR_HI 0x24 /* R/W - Y - */ 130 #define Q81_CTL_CONFIG 0x28 /* MWR - - - */ 131 #define Q81_CTL_STATUS 0x30 /* MWR Y - - */ 132 #define Q81_CTL_INTR_ENABLE 0x34 /* MWR Y - - */ 133 #define Q81_CTL_INTR_MASK 0x38 /* MWR Y - - */ 134 #define Q81_CTL_INTR_STATUS1 0x3C /* RO Y - - */ 135 #define Q81_CTL_INTR_STATUS2 0x40 /* RO Y - - */ 136 #define Q81_CTL_INTR_STATUS3 0x44 /* RO Y - - */ 137 #define Q81_CTL_INTR_STATUS4 0x48 /* RO Y - - */ 138 #define Q81_CTL_REV_ID 0x4C /* RO - - - */ 139 #define Q81_CTL_FATAL_ERR_STATUS 0x54 /* RO Y - - */ 140 #define Q81_CTL_COR_ECC_ERR_COUNTER 0x60 /* RO Y - - */ 141 #define Q81_CTL_SEMAPHORE 0x64 /* MWR Y - - */ 142 #define Q81_CTL_GPIO1 0x68 /* MWR Y - - */ 143 #define Q81_CTL_GPIO2 0x6C /* MWR Y - - */ 144 #define Q81_CTL_GPIO3 0x70 /* MWR Y - - */ 145 #define Q81_CTL_XGMAC_ADDR 0x78 /* R/W Y Y - */ 146 #define Q81_CTL_XGMAC_DATA 0x7C /* R/W Y Y Y */ 147 #define Q81_CTL_NIC_ENH_TX_SCHD 0x80 /* R/W Y - Y */ 148 #define Q81_CTL_CNA_ENH_TX_SCHD 0x84 /* R/W Y - Y */ 149 #define Q81_CTL_FLASH_ADDR 0x88 /* R/W - Y - */ 150 #define Q81_CTL_FLASH_DATA 0x8C /* R/W - Y - */ 151 #define Q81_CTL_STOP_CQ_PROCESSING 0x90 /* MWR Y - - */ 152 #define Q81_CTL_MAC_PROTO_ADDR_INDEX 0xA8 /* R/W - Y - */ 153 #define Q81_CTL_MAC_PROTO_ADDR_DATA 0xAC /* R/W - Y - */ 154 #define Q81_CTL_COS_DEF_CQ1 0xB0 /* R/W Y - - */ 155 #define Q81_CTL_COS_DEF_CQ2 0xB4 /* R/W Y - - */ 156 #define Q81_CTL_ETHERTYPE_SKIP_1 0xB8 /* R/W Y - - */ 157 #define Q81_CTL_ETHERTYPE_SKIP_2 0xBC /* R/W Y - - */ 158 #define Q81_CTL_SPLIT_HDR 0xC0 /* R/W Y - - */ 159 #define Q81_CTL_NIC_PAUSE_THRES 0xC8 /* R/W Y - Y */ 160 #define Q81_CTL_NIC_RCV_CONFIG 0xD4 /* MWR Y - Y */ 161 #define Q81_CTL_COS_TAGS_IN_NIC_FIFO 0xDC /* R/W Y - Y */ 162 #define Q81_CTL_MGMT_RCV_CONFIG 0xE0 /* MWR Y - Y */ 163 #define Q81_CTL_ROUTING_INDEX 0xE4 /* R/W Y Y - */ 164 #define Q81_CTL_ROUTING_DATA 0xE8 /* R/W Y Y - */ 165 #define Q81_CTL_XG_SERDES_ADDR 0xF0 /* R/W Y Y Y */ 166 #define Q81_CTL_XG_SERDES_DATA 0xF4 /* R/W Y Y Y */ 167 #define Q81_CTL_XG_PROBE_MUX_ADDR 0xF8 /* R/W - Y - */ 168 #define Q81_CTL_XG_PROBE_MUX_DATA 0xFC /* R/W - Y - */ 169 170 171 /* 172 * Process Address Register (0x00) 173 */ 174 #define Q81_CTL_PROC_ADDR_RDY BIT_31 175 #define Q81_CTL_PROC_ADDR_READ BIT_30 176 #define Q81_CTL_PROC_ADDR_ERR BIT_29 177 #define Q81_CTL_PROC_ADDR_MPI_RISC (0x00 << 16) 178 #define Q81_CTL_PROC_ADDR_MDE (0x01 << 16) 179 #define Q81_CTL_PROC_ADDR_REG_BLOCK (0x02 << 16) 180 #define Q81_CTL_PROC_ADDR_RISC_INT_REG (0x03 << 16) 181 182 183 /* 184 * System Register (0x08) 185 */ 186 #define Q81_CTL_SYSTEM_MASK_SHIFT 16 187 #define Q81_CTL_SYSTEM_ENABLE_VQM_WR BIT_5 188 #define Q81_CTL_SYSTEM_ENABLE_DWC BIT_4 189 #define Q81_CTL_SYSTEM_ENABLE_DA_SINGLE_THRD BIT_3 190 #define Q81_CTL_SYSTEM_ENABLE_MDC BIT_2 191 #define Q81_CTL_SYSTEM_ENABLE_FAE BIT_1 192 #define Q81_CTL_SYSTEM_ENABLE_EFE BIT_0 193 194 /* 195 * Reset Register (0x0C) 196 */ 197 #define Q81_CTL_RESET_MASK_SHIFT 16 198 #define Q81_CTL_RESET_FUNC BIT_15 199 #define Q81_CTL_RESET_RR_SHIFT 1 200 201 /* 202 * Function Specific Control Register (0x10) 203 */ 204 #define Q81_CTL_FUNC_SPECIFIC_MASK_SHIFT 16 205 206 #define Q81_CTL_FUNC_SPECIFIC_FE BIT_15 207 #define Q81_CTL_FUNC_SPECIFIC_STE BIT_13 208 #define Q81_CTL_FUNC_SPECIFIC_DSB BIT_12 209 #define Q81_CTL_FUNC_SPECIFIC_SH BIT_11 210 211 #define Q81_CTL_FUNC_SPECIFIC_VM_PGSIZE_MASK (0x7 << 8) 212 #define Q81_CTL_FUNC_SPECIFIC_VM_PGSIZE_2K (0x1 << 8) 213 #define Q81_CTL_FUNC_SPECIFIC_VM_PGSIZE_4K (0x2 << 8) 214 #define Q81_CTL_FUNC_SPECIFIC_VM_PGSIZE_8K (0x3 << 8) 215 #define Q81_CTL_FUNC_SPECIFIC_VM_PGSIZE_64K (0x6 << 8) 216 217 #define Q81_CTL_FUNC_SPECIFIC_EPC_O BIT_7 218 #define Q81_CTL_FUNC_SPECIFIC_EPC_I BIT_6 219 #define Q81_CTL_FUNC_SPECIFIC_EC BIT_5 220 #define Q81_CTL_FUNC_SPECIFIC_DBL_DBRST (0x00 << 3) 221 #define Q81_CTL_FUNC_SPECIFIC_DBL_MAX_PAYLDSZ (0x01 << 3) 222 #define Q81_CTL_FUNC_SPECIFIC_DBL_MAX_RDBRSTSZ (0x02 << 3) 223 #define Q81_CTL_FUNC_SPECIFIC_DBL_128 (0x03 << 3) 224 #define Q81_CTL_FUNC_SPECIFIC_DBRST_256 0x00 225 #define Q81_CTL_FUNC_SPECIFIC_DBRST_512 0x01 226 #define Q81_CTL_FUNC_SPECIFIC_DBRST_768 0x02 227 #define Q81_CTL_FUNC_SPECIFIC_DBRST_1024 0x03 228 229 230 /* 231 * Host Command/Status Register (0x14) 232 */ 233 #define Q81_CTL_HCS_CMD_NOP (0x00 << 28) 234 #define Q81_CTL_HCS_CMD_SET_RISC_RESET (0x01 << 28) 235 #define Q81_CTL_HCS_CMD_CLR_RISC_RESET (0x02 << 28) 236 #define Q81_CTL_HCS_CMD_SET_RISC_PAUSE (0x03 << 28) 237 #define Q81_CTL_HCS_CMD_CLR_RISC_PAUSE (0x04 << 28) 238 #define Q81_CTL_HCS_CMD_SET_HTR_INTR (0x05 << 28) 239 #define Q81_CTL_HCS_CMD_CLR_HTR_INTR (0x06 << 28) 240 #define Q81_CTL_HCS_CMD_SET_PARITY_EN (0x07 << 28) 241 #define Q81_CTL_HCS_CMD_FORCE_BAD_PARITY (0x08 << 28) 242 #define Q81_CTL_HCS_CMD_CLR_BAD_PARITY (0x09 << 28) 243 #define Q81_CTL_HCS_CMD_CLR_RTH_INTR (0x0A << 28) 244 245 #define Q81_CTL_HCS_CMD_PAR_SHIFT 22 246 #define Q81_CTL_HCS_RISC_PAUSED BIT_10 247 #define Q81_CTL_HCS_HTR_INTR BIT_9 248 #define Q81_CTL_HCS_RISC_RESET BIT_8 249 #define Q81_CTL_HCS_ERR_STATUS_MASK 0x3F 250 251 252 /* 253 * Configuration Register (0x28) 254 */ 255 #define Q81_CTL_CONFIG_MASK_SHIFT 16 256 #define Q81_CTL_CONFIG_Q_NUM_SHIFT 8 257 #define Q81_CTL_CONFIG_Q_NUM_MASK (0x7F << Q81_CTL_CONFIG_Q_NUM_SHIFT) 258 #define Q81_CTL_CONFIG_DCQ BIT_7 259 #define Q81_CTL_CONFIG_LCQ BIT_6 260 #define Q81_CTL_CONFIG_LE BIT_5 261 #define Q81_CTL_CONFIG_DR BIT_3 262 #define Q81_CTL_CONFIG_LR BIT_2 263 #define Q81_CTL_CONFIG_DRQ BIT_1 264 #define Q81_CTL_CONFIG_LRQ BIT_0 265 266 267 /* 268 * Status Register (0x30) 269 */ 270 #define Q81_CTL_STATUS_MASK_SHIFT 16 271 #define Q81_CTL_STATUS_NFE BIT_12 272 #define Q81_CTL_STATUS_F3E BIT_11 273 #define Q81_CTL_STATUS_F2E BIT_10 274 #define Q81_CTL_STATUS_F1E BIT_9 275 #define Q81_CTL_STATUS_F0E BIT_8 276 #define Q81_CTL_STATUS_FUNC_SHIFT 6 277 #define Q81_CTL_STATUS_PI1 BIT_5 278 #define Q81_CTL_STATUS_PI0 BIT_4 279 #define Q81_CTL_STATUS_PL1 BIT_3 280 #define Q81_CTL_STATUS_PL0 BIT_2 281 #define Q81_CTL_STATUS_PI BIT_1 282 #define Q81_CTL_STATUS_FE BIT_0 283 284 /* 285 * Interrupt Enable Register (0x34) 286 */ 287 #define Q81_CTL_INTRE_MASK_SHIFT 16 288 #define Q81_CTL_INTRE_EN BIT_15 289 #define Q81_CTL_INTRE_EI BIT_14 290 #define Q81_CTL_INTRE_IHD BIT_13 291 #define Q81_CTL_INTRE_RTYPE_MASK (0x3 << 8) 292 #define Q81_CTL_INTRE_RTYPE_ENABLE (0x1 << 8) 293 #define Q81_CTL_INTRE_RTYPE_DISABLE (0x2 << 8) 294 #define Q81_CTL_INTRE_RTYPE_SETUP_TO_RD (0x3 << 8) 295 #define Q81_CTL_INTRE_HOST_INTR_MASK 0x7F 296 297 /* 298 * Interrupt Mask Register (0x38) 299 */ 300 #define Q81_CTL_INTRM_MASK_SHIFT 16 301 #define Q81_CTL_INTRM_MC BIT_7 302 #define Q81_CTL_INTRM_LSC BIT_6 303 #define Q81_CTL_INTRM_LH1 BIT_4 304 #define Q81_CTL_INTRM_HL1 BIT_3 305 #define Q81_CTL_INTRM_LH0 BIT_2 306 #define Q81_CTL_INTRM_HL0 BIT_1 307 #define Q81_CTL_INTRM_PI BIT_0 308 309 /* 310 * Interrupt Status 1 Register (0x3C) 311 */ 312 #define Q81_CTL_INTRS1_COMPQ(i) (0x1 << i) 313 314 /* 315 * Interrupt Status 2 Register (0x40) 316 */ 317 #define Q81_CTL_INTRS2_COMPQ(i) (0x1 << i) 318 319 /* 320 * Interrupt Status 3 Register (0x44) 321 */ 322 #define Q81_CTL_INTRS3_COMPQ(i) (0x1 << i) 323 324 /* 325 * Interrupt Status 4 Register (0x48) 326 */ 327 #define Q81_CTL_INTRS4_COMPQ(i) (0x1 << i) 328 329 /* 330 * Revision ID Register (0x4C) 331 */ 332 #define Q81_CTL_REV_ID_CHIP_REV_MASK (0xF << 28) 333 #define Q81_CTL_REV_ID_XGMAC_RCV_MASK (0xF << 16) 334 #define Q81_CTL_REV_ID_XGMAC_ROLL_MASK (0xF << 8) 335 #define Q81_CTL_REV_ID_NIC_REV_MASK (0xF << 4) 336 #define Q81_CTL_REV_ID_NIC_ROLL_MASK (0xF << 0) 337 338 /* 339 * Semaphore Register (0x64) 340 */ 341 342 #define Q81_CTL_SEM_MASK_PROC_ADDR_NIC_RCV 0xC0000000 343 344 #define Q81_CTL_SEM_MASK_RIDX_DATAREG 0x30000000 345 346 #define Q81_CTL_SEM_MASK_FLASH 0x03000000 347 348 #define Q81_CTL_SEM_MASK_MAC_SERDES 0x00C00000 349 350 #define Q81_CTL_SEM_MASK_ICB 0x00300000 351 352 #define Q81_CTL_SEM_MASK_XGMAC1 0x000C0000 353 354 #define Q81_CTL_SEM_MASK_XGMAC0 0x00030000 355 356 #define Q81_CTL_SEM_SET_PROC_ADDR_NIC_RCV 0x4000 357 #define Q81_CTL_SEM_SET_RIDX_DATAREG 0x1000 358 #define Q81_CTL_SEM_SET_FLASH 0x0100 359 #define Q81_CTL_SEM_SET_MAC_SERDES 0x0040 360 #define Q81_CTL_SEM_SET_ICB 0x0010 361 #define Q81_CTL_SEM_SET_XGMAC1 0x0004 362 #define Q81_CTL_SEM_SET_XGMAC0 0x0001 363 364 365 /* 366 * Flash Address Register (0x88) 367 */ 368 #define Q81_CTL_FLASH_ADDR_RDY BIT_31 369 #define Q81_CTL_FLASH_ADDR_R BIT_30 370 #define Q81_CTL_FLASH_ADDR_ERR BIT_29 371 #define Q81_CTL_FLASH_ADDR_MASK 0x7FFFFF 372 373 /* 374 * Stop CQ Processing Register (0x90) 375 */ 376 #define Q81_CTL_STOP_CQ_MASK_SHIFT 16 377 #define Q81_CTL_STOP_CQ_EN BIT_15 378 #define Q81_CTL_STOP_CQ_RQ_STARTQ (0x1 << 8) 379 #define Q81_CTL_STOP_CQ_RQ_STOPQ (0x2 << 8) 380 #define Q81_CTL_STOP_CQ_RQ_READ (0x3 << 8) 381 #define Q81_CTL_STOP_CQ_MASK 0x7F 382 383 /* 384 * MAC Protocol Address Index Register (0xA8) 385 */ 386 #define Q81_CTL_MAC_PROTO_AI_MW BIT_31 387 #define Q81_CTL_MAC_PROTO_AI_MR BIT_30 388 #define Q81_CTL_MAC_PROTO_AI_E BIT_27 389 #define Q81_CTL_MAC_PROTO_AI_RS BIT_26 390 #define Q81_CTL_MAC_PROTO_AI_ADR BIT_25 391 #define Q81_CTL_MAC_PROTO_AI_TYPE_SHIFT 16 392 #define Q81_CTL_MAC_PROTO_AI_TYPE_MASK 0xF0000 393 #define Q81_CTL_MAC_PROTO_AI_IDX_SHIFT 4 394 #define Q81_CTL_MAC_PROTO_AI_IDX_MASK 0xFFF0 395 #define Q81_CTL_MAC_PROTO_AI_OFF_MASK 0xF 396 397 #define Q81_CTL_MAC_PROTO_AI_TYPE_CAM_MAC (0 << 16) 398 #define Q81_CTL_MAC_PROTO_AI_TYPE_MCAST (1 << 16) 399 #define Q81_CTL_MAC_PROTO_AI_TYPE_VLAN (2 << 16) 400 #define Q81_CTL_MAC_PROTO_AI_TYPE_MCAST_FILTER (3 << 16) 401 #define Q81_CTL_MAC_PROTO_AI_TYPE_MGMT_MAC (5 << 16) 402 #define Q81_CTL_MAC_PROTO_AI_TYPE_MGMMT_VLAN (6 << 16) 403 #define Q81_CTL_MAC_PROTO_AI_TYPE_MGMT_IPV4 (7 << 16) 404 #define Q81_CTL_MAC_PROTO_AI_TYPE_MGMT_IPV6 (8 << 16) 405 #define Q81_CTL_MAC_PROTO_AI_TYPE_MGMT_PORT (9 << 16) /* TCP/UDP Port */ 406 407 /* 408 * CAM MAC offset 2 definitions 409 */ 410 #define Q81_CAM_MAC_OFF2_ROUTE_FC 0x00000000 411 #define Q81_CAM_MAC_OFF2_ROUTE_NIC 0x00000001 412 #define Q81_CAM_MAC_OFF2_FUNC_SHIFT 2 413 #define Q81_CAM_MAC_OFF2_RV 0x00000010 414 #define Q81_CAM_MAC_OFF2_CQID_SHIFT 5 415 #define Q81_CAM_MAC_OFF2_SH 0x00008000 416 #define Q81_CAM_MAC_OFF2_MHT 0x40000000 417 #define Q81_CAM_MAC_OFF2_VLD 0x80000000 418 419 /* 420 * NIC Pause Threshold Register (0xC8) 421 */ 422 #define Q81_CTL_NIC_PAUSE_THRES_PAUSE_SHIFT 16 423 #define Q81_CTL_NIC_PAUSE_THRES_RESUME_SHIFT 0 424 425 /* 426 * NIC Receive Configuration Register (0xD4) 427 */ 428 #define Q81_CTL_NIC_RCVC_MASK_SHIFT 16 429 #define Q81_CTL_NIC_RCVC_DCQ_SHIFT 8 430 #define Q81_CTL_NIC_RCVC_DCQ_MASK 0x7F00 431 #define Q81_CTL_NIC_RCVC_DTP BIT_5 432 #define Q81_CTL_NIC_RCVC_R4T BIT_4 433 #define Q81_CTL_NIC_RCVC_RV BIT_3 434 #define Q81_CTL_NIC_RCVC_VLAN_ALL (0x0 << 1) 435 #define Q81_CTL_NIC_RCVC_VLAN_ONLY (0x1 << 1) 436 #define Q81_CTL_NIC_RCVC_VLAN_NON_VLAN (0x2 << 1) 437 #define Q81_CTL_NIC_RCVC_VLAN_REJECT (0x3 << 1) 438 #define Q81_CTL_NIC_RCVC_PPE BIT_0 439 440 441 /* 442 * Routing Index Register (0xE4) 443 */ 444 #define Q81_CTL_RI_MW BIT_31 445 #define Q81_CTL_RI_MR BIT_30 446 #define Q81_CTL_RI_E BIT_27 447 #define Q81_CTL_RI_RS BIT_26 448 449 #define Q81_CTL_RI_DST_RSS (0x00 << 20) 450 #define Q81_CTL_RI_DST_CAMQ (0x01 << 20) 451 #define Q81_CTL_RI_DST_COSQ (0x02 << 20) 452 #define Q81_CTL_RI_DST_DFLTQ (0x03 << 20) 453 #define Q81_CTL_RI_DST_DESTQ (0x04 << 20) 454 #define Q81_CTL_RI_DST_DROP (0x07 << 20) 455 456 #define Q81_CTL_RI_TYPE_RTMASK (0x00 << 16) 457 #define Q81_CTL_RI_TYPE_RTINVMASK (0x01 << 16) 458 #define Q81_CTL_RI_TYPE_NICQMASK (0x02 << 16) 459 #define Q81_CTL_RI_TYPE_NICQINVMASK (0x03 << 16) 460 461 /* these indices for the Routing Index Register are user defined */ 462 #define Q81_CTL_RI_IDX_ALL_ERROR (0x00 << 8) 463 #define Q81_CTL_RI_IDX_MAC_ERROR (0x00 << 8) 464 #define Q81_CTL_RI_IDX_IPCSUM_ERROR (0x01 << 8) 465 #define Q81_CTL_RI_IDX_TCPCSUM_ERROR (0x02 << 8) 466 #define Q81_CTL_RI_IDX_BCAST (0x03 << 8) 467 #define Q81_CTL_RI_IDX_MCAST_MATCH (0x04 << 8) 468 #define Q81_CTL_RI_IDX_ALLMULTI (0x05 << 8) 469 #define Q81_CTL_RI_IDX_RSS_MATCH (0x08 << 8) 470 #define Q81_CTL_RI_IDX_RSS_IPV4 (0x08 << 8) 471 #define Q81_CTL_RI_IDX_RSS_IPV6 (0x09 << 8) 472 #define Q81_CTL_RI_IDX_RSS_TCPV4 (0x0A << 8) 473 #define Q81_CTL_RI_IDX_RSS_TCPV6 (0x0B << 8) 474 #define Q81_CTL_RI_IDX_CAM_HIT (0x0C << 8) 475 #define Q81_CTL_RI_IDX_PROMISCUOUS (0x0F << 8) 476 477 /* Routing Masks to be loaded into Routing Data Register */ 478 #define Q81_CTL_RD_BCAST BIT_0 479 #define Q81_CTL_RD_MCAST BIT_1 480 #define Q81_CTL_RD_MCAST_MATCH BIT_2 481 #define Q81_CTL_RD_MCAST_REG_MATCH BIT_3 482 #define Q81_CTL_RD_MCAST_HASH_MATCH BIT_4 483 #define Q81_CTL_RD_CAM_HIT BIT_7 484 #define Q81_CTL_RD_CAM_BIT0 BIT_8 485 #define Q81_CTL_RD_CAM_BIT1 BIT_9 486 #define Q81_CTL_RD_VLAN_TAG_PRESENT BIT_10 487 #define Q81_CTL_RD_VLAN_MATCH BIT_11 488 #define Q81_CTL_RD_VLAN_FILTER_PASS BIT_12 489 #define Q81_CTL_RD_SKIP_ETHERTYPE_1 BIT_13 490 #define Q81_CTL_RD_SKIP_ETHERTYPE_2 BIT_14 491 #define Q81_CTL_RD_BCAST_OR_MCAST_MATCH BIT_15 492 #define Q81_CTL_RD_802_3_PKT BIT_16 493 #define Q81_CTL_RD_LLDP_PKT BIT_17 494 #define Q81_CTL_RD_TUNNELED_PKT BIT_18 495 #define Q81_CTL_RD_ERROR_PKT BIT_22 496 #define Q81_CTL_RD_VALID_PKT BIT_23 497 #define Q81_CTL_RD_TCP_UDP_CSUM_ERR BIT_24 498 #define Q81_CTL_RD_IPCSUM_ERR BIT_25 499 #define Q81_CTL_RD_MAC_ERR BIT_26 500 #define Q81_CTL_RD_RSS_TCP_IPV6 BIT_27 501 #define Q81_CTL_RD_RSS_TCP_IPV4 BIT_28 502 #define Q81_CTL_RD_RSS_IPV6 BIT_29 503 #define Q81_CTL_RD_RSS_IPV4 BIT_30 504 #define Q81_CTL_RD_RSS_MATCH BIT_31 505 506 507 /********************************************************************* 508 * Host Data Structures * 509 *********************************************************************/ 510 511 /* 512 * Work Queue Initialization Control Block 513 */ 514 515 typedef struct _q81_wq_icb { 516 517 uint16_t length_v; 518 #define Q81_WQ_ICB_VALID BIT_4 519 520 uint8_t pri; 521 #define Q81_WQ_ICB_PRI_SHIFT 1 522 523 uint8_t flags; 524 #define Q81_WQ_ICB_FLAGS_LO BIT_7 525 #define Q81_WQ_ICB_FLAGS_LI BIT_6 526 #define Q81_WQ_ICB_FLAGS_LB BIT_5 527 #define Q81_WQ_ICB_FLAGS_LC BIT_4 528 529 uint16_t wqcqid_rss; 530 #define Q81_WQ_ICB_RSS_V BIT_15 531 532 uint16_t rsrvd; 533 534 uint32_t baddr_lo; 535 uint32_t baddr_hi; 536 537 uint32_t ci_addr_lo; 538 uint32_t ci_addr_hi; 539 } __packed q81_wq_icb_t; 540 541 542 /* 543 * Completion Queue Initialization Control Block 544 */ 545 546 typedef struct _q81_cq_icb { 547 uint8_t msix_vector; 548 uint16_t rsrvd0; 549 uint8_t flags; 550 #define Q81_CQ_ICB_FLAGS_LC BIT_7 551 #define Q81_CQ_ICB_FLAGS_LI BIT_6 552 #define Q81_CQ_ICB_FLAGS_LL BIT_5 553 #define Q81_CQ_ICB_FLAGS_LS BIT_4 554 #define Q81_CQ_ICB_FLAGS_LV BIT_3 555 556 uint16_t length_v; 557 #define Q81_CQ_ICB_VALID BIT_4 558 559 uint16_t rsrvd1; 560 561 uint32_t cq_baddr_lo; 562 uint32_t cq_baddr_hi; 563 564 uint32_t cqi_addr_lo; 565 uint32_t cqi_addr_hi; 566 567 uint16_t pkt_idelay; 568 uint16_t idelay; 569 570 uint32_t lbq_baddr_lo; 571 uint32_t lbq_baddr_hi; 572 uint16_t lbq_bsize; 573 uint16_t lbq_length; 574 575 uint32_t sbq_baddr_lo; 576 uint32_t sbq_baddr_hi; 577 uint16_t sbq_bsize; 578 uint16_t sbq_length; 579 } __packed q81_cq_icb_t; 580 581 /* 582 * RSS Initialization Control Block 583 */ 584 typedef struct _q81_rss_icb { 585 uint16_t flags_base_cq_num; 586 #define Q81_RSS_ICB_FLAGS_L4K BIT_7 587 #define Q81_RSS_ICB_FLAGS_L6K BIT_8 588 #define Q81_RSS_ICB_FLAGS_LI BIT_9 589 #define Q81_RSS_ICB_FLAGS_LB BIT_10 590 #define Q81_RSS_ICB_FLAGS_LM BIT_11 591 #define Q81_RSS_ICB_FLAGS_RI4 BIT_12 592 #define Q81_RSS_ICB_FLAGS_RT4 BIT_13 593 #define Q81_RSS_ICB_FLAGS_RI6 BIT_14 594 #define Q81_RSS_ICB_FLAGS_RT6 BIT_15 595 596 uint16_t mask; /* bits 9-0 are valid */ 597 598 #define Q81_RSS_ICB_NUM_INDTBL_ENTRIES 1024 599 /* Indirection Table */ 600 uint8_t cq_id[Q81_RSS_ICB_NUM_INDTBL_ENTRIES]; 601 602 /* Hash Keys */ 603 uint32_t ipv6_rss_hash_key[10]; 604 uint32_t ipv4_rss_hash_key[4]; 605 } __packed q81_rss_icb_t; 606 607 608 609 /* 610 * Transmit Buffer Descriptor 611 */ 612 613 typedef struct _q81_txb_desc { 614 uint64_t baddr; 615 uint16_t length; 616 617 uint16_t flags; 618 #define Q81_TXB_DESC_FLAGS_E BIT_15 619 #define Q81_TXB_DESC_FLAGS_C BIT_14 620 621 } __packed q81_txb_desc_t; 622 623 624 /* 625 * Receive Buffer Descriptor 626 */ 627 628 typedef struct _q81_rxb_desc { 629 uint32_t baddr_lo; 630 #define Q81_RXB_DESC_BADDR_LO_S BIT_1 631 632 uint64_t baddr; 633 634 uint16_t length; 635 636 uint16_t flags; 637 #define Q81_RXB_DESC_FLAGS_E BIT_15 638 #define Q81_RXB_DESC_FLAGS_C BIT_14 639 640 } __packed q81_rxb_desc_t; 641 642 /* 643 * IOCB Types 644 */ 645 646 #define Q81_IOCB_TX_MAC 0x01 647 #define Q81_IOCB_TX_TSO 0x02 648 #define Q81_IOCB_RX 0x20 649 #define Q81_IOCB_MPI 0x21 650 #define Q81_IOCB_SYS 0x3F 651 652 653 /* 654 * IOCB Definitions 655 */ 656 657 /* 658 * MAC Tx Frame IOCB 659 * Total Size of each IOCB Entry = 4 * 32 = 128 bytes 660 */ 661 #define MAX_TX_MAC_DESC 8 662 663 typedef struct _q81_tx_mac { 664 665 uint8_t opcode; 666 667 uint16_t flags; 668 #define Q81_TX_MAC_FLAGS_D BIT_3 669 #define Q81_TX_MAC_FLAGS_I BIT_1 670 #define Q81_TX_MAC_FLAGS_OI BIT_0 671 672 uint8_t vlan_off; 673 #define Q81_TX_MAC_VLAN_OFF_SHIFT 3 674 #define Q81_TX_MAC_VLAN_OFF_V BIT_2 675 #define Q81_TX_MAC_VLAN_OFF_DFP BIT_1 676 677 uint32_t rsrvd1; 678 uint32_t rsrvd2; 679 680 uint16_t frame_length; /* only bits0-13 are valid */ 681 uint16_t rsrvd3; 682 683 uint32_t tid_lo; 684 uint32_t tid_hi; 685 686 uint32_t rsrvd4; 687 688 uint16_t vlan_tci; 689 uint16_t rsrvd5; 690 691 q81_txb_desc_t txd[MAX_TX_MAC_DESC]; 692 } __packed q81_tx_mac_t; 693 694 695 /* 696 * MAC Tx Frame with TSO IOCB 697 * Total Size of each IOCB Entry = 4 * 32 = 128 bytes 698 */ 699 typedef struct _q81_tx_tso { 700 uint8_t opcode; 701 702 uint16_t flags; 703 #define Q81_TX_TSO_FLAGS_OI BIT_0 704 #define Q81_TX_TSO_FLAGS_I BIT_1 705 #define Q81_TX_TSO_FLAGS_D BIT_3 706 #define Q81_TX_TSO_FLAGS_IPV4 BIT_6 707 #define Q81_TX_TSO_FLAGS_IPV6 BIT_7 708 #define Q81_TX_TSO_FLAGS_LSO BIT_13 709 #define Q81_TX_TSO_FLAGS_UC BIT_14 710 #define Q81_TX_TSO_FLAGS_TC BIT_15 711 712 uint8_t vlan_off; 713 #define Q81_TX_TSO_VLAN_OFF_SHIFT 3 714 #define Q81_TX_TSO_VLAN_OFF_V BIT_2 715 #define Q81_TX_TSO_VLAN_OFF_DFP BIT_1 716 #define Q81_TX_TSO_VLAN_OFF_IC BIT_0 717 718 uint32_t rsrvd1; 719 uint32_t rsrvd2; 720 721 uint32_t length; 722 uint32_t tid_lo; 723 uint32_t tid_hi; 724 725 uint16_t phdr_length; 726 727 uint16_t phdr_offsets; 728 #define Q81_TX_TSO_PHDR_SHIFT 6 729 730 uint16_t vlan_tci; 731 uint16_t mss; 732 733 q81_txb_desc_t txd[MAX_TX_MAC_DESC]; 734 } __packed q81_tx_tso_t; 735 736 typedef struct _q81_tx_cmd { 737 uint8_t bytes[128]; 738 } __packed q81_tx_cmd_t; 739 740 /* 741 * MAC TX Frame Completion 742 * Total Size of each IOCB Entry = 4 * 16 = 64 bytes 743 */ 744 745 typedef struct _q81_tx_mac_comp { 746 uint8_t opcode; 747 748 uint8_t flags; 749 #define Q81_TX_MAC_COMP_FLAGS_OI BIT_0 750 #define Q81_TX_MAC_COMP_FLAGS_I BIT_1 751 #define Q81_TX_MAC_COMP_FLAGS_E BIT_3 752 #define Q81_TX_MAC_COMP_FLAGS_S BIT_4 753 #define Q81_TX_MAC_COMP_FLAGS_L BIT_5 754 #define Q81_TX_MAC_COMP_FLAGS_P BIT_6 755 756 uint8_t rsrvd0; 757 758 uint8_t err; 759 #define Q81_TX_MAC_COMP_ERR_B BIT_7 760 761 uint32_t tid_lo; 762 uint32_t tid_hi; 763 764 uint32_t rsrvd1[13]; 765 } __packed q81_tx_mac_comp_t; 766 767 768 /* 769 * MAC TX Frame with LSO Completion 770 * Total Size of each IOCB Entry = 4 * 16 = 64 bytes 771 */ 772 773 typedef struct _q81_tx_tso_comp { 774 uint8_t opcode; 775 776 uint8_t flags; 777 #define Q81_TX_TSO_COMP_FLAGS_OI BIT_0 778 #define Q81_TX_TSO_COMP_FLAGS_I BIT_1 779 #define Q81_TX_TSO_COMP_FLAGS_E BIT_3 780 #define Q81_TX_TSO_COMP_FLAGS_S BIT_4 781 #define Q81_TX_TSO_COMP_FLAGS_P BIT_6 782 783 uint8_t rsrvd0; 784 785 uint8_t err; 786 #define Q81_TX_TSO_COMP_ERR_B BIT_7 787 788 uint32_t tid_lo; 789 uint32_t tid_hi; 790 791 uint32_t rsrvd1[13]; 792 } __packed q81_tx_tso_comp_t; 793 794 795 /* 796 * SYS - Chip Event Notification Completion 797 * Total Size of each IOCB Entry = 4 * 16 = 64 bytes 798 */ 799 800 typedef struct _q81_sys_comp { 801 uint8_t opcode; 802 803 uint8_t flags; 804 #define Q81_SYS_COMP_FLAGS_OI BIT_0 805 #define Q81_SYS_COMP_FLAGS_I BIT_1 806 807 uint8_t etype; 808 #define Q81_SYS_COMPE_LINK_UP 0x00 809 #define Q81_SYS_COMPE_LINK_DOWN 0x01 810 #define Q81_SYS_COMPE_MULTI_CAM_LOOKUP 0x06 811 #define Q81_SYS_COMPE_SOFT_ECC 0x07 812 #define Q81_SYS_COMPE_MPI_FATAL_ERROR 0x08 813 #define Q81_SYS_COMPE_MAC_INTR 0x09 814 #define Q81_SYS_COMPE_GPI0_HTOL 0x10 815 #define Q81_SYS_COMPE_GPI0_LTOH 0x20 816 #define Q81_SYS_COMPE_GPI1_HTOL 0x11 817 #define Q81_SYS_COMPE_GPI1_LTOH 0x21 818 819 uint8_t q_id; /* only bits 0-6 are valid */ 820 821 uint32_t rsrvd1[15]; 822 } __packed q81_sys_comp_t; 823 824 825 826 /* 827 * Mac Rx Packet Completion 828 * Total Size of each IOCB Entry = 4 * 16 = 64 bytes 829 */ 830 831 typedef struct _q81_rx { 832 uint8_t opcode; 833 834 uint8_t flags0; 835 #define Q81_RX_FLAGS0_OI BIT_0 836 #define Q81_RX_FLAGS0_I BIT_1 837 #define Q81_RX_FLAGS0_TE BIT_2 838 #define Q81_RX_FLAGS0_NU BIT_3 839 #define Q81_RX_FLAGS0_IE BIT_4 840 841 #define Q81_RX_FLAGS0_MCAST_MASK (0x03 << 5) 842 #define Q81_RX_FLAGS0_MCAST_NONE (0x00 << 5) 843 #define Q81_RX_FLAGS0_MCAST_HASH_MATCH (0x01 << 5) 844 #define Q81_RX_FLAGS0_MCAST_REG_MATCH (0x02 << 5) 845 #define Q81_RX_FLAGS0_MCAST_PROMISC (0x03 << 5) 846 847 #define Q81_RX_FLAGS0_B BIT_7 848 849 uint16_t flags1; 850 #define Q81_RX_FLAGS1_P BIT_0 851 #define Q81_RX_FLAGS1_V BIT_1 852 853 #define Q81_RX_FLAGS1_ERR_NONE (0x00 << 2) 854 #define Q81_RX_FLAGS1_ERR_CODE (0x01 << 2) 855 #define Q81_RX_FLAGS1_ERR_OSIZE (0x02 << 2) 856 #define Q81_RX_FLAGS1_ERR_USIZE (0x04 << 2) 857 #define Q81_RX_FLAGS1_ERR_PREAMBLE (0x05 << 2) 858 #define Q81_RX_FLAGS1_ERR_FRAMELENGTH (0x06 << 2) 859 #define Q81_RX_FLAGS1_ERR_CRC (0x07 << 2) 860 #define Q81_RX_FLAGS1_ERR_MASK (0x07 << 2) 861 862 #define Q81_RX_FLAGS1_U BIT_5 863 #define Q81_RX_FLAGS1_T BIT_6 864 #define Q81_RX_FLAGS1_FO BIT_7 865 #define Q81_RX_FLAGS1_RSS_NO_MATCH (0x00 << 8) 866 #define Q81_RX_FLAGS1_RSS_IPV4_MATCH (0x04 << 8) 867 #define Q81_RX_FLAGS1_RSS_IPV6_MATCH (0x02 << 8) 868 #define Q81_RX_FLAGS1_RSS_TCPIPV4_MATCH (0x05 << 8) 869 #define Q81_RX_FLAGS1_RSS_TCPIPV4_MATCH (0x05 << 8) 870 #define Q81_RX_FLAGS1_RSS_MATCH_MASK (0x07 << 8) 871 #define Q81_RX_FLAGS1_V4 BIT_11 872 #define Q81_RX_FLAGS1_V6 BIT_12 873 #define Q81_RX_FLAGS1_IH BIT_13 874 #define Q81_RX_FLAGS1_DS BIT_14 875 #define Q81_RX_FLAGS1_DL BIT_15 876 877 uint32_t length; 878 uint64_t b_paddr; 879 880 uint32_t rss; 881 uint16_t vlan_tag; 882 uint16_t rsrvd; 883 uint32_t rsrvd1; 884 uint32_t flags2; 885 #define Q81_RX_FLAGS2_HV BIT_13 886 #define Q81_RX_FLAGS2_HS BIT_14 887 #define Q81_RX_FLAGS2_HL BIT_15 888 889 uint32_t hdr_length; 890 uint32_t hdr_baddr_lo; 891 uint32_t hdr_baddr_hi; 892 893 } __packed q81_rx_t; 894 895 typedef struct _q81_cq_e { 896 uint8_t opcode; 897 uint8_t bytes[63]; 898 } __packed q81_cq_e_t; 899 900 typedef struct _q81_bq_addr_e { 901 uint32_t addr_lo; 902 uint32_t addr_hi; 903 } __packed q81_bq_addr_e_t; 904 905 906 /* 907 * Macros for reading and writing registers 908 */ 909 910 #if defined(__i386__) || defined(__amd64__) 911 #define Q8_MB() __asm volatile("mfence" ::: "memory") 912 #define Q8_WMB() __asm volatile("sfence" ::: "memory") 913 #define Q8_RMB() __asm volatile("lfence" ::: "memory") 914 #else 915 #define Q8_MB() 916 #define Q8_WMB() 917 #define Q8_RMB() 918 #endif 919 920 #define READ_REG32(ha, reg) bus_read_4((ha->pci_reg), reg) 921 #define READ_REG64(ha, reg) bus_read_8((ha->pci_reg), reg) 922 923 #define WRITE_REG32_ONLY(ha, reg, val) bus_write_4((ha->pci_reg), reg, val) 924 925 #define WRITE_REG32(ha, reg, val) bus_write_4((ha->pci_reg), reg, val) 926 927 #define Q81_CTL_INTRE_MASK_VALUE \ 928 (((Q81_CTL_INTRE_RTYPE_MASK | Q81_CTL_INTRE_HOST_INTR_MASK) << \ 929 Q81_CTL_INTRE_MASK_SHIFT) | Q81_CTL_INTRE_RTYPE_ENABLE) 930 931 #define Q81_ENABLE_INTR(ha, idx) \ 932 WRITE_REG32(ha, Q81_CTL_INTR_ENABLE, (Q81_CTL_INTRE_MASK_VALUE | idx)) 933 934 #define Q81_CTL_INTRD_MASK_VALUE \ 935 (((Q81_CTL_INTRE_RTYPE_MASK | Q81_CTL_INTRE_HOST_INTR_MASK) << \ 936 Q81_CTL_INTRE_MASK_SHIFT) | Q81_CTL_INTRE_RTYPE_DISABLE) 937 938 #define Q81_DISABLE_INTR(ha, idx) \ 939 WRITE_REG32(ha, Q81_CTL_INTR_ENABLE, (Q81_CTL_INTRD_MASK_VALUE | idx)) 940 941 #define Q81_WR_WQ_PROD_IDX(wq_idx, idx) bus_write_4((ha->pci_reg1),\ 942 (ha->tx_ring[wq_idx].wq_db_offset + Q81_WRKQ_INDEX_REG), idx) 943 944 #define Q81_RD_WQ_IDX(wq_idx) bus_read_4((ha->pci_reg1),\ 945 (ha->tx_ring[wq_idx].wq_db_offset + Q81_WRKQ_INDEX_REG)) 946 947 948 #define Q81_SET_WQ_VALID(wq_idx) bus_write_4((ha->pci_reg1),\ 949 (ha->tx_ring[wq_idx].wq_db_offset + Q81_WRKQ_VALID_REG),\ 950 Q81_COMPQ_VALID_V) 951 952 #define Q81_SET_WQ_INVALID(wq_idx) bus_write_4((ha->pci_reg1),\ 953 (ha->tx_ring[wq_idx].wq_db_offset + Q81_WRKQ_VALID_REG),\ 954 (~Q81_COMPQ_VALID_V)) 955 956 #define Q81_WR_CQ_CONS_IDX(cq_idx, idx) bus_write_4((ha->pci_reg1),\ 957 (ha->rx_ring[cq_idx].cq_db_offset + Q81_COMPQ_INDEX_REG), idx) 958 959 #define Q81_RD_CQ_IDX(cq_idx) bus_read_4((ha->pci_reg1),\ 960 (ha->rx_ring[cq_idx].cq_db_offset + Q81_COMPQ_INDEX_REG)) 961 962 #define Q81_SET_CQ_VALID(cq_idx) bus_write_4((ha->pci_reg1),\ 963 (ha->rx_ring[cq_idx].cq_db_offset + Q81_COMPQ_VALID_REG),\ 964 Q81_COMPQ_VALID_V) 965 966 #define Q81_SET_CQ_INVALID(cq_idx) bus_write_4((ha->pci_reg1),\ 967 (ha->rx_ring[cq_idx].cq_db_offset + Q81_COMPQ_VALID_REG),\ 968 ~Q81_COMPQ_VALID_V) 969 970 #define Q81_WR_LBQ_PROD_IDX(cq_idx, idx) bus_write_4((ha->pci_reg1),\ 971 (ha->rx_ring[cq_idx].cq_db_offset + Q81_LRGBQ_INDEX_REG), idx) 972 973 #define Q81_RD_LBQ_IDX(cq_idx) bus_read_4((ha->pci_reg1),\ 974 (ha->rx_ring[cq_idx].cq_db_offset + Q81_LRGBQ_INDEX_REG)) 975 976 #define Q81_WR_SBQ_PROD_IDX(cq_idx, idx) bus_write_4((ha->pci_reg1),\ 977 (ha->rx_ring[cq_idx].cq_db_offset + Q81_SMBQ_INDEX_REG), idx) 978 979 #define Q81_RD_SBQ_IDX(cq_idx) bus_read_4((ha->pci_reg1),\ 980 (ha->rx_ring[cq_idx].cq_db_offset + Q81_SMBQ_INDEX_REG)) 981 982 983 /* 984 * Flash Related 985 */ 986 987 #define Q81_F0_FLASH_OFFSET 0x140200 988 #define Q81_F1_FLASH_OFFSET 0x140600 989 #define Q81_FLASH_ID "8000" 990 991 typedef struct _q81_flash { 992 993 uint8_t id[4]; /* equal to "8000" */ 994 995 uint16_t version; 996 uint16_t size; 997 uint16_t csum; 998 uint16_t rsrvd0; 999 uint16_t total_size; 1000 uint16_t nentries; 1001 1002 uint8_t dtype0; 1003 uint8_t dsize0; 1004 uint8_t mac_addr0[6]; 1005 1006 uint8_t dtype1; 1007 uint8_t dsize1; 1008 uint8_t mac_addr1[6]; 1009 1010 uint8_t dtype2; 1011 uint8_t dsize2; 1012 uint16_t vlan_id; 1013 1014 uint8_t dtype3; 1015 uint8_t dsize3; 1016 uint16_t last; 1017 1018 uint8_t rsrvd1[464]; 1019 1020 uint16_t subsys_vid; 1021 uint16_t subsys_did; 1022 1023 uint8_t rsrvd2[4]; 1024 } __packed q81_flash_t; 1025 1026 1027 /* 1028 * MPI Related 1029 */ 1030 1031 #define Q81_NUM_MBX_REGISTERS 16 1032 #define Q81_NUM_AEN_REGISTERS 9 1033 1034 #define Q81_FUNC0_MBX_IN_REG0 0x1180 1035 #define Q81_FUNC0_MBX_OUT_REG0 0x1190 1036 1037 #define Q81_FUNC1_MBX_IN_REG0 0x1280 1038 #define Q81_FUNC1_MBX_OUT_REG0 0x1290 1039 1040 #define Q81_MBX_NOP 0x0000 1041 #define Q81_MBX_EXEC_FW 0x0002 1042 #define Q81_MBX_REG_TEST 0x0006 1043 #define Q81_MBX_VERIFY_CHKSUM 0x0007 1044 #define Q81_MBX_ABOUT_FW 0x0008 1045 #define Q81_MBX_RISC_MEMCPY 0x000A 1046 #define Q81_MBX_LOAD_RISC_RAM 0x000B 1047 #define Q81_MBX_DUMP_RISC_RAM 0x000C 1048 #define Q81_MBX_WR_RAM_WORD 0x000D 1049 #define Q81_MBX_INIT_RISC_RAM 0x000E 1050 #define Q81_MBX_RD_RAM_WORD 0x000F 1051 #define Q81_MBX_STOP_FW 0x0014 1052 #define Q81_MBX_GEN_SYS_ERR 0x002A 1053 #define Q81_MBX_WR_SFP_PLUS 0x0030 1054 #define Q81_MBX_RD_SFP_PLUS 0x0031 1055 #define Q81_MBX_INIT_FW 0x0060 1056 #define Q81_MBX_GET_IFCB 0x0061 1057 #define Q81_MBX_GET_FW_STATE 0x0069 1058 #define Q81_MBX_IDC_REQ 0x0100 1059 #define Q81_MBX_IDC_ACK 0x0101 1060 #define Q81_MBX_IDC_TIME_EXTEND 0x0102 1061 #define Q81_MBX_WOL_MODE 0x0110 1062 #define Q81_MBX_SET_WOL_FILTER 0x0111 1063 #define Q81_MBX_CLR_WOL_FILTER 0x0112 1064 #define Q81_MBX_SET_WOL_MAGIC 0x0113 1065 #define Q81_MBX_WOL_MODE_IMM 0x0115 1066 #define Q81_MBX_PORT_RESET 0x0120 1067 #define Q81_MBX_SET_PORT_CFG 0x0122 1068 #define Q81_MBX_GET_PORT_CFG 0x0123 1069 #define Q81_MBX_GET_LNK_STATUS 0x0124 1070 #define Q81_MBX_SET_LED_CFG 0x0125 1071 #define Q81_MBX_GET_LED_CFG 0x0126 1072 #define Q81_MBX_SET_DCBX_CTLB 0x0130 1073 #define Q81_MBX_GET_DCBX_CTLB 0x0131 1074 #define Q81_MBX_GET_DCBX_TLV 0x0132 1075 #define Q81_MBX_DIAG_CMDS 0x0150 1076 #define Q81_MBX_SET_MGMT_CTL 0x0160 1077 #define Q81_MBX_SET_MGMT_CTL_STOP 0x01 1078 #define Q81_MBX_SET_MGMT_CTL_RESUME 0x02 1079 #define Q81_MBX_GET_MGMT_CTL 0x0161 1080 #define Q81_MBX_GET_MGMT_CTL_MASK ~0x3 1081 #define Q81_MBX_GET_MGMT_CTL_FIFO_EMPTY 0x02 1082 #define Q81_MBX_GET_MGMT_CTL_SET_MGMT 0x01 1083 1084 #define Q81_MBX_CMD_COMPLETE 0x4000 1085 #define Q81_MBX_CMD_INVALID 0x4001 1086 #define Q81_MBX_CMD_TEST_FAILED 0x4003 1087 #define Q81_MBX_CMD_ERROR 0x4005 1088 #define Q81_MBX_CMD_PARAM_ERROR 0x4006 1089 1090 #endif /* #ifndef _QLS_HW_H_ */ 1091