linux/include/linux/qed/common_hsi.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
   2/* QLogic qed NIC Driver
   3 * Copyright (c) 2015-2016  QLogic Corporation
   4 * Copyright (c) 2019-2020 Marvell International Ltd.
   5 */
   6
   7#ifndef _COMMON_HSI_H
   8#define _COMMON_HSI_H
   9
  10#include <linux/types.h>
  11#include <asm/byteorder.h>
  12#include <linux/bitops.h>
  13#include <linux/slab.h>
  14
  15/* dma_addr_t manip */
  16#define PTR_LO(x)               ((u32)(((uintptr_t)(x)) & 0xffffffff))
  17#define PTR_HI(x)               ((u32)((((uintptr_t)(x)) >> 16) >> 16))
  18#define DMA_LO_LE(x)            cpu_to_le32(lower_32_bits(x))
  19#define DMA_HI_LE(x)            cpu_to_le32(upper_32_bits(x))
  20#define DMA_REGPAIR_LE(x, val)  do { \
  21                                        (x).hi = DMA_HI_LE((val)); \
  22                                        (x).lo = DMA_LO_LE((val)); \
  23                                } while (0)
  24
  25#define HILO_GEN(hi, lo, type)          ((((type)(hi)) << 32) + (lo))
  26#define HILO_64(hi, lo) \
  27        HILO_GEN(le32_to_cpu(hi), le32_to_cpu(lo), u64)
  28#define HILO_64_REGPAIR(regpair) ({ \
  29        typeof(regpair) __regpair = (regpair); \
  30        HILO_64(__regpair.hi, __regpair.lo); })
  31#define HILO_DMA_REGPAIR(regpair)       ((dma_addr_t)HILO_64_REGPAIR(regpair))
  32
  33#ifndef __COMMON_HSI__
  34#define __COMMON_HSI__
  35
  36/********************************/
  37/* PROTOCOL COMMON FW CONSTANTS */
  38/********************************/
  39
  40#define X_FINAL_CLEANUP_AGG_INT                 1
  41
  42#define EVENT_RING_PAGE_SIZE_BYTES              4096
  43
  44#define NUM_OF_GLOBAL_QUEUES                    128
  45#define COMMON_QUEUE_ENTRY_MAX_BYTE_SIZE        64
  46
  47#define ISCSI_CDU_TASK_SEG_TYPE                 0
  48#define FCOE_CDU_TASK_SEG_TYPE                  0
  49#define RDMA_CDU_TASK_SEG_TYPE                  1
  50
  51#define FW_ASSERT_GENERAL_ATTN_IDX              32
  52
  53
  54/* Queue Zone sizes in bytes */
  55#define TSTORM_QZONE_SIZE       8
  56#define MSTORM_QZONE_SIZE       16
  57#define USTORM_QZONE_SIZE       8
  58#define XSTORM_QZONE_SIZE       8
  59#define YSTORM_QZONE_SIZE       0
  60#define PSTORM_QZONE_SIZE       0
  61
  62#define MSTORM_VF_ZONE_DEFAULT_SIZE_LOG         7
  63#define ETH_MAX_NUM_RX_QUEUES_PER_VF_DEFAULT    16
  64#define ETH_MAX_NUM_RX_QUEUES_PER_VF_DOUBLE     48
  65#define ETH_MAX_NUM_RX_QUEUES_PER_VF_QUAD       112
  66
  67/********************************/
  68/* CORE (LIGHT L2) FW CONSTANTS */
  69/********************************/
  70
  71#define CORE_LL2_MAX_RAMROD_PER_CON     8
  72#define CORE_LL2_TX_BD_PAGE_SIZE_BYTES  4096
  73#define CORE_LL2_RX_BD_PAGE_SIZE_BYTES  4096
  74#define CORE_LL2_RX_CQE_PAGE_SIZE_BYTES 4096
  75#define CORE_LL2_RX_NUM_NEXT_PAGE_BDS   1
  76
  77#define CORE_LL2_TX_MAX_BDS_PER_PACKET  12
  78
  79#define CORE_SPQE_PAGE_SIZE_BYTES       4096
  80
  81/* Number of LL2 RAM based queues */
  82#define MAX_NUM_LL2_RX_RAM_QUEUES 32
  83
  84/* Number of LL2 context based queues */
  85#define MAX_NUM_LL2_RX_CTX_QUEUES 208
  86#define MAX_NUM_LL2_RX_QUEUES \
  87        (MAX_NUM_LL2_RX_RAM_QUEUES + MAX_NUM_LL2_RX_CTX_QUEUES)
  88
  89#define MAX_NUM_LL2_TX_STATS_COUNTERS  48
  90
  91#define FW_MAJOR_VERSION        8
  92#define FW_MINOR_VERSION        42
  93#define FW_REVISION_VERSION     2
  94#define FW_ENGINEERING_VERSION  0
  95
  96/***********************/
  97/* COMMON HW CONSTANTS */
  98/***********************/
  99
 100/* PCI functions */
 101#define MAX_NUM_PORTS_K2        (4)
 102#define MAX_NUM_PORTS_BB        (2)
 103#define MAX_NUM_PORTS           (MAX_NUM_PORTS_K2)
 104
 105#define MAX_NUM_PFS_K2          (16)
 106#define MAX_NUM_PFS_BB          (8)
 107#define MAX_NUM_PFS             (MAX_NUM_PFS_K2)
 108#define MAX_NUM_OF_PFS_IN_CHIP  (16) /* On both engines */
 109
 110#define MAX_NUM_VFS_K2  (192)
 111#define MAX_NUM_VFS_BB  (120)
 112#define MAX_NUM_VFS     (MAX_NUM_VFS_K2)
 113
 114#define MAX_NUM_FUNCTIONS_BB    (MAX_NUM_PFS_BB + MAX_NUM_VFS_BB)
 115
 116#define MAX_FUNCTION_NUMBER_BB  (MAX_NUM_PFS + MAX_NUM_VFS_BB)
 117#define MAX_FUNCTION_NUMBER_K2  (MAX_NUM_PFS + MAX_NUM_VFS_K2)
 118#define MAX_NUM_FUNCTIONS       (MAX_FUNCTION_NUMBER_K2)
 119
 120#define MAX_NUM_VPORTS_K2       (208)
 121#define MAX_NUM_VPORTS_BB       (160)
 122#define MAX_NUM_VPORTS          (MAX_NUM_VPORTS_K2)
 123
 124#define MAX_NUM_L2_QUEUES_K2    (320)
 125#define MAX_NUM_L2_QUEUES_BB    (256)
 126#define MAX_NUM_L2_QUEUES       (MAX_NUM_L2_QUEUES_K2)
 127
 128/* Traffic classes in network-facing blocks (PBF, BTB, NIG, BRB, PRS and QM) */
 129#define NUM_PHYS_TCS_4PORT_K2   (4)
 130#define NUM_OF_PHYS_TCS         (8)
 131#define PURE_LB_TC              NUM_OF_PHYS_TCS
 132#define NUM_TCS_4PORT_K2        (NUM_PHYS_TCS_4PORT_K2 + 1)
 133#define NUM_OF_TCS              (NUM_OF_PHYS_TCS + 1)
 134
 135/* CIDs */
 136#define NUM_OF_CONNECTION_TYPES_E4      (8)
 137#define NUM_OF_LCIDS                    (320)
 138#define NUM_OF_LTIDS                    (320)
 139
 140/* Global PXP windows (GTT) */
 141#define NUM_OF_GTT              19
 142#define GTT_DWORD_SIZE_BITS     10
 143#define GTT_BYTE_SIZE_BITS      (GTT_DWORD_SIZE_BITS + 2)
 144#define GTT_DWORD_SIZE          BIT(GTT_DWORD_SIZE_BITS)
 145
 146/* Tools Version */
 147#define TOOLS_VERSION   10
 148
 149/*****************/
 150/* CDU CONSTANTS */
 151/*****************/
 152
 153#define CDU_SEG_TYPE_OFFSET_REG_TYPE_SHIFT                      (17)
 154#define CDU_SEG_TYPE_OFFSET_REG_OFFSET_MASK                     (0x1ffff)
 155
 156#define CDU_VF_FL_SEG_TYPE_OFFSET_REG_TYPE_SHIFT                (12)
 157#define CDU_VF_FL_SEG_TYPE_OFFSET_REG_OFFSET_MASK               (0xfff)
 158
 159#define CDU_CONTEXT_VALIDATION_CFG_ENABLE_SHIFT                 (0)
 160#define CDU_CONTEXT_VALIDATION_CFG_VALIDATION_TYPE_SHIFT        (1)
 161#define CDU_CONTEXT_VALIDATION_CFG_USE_TYPE                     (2)
 162#define CDU_CONTEXT_VALIDATION_CFG_USE_REGION                   (3)
 163#define CDU_CONTEXT_VALIDATION_CFG_USE_CID                      (4)
 164#define CDU_CONTEXT_VALIDATION_CFG_USE_ACTIVE                   (5)
 165
 166/*****************/
 167/* DQ CONSTANTS  */
 168/*****************/
 169
 170/* DEMS */
 171#define DQ_DEMS_LEGACY                  0
 172#define DQ_DEMS_TOE_MORE_TO_SEND        3
 173#define DQ_DEMS_TOE_LOCAL_ADV_WND       4
 174#define DQ_DEMS_ROCE_CQ_CONS            7
 175
 176/* XCM agg val selection (HW) */
 177#define DQ_XCM_AGG_VAL_SEL_WORD2        0
 178#define DQ_XCM_AGG_VAL_SEL_WORD3        1
 179#define DQ_XCM_AGG_VAL_SEL_WORD4        2
 180#define DQ_XCM_AGG_VAL_SEL_WORD5        3
 181#define DQ_XCM_AGG_VAL_SEL_REG3         4
 182#define DQ_XCM_AGG_VAL_SEL_REG4         5
 183#define DQ_XCM_AGG_VAL_SEL_REG5         6
 184#define DQ_XCM_AGG_VAL_SEL_REG6         7
 185
 186/* XCM agg val selection (FW) */
 187#define DQ_XCM_CORE_TX_BD_CONS_CMD              DQ_XCM_AGG_VAL_SEL_WORD3
 188#define DQ_XCM_CORE_TX_BD_PROD_CMD              DQ_XCM_AGG_VAL_SEL_WORD4
 189#define DQ_XCM_CORE_SPQ_PROD_CMD                DQ_XCM_AGG_VAL_SEL_WORD4
 190#define DQ_XCM_ETH_EDPM_NUM_BDS_CMD             DQ_XCM_AGG_VAL_SEL_WORD2
 191#define DQ_XCM_ETH_TX_BD_CONS_CMD               DQ_XCM_AGG_VAL_SEL_WORD3
 192#define DQ_XCM_ETH_TX_BD_PROD_CMD               DQ_XCM_AGG_VAL_SEL_WORD4
 193#define DQ_XCM_ETH_GO_TO_BD_CONS_CMD            DQ_XCM_AGG_VAL_SEL_WORD5
 194#define DQ_XCM_FCOE_SQ_CONS_CMD                 DQ_XCM_AGG_VAL_SEL_WORD3
 195#define DQ_XCM_FCOE_SQ_PROD_CMD                 DQ_XCM_AGG_VAL_SEL_WORD4
 196#define DQ_XCM_FCOE_X_FERQ_PROD_CMD             DQ_XCM_AGG_VAL_SEL_WORD5
 197#define DQ_XCM_ISCSI_SQ_CONS_CMD                DQ_XCM_AGG_VAL_SEL_WORD3
 198#define DQ_XCM_ISCSI_SQ_PROD_CMD                DQ_XCM_AGG_VAL_SEL_WORD4
 199#define DQ_XCM_ISCSI_MORE_TO_SEND_SEQ_CMD       DQ_XCM_AGG_VAL_SEL_REG3
 200#define DQ_XCM_ISCSI_EXP_STAT_SN_CMD            DQ_XCM_AGG_VAL_SEL_REG6
 201#define DQ_XCM_ROCE_SQ_PROD_CMD                 DQ_XCM_AGG_VAL_SEL_WORD4
 202#define DQ_XCM_TOE_TX_BD_PROD_CMD               DQ_XCM_AGG_VAL_SEL_WORD4
 203#define DQ_XCM_TOE_MORE_TO_SEND_SEQ_CMD         DQ_XCM_AGG_VAL_SEL_REG3
 204#define DQ_XCM_TOE_LOCAL_ADV_WND_SEQ_CMD        DQ_XCM_AGG_VAL_SEL_REG4
 205#define DQ_XCM_ROCE_ACK_EDPM_DORQ_SEQ_CMD       DQ_XCM_AGG_VAL_SEL_WORD5
 206
 207/* UCM agg val selection (HW) */
 208#define DQ_UCM_AGG_VAL_SEL_WORD0        0
 209#define DQ_UCM_AGG_VAL_SEL_WORD1        1
 210#define DQ_UCM_AGG_VAL_SEL_WORD2        2
 211#define DQ_UCM_AGG_VAL_SEL_WORD3        3
 212#define DQ_UCM_AGG_VAL_SEL_REG0         4
 213#define DQ_UCM_AGG_VAL_SEL_REG1         5
 214#define DQ_UCM_AGG_VAL_SEL_REG2         6
 215#define DQ_UCM_AGG_VAL_SEL_REG3         7
 216
 217/* UCM agg val selection (FW) */
 218#define DQ_UCM_ETH_PMD_TX_CONS_CMD      DQ_UCM_AGG_VAL_SEL_WORD2
 219#define DQ_UCM_ETH_PMD_RX_CONS_CMD      DQ_UCM_AGG_VAL_SEL_WORD3
 220#define DQ_UCM_ROCE_CQ_CONS_CMD         DQ_UCM_AGG_VAL_SEL_REG0
 221#define DQ_UCM_ROCE_CQ_PROD_CMD         DQ_UCM_AGG_VAL_SEL_REG2
 222
 223/* TCM agg val selection (HW) */
 224#define DQ_TCM_AGG_VAL_SEL_WORD0        0
 225#define DQ_TCM_AGG_VAL_SEL_WORD1        1
 226#define DQ_TCM_AGG_VAL_SEL_WORD2        2
 227#define DQ_TCM_AGG_VAL_SEL_WORD3        3
 228#define DQ_TCM_AGG_VAL_SEL_REG1         4
 229#define DQ_TCM_AGG_VAL_SEL_REG2         5
 230#define DQ_TCM_AGG_VAL_SEL_REG6         6
 231#define DQ_TCM_AGG_VAL_SEL_REG9         7
 232
 233/* TCM agg val selection (FW) */
 234#define DQ_TCM_L2B_BD_PROD_CMD \
 235        DQ_TCM_AGG_VAL_SEL_WORD1
 236#define DQ_TCM_ROCE_RQ_PROD_CMD \
 237        DQ_TCM_AGG_VAL_SEL_WORD0
 238
 239/* XCM agg counter flag selection (HW) */
 240#define DQ_XCM_AGG_FLG_SHIFT_BIT14      0
 241#define DQ_XCM_AGG_FLG_SHIFT_BIT15      1
 242#define DQ_XCM_AGG_FLG_SHIFT_CF12       2
 243#define DQ_XCM_AGG_FLG_SHIFT_CF13       3
 244#define DQ_XCM_AGG_FLG_SHIFT_CF18       4
 245#define DQ_XCM_AGG_FLG_SHIFT_CF19       5
 246#define DQ_XCM_AGG_FLG_SHIFT_CF22       6
 247#define DQ_XCM_AGG_FLG_SHIFT_CF23       7
 248
 249/* XCM agg counter flag selection (FW) */
 250#define DQ_XCM_CORE_DQ_CF_CMD                   BIT(DQ_XCM_AGG_FLG_SHIFT_CF18)
 251#define DQ_XCM_CORE_TERMINATE_CMD               BIT(DQ_XCM_AGG_FLG_SHIFT_CF19)
 252#define DQ_XCM_CORE_SLOW_PATH_CMD               BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
 253#define DQ_XCM_ETH_DQ_CF_CMD                    BIT(DQ_XCM_AGG_FLG_SHIFT_CF18)
 254#define DQ_XCM_ETH_TERMINATE_CMD                BIT(DQ_XCM_AGG_FLG_SHIFT_CF19)
 255#define DQ_XCM_ETH_SLOW_PATH_CMD                BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
 256#define DQ_XCM_ETH_TPH_EN_CMD                   BIT(DQ_XCM_AGG_FLG_SHIFT_CF23)
 257#define DQ_XCM_FCOE_SLOW_PATH_CMD               BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
 258#define DQ_XCM_ISCSI_DQ_FLUSH_CMD               BIT(DQ_XCM_AGG_FLG_SHIFT_CF19)
 259#define DQ_XCM_ISCSI_SLOW_PATH_CMD              BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
 260#define DQ_XCM_ISCSI_PROC_ONLY_CLEANUP_CMD      BIT(DQ_XCM_AGG_FLG_SHIFT_CF23)
 261#define DQ_XCM_TOE_DQ_FLUSH_CMD                 BIT(DQ_XCM_AGG_FLG_SHIFT_CF19)
 262#define DQ_XCM_TOE_SLOW_PATH_CMD                BIT(DQ_XCM_AGG_FLG_SHIFT_CF22)
 263
 264/* UCM agg counter flag selection (HW) */
 265#define DQ_UCM_AGG_FLG_SHIFT_CF0        0
 266#define DQ_UCM_AGG_FLG_SHIFT_CF1        1
 267#define DQ_UCM_AGG_FLG_SHIFT_CF3        2
 268#define DQ_UCM_AGG_FLG_SHIFT_CF4        3
 269#define DQ_UCM_AGG_FLG_SHIFT_CF5        4
 270#define DQ_UCM_AGG_FLG_SHIFT_CF6        5
 271#define DQ_UCM_AGG_FLG_SHIFT_RULE0EN    6
 272#define DQ_UCM_AGG_FLG_SHIFT_RULE1EN    7
 273
 274/* UCM agg counter flag selection (FW) */
 275#define DQ_UCM_ETH_PMD_TX_ARM_CMD       BIT(DQ_UCM_AGG_FLG_SHIFT_CF4)
 276#define DQ_UCM_ETH_PMD_RX_ARM_CMD       BIT(DQ_UCM_AGG_FLG_SHIFT_CF5)
 277#define DQ_UCM_ROCE_CQ_ARM_SE_CF_CMD    BIT(DQ_UCM_AGG_FLG_SHIFT_CF4)
 278#define DQ_UCM_ROCE_CQ_ARM_CF_CMD       BIT(DQ_UCM_AGG_FLG_SHIFT_CF5)
 279#define DQ_UCM_TOE_TIMER_STOP_ALL_CMD   BIT(DQ_UCM_AGG_FLG_SHIFT_CF3)
 280#define DQ_UCM_TOE_SLOW_PATH_CF_CMD     BIT(DQ_UCM_AGG_FLG_SHIFT_CF4)
 281#define DQ_UCM_TOE_DQ_CF_CMD            BIT(DQ_UCM_AGG_FLG_SHIFT_CF5)
 282
 283/* TCM agg counter flag selection (HW) */
 284#define DQ_TCM_AGG_FLG_SHIFT_CF0        0
 285#define DQ_TCM_AGG_FLG_SHIFT_CF1        1
 286#define DQ_TCM_AGG_FLG_SHIFT_CF2        2
 287#define DQ_TCM_AGG_FLG_SHIFT_CF3        3
 288#define DQ_TCM_AGG_FLG_SHIFT_CF4        4
 289#define DQ_TCM_AGG_FLG_SHIFT_CF5        5
 290#define DQ_TCM_AGG_FLG_SHIFT_CF6        6
 291#define DQ_TCM_AGG_FLG_SHIFT_CF7        7
 292/* TCM agg counter flag selection (FW) */
 293#define DQ_TCM_FCOE_FLUSH_Q0_CMD        BIT(DQ_TCM_AGG_FLG_SHIFT_CF1)
 294#define DQ_TCM_FCOE_DUMMY_TIMER_CMD     BIT(DQ_TCM_AGG_FLG_SHIFT_CF2)
 295#define DQ_TCM_FCOE_TIMER_STOP_ALL_CMD  BIT(DQ_TCM_AGG_FLG_SHIFT_CF3)
 296#define DQ_TCM_ISCSI_FLUSH_Q0_CMD       BIT(DQ_TCM_AGG_FLG_SHIFT_CF1)
 297#define DQ_TCM_ISCSI_TIMER_STOP_ALL_CMD BIT(DQ_TCM_AGG_FLG_SHIFT_CF3)
 298#define DQ_TCM_TOE_FLUSH_Q0_CMD         BIT(DQ_TCM_AGG_FLG_SHIFT_CF1)
 299#define DQ_TCM_TOE_TIMER_STOP_ALL_CMD   BIT(DQ_TCM_AGG_FLG_SHIFT_CF3)
 300#define DQ_TCM_IWARP_POST_RQ_CF_CMD     BIT(DQ_TCM_AGG_FLG_SHIFT_CF1)
 301
 302/* PWM address mapping */
 303#define DQ_PWM_OFFSET_DPM_BASE          0x0
 304#define DQ_PWM_OFFSET_DPM_END           0x27
 305#define DQ_PWM_OFFSET_XCM16_BASE        0x40
 306#define DQ_PWM_OFFSET_XCM32_BASE        0x44
 307#define DQ_PWM_OFFSET_UCM16_BASE        0x48
 308#define DQ_PWM_OFFSET_UCM32_BASE        0x4C
 309#define DQ_PWM_OFFSET_UCM16_4           0x50
 310#define DQ_PWM_OFFSET_TCM16_BASE        0x58
 311#define DQ_PWM_OFFSET_TCM32_BASE        0x5C
 312#define DQ_PWM_OFFSET_XCM_FLAGS         0x68
 313#define DQ_PWM_OFFSET_UCM_FLAGS         0x69
 314#define DQ_PWM_OFFSET_TCM_FLAGS         0x6B
 315
 316#define DQ_PWM_OFFSET_XCM_RDMA_SQ_PROD          (DQ_PWM_OFFSET_XCM16_BASE + 2)
 317#define DQ_PWM_OFFSET_UCM_RDMA_CQ_CONS_32BIT    (DQ_PWM_OFFSET_UCM32_BASE)
 318#define DQ_PWM_OFFSET_UCM_RDMA_CQ_CONS_16BIT    (DQ_PWM_OFFSET_UCM16_4)
 319#define DQ_PWM_OFFSET_UCM_RDMA_INT_TIMEOUT      (DQ_PWM_OFFSET_UCM16_BASE + 2)
 320#define DQ_PWM_OFFSET_UCM_RDMA_ARM_FLAGS        (DQ_PWM_OFFSET_UCM_FLAGS)
 321#define DQ_PWM_OFFSET_TCM_ROCE_RQ_PROD          (DQ_PWM_OFFSET_TCM16_BASE + 1)
 322#define DQ_PWM_OFFSET_TCM_IWARP_RQ_PROD         (DQ_PWM_OFFSET_TCM16_BASE + 3)
 323
 324/* DQ_DEMS_AGG_VAL_BASE */
 325#define DQ_PWM_OFFSET_TCM_LL2_PROD_UPDATE \
 326        (DQ_PWM_OFFSET_TCM32_BASE + DQ_TCM_AGG_VAL_SEL_REG9 - 4)
 327
 328#define DQ_REGION_SHIFT                 (12)
 329
 330/* DPM */
 331#define DQ_DPM_WQE_BUFF_SIZE            (320)
 332
 333/* Conn type ranges */
 334#define DQ_CONN_TYPE_RANGE_SHIFT        (4)
 335
 336/*****************/
 337/* QM CONSTANTS  */
 338/*****************/
 339
 340/* Number of TX queues in the QM */
 341#define MAX_QM_TX_QUEUES_K2     512
 342#define MAX_QM_TX_QUEUES_BB     448
 343#define MAX_QM_TX_QUEUES        MAX_QM_TX_QUEUES_K2
 344
 345/* Number of Other queues in the QM */
 346#define MAX_QM_OTHER_QUEUES_BB  64
 347#define MAX_QM_OTHER_QUEUES_K2  128
 348#define MAX_QM_OTHER_QUEUES     MAX_QM_OTHER_QUEUES_K2
 349
 350/* Number of queues in a PF queue group */
 351#define QM_PF_QUEUE_GROUP_SIZE  8
 352
 353/* The size of a single queue element in bytes */
 354#define QM_PQ_ELEMENT_SIZE      4
 355
 356/* Base number of Tx PQs in the CM PQ representation.
 357 * Should be used when storing PQ IDs in CM PQ registers and context.
 358 */
 359#define CM_TX_PQ_BASE           0x200
 360
 361/* Number of global Vport/QCN rate limiters */
 362#define MAX_QM_GLOBAL_RLS       256
 363
 364/* QM registers data */
 365#define QM_LINE_CRD_REG_WIDTH           16
 366#define QM_LINE_CRD_REG_SIGN_BIT        BIT((QM_LINE_CRD_REG_WIDTH - 1))
 367#define QM_BYTE_CRD_REG_WIDTH           24
 368#define QM_BYTE_CRD_REG_SIGN_BIT        BIT((QM_BYTE_CRD_REG_WIDTH - 1))
 369#define QM_WFQ_CRD_REG_WIDTH            32
 370#define QM_WFQ_CRD_REG_SIGN_BIT         BIT((QM_WFQ_CRD_REG_WIDTH - 1))
 371#define QM_RL_CRD_REG_WIDTH             32
 372#define QM_RL_CRD_REG_SIGN_BIT          BIT((QM_RL_CRD_REG_WIDTH - 1))
 373
 374/*****************/
 375/* CAU CONSTANTS */
 376/*****************/
 377
 378#define CAU_FSM_ETH_RX  0
 379#define CAU_FSM_ETH_TX  1
 380
 381/* Number of Protocol Indices per Status Block */
 382#define PIS_PER_SB_E4   12
 383#define MAX_PIS_PER_SB  PIS_PER_SB
 384
 385#define CAU_HC_STOPPED_STATE    3
 386#define CAU_HC_DISABLE_STATE    4
 387#define CAU_HC_ENABLE_STATE     0
 388
 389/*****************/
 390/* IGU CONSTANTS */
 391/*****************/
 392
 393#define MAX_SB_PER_PATH_K2      (368)
 394#define MAX_SB_PER_PATH_BB      (288)
 395#define MAX_TOT_SB_PER_PATH \
 396        MAX_SB_PER_PATH_K2
 397
 398#define MAX_SB_PER_PF_MIMD      129
 399#define MAX_SB_PER_PF_SIMD      64
 400#define MAX_SB_PER_VF           64
 401
 402/* Memory addresses on the BAR for the IGU Sub Block */
 403#define IGU_MEM_BASE                    0x0000
 404
 405#define IGU_MEM_MSIX_BASE               0x0000
 406#define IGU_MEM_MSIX_UPPER              0x0101
 407#define IGU_MEM_MSIX_RESERVED_UPPER     0x01ff
 408
 409#define IGU_MEM_PBA_MSIX_BASE           0x0200
 410#define IGU_MEM_PBA_MSIX_UPPER          0x0202
 411#define IGU_MEM_PBA_MSIX_RESERVED_UPPER 0x03ff
 412
 413#define IGU_CMD_INT_ACK_BASE            0x0400
 414#define IGU_CMD_INT_ACK_RESERVED_UPPER  0x05ff
 415
 416#define IGU_CMD_ATTN_BIT_UPD_UPPER      0x05f0
 417#define IGU_CMD_ATTN_BIT_SET_UPPER      0x05f1
 418#define IGU_CMD_ATTN_BIT_CLR_UPPER      0x05f2
 419
 420#define IGU_REG_SISR_MDPC_WMASK_UPPER           0x05f3
 421#define IGU_REG_SISR_MDPC_WMASK_LSB_UPPER       0x05f4
 422#define IGU_REG_SISR_MDPC_WMASK_MSB_UPPER       0x05f5
 423#define IGU_REG_SISR_MDPC_WOMASK_UPPER          0x05f6
 424
 425#define IGU_CMD_PROD_UPD_BASE                   0x0600
 426#define IGU_CMD_PROD_UPD_RESERVED_UPPER         0x07ff
 427
 428/*****************/
 429/* PXP CONSTANTS */
 430/*****************/
 431
 432/* Bars for Blocks */
 433#define PXP_BAR_GRC     0
 434#define PXP_BAR_TSDM    0
 435#define PXP_BAR_USDM    0
 436#define PXP_BAR_XSDM    0
 437#define PXP_BAR_MSDM    0
 438#define PXP_BAR_YSDM    0
 439#define PXP_BAR_PSDM    0
 440#define PXP_BAR_IGU     0
 441#define PXP_BAR_DQ      1
 442
 443/* PTT and GTT */
 444#define PXP_PER_PF_ENTRY_SIZE           8
 445#define PXP_NUM_GLOBAL_WINDOWS          243
 446#define PXP_GLOBAL_ENTRY_SIZE           4
 447#define PXP_ADMIN_WINDOW_ALLOWED_LENGTH 4
 448#define PXP_PF_WINDOW_ADMIN_START       0
 449#define PXP_PF_WINDOW_ADMIN_LENGTH      0x1000
 450#define PXP_PF_WINDOW_ADMIN_END         (PXP_PF_WINDOW_ADMIN_START + \
 451                                         PXP_PF_WINDOW_ADMIN_LENGTH - 1)
 452#define PXP_PF_WINDOW_ADMIN_PER_PF_START        0
 453#define PXP_PF_WINDOW_ADMIN_PER_PF_LENGTH       (PXP_NUM_PF_WINDOWS * \
 454                                                 PXP_PER_PF_ENTRY_SIZE)
 455#define PXP_PF_WINDOW_ADMIN_PER_PF_END  (PXP_PF_WINDOW_ADMIN_PER_PF_START + \
 456                                         PXP_PF_WINDOW_ADMIN_PER_PF_LENGTH - 1)
 457#define PXP_PF_WINDOW_ADMIN_GLOBAL_START        0x200
 458#define PXP_PF_WINDOW_ADMIN_GLOBAL_LENGTH       (PXP_NUM_GLOBAL_WINDOWS * \
 459                                                 PXP_GLOBAL_ENTRY_SIZE)
 460#define PXP_PF_WINDOW_ADMIN_GLOBAL_END \
 461                (PXP_PF_WINDOW_ADMIN_GLOBAL_START + \
 462                 PXP_PF_WINDOW_ADMIN_GLOBAL_LENGTH - 1)
 463#define PXP_PF_GLOBAL_PRETEND_ADDR      0x1f0
 464#define PXP_PF_ME_OPAQUE_MASK_ADDR      0xf4
 465#define PXP_PF_ME_OPAQUE_ADDR           0x1f8
 466#define PXP_PF_ME_CONCRETE_ADDR         0x1fc
 467
 468#define PXP_NUM_PF_WINDOWS      12
 469#define PXP_EXTERNAL_BAR_PF_WINDOW_START        0x1000
 470#define PXP_EXTERNAL_BAR_PF_WINDOW_NUM          PXP_NUM_PF_WINDOWS
 471#define PXP_EXTERNAL_BAR_PF_WINDOW_SINGLE_SIZE  0x1000
 472#define PXP_EXTERNAL_BAR_PF_WINDOW_LENGTH \
 473        (PXP_EXTERNAL_BAR_PF_WINDOW_NUM * \
 474         PXP_EXTERNAL_BAR_PF_WINDOW_SINGLE_SIZE)
 475#define PXP_EXTERNAL_BAR_PF_WINDOW_END \
 476        (PXP_EXTERNAL_BAR_PF_WINDOW_START + \
 477         PXP_EXTERNAL_BAR_PF_WINDOW_LENGTH - 1)
 478
 479#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_START \
 480        (PXP_EXTERNAL_BAR_PF_WINDOW_END + 1)
 481#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_NUM              PXP_NUM_GLOBAL_WINDOWS
 482#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_SINGLE_SIZE      0x1000
 483#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_LENGTH \
 484        (PXP_EXTERNAL_BAR_GLOBAL_WINDOW_NUM * \
 485         PXP_EXTERNAL_BAR_GLOBAL_WINDOW_SINGLE_SIZE)
 486#define PXP_EXTERNAL_BAR_GLOBAL_WINDOW_END \
 487        (PXP_EXTERNAL_BAR_GLOBAL_WINDOW_START + \
 488         PXP_EXTERNAL_BAR_GLOBAL_WINDOW_LENGTH - 1)
 489
 490/* PF BAR */
 491#define PXP_BAR0_START_GRC              0x0000
 492#define PXP_BAR0_GRC_LENGTH             0x1C00000
 493#define PXP_BAR0_END_GRC                (PXP_BAR0_START_GRC + \
 494                                         PXP_BAR0_GRC_LENGTH - 1)
 495
 496#define PXP_BAR0_START_IGU              0x1C00000
 497#define PXP_BAR0_IGU_LENGTH             0x10000
 498#define PXP_BAR0_END_IGU                (PXP_BAR0_START_IGU + \
 499                                         PXP_BAR0_IGU_LENGTH - 1)
 500
 501#define PXP_BAR0_START_TSDM             0x1C80000
 502#define PXP_BAR0_SDM_LENGTH             0x40000
 503#define PXP_BAR0_SDM_RESERVED_LENGTH    0x40000
 504#define PXP_BAR0_END_TSDM               (PXP_BAR0_START_TSDM + \
 505                                         PXP_BAR0_SDM_LENGTH - 1)
 506
 507#define PXP_BAR0_START_MSDM             0x1D00000
 508#define PXP_BAR0_END_MSDM               (PXP_BAR0_START_MSDM + \
 509                                         PXP_BAR0_SDM_LENGTH - 1)
 510
 511#define PXP_BAR0_START_USDM             0x1D80000
 512#define PXP_BAR0_END_USDM               (PXP_BAR0_START_USDM + \
 513                                         PXP_BAR0_SDM_LENGTH - 1)
 514
 515#define PXP_BAR0_START_XSDM             0x1E00000
 516#define PXP_BAR0_END_XSDM               (PXP_BAR0_START_XSDM + \
 517                                         PXP_BAR0_SDM_LENGTH - 1)
 518
 519#define PXP_BAR0_START_YSDM             0x1E80000
 520#define PXP_BAR0_END_YSDM               (PXP_BAR0_START_YSDM + \
 521                                         PXP_BAR0_SDM_LENGTH - 1)
 522
 523#define PXP_BAR0_START_PSDM             0x1F00000
 524#define PXP_BAR0_END_PSDM               (PXP_BAR0_START_PSDM + \
 525                                         PXP_BAR0_SDM_LENGTH - 1)
 526
 527#define PXP_BAR0_FIRST_INVALID_ADDRESS  (PXP_BAR0_END_PSDM + 1)
 528
 529/* VF BAR */
 530#define PXP_VF_BAR0                     0
 531
 532#define PXP_VF_BAR0_START_IGU           0
 533#define PXP_VF_BAR0_IGU_LENGTH          0x3000
 534#define PXP_VF_BAR0_END_IGU             (PXP_VF_BAR0_START_IGU + \
 535                                         PXP_VF_BAR0_IGU_LENGTH - 1)
 536
 537#define PXP_VF_BAR0_START_DQ            0x3000
 538#define PXP_VF_BAR0_DQ_LENGTH           0x200
 539#define PXP_VF_BAR0_DQ_OPAQUE_OFFSET    0
 540#define PXP_VF_BAR0_ME_OPAQUE_ADDRESS   (PXP_VF_BAR0_START_DQ + \
 541                                         PXP_VF_BAR0_DQ_OPAQUE_OFFSET)
 542#define PXP_VF_BAR0_ME_CONCRETE_ADDRESS (PXP_VF_BAR0_ME_OPAQUE_ADDRESS \
 543                                         + 4)
 544#define PXP_VF_BAR0_END_DQ              (PXP_VF_BAR0_START_DQ + \
 545                                         PXP_VF_BAR0_DQ_LENGTH - 1)
 546
 547#define PXP_VF_BAR0_START_TSDM_ZONE_B   0x3200
 548#define PXP_VF_BAR0_SDM_LENGTH_ZONE_B   0x200
 549#define PXP_VF_BAR0_END_TSDM_ZONE_B     (PXP_VF_BAR0_START_TSDM_ZONE_B + \
 550                                         PXP_VF_BAR0_SDM_LENGTH_ZONE_B - 1)
 551
 552#define PXP_VF_BAR0_START_MSDM_ZONE_B   0x3400
 553#define PXP_VF_BAR0_END_MSDM_ZONE_B     (PXP_VF_BAR0_START_MSDM_ZONE_B + \
 554                                         PXP_VF_BAR0_SDM_LENGTH_ZONE_B - 1)
 555
 556#define PXP_VF_BAR0_START_USDM_ZONE_B   0x3600
 557#define PXP_VF_BAR0_END_USDM_ZONE_B     (PXP_VF_BAR0_START_USDM_ZONE_B + \
 558                                         PXP_VF_BAR0_SDM_LENGTH_ZONE_B - 1)
 559
 560#define PXP_VF_BAR0_START_XSDM_ZONE_B   0x3800
 561#define PXP_VF_BAR0_END_XSDM_ZONE_B     (PXP_VF_BAR0_START_XSDM_ZONE_B + \
 562                                         PXP_VF_BAR0_SDM_LENGTH_ZONE_B - 1)
 563
 564#define PXP_VF_BAR0_START_YSDM_ZONE_B   0x3a00
 565#define PXP_VF_BAR0_END_YSDM_ZONE_B     (PXP_VF_BAR0_START_YSDM_ZONE_B + \
 566                                         PXP_VF_BAR0_SDM_LENGTH_ZONE_B - 1)
 567
 568#define PXP_VF_BAR0_START_PSDM_ZONE_B   0x3c00
 569#define PXP_VF_BAR0_END_PSDM_ZONE_B     (PXP_VF_BAR0_START_PSDM_ZONE_B + \
 570                                         PXP_VF_BAR0_SDM_LENGTH_ZONE_B - 1)
 571
 572#define PXP_VF_BAR0_START_GRC           0x3E00
 573#define PXP_VF_BAR0_GRC_LENGTH          0x200
 574#define PXP_VF_BAR0_END_GRC             (PXP_VF_BAR0_START_GRC + \
 575                                         PXP_VF_BAR0_GRC_LENGTH - 1)
 576
 577#define PXP_VF_BAR0_START_SDM_ZONE_A    0x4000
 578#define PXP_VF_BAR0_END_SDM_ZONE_A      0x10000
 579
 580#define PXP_VF_BAR0_START_IGU2          0x10000
 581#define PXP_VF_BAR0_IGU2_LENGTH         0xD000
 582#define PXP_VF_BAR0_END_IGU2            (PXP_VF_BAR0_START_IGU2 + \
 583                                         PXP_VF_BAR0_IGU2_LENGTH - 1)
 584
 585#define PXP_VF_BAR0_GRC_WINDOW_LENGTH   32
 586
 587#define PXP_ILT_PAGE_SIZE_NUM_BITS_MIN  12
 588#define PXP_ILT_BLOCK_FACTOR_MULTIPLIER 1024
 589
 590/* ILT Records */
 591#define PXP_NUM_ILT_RECORDS_BB 7600
 592#define PXP_NUM_ILT_RECORDS_K2 11000
 593#define MAX_NUM_ILT_RECORDS MAX(PXP_NUM_ILT_RECORDS_BB, PXP_NUM_ILT_RECORDS_K2)
 594
 595/* Host Interface */
 596#define PXP_QUEUES_ZONE_MAX_NUM 320
 597
 598/*****************/
 599/* PRM CONSTANTS */
 600/*****************/
 601#define PRM_DMA_PAD_BYTES_NUM   2
 602
 603/*****************/
 604/* SDMs CONSTANTS  */
 605/*****************/
 606
 607#define SDM_OP_GEN_TRIG_NONE            0
 608#define SDM_OP_GEN_TRIG_WAKE_THREAD     1
 609#define SDM_OP_GEN_TRIG_AGG_INT         2
 610#define SDM_OP_GEN_TRIG_LOADER          4
 611#define SDM_OP_GEN_TRIG_INDICATE_ERROR  6
 612#define SDM_OP_GEN_TRIG_INC_ORDER_CNT   9
 613
 614/********************/
 615/* Completion types */
 616/********************/
 617
 618#define SDM_COMP_TYPE_NONE              0
 619#define SDM_COMP_TYPE_WAKE_THREAD       1
 620#define SDM_COMP_TYPE_AGG_INT           2
 621#define SDM_COMP_TYPE_CM                3
 622#define SDM_COMP_TYPE_LOADER            4
 623#define SDM_COMP_TYPE_PXP               5
 624#define SDM_COMP_TYPE_INDICATE_ERROR    6
 625#define SDM_COMP_TYPE_RELEASE_THREAD    7
 626#define SDM_COMP_TYPE_RAM               8
 627#define SDM_COMP_TYPE_INC_ORDER_CNT     9
 628
 629/*****************/
 630/* PBF CONSTANTS */
 631/*****************/
 632
 633/* Number of PBF command queue lines. Each line is 32B. */
 634#define PBF_MAX_CMD_LINES       3328
 635
 636/* Number of BTB blocks. Each block is 256B. */
 637#define BTB_MAX_BLOCKS_BB 1440
 638#define BTB_MAX_BLOCKS_K2 1840
 639/*****************/
 640/* PRS CONSTANTS */
 641/*****************/
 642
 643#define PRS_GFT_CAM_LINES_NO_MATCH      31
 644
 645/* Interrupt coalescing TimeSet */
 646struct coalescing_timeset {
 647        u8 value;
 648#define COALESCING_TIMESET_TIMESET_MASK         0x7F
 649#define COALESCING_TIMESET_TIMESET_SHIFT        0
 650#define COALESCING_TIMESET_VALID_MASK           0x1
 651#define COALESCING_TIMESET_VALID_SHIFT          7
 652};
 653
 654struct common_queue_zone {
 655        __le16 ring_drv_data_consumer;
 656        __le16 reserved;
 657};
 658
 659/* ETH Rx producers data */
 660struct eth_rx_prod_data {
 661        __le16 bd_prod;
 662        __le16 cqe_prod;
 663};
 664
 665struct tcp_ulp_connect_done_params {
 666        __le16 mss;
 667        u8 snd_wnd_scale;
 668        u8 flags;
 669#define TCP_ULP_CONNECT_DONE_PARAMS_TS_EN_MASK          0x1
 670#define TCP_ULP_CONNECT_DONE_PARAMS_TS_EN_SHIFT         0
 671#define TCP_ULP_CONNECT_DONE_PARAMS_RESERVED_MASK       0x7F
 672#define TCP_ULP_CONNECT_DONE_PARAMS_RESERVED_SHIFT      1
 673};
 674
 675struct iscsi_connect_done_results {
 676        __le16 icid;
 677        __le16 conn_id;
 678        struct tcp_ulp_connect_done_params params;
 679};
 680
 681struct iscsi_eqe_data {
 682        __le16 icid;
 683        __le16 conn_id;
 684        __le16 reserved;
 685        u8 error_code;
 686        u8 error_pdu_opcode_reserved;
 687#define ISCSI_EQE_DATA_ERROR_PDU_OPCODE_MASK            0x3F
 688#define ISCSI_EQE_DATA_ERROR_PDU_OPCODE_SHIFT           0
 689#define ISCSI_EQE_DATA_ERROR_PDU_OPCODE_VALID_MASK      0x1
 690#define ISCSI_EQE_DATA_ERROR_PDU_OPCODE_VALID_SHIFT      6
 691#define ISCSI_EQE_DATA_RESERVED0_MASK                   0x1
 692#define ISCSI_EQE_DATA_RESERVED0_SHIFT                  7
 693};
 694
 695/* Multi function mode */
 696enum mf_mode {
 697        ERROR_MODE /* Unsupported mode */,
 698        MF_OVLAN,
 699        MF_NPAR,
 700        MAX_MF_MODE
 701};
 702
 703/* Per-protocol connection types */
 704enum protocol_type {
 705        PROTOCOLID_TCP_ULP,
 706        PROTOCOLID_FCOE,
 707        PROTOCOLID_ROCE,
 708        PROTOCOLID_CORE,
 709        PROTOCOLID_ETH,
 710        PROTOCOLID_IWARP,
 711        PROTOCOLID_RESERVED0,
 712        PROTOCOLID_PREROCE,
 713        PROTOCOLID_COMMON,
 714        PROTOCOLID_RESERVED1,
 715        PROTOCOLID_RDMA,
 716        PROTOCOLID_SCSI,
 717        MAX_PROTOCOL_TYPE
 718};
 719
 720struct regpair {
 721        __le32 lo;
 722        __le32 hi;
 723};
 724
 725/* RoCE Destroy Event Data */
 726struct rdma_eqe_destroy_qp {
 727        __le32 cid;
 728        u8 reserved[4];
 729};
 730
 731/* RDMA Event Data Union */
 732union rdma_eqe_data {
 733        struct regpair async_handle;
 734        struct rdma_eqe_destroy_qp rdma_destroy_qp_data;
 735};
 736
 737struct tstorm_queue_zone {
 738        __le32 reserved[2];
 739};
 740
 741/* Ustorm Queue Zone */
 742struct ustorm_eth_queue_zone {
 743        struct coalescing_timeset int_coalescing_timeset;
 744        u8 reserved[3];
 745};
 746
 747struct ustorm_queue_zone {
 748        struct ustorm_eth_queue_zone eth;
 749        struct common_queue_zone common;
 750};
 751
 752/* Status block structure */
 753struct cau_pi_entry {
 754        __le32 prod;
 755#define CAU_PI_ENTRY_PROD_VAL_MASK      0xFFFF
 756#define CAU_PI_ENTRY_PROD_VAL_SHIFT     0
 757#define CAU_PI_ENTRY_PI_TIMESET_MASK    0x7F
 758#define CAU_PI_ENTRY_PI_TIMESET_SHIFT   16
 759#define CAU_PI_ENTRY_FSM_SEL_MASK       0x1
 760#define CAU_PI_ENTRY_FSM_SEL_SHIFT      23
 761#define CAU_PI_ENTRY_RESERVED_MASK      0xFF
 762#define CAU_PI_ENTRY_RESERVED_SHIFT     24
 763};
 764
 765/* Status block structure */
 766struct cau_sb_entry {
 767        __le32 data;
 768#define CAU_SB_ENTRY_SB_PROD_MASK       0xFFFFFF
 769#define CAU_SB_ENTRY_SB_PROD_SHIFT      0
 770#define CAU_SB_ENTRY_STATE0_MASK        0xF
 771#define CAU_SB_ENTRY_STATE0_SHIFT       24
 772#define CAU_SB_ENTRY_STATE1_MASK        0xF
 773#define CAU_SB_ENTRY_STATE1_SHIFT       28
 774        __le32 params;
 775#define CAU_SB_ENTRY_SB_TIMESET0_MASK   0x7F
 776#define CAU_SB_ENTRY_SB_TIMESET0_SHIFT  0
 777#define CAU_SB_ENTRY_SB_TIMESET1_MASK   0x7F
 778#define CAU_SB_ENTRY_SB_TIMESET1_SHIFT  7
 779#define CAU_SB_ENTRY_TIMER_RES0_MASK    0x3
 780#define CAU_SB_ENTRY_TIMER_RES0_SHIFT   14
 781#define CAU_SB_ENTRY_TIMER_RES1_MASK    0x3
 782#define CAU_SB_ENTRY_TIMER_RES1_SHIFT   16
 783#define CAU_SB_ENTRY_VF_NUMBER_MASK     0xFF
 784#define CAU_SB_ENTRY_VF_NUMBER_SHIFT    18
 785#define CAU_SB_ENTRY_VF_VALID_MASK      0x1
 786#define CAU_SB_ENTRY_VF_VALID_SHIFT     26
 787#define CAU_SB_ENTRY_PF_NUMBER_MASK     0xF
 788#define CAU_SB_ENTRY_PF_NUMBER_SHIFT    27
 789#define CAU_SB_ENTRY_TPH_MASK           0x1
 790#define CAU_SB_ENTRY_TPH_SHIFT          31
 791};
 792
 793/* Igu cleanup bit values to distinguish between clean or producer consumer
 794 * update.
 795 */
 796enum command_type_bit {
 797        IGU_COMMAND_TYPE_NOP = 0,
 798        IGU_COMMAND_TYPE_SET = 1,
 799        MAX_COMMAND_TYPE_BIT
 800};
 801
 802/* Core doorbell data */
 803struct core_db_data {
 804        u8 params;
 805#define CORE_DB_DATA_DEST_MASK          0x3
 806#define CORE_DB_DATA_DEST_SHIFT         0
 807#define CORE_DB_DATA_AGG_CMD_MASK       0x3
 808#define CORE_DB_DATA_AGG_CMD_SHIFT      2
 809#define CORE_DB_DATA_BYPASS_EN_MASK     0x1
 810#define CORE_DB_DATA_BYPASS_EN_SHIFT    4
 811#define CORE_DB_DATA_RESERVED_MASK      0x1
 812#define CORE_DB_DATA_RESERVED_SHIFT     5
 813#define CORE_DB_DATA_AGG_VAL_SEL_MASK   0x3
 814#define CORE_DB_DATA_AGG_VAL_SEL_SHIFT  6
 815        u8 agg_flags;
 816        __le16 spq_prod;
 817};
 818
 819/* Enum of doorbell aggregative command selection */
 820enum db_agg_cmd_sel {
 821        DB_AGG_CMD_NOP,
 822        DB_AGG_CMD_SET,
 823        DB_AGG_CMD_ADD,
 824        DB_AGG_CMD_MAX,
 825        MAX_DB_AGG_CMD_SEL
 826};
 827
 828/* Enum of doorbell destination */
 829enum db_dest {
 830        DB_DEST_XCM,
 831        DB_DEST_UCM,
 832        DB_DEST_TCM,
 833        DB_NUM_DESTINATIONS,
 834        MAX_DB_DEST
 835};
 836
 837/* Enum of doorbell DPM types */
 838enum db_dpm_type {
 839        DPM_LEGACY,
 840        DPM_RDMA,
 841        DPM_L2_INLINE,
 842        DPM_L2_BD,
 843        MAX_DB_DPM_TYPE
 844};
 845
 846/* Structure for doorbell data, in L2 DPM mode, for 1st db in a DPM burst */
 847struct db_l2_dpm_data {
 848        __le16 icid;
 849        __le16 bd_prod;
 850        __le32 params;
 851#define DB_L2_DPM_DATA_SIZE_MASK        0x3F
 852#define DB_L2_DPM_DATA_SIZE_SHIFT       0
 853#define DB_L2_DPM_DATA_DPM_TYPE_MASK    0x3
 854#define DB_L2_DPM_DATA_DPM_TYPE_SHIFT   6
 855#define DB_L2_DPM_DATA_NUM_BDS_MASK     0xFF
 856#define DB_L2_DPM_DATA_NUM_BDS_SHIFT    8
 857#define DB_L2_DPM_DATA_PKT_SIZE_MASK    0x7FF
 858#define DB_L2_DPM_DATA_PKT_SIZE_SHIFT   16
 859#define DB_L2_DPM_DATA_RESERVED0_MASK   0x1
 860#define DB_L2_DPM_DATA_RESERVED0_SHIFT 27
 861#define DB_L2_DPM_DATA_SGE_NUM_MASK     0x7
 862#define DB_L2_DPM_DATA_SGE_NUM_SHIFT    28
 863#define DB_L2_DPM_DATA_TGFS_SRC_EN_MASK  0x1
 864#define DB_L2_DPM_DATA_TGFS_SRC_EN_SHIFT 31
 865};
 866
 867/* Structure for SGE in a DPM doorbell of type DPM_L2_BD */
 868struct db_l2_dpm_sge {
 869        struct regpair addr;
 870        __le16 nbytes;
 871        __le16 bitfields;
 872#define DB_L2_DPM_SGE_TPH_ST_INDEX_MASK         0x1FF
 873#define DB_L2_DPM_SGE_TPH_ST_INDEX_SHIFT        0
 874#define DB_L2_DPM_SGE_RESERVED0_MASK            0x3
 875#define DB_L2_DPM_SGE_RESERVED0_SHIFT           9
 876#define DB_L2_DPM_SGE_ST_VALID_MASK             0x1
 877#define DB_L2_DPM_SGE_ST_VALID_SHIFT            11
 878#define DB_L2_DPM_SGE_RESERVED1_MASK            0xF
 879#define DB_L2_DPM_SGE_RESERVED1_SHIFT           12
 880        __le32 reserved2;
 881};
 882
 883/* Structure for doorbell address, in legacy mode */
 884struct db_legacy_addr {
 885        __le32 addr;
 886#define DB_LEGACY_ADDR_RESERVED0_MASK   0x3
 887#define DB_LEGACY_ADDR_RESERVED0_SHIFT  0
 888#define DB_LEGACY_ADDR_DEMS_MASK        0x7
 889#define DB_LEGACY_ADDR_DEMS_SHIFT       2
 890#define DB_LEGACY_ADDR_ICID_MASK        0x7FFFFFF
 891#define DB_LEGACY_ADDR_ICID_SHIFT       5
 892};
 893
 894/* Structure for doorbell address, in PWM mode */
 895struct db_pwm_addr {
 896        __le32 addr;
 897#define DB_PWM_ADDR_RESERVED0_MASK      0x7
 898#define DB_PWM_ADDR_RESERVED0_SHIFT     0
 899#define DB_PWM_ADDR_OFFSET_MASK         0x7F
 900#define DB_PWM_ADDR_OFFSET_SHIFT        3
 901#define DB_PWM_ADDR_WID_MASK            0x3
 902#define DB_PWM_ADDR_WID_SHIFT           10
 903#define DB_PWM_ADDR_DPI_MASK            0xFFFF
 904#define DB_PWM_ADDR_DPI_SHIFT           12
 905#define DB_PWM_ADDR_RESERVED1_MASK      0xF
 906#define DB_PWM_ADDR_RESERVED1_SHIFT     28
 907};
 908
 909/* Parameters to RDMA firmware, passed in EDPM doorbell */
 910struct db_rdma_dpm_params {
 911        __le32 params;
 912#define DB_RDMA_DPM_PARAMS_SIZE_MASK                    0x3F
 913#define DB_RDMA_DPM_PARAMS_SIZE_SHIFT                   0
 914#define DB_RDMA_DPM_PARAMS_DPM_TYPE_MASK                0x3
 915#define DB_RDMA_DPM_PARAMS_DPM_TYPE_SHIFT               6
 916#define DB_RDMA_DPM_PARAMS_OPCODE_MASK                  0xFF
 917#define DB_RDMA_DPM_PARAMS_OPCODE_SHIFT                 8
 918#define DB_RDMA_DPM_PARAMS_WQE_SIZE_MASK                0x7FF
 919#define DB_RDMA_DPM_PARAMS_WQE_SIZE_SHIFT               16
 920#define DB_RDMA_DPM_PARAMS_RESERVED0_MASK               0x1
 921#define DB_RDMA_DPM_PARAMS_RESERVED0_SHIFT              27
 922#define DB_RDMA_DPM_PARAMS_ACK_REQUEST_MASK             0x1
 923#define DB_RDMA_DPM_PARAMS_ACK_REQUEST_SHIFT            28
 924#define DB_RDMA_DPM_PARAMS_S_FLG_MASK                   0x1
 925#define DB_RDMA_DPM_PARAMS_S_FLG_SHIFT                  29
 926#define DB_RDMA_DPM_PARAMS_COMPLETION_FLG_MASK          0x1
 927#define DB_RDMA_DPM_PARAMS_COMPLETION_FLG_SHIFT         30
 928#define DB_RDMA_DPM_PARAMS_CONN_TYPE_IS_IWARP_MASK      0x1
 929#define DB_RDMA_DPM_PARAMS_CONN_TYPE_IS_IWARP_SHIFT     31
 930};
 931
 932/* Structure for doorbell data, in RDMA DPM mode, for the first doorbell in a
 933 * DPM burst.
 934 */
 935struct db_rdma_dpm_data {
 936        __le16 icid;
 937        __le16 prod_val;
 938        struct db_rdma_dpm_params params;
 939};
 940
 941/* Igu interrupt command */
 942enum igu_int_cmd {
 943        IGU_INT_ENABLE  = 0,
 944        IGU_INT_DISABLE = 1,
 945        IGU_INT_NOP     = 2,
 946        IGU_INT_NOP2    = 3,
 947        MAX_IGU_INT_CMD
 948};
 949
 950/* IGU producer or consumer update command */
 951struct igu_prod_cons_update {
 952        __le32 sb_id_and_flags;
 953#define IGU_PROD_CONS_UPDATE_SB_INDEX_MASK              0xFFFFFF
 954#define IGU_PROD_CONS_UPDATE_SB_INDEX_SHIFT             0
 955#define IGU_PROD_CONS_UPDATE_UPDATE_FLAG_MASK           0x1
 956#define IGU_PROD_CONS_UPDATE_UPDATE_FLAG_SHIFT          24
 957#define IGU_PROD_CONS_UPDATE_ENABLE_INT_MASK            0x3
 958#define IGU_PROD_CONS_UPDATE_ENABLE_INT_SHIFT           25
 959#define IGU_PROD_CONS_UPDATE_SEGMENT_ACCESS_MASK        0x1
 960#define IGU_PROD_CONS_UPDATE_SEGMENT_ACCESS_SHIFT       27
 961#define IGU_PROD_CONS_UPDATE_TIMER_MASK_MASK            0x1
 962#define IGU_PROD_CONS_UPDATE_TIMER_MASK_SHIFT           28
 963#define IGU_PROD_CONS_UPDATE_RESERVED0_MASK             0x3
 964#define IGU_PROD_CONS_UPDATE_RESERVED0_SHIFT            29
 965#define IGU_PROD_CONS_UPDATE_COMMAND_TYPE_MASK          0x1
 966#define IGU_PROD_CONS_UPDATE_COMMAND_TYPE_SHIFT         31
 967        __le32 reserved1;
 968};
 969
 970/* Igu segments access for default status block only */
 971enum igu_seg_access {
 972        IGU_SEG_ACCESS_REG      = 0,
 973        IGU_SEG_ACCESS_ATTN     = 1,
 974        MAX_IGU_SEG_ACCESS
 975};
 976
 977/* Enumeration for L3 type field of parsing_and_err_flags.
 978 * L3Type: 0 - unknown (not ip), 1 - Ipv4, 2 - Ipv6
 979 * (This field can be filled according to the last-ethertype)
 980 */
 981enum l3_type {
 982        e_l3_type_unknown,
 983        e_l3_type_ipv4,
 984        e_l3_type_ipv6,
 985        MAX_L3_TYPE
 986};
 987
 988/* Enumeration for l4Protocol field of parsing_and_err_flags.
 989 * L4-protocol: 0 - none, 1 - TCP, 2 - UDP.
 990 * If the packet is IPv4 fragment, and its not the first fragment, the
 991 * protocol-type should be set to none.
 992 */
 993enum l4_protocol {
 994        e_l4_protocol_none,
 995        e_l4_protocol_tcp,
 996        e_l4_protocol_udp,
 997        MAX_L4_PROTOCOL
 998};
 999
