1fcf3ce44SJohn Forte /* 2fcf3ce44SJohn Forte * CDDL HEADER START 3fcf3ce44SJohn Forte * 4fcf3ce44SJohn Forte * The contents of this file are subject to the terms of the 5fcf3ce44SJohn Forte * Common Development and Distribution License (the "License"). 6fcf3ce44SJohn Forte * You may not use this file except in compliance with the License. 7fcf3ce44SJohn Forte * 8fcf3ce44SJohn Forte * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9fcf3ce44SJohn Forte * or http://www.opensolaris.org/os/licensing. 10fcf3ce44SJohn Forte * See the License for the specific language governing permissions 11fcf3ce44SJohn Forte * and limitations under the License. 12fcf3ce44SJohn Forte * 13fcf3ce44SJohn Forte * When distributing Covered Code, include this CDDL HEADER in each 14fcf3ce44SJohn Forte * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15fcf3ce44SJohn Forte * If applicable, add the following below this CDDL HEADER, with the 16fcf3ce44SJohn Forte * fields enclosed by brackets "[]" replaced with your own identifying 17fcf3ce44SJohn Forte * information: Portions Copyright [yyyy] [name of copyright owner] 18fcf3ce44SJohn Forte * 19fcf3ce44SJohn Forte * CDDL HEADER END 20fcf3ce44SJohn Forte */ 21c4ddbbe1SDaniel Beauregard 22c4ddbbe1SDaniel Beauregard /* 23*4c3888b8SHans Rosenfeld * Copyright 2009-2015 QLogic Corporation. All rights reserved. 24c4ddbbe1SDaniel Beauregard * Use is subject to license terms. 25c4ddbbe1SDaniel Beauregard */ 26c4ddbbe1SDaniel Beauregard 27fcf3ce44SJohn Forte /* 28*4c3888b8SHans Rosenfeld * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. 29fcf3ce44SJohn Forte */ 30c4ddbbe1SDaniel Beauregard 31fcf3ce44SJohn Forte #ifndef _QLT_REGS_H 32fcf3ce44SJohn Forte #define _QLT_REGS_H 33fcf3ce44SJohn Forte 344558d122SViswanathan Kannappan #include <sys/stmf_defines.h> 35fcf3ce44SJohn Forte 36fcf3ce44SJohn Forte #ifdef __cplusplus 37fcf3ce44SJohn Forte extern "C" { 38fcf3ce44SJohn Forte #endif 39fcf3ce44SJohn Forte 40fcf3ce44SJohn Forte /* 41fcf3ce44SJohn Forte * Register offsets 42fcf3ce44SJohn Forte */ 43fcf3ce44SJohn Forte #define REG_FLASH_ADDR 0x00 44fcf3ce44SJohn Forte #define REG_FLASH_DATA 0x04 45fcf3ce44SJohn Forte #define REG_CTRL_STATUS 0x08 46fcf3ce44SJohn Forte #define REG_INTR_CTRL 0x0C 47fcf3ce44SJohn Forte #define REG_INTR_STATUS 0x10 48*4c3888b8SHans Rosenfeld 49fcf3ce44SJohn Forte #define REG_REQ_IN_PTR 0x1C 50fcf3ce44SJohn Forte #define REG_REQ_OUT_PTR 0x20 51fcf3ce44SJohn Forte #define REG_RESP_IN_PTR 0x24 52fcf3ce44SJohn Forte #define REG_RESP_OUT_PTR 0x28 53fcf3ce44SJohn Forte #define REG_PREQ_IN_PTR 0x2C 54fcf3ce44SJohn Forte #define REG_PREQ_OUT_PTR 0x30 55fcf3ce44SJohn Forte #define REG_ATIO_IN_PTR 0x3C 56fcf3ce44SJohn Forte #define REG_ATIO_OUT_PTR 0x40 57*4c3888b8SHans Rosenfeld 58fcf3ce44SJohn Forte #define REG_RISC_STATUS 0x44 59fcf3ce44SJohn Forte #define REG_HCCR 0x48 60fcf3ce44SJohn Forte #define REG_GPIO_DATA 0x4C 61fcf3ce44SJohn Forte #define REG_GPIO_ENABLE 0x50 62fcf3ce44SJohn Forte #define REG_IOBUS_BASE_ADDR 0x54 63fcf3ce44SJohn Forte #define REG_HOST_SEMA 0x58 64fcf3ce44SJohn Forte #define REG_MBOX0 0x80 65fcf3ce44SJohn Forte 66fcf3ce44SJohn Forte #define REG_MBOX(n) (REG_MBOX0 + (n << 1)) 67fcf3ce44SJohn Forte 68fcf3ce44SJohn Forte #define MAX_MBOXES 32 69fcf3ce44SJohn Forte 70fcf3ce44SJohn Forte /* 71fcf3ce44SJohn Forte * Ctrl Status register definitions 72fcf3ce44SJohn Forte */ 73fcf3ce44SJohn Forte #define FLASH_ERROR BIT_18 74fcf3ce44SJohn Forte #define DMA_ACTIVE_STATUS BIT_17 75fcf3ce44SJohn Forte #define DMA_SHUTDOWN_CTRL BIT_16 76fcf3ce44SJohn Forte #define FUNCTION_NUMBER BIT_15 77*4c3888b8SHans Rosenfeld #define H2RISC_INTR BIT_6 78*4c3888b8SHans Rosenfeld #define RISC_RESET BIT_5 79c4ddbbe1SDaniel Beauregard /* 80c4ddbbe1SDaniel Beauregard * #define 81XX_FUNCTION_NUMBER BIT_15 | BIT_14 | BIT_13 | BIT_12 81c4ddbbe1SDaniel Beauregard */ 82fcf3ce44SJohn Forte #define PCI_X_BUS_MODE (BIT_8 | BIT_9 | BIT_10 | BIT_11) 83fcf3ce44SJohn Forte #define PCI_X_XFER_CTRL (BIT_4 | BIT_5) 84fcf3ce44SJohn Forte #define PCI_64_BIT_SLOT BIT_2 85fcf3ce44SJohn Forte #define FLASH_WRITE_ENABLE BIT_1 86fcf3ce44SJohn Forte #define CHIP_SOFT_RESET BIT_0 87fcf3ce44SJohn Forte 88fcf3ce44SJohn Forte /* 89fcf3ce44SJohn Forte * INTR_CTRL register 90fcf3ce44SJohn Forte */ 91fcf3ce44SJohn Forte #define ENABLE_RISC_INTR BIT_3 92fcf3ce44SJohn Forte 93fcf3ce44SJohn Forte /* 94fcf3ce44SJohn Forte * INTR_STATUS register 95fcf3ce44SJohn Forte */ 96a2255df3SDaniel Beauregard #define RISC_PCI_INTR_REQUEST BIT_3 97fcf3ce44SJohn Forte 98fcf3ce44SJohn Forte /* 990ff6bfafSDaniel Beauregard * RISC_STATUS register 1000ff6bfafSDaniel Beauregard */ 101a2255df3SDaniel Beauregard #define FW_INTR_INFO_MASK (BIT_15 | BIT_14 | BIT_13 | BIT_12 | \ 102a2255df3SDaniel Beauregard BIT_11 | BIT_10 | BIT_9 | BIT_8 | \ 103a2255df3SDaniel Beauregard BIT_7 | BIT_6 | BIT_5 | BIT_4 | \ 104a2255df3SDaniel Beauregard BIT_3 | BIT_2 | BIT_1) 105a2255df3SDaniel Beauregard #define FW_INTR_INFO_SHIFT 18 106a2255df3SDaniel Beauregard 107a2255df3SDaniel Beauregard #define FW_INTR_INFO(status) (status & (FW_INTR_INFO_MASK << \ 108a2255df3SDaniel Beauregard FW_INTR_INFO_SHIFT)) 1090ff6bfafSDaniel Beauregard #define RISC_HOST_INTR_REQUEST BIT_15 110a2255df3SDaniel Beauregard #define RISC_PAUSED BIT_8 111a2255df3SDaniel Beauregard 1120ff6bfafSDaniel Beauregard #define FW_INTR_STATUS_MASK (BIT_7 | BIT_6 | BIT_5 | BIT_4 | \ 1130ff6bfafSDaniel Beauregard BIT_3 | BIT_2 | BIT_1 | BIT_0) 1140ff6bfafSDaniel Beauregard 115a2255df3SDaniel Beauregard #define ROM_MBX_CMD_SUCCESSFUL 0x01 116a2255df3SDaniel Beauregard #define ROM_MBX_CMD_NOT_SUCCESSFUL 0x02 117a2255df3SDaniel Beauregard #define MBX_CMD_SUCCESSFUL 0x10 118a2255df3SDaniel Beauregard #define MBX_CMD_NOT_SUCCESSFUL 0x11 119a2255df3SDaniel Beauregard #define ASYNC_EVENT 0x12 120a2255df3SDaniel Beauregard #define RESP_Q_UPDATE 0x13 121a2255df3SDaniel Beauregard #define ATIO_Q_UPDATE 0x1c 122a2255df3SDaniel Beauregard #define RESP_ATIO_Q_UPDATE 0x1d 123a2255df3SDaniel Beauregard 124*4c3888b8SHans Rosenfeld 125*4c3888b8SHans Rosenfeld /* 126*4c3888b8SHans Rosenfeld * Firmware state codes from get firmware state mailbox command 127*4c3888b8SHans Rosenfeld */ 128*4c3888b8SHans Rosenfeld #define FSTATE_CONFIG_WAIT 0 129*4c3888b8SHans Rosenfeld #define FSTATE_WAIT_AL_PA 1 130*4c3888b8SHans Rosenfeld #define FSTATE_WAIT_LOGIN 2 131*4c3888b8SHans Rosenfeld #define FSTATE_READY 3 132*4c3888b8SHans Rosenfeld #define FSTATE_LOSS_SYNC 4 133*4c3888b8SHans Rosenfeld #define FSTATE_ERROR 5 134*4c3888b8SHans Rosenfeld #define FSTATE_NON_PART 7 135*4c3888b8SHans Rosenfeld 136*4c3888b8SHans Rosenfeld #define FSTATE_MPI_NIC_ERROR 0x10 137*4c3888b8SHans Rosenfeld 138*4c3888b8SHans Rosenfeld 139a2255df3SDaniel Beauregard /* 140a2255df3SDaniel Beauregard * Mailbox command completion status. 141a2255df3SDaniel Beauregard */ 142a2255df3SDaniel Beauregard #define QLT_MBX_CMD_SUCCESS 0x4000 143a2255df3SDaniel Beauregard 144*4c3888b8SHans Rosenfeld 1450ff6bfafSDaniel Beauregard /* 146fcf3ce44SJohn Forte * HCCR commands 147fcf3ce44SJohn Forte */ 148a2255df3SDaniel Beauregard #define NOP 0x00 149a2255df3SDaniel Beauregard #define SET_RISC_RESET 0x01 150a2255df3SDaniel Beauregard #define CLEAR_RISC_RESET 0x02 151a2255df3SDaniel Beauregard #define SET_RISC_PAUSE 0x03 152a2255df3SDaniel Beauregard #define CLEAR_RISC_PAUSE 0x04 153a2255df3SDaniel Beauregard #define SET_HOST_TO_RISC_INTR 0x05 154a2255df3SDaniel Beauregard #define CLEAR_HOST_TO_RISC_INTR 0x06 155a2255df3SDaniel Beauregard #define CLEAR_RISC_TO_PCI_INTR 0x0A 156a2255df3SDaniel Beauregard 157a2255df3SDaniel Beauregard #define HCCR_CMD_SHIFT 28 158a2255df3SDaniel Beauregard #define HCCR_CMD(cmd) ((uint32_t)cmd << HCCR_CMD_SHIFT) 159fcf3ce44SJohn Forte 160*4c3888b8SHans Rosenfeld /* 161*4c3888b8SHans Rosenfeld * ISP8100/83xx Multi-Queue MBAR definitions 162*4c3888b8SHans Rosenfeld */ 163*4c3888b8SHans Rosenfeld #define MQBAR_REQ_IN 0x0 164*4c3888b8SHans Rosenfeld #define MQBAR_REQ_OUT 0x4 165*4c3888b8SHans Rosenfeld #define MQBAR_RESP_IN 0x8 166*4c3888b8SHans Rosenfeld #define MQBAR_RESP_OUT 0xc 167*4c3888b8SHans Rosenfeld 168*4c3888b8SHans Rosenfeld #define MQBAR_ATIO_IN 0x10 169*4c3888b8SHans Rosenfeld #define MQBAR_ATIO_OUT 0x14 170*4c3888b8SHans Rosenfeld 171*4c3888b8SHans Rosenfeld /* 83xx uses 32 bytes per queue pair */ 172*4c3888b8SHans Rosenfeld #define MQBAR_REG_SIZE 0x20 173*4c3888b8SHans Rosenfeld #define MQBAR_REG_OFFSET 4096 174*4c3888b8SHans Rosenfeld 175*4c3888b8SHans Rosenfeld #define MQ_MAX_QUEUES 8 176*4c3888b8SHans Rosenfeld 1770ff6bfafSDaniel Beauregard 178fcf3ce44SJohn Forte /* 179fcf3ce44SJohn Forte * Flash/NVRAM definitions 180fcf3ce44SJohn Forte */ 181fcf3ce44SJohn Forte #define FLASH_DATA_FLAG BIT_31 182*4c3888b8SHans Rosenfeld 183fcf3ce44SJohn Forte #define FLASH_CONF_ADDR 0x7FFD0000 184*4c3888b8SHans Rosenfeld 185fcf3ce44SJohn Forte #define FLASH_DATA_ADDR 0x7FF00000 186*4c3888b8SHans Rosenfeld 187*4c3888b8SHans Rosenfeld #define FLASH_2400_DATA_ADDR 0x7FF00000 188*4c3888b8SHans Rosenfeld #define FLASH_2500_DATA_ADDR 0x7FF00000 189*4c3888b8SHans Rosenfeld #define FLASH_2700_DATA_ADDR 0x7F800000 190*4c3888b8SHans Rosenfeld #define FLASH_8100_DATA_ADDR 0x7F800000 191*4c3888b8SHans Rosenfeld #define FLASH_8200_DATA_ADDR 0 192*4c3888b8SHans Rosenfeld #define FLASH_8300_DATA_ADDR 0x7F800000 193*4c3888b8SHans Rosenfeld 194c4ddbbe1SDaniel Beauregard #define FLASH_DATA_ADDR_81XX 0x7F8D0000 195*4c3888b8SHans Rosenfeld /* 0x7F80000 + 0xD0000 */ 196*4c3888b8SHans Rosenfeld #define FLASH_DATA_ADDR_83XX 0x7FA70000 197*4c3888b8SHans Rosenfeld /* 0x7F80000 + 0x270000 */ 198*4c3888b8SHans Rosenfeld 199fcf3ce44SJohn Forte #define NVRAM_CONF_ADDR 0x7FFF0000 200fcf3ce44SJohn Forte #define NVRAM_DATA_ADDR 0x7FFE0000 201fcf3ce44SJohn Forte 202*4c3888b8SHans Rosenfeld #define NVRAM_2400_FUNC0_ADDR 0x80 203*4c3888b8SHans Rosenfeld #define NVRAM_2400_FUNC1_ADDR 0x180 204*4c3888b8SHans Rosenfeld 205*4c3888b8SHans Rosenfeld #define NVRAM_2500_FUNC0_ADDR 0x48080 206*4c3888b8SHans Rosenfeld #define NVRAM_2500_FUNC1_ADDR 0x48180 207*4c3888b8SHans Rosenfeld 208*4c3888b8SHans Rosenfeld #define NVRAM_2700_FUNC0_ADDR 0x270080 209*4c3888b8SHans Rosenfeld #define NVRAM_2700_FUNC1_ADDR 0x270180 210*4c3888b8SHans Rosenfeld #define NVRAM_2700_FUNC2_ADDR 0x270280 211*4c3888b8SHans Rosenfeld #define NVRAM_2700_FUNC3_ADDR 0x270380 212*4c3888b8SHans Rosenfeld 213*4c3888b8SHans Rosenfeld #define NVRAM_8100_FUNC0_ADDR 0xD0080 214*4c3888b8SHans Rosenfeld #define NVRAM_8100_FUNC1_ADDR 0xD0180 215*4c3888b8SHans Rosenfeld 216*4c3888b8SHans Rosenfeld #define NVRAM_8300_FC_FUNC0_ADDR 0x270080 217*4c3888b8SHans Rosenfeld #define NVRAM_8300_FC_FUNC1_ADDR 0x270180 218*4c3888b8SHans Rosenfeld 219*4c3888b8SHans Rosenfeld #define NVRAM_8300_FCOE_FUNC0_ADDR 0x274080 220*4c3888b8SHans Rosenfeld #define NVRAM_8300_FCOE_FUNC1_ADDR 0x274180 221*4c3888b8SHans Rosenfeld 222fcf3ce44SJohn Forte #define NVRAM_FUNC0_ADDR (NVRAM_DATA_ADDR + 0x80) 223fcf3ce44SJohn Forte #define NVRAM_FUNC1_ADDR (NVRAM_DATA_ADDR + 0x180) 224fcf3ce44SJohn Forte 225fcf3ce44SJohn Forte #define QLT25_NVRAM_FUNC0_ADDR (FLASH_DATA_ADDR + 0x48080) 226fcf3ce44SJohn Forte #define QLT25_NVRAM_FUNC1_ADDR (FLASH_DATA_ADDR + 0x48180) 227fcf3ce44SJohn Forte 228*4c3888b8SHans Rosenfeld #define QLT27_NVRAM_FUNC0_ADDR (FLASH_2700_DATA_ADDR + 0x270080) 229*4c3888b8SHans Rosenfeld #define QLT27_NVRAM_FUNC1_ADDR (FLASH_2700_DATA_ADDR + 0x270180) 230*4c3888b8SHans Rosenfeld #define QLT27_NVRAM_FUNC2_ADDR (FLASH_2700_DATA_ADDR + 0x270280) 231*4c3888b8SHans Rosenfeld #define QLT27_NVRAM_FUNC3_ADDR (FLASH_2700_DATA_ADDR + 0x270380) 232*4c3888b8SHans Rosenfeld 233c4ddbbe1SDaniel Beauregard #define QLT81_NVRAM_FUNC0_ADDR (FLASH_DATA_ADDR_81XX + 0x80) 234c4ddbbe1SDaniel Beauregard #define QLT81_NVRAM_FUNC1_ADDR (FLASH_DATA_ADDR_81XX + 0x180) 235c4ddbbe1SDaniel Beauregard 236*4c3888b8SHans Rosenfeld #define QLT83FC_NVRAM_FUNC0_ADDR (FLASH_DATA_ADDR_83XX + 0x80) 237*4c3888b8SHans Rosenfeld #define QLT83FC_NVRAM_FUNC1_ADDR (FLASH_DATA_ADDR_83XX + 0x180) 238*4c3888b8SHans Rosenfeld 239*4c3888b8SHans Rosenfeld #define QLT83FCOE_NVRAM_FUNC0_ADDR (FLASH_DATA_ADDR_83XX + 0x4080) 240*4c3888b8SHans Rosenfeld #define QLT83FCOE_NVRAM_FUNC1_ADDR (FLASH_DATA_ADDR_83XX + 0x4180) 241*4c3888b8SHans Rosenfeld 242*4c3888b8SHans Rosenfeld #define VPD_2400_FUNC0_ADDR 0 243*4c3888b8SHans Rosenfeld #define VPD_2400_FUNC1_ADDR 0x100 244*4c3888b8SHans Rosenfeld 245*4c3888b8SHans Rosenfeld #define VPD_2500_FUNC0_ADDR 0x48000 246*4c3888b8SHans Rosenfeld #define VPD_2500_FUNC1_ADDR 0x48100 247*4c3888b8SHans Rosenfeld 248*4c3888b8SHans Rosenfeld #define VPD_2700_FUNC0_ADDR 0x270000 249*4c3888b8SHans Rosenfeld #define VPD_2700_FUNC1_ADDR 0x270100 250*4c3888b8SHans Rosenfeld #define VPD_2700_FUNC2_ADDR 0x270200 251*4c3888b8SHans Rosenfeld #define VPD_2700_FUNC3_ADDR 0x270300 252*4c3888b8SHans Rosenfeld 253*4c3888b8SHans Rosenfeld #define VPD_8100_FUNC0_ADDR 0xD0000 254*4c3888b8SHans Rosenfeld #define VPD_8100_FUNC1_ADDR 0xD0400 255*4c3888b8SHans Rosenfeld 256*4c3888b8SHans Rosenfeld #define VPD_8021_FUNC0_ADDR 0xFA300 257*4c3888b8SHans Rosenfeld #define VPD_8021_FUNC1_ADDR 0xFA300 258*4c3888b8SHans Rosenfeld 259*4c3888b8SHans Rosenfeld #define VPD_8300_FC_FUNC0_ADDR 0x270000 260*4c3888b8SHans Rosenfeld #define VPD_8300_FC_FUNC1_ADDR 0x270100 261*4c3888b8SHans Rosenfeld 262*4c3888b8SHans Rosenfeld #define VPD_8300_FCOE_FUNC0_ADDR 0x274000 263*4c3888b8SHans Rosenfeld #define VPD_8300_FCOE_FUNC1_ADDR 0x274100 264*4c3888b8SHans Rosenfeld #define VPD_SIZE 0x80 265*4c3888b8SHans Rosenfeld 266*4c3888b8SHans Rosenfeld #define QLT24_VPD_FUNC0_ADDR (NVRAM_DATA_ADDR + 0x0) 267*4c3888b8SHans Rosenfeld #define QLT24_VPD_FUNC1_ADDR (NVRAM_DATA_ADDR + 0x100) 268*4c3888b8SHans Rosenfeld 269*4c3888b8SHans Rosenfeld #define QLT25_VPD_FUNC0_ADDR (FLASH_DATA_ADDR + 0x48000) 270*4c3888b8SHans Rosenfeld #define QLT25_VPD_FUNC1_ADDR (FLASH_DATA_ADDR + 0x48100) 271*4c3888b8SHans Rosenfeld 272*4c3888b8SHans Rosenfeld #define QLT27_VPD_FUNC0_ADDR (FLASH_2700_DATA_ADDR + 0x270000) 273*4c3888b8SHans Rosenfeld #define QLT27_VPD_FUNC1_ADDR (FLASH_2700_DATA_ADDR + 0x270100) 274*4c3888b8SHans Rosenfeld #define QLT27_VPD_FUNC2_ADDR (FLASH_2700_DATA_ADDR + 0x270200) 275*4c3888b8SHans Rosenfeld #define QLT27_VPD_FUNC3_ADDR (FLASH_2700_DATA_ADDR + 0x270300) 276*4c3888b8SHans Rosenfeld 277*4c3888b8SHans Rosenfeld #define QLT81_VPD_FUNC0_ADDR (FLASH_8100_DATA_ADDR + 0xD0000) 278*4c3888b8SHans Rosenfeld #define QLT81_VPD_FUNC1_ADDR (FLASH_8100_DATA_ADDR + 0xD0400) 279*4c3888b8SHans Rosenfeld 280*4c3888b8SHans Rosenfeld #define QLT83FC_VPD_FUNC0_ADDR (FLASH_8300_DATA_ADDR + 0x270000) 281*4c3888b8SHans Rosenfeld #define QLT83FC_VPD_FUNC1_ADDR (FLASH_8300_DATA_ADDR + 0x270100) 282*4c3888b8SHans Rosenfeld 283*4c3888b8SHans Rosenfeld #define QLT83FCOE_VPD_FUNC0_ADDR (FLASH_8300_DATA_ADDR + 0x274000) 284*4c3888b8SHans Rosenfeld #define QLT83FCOE_VPD_FUNC1_ADDR (FLASH_8300_DATA_ADDR + 0x274100) 285*4c3888b8SHans Rosenfeld 286*4c3888b8SHans Rosenfeld #define FLASH_2400_FIRMWARE_ADDR 0x20000 287*4c3888b8SHans Rosenfeld #define FLASH_2400_FIRMWARE_SIZE 0x10000 288*4c3888b8SHans Rosenfeld 289*4c3888b8SHans Rosenfeld #define FLASH_2500_FIRMWARE_ADDR 0x20000 290*4c3888b8SHans Rosenfeld #define FLASH_2500_FIRMWARE_SIZE 0x10000 291*4c3888b8SHans Rosenfeld 292*4c3888b8SHans Rosenfeld #define FLASH_8100_FIRMWARE_ADDR 0xA0000 293*4c3888b8SHans Rosenfeld #define FLASH_8100_FIRMWARE_SIZE 0x20000 294*4c3888b8SHans Rosenfeld 295*4c3888b8SHans Rosenfeld #define FLASH_8300_BFE_ADDR 0x200000 /* BIOS/FCode/EFI */ 296*4c3888b8SHans Rosenfeld #define FLASH_8300_BFE_SIZE 0x80000 297*4c3888b8SHans Rosenfeld 298*4c3888b8SHans Rosenfeld #define FLASH_8300_FC_FIRMWARE_ADDR 0x240000 299*4c3888b8SHans Rosenfeld #define FLASH_8300_FCOE_FIRMWARE_ADDR 0x220000 300*4c3888b8SHans Rosenfeld #define FLASH_8300_FIRMWARE_SIZE 0x20000 301*4c3888b8SHans Rosenfeld 302*4c3888b8SHans Rosenfeld #define FLASH_8300_FIRMWARE_IMAGE_ADDR 0x40000 303*4c3888b8SHans Rosenfeld #define FLASH_8300_FIRMWARE_IMAGE_SIZE 0x80000 304*4c3888b8SHans Rosenfeld 305*4c3888b8SHans Rosenfeld #define FLASH_8200_BOOTLOADER_ADDR 0x4000 306*4c3888b8SHans Rosenfeld #define FLASH_8200_BOOTLOADER_SIZE 0x8000 307*4c3888b8SHans Rosenfeld 308*4c3888b8SHans Rosenfeld #define FLASH_8300_BOOTLOADER_ADDR 0x4000 309*4c3888b8SHans Rosenfeld #define FLASH_8300_BOOTLOADER_SIZE 0x8000 310*4c3888b8SHans Rosenfeld 311*4c3888b8SHans Rosenfeld #define FLASH_2400_DESCRIPTOR_TABLE 0 312*4c3888b8SHans Rosenfeld #define FLASH_2500_DESCRIPTOR_TABLE 0x50000 313*4c3888b8SHans Rosenfeld #define FLASH_8100_DESCRIPTOR_TABLE 0xD8000 314*4c3888b8SHans Rosenfeld #define FLASH_8200_DESCRIPTOR_TABLE 0 315*4c3888b8SHans Rosenfeld #define FLASH_8300_DESCRIPTOR_TABLE 0xFC000 316*4c3888b8SHans Rosenfeld 317*4c3888b8SHans Rosenfeld #define FLASH_2400_LAYOUT_TABLE 0x11400 318*4c3888b8SHans Rosenfeld #define FLASH_2500_LAYOUT_TABLE 0x50400 319*4c3888b8SHans Rosenfeld #define FLASH_8100_LAYOUT_TABLE 0xD8400 320*4c3888b8SHans Rosenfeld #define FLASH_8200_LAYOUT_TABLE 0xFC400 321*4c3888b8SHans Rosenfeld #define FLASH_8300_LAYOUT_TABLE 0xFC400 322*4c3888b8SHans Rosenfeld 323*4c3888b8SHans Rosenfeld #define FLASH_2400_BOOT_CODE_ADDR 0 324*4c3888b8SHans Rosenfeld #define FLASH_2500_BOOT_CODE_ADDR 0 325*4c3888b8SHans Rosenfeld #define FLASH_2700_BOOT_CODE_ADDR 0x200000 326*4c3888b8SHans Rosenfeld #define FLASH_8100_BOOT_CODE_ADDR 0x80000 327*4c3888b8SHans Rosenfeld #define FLASH_8300_BOOT_CODE_ADDR 0x200000 328*4c3888b8SHans Rosenfeld 329*4c3888b8SHans Rosenfeld #define VPD_TAG_END 0x78 330*4c3888b8SHans Rosenfeld #define VPD_TAG_CHKSUM "RV" 331*4c3888b8SHans Rosenfeld #define VPD_TAG_SN "SN" 332*4c3888b8SHans Rosenfeld #define VPD_TAG_PN "PN" 333*4c3888b8SHans Rosenfeld #define VPD_TAG_PRODID "\x82" 334*4c3888b8SHans Rosenfeld #define VPD_TAG_LRT 0x90 335*4c3888b8SHans Rosenfeld #define VPD_TAG_LRTC 0x91 336*4c3888b8SHans Rosenfeld 337*4c3888b8SHans Rosenfeld typedef struct qlt_rom_header { 338*4c3888b8SHans Rosenfeld uint8_t signature[2]; 339*4c3888b8SHans Rosenfeld uint8_t reserved[0x16]; 340*4c3888b8SHans Rosenfeld uint8_t dataoffset[2]; 341*4c3888b8SHans Rosenfeld uint8_t pad[6]; 342*4c3888b8SHans Rosenfeld } qlt_rom_header_t; 343*4c3888b8SHans Rosenfeld 344*4c3888b8SHans Rosenfeld typedef struct qlt_rom_data { 345*4c3888b8SHans Rosenfeld uint8_t signature[4]; 346*4c3888b8SHans Rosenfeld uint8_t vid[2]; 347*4c3888b8SHans Rosenfeld uint8_t did[2]; 348*4c3888b8SHans Rosenfeld uint8_t reserved0[2]; 349*4c3888b8SHans Rosenfeld uint8_t pcidatalen[2]; 350*4c3888b8SHans Rosenfeld uint8_t pcidatarev; 351*4c3888b8SHans Rosenfeld uint8_t classcode[3]; 352*4c3888b8SHans Rosenfeld uint8_t imagelength[2]; /* In sectors */ 353*4c3888b8SHans Rosenfeld uint8_t revisionlevel[2]; 354*4c3888b8SHans Rosenfeld uint8_t codetype; 355*4c3888b8SHans Rosenfeld uint8_t indicator; 356*4c3888b8SHans Rosenfeld uint8_t reserved1[2]; 357*4c3888b8SHans Rosenfeld uint8_t pad[8]; 358*4c3888b8SHans Rosenfeld } qlt_rom_data_t; 359*4c3888b8SHans Rosenfeld 360*4c3888b8SHans Rosenfeld typedef struct qlt_rom_image { 361*4c3888b8SHans Rosenfeld qlt_rom_header_t header; 362*4c3888b8SHans Rosenfeld qlt_rom_data_t data; 363*4c3888b8SHans Rosenfeld uint32_t cksum; 364*4c3888b8SHans Rosenfeld } qlt_rom_image_t; 365*4c3888b8SHans Rosenfeld 366*4c3888b8SHans Rosenfeld #define PCI_HEADER0 0x55 367*4c3888b8SHans Rosenfeld #define PCI_HEADER1 0xAA 368*4c3888b8SHans Rosenfeld #define PCI_DATASIG "PCIR" 369*4c3888b8SHans Rosenfeld #define PCI_SECTOR_SIZE 0x200 370*4c3888b8SHans Rosenfeld #define PCI_CODE_X86PC 0 371*4c3888b8SHans Rosenfeld #define PCI_CODE_FCODE 1 372*4c3888b8SHans Rosenfeld #define PCI_CODE_HPPA 2 373*4c3888b8SHans Rosenfeld #define PCI_CODE_EFI 3 374*4c3888b8SHans Rosenfeld #define PCI_CODE_FW 0xfe 375*4c3888b8SHans Rosenfeld #define PCI_IND_LAST_IMAGE 0x80 376*4c3888b8SHans Rosenfeld #define SBUS_CODE_FCODE 0xf1 377*4c3888b8SHans Rosenfeld 378*4c3888b8SHans Rosenfeld /* 379*4c3888b8SHans Rosenfeld * Firmware Dump structure definition 380*4c3888b8SHans Rosenfeld */ 381*4c3888b8SHans Rosenfeld #define QL_2200_FW_DUMP_SIZE 0x68000 /* bytes */ 382*4c3888b8SHans Rosenfeld #define QL_2300_FW_DUMP_SIZE 0xE2000 /* bytes */ 383*4c3888b8SHans Rosenfeld #define QL_6322_FW_DUMP_SIZE 0xE2000 /* bytes */ 384*4c3888b8SHans Rosenfeld #define QL_24XX_FW_DUMP_SIZE 0x0330000 /* bytes */ 385*4c3888b8SHans Rosenfeld #define QL_25XX_FW_DUMP_SIZE 0x0330000 /* bytes */ 386*4c3888b8SHans Rosenfeld 387*4c3888b8SHans Rosenfeld #define QL_24XX_VPD_SIZE 0x200 /* bytes */ 388*4c3888b8SHans Rosenfeld #define QL_24XX_SFP_SIZE 0x200 /* bytes */ 389*4c3888b8SHans Rosenfeld 390*4c3888b8SHans Rosenfeld #define LNF_NVRAM_DATA BIT_0 391*4c3888b8SHans Rosenfeld #define LNF_VPD_DATA BIT_1 392*4c3888b8SHans Rosenfeld #define LNF_BFE_DATA BIT_2 393*4c3888b8SHans Rosenfeld 394fcf3ce44SJohn Forte typedef struct qlt_nvram { 395fcf3ce44SJohn Forte /* NVRAM header. */ 396fcf3ce44SJohn Forte uint8_t id[4]; 397fcf3ce44SJohn Forte uint8_t nvram_version[2]; 398fcf3ce44SJohn Forte uint8_t reserved_0[2]; 399fcf3ce44SJohn Forte 400fcf3ce44SJohn Forte /* Firmware Initialization Control Block. */ 401fcf3ce44SJohn Forte uint8_t version[2]; 402fcf3ce44SJohn Forte uint8_t reserved_1[2]; 403fcf3ce44SJohn Forte uint8_t max_frame_length[2]; 404fcf3ce44SJohn Forte uint8_t execution_throttle[2]; 405fcf3ce44SJohn Forte uint8_t exchange_count[2]; 406fcf3ce44SJohn Forte uint8_t hard_address[2]; 407fcf3ce44SJohn Forte uint8_t port_name[8]; 408fcf3ce44SJohn Forte uint8_t node_name[8]; 409fcf3ce44SJohn Forte uint8_t login_retry_count[2]; 410fcf3ce44SJohn Forte uint8_t link_down_on_nos[2]; 411fcf3ce44SJohn Forte uint8_t interrupt_delay_timer[2]; 412fcf3ce44SJohn Forte uint8_t login_timeout[2]; 413fcf3ce44SJohn Forte 414fcf3ce44SJohn Forte /* 415fcf3ce44SJohn Forte * BIT 0 = Hard Assigned Loop ID 416fcf3ce44SJohn Forte * BIT 1 = Enable Fairness 417fcf3ce44SJohn Forte * BIT 2 = Enable Full-Duplex 418fcf3ce44SJohn Forte * BIT 3 = Reserved 419fcf3ce44SJohn Forte * BIT 4 = Target Mode Enable 420fcf3ce44SJohn Forte * BIT 5 = Initiator Mode Disable 421fcf3ce44SJohn Forte * BIT 6 = Reserved 422fcf3ce44SJohn Forte * BIT 7 = Reserved 423fcf3ce44SJohn Forte * 424fcf3ce44SJohn Forte * BIT 8 = Reserved 425fcf3ce44SJohn Forte * BIT 9 = Disable Initial LIP 426fcf3ce44SJohn Forte * BIT 10 = Descending Loop ID Search 427fcf3ce44SJohn Forte * BIT 11 = Previous Assigned Loop ID 428fcf3ce44SJohn Forte * BIT 12 = Reserved 429fcf3ce44SJohn Forte * BIT 13 = Full Login after LIP 430fcf3ce44SJohn Forte * BIT 14 = Node Name Option 431fcf3ce44SJohn Forte * BIT 15-31 = Reserved 432fcf3ce44SJohn Forte */ 433fcf3ce44SJohn Forte uint8_t firmware_options_1[4]; 434fcf3ce44SJohn Forte 435fcf3ce44SJohn Forte /* 436fcf3ce44SJohn Forte * BIT 0 = Operation Mode bit 0 437fcf3ce44SJohn Forte * BIT 1 = Operation Mode bit 1 438fcf3ce44SJohn Forte * BIT 2 = Operation Mode bit 2 439fcf3ce44SJohn Forte * BIT 3 = Operation Mode bit 3 440fcf3ce44SJohn Forte * BIT 4 = Connection Options bit 0 441fcf3ce44SJohn Forte * BIT 5 = Connection Options bit 1 442fcf3ce44SJohn Forte * BIT 6 = Connection Options bit 2 443fcf3ce44SJohn Forte * BIT 7 = Enable Non part on LIHA failure 444fcf3ce44SJohn Forte * 445fcf3ce44SJohn Forte * BIT 8 = Enable Class 2 446fcf3ce44SJohn Forte * BIT 9 = Enable ACK0 447fcf3ce44SJohn Forte * BIT 10 = Reserved 448fcf3ce44SJohn Forte * BIT 11 = Enable FC-SP Security 449fcf3ce44SJohn Forte * BIT 12 = FC Tape Enable 450fcf3ce44SJohn Forte * BIT 13-31 = Reserved 451fcf3ce44SJohn Forte */ 452fcf3ce44SJohn Forte uint8_t firmware_options_2[4]; 453fcf3ce44SJohn Forte 454fcf3ce44SJohn Forte /* 455fcf3ce44SJohn Forte * BIT 0 = Reserved 456fcf3ce44SJohn Forte * BIT 1 = Soft ID only 457fcf3ce44SJohn Forte * BIT 2 = Reserved 458fcf3ce44SJohn Forte * BIT 3 = Reserved 459fcf3ce44SJohn Forte * BIT 4 = FCP RSP Payload bit 0 460fcf3ce44SJohn Forte * BIT 5 = FCP RSP Payload bit 1 461fcf3ce44SJohn Forte * BIT 6 = Enable Rec Out-of-Order data frame handling 462fcf3ce44SJohn Forte * BIT 7 = Disable Automatic PLOGI on Local Loop 463fcf3ce44SJohn Forte * 464fcf3ce44SJohn Forte * BIT 8 = Reserved 465fcf3ce44SJohn Forte * BIT 9 = Enable Out-of-Order FCP_XFER_RDY relative 466fcf3ce44SJohn Forte * offset handling 467fcf3ce44SJohn Forte * BIT 10 = Reserved 468fcf3ce44SJohn Forte * BIT 11 = Reserved 469fcf3ce44SJohn Forte * BIT 12 = Reserved 470fcf3ce44SJohn Forte * BIT 13 = Data Rate bit 0 471fcf3ce44SJohn Forte * BIT 14 = Data Rate bit 1 472fcf3ce44SJohn Forte * BIT 15 = Data Rate bit 2 473fcf3ce44SJohn Forte * BIT 16 = 75-ohm Termination Select 474fcf3ce44SJohn Forte * BIT 17-31 = Reserved 475fcf3ce44SJohn Forte */ 476fcf3ce44SJohn Forte uint8_t firmware_options_3[4]; 477fcf3ce44SJohn Forte 478fcf3ce44SJohn Forte /* 479fcf3ce44SJohn Forte * Serial Link Control (offset 56) 480fcf3ce44SJohn Forte * BIT 0 = control enable 481fcf3ce44SJohn Forte * BIT 1-15 = Reserved 482fcf3ce44SJohn Forte */ 483fcf3ce44SJohn Forte uint8_t swing_opt[2]; 484fcf3ce44SJohn Forte 485fcf3ce44SJohn Forte /* 486fcf3ce44SJohn Forte * Serial Link Control 1G (offset 58) 487fcf3ce44SJohn Forte * BIT 0-7 = Reserved 488fcf3ce44SJohn Forte * 489fcf3ce44SJohn Forte * BIT 8-10 = output swing 490fcf3ce44SJohn Forte * BIT 11-13 = output emphasis 491fcf3ce44SJohn Forte * BIT 14-15 = Reserved 492fcf3ce44SJohn Forte */ 493fcf3ce44SJohn Forte uint8_t swing_1g[2]; 494fcf3ce44SJohn Forte 495fcf3ce44SJohn Forte /* 496fcf3ce44SJohn Forte * Serial Link Control 2G (offset 60) 497fcf3ce44SJohn Forte * BIT 0-7 = Reserved 498fcf3ce44SJohn Forte * 499fcf3ce44SJohn Forte * BIT 8-10 = output swing 500fcf3ce44SJohn Forte * BIT 11-13 = output emphasis 501fcf3ce44SJohn Forte * BIT 14-15 = Reserved 502fcf3ce44SJohn Forte */ 503fcf3ce44SJohn Forte uint8_t swing_2g[2]; 504fcf3ce44SJohn Forte 505fcf3ce44SJohn Forte /* 506fcf3ce44SJohn Forte * Serial Link Control 4G (offset 62) 507fcf3ce44SJohn Forte * BIT 0-7 = Reserved 508fcf3ce44SJohn Forte * 509fcf3ce44SJohn Forte * BIT 8-10 = output swing 510fcf3ce44SJohn Forte * BIT 11-13 = output emphasis 511fcf3ce44SJohn Forte * BIT 14-15 = Reserved 512fcf3ce44SJohn Forte */ 513fcf3ce44SJohn Forte uint8_t swing_4g[2]; 514fcf3ce44SJohn Forte 515fcf3ce44SJohn Forte /* Offset 64. */ 516fcf3ce44SJohn Forte uint8_t reserved_2[32]; 517fcf3ce44SJohn Forte 518fcf3ce44SJohn Forte /* Offset 96. */ 519fcf3ce44SJohn Forte uint8_t reserved_3[32]; 520fcf3ce44SJohn Forte 521fcf3ce44SJohn Forte /* PCIe table entries. */ 522fcf3ce44SJohn Forte uint8_t reserved_4[32]; 523fcf3ce44SJohn Forte 524fcf3ce44SJohn Forte /* Offset 160. */ 525fcf3ce44SJohn Forte uint8_t reserved_5[32]; 526fcf3ce44SJohn Forte 527fcf3ce44SJohn Forte /* Offset 192. */ 528fcf3ce44SJohn Forte uint8_t reserved_6[32]; 529fcf3ce44SJohn Forte 530fcf3ce44SJohn Forte /* Offset 224. */ 531fcf3ce44SJohn Forte uint8_t reserved_7[32]; 532fcf3ce44SJohn Forte 533fcf3ce44SJohn Forte /* 534fcf3ce44SJohn Forte * BIT 0 = Enable spinup delay 535fcf3ce44SJohn Forte * BIT 1 = Disable BIOS 536fcf3ce44SJohn Forte * BIT 2 = Enable Memory Map BIOS 537fcf3ce44SJohn Forte * BIT 3 = Enable Selectable Boot 538fcf3ce44SJohn Forte * BIT 4 = Disable RISC code load 539fcf3ce44SJohn Forte * BIT 5 = Disable serdes 540fcf3ce44SJohn Forte * BIT 6 = Enable opt boot mode 541fcf3ce44SJohn Forte * BIT 7 = Enable int mode BIOS 542fcf3ce44SJohn Forte * 543fcf3ce44SJohn Forte * BIT 8 = 544fcf3ce44SJohn Forte * BIT 9 = 545fcf3ce44SJohn Forte * BIT 10 = Enable lip full login 546fcf3ce44SJohn Forte * BIT 11 = Enable target reset 547fcf3ce44SJohn Forte * BIT 12 = 548fcf3ce44SJohn Forte * BIT 13 = Default Node Name Option 549fcf3ce44SJohn Forte * BIT 14 = Default valid 550fcf3ce44SJohn Forte * BIT 15 = Enable alternate WWN 551fcf3ce44SJohn Forte * 552fcf3ce44SJohn Forte * BIT 16-31 = 553fcf3ce44SJohn Forte */ 554fcf3ce44SJohn Forte uint8_t host_p[4]; 555fcf3ce44SJohn Forte 556fcf3ce44SJohn Forte uint8_t alternate_port_name[8]; 557fcf3ce44SJohn Forte uint8_t alternate_node_name[8]; 558fcf3ce44SJohn Forte 559fcf3ce44SJohn Forte uint8_t boot_port_name[8]; 560fcf3ce44SJohn Forte uint8_t boot_lun_number[2]; 561fcf3ce44SJohn Forte uint8_t reserved_8[2]; 562fcf3ce44SJohn Forte 563fcf3ce44SJohn Forte uint8_t alt1_boot_port_name[8]; 564fcf3ce44SJohn Forte uint8_t alt1_boot_lun_number[2]; 565fcf3ce44SJohn Forte uint8_t reserved_9[2]; 566fcf3ce44SJohn Forte 567fcf3ce44SJohn Forte uint8_t alt2_boot_port_name[8]; 568fcf3ce44SJohn Forte uint8_t alt2_boot_lun_number[2]; 569fcf3ce44SJohn Forte uint8_t reserved_10[2]; 570fcf3ce44SJohn Forte 571fcf3ce44SJohn Forte uint8_t alt3_boot_port_name[8]; 572fcf3ce44SJohn Forte uint8_t alt3_boot_lun_number[2]; 573fcf3ce44SJohn Forte uint8_t reserved_11[2]; 574fcf3ce44SJohn Forte 575fcf3ce44SJohn Forte /* 576fcf3ce44SJohn Forte * BIT 0 = Selective Login 577fcf3ce44SJohn Forte * BIT 1 = Alt-Boot Enable 578fcf3ce44SJohn Forte * BIT 2 = Reserved 579fcf3ce44SJohn Forte * BIT 3 = Enable Boot Order List 580fcf3ce44SJohn Forte * BIT 4 = Reserved 581fcf3ce44SJohn Forte * BIT 5 = Enable Selective LUN 582fcf3ce44SJohn Forte * BIT 6 = Reserved 583fcf3ce44SJohn Forte * BIT 7-31 = 584fcf3ce44SJohn Forte */ 585fcf3ce44SJohn Forte uint8_t efi_parameters[4]; 586fcf3ce44SJohn Forte 587fcf3ce44SJohn Forte uint8_t reset_delay; 588fcf3ce44SJohn Forte uint8_t reserved_12; 589fcf3ce44SJohn Forte uint8_t reserved_13[2]; 590fcf3ce44SJohn Forte 591fcf3ce44SJohn Forte uint8_t boot_id_number[2]; 592fcf3ce44SJohn Forte uint8_t reserved_14[2]; 593fcf3ce44SJohn Forte 594fcf3ce44SJohn Forte uint8_t max_luns_per_target[2]; 595fcf3ce44SJohn Forte uint8_t reserved_15[2]; 596fcf3ce44SJohn Forte 597fcf3ce44SJohn Forte uint8_t port_down_retry_count[2]; 598fcf3ce44SJohn Forte uint8_t link_down_timeout[2]; 599fcf3ce44SJohn Forte 600fcf3ce44SJohn Forte /* 601fcf3ce44SJohn Forte * FCode parameters word (offset 344) 602fcf3ce44SJohn Forte * 603fcf3ce44SJohn Forte * BIT 0 = Enable BIOS pathname 604fcf3ce44SJohn Forte * BIT 1 = fcode qlc 605fcf3ce44SJohn Forte * BIT 2 = fcode host 606fcf3ce44SJohn Forte * BIT 3-7 = 607fcf3ce44SJohn Forte */ 608fcf3ce44SJohn Forte uint8_t fcode_p0; 609fcf3ce44SJohn Forte uint8_t reserved_16[7]; 610fcf3ce44SJohn Forte 611fcf3ce44SJohn Forte /* Offset 352. */ 612fcf3ce44SJohn Forte uint8_t prev_drv_ver_major; 613fcf3ce44SJohn Forte uint8_t prev_drv_ver_submajob; 614fcf3ce44SJohn Forte uint8_t prev_drv_ver_minor; 615fcf3ce44SJohn Forte uint8_t prev_drv_ver_subminor; 616fcf3ce44SJohn Forte 617fcf3ce44SJohn Forte uint8_t prev_bios_ver_major[2]; 618fcf3ce44SJohn Forte uint8_t prev_bios_ver_minor[2]; 619fcf3ce44SJohn Forte 620fcf3ce44SJohn Forte uint8_t prev_efi_ver_major[2]; 621fcf3ce44SJohn Forte uint8_t prev_efi_ver_minor[2]; 622fcf3ce44SJohn Forte 623fcf3ce44SJohn Forte uint8_t prev_fw_ver_major[2]; 624fcf3ce44SJohn Forte uint8_t prev_fw_ver_minor; 625fcf3ce44SJohn Forte uint8_t prev_fw_ver_subminor; 626fcf3ce44SJohn Forte 627fcf3ce44SJohn Forte uint8_t reserved_17[16]; 628fcf3ce44SJohn Forte 629fcf3ce44SJohn Forte /* Offset 384. */ 630fcf3ce44SJohn Forte uint8_t def_port_name[8]; 631fcf3ce44SJohn Forte uint8_t def_node_name[8]; 632fcf3ce44SJohn Forte 633fcf3ce44SJohn Forte uint8_t reserved_18[16]; 634fcf3ce44SJohn Forte 635fcf3ce44SJohn Forte /* Offset 416. */ 636fcf3ce44SJohn Forte uint8_t reserved_19[32]; 637fcf3ce44SJohn Forte 638fcf3ce44SJohn Forte /* Offset 448. */ 639fcf3ce44SJohn Forte uint8_t reserved_20[28]; 640fcf3ce44SJohn Forte 641fcf3ce44SJohn Forte /* Offset 476. */ 642fcf3ce44SJohn Forte uint8_t fw_table_offset[2]; 643fcf3ce44SJohn Forte uint8_t fw_table_sig[2]; 644fcf3ce44SJohn Forte 645fcf3ce44SJohn Forte /* Offset 480. */ 646fcf3ce44SJohn Forte uint8_t model_name[8]; 647fcf3ce44SJohn Forte 648fcf3ce44SJohn Forte /* Offset 488. */ 649fcf3ce44SJohn Forte uint8_t power_table[16]; 650fcf3ce44SJohn Forte 651fcf3ce44SJohn Forte uint8_t subsystem_vendor_id[2]; 652fcf3ce44SJohn Forte uint8_t subsystem_device_id[2]; 653fcf3ce44SJohn Forte 654fcf3ce44SJohn Forte uint8_t checksum[4]; 655fcf3ce44SJohn Forte } qlt_nvram_t; 656fcf3ce44SJohn Forte 657c4ddbbe1SDaniel Beauregard /* ISP81xx Extended Initialisation Control Block */ 658c4ddbbe1SDaniel Beauregard typedef struct qlt_ext_icb_81xx { 659c4ddbbe1SDaniel Beauregard 660c4ddbbe1SDaniel Beauregard uint8_t version[2]; 661c4ddbbe1SDaniel Beauregard uint8_t fcf_vlan_match; 662c4ddbbe1SDaniel Beauregard uint8_t reserved_6[3]; 663c4ddbbe1SDaniel Beauregard uint8_t fcf_vlan_id[2]; 664c4ddbbe1SDaniel Beauregard uint8_t fcf_fabric_name[8]; 665c4ddbbe1SDaniel Beauregard uint8_t reserved_7[14]; 666c4ddbbe1SDaniel Beauregard uint8_t spma_proposed_mac_address[6]; 667c4ddbbe1SDaniel Beauregard uint8_t reserved_8[28]; 668c4ddbbe1SDaniel Beauregard 669c4ddbbe1SDaniel Beauregard } qlt_ext_icb_81xx_t; 670c4ddbbe1SDaniel Beauregard 671c4ddbbe1SDaniel Beauregard typedef struct qlt_nvram_81xx { 672c4ddbbe1SDaniel Beauregard /* NVRAM header. */ 673c4ddbbe1SDaniel Beauregard uint8_t id[4]; 674c4ddbbe1SDaniel Beauregard uint8_t nvram_version[2]; 675c4ddbbe1SDaniel Beauregard uint8_t reserved_0[2]; 676c4ddbbe1SDaniel Beauregard 677c4ddbbe1SDaniel Beauregard /* Firmware Initialization Control Block. */ 678c4ddbbe1SDaniel Beauregard uint8_t version[2]; 679c4ddbbe1SDaniel Beauregard uint8_t reserved_1[2]; 680c4ddbbe1SDaniel Beauregard uint8_t max_frame_length[2]; 681c4ddbbe1SDaniel Beauregard uint8_t execution_throttle[2]; 682c4ddbbe1SDaniel Beauregard uint8_t exchange_count[2]; 683c4ddbbe1SDaniel Beauregard uint8_t reserved_2[2]; 684c4ddbbe1SDaniel Beauregard uint8_t port_name[8]; 685c4ddbbe1SDaniel Beauregard uint8_t node_name[8]; 686c4ddbbe1SDaniel Beauregard uint8_t login_retry_count[2]; 687c4ddbbe1SDaniel Beauregard uint8_t reserved_3[2]; 688c4ddbbe1SDaniel Beauregard uint8_t interrupt_delay_timer[2]; 689c4ddbbe1SDaniel Beauregard uint8_t login_timeout[2]; 690c4ddbbe1SDaniel Beauregard 691c4ddbbe1SDaniel Beauregard /* 692c4ddbbe1SDaniel Beauregard * BIT 0 = Hard Assigned Loop ID 693c4ddbbe1SDaniel Beauregard * BIT 1 = Enable Fairness 694c4ddbbe1SDaniel Beauregard * BIT 2 = Enable Full-Duplex 695c4ddbbe1SDaniel Beauregard * BIT 3 = Reserved 696c4ddbbe1SDaniel Beauregard * BIT 4 = Target Mode Enable 697c4ddbbe1SDaniel Beauregard * BIT 5 = Initiator Mode Disable 698c4ddbbe1SDaniel Beauregard * BIT 6 = Reserved 699c4ddbbe1SDaniel Beauregard * BIT 7 = Reserved 700c4ddbbe1SDaniel Beauregard * 701c4ddbbe1SDaniel Beauregard * BIT 8 = Reserved 702c4ddbbe1SDaniel Beauregard * BIT 9 = Reserved 703c4ddbbe1SDaniel Beauregard * BIT 10 = Reserved 704c4ddbbe1SDaniel Beauregard * BIT 11 = Reserved 705c4ddbbe1SDaniel Beauregard * BIT 12 = Reserved 706c4ddbbe1SDaniel Beauregard * BIT 13 = Reserved 707c4ddbbe1SDaniel Beauregard * BIT 14 = Node Name Option 708c4ddbbe1SDaniel Beauregard * BIT 15-31 = Reserved 709c4ddbbe1SDaniel Beauregard */ 710c4ddbbe1SDaniel Beauregard uint8_t firmware_options_1[4]; 711c4ddbbe1SDaniel Beauregard 712c4ddbbe1SDaniel Beauregard /* 713c4ddbbe1SDaniel Beauregard * BIT 0 = Operation Mode bit 0 714c4ddbbe1SDaniel Beauregard * BIT 1 = Operation Mode bit 1 715c4ddbbe1SDaniel Beauregard * BIT 2 = Operation Mode bit 2 716c4ddbbe1SDaniel Beauregard * BIT 3 = Operation Mode bit 3 717c4ddbbe1SDaniel Beauregard * BIT 4 = Reserved 718c4ddbbe1SDaniel Beauregard * BIT 5 = Reserved 719c4ddbbe1SDaniel Beauregard * BIT 6 = Reserved 720c4ddbbe1SDaniel Beauregard * BIT 7 = Reserved 721c4ddbbe1SDaniel Beauregard * 722c4ddbbe1SDaniel Beauregard * BIT 8 = Enable Class 2 723c4ddbbe1SDaniel Beauregard * BIT 9 = Enable ACK0 724c4ddbbe1SDaniel Beauregard * BIT 10 = Reserved 725c4ddbbe1SDaniel Beauregard * BIT 11 = Enable FC-SP Security 726c4ddbbe1SDaniel Beauregard * BIT 12 = FC Tape Enable 727c4ddbbe1SDaniel Beauregard * BIT 13 = Reserved 728c4ddbbe1SDaniel Beauregard * BIT 14 = Target PRLI Control 729c4ddbbe1SDaniel Beauregard * BIT 15-31 = Reserved 730c4ddbbe1SDaniel Beauregard */ 731c4ddbbe1SDaniel Beauregard uint8_t firmware_options_2[4]; 732c4ddbbe1SDaniel Beauregard 733c4ddbbe1SDaniel Beauregard /* 734c4ddbbe1SDaniel Beauregard * BIT 0 = Reserved 735c4ddbbe1SDaniel Beauregard * BIT 1 = Soft ID only 736c4ddbbe1SDaniel Beauregard * BIT 2 = Reserved 737c4ddbbe1SDaniel Beauregard * BIT 3 = Reserved 738c4ddbbe1SDaniel Beauregard * BIT 4 = FCP RSP Payload bit 0 739c4ddbbe1SDaniel Beauregard * BIT 5 = FCP RSP Payload bit 1 740c4ddbbe1SDaniel Beauregard * BIT 6 = Enable Rec Out-of-Order data frame handling 741c4ddbbe1SDaniel Beauregard * BIT 7 = Reserved 742c4ddbbe1SDaniel Beauregard * 743c4ddbbe1SDaniel Beauregard * BIT 8 = Reserved 744c4ddbbe1SDaniel Beauregard * BIT 9 = Enable Out-of-Order FCP_XFER_RDY relative 745c4ddbbe1SDaniel Beauregard * offset handling 746c4ddbbe1SDaniel Beauregard * BIT 10 = Reserved 747c4ddbbe1SDaniel Beauregard * BIT 11 = Reserved 748c4ddbbe1SDaniel Beauregard * BIT 12 = Reserved 749c4ddbbe1SDaniel Beauregard * BIT 13 = Reserved 750c4ddbbe1SDaniel Beauregard * BIT 14 = Reserved 751c4ddbbe1SDaniel Beauregard * BIT 15 = Reserved 752c4ddbbe1SDaniel Beauregard * BIT 16 = Reserved 753c4ddbbe1SDaniel Beauregard * BIT 17 = Enable Multiple FCFs 754c4ddbbe1SDaniel Beauregard * BIT 18-20 = MAC Addressing Mode 755c4ddbbe1SDaniel Beauregard * BIT 21-25 = Ethernet Data Rate 756c4ddbbe1SDaniel Beauregard * BIT 26 = Enable Ethernet Header Receive ATIO_Q 757c4ddbbe1SDaniel Beauregard * BIT 27 = Enable Ethernet Header Receive RSP_Q 758c4ddbbe1SDaniel Beauregard * BIT 28-29 = SPMA Selection 759c4ddbbe1SDaniel Beauregard * BIT 30-31 = Reserved 760c4ddbbe1SDaniel Beauregard */ 761c4ddbbe1SDaniel Beauregard uint8_t firmware_options_3[4]; 762c4ddbbe1SDaniel Beauregard 763c4ddbbe1SDaniel Beauregard /* Offset 56 (38h). */ 764c4ddbbe1SDaniel Beauregard uint8_t reserved_4[8]; 765c4ddbbe1SDaniel Beauregard 766c4ddbbe1SDaniel Beauregard /* Offset 64 (40h). */ 767c4ddbbe1SDaniel Beauregard uint8_t enode_mac[6]; 768c4ddbbe1SDaniel Beauregard 769c4ddbbe1SDaniel Beauregard /* Offset 70 (46h). */ 770c4ddbbe1SDaniel Beauregard uint8_t reserved_5[26]; 771c4ddbbe1SDaniel Beauregard 772c4ddbbe1SDaniel Beauregard /* Offset 96 (60h). */ 773c4ddbbe1SDaniel Beauregard uint8_t oem_specific; 774c4ddbbe1SDaniel Beauregard uint8_t reserved_6[15]; 775c4ddbbe1SDaniel Beauregard 776c4ddbbe1SDaniel Beauregard /* Offset 112 (70h). */ 777c4ddbbe1SDaniel Beauregard uint8_t reserved_7[16]; 778c4ddbbe1SDaniel Beauregard 779c4ddbbe1SDaniel Beauregard /* Offset 128 (80h). */ 780c4ddbbe1SDaniel Beauregard qlt_ext_icb_81xx_t ext_blk; 781c4ddbbe1SDaniel Beauregard 782c4ddbbe1SDaniel Beauregard /* Offset 192. */ 783c4ddbbe1SDaniel Beauregard uint8_t reserved_8[32]; 784c4ddbbe1SDaniel Beauregard 785c4ddbbe1SDaniel Beauregard /* Offset 224. */ 786c4ddbbe1SDaniel Beauregard uint8_t reserved_9[32]; 787c4ddbbe1SDaniel Beauregard 788c4ddbbe1SDaniel Beauregard uint8_t host_p[4]; 789c4ddbbe1SDaniel Beauregard 790c4ddbbe1SDaniel Beauregard uint8_t alternate_port_name[8]; 791c4ddbbe1SDaniel Beauregard uint8_t alternate_name_name[8]; 792c4ddbbe1SDaniel Beauregard 793c4ddbbe1SDaniel Beauregard uint8_t boot_port_name[8]; 794c4ddbbe1SDaniel Beauregard uint8_t boot_lun_number[2]; 795c4ddbbe1SDaniel Beauregard uint8_t reserved_10[2]; 796c4ddbbe1SDaniel Beauregard 797c4ddbbe1SDaniel Beauregard uint8_t alt1_boot_port_name[8]; 798c4ddbbe1SDaniel Beauregard uint8_t alt1_boot_lun_number[2]; 799c4ddbbe1SDaniel Beauregard uint8_t reserved_11[2]; 800c4ddbbe1SDaniel Beauregard 801c4ddbbe1SDaniel Beauregard uint8_t alt2_boot_port_name[8]; 802c4ddbbe1SDaniel Beauregard uint8_t alt2_boot_lun_number[2]; 803c4ddbbe1SDaniel Beauregard uint8_t reserved_12[2]; 804c4ddbbe1SDaniel Beauregard 805c4ddbbe1SDaniel Beauregard uint8_t alt3_boot_port_name[8]; 806c4ddbbe1SDaniel Beauregard uint8_t alt3_boot_lun_number[2]; 807c4ddbbe1SDaniel Beauregard uint8_t reserved_13[2]; 808c4ddbbe1SDaniel Beauregard 809c4ddbbe1SDaniel Beauregard /* 810c4ddbbe1SDaniel Beauregard * BIT 0 = Selective Login 811c4ddbbe1SDaniel Beauregard * BIT 1 = Alt-Boot Enable 812c4ddbbe1SDaniel Beauregard * BIT 2 = Reserved 813c4ddbbe1SDaniel Beauregard * BIT 3 = Enable Boot Order List 814c4ddbbe1SDaniel Beauregard * BIT 4 = Reserved 815c4ddbbe1SDaniel Beauregard * BIT 5 = Enable Selective LUN 816c4ddbbe1SDaniel Beauregard * BIT 6 = Reserved 817c4ddbbe1SDaniel Beauregard * BIT 7-31 = 818c4ddbbe1SDaniel Beauregard */ 819c4ddbbe1SDaniel Beauregard uint8_t efi_parameters[4]; 820c4ddbbe1SDaniel Beauregard 821c4ddbbe1SDaniel Beauregard uint8_t reset_delay; 822c4ddbbe1SDaniel Beauregard uint8_t reserved_14; 823c4ddbbe1SDaniel Beauregard uint8_t reserved_15[2]; 824c4ddbbe1SDaniel Beauregard 825c4ddbbe1SDaniel Beauregard uint8_t boot_id_number[2]; 826c4ddbbe1SDaniel Beauregard uint8_t reserved_16[2]; 827c4ddbbe1SDaniel Beauregard 828c4ddbbe1SDaniel Beauregard uint8_t max_luns_per_target[2]; 829c4ddbbe1SDaniel Beauregard uint8_t reserved_17[2]; 830c4ddbbe1SDaniel Beauregard 831c4ddbbe1SDaniel Beauregard uint8_t port_down_retry_count[2]; 832c4ddbbe1SDaniel Beauregard uint8_t link_down_timeout[2]; 833c4ddbbe1SDaniel Beauregard 834c4ddbbe1SDaniel Beauregard /* 835c4ddbbe1SDaniel Beauregard * FCode parameters word (offset 344) 836c4ddbbe1SDaniel Beauregard * 837c4ddbbe1SDaniel Beauregard * BIT 0 = Enable BIOS pathname 838c4ddbbe1SDaniel Beauregard * BIT 1 = fcode qlc 839c4ddbbe1SDaniel Beauregard * BIT 2 = fcode host 840c4ddbbe1SDaniel Beauregard * BIT 3-7 = 841c4ddbbe1SDaniel Beauregard */ 842c4ddbbe1SDaniel Beauregard uint8_t fcode_parameter[2]; 843c4ddbbe1SDaniel Beauregard uint8_t reserved_18[6]; 844c4ddbbe1SDaniel Beauregard 845c4ddbbe1SDaniel Beauregard /* Offset 352. */ 846c4ddbbe1SDaniel Beauregard uint8_t reserved_19[4]; 847c4ddbbe1SDaniel Beauregard uint8_t reserved_20[10]; 848c4ddbbe1SDaniel Beauregard uint8_t reserved_21[2]; 849c4ddbbe1SDaniel Beauregard uint8_t reserved_22[16]; 850c4ddbbe1SDaniel Beauregard 851c4ddbbe1SDaniel Beauregard /* Offset 384. */ 852c4ddbbe1SDaniel Beauregard uint8_t reserved_23[16]; 853c4ddbbe1SDaniel Beauregard uint8_t reserved_24[16]; 854c4ddbbe1SDaniel Beauregard 855c4ddbbe1SDaniel Beauregard /* Offset 416. */ 856c4ddbbe1SDaniel Beauregard uint8_t reserved_25[64]; 857c4ddbbe1SDaniel Beauregard 858c4ddbbe1SDaniel Beauregard /* Offset 480. */ 859c4ddbbe1SDaniel Beauregard uint8_t model_name[16]; 860c4ddbbe1SDaniel Beauregard 861c4ddbbe1SDaniel Beauregard /* Offset 496. */ 862c4ddbbe1SDaniel Beauregard uint8_t feature_mask_l[2]; 863c4ddbbe1SDaniel Beauregard uint8_t feature_mask_h[2]; 864c4ddbbe1SDaniel Beauregard uint8_t reserved_26[4]; 865c4ddbbe1SDaniel Beauregard 866c4ddbbe1SDaniel Beauregard uint8_t subsystem_vendor_id[2]; 867c4ddbbe1SDaniel Beauregard uint8_t subsystem_device_id[2]; 868c4ddbbe1SDaniel Beauregard 869c4ddbbe1SDaniel Beauregard uint8_t checksum[4]; 870c4ddbbe1SDaniel Beauregard 871c4ddbbe1SDaniel Beauregard } qlt_nvram_81xx_t; 872c4ddbbe1SDaniel Beauregard 873*4c3888b8SHans Rosenfeld /* 874*4c3888b8SHans Rosenfeld * firmware dump Entry Types 875*4c3888b8SHans Rosenfeld */ 876*4c3888b8SHans Rosenfeld #define DT_NOP 0 877*4c3888b8SHans Rosenfeld #define DT_THDR 99 878*4c3888b8SHans Rosenfeld #define DT_TEND 255 879*4c3888b8SHans Rosenfeld #define DT_RIOB1 256 880*4c3888b8SHans Rosenfeld #define DT_WIOB1 257 881*4c3888b8SHans Rosenfeld #define DT_RIOB2 258 882*4c3888b8SHans Rosenfeld #define DT_WIOB2 259 883*4c3888b8SHans Rosenfeld #define DT_RPCI 260 884*4c3888b8SHans Rosenfeld #define DT_WPCI 261 885*4c3888b8SHans Rosenfeld #define DT_RRAM 262 886*4c3888b8SHans Rosenfeld #define DT_GQUE 263 887*4c3888b8SHans Rosenfeld #define DT_GFCE 264 888*4c3888b8SHans Rosenfeld #define DT_PRISC 265 889*4c3888b8SHans Rosenfeld #define DT_RRISC 266 890*4c3888b8SHans Rosenfeld #define DT_DINT 267 891*4c3888b8SHans Rosenfeld #define DT_GHBD 268 892*4c3888b8SHans Rosenfeld #define DT_SCRA 269 893*4c3888b8SHans Rosenfeld #define DT_RRREG 270 894*4c3888b8SHans Rosenfeld #define DT_WRREG 271 895*4c3888b8SHans Rosenfeld #define DT_RRRAM 272 896*4c3888b8SHans Rosenfeld #define DT_RPCIC 273 897*4c3888b8SHans Rosenfeld #define DT_GQUES 274 898*4c3888b8SHans Rosenfeld #define DT_WDMP 275 899*4c3888b8SHans Rosenfeld 900*4c3888b8SHans Rosenfeld /* 901*4c3888b8SHans Rosenfeld * firmware dump Template Header (Entry Type 99) 902*4c3888b8SHans Rosenfeld */ 903*4c3888b8SHans Rosenfeld typedef struct qlt_dt_hdr { 904*4c3888b8SHans Rosenfeld uint32_t type; 905*4c3888b8SHans Rosenfeld uint32_t first_entry_offset; 906*4c3888b8SHans Rosenfeld uint32_t size_of_template; 907*4c3888b8SHans Rosenfeld uint32_t rsv; 908*4c3888b8SHans Rosenfeld uint32_t num_of_entries; 909*4c3888b8SHans Rosenfeld uint32_t version; 910*4c3888b8SHans Rosenfeld uint32_t driver_timestamp; 911*4c3888b8SHans Rosenfeld uint32_t checksum; 912*4c3888b8SHans Rosenfeld uint32_t rsv_1; 913*4c3888b8SHans Rosenfeld uint32_t driver_info[3]; 914*4c3888b8SHans Rosenfeld uint32_t saved_state_area[16]; 915*4c3888b8SHans Rosenfeld uint32_t rsv_2[8]; 916*4c3888b8SHans Rosenfeld uint32_t ver_attr[5]; 917*4c3888b8SHans Rosenfeld } qlt_dt_hdr_t; 918*4c3888b8SHans Rosenfeld 919*4c3888b8SHans Rosenfeld /* 920*4c3888b8SHans Rosenfeld * firmware dump Common Entry Header 921*4c3888b8SHans Rosenfeld */ 922*4c3888b8SHans Rosenfeld typedef struct qlt_dt_entry_hdr { 923*4c3888b8SHans Rosenfeld uint32_t type; 924*4c3888b8SHans Rosenfeld uint32_t size; 925*4c3888b8SHans Rosenfeld uint32_t rsv; 926*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN 927*4c3888b8SHans Rosenfeld uint8_t driver_flags; 928*4c3888b8SHans Rosenfeld uint8_t rsv_2; 929*4c3888b8SHans Rosenfeld uint8_t rsv_1; 930*4c3888b8SHans Rosenfeld uint8_t capture_flags; 931*4c3888b8SHans Rosenfeld #else 932*4c3888b8SHans Rosenfeld uint8_t capture_flags; 933*4c3888b8SHans Rosenfeld uint8_t rsv_1; 934*4c3888b8SHans Rosenfeld uint8_t rsv_2; 935*4c3888b8SHans Rosenfeld uint8_t driver_flags; 936*4c3888b8SHans Rosenfeld #endif 937*4c3888b8SHans Rosenfeld } qlt_dt_entry_hdr_t; 938*4c3888b8SHans Rosenfeld 939*4c3888b8SHans Rosenfeld /* 940*4c3888b8SHans Rosenfeld * Capture Flags 941*4c3888b8SHans Rosenfeld */ 942*4c3888b8SHans Rosenfeld #define PF_ONLY_FLAG BIT_0 /* Physical Function Only */ 943*4c3888b8SHans Rosenfeld #define PF_VF_FLAG BIT_1 /* Physical and Virtual Functions */ 944*4c3888b8SHans Rosenfeld 945*4c3888b8SHans Rosenfeld /* 946*4c3888b8SHans Rosenfeld * Driver Flags 947*4c3888b8SHans Rosenfeld */ 948*4c3888b8SHans Rosenfeld #define SKIPPED_FLAG BIT_7 /* driver skipped this entry */ 949*4c3888b8SHans Rosenfeld 950*4c3888b8SHans Rosenfeld /* 951*4c3888b8SHans Rosenfeld * firmware dump Entry Including Header 952*4c3888b8SHans Rosenfeld */ 953*4c3888b8SHans Rosenfeld typedef struct qlt_dt_entry { 954*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 955*4c3888b8SHans Rosenfeld uint32_t data[1]; 956*4c3888b8SHans Rosenfeld } qlt_dt_entry_t; 957*4c3888b8SHans Rosenfeld 958*4c3888b8SHans Rosenfeld /* 959*4c3888b8SHans Rosenfeld * firmware dump Template image 960*4c3888b8SHans Rosenfeld */ 961*4c3888b8SHans Rosenfeld typedef struct qlt_dmp_template { 962*4c3888b8SHans Rosenfeld uint32_t rsv[2]; 963*4c3888b8SHans Rosenfeld uint32_t len; 964*4c3888b8SHans Rosenfeld uint32_t major_ver; 965*4c3888b8SHans Rosenfeld uint32_t minor_ver; 966*4c3888b8SHans Rosenfeld uint32_t subminor_ver; 967*4c3888b8SHans Rosenfeld uint32_t attribute; 968*4c3888b8SHans Rosenfeld qlt_dt_hdr_t hdr; 969*4c3888b8SHans Rosenfeld qlt_dt_entry_t entries[1]; 970*4c3888b8SHans Rosenfeld } qlt_dmp_template_t; 971*4c3888b8SHans Rosenfeld 972*4c3888b8SHans Rosenfeld typedef struct qlt_dt_riob1 { 973*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 974*4c3888b8SHans Rosenfeld uint32_t addr; 975*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN 976*4c3888b8SHans Rosenfeld uint8_t pci_offset; 977*4c3888b8SHans Rosenfeld uint8_t reg_count_h; 978*4c3888b8SHans Rosenfeld uint8_t reg_count_l; 979*4c3888b8SHans Rosenfeld uint8_t reg_size; 980*4c3888b8SHans Rosenfeld #else 981*4c3888b8SHans Rosenfeld uint8_t reg_size; 982*4c3888b8SHans Rosenfeld uint8_t reg_count_l; 983*4c3888b8SHans Rosenfeld uint8_t reg_count_h; 984*4c3888b8SHans Rosenfeld uint8_t pci_offset; 985*4c3888b8SHans Rosenfeld #endif 986*4c3888b8SHans Rosenfeld } qlt_dt_riob1_t; 987*4c3888b8SHans Rosenfeld 988*4c3888b8SHans Rosenfeld typedef struct qlt_dt_wiob1 { 989*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 990*4c3888b8SHans Rosenfeld uint32_t addr; 991*4c3888b8SHans Rosenfeld uint32_t data; 992*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN 993*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 994*4c3888b8SHans Rosenfeld uint8_t pci_offset; 995*4c3888b8SHans Rosenfeld #else 996*4c3888b8SHans Rosenfeld uint8_t pci_offset; 997*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 998*4c3888b8SHans Rosenfeld #endif 999*4c3888b8SHans Rosenfeld } qlt_dt_wiob1_t; 1000*4c3888b8SHans Rosenfeld 1001*4c3888b8SHans Rosenfeld typedef struct qlt_dt_riob2 { 1002*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1003*4c3888b8SHans Rosenfeld uint32_t addr; 1004*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN 1005*4c3888b8SHans Rosenfeld uint8_t pci_offset; 1006*4c3888b8SHans Rosenfeld uint8_t reg_count_h; 1007*4c3888b8SHans Rosenfeld uint8_t reg_count_l; 1008*4c3888b8SHans Rosenfeld uint8_t reg_size; 1009*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1010*4c3888b8SHans Rosenfeld uint8_t bank_sel_offset; 1011*4c3888b8SHans Rosenfeld #else 1012*4c3888b8SHans Rosenfeld uint8_t reg_size; 1013*4c3888b8SHans Rosenfeld uint8_t reg_count_l; 1014*4c3888b8SHans Rosenfeld uint8_t reg_count_h; 1015*4c3888b8SHans Rosenfeld uint8_t pci_offset; 1016*4c3888b8SHans Rosenfeld uint8_t bank_sel_offset; 1017*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1018*4c3888b8SHans Rosenfeld #endif 1019*4c3888b8SHans Rosenfeld uint32_t reg_bank; 1020*4c3888b8SHans Rosenfeld } qlt_dt_riob2_t; 1021*4c3888b8SHans Rosenfeld 1022*4c3888b8SHans Rosenfeld typedef struct qlt_dt_wiob2 { 1023*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1024*4c3888b8SHans Rosenfeld uint32_t addr; 1025*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN 1026*4c3888b8SHans Rosenfeld uint8_t rsv[2]; 1027*4c3888b8SHans Rosenfeld uint8_t data_h; 1028*4c3888b8SHans Rosenfeld uint8_t data_l; 1029*4c3888b8SHans Rosenfeld uint8_t bank_sel_offset; 1030*4c3888b8SHans Rosenfeld uint8_t pci_offset; 1031*4c3888b8SHans Rosenfeld uint8_t rsv1[2]; 1032*4c3888b8SHans Rosenfeld #else 1033*4c3888b8SHans Rosenfeld uint8_t data_l; 1034*4c3888b8SHans Rosenfeld uint8_t data_h; 1035*4c3888b8SHans Rosenfeld uint8_t rsv[2]; 1036*4c3888b8SHans Rosenfeld uint8_t rsv1[2]; 1037*4c3888b8SHans Rosenfeld uint8_t pci_offset; 1038*4c3888b8SHans Rosenfeld uint8_t bank_sel_offset; 1039*4c3888b8SHans Rosenfeld #endif 1040*4c3888b8SHans Rosenfeld uint32_t reg_bank; 1041*4c3888b8SHans Rosenfeld } qlt_dt_wiob2_t; 1042*4c3888b8SHans Rosenfeld 1043*4c3888b8SHans Rosenfeld typedef struct qlt_dt_rpci { 1044*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1045*4c3888b8SHans Rosenfeld uint32_t addr; 1046*4c3888b8SHans Rosenfeld } qlt_dt_rpci_t; 1047*4c3888b8SHans Rosenfeld 1048*4c3888b8SHans Rosenfeld typedef struct qlt_dt_wpci { 1049*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1050*4c3888b8SHans Rosenfeld uint32_t addr; 1051*4c3888b8SHans Rosenfeld uint32_t data; 1052*4c3888b8SHans Rosenfeld } qlt_dt_wpci_t, qlt_dt_wrreg_t; 1053*4c3888b8SHans Rosenfeld 1054*4c3888b8SHans Rosenfeld typedef struct qlt_dt_rram { 1055*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1056*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN 1057*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1058*4c3888b8SHans Rosenfeld uint8_t ram_area; 1059*4c3888b8SHans Rosenfeld #else 1060*4c3888b8SHans Rosenfeld uint8_t ram_area; 1061*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1062*4c3888b8SHans Rosenfeld #endif 1063*4c3888b8SHans Rosenfeld uint32_t start_addr; 1064*4c3888b8SHans Rosenfeld uint32_t end_addr; 1065*4c3888b8SHans Rosenfeld } qlt_dt_rram_t; 1066*4c3888b8SHans Rosenfeld 1067*4c3888b8SHans Rosenfeld typedef struct qlt_dt_gque { 1068*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1069*4c3888b8SHans Rosenfeld uint32_t num_queues; 1070*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN 1071*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1072*4c3888b8SHans Rosenfeld uint8_t queue_type; 1073*4c3888b8SHans Rosenfeld #else 1074*4c3888b8SHans Rosenfeld uint8_t queue_type; 1075*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1076*4c3888b8SHans Rosenfeld #endif 1077*4c3888b8SHans Rosenfeld } qlt_dt_gque_t, qlt_dt_gques_t; 1078*4c3888b8SHans Rosenfeld 1079*4c3888b8SHans Rosenfeld typedef struct qlt_dt_gfce { 1080*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1081*4c3888b8SHans Rosenfeld uint32_t fce_trace_size; 1082*4c3888b8SHans Rosenfeld uint32_t write_pointer[2]; 1083*4c3888b8SHans Rosenfeld uint32_t base_pointer[2]; 1084*4c3888b8SHans Rosenfeld uint32_t fce_enable_mb0; 1085*4c3888b8SHans Rosenfeld uint32_t fce_enable_mb2; 1086*4c3888b8SHans Rosenfeld uint32_t fce_enable_mb3; 1087*4c3888b8SHans Rosenfeld uint32_t fce_enable_mb4; 1088*4c3888b8SHans Rosenfeld uint32_t fce_enable_mb5; 1089*4c3888b8SHans Rosenfeld uint32_t fce_enable_mb6; 1090*4c3888b8SHans Rosenfeld } qlt_dt_gfce_t; 1091*4c3888b8SHans Rosenfeld 1092*4c3888b8SHans Rosenfeld typedef struct qlt_dt_prisc { 1093*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1094*4c3888b8SHans Rosenfeld } qlt_dt_prisc_t, qlt_dt_rrisc_t; 1095*4c3888b8SHans Rosenfeld 1096*4c3888b8SHans Rosenfeld typedef struct qlt_dt_dint { 1097*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1098*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN 1099*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1100*4c3888b8SHans Rosenfeld uint8_t pci_offset; 1101*4c3888b8SHans Rosenfeld #else 1102*4c3888b8SHans Rosenfeld uint8_t pci_offset; 1103*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1104*4c3888b8SHans Rosenfeld #endif 1105*4c3888b8SHans Rosenfeld uint32_t data; 1106*4c3888b8SHans Rosenfeld } qlt_dt_dint_t; 1107*4c3888b8SHans Rosenfeld 1108*4c3888b8SHans Rosenfeld typedef struct qlt_dt_ghbd { 1109*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1110*4c3888b8SHans Rosenfeld #ifdef _BIG_ENDIAN 1111*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1112*4c3888b8SHans Rosenfeld uint8_t host_buf_type; 1113*4c3888b8SHans Rosenfeld #else 1114*4c3888b8SHans Rosenfeld uint8_t host_buf_type; 1115*4c3888b8SHans Rosenfeld uint8_t rsv[3]; 1116*4c3888b8SHans Rosenfeld #endif 1117*4c3888b8SHans Rosenfeld uint32_t buf_size; 1118*4c3888b8SHans Rosenfeld uint32_t start_addr; 1119*4c3888b8SHans Rosenfeld } qlt_dt_ghbd_t; 1120*4c3888b8SHans Rosenfeld 1121*4c3888b8SHans Rosenfeld typedef struct qlt_dt_scra { 1122*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1123*4c3888b8SHans Rosenfeld uint32_t scratch_size; 1124*4c3888b8SHans Rosenfeld } qlt_dt_scra_t; 1125*4c3888b8SHans Rosenfeld 1126*4c3888b8SHans Rosenfeld typedef struct qlt_dt_rrreg { 1127*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1128*4c3888b8SHans Rosenfeld uint32_t addr; 1129*4c3888b8SHans Rosenfeld uint32_t count; 1130*4c3888b8SHans Rosenfeld } qlt_dt_rrreg_t, qlt_dt_rrram_t, qlt_dt_rpcic_t; 1131*4c3888b8SHans Rosenfeld 1132*4c3888b8SHans Rosenfeld typedef struct qlt_dt_wdmp { 1133*4c3888b8SHans Rosenfeld qlt_dt_entry_hdr_t h; 1134*4c3888b8SHans Rosenfeld uint32_t length; 1135*4c3888b8SHans Rosenfeld uint32_t data[1]; 1136*4c3888b8SHans Rosenfeld } qlt_dt_wdmp_t; 1137*4c3888b8SHans Rosenfeld 1138fcf3ce44SJohn Forte #ifdef __cplusplus 1139fcf3ce44SJohn Forte } 1140fcf3ce44SJohn Forte #endif 1141fcf3ce44SJohn Forte 1142fcf3ce44SJohn Forte #endif /* _QLT_REGS_H */ 1143