cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

common_hsi.h (50147B)


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