1000/* Parsing and error flags field */
1001struct parsing_and_err_flags {
1002        __le16 flags;
1003#define PARSING_AND_ERR_FLAGS_L3TYPE_MASK                       0x3
1004#define PARSING_AND_ERR_FLAGS_L3TYPE_SHIFT                      0
1005#define PARSING_AND_ERR_FLAGS_L4PROTOCOL_MASK                   0x3
1006#define PARSING_AND_ERR_FLAGS_L4PROTOCOL_SHIFT                  2
1007#define PARSING_AND_ERR_FLAGS_IPV4FRAG_MASK                     0x1
1008#define PARSING_AND_ERR_FLAGS_IPV4FRAG_SHIFT                    4
1009#define PARSING_AND_ERR_FLAGS_TAG8021QEXIST_MASK                0x1
1010#define PARSING_AND_ERR_FLAGS_TAG8021QEXIST_SHIFT               5
1011#define PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_MASK         0x1
1012#define PARSING_AND_ERR_FLAGS_L4CHKSMWASCALCULATED_SHIFT        6
1013#define PARSING_AND_ERR_FLAGS_TIMESYNCPKT_MASK                  0x1
1014#define PARSING_AND_ERR_FLAGS_TIMESYNCPKT_SHIFT                 7
1015#define PARSING_AND_ERR_FLAGS_TIMESTAMPRECORDED_MASK            0x1
1016#define PARSING_AND_ERR_FLAGS_TIMESTAMPRECORDED_SHIFT           8
1017#define PARSING_AND_ERR_FLAGS_IPHDRERROR_MASK                   0x1
1018#define PARSING_AND_ERR_FLAGS_IPHDRERROR_SHIFT                  9
1019#define PARSING_AND_ERR_FLAGS_L4CHKSMERROR_MASK                 0x1
1020#define PARSING_AND_ERR_FLAGS_L4CHKSMERROR_SHIFT                10
1021#define PARSING_AND_ERR_FLAGS_TUNNELEXIST_MASK                  0x1
1022#define PARSING_AND_ERR_FLAGS_TUNNELEXIST_SHIFT                 11
1023#define PARSING_AND_ERR_FLAGS_TUNNEL8021QTAGEXIST_MASK          0x1
1024#define PARSING_AND_ERR_FLAGS_TUNNEL8021QTAGEXIST_SHIFT         12
1025#define PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_MASK             0x1
1026#define PARSING_AND_ERR_FLAGS_TUNNELIPHDRERROR_SHIFT            13
1027#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_MASK   0x1
1028#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMWASCALCULATED_SHIFT  14
1029#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_MASK           0x1
1030#define PARSING_AND_ERR_FLAGS_TUNNELL4CHKSMERROR_SHIFT          15
1031};
1032
1033/* Parsing error flags bitmap */
1034struct parsing_err_flags {
1035        __le16 flags;
1036#define PARSING_ERR_FLAGS_MAC_ERROR_MASK                                0x1
1037#define PARSING_ERR_FLAGS_MAC_ERROR_SHIFT                               0
1038#define PARSING_ERR_FLAGS_TRUNC_ERROR_MASK                              0x1
1039#define PARSING_ERR_FLAGS_TRUNC_ERROR_SHIFT                             1
1040#define PARSING_ERR_FLAGS_PKT_TOO_SMALL_MASK                            0x1
1041#define PARSING_ERR_FLAGS_PKT_TOO_SMALL_SHIFT                           2
1042#define PARSING_ERR_FLAGS_ANY_HDR_MISSING_TAG_MASK                      0x1
1043#define PARSING_ERR_FLAGS_ANY_HDR_MISSING_TAG_SHIFT                     3
1044#define PARSING_ERR_FLAGS_ANY_HDR_IP_VER_MISMTCH_MASK                   0x1
1045#define PARSING_ERR_FLAGS_ANY_HDR_IP_VER_MISMTCH_SHIFT                  4
1046#define PARSING_ERR_FLAGS_ANY_HDR_IP_V4_HDR_LEN_TOO_SMALL_MASK          0x1
1047#define PARSING_ERR_FLAGS_ANY_HDR_IP_V4_HDR_LEN_TOO_SMALL_SHIFT         5
1048#define PARSING_ERR_FLAGS_ANY_HDR_IP_BAD_TOTAL_LEN_MASK                 0x1
1049#define PARSING_ERR_FLAGS_ANY_HDR_IP_BAD_TOTAL_LEN_SHIFT                6
1050#define PARSING_ERR_FLAGS_IP_V4_CHKSM_ERROR_MASK                        0x1
1051#define PARSING_ERR_FLAGS_IP_V4_CHKSM_ERROR_SHIFT                       7
1052#define PARSING_ERR_FLAGS_ANY_HDR_L4_IP_LEN_MISMTCH_MASK                0x1
1053#define PARSING_ERR_FLAGS_ANY_HDR_L4_IP_LEN_MISMTCH_SHIFT               8
1054#define PARSING_ERR_FLAGS_ZERO_UDP_IP_V6_CHKSM_MASK                     0x1
1055#define PARSING_ERR_FLAGS_ZERO_UDP_IP_V6_CHKSM_SHIFT                    9
1056#define PARSING_ERR_FLAGS_INNER_L4_CHKSM_ERROR_MASK                     0x1
1057#define PARSING_ERR_FLAGS_INNER_L4_CHKSM_ERROR_SHIFT                    10
1058#define PARSING_ERR_FLAGS_ANY_HDR_ZERO_TTL_OR_HOP_LIM_MASK              0x1
1059#define PARSING_ERR_FLAGS_ANY_HDR_ZERO_TTL_OR_HOP_LIM_SHIFT             11
1060#define PARSING_ERR_FLAGS_NON_8021Q_TAG_EXISTS_IN_BOTH_HDRS_MASK        0x1
1061#define PARSING_ERR_FLAGS_NON_8021Q_TAG_EXISTS_IN_BOTH_HDRS_SHIFT       12
1062#define PARSING_ERR_FLAGS_GENEVE_OPTION_OVERSIZED_MASK                  0x1
1063#define PARSING_ERR_FLAGS_GENEVE_OPTION_OVERSIZED_SHIFT                 13
1064#define PARSING_ERR_FLAGS_TUNNEL_IP_V4_CHKSM_ERROR_MASK                 0x1
1065#define PARSING_ERR_FLAGS_TUNNEL_IP_V4_CHKSM_ERROR_SHIFT                14
1066#define PARSING_ERR_FLAGS_TUNNEL_L4_CHKSM_ERROR_MASK                    0x1
1067#define PARSING_ERR_FLAGS_TUNNEL_L4_CHKSM_ERROR_SHIFT                   15
1068};
1069
1070/* Pb context */
1071struct pb_context {
1072        __le32 crc[4];
1073};
1074
1075/* Concrete Function ID */
1076struct pxp_concrete_fid {
1077        __le16 fid;
1078#define PXP_CONCRETE_FID_PFID_MASK      0xF
1079#define PXP_CONCRETE_FID_PFID_SHIFT     0
1080#define PXP_CONCRETE_FID_PORT_MASK      0x3
1081#define PXP_CONCRETE_FID_PORT_SHIFT     4
1082#define PXP_CONCRETE_FID_PATH_MASK      0x1
1083#define PXP_CONCRETE_FID_PATH_SHIFT     6
1084#define PXP_CONCRETE_FID_VFVALID_MASK   0x1
1085#define PXP_CONCRETE_FID_VFVALID_SHIFT  7
1086#define PXP_CONCRETE_FID_VFID_MASK      0xFF
1087#define PXP_CONCRETE_FID_VFID_SHIFT     8
1088};
1089
1090/* Concrete Function ID */
1091struct pxp_pretend_concrete_fid {
1092        __le16 fid;
1093#define PXP_PRETEND_CONCRETE_FID_PFID_MASK      0xF
1094#define PXP_PRETEND_CONCRETE_FID_PFID_SHIFT     0
1095#define PXP_PRETEND_CONCRETE_FID_RESERVED_MASK  0x7
1096#define PXP_PRETEND_CONCRETE_FID_RESERVED_SHIFT 4
1097#define PXP_PRETEND_CONCRETE_FID_VFVALID_MASK   0x1
1098#define PXP_PRETEND_CONCRETE_FID_VFVALID_SHIFT  7
1099#define PXP_PRETEND_CONCRETE_FID_VFID_MASK      0xFF
1100#define PXP_PRETEND_CONCRETE_FID_VFID_SHIFT     8
1101};
1102
1103/* Function ID */
1104union pxp_pretend_fid {
1105        struct pxp_pretend_concrete_fid concrete_fid;
1106        __le16 opaque_fid;
1107};
1108
1109/* Pxp Pretend Command Register */
1110struct pxp_pretend_cmd {
1111        union pxp_pretend_fid fid;
1112        __le16 control;
1113#define PXP_PRETEND_CMD_PATH_MASK               0x1
1114#define PXP_PRETEND_CMD_PATH_SHIFT              0
1115#define PXP_PRETEND_CMD_USE_PORT_MASK           0x1
1116#define PXP_PRETEND_CMD_USE_PORT_SHIFT          1
1117#define PXP_PRETEND_CMD_PORT_MASK               0x3
1118#define PXP_PRETEND_CMD_PORT_SHIFT              2
1119#define PXP_PRETEND_CMD_RESERVED0_MASK          0xF
1120#define PXP_PRETEND_CMD_RESERVED0_SHIFT         4
1121#define PXP_PRETEND_CMD_RESERVED1_MASK          0xF
1122#define PXP_PRETEND_CMD_RESERVED1_SHIFT         8
1123#define PXP_PRETEND_CMD_PRETEND_PATH_MASK       0x1
1124#define PXP_PRETEND_CMD_PRETEND_PATH_SHIFT      12
1125#define PXP_PRETEND_CMD_PRETEND_PORT_MASK       0x1
1126#define PXP_PRETEND_CMD_PRETEND_PORT_SHIFT      13
1127#define PXP_PRETEND_CMD_PRETEND_FUNCTION_MASK   0x1
1128#define PXP_PRETEND_CMD_PRETEND_FUNCTION_SHIFT  14
1129#define PXP_PRETEND_CMD_IS_CONCRETE_MASK        0x1
1130#define PXP_PRETEND_CMD_IS_CONCRETE_SHIFT       15
1131};
1132
1133/* PTT Record in PXP Admin Window */
1134struct pxp_ptt_entry {
1135        __le32 offset;
1136#define PXP_PTT_ENTRY_OFFSET_MASK       0x7FFFFF
1137#define PXP_PTT_ENTRY_OFFSET_SHIFT      0
1138#define PXP_PTT_ENTRY_RESERVED0_MASK    0x1FF
1139#define PXP_PTT_ENTRY_RESERVED0_SHIFT   23
1140        struct pxp_pretend_cmd pretend;
1141};
1142
1143/* VF Zone A Permission Register */
1144struct pxp_vf_zone_a_permission {
1145        __le32 control;
1146#define PXP_VF_ZONE_A_PERMISSION_VFID_MASK              0xFF
1147#define PXP_VF_ZONE_A_PERMISSION_VFID_SHIFT             0
1148#define PXP_VF_ZONE_A_PERMISSION_VALID_MASK             0x1
1149#define PXP_VF_ZONE_A_PERMISSION_VALID_SHIFT            8
1150#define PXP_VF_ZONE_A_PERMISSION_RESERVED0_MASK         0x7F
1151#define PXP_VF_ZONE_A_PERMISSION_RESERVED0_SHIFT        9
1152#define PXP_VF_ZONE_A_PERMISSION_RESERVED1_MASK         0xFFFF
1153#define PXP_VF_ZONE_A_PERMISSION_RESERVED1_SHIFT        16
1154};
1155
1156/* Rdif context */
1157struct rdif_task_context {
1158        __le32 initial_ref_tag;
1159        __le16 app_tag_value;
1160        __le16 app_tag_mask;
1161        u8 flags0;
1162#define RDIF_TASK_CONTEXT_IGNORE_APP_TAG_MASK           0x1
1163#define RDIF_TASK_CONTEXT_IGNORE_APP_TAG_SHIFT          0
1164#define RDIF_TASK_CONTEXT_INITIAL_REF_TAG_VALID_MASK    0x1
1165#define RDIF_TASK_CONTEXT_INITIAL_REF_TAG_VALID_SHIFT   1
1166#define RDIF_TASK_CONTEXT_HOST_GUARD_TYPE_MASK          0x1
1167#define RDIF_TASK_CONTEXT_HOST_GUARD_TYPE_SHIFT         2
1168#define RDIF_TASK_CONTEXT_SET_ERROR_WITH_EOP_MASK       0x1
1169#define RDIF_TASK_CONTEXT_SET_ERROR_WITH_EOP_SHIFT      3
1170#define RDIF_TASK_CONTEXT_PROTECTION_TYPE_MASK          0x3
1171#define RDIF_TASK_CONTEXT_PROTECTION_TYPE_SHIFT         4
1172#define RDIF_TASK_CONTEXT_CRC_SEED_MASK                 0x1
1173#define RDIF_TASK_CONTEXT_CRC_SEED_SHIFT                6
1174#define RDIF_TASK_CONTEXT_KEEP_REF_TAG_CONST_MASK       0x1
1175#define RDIF_TASK_CONTEXT_KEEP_REF_TAG_CONST_SHIFT      7
1176        u8 partial_dif_data[7];
1177        __le16 partial_crc_value;
1178        __le16 partial_checksum_value;
1179        __le32 offset_in_io;
1180        __le16 flags1;
1181#define RDIF_TASK_CONTEXT_VALIDATE_GUARD_MASK                   0x1
1182#define RDIF_TASK_CONTEXT_VALIDATE_GUARD_SHIFT                  0
1183#define RDIF_TASK_CONTEXT_VALIDATE_APP_TAG_MASK                 0x1
1184#define RDIF_TASK_CONTEXT_VALIDATE_APP_TAG_SHIFT                1
1185#define RDIF_TASK_CONTEXT_VALIDATE_REF_TAG_MASK                 0x1
1186#define RDIF_TASK_CONTEXT_VALIDATE_REF_TAG_SHIFT                2
1187#define RDIF_TASK_CONTEXT_FORWARD_GUARD_MASK                    0x1
1188#define RDIF_TASK_CONTEXT_FORWARD_GUARD_SHIFT                   3
1189#define RDIF_TASK_CONTEXT_FORWARD_APP_TAG_MASK                  0x1
1190#define RDIF_TASK_CONTEXT_FORWARD_APP_TAG_SHIFT                 4
1191#define RDIF_TASK_CONTEXT_FORWARD_REF_TAG_MASK                  0x1
1192#define RDIF_TASK_CONTEXT_FORWARD_REF_TAG_SHIFT                 5
1193#define RDIF_TASK_CONTEXT_INTERVAL_SIZE_MASK                    0x7
1194#define RDIF_TASK_CONTEXT_INTERVAL_SIZE_SHIFT                   6
1195#define RDIF_TASK_CONTEXT_HOST_INTERFACE_MASK                   0x3
1196#define RDIF_TASK_CONTEXT_HOST_INTERFACE_SHIFT                  9
1197#define RDIF_TASK_CONTEXT_DIF_BEFORE_DATA_MASK                  0x1
1198#define RDIF_TASK_CONTEXT_DIF_BEFORE_DATA_SHIFT                 11
1199#define RDIF_TASK_CONTEXT_RESERVED0_MASK                        0x1
1200#define RDIF_TASK_CONTEXT_RESERVED0_SHIFT                       12
1201#define RDIF_TASK_CONTEXT_NETWORK_INTERFACE_MASK                0x1
1202#define RDIF_TASK_CONTEXT_NETWORK_INTERFACE_SHIFT               13
1203#define RDIF_TASK_CONTEXT_FORWARD_APP_TAG_WITH_MASK_MASK        0x1
1204#define RDIF_TASK_CONTEXT_FORWARD_APP_TAG_WITH_MASK_SHIFT       14
1205#define RDIF_TASK_CONTEXT_FORWARD_REF_TAG_WITH_MASK_MASK        0x1
1206#define RDIF_TASK_CONTEXT_FORWARD_REF_TAG_WITH_MASK_SHIFT       15
1207        __le16 state;
1208#define RDIF_TASK_CONTEXT_RECEIVED_DIF_BYTES_LEFT_MASK          0xF
1209#define RDIF_TASK_CONTEXT_RECEIVED_DIF_BYTES_LEFT_SHIFT         0
1210#define RDIF_TASK_CONTEXT_TRANSMITED_DIF_BYTES_LEFT_MASK        0xF
1211#define RDIF_TASK_CONTEXT_TRANSMITED_DIF_BYTES_LEFT_SHIFT       4
1212#define RDIF_TASK_CONTEXT_ERROR_IN_IO_MASK                      0x1
1213#define RDIF_TASK_CONTEXT_ERROR_IN_IO_SHIFT                     8
1214#define RDIF_TASK_CONTEXT_CHECKSUM_OVERFLOW_MASK                0x1
1215#define RDIF_TASK_CONTEXT_CHECKSUM_OVERFLOW_SHIFT               9
1216#define RDIF_TASK_CONTEXT_REF_TAG_MASK_MASK                     0xF
1217#define RDIF_TASK_CONTEXT_REF_TAG_MASK_SHIFT                    10
1218#define RDIF_TASK_CONTEXT_RESERVED1_MASK                        0x3
1219#define RDIF_TASK_CONTEXT_RESERVED1_SHIFT                       14
1220        __le32 reserved2;
1221};
1222
1223/* Status block structure */
1224struct status_block_e4 {
1225        __le16  pi_array[PIS_PER_SB_E4];
1226        __le32  sb_num;
1227#define STATUS_BLOCK_E4_SB_NUM_MASK     0x1FF
1228#define STATUS_BLOCK_E4_SB_NUM_SHIFT    0
1229#define STATUS_BLOCK_E4_ZERO_PAD_MASK   0x7F
1230#define STATUS_BLOCK_E4_ZERO_PAD_SHIFT  9
1231#define STATUS_BLOCK_E4_ZERO_PAD2_MASK  0xFFFF
1232#define STATUS_BLOCK_E4_ZERO_PAD2_SHIFT 16
1233        __le32 prod_index;
1234#define STATUS_BLOCK_E4_PROD_INDEX_MASK         0xFFFFFF
1235#define STATUS_BLOCK_E4_PROD_INDEX_SHIFT        0
1236#define STATUS_BLOCK_E4_ZERO_PAD3_MASK          0xFF
1237#define STATUS_BLOCK_E4_ZERO_PAD3_SHIFT         24
1238};
1239
1240/* Tdif context */
1241struct tdif_task_context {
1242        __le32 initial_ref_tag;
1243        __le16 app_tag_value;
1244        __le16 app_tag_mask;
1245        __le16 partial_crc_value_b;
1246        __le16 partial_checksum_value_b;
1247        __le16 stateB;
1248#define TDIF_TASK_CONTEXT_RECEIVED_DIF_BYTES_LEFT_B_MASK        0xF
1249#define TDIF_TASK_CONTEXT_RECEIVED_DIF_BYTES_LEFT_B_SHIFT       0
1250#define TDIF_TASK_CONTEXT_TRANSMITED_DIF_BYTES_LEFT_B_MASK      0xF
1251#define TDIF_TASK_CONTEXT_TRANSMITED_DIF_BYTES_LEFT_B_SHIFT     4
1252#define TDIF_TASK_CONTEXT_ERROR_IN_IO_B_MASK                    0x1
1253#define TDIF_TASK_CONTEXT_ERROR_IN_IO_B_SHIFT                   8
1254#define TDIF_TASK_CONTEXT_CHECKSUM_VERFLOW_MASK                 0x1
1255#define TDIF_TASK_CONTEXT_CHECKSUM_VERFLOW_SHIFT                9
1256#define TDIF_TASK_CONTEXT_RESERVED0_MASK                        0x3F
1257#define TDIF_TASK_CONTEXT_RESERVED0_SHIFT                       10
1258        u8 reserved1;
1259        u8 flags0;
1260#define TDIF_TASK_CONTEXT_IGNORE_APP_TAG_MASK                   0x1
1261#define TDIF_TASK_CONTEXT_IGNORE_APP_TAG_SHIFT                  0
1262#define TDIF_TASK_CONTEXT_INITIAL_REF_TAG_VALID_MASK            0x1
1263#define TDIF_TASK_CONTEXT_INITIAL_REF_TAG_VALID_SHIFT           1
1264#define TDIF_TASK_CONTEXT_HOST_GUARD_TYPE_MASK                  0x1
1265#define TDIF_TASK_CONTEXT_HOST_GUARD_TYPE_SHIFT                 2
1266#define TDIF_TASK_CONTEXT_SET_ERROR_WITH_EOP_MASK               0x1
1267#define TDIF_TASK_CONTEXT_SET_ERROR_WITH_EOP_SHIFT              3
1268#define TDIF_TASK_CONTEXT_PROTECTION_TYPE_MASK                  0x3
1269#define TDIF_TASK_CONTEXT_PROTECTION_TYPE_SHIFT                 4
1270#define TDIF_TASK_CONTEXT_CRC_SEED_MASK                         0x1
1271#define TDIF_TASK_CONTEXT_CRC_SEED_SHIFT                        6
1272#define TDIF_TASK_CONTEXT_RESERVED2_MASK                        0x1
1273#define TDIF_TASK_CONTEXT_RESERVED2_SHIFT                       7
1274        __le32 flags1;
1275#define TDIF_TASK_CONTEXT_VALIDATE_GUARD_MASK                   0x1
1276#define TDIF_TASK_CONTEXT_VALIDATE_GUARD_SHIFT                  0
1277#define TDIF_TASK_CONTEXT_VALIDATE_APP_TAG_MASK                 0x1
1278#define TDIF_TASK_CONTEXT_VALIDATE_APP_TAG_SHIFT                1
1279#define TDIF_TASK_CONTEXT_VALIDATE_REF_TAG_MASK                 0x1
1280#define TDIF_TASK_CONTEXT_VALIDATE_REF_TAG_SHIFT                2
1281#define TDIF_TASK_CONTEXT_FORWARD_GUARD_MASK                    0x1
1282#define TDIF_TASK_CONTEXT_FORWARD_GUARD_SHIFT                   3
1283#define TDIF_TASK_CONTEXT_FORWARD_APP_TAG_MASK                  0x1
1284#define TDIF_TASK_CONTEXT_FORWARD_APP_TAG_SHIFT                 4
1285#define TDIF_TASK_CONTEXT_FORWARD_REF_TAG_MASK                  0x1
1286#define TDIF_TASK_CONTEXT_FORWARD_REF_TAG_SHIFT                 5
1287#define TDIF_TASK_CONTEXT_INTERVAL_SIZE_MASK                    0x7
1288#define TDIF_TASK_CONTEXT_INTERVAL_SIZE_SHIFT                   6
1289#define TDIF_TASK_CONTEXT_HOST_INTERFACE_MASK                   0x3
1290#define TDIF_TASK_CONTEXT_HOST_INTERFACE_SHIFT                  9
1291#define TDIF_TASK_CONTEXT_DIF_BEFORE_DATA_MASK                  0x1
1292#define TDIF_TASK_CONTEXT_DIF_BEFORE_DATA_SHIFT                 11
1293#define TDIF_TASK_CONTEXT_RESERVED3_MASK                        0x1
1294#define TDIF_TASK_CONTEXT_RESERVED3_SHIFT                       12
1295#define TDIF_TASK_CONTEXT_NETWORK_INTERFACE_MASK                0x1
1296#define TDIF_TASK_CONTEXT_NETWORK_INTERFACE_SHIFT               13
1297#define TDIF_TASK_CONTEXT_RECEIVED_DIF_BYTES_LEFT_A_MASK        0xF
1298#define TDIF_TASK_CONTEXT_RECEIVED_DIF_BYTES_LEFT_A_SHIFT       14
1299#define TDIF_TASK_CONTEXT_TRANSMITED_DIF_BYTES_LEFT_A_MASK      0xF
1300#define TDIF_TASK_CONTEXT_TRANSMITED_DIF_BYTES_LEFT_A_SHIFT     18
1301#define TDIF_TASK_CONTEXT_ERROR_IN_IO_A_MASK                    0x1
1302#define TDIF_TASK_CONTEXT_ERROR_IN_IO_A_SHIFT                   22
1303#define TDIF_TASK_CONTEXT_CHECKSUM_OVERFLOW_A_MASK              0x1
1304#define TDIF_TASK_CONTEXT_CHECKSUM_OVERFLOW_A_SHIFT             23
1305#define TDIF_TASK_CONTEXT_REF_TAG_MASK_MASK                     0xF
1306#define TDIF_TASK_CONTEXT_REF_TAG_MASK_SHIFT                    24
1307#define TDIF_TASK_CONTEXT_FORWARD_APP_TAG_WITH_MASK_MASK        0x1
1308#define TDIF_TASK_CONTEXT_FORWARD_APP_TAG_WITH_MASK_SHIFT       28
1309#define TDIF_TASK_CONTEXT_FORWARD_REF_TAG_WITH_MASK_MASK        0x1
1310#define TDIF_TASK_CONTEXT_FORWARD_REF_TAG_WITH_MASK_SHIFT       29
1311#define TDIF_TASK_CONTEXT_KEEP_REF_TAG_CONST_MASK               0x1
1312#define TDIF_TASK_CONTEXT_KEEP_REF_TAG_CONST_SHIFT              30
1313#define TDIF_TASK_CONTEXT_RESERVED4_MASK                        0x1
1314#define TDIF_TASK_CONTEXT_RESERVED4_SHIFT                       31
1315        __le32 offset_in_io_b;
1316        __le16 partial_crc_value_a;
1317        __le16 partial_checksum_value_a;
1318        __le32 offset_in_io_a;
1319        u8 partial_dif_data_a[8];
1320        u8 partial_dif_data_b[8];
1321};
1322
1323/* Timers context */
1324struct timers_context {
1325        __le32 logical_client_0;
1326#define TIMERS_CONTEXT_EXPIRATIONTIMELC0_MASK   0x7FFFFFF
1327#define TIMERS_CONTEXT_EXPIRATIONTIMELC0_SHIFT  0
1328#define TIMERS_CONTEXT_RESERVED0_MASK           0x1
1329#define TIMERS_CONTEXT_RESERVED0_SHIFT          27
1330#define TIMERS_CONTEXT_VALIDLC0_MASK            0x1
1331#define TIMERS_CONTEXT_VALIDLC0_SHIFT           28
1332#define TIMERS_CONTEXT_ACTIVELC0_MASK           0x1
1333#define TIMERS_CONTEXT_ACTIVELC0_SHIFT          29
1334#define TIMERS_CONTEXT_RESERVED1_MASK           0x3
1335#define TIMERS_CONTEXT_RESERVED1_SHIFT          30
1336        __le32 logical_client_1;
1337#define TIMERS_CONTEXT_EXPIRATIONTIMELC1_MASK   0x7FFFFFF
1338#define TIMERS_CONTEXT_EXPIRATIONTIMELC1_SHIFT  0
1339#define TIMERS_CONTEXT_RESERVED2_MASK           0x1
1340#define TIMERS_CONTEXT_RESERVED2_SHIFT          27
1341#define TIMERS_CONTEXT_VALIDLC1_MASK            0x1
1342#define TIMERS_CONTEXT_VALIDLC1_SHIFT           28
1343#define TIMERS_CONTEXT_ACTIVELC1_MASK           0x1
1344#define TIMERS_CONTEXT_ACTIVELC1_SHIFT          29
1345#define TIMERS_CONTEXT_RESERVED3_MASK           0x3
1346#define TIMERS_CONTEXT_RESERVED3_SHIFT          30
1347        __le32 logical_client_2;
1348#define TIMERS_CONTEXT_EXPIRATIONTIMELC2_MASK   0x7FFFFFF
1349#define TIMERS_CONTEXT_EXPIRATIONTIMELC2_SHIFT  0
1350#define TIMERS_CONTEXT_RESERVED4_MASK           0x1
1351#define TIMERS_CONTEXT_RESERVED4_SHIFT          27
1352#define TIMERS_CONTEXT_VALIDLC2_MASK            0x1
1353#define TIMERS_CONTEXT_VALIDLC2_SHIFT           28
1354#define TIMERS_CONTEXT_ACTIVELC2_MASK           0x1
1355#define TIMERS_CONTEXT_ACTIVELC2_SHIFT          29
1356#define TIMERS_CONTEXT_RESERVED5_MASK           0x3
1357#define TIMERS_CONTEXT_RESERVED5_SHIFT          30
1358        __le32 host_expiration_fields;
1359#define TIMERS_CONTEXT_HOSTEXPRIRATIONVALUE_MASK        0x7FFFFFF
1360#define TIMERS_CONTEXT_HOSTEXPRIRATIONVALUE_SHIFT       0
1361#define TIMERS_CONTEXT_RESERVED6_MASK                   0x1
1362#define TIMERS_CONTEXT_RESERVED6_SHIFT                  27
1363#define TIMERS_CONTEXT_HOSTEXPRIRATIONVALID_MASK        0x1
1364#define TIMERS_CONTEXT_HOSTEXPRIRATIONVALID_SHIFT        28
1365#define TIMERS_CONTEXT_RESERVED7_MASK                   0x7
1366#define TIMERS_CONTEXT_RESERVED7_SHIFT                  29
1367};
1368
1369/* Enum for next_protocol field of tunnel_parsing_flags / tunnelTypeDesc */
1370enum tunnel_next_protocol {
1371        e_unknown = 0,
1372        e_l2 = 1,
1373        e_ipv4 = 2,
1374        e_ipv6 = 3,
1375        MAX_TUNNEL_NEXT_PROTOCOL
1376};
1377
1378#endif /* __COMMON_HSI__ */
1379#endif
1380