1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright (c) 2015 QLogic Corporation.  All rights reserved.
  24  */
  25 
  26 #ifndef _QL_NX_H
  27 #define _QL_NX_H
  28 
  29 /*
  30  * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
  31  *
  32  * ***********************************************************************
  33  * *                                                                    **
  34  * *                            NOTICE                                  **
  35  * *            COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION              **
  36  * *                    ALL RIGHTS RESERVED                             **
  37  * *                                                                    **
  38  * ***********************************************************************
  39  *
  40  */
  41 
  42 #ifdef  __cplusplus
  43 extern "C" {
  44 #endif
  45 
  46 #define NX_P3_A0        0x30
  47 #define NX_P3_A2        0x32
  48 #define NX_P3_B0        0x40
  49 #define NX_P3_B1        0x41
  50 #define NX_P3_B2        0x42
  51 #define NX_P3P_A0       0x50
  52 #define NX_P3P_B0       0x54
  53 
  54 #define NX_IS_REVISION_P3(REVISION)             (REVISION >= NX_P3_A0)
  55 #define NX_IS_REVISION_P3PLUS(REVISION)         (REVISION >= NX_P3P_A0)
  56 #define NX_IS_REVISION_P3PLUS_B0(REVISION)      (REVISION >= NX_P3P_B0)
  57 
  58 /*
  59  * Following are the states of the Phantom. Phantom will set them and
  60  * Host will read to check if the fields are correct.
  61  */
  62 #define PHAN_INITIALIZE_START           0xff00
  63 #define PHAN_INITIALIZE_FAILED          0xffff
  64 #define PHAN_INITIALIZE_COMPLETE        0xff01
  65 
  66 /* Host writes the following to notify that it has done the init-handshake */
  67 #define PHAN_INITIALIZE_ACK             0xf00f
  68 #define PHAN_PEG_RCV_INITIALIZED        0xff01
  69 #define PHAN_PEG_RCV_START_INITIALIZE   0xff00
  70 
  71 /* CRB_RELATED */
  72 #define NIC_CRB_BASE            (UNM_CAM_RAM(0x200))
  73 #define NIC_CRB_BASE_2          (UNM_CAM_RAM(0x700))
  74 #define UNM_NIC_REG(X)          (NIC_CRB_BASE + (X))
  75 #define UNM_NIC_REG_2(X)        (NIC_CRB_BASE_2 + (X))
  76 
  77 #define CRB_CUT_THRU_PAGE_SIZE  (UNM_CAM_RAM(0x170))
  78 
  79 #define CRB_DEV_PARTITION_INFO  (UNM_CAM_RAM(0x14c))
  80 #define CRB_DEV_STATE           (UNM_CAM_RAM(0x140))
  81 #define CRB_DRV_IDC_VERSION     (UNM_CAM_RAM(0x174))
  82 #define CRB_DRV_ACTIVE          (UNM_CAM_RAM(0x138))
  83 #define CRB_DRV_STATE           (UNM_CAM_RAM(0x144))
  84 #define CRB_DRV_SCRATCH         (UNM_CAM_RAM(0x148))
  85 #define CRB_PORT_0_REQIN        (UNM_CAM_RAM(0x1b8))
  86 #define CRB_PORT_1_REQIN        (UNM_CAM_RAM(0x1bc))
  87 
  88 /* Every driver should use these Device State */
  89 #define NX_DEV_POLL             0
  90 #define NX_DEV_COLD             1
  91 #define NX_DEV_INITIALIZING     2
  92 #define NX_DEV_READY            3
  93 #define NX_DEV_NEED_RESET       4
  94 #define NX_DEV_NEED_QUIESCENT   5
  95 #define NX_DEV_FAILED           6
  96 #define NX_DEV_QUIESCENT        7
  97 #define NX_DEV_BADOBADO         0xbad0bad0
  98 
  99 #define NX_IDC_VERSION          0x1
 100 
 101 #define CRB_CMD_PRODUCER_OFFSET (UNM_NIC_REG(0x08))
 102 #define CRB_CMD_CONSUMER_OFFSET (UNM_NIC_REG(0x0c))
 103 #define CRB_PAUSE_ADDR_LO       (UNM_NIC_REG(0x10)) /* C0 EPG BUG  */
 104 #define CRB_PAUSE_ADDR_HI       (UNM_NIC_REG(0x14))
 105 #define NX_CDRP_CRB_OFFSET      (UNM_NIC_REG(0x18))
 106 #define NX_ARG1_CRB_OFFSET      (UNM_NIC_REG(0x1c))
 107 #define NX_ARG2_CRB_OFFSET      (UNM_NIC_REG(0x20))
 108 #define NX_ARG3_CRB_OFFSET      (UNM_NIC_REG(0x24))
 109 #define NX_SIGN_CRB_OFFSET      (UNM_NIC_REG(0x28))
 110 #define CRB_CMDPEG_CMDRING      (UNM_NIC_REG(0x38))
 111 #define CRB_HOST_DUMMY_BUF_ADDR_HI      (UNM_NIC_REG(0x3c))
 112 #define CRB_HOST_DUMMY_BUF_ADDR_LO      (UNM_NIC_REG(0x40))
 113 #define CRB_CMDPEG_STATE        (UNM_NIC_REG(0x50))
 114 #define BOOT_LOADER_DIMM_STATUS (UNM_NIC_REG(0x54))
 115 #define CRB_GLOBAL_INT_COAL     (UNM_NIC_REG(0x64)) /* intrt coalescing */
 116 #define CRB_INT_COAL_MODE       (UNM_NIC_REG(0x68))
 117 #define CRB_MAX_RCV_BUFS        (UNM_NIC_REG(0x6c))
 118 #define CRB_TX_INT_THRESHOLD    (UNM_NIC_REG(0x70))
 119 #define CRB_RX_PKT_TIMER        (UNM_NIC_REG(0x74))
 120 #define CRB_TX_PKT_TIMER        (UNM_NIC_REG(0x78))
 121 #define CRB_RX_PKT_CNT          (UNM_NIC_REG(0x7c))
 122 #define CRB_RX_TMR_CNT          (UNM_NIC_REG(0x80))
 123 #define CRB_RCV_INTR_COUNT      (UNM_NIC_REG(0x84))
 124 #define CRB_XG_STATE            (UNM_NIC_REG(0x94)) /* XG Link status */
 125 #define CRB_XG_STATE_P3         (UNM_NIC_REG(0x98)) /* XG PF Link status */
 126 #define CRB_TX_STATE            (UNM_NIC_REG(0xac)) /* Debug -performance */
 127 #define CRB_TX_COUNT            (UNM_NIC_REG(0xb0))
 128 #define CRB_RX_STATE            (UNM_NIC_REG(0xb4))
 129 #define CRB_RX_PERF_DEBUG_1     (UNM_NIC_REG(0xb8))
 130 #define CRB_RX_LRO_CONTROL      (UNM_NIC_REG(0xbc)) /* LRO On/OFF */
 131 #define CRB_MPORT_MODE          (UNM_NIC_REG(0xc4)) /* Multiport Mode */
 132 #define CRB_DMA_SHIFT           (UNM_NIC_REG(0xcc)) /* DMA mask extension */
 133 #define CRB_INT_VECTOR          (UNM_NIC_REG(0xd4))
 134 #define CRB_PF_LINK_SPEED_1     (UNM_NIC_REG(0xe8))
 135 #define CRB_PF_LINK_SPEED_2     (UNM_NIC_REG(0xec))
 136 #define CRB_PF_MAX_LINK_SPEED_1 (UNM_NIC_REG(0xf0))
 137 #define CRB_PF_MAX_LINK_SPEED_2 (UNM_NIC_REG(0xf4))
 138 #define CRB_HOST_DUMMY_BUF      (UNM_NIC_REG(0xfc))
 139 
 140 /* used for ethtool tests */
 141 #define CRB_SCRATCHPAD_TEST     (UNM_NIC_REG(0x280))
 142 
 143 #define CRB_RCVPEG_STATE        (UNM_NIC_REG(0x13c))
 144 
 145 #define UNM_PEG_HALT_STATUS1    (UNM_CAM_RAM(0xa8))
 146 #define UNM_PEG_HALT_STATUS2    (UNM_CAM_RAM(0xac))
 147 #define UNM_PEG_ALIVE_COUNTER   (UNM_CAM_RAM(0x0b0))
 148 #define UNM_FW_CAPABILITIES_1   (UNM_CAM_RAM(0x128))
 149 
 150 /* 12 registers to store MAC addresses for 8 PCI functions */
 151 #define CRB_MAC_BLOCK_START             (UNM_CAM_RAM(0x1c0))
 152 
 153 #define CRB_CMD_PRODUCER_OFFSET_1       (UNM_NIC_REG(0x1ac))
 154 #define CRB_CMD_CONSUMER_OFFSET_1       (UNM_NIC_REG(0x1b0))
 155 #define CRB_TEMP_STATE                  (UNM_NIC_REG(0x1b4))
 156 #define CRB_CMD_PRODUCER_OFFSET_2       (UNM_NIC_REG(0x1b8))
 157 #define CRB_CMD_CONSUMER_OFFSET_2       (UNM_NIC_REG(0x1bc))
 158 
 159 #define CRB_CMD_PRODUCER_OFFSET_3       (UNM_NIC_REG(0x1d0))
 160 #define CRB_CMD_CONSUMER_OFFSET_3       (UNM_NIC_REG(0x1d4))
 161 /* sw int status/mask registers */
 162 #define CRB_SW_INT_MASK_OFFSET_0        0x1d8
 163 #define CRB_SW_INT_MASK_OFFSET_1        0x1e0
 164 #define CRB_SW_INT_MASK_OFFSET_2        0x1e4
 165 #define CRB_SW_INT_MASK_OFFSET_3        0x1e8
 166 #define CRB_SW_INT_MASK_OFFSET_4        0x450
 167 #define CRB_SW_INT_MASK_OFFSET_5        0x454
 168 #define CRB_SW_INT_MASK_OFFSET_6        0x458
 169 #define CRB_SW_INT_MASK_OFFSET_7        0x45c
 170 #define CRB_SW_INT_MASK_0               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_0))
 171 #define CRB_SW_INT_MASK_1               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_1))
 172 #define CRB_SW_INT_MASK_2               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_2))
 173 #define CRB_SW_INT_MASK_3               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_3))
 174 #define CRB_SW_INT_MASK_4               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_4))
 175 #define CRB_SW_INT_MASK_5               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_5))
 176 #define CRB_SW_INT_MASK_6               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_6))
 177 #define CRB_SW_INT_MASK_7               (UNM_NIC_REG(CRB_SW_INT_MASK_OFFSET_7))
 178 
 179 #define CRB_NIC_DEBUG_STRUCT_BASE       (UNM_NIC_REG(0x288))
 180 
 181 #define CRB_NIC_CAPABILITIES_HOST       (UNM_NIC_REG(0x1a8))
 182 #define CRB_NIC_CAPABILITIES_FW         (UNM_NIC_REG(0x1dc))
 183 #define CRB_NIC_MSI_MODE_HOST           (UNM_NIC_REG(0x270))
 184 #define CRB_NIC_MSI_MODE_FW             (UNM_NIC_REG(0x274))
 185 
 186 #define INTR_SCHEME_PERPORT             0x1
 187 #define MSI_MODE_MULTIFUNC              0x1
 188 
 189 #define CRB_EPG_QUEUE_BUSY_COUNT        (UNM_NIC_REG(0x200))
 190 
 191 #define CRB_V2P_0                       (UNM_NIC_REG(0x290))
 192 #define CRB_V2P_1                       (UNM_NIC_REG(0x294))
 193 #define CRB_V2P_2                       (UNM_NIC_REG(0x298))
 194 #define CRB_V2P_3                       (UNM_NIC_REG(0x29c))
 195 #define CRB_V2P(port)                   (CRB_V2P_0 + ((port) * 4))
 196 #define CRB_DRIVER_VERSION              (UNM_NIC_REG(0x2a0))
 197 
 198 #define CRB_CNT_DBG1                    (UNM_NIC_REG(0x2a4))
 199 #define CRB_CNT_DBG2                    (UNM_NIC_REG(0x2a8))
 200 #define CRB_CNT_DBG3                    (UNM_NIC_REG(0x2ac))
 201 
 202 /* ends here */
 203 #define UNM_HW_H0_CH_HUB_ADR    0x05
 204 #define UNM_HW_H1_CH_HUB_ADR    0x0E
 205 #define UNM_HW_H2_CH_HUB_ADR    0x03
 206 #define UNM_HW_H3_CH_HUB_ADR    0x01
 207 #define UNM_HW_H4_CH_HUB_ADR    0x06
 208 #define UNM_HW_H5_CH_HUB_ADR    0x07
 209 #define UNM_HW_H6_CH_HUB_ADR    0x08
 210 /*
 211  * WARNING:  pex_tgt_adr.v assumes if MSB of hub adr is set then it is an
 212  * ILLEGAL hub!!!!!
 213  */
 214 
 215 /* Hub 0 */
 216 #define UNM_HW_MN_CRB_AGT_ADR   0x15
 217 #define UNM_HW_MS_CRB_AGT_ADR   0x25
 218 
 219 /* Hub 1 */
 220 #define UNM_HW_PS_CRB_AGT_ADR           0x73
 221 #define UNM_HW_SS_CRB_AGT_ADR           0x20
 222 #define UNM_HW_RPMX3_CRB_AGT_ADR        0x0b
 223 #define UNM_HW_QMS_CRB_AGT_ADR          0x00
 224 #define UNM_HW_SQGS0_CRB_AGT_ADR        0x01
 225 #define UNM_HW_SQGS1_CRB_AGT_ADR        0x02
 226 #define UNM_HW_SQGS2_CRB_AGT_ADR        0x03
 227 #define UNM_HW_SQGS3_CRB_AGT_ADR        0x04
 228 #define UNM_HW_C2C0_CRB_AGT_ADR         0x58
 229 #define UNM_HW_C2C1_CRB_AGT_ADR         0x59
 230 #define UNM_HW_C2C2_CRB_AGT_ADR         0x5a
 231 #define UNM_HW_RPMX2_CRB_AGT_ADR        0x0a
 232 #define UNM_HW_RPMX4_CRB_AGT_ADR        0x0c
 233 #define UNM_HW_RPMX7_CRB_AGT_ADR        0x0f
 234 #define UNM_HW_RPMX9_CRB_AGT_ADR        0x12
 235 #define UNM_HW_SMB_CRB_AGT_ADR          0x18
 236 
 237 /* Hub 2 */
 238 #define UNM_HW_NIU_CRB_AGT_ADR          0x31
 239 #define UNM_HW_I2C0_CRB_AGT_ADR         0x19
 240 #define UNM_HW_I2C1_CRB_AGT_ADR         0x29
 241 
 242 #define UNM_HW_SN_CRB_AGT_ADR           0x10
 243 #define UNM_HW_I2Q_CRB_AGT_ADR          0x20
 244 #define UNM_HW_LPC_CRB_AGT_ADR          0x22
 245 #define UNM_HW_ROMUSB_CRB_AGT_ADR       0x21
 246 #define UNM_HW_QM_CRB_AGT_ADR           0x66
 247 #define UNM_HW_SQG0_CRB_AGT_ADR         0x60
 248 #define UNM_HW_SQG1_CRB_AGT_ADR         0x61
 249 #define UNM_HW_SQG2_CRB_AGT_ADR         0x62
 250 #define UNM_HW_SQG3_CRB_AGT_ADR         0x63
 251 #define UNM_HW_RPMX1_CRB_AGT_ADR        0x09
 252 #define UNM_HW_RPMX5_CRB_AGT_ADR        0x0d
 253 #define UNM_HW_RPMX6_CRB_AGT_ADR        0x0e
 254 #define UNM_HW_RPMX8_CRB_AGT_ADR        0x11
 255 
 256 /* Hub 3 */
 257 #define UNM_HW_PH_CRB_AGT_ADR           0x1A
 258 #define UNM_HW_SRE_CRB_AGT_ADR          0x50
 259 #define UNM_HW_EG_CRB_AGT_ADR           0x51
 260 #define UNM_HW_RPMX0_CRB_AGT_ADR        0x08
 261 
 262 /* Hub 4 */
 263 #define UNM_HW_PEGN0_CRB_AGT_ADR        0x40
 264 #define UNM_HW_PEGN1_CRB_AGT_ADR        0x41
 265 #define UNM_HW_PEGN2_CRB_AGT_ADR        0x42
 266 #define UNM_HW_PEGN3_CRB_AGT_ADR        0x43
 267 #define UNM_HW_PEGNI_CRB_AGT_ADR        0x44
 268 #define UNM_HW_PEGND_CRB_AGT_ADR        0x45
 269 #define UNM_HW_PEGNC_CRB_AGT_ADR        0x46
 270 #define UNM_HW_PEGR0_CRB_AGT_ADR        0x47
 271 #define UNM_HW_PEGR1_CRB_AGT_ADR        0x48
 272 #define UNM_HW_PEGR2_CRB_AGT_ADR        0x49
 273 #define UNM_HW_PEGR3_CRB_AGT_ADR        0x4a
 274 #define UNM_HW_PEGN4_CRB_AGT_ADR        0x4b
 275 
 276 /* Hub 5 */
 277 #define UNM_HW_PEGS0_CRB_AGT_ADR        0x40
 278 #define UNM_HW_PEGS1_CRB_AGT_ADR        0x41
 279 #define UNM_HW_PEGS2_CRB_AGT_ADR        0x42
 280 #define UNM_HW_PEGS3_CRB_AGT_ADR        0x43
 281 #define UNM_HW_PEGSI_CRB_AGT_ADR        0x44
 282 #define UNM_HW_PEGSD_CRB_AGT_ADR        0x45
 283 #define UNM_HW_PEGSC_CRB_AGT_ADR        0x46
 284 
 285 /* Hub 6 */
 286 #define UNM_HW_CAS0_CRB_AGT_ADR         0x46
 287 #define UNM_HW_CAS1_CRB_AGT_ADR         0x47
 288 #define UNM_HW_CAS2_CRB_AGT_ADR         0x48
 289 #define UNM_HW_CAS3_CRB_AGT_ADR         0x49
 290 #define UNM_HW_NCM_CRB_AGT_ADR          0x16
 291 #define UNM_HW_TMR_CRB_AGT_ADR          0x17
 292 #define UNM_HW_XDMA_CRB_AGT_ADR         0x05
 293 #define UNM_HW_OCM0_CRB_AGT_ADR         0x06
 294 #define UNM_HW_OCM1_CRB_AGT_ADR         0x07
 295 
 296 /* This field defines PCI/X adr [25:20] of agents on the CRB */
 297 
 298 #define UNM_HW_PX_MAP_CRB_PH    0
 299 #define UNM_HW_PX_MAP_CRB_PS    1
 300 #define UNM_HW_PX_MAP_CRB_MN    2
 301 #define UNM_HW_PX_MAP_CRB_MS    3
 302 #define UNM_HW_PX_MAP_CRB_SRE   5
 303 #define UNM_HW_PX_MAP_CRB_NIU   6
 304 #define UNM_HW_PX_MAP_CRB_QMN   7
 305 #define UNM_HW_PX_MAP_CRB_SQN0  8
 306 #define UNM_HW_PX_MAP_CRB_SQN1  9
 307 #define UNM_HW_PX_MAP_CRB_SQN2  10
 308 #define UNM_HW_PX_MAP_CRB_SQN3  11
 309 #define UNM_HW_PX_MAP_CRB_QMS   12
 310 #define UNM_HW_PX_MAP_CRB_SQS0  13
 311 #define UNM_HW_PX_MAP_CRB_SQS1  14
 312 #define UNM_HW_PX_MAP_CRB_SQS2  15
 313 #define UNM_HW_PX_MAP_CRB_SQS3  16
 314 #define UNM_HW_PX_MAP_CRB_PGN0  17
 315 #define UNM_HW_PX_MAP_CRB_PGN1  18
 316 #define UNM_HW_PX_MAP_CRB_PGN2  19
 317 #define UNM_HW_PX_MAP_CRB_PGN3  20
 318 #define UNM_HW_PX_MAP_CRB_PGN4  (UNM_HW_PX_MAP_CRB_SQS2)
 319 #define UNM_HW_PX_MAP_CRB_PGND  21
 320 #define UNM_HW_PX_MAP_CRB_PGNI  22
 321 #define UNM_HW_PX_MAP_CRB_PGS0  23
 322 #define UNM_HW_PX_MAP_CRB_PGS1  24
 323 #define UNM_HW_PX_MAP_CRB_PGS2  25
 324 #define UNM_HW_PX_MAP_CRB_PGS3  26
 325 #define UNM_HW_PX_MAP_CRB_PGSD  27
 326 #define UNM_HW_PX_MAP_CRB_PGSI  28
 327 #define UNM_HW_PX_MAP_CRB_SN    29
 328 #define UNM_HW_PX_MAP_CRB_EG    31
 329 #define UNM_HW_PX_MAP_CRB_PH2   32
 330 #define UNM_HW_PX_MAP_CRB_PS2   33
 331 #define UNM_HW_PX_MAP_CRB_CAM   34
 332 #define UNM_HW_PX_MAP_CRB_CAS0  35
 333 #define UNM_HW_PX_MAP_CRB_CAS1  36
 334 #define UNM_HW_PX_MAP_CRB_CAS2  37
 335 #define UNM_HW_PX_MAP_CRB_C2C0  38
 336 #define UNM_HW_PX_MAP_CRB_C2C1  39
 337 #define UNM_HW_PX_MAP_CRB_TIMR  40
 338 /*
 339  * #define PX_MAP_CRB_SS      41
 340  */
 341 #define UNM_HW_PX_MAP_CRB_RPMX1         42
 342 #define UNM_HW_PX_MAP_CRB_RPMX2         43
 343 #define UNM_HW_PX_MAP_CRB_RPMX3         44
 344 #define UNM_HW_PX_MAP_CRB_RPMX4         45
 345 #define UNM_HW_PX_MAP_CRB_RPMX5         46
 346 #define UNM_HW_PX_MAP_CRB_RPMX6         47
 347 #define UNM_HW_PX_MAP_CRB_RPMX7         48
 348 #define UNM_HW_PX_MAP_CRB_XDMA          49
 349 #define UNM_HW_PX_MAP_CRB_I2Q           50
 350 #define UNM_HW_PX_MAP_CRB_ROMUSB        51
 351 #define UNM_HW_PX_MAP_CRB_CAS3          52
 352 #define UNM_HW_PX_MAP_CRB_RPMX0         53
 353 #define UNM_HW_PX_MAP_CRB_RPMX8         54
 354 #define UNM_HW_PX_MAP_CRB_RPMX9         55
 355 #define UNM_HW_PX_MAP_CRB_OCM0          56
 356 #define UNM_HW_PX_MAP_CRB_OCM1          57
 357 #define UNM_HW_PX_MAP_CRB_SMB           58
 358 #define UNM_HW_PX_MAP_CRB_I2C0          59
 359 #define UNM_HW_PX_MAP_CRB_I2C1          60
 360 #define UNM_HW_PX_MAP_CRB_LPC           61
 361 #define UNM_HW_PX_MAP_CRB_PGNC          62
 362 #define UNM_HW_PX_MAP_CRB_PGR0          63
 363 #define UNM_HW_PX_MAP_CRB_PGR1          4
 364 #define UNM_HW_PX_MAP_CRB_PGR2          30
 365 #define UNM_HW_PX_MAP_CRB_PGR3          41
 366 
 367 /*  This field defines CRB adr [31:20] of the agents */
 368 
 369 #define UNM_HW_CRB_HUB_AGT_ADR_MN       ((UNM_HW_H0_CH_HUB_ADR << 7) | \
 370     UNM_HW_MN_CRB_AGT_ADR)
 371 #define UNM_HW_CRB_HUB_AGT_ADR_PH       ((UNM_HW_H0_CH_HUB_ADR << 7) | \
 372     UNM_HW_PH_CRB_AGT_ADR)
 373 #define UNM_HW_CRB_HUB_AGT_ADR_MS       ((UNM_HW_H0_CH_HUB_ADR << 7) | \
 374     UNM_HW_MS_CRB_AGT_ADR)
 375 
 376 #define UNM_HW_CRB_HUB_AGT_ADR_PS       ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 377     UNM_HW_PS_CRB_AGT_ADR)
 378 #define UNM_HW_CRB_HUB_AGT_ADR_SS       ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 379     UNM_HW_SS_CRB_AGT_ADR)
 380 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX3    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 381     UNM_HW_RPMX3_CRB_AGT_ADR)
 382 #define UNM_HW_CRB_HUB_AGT_ADR_QMS      ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 383     UNM_HW_QMS_CRB_AGT_ADR)
 384 #define UNM_HW_CRB_HUB_AGT_ADR_SQS0     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 385     UNM_HW_SQGS0_CRB_AGT_ADR)
 386 #define UNM_HW_CRB_HUB_AGT_ADR_SQS1     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 387     UNM_HW_SQGS1_CRB_AGT_ADR)
 388 #define UNM_HW_CRB_HUB_AGT_ADR_SQS2     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 389     UNM_HW_SQGS2_CRB_AGT_ADR)
 390 #define UNM_HW_CRB_HUB_AGT_ADR_SQS3     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 391     UNM_HW_SQGS3_CRB_AGT_ADR)
 392 #define UNM_HW_CRB_HUB_AGT_ADR_C2C0     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 393     UNM_HW_C2C0_CRB_AGT_ADR)
 394 #define UNM_HW_CRB_HUB_AGT_ADR_C2C1     ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 395     UNM_HW_C2C1_CRB_AGT_ADR)
 396 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX2    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 397     UNM_HW_RPMX2_CRB_AGT_ADR)
 398 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX4    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 399     UNM_HW_RPMX4_CRB_AGT_ADR)
 400 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX7    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 401     UNM_HW_RPMX7_CRB_AGT_ADR)
 402 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX9    ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 403     UNM_HW_RPMX9_CRB_AGT_ADR)
 404 #define UNM_HW_CRB_HUB_AGT_ADR_SMB      ((UNM_HW_H1_CH_HUB_ADR << 7) | \
 405     UNM_HW_SMB_CRB_AGT_ADR)
 406 
 407 #define UNM_HW_CRB_HUB_AGT_ADR_NIU      ((UNM_HW_H2_CH_HUB_ADR << 7) | \
 408     UNM_HW_NIU_CRB_AGT_ADR)
 409 #define UNM_HW_CRB_HUB_AGT_ADR_I2C0     ((UNM_HW_H2_CH_HUB_ADR << 7) | \
 410     UNM_HW_I2C0_CRB_AGT_ADR)
 411 #define UNM_HW_CRB_HUB_AGT_ADR_I2C1     ((UNM_HW_H2_CH_HUB_ADR << 7) | \
 412     UNM_HW_I2C1_CRB_AGT_ADR)
 413 
 414 #define UNM_HW_CRB_HUB_AGT_ADR_SRE      ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 415     UNM_HW_SRE_CRB_AGT_ADR)
 416 #define UNM_HW_CRB_HUB_AGT_ADR_EG       ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 417     UNM_HW_EG_CRB_AGT_ADR)
 418 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX0    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 419     UNM_HW_RPMX0_CRB_AGT_ADR)
 420 #define UNM_HW_CRB_HUB_AGT_ADR_QMN      ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 421     UNM_HW_QM_CRB_AGT_ADR)
 422 #define UNM_HW_CRB_HUB_AGT_ADR_SQN0     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 423     UNM_HW_SQG0_CRB_AGT_ADR)
 424 #define UNM_HW_CRB_HUB_AGT_ADR_SQN1     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 425     UNM_HW_SQG1_CRB_AGT_ADR)
 426 #define UNM_HW_CRB_HUB_AGT_ADR_SQN2     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 427     UNM_HW_SQG2_CRB_AGT_ADR)
 428 #define UNM_HW_CRB_HUB_AGT_ADR_SQN3     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 429     UNM_HW_SQG3_CRB_AGT_ADR)
 430 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX1    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 431     UNM_HW_RPMX1_CRB_AGT_ADR)
 432 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX5    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 433     UNM_HW_RPMX5_CRB_AGT_ADR)
 434 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX6    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 435     UNM_HW_RPMX6_CRB_AGT_ADR)
 436 #define UNM_HW_CRB_HUB_AGT_ADR_RPMX8    ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 437     UNM_HW_RPMX8_CRB_AGT_ADR)
 438 #define UNM_HW_CRB_HUB_AGT_ADR_CAS0     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 439     UNM_HW_CAS0_CRB_AGT_ADR)
 440 #define UNM_HW_CRB_HUB_AGT_ADR_CAS1     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 441     UNM_HW_CAS1_CRB_AGT_ADR)
 442 #define UNM_HW_CRB_HUB_AGT_ADR_CAS2     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 443     UNM_HW_CAS2_CRB_AGT_ADR)
 444 #define UNM_HW_CRB_HUB_AGT_ADR_CAS3     ((UNM_HW_H3_CH_HUB_ADR << 7) | \
 445     UNM_HW_CAS3_CRB_AGT_ADR)
 446 
 447 #define UNM_HW_CRB_HUB_AGT_ADR_PGNI     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 448     UNM_HW_PEGNI_CRB_AGT_ADR)
 449 #define UNM_HW_CRB_HUB_AGT_ADR_PGND     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 450     UNM_HW_PEGND_CRB_AGT_ADR)
 451 #define UNM_HW_CRB_HUB_AGT_ADR_PGN0     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 452     UNM_HW_PEGN0_CRB_AGT_ADR)
 453 #define UNM_HW_CRB_HUB_AGT_ADR_PGN1     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 454     UNM_HW_PEGN1_CRB_AGT_ADR)
 455 #define UNM_HW_CRB_HUB_AGT_ADR_PGN2     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 456     UNM_HW_PEGN2_CRB_AGT_ADR)
 457 #define UNM_HW_CRB_HUB_AGT_ADR_PGN3     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 458     UNM_HW_PEGN3_CRB_AGT_ADR)
 459 #define UNM_HW_CRB_HUB_AGT_ADR_PGN4     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 460     UNM_HW_PEGN4_CRB_AGT_ADR)
 461 
 462 #define UNM_HW_CRB_HUB_AGT_ADR_PGNC     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 463     UNM_HW_PEGNC_CRB_AGT_ADR)
 464 #define UNM_HW_CRB_HUB_AGT_ADR_PGR0     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 465     UNM_HW_PEGR0_CRB_AGT_ADR)
 466 #define UNM_HW_CRB_HUB_AGT_ADR_PGR1     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 467     UNM_HW_PEGR1_CRB_AGT_ADR)
 468 #define UNM_HW_CRB_HUB_AGT_ADR_PGR2     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 469     UNM_HW_PEGR2_CRB_AGT_ADR)
 470 #define UNM_HW_CRB_HUB_AGT_ADR_PGR3     ((UNM_HW_H4_CH_HUB_ADR << 7) | \
 471     UNM_HW_PEGR3_CRB_AGT_ADR)
 472 
 473 #define UNM_HW_CRB_HUB_AGT_ADR_PGSI     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 474     UNM_HW_PEGSI_CRB_AGT_ADR)
 475 #define UNM_HW_CRB_HUB_AGT_ADR_PGSD     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 476     UNM_HW_PEGSD_CRB_AGT_ADR)
 477 #define UNM_HW_CRB_HUB_AGT_ADR_PGS0     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 478     UNM_HW_PEGS0_CRB_AGT_ADR)
 479 #define UNM_HW_CRB_HUB_AGT_ADR_PGS1     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 480     UNM_HW_PEGS1_CRB_AGT_ADR)
 481 #define UNM_HW_CRB_HUB_AGT_ADR_PGS2     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 482     UNM_HW_PEGS2_CRB_AGT_ADR)
 483 #define UNM_HW_CRB_HUB_AGT_ADR_PGS3     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 484     UNM_HW_PEGS3_CRB_AGT_ADR)
 485 #define UNM_HW_CRB_HUB_AGT_ADR_PGSC     ((UNM_HW_H5_CH_HUB_ADR << 7) | \
 486     UNM_HW_PEGSC_CRB_AGT_ADR)
 487 
 488 #define UNM_HW_CRB_HUB_AGT_ADR_CAM      ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 489     UNM_HW_NCM_CRB_AGT_ADR)
 490 #define UNM_HW_CRB_HUB_AGT_ADR_TIMR     ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 491     UNM_HW_TMR_CRB_AGT_ADR)
 492 #define UNM_HW_CRB_HUB_AGT_ADR_XDMA     ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 493     UNM_HW_XDMA_CRB_AGT_ADR)
 494 #define UNM_HW_CRB_HUB_AGT_ADR_SN       ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 495     UNM_HW_SN_CRB_AGT_ADR)
 496 #define UNM_HW_CRB_HUB_AGT_ADR_I2Q      ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 497     UNM_HW_I2Q_CRB_AGT_ADR)
 498 #define UNM_HW_CRB_HUB_AGT_ADR_ROMUSB   ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 499     UNM_HW_ROMUSB_CRB_AGT_ADR)
 500 #define UNM_HW_CRB_HUB_AGT_ADR_OCM0     ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 501     UNM_HW_OCM0_CRB_AGT_ADR)
 502 #define UNM_HW_CRB_HUB_AGT_ADR_OCM1     ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 503     UNM_HW_OCM1_CRB_AGT_ADR)
 504 #define UNM_HW_CRB_HUB_AGT_ADR_LPC      ((UNM_HW_H6_CH_HUB_ADR << 7) | \
 505     UNM_HW_LPC_CRB_AGT_ADR)
 506 
 507 /*
 508  * ROM USB CRB space is divided into 4 regions depending on decode of
 509  * address bits [19:16]
 510  */
 511 #define ROMUSB_GLB              (UNM_CRB_ROMUSB + 0x00000)
 512 #define ROMUSB_ROM              (UNM_CRB_ROMUSB + 0x10000)
 513 #define ROMUSB_USB              (UNM_CRB_ROMUSB + 0x20000)
 514 #define ROMUSB_DIRECT_ROM       (UNM_CRB_ROMUSB + 0x30000)
 515 #define ROMUSB_TAP              (UNM_CRB_ROMUSB + 0x40000)
 516 
 517 /* ROMUSB  GLB register definitions */
 518 #define UNM_ROMUSB_GLB_CONTROL          (ROMUSB_GLB + 0x0000)
 519 #define UNM_ROMUSB_GLB_STATUS           (ROMUSB_GLB + 0x0004)
 520 #define UNM_ROMUSB_GLB_SW_RESET         (ROMUSB_GLB + 0x0008)
 521 #define UNM_ROMUSB_GLB_PAD_GPIO_I       (ROMUSB_GLB + 0x000c)
 522 #define UNM_ROMUSB_GLB_RNG_PLL_CTL      (ROMUSB_GLB + 0x0010)
 523 #define UNM_ROMUSB_GLB_TEST_MUX_O       (ROMUSB_GLB + 0x0014)
 524 #define UNM_ROMUSB_GLB_PLL0_CTRL        (ROMUSB_GLB + 0x0018)
 525 #define UNM_ROMUSB_GLB_PLL1_CTRL        (ROMUSB_GLB + 0x001c)
 526 #define UNM_ROMUSB_GLB_PLL2_CTRL        (ROMUSB_GLB + 0x0020)
 527 #define UNM_ROMUSB_GLB_PLL3_CTRL        (ROMUSB_GLB + 0x0024)
 528 #define UNM_ROMUSB_GLB_PLL_LOCK         (ROMUSB_GLB + 0x0028)
 529 #define UNM_ROMUSB_GLB_EXTERN_INT       (ROMUSB_GLB + 0x002c)
 530 #define UNM_ROMUSB_GLB_PH_RST           (ROMUSB_GLB + 0x0030)
 531 #define UNM_ROMUSB_GLB_PS_RST           (ROMUSB_GLB + 0x0034)
 532 #define UNM_ROMUSB_GLB_CAS_RST          (ROMUSB_GLB + 0x0038)
 533 #define UNM_ROMUSB_GLB_MIU_RST          (ROMUSB_GLB + 0x003c)
 534 #define UNM_ROMUSB_GLB_CRB_RST          (ROMUSB_GLB + 0x0040)
 535 #define UNM_ROMUSB_GLB_TEST_MUX_SEL     (ROMUSB_GLB + 0x0044)
 536 #define UNM_ROMUSB_GLB_MN_COM_A2T       (ROMUSB_GLB + 0x0050)
 537 #define UNM_ROMUSB_GLB_MN_COM_A2T       (ROMUSB_GLB + 0x0050)
 538 #define UNM_ROMUSB_GLB_REV_ID           (ROMUSB_GLB + 0x0054)
 539 #define UNM_ROMUSB_GLB_PEGTUNE_DONE     (ROMUSB_GLB + 0x005c)
 540 #define UNM_ROMUSB_GLB_VENDOR_DEV_ID    (ROMUSB_GLB + 0x0058)
 541 #define UNM_ROMUSB_GLB_CHIP_CLK_CTRL    (ROMUSB_GLB + 0x00a8)
 542 
 543 #define UNM_ROMUSB_GPIO(n) ((n) <= 15 ? (ROMUSB_GLB + 0x60 + (4 * (n))): \
 544         ((n) <= 18) ? (ROMUSB_GLB + 0x70 + (4 * (n))) : \
 545         (ROMUSB_GLB + 0x70 + (4 * (19))))
 546 
 547 #define UNM_ROMUSB_ROM_CONTROL          (ROMUSB_ROM + 0x0000)
 548 #define UNM_ROMUSB_ROM_INSTR_OPCODE     (ROMUSB_ROM + 0x0004)
 549 #define UNM_ROMUSB_ROM_ADDRESS          (ROMUSB_ROM + 0x0008)
 550 #define UNM_ROMUSB_ROM_WDATA            (ROMUSB_ROM + 0x000c)
 551 #define UNM_ROMUSB_ROM_ABYTE_CNT        (ROMUSB_ROM + 0x0010)
 552 #define UNM_ROMUSB_ROM_DUMMY_BYTE_CNT   (ROMUSB_ROM + 0x0014)
 553 #define UNM_ROMUSB_ROM_RDATA            (ROMUSB_ROM + 0x0018)
 554 #define UNM_ROMUSB_ROM_AGT_TAG          (ROMUSB_ROM + 0x001c)
 555 #define UNM_ROMUSB_ROM_TIME_PARM        (ROMUSB_ROM + 0x0020)
 556 #define UNM_ROMUSB_ROM_CLK_DIV          (ROMUSB_ROM + 0x0024)
 557 #define UNM_ROMUSB_ROM_MISS_INSTR       (ROMUSB_ROM + 0x0028)
 558 
 559 #define UNM_ROMUSB_ROM_WRSR_INSTR       0x01
 560 #define UNM_ROMUSB_ROM_PP_INSTR         0x02
 561 #define UNM_ROMUSB_ROM_READ_INSTR       0x03
 562 #define UNM_ROMUSB_ROM_WRDI_INSTR       0x04
 563 #define UNM_ROMUSB_ROM_RDSR_INSTR       0x05
 564 #define UNM_ROMUSB_ROM_WREN_INSTR       0x06
 565 #define UNM_ROMUSB_ROM_FAST_RD_INSTR    0x0B
 566 #define UNM_ROMUSB_ROM_RES_INSTR        0xAB
 567 #define UNM_ROMUSB_ROM_BE_INSTR         0xC7
 568 #define UNM_ROMUSB_ROM_DP_INSTR         0xC9
 569 #define UNM_ROMUSB_ROM_SE_INSTR         0xD8
 570 
 571 /* Lock IDs for ROM lock */
 572 #define ROM_LOCK_DRIVER         0x0d417340
 573 
 574 /* Lock IDs for PHY lock */
 575 #define PHY_LOCK_DRIVER         0x44524956
 576 
 577 #define UNM_PCI_CRB_WINDOWSIZE  0x00100000    /* all are 1MB windows */
 578 #define UNM_PCI_CRB_WINDOW(A)   (UNM_PCI_CRBSPACE + (A)*UNM_PCI_CRB_WINDOWSIZE)
 579 #define UNM_CRB_C2C_0           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_C2C0))
 580 #define UNM_CRB_C2C_1           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_C2C1))
 581 #define UNM_CRB_C2C_2           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_C2C2))
 582 #define UNM_CRB_CAM             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAM))
 583 #define UNM_CRB_CASPER          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS))
 584 #define UNM_CRB_CASPER_0        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS0))
 585 #define UNM_CRB_CASPER_1        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS1))
 586 #define UNM_CRB_CASPER_2        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS2))
 587 #define UNM_CRB_DDR_MD          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_MS))
 588 #define UNM_CRB_DDR_NET         (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_MN))
 589 #define UNM_CRB_EPG             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_EG))
 590 #define UNM_CRB_I2Q             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_I2Q))
 591 #define UNM_CRB_NIU             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_NIU))
 592 /* HACK upon HACK upon HACK (for PCIE builds) */
 593 #define UNM_CRB_PCIX_HOST       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PH))
 594 #define UNM_CRB_PCIX_HOST2      (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PH2))
 595 #define UNM_CRB_PCIX_MD         (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PS))
 596 #define UNM_CRB_PCIE            (UNM_CRB_PCIX_MD)
 597 /* window 1 pcie slot */
 598 #define UNM_CRB_PCIE2           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PS2))
 599 
 600 #define UNM_CRB_PEG_MD_0        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS0))
 601 #define UNM_CRB_PEG_MD_1        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS1))
 602 #define UNM_CRB_PEG_MD_2        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS2))
 603 #define UNM_CRB_PEG_MD_3        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS3))
 604 #define UNM_CRB_PEG_MD_3        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS3))
 605 #define UNM_CRB_PEG_MD_D        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGSD))
 606 #define UNM_CRB_PEG_MD_I        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGSI))
 607 #define UNM_CRB_PEG_NET_0       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN0))
 608 #define UNM_CRB_PEG_NET_1       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN1))
 609 #define UNM_CRB_PEG_NET_2       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN2))
 610 #define UNM_CRB_PEG_NET_3       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN3))
 611 #define UNM_CRB_PEG_NET_4       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN4))
 612 #define UNM_CRB_PEG_NET_D       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGND))
 613 #define UNM_CRB_PEG_NET_I       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGNI))
 614 #define UNM_CRB_PQM_MD          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_QMS))
 615 #define UNM_CRB_PQM_NET         (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_QMN))
 616 #define UNM_CRB_QDR_MD          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SS))
 617 #define UNM_CRB_QDR_NET         (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SN))
 618 #define UNM_CRB_ROMUSB          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_ROMUSB))
 619 #define UNM_CRB_RPMX_0          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX0))
 620 #define UNM_CRB_RPMX_1          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX1))
 621 #define UNM_CRB_RPMX_2          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX2))
 622 #define UNM_CRB_RPMX_3          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX3))
 623 #define UNM_CRB_RPMX_4          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX4))
 624 #define UNM_CRB_RPMX_5          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX5))
 625 #define UNM_CRB_RPMX_6          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX6))
 626 #define UNM_CRB_RPMX_7          (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX7))
 627 #define UNM_CRB_SQM_MD_0        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS0))
 628 #define UNM_CRB_SQM_MD_1        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS1))
 629 #define UNM_CRB_SQM_MD_2        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS2))
 630 #define UNM_CRB_SQM_MD_3        (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS3))
 631 #define UNM_CRB_SQM_NET_0       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN0))
 632 #define UNM_CRB_SQM_NET_1       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN1))
 633 #define UNM_CRB_SQM_NET_2       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN2))
 634 #define UNM_CRB_SQM_NET_3       (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN3))
 635 #define UNM_CRB_SRE             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SRE))
 636 #define UNM_CRB_TIMER           (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_TIMR))
 637 #define UNM_CRB_XDMA            (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_XDMA))
 638 #define UNM_CRB_I2C0            (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_I2C0))
 639 #define UNM_CRB_I2C1            (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_I2C1))
 640 #define UNM_CRB_OCM0            (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_OCM0))
 641 #define UNM_CRB_SMB             (UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SMB))
 642 
 643 #define UNM_CRB_MAX             (UNM_PCI_CRB_WINDOW(64))
 644 
 645 /*
 646  * ====================== BASE ADDRESSES ON-CHIP ======================
 647  * Base addresses of major components on-chip.
 648  * ====================== BASE ADDRESSES ON-CHIP ======================
 649  */
 650 #define UNM_ADDR_DDR_NET        0x0000000000000000
 651 #define UNM_ADDR_DDR_NET_MAX    0x000000000fffffff
 652 
 653 /*
 654  * Imbus address bit used to indicate a host address. This bit is
 655  * eliminated by the pcie bar and bar select before presentation
 656  * over pcie.
 657  */
 658 /* host memory via IMBUS */
 659 #define NX_P2_ADDR_PCIE         0x0000000800000000
 660 #define NX_P3_ADDR_PCIE         0x0000008000000000
 661 #define UNM_ADDR_PCIE_MAX       0x0000000FFFFFFFFF
 662 #define UNM_ADDR_OCM0           0x0000000200000000
 663 #define UNM_ADDR_OCM0_MAX       0x00000002000fffff
 664 #define UNM_ADDR_OCM1           0x0000000200400000
 665 #define UNM_ADDR_OCM1_MAX       0x00000002004fffff
 666 #define UNM_ADDR_QDR_NET        0x0000000300000000
 667 
 668 #define NX_P2_ADDR_QDR_NET_MAX  0x00000003001fffff
 669 #define NX_P3_ADDR_QDR_NET_MAX  0x0000000303ffffff
 670 /*
 671  * The ifdef at the bottom should go. All drivers should start using the above
 672  * 2 defines.
 673  */
 674 #ifdef P3
 675 #define UNM_ADDR_QDR_NET_MAX    (NX_P3_ADDR_QDR_NET_MAX)
 676 #else
 677 #define UNM_ADDR_QDR_NET_MAX    (NX_P2_ADDR_QDR_NET_MAX)
 678 #endif
 679 
 680 #define D3_CRB_REG_FUN0         (UNM_PCIX_PS_REG(0x0084))
 681 #define D3_CRB_REG_FUN1         (UNM_PCIX_PS_REG(0x1084))
 682 #define D3_CRB_REG_FUN2         (UNM_PCIX_PS_REG(0x2084))
 683 #define D3_CRB_REG_FUN3         (UNM_PCIX_PS_REG(0x3084))
 684 
 685 
 686 #define ISR_I2Q_CLR_PCI_LO      (UNM_PCIX_PS_REG(UNM_I2Q_CLR_PCI_LO))
 687 #define ISR_I2Q_CLR_PCI_HI      (UNM_PCIX_PS_REG(UNM_I2Q_CLR_PCI_HI))
 688 #define UNM_PCI_ARCH_CRB_BASE   (UNM_PCI_DIRECT_CRB)
 689 
 690 #define UNM_PCI_MAPSIZE         128 /* we're mapping 128MB of mem on PCI bus */
 691 #define UNM_PCI_DDR_NET         0x00000000
 692 #define UNM_PCI_DDR_NET_MAX     0x01ffffff
 693 #define UNM_PCI_DDR_MD          0x02000000
 694 #define UNM_PCI_DDR_MD_MAX      0x03ffffff
 695 #define UNM_PCI_QDR_NET         0x04000000
 696 #define UNM_PCI_QDR_NET_MAX     0x043fffff
 697 #define UNM_PCI_DIRECT_CRB      0x04400000
 698 #define UNM_PCI_DIRECT_CRB_MAX  0x047fffff
 699 #define UNM_PCI_CAMQM           0x04800000
 700 #define UNM_PCI_CAMQM_MAX       0x04ffffff
 701 #define UNM_PCI_OCM0            0x05000000
 702 #define UNM_PCI_OCM0_MAX        0x050fffff
 703 #define UNM_PCI_OCM1            0x05100000
 704 #define UNM_PCI_OCM1_MAX        0x051fffff
 705 #define UNM_PCI_CRBSPACE        0x06000000
 706 #define UNM_PCI_CRBSPACE_MAX    0x07ffffff
 707 #define UNM_PCI_128MB_SIZE      0x08000000
 708 #define UNM_PCI_32MB_SIZE       0x02000000
 709 #define UNM_PCI_2MB_SIZE        0x00200000
 710 
 711 /*
 712  * Definitions relating to access/control of the Network Interface Unit
 713  * h/w block.
 714  */
 715 /*
 716  * Configuration registers.
 717  */
 718 #define UNM_NIU_MODE            (UNM_CRB_NIU + 0x00000)
 719 
 720 /*
 721  *   Register offsets for MN
 722  */
 723 #define MIU_CONTROL                     (0x000)
 724 #define MIU_TAG                         (0x004)
 725 #define MIU_TEST_AGT_CTRL               (0x090)
 726 #define MIU_TEST_AGT_ADDR_LO            (0x094)
 727 #define MIU_TEST_AGT_ADDR_HI            (0x098)
 728 #define MIU_TEST_AGT_WRDATA_LO          (0x0a0)
 729 #define MIU_TEST_AGT_WRDATA_HI          (0x0a4)
 730 #define MIU_TEST_AGT_WRDATA(i)          (0x0a0 + (4 * (i)))
 731 #define MIU_TEST_AGT_RDDATA_LO          (0x0a8)
 732 #define MIU_TEST_AGT_RDDATA_HI          (0x0ac)
 733 #define MIU_TEST_AGT_WRDATA_UPPER_LO    (0x0b0)
 734 #define MIU_TEST_AGT_WRDATA_UPPER_HI    (0x0b4)
 735 #define MIU_TEST_AGT_RDDATA_UPPER_LO    (0x0b8)
 736 #define MIU_TEST_AGT_RDDATA_UPPER_HI    (0x0bc)
 737 #define MIU_TEST_AGT_RDDATA(i)          (0x0a8 + (4 * (i)))
 738 #define MIU_TEST_AGT_ADDR_MASK          0xfffffff8
 739 #define MIU_TEST_AGT_UPPER_ADDR(off)    (0)
 740 
 741 /* MIU_TEST_AGT_CTRL flags. work for SIU as well */
 742 #define MIU_TA_CTL_START        1
 743 #define MIU_TA_CTL_ENABLE       2
 744 #define MIU_TA_CTL_WRITE        4
 745 #define MIU_TA_CTL_BUSY         8
 746 
 747 #define SIU_TEST_AGT_CTRL       (0x060)
 748 #define SIU_TEST_AGT_ADDR_LO    (0x064)
 749 #define SIU_TEST_AGT_ADDR_HI    (0x078)
 750 #define SIU_TEST_AGT_WRDATA_LO  (0x068)
 751 #define SIU_TEST_AGT_WRDATA_HI  (0x06c)
 752 #define SIU_TEST_AGT_WRDATA(i)  (0x068 + (4 * (i)))
 753 #define SIU_TEST_AGT_RDDATA_LO  (0x070)
 754 #define SIU_TEST_AGT_RDDATA_HI  (0x074)
 755 #define SIU_TEST_AGT_RDDATA(i)  (0x070 + (4 * (i)))
 756 
 757 #define SIU_TEST_AGT_ADDR_MASK  0x3ffff8
 758 #define SIU_TEST_AGT_UPPER_ADDR(off)    ((off) >> 22)
 759 #define XG_LINK_UP              0x10
 760 
 761 
 762 /* ======================  Configuration Constants ======================== */
 763 #define UNM_NIU_PHY_WAITLEN     200000    /* 200ms delay in each loop */
 764 #define UNM_NIU_PHY_WAITMAX     50    /* 10 seconds before we give up */
 765 #define UNM_NIU_MAX_GBE_PORTS   4
 766 #define UNM_NIU_MAX_XG_PORTS    2
 767 #define MIN_CORE_CLK_SPEED      200
 768 #define MAX_CORE_CLK_SPEED      400
 769 #define ACCEPTABLE_CORE_CLK_RANGE(speed) ((speed >= MIN_CORE_CLK_SPEED) && \
 770         (speed <= MAX_CORE_CLK_SPEED))
 771 
 772 #define P2_TICKS_PER_SEC        2048
 773 #define P2_MIN_TICKS_PER_SEC    (P2_TICKS_PER_SEC - 10)
 774 #define P2_MAX_TICKS_PER_SEC    (P2_TICKS_PER_SEC + 10)
 775 #define CHECK_TICKS_PER_SEC(ticks)      ((ticks >= P2_MIN_TICKS_PER_SEC) && \
 776         (ticks <= P2_MAX_TICKS_PER_SEC))
 777 
 778 /* CAM RAM */
 779 #define UNM_CAM_RAM_BASE         (UNM_CRB_CAM + 0x02000)
 780 #define UNM_CAM_RAM(reg)         (UNM_CAM_RAM_BASE + (reg))
 781 
 782 #define UNM_PORT_MODE_NONE              0
 783 #define UNM_PORT_MODE_XG                1
 784 #define UNM_PORT_MODE_GB                2
 785 #define UNM_PORT_MODE_802_3_AP          3
 786 #define UNM_PORT_MODE_AUTO_NEG          4
 787 #define UNM_PORT_MODE_AUTO_NEG_1G       5
 788 #define UNM_PORT_MODE_AUTO_NEG_XG       6
 789 #define UNM_PORT_MODE_ADDR              (UNM_CAM_RAM(0x24))
 790 #define UNM_FW_PORT_MODE_ADDR           (UNM_CAM_RAM(0x28))
 791 #define UNM_WOL_PORT_MODE               (UNM_CAM_RAM(0x198))
 792 #define UNM_RAM_COLD_BOOT               (UNM_CAM_RAM(0x1fc))
 793 #define UNM_BUS_DEV_NO                  (UNM_CAM_RAM(0x114))
 794 
 795 #define NX_PEG_TUNE_MN_SPD_ZEROED       0x80000000
 796 #define NX_BOOT_LOADER_MN_OTHER         0x100   /* other problem with DIMM */
 797 #define NX_BOOT_LOADER_MN_NOT_DDR2      0x80    /* not a DDR2 DIMM */
 798 #define NX_BOOT_LOADER_MN_NO_ECC        0x40    /* ECC not supported */
 799 #define NX_BOOT_LOADER_MN_WRONG_CAS     0x20    /* CL 5 not supported */
 800 #define NX_BOOT_LOADER_MN_NOT_REG       0x10    /* not a registered DIMM */
 801 #define NX_BOOT_LOADER_MN_ISSUE         0xff00ffff
 802 #define NX_PEG_TUNE_MN_PRESENT          0x1
 803 #define NX_PEG_TUNE_CAPABILITY          (UNM_CAM_RAM(0x02c))
 804 
 805 #define UNM_ROM_LOCK_ID                 (UNM_CAM_RAM(0x100))
 806 #define UNM_I2C_ROM_LOCK_ID             (UNM_CAM_RAM(0x104))
 807 #define UNM_PHY_LOCK_ID                 (UNM_CAM_RAM(0x120))
 808 #define UNM_CRB_WIN_LOCK_ID             (UNM_CAM_RAM(0x124))
 809 #define CAM_RAM_DMA_WATCHDOG_CTRL       0x14    /* See dma_watchdog_ctrl_t */
 810 #define UNM_EFUSE_CHIP_ID_HIGH          (UNM_CAM_RAM(0x18))
 811 #define UNM_EFUSE_CHIP_ID_LOW           (UNM_CAM_RAM(0x1c))
 812 
 813 #define UNM_FW_VERSION_MAJOR            (UNM_CAM_RAM(0x150))
 814 #define UNM_FW_VERSION_MINOR            (UNM_CAM_RAM(0x154))
 815 #define UNM_FW_VERSION_SUB              (UNM_CAM_RAM(0x158))
 816 #define UNM_TCP_FW_VERSION_MAJOR_ADDR   (UNM_CAM_RAM(0x15c))
 817 #define UNM_TCP_FW_VERSION_MINOR_ADDR   (UNM_CAM_RAM(0x160))
 818 #define UNM_TCP_FW_VERSION_SUB_ADDR     (UNM_CAM_RAM(0x164))
 819 #define UNM_FW_VERSION_BUILD            (UNM_CAM_RAM(0x168))
 820 #define UNM_PCIE_REG(reg)               (UNM_CRB_PCIE + (reg))
 821 
 822 #define PCIE_DCR                (0x00d8)
 823 #define PCIE_DB_DATA2           (0x10070)
 824 #define PCIE_DB_CTRL            (0x100a0)
 825 #define PCIE_DB_ADDR            (0x100a4)
 826 #define PCIE_DB_DATA            (0x100a8)
 827 #define PCIE_IMBUS_CONTROL      (0x101b8)
 828 #define PCIE_SETUP_FUNCTION     (0x12040)
 829 #define PCIE_SETUP_FUNCTION2    (0x12048)
 830 #define PCIE_TGT_SPLIT_CHICKEN  (0x12080)
 831 #define PCIE_CHICKEN3           (0x120c8)
 832 #define PCIE_MAX_MASTER_SPLIT   (0x14048)
 833 #define PCIE_MAX_DMA_XFER_SIZE  (0x1404c)
 834 #define UNM_WOL_WAKE            (UNM_CAM_RAM(0x180))
 835 #define UNM_WOL_CONFIG_NV       (UNM_CAM_RAM(0x184))
 836 #define UNM_WOL_CONFIG          (UNM_CAM_RAM(0x188))
 837 #define UNM_PRE_WOL_RX_ENABLE   (UNM_CAM_RAM(0x18c))
 838 #define UNM_FW_RESET            (UNM_CAM_RAM(0x138))
 839 /*
 840  * Following define address space withing PCIX CRB space to talk with
 841  * devices on the storage side PCI bus.
 842  */
 843 #define PCIX_PS_MEM_SPACE       (0x90000)
 844 
 845 #define UNM_PCIX_PH_REG(reg)    (UNM_CRB_PCIE + (reg))
 846 
 847 /*
 848  * Configuration registers. These are the same offsets on both host and
 849  * storage side PCI blocks.
 850  */
 851 #define PCIX_PS_OP_ADDR_LO      (0x10000) /* Used for PS PCI Memory access */
 852 #define PCIX_PS_OP_ADDR_HI      (0x10004) /* via CRB  (PS side only) */
 853 
 854 #define PCIX_MS_WINDOW          (0x10204) /* UNUSED */
 855 
 856 #define PCIX_CRB_WINDOW         (0x10210)
 857 #define PCIX_CRB_WINDOW_F0      (0x10210)
 858 #define PCIX_CRB_WINDOW_F1      (0x10230)
 859 #define PCIX_CRB_WINDOW_F2      (0x10250)
 860 #define PCIX_CRB_WINDOW_F3      (0x10270)
 861 #define PCIX_CRB_WINDOW_F4      (0x102ac)
 862 #define PCIX_CRB_WINDOW_F5      (0x102bc)
 863 #define PCIX_CRB_WINDOW_F6      (0x102cc)
 864 #define PCIX_CRB_WINDOW_F7      (0x102dc)
 865 #define PCIE_CRB_WINDOW_REG(func)       (((func) < 4) ? \
 866         (PCIX_CRB_WINDOW_F0 + (0x20 * (func))) : \
 867         (PCIX_CRB_WINDOW_F4 + (0x10 * ((func) - 4))))
 868 
 869 #define PCIX_MN_WINDOW          (0x10200)
 870 #define PCIX_MN_WINDOW_F0       (0x10200)
 871 #define PCIX_MN_WINDOW_F1       (0x10220)
 872 #define PCIX_MN_WINDOW_F2       (0x10240)
 873 #define PCIX_MN_WINDOW_F3       (0x10260)
 874 #define PCIX_MN_WINDOW_F4       (0x102a0)
 875 #define PCIX_MN_WINDOW_F5       (0x102b0)
 876 #define PCIX_MN_WINDOW_F6       (0x102c0)
 877 #define PCIX_MN_WINDOW_F7       (0x102d0)
 878 #define PCIE_MN_WINDOW_REG(func)        (((func) < 4) ? \
 879         (PCIX_MN_WINDOW_F0 + (0x20 * (func))) : \
 880         (PCIX_MN_WINDOW_F4 + (0x10 * ((func) - 4))))
 881 
 882 #define PCIX_SN_WINDOW          (0x10208)
 883 #define PCIX_SN_WINDOW_F0       (0x10208)
 884 #define PCIX_SN_WINDOW_F1       (0x10228)
 885 #define PCIX_SN_WINDOW_F2       (0x10248)
 886 #define PCIX_SN_WINDOW_F3       (0x10268)
 887 #define PCIX_SN_WINDOW_F4       (0x102a8)
 888 #define PCIX_SN_WINDOW_F5       (0x102b8)
 889 #define PCIX_SN_WINDOW_F6       (0x102c8)
 890 #define PCIX_SN_WINDOW_F7       (0x102d8)
 891 #define PCIE_SN_WINDOW_REG(func)        (((func) < 4) ? \
 892         (PCIX_SN_WINDOW_F0 + (0x20 * (func))) : \
 893         (PCIX_SN_WINDOW_F4 + (0x10 * ((func) - 4))))
 894 
 895 #define UNM_PCIX_PS_REG(reg)    (UNM_CRB_PCIX_MD + (reg))
 896 #define UNM_PCIX_PS2_REG(reg)   (UNM_CRB_PCIE2 + (reg))
 897 #define MANAGEMENT_COMMAND_REG  (UNM_CRB_PCIE + (4))
 898 
 899 #define UNM_PH_INT_MASK         (UNM_CRB_PCIE + PCIX_INT_MASK)
 900 
 901 /*
 902  * Definitions relating to access/control of the I2Q h/w block.
 903  */
 904 /*
 905  * Configuration registers.
 906  */
 907 #define UNM_I2Q_CONFIG          (UNM_CRB_I2Q + 0x00000)
 908 #define UNM_I2Q_ENA_PCI_LO      (UNM_CRB_I2Q + 0x00010)
 909 #define UNM_I2Q_ENA_PCI_HI      (UNM_CRB_I2Q + 0x00014)
 910 #define UNM_I2Q_ENA_CASPER_LO   (UNM_CRB_I2Q + 0x00018)
 911 #define UNM_I2Q_ENA_CASPER_HI   (UNM_CRB_I2Q + 0x0001c)
 912 #define UNM_I2Q_ENA_QM_LO       (UNM_CRB_I2Q + 0x00020)
 913 #define UNM_I2Q_ENA_QM_HI       (UNM_CRB_I2Q + 0x00024)
 914 #define UNM_I2Q_CLR_PCI_LO      (UNM_CRB_I2Q + 0x00030)
 915 #define UNM_I2Q_CLR_PCI_HI      (UNM_CRB_I2Q + 0x00034)
 916 #define UNM_I2Q_CLR_CASPER_LO   (UNM_CRB_I2Q + 0x00038)
 917 #define UNM_I2Q_CLR_CASPER_HI   (UNM_CRB_I2Q + 0x0003c)
 918 #define UNM_I2Q_MSG_HDR_LO(I)   (UNM_CRB_I2Q + 0x00100 + (I) * 0x8)
 919 #define UNM_I2Q_MSG_HDR_HI(I)   (UNM_CRB_I2Q + 0x00104 + (I) * 0x8)
 920 
 921 #ifdef PCIX
 922 #define UNM_DMA_BASE(U)         (UNM_CRB_PCIX_HOST + 0x20000 + ((U) << 16))
 923 #else
 924 #define UNM_DMA_BASE(U)         (UNM_CRB_PCIX_MD + 0x20000 + ((U) << 6))
 925 #endif
 926 #define UNM_DMA_COMMAND(U)      (UNM_DMA_BASE(U) + 0x00008)
 927 
 928 #define PCIE_SEM2_LOCK          (0x1c010)       /* Flash lock */
 929 #define PCIE_SEM2_UNLOCK        (0x1c014)       /* Flash unlock */
 930 #define PCIE_SEM3_LOCK          (0x1c018)       /* Phy lock */
 931 #define PCIE_SEM3_UNLOCK        (0x1c01c)       /* Phy unlock */
 932 #define PCIE_SEM4_LOCK          (0x1c020)       /* I2C lock */
 933 #define PCIE_SEM4_UNLOCK        (0x1c024)       /* I2C unlock */
 934 #define PCIE_SEM5_LOCK          (0x1c028)       /* API lock */
 935 #define PCIE_SEM5_UNLOCK        (0x1c02c)       /* API unlock */
 936 #define PCIE_SEM6_LOCK          (0x1c030)       /* sw lock */
 937 #define PCIE_SEM6_UNLOCK        (0x1c034)       /* sw unlock */
 938 #define PCIE_SEM7_LOCK          (0x1c038)       /* crb win lock */
 939 #define PCIE_SEM7_UNLOCK        (0x1c03c)       /* crbwin unlock */
 940 
 941 #define PCIE_PS_STRAP_RESET     (0x18000)
 942 
 943 #define M25P_INSTR_WREN         0x06
 944 #define M25P_INSTR_RDSR         0x05
 945 #define M25P_INSTR_PP           0x02
 946 #define M25P_INSTR_SE           0xd8
 947 #define CAM_RAM_P2I_ENABLE      0xc
 948 #define CAM_RAM_P2D_ENABLE      0x8
 949 #define PCIX_IMBTAG             (0x18004)
 950 
 951 #define CAM_RAM_PEG_ENABLES     0x4
 952 
 953 /*
 954  * The PCI VendorID and DeviceID for our board.
 955  */
 956 #define PCI_VENDOR_ID_NX8021            0x4040
 957 #define PCI_DEVICE_ID_NX8021_FC         0x0101
 958 
 959 /* ISP 3031 related declarations  */
 960 
 961 #define NX_MSIX_MEM_REGION_THRESHOLD    0x2000000
 962 #define UNM_MSIX_TBL_SPACE              8192
 963 #define UNM_PCI_REG_MSIX_TBL            0x44
 964 #define NX_PCI_MSIX_CONTROL             0x40
 965 
 966 typedef struct {
 967         uint32_t        valid;
 968         uint32_t        start_128M;
 969         uint32_t        end_128M;
 970         uint32_t        start_2M;
 971 } crb_128M_2M_sub_block_map_t;
 972 
 973 typedef struct {
 974         crb_128M_2M_sub_block_map_t sub_block[16];
 975 } crb_128M_2M_block_map_t;
 976 
 977 struct crb_addr_pair {
 978         uint32_t        addr;
 979         uint32_t        data;
 980 };
 981 
 982 #define ADDR_ERROR      ((unsigned long) 0xffffffff)
 983 #define MAX_CTL_CHECK   1000
 984 
 985 /*
 986  * ************************************************************************
 987  *              PCI related defines.
 988  * ************************************************************************
 989  */
 990 
 991 /*
 992  * Interrupt related defines.
 993  */
 994 #define PCIX_TARGET_STATUS      (0x10118)
 995 #define PCIX_TARGET_STATUS_F1   (0x10160)
 996 #define PCIX_TARGET_STATUS_F2   (0x10164)
 997 #define PCIX_TARGET_STATUS_F3   (0x10168)
 998 #define PCIX_TARGET_STATUS_F4   (0x10360)
 999 #define PCIX_TARGET_STATUS_F5   (0x10364)
1000 #define PCIX_TARGET_STATUS_F6   (0x10368)
1001 #define PCIX_TARGET_STATUS_F7   (0x1036c)
1002 
1003 #define PCIX_TARGET_MASK        (0x10128)
1004 #define PCIX_TARGET_MASK_F1     (0x10170)
1005 #define PCIX_TARGET_MASK_F2     (0x10174)
1006 #define PCIX_TARGET_MASK_F3     (0x10178)
1007 #define PCIX_TARGET_MASK_F4     (0x10370)
1008 #define PCIX_TARGET_MASK_F5     (0x10374)
1009 #define PCIX_TARGET_MASK_F6     (0x10378)
1010 #define PCIX_TARGET_MASK_F7     (0x1037c)
1011 
1012 /*
1013  * Message Signaled Interrupts
1014  */
1015 #define PCIX_MSI_F0             (0x13000)
1016 #define PCIX_MSI_F1             (0x13004)
1017 #define PCIX_MSI_F2             (0x13008)
1018 #define PCIX_MSI_F3             (0x1300c)
1019 #define PCIX_MSI_F4             (0x13010)
1020 #define PCIX_MSI_F5             (0x13014)
1021 #define PCIX_MSI_F6             (0x13018)
1022 #define PCIX_MSI_F7             (0x1301c)
1023 #define PCIX_MSI_F(FUNC)        (0x13000 +((FUNC) * 4))
1024 
1025 /*
1026  *
1027  */
1028 #define PCIX_INT_VECTOR         (0x10100)
1029 #define PCIX_INT_MASK           (0x10104)
1030 
1031 /*
1032  * Interrupt state machine and other bits.
1033  */
1034 #define PCIE_MISCCFG_RC         (0x1206c)
1035 
1036 
1037 #define ISR_INT_TARGET_STATUS           (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS))
1038 #define ISR_INT_TARGET_STATUS_F1        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F1))
1039 #define ISR_INT_TARGET_STATUS_F2        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F2))
1040 #define ISR_INT_TARGET_STATUS_F3        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F3))
1041 #define ISR_INT_TARGET_STATUS_F4        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F4))
1042 #define ISR_INT_TARGET_STATUS_F5        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F5))
1043 #define ISR_INT_TARGET_STATUS_F6        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F6))
1044 #define ISR_INT_TARGET_STATUS_F7        (UNM_PCIX_PS_REG(PCIX_TARGET_STATUS_F7))
1045 
1046 #define ISR_INT_TARGET_MASK             (UNM_PCIX_PS_REG(PCIX_TARGET_MASK))
1047 #define ISR_INT_TARGET_MASK_F1          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F1))
1048 #define ISR_INT_TARGET_MASK_F2          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F2))
1049 #define ISR_INT_TARGET_MASK_F3          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F3))
1050 #define ISR_INT_TARGET_MASK_F4          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F4))
1051 #define ISR_INT_TARGET_MASK_F5          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F5))
1052 #define ISR_INT_TARGET_MASK_F6          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F6))
1053 #define ISR_INT_TARGET_MASK_F7          (UNM_PCIX_PS_REG(PCIX_TARGET_MASK_F7))
1054 
1055 #define ISR_INT_VECTOR                  (UNM_PCIX_PS_REG(PCIX_INT_VECTOR))
1056 #define ISR_INT_MASK                    (UNM_PCIX_PS_REG(PCIX_INT_MASK))
1057 #define ISR_INT_STATE_REG               (UNM_PCIX_PS_REG(PCIE_MISCCFG_RC))
1058 
1059 #define ISR_MSI_INT_TRIGGER(FUNC)       (UNM_PCIX_PS_REG(PCIX_MSI_F(FUNC)))
1060 
1061 
1062 #define ISR_IS_LEGACY_INTR_IDLE(VAL)            (((VAL) & 0x300) == 0)
1063 #define ISR_IS_LEGACY_INTR_TRIGGERED(VAL)       (((VAL) & 0x300) == 0x200)
1064 
1065 /*
1066  * PCI Interrupt Vector Values.
1067  */
1068 #define PCIX_INT_VECTOR_BIT_F0  0x0080
1069 #define PCIX_INT_VECTOR_BIT_F1  0x0100
1070 #define PCIX_INT_VECTOR_BIT_F2  0x0200
1071 #define PCIX_INT_VECTOR_BIT_F3  0x0400
1072 #define PCIX_INT_VECTOR_BIT_F4  0x0800
1073 #define PCIX_INT_VECTOR_BIT_F5  0x1000
1074 #define PCIX_INT_VECTOR_BIT_F6  0x2000
1075 #define PCIX_INT_VECTOR_BIT_F7  0x4000
1076 
1077 #define NX_LEGACY_INTR_CONFIG                                   \
1078 {                                                               \
1079         {                                                       \
1080                 .int_vec_bit    = PCIX_INT_VECTOR_BIT_F0,       \
1081                 .tgt_status_reg = ISR_INT_TARGET_STATUS,        \
1082                 .tgt_mask_reg   = ISR_INT_TARGET_MASK,          \
1083                 .pci_int_reg    = ISR_MSI_INT_TRIGGER(0) },     \
1084                                                                 \
1085         {                                                       \
1086                 .int_vec_bit    = PCIX_INT_VECTOR_BIT_F1,       \
1087                 .tgt_status_reg = ISR_INT_TARGET_STATUS_F1,     \
1088                 .tgt_mask_reg   = ISR_INT_TARGET_MASK_F1,       \
1089                 .pci_int_reg    = ISR_MSI_INT_TRIGGER(1) },     \
1090                                                                 \
1091         {                                                       \
1092                 .int_vec_bit    = PCIX_INT_VECTOR_BIT_F2,       \
1093                 .tgt_status_reg = ISR_INT_TARGET_STATUS_F2,     \
1094                 .tgt_mask_reg   = ISR_INT_TARGET_MASK_F2,       \
1095                 .pci_int_reg    = ISR_MSI_INT_TRIGGER(2) },     \
1096                                                                 \
1097         {                                                       \
1098                 .int_vec_bit    = PCIX_INT_VECTOR_BIT_F3,       \
1099                 .tgt_status_reg = ISR_INT_TARGET_STATUS_F3,     \
1100                 .tgt_mask_reg   = ISR_INT_TARGET_MASK_F3,       \
1101                 .pci_int_reg    = ISR_MSI_INT_TRIGGER(3) },     \
1102                                                                 \
1103         {                                                       \
1104                 .int_vec_bit    = PCIX_INT_VECTOR_BIT_F4,       \
1105                 .tgt_status_reg = ISR_INT_TARGET_STATUS_F4,     \
1106                 .tgt_mask_reg   = ISR_INT_TARGET_MASK_F4,       \
1107                 .pci_int_reg    = ISR_MSI_INT_TRIGGER(4) },     \
1108                                                                 \
1109         {                                                       \
1110                 .int_vec_bit    = PCIX_INT_VECTOR_BIT_F5,       \
1111                 .tgt_status_reg = ISR_INT_TARGET_STATUS_F5,     \
1112                 .tgt_mask_reg   = ISR_INT_TARGET_MASK_F5,       \
1113                 .pci_int_reg    = ISR_MSI_INT_TRIGGER(5) },     \
1114                                                                 \
1115         {                                                       \
1116                 .int_vec_bit    = PCIX_INT_VECTOR_BIT_F6,       \
1117                 .tgt_status_reg = ISR_INT_TARGET_STATUS_F6,     \
1118                 .tgt_mask_reg   = ISR_INT_TARGET_MASK_F6,       \
1119                 .pci_int_reg    = ISR_MSI_INT_TRIGGER(6) },     \
1120                                                                 \
1121         {                                                       \
1122                 .int_vec_bit    = PCIX_INT_VECTOR_BIT_F7,       \
1123                 .tgt_status_reg = ISR_INT_TARGET_STATUS_F7,     \
1124                 .tgt_mask_reg   = ISR_INT_TARGET_MASK_F7,       \
1125                 .pci_int_reg    = ISR_MSI_INT_TRIGGER(7) },     \
1126 }
1127 
1128 #define BOOTLD_START            0x10000
1129 #define IMAGE_START             0x43000
1130 
1131 /* Magic number to let user know flash is programmed */
1132 #define UNM_BDINFO_MAGIC        0x12345678
1133 #define FW_SIZE_OFFSET          0x3e840c
1134 
1135 #define PCI_CAP_ID_GEN          0x10
1136 #define PCI_CAP_ID_PCI_E        0x10    /* PCI Express supported */
1137 #define PCI_CAP_ID_EXP          0x10    /* PCI Express */
1138 #define PCI_EXP_LNKSTA          18      /* Link Status */
1139 #define MAX_CRB_XFORM           60
1140 #define MTU_FUDGE_FACTOR        100
1141 
1142 #define crb_addr_transform(name) \
1143         (crb_addr_xform[UNM_HW_PX_MAP_CRB_##name] = \
1144         UNM_HW_CRB_HUB_AGT_ADR_##name << 20)
1145 
1146 #define MASK(n)         ((1ULL << (n)) - 1)
1147 #define MN_WIN(addr)    (((addr & 0x1fc0000) >> 1) | ((addr >> 25) & 0x3ff))
1148 /* 64K? */
1149 #define OCM_WIN(addr)   (((addr & 0x1ff0000) >> 1) | ((addr >> 25) & 0x3ff))
1150 
1151 #define MS_WIN(addr)            (addr & 0x0ffc0000)
1152 #define UNM_PCI_MN_2M           (0)
1153 #define UNM_PCI_MS_2M           (0x80000)
1154 #define UNM_PCI_OCM0_2M         (0xc0000)
1155 #define VALID_OCM_ADDR(addr)    (((addr) & 0x3f800) != 0x3f800)
1156 #define GET_MEM_OFFS_2M(addr)   (addr & MASK(18))
1157 
1158 #define UNM_BOARDTYPE           0x4008
1159 #define UNM_BOARDNUM            0x400c
1160 #define UNM_CHIPNUM             0x4010
1161 
1162 /* CRB window related */
1163 #define CRB_BLK(off)            ((off >> 20) & 0x3f)
1164 #define CRB_SUBBLK(off)         ((off >> 16) & 0xf)
1165 #define CRB_WINDOW_2M           (0x130060)
1166 #define UNM_PCI_CAMQM_2M_END    (0x04800800UL)
1167 #define CRB_HI(off)             ((crb_hub_agt[CRB_BLK(off)] << 20) | \
1168         ((off) & 0xf0000))
1169 #define UNM_PCI_CAMQM_2M_BASE   (0x000ff800UL)
1170 #define CRB_INDIRECT_2M         (0x1e0000UL)
1171 /* #define      ADDR_ERROR ((unsigned long ) 0xffffffff) */
1172 
1173 /* PCI Windowing for DDR regions.  */
1174 #define QL_8021_ADDR_IN_RANGE(addr, low, high)  \
1175         (((addr) <= (high)) && ((int64_t)(addr) >= (low)))
1176 
1177 #define CRB_WIN_LOCK_TIMEOUT    100000000
1178 #define ROM_LOCK_TIMEOUT        100
1179 #define ROM_MAX_TIMEOUT         100
1180 #define IDC_LOCK_TIMEOUT        100000000
1181 
1182 /*
1183  * IDC parameters are defined in "user area" in the flash
1184  */
1185 #define ROM_DEV_INIT_TIMEOUT            0x3e885c
1186 #define ROM_DRV_RESET_ACK_TIMEOUT       0x3e8860
1187 
1188 /* ****************************************************************** */
1189 /* ******************* NetXen MiniDump Defines ********************** */
1190 /* ****************************************************************** */
1191 
1192 /*
1193  * Get MBC_GET_DUMP_TEMPLATE Command Options
1194  */
1195 #define GTO_TEMPLATE_SIZE       0
1196 #define GTO_TEMPLATE            1
1197 
1198 /*
1199  * Entry Type Defines
1200  */
1201 #define RDNOP            0
1202 #define RDCRB            1
1203 #define RDMUX            2
1204 #define QUEUE            3
1205 #define BOARD            4
1206 #define RDSRE            5
1207 #define RDOCM            6
1208 #define PREGS            7
1209 #define L1DTG            8
1210 #define L1ITG            9
1211 #define CACHE           10
1212 #define L1DAT           11
1213 #define L1INS           12
1214 #define RDSTK           13
1215 #define RDCON           14
1216 #define L2DTG           21
1217 #define L2ITG           22
1218 #define L2DAT           23
1219 #define L2INS           24
1220 #define RDOC3           25
1221 #define MEMBK           32
1222 #define RDROM           71
1223 #define RDMEM           72
1224 #define INFOR           81
1225 #define CNTRL           98
1226 #define TLHDR           99
1227 #define RDEND           255
1228 #define PRIMQ           103
1229 #define SQG2Q           104
1230 #define SQG3Q           105
1231 #define ISCSI_EVENT_LOG 201
1232 
1233 /*
1234  * Minidump Template Header
1235  * Parts of the template header can be modified by the driver.
1236  * These include the saved_state_array, capture_debug_level, driver_timestamp
1237  * The driver_info_wordX is used to add info about the drivers environment.
1238  * It is important that drivers add identication and system info in these
1239  * fields.
1240  */
1241 
1242 #define QL_DBG_STATE_ARRAY_LEN          16
1243 #define QL_DBG_CAP_SIZE_ARRAY_LEN       8
1244 #define QL_DBG_RSVD_ARRAY_LEN           8
1245 
1246 typedef struct md_template_hdr {
1247         uint32_t        entry_type;
1248         uint32_t        first_entry_offset;
1249         uint32_t        size_of_template;
1250         uint32_t        capture_debug_level;
1251         uint32_t        num_of_entries;
1252         uint32_t        version;
1253         uint32_t        driver_timestamp;
1254         uint32_t        checksum;
1255         uint32_t        driver_capture_mask;
1256         uint32_t        driver_info_word1;
1257         uint32_t        driver_info_word2;
1258         uint32_t        driver_info_word3;
1259         uint32_t        saved_state_array[QL_DBG_STATE_ARRAY_LEN];
1260         uint32_t        capture_size_array[QL_DBG_CAP_SIZE_ARRAY_LEN];
1261 
1262         /* markers_array used to capture some special locations on board */
1263         uint32_t        markers_array[QL_DBG_RSVD_ARRAY_LEN];
1264         uint32_t        num_of_free_entries;    /* For internal use */
1265         uint32_t        free_entry_offset;      /* For internal use */
1266         uint32_t        total_table_size;       /* For internal use */
1267         uint32_t        bkup_table_offset;      /* For internal use */
1268 } md_template_hdr_t;
1269 
1270 /*
1271  * Driver Flags
1272  */
1273 #define QL_DBG_SKIPPED_FLAG     0x80    /* driver skipped this entry  */
1274 #define QL_DBG_SIZE_ERR_FLAG    0x40    /* entry siz vs capture siz mismatch */
1275 
1276 /*
1277  * Minidump Entry Header
1278  */
1279 typedef struct md_entry_hdr {
1280         uint32_t        entry_type;
1281         uint32_t        entry_size;
1282         uint32_t        entry_capture_size;
1283         union {
1284                 struct {
1285 #ifdef _BIG_ENDIAN
1286                         uint8_t driver_flags;
1287                         uint8_t driver_code;
1288                         uint8_t entry_code;
1289                         uint8_t entry_capture_mask;
1290 #else
1291                         uint8_t entry_capture_mask;
1292                         uint8_t entry_code;
1293                         uint8_t driver_code;
1294                         uint8_t driver_flags;
1295 #endif
1296                 } ecw;
1297                 uint32_t        entry_ctrl_word;
1298         } a;
1299 } md_entry_hdr_t;
1300 
1301 /*
1302  * Minidump Entry Including Header
1303  */
1304 typedef struct md_entry {
1305         md_entry_hdr_t  h;
1306         uint32_t        entry_data00;
1307         uint32_t        entry_data01;
1308         uint32_t        entry_data02;
1309         uint32_t        entry_data03;
1310         uint32_t        entry_data04;
1311         uint32_t        entry_data05;
1312         uint32_t        entry_data06;
1313         uint32_t        entry_data07;
1314 } md_entry_t;
1315 
1316 /*
1317  *  Minidump Read CRB Entry Header
1318  */
1319 typedef struct md_entry_rdcrb {
1320         md_entry_hdr_t  h;
1321         uint32_t        addr;
1322         union {
1323                 struct {
1324 #ifdef _BIG_ENDIAN
1325                         uint8_t rsvd_1[2];
1326                         uint8_t rsvd_0;
1327                         uint8_t addr_stride;
1328 #else
1329                         uint8_t addr_stride;
1330                         uint8_t rsvd_0;
1331                         uint8_t rsvd_1[2];
1332 #endif
1333                 } ac;
1334                 uint32_t        addr_cntrl;
1335         } a;
1336         uint32_t        data_size;
1337         uint32_t        op_count;
1338         uint32_t        rsvd_2;
1339         uint32_t        rsvd_3;
1340         uint32_t        rsvd_4;
1341         uint32_t        rsvd_5;
1342 } md_entry_rdcrb_t;
1343 
1344 /*
1345  * Minidump Cache Entry Header
1346  */
1347 typedef struct ql_md_entry_cache {
1348         md_entry_hdr_t  h;
1349         uint32_t        tag_reg_addr;
1350         union {
1351                 struct {
1352 #ifdef _BIG_ENDIAN
1353                         uint8_t init_tag_value[2];
1354                         uint8_t tag_value_stride[2];
1355 #else
1356                         uint8_t tag_value_stride[2];
1357                         uint8_t init_tag_value[2];
1358 #endif
1359                 } sac;
1360                 uint32_t        select_addr_cntrl;
1361         } a;
1362         uint32_t        data_size;
1363         uint32_t        op_count;
1364         uint32_t        control_addr;
1365         union {
1366                 struct {
1367 #ifdef _BIG_ENDIAN
1368                         uint8_t poll_wait;
1369                         uint8_t poll_mask;
1370                         uint8_t write_value[2];
1371 #else
1372                         uint8_t write_value[2];
1373                         uint8_t poll_mask;
1374                         uint8_t poll_wait;
1375 #endif
1376                 } cv;
1377                 uint32_t        control_value;
1378         } b;
1379         uint32_t        read_addr;
1380         union {
1381                 struct {
1382 #ifdef _BIG_ENDIAN
1383                         uint8_t rsvd_1[2];
1384                         uint8_t read_addr_cnt;
1385                         uint8_t read_addr_stride;
1386 #else
1387                         uint8_t read_addr_stride;
1388                         uint8_t read_addr_cnt;
1389                         uint8_t rsvd_1[2];
1390 #endif
1391                 } rac;
1392                 uint32_t        read_addr_cntrl;
1393         } c;
1394 } md_entry_cache_t;
1395 
1396 /*
1397  * Minidump Read OCM Entry Header
1398  */
1399 typedef struct md_entry_rdocm {
1400         md_entry_hdr_t  h;
1401         uint32_t        rsvd_0;
1402         uint32_t        rsvd_1;
1403         uint32_t        data_size;
1404         uint32_t        op_count;
1405         uint32_t        rsvd_2;
1406         uint32_t        rsvd_3;
1407         uint32_t        read_addr;
1408         uint32_t        read_addr_stride;
1409 } md_entry_rdocm_t;
1410 
1411 /*
1412  * Minidump Read MEM Entry Header
1413  */
1414 typedef struct md_entry_rdmem {
1415         md_entry_hdr_t  h;
1416         uint32_t        rsvd_0[6];
1417         uint32_t        read_addr;
1418         uint32_t        read_data_size;
1419 } md_entry_rdmem_t;
1420 /*
1421  * Minidump MIU AGENT ADDRESSES.
1422  */
1423 #define MD_TA_CTL_ENABLE                0x2
1424 #define MD_TA_CTL_START                 0x1
1425 #define MD_TA_CTL_BUSY                  0x8
1426 #define MD_TA_CTL_CHECK                 1000
1427 #define MD_MIU_TEST_AGT_CTRL            0x41000090
1428 #define MD_MIU_TEST_AGT_ADDR_LO         0x41000094
1429 #define MD_MIU_TEST_AGT_ADDR_HI         0x41000098
1430 #define MD_MIU_TEST_AGT_RDDATA_0_31     0x410000A8
1431 #define MD_MIU_TEST_AGT_RDDATA_32_63    0x410000AC
1432 #define MD_MIU_TEST_AGT_RDDATA_64_95    0x410000B8
1433 #define MD_MIU_TEST_AGT_RDDATA_96_127   0x410000BC
1434 #define MD_MIU_TEST_AGT_WRDATA_0_31     0x410000A0
1435 #define MD_MIU_TEST_AGT_WRDATA_32_63    0x410000A4
1436 #define MD_MIU_TEST_AGT_WRDATA_64_95    0x410000B0
1437 #define MD_MIU_TEST_AGT_WRDATA_96_127   0x410000B4
1438 
1439 /*
1440  * Minidump Read ROM Entry Header
1441  */
1442 typedef struct md_entry_rdrom {
1443         md_entry_hdr_t  h;
1444         uint32_t        rsvd_0[6];
1445         uint32_t        read_addr;
1446         uint32_t        read_data_size;
1447 } md_entry_rdrom_t;
1448 /*
1449  *  Minidump ROM Read Address
1450  */
1451 #define MD_DIRECT_ROM_WINDOW    0x42110030
1452 #define MD_DIRECT_ROM_READ_BASE 0x42150000
1453 
1454 /*
1455  * Minidump Read MUX Entry Header
1456  */
1457 typedef struct md_entry_mux {
1458         md_entry_hdr_t  h;
1459         uint32_t        select_addr;
1460         union {
1461                 struct {
1462                         uint32_t        rsvd_0;
1463                 } sac;
1464                 uint32_t        select_addr_cntrl;
1465         } a;
1466         uint32_t        data_size;
1467         uint32_t        op_count;
1468         uint32_t        select_value;
1469         uint32_t        select_value_stride;
1470         uint32_t        read_addr;
1471         uint32_t        rsvd_1;
1472 } md_entry_mux_t;
1473 
1474 /*
1475  * Minidump Read QUEUE Entry Header
1476  */
1477 typedef struct md_entry_queue {
1478         md_entry_hdr_t  h;
1479         uint32_t        select_addr;
1480         union {
1481                 struct {
1482 #ifdef _BIG_ENDIAN
1483                         uint8_t rsvd_0[2];
1484                         uint8_t queue_id_stride[2];
1485 #else
1486                         uint8_t queue_id_stride[2];
1487                         uint8_t rsvd_0[2];
1488 #endif
1489                 } sac;
1490                 uint32_t        select_addr_cntrl;
1491         } a;
1492         uint32_t        data_size;
1493         uint32_t        op_count;
1494         uint32_t        rsvd_1;
1495         uint32_t        rsvd_2;
1496         uint32_t        read_addr;
1497         union {
1498                 struct {
1499 #ifdef _BIG_ENDIAN
1500                         uint8_t rsvd_3[2];
1501                         uint8_t read_addr_cnt;
1502                         uint8_t read_addr_stride;
1503 #else
1504                         uint8_t read_addr_stride;
1505                         uint8_t read_addr_cnt;
1506                         uint8_t rsvd_3[2];
1507 #endif
1508                 } rac;
1509                 uint32_t        read_addr_cntrl;
1510         } b;
1511 } md_entry_queue_t;
1512 
1513 /*
1514  * Minidump Control Entry Header
1515  */
1516 typedef struct md_entry_cntrl {
1517         md_entry_hdr_t  h;
1518         uint32_t        addr;
1519         union {
1520                 struct {
1521 #ifdef _BIG_ENDIAN
1522                         uint8_t poll_timeout[2];
1523                         uint8_t state_index_a;
1524                         uint8_t addr_stride;
1525 #else
1526                         uint8_t addr_stride;
1527                         uint8_t state_index_a;
1528                         uint8_t poll_timeout[2];
1529 #endif
1530                 } ac;
1531                 uint32_t        addr_cntrl;
1532         } a;
1533         uint32_t        data_size;
1534         uint32_t        op_count;
1535         union {
1536                 struct {
1537 #ifdef _BIG_ENDIAN
1538                         uint8_t shr;
1539                         uint8_t shl;
1540                         uint8_t state_index_v;
1541                         uint8_t opcode;
1542 #else
1543                         uint8_t opcode;
1544                         uint8_t state_index_v;
1545                         uint8_t shl;
1546                         uint8_t shr;
1547 #endif
1548                 } cv;
1549                 uint32_t        control_value;
1550         } b;
1551         uint32_t        value_1;
1552         uint32_t        value_2;
1553         uint32_t        value_3;
1554 } md_entry_cntrl_t;
1555 
1556 /*
1557  * Opcodes for Control Entries.
1558  * These Flags are bit fields.
1559  */
1560 #define QL_DBG_OPCODE_WR        0x01
1561 #define QL_DBG_OPCODE_RW        0x02
1562 #define QL_DBG_OPCODE_AND       0x04
1563 #define QL_DBG_OPCODE_OR        0x08
1564 #define QL_DBG_OPCODE_POLL      0x10
1565 #define QL_DBG_OPCODE_RDSTATE   0x20
1566 #define QL_DBG_OPCODE_WRSTATE   0x40
1567 #define QL_DBG_OPCODE_MDSTATE   0x80
1568 
1569 /*
1570  * Global Data in ql_nx.c source file.
1571  */
1572 
1573 /*
1574  * Global Function Prototypes in ql_nx.c source file.
1575  */
1576 void ql_8021_wr_32(ql_adapter_state_t *, uint64_t, uint32_t);
1577 void ql_8021_rd_32(ql_adapter_state_t *, uint64_t, uint32_t *);
1578 void ql_8021_reset_chip(ql_adapter_state_t *);
1579 int ql_8021_fw_reload(ql_adapter_state_t *);
1580 void ql_8021_clr_hw_intr(ql_adapter_state_t *);
1581 void ql_8021_clr_fw_intr(ql_adapter_state_t *);
1582 void ql_8021_enable_intrs(ql_adapter_state_t *);
1583 void ql_8021_disable_intrs(ql_adapter_state_t *);
1584 void ql_8021_update_crb_int_ptr(ql_adapter_state_t *);
1585 int ql_8021_rom_read(ql_adapter_state_t *, uint32_t, uint32_t *);
1586 int ql_8021_rom_write(ql_adapter_state_t *, uint32_t, uint32_t);
1587 int ql_8021_rom_erase(ql_adapter_state_t *, uint32_t);
1588 int ql_8021_rom_wrsr(ql_adapter_state_t *, uint32_t);
1589 void ql_8021_set_drv_active(ql_adapter_state_t *);
1590 void ql_8021_clr_drv_active(ql_adapter_state_t *);
1591 int ql_8021_idc_handler(ql_adapter_state_t *, uint32_t);
1592 void ql_8021_wr_req_in(ql_adapter_state_t *, uint32_t);
1593 void ql_8021_idc_poll(ql_adapter_state_t *);
1594 int ql_8021_reset_fw(ql_adapter_state_t *);
1595 int ql_8021_fw_chk(ql_adapter_state_t *);
1596 int ql_8021_get_md_template(ql_adapter_state_t *);
1597 
1598 #ifdef __cplusplus
1599 }
1600 #endif
1601 
1602 #endif /* _QL_NX_H */