dpdk/drivers/common/cnxk/hw/npc.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(C) 2021 Marvell.
   3 */
   4
   5#ifndef __NPC_HW_H__
   6#define __NPC_HW_H__
   7
   8/* Register offsets */
   9
  10#define NPC_AF_CFG                     (0x0ull)
  11#define NPC_AF_ACTIVE_PC               (0x10ull)
  12#define NPC_AF_CONST                   (0x20ull)
  13#define NPC_AF_CONST1                  (0x30ull)
  14#define NPC_AF_BLK_RST                 (0x40ull)
  15#define NPC_AF_MCAM_SCRUB_CTL          (0xa0ull)
  16#define NPC_AF_KCAM_SCRUB_CTL          (0xb0ull)
  17#define NPC_AF_KPUX_CFG(a)             (0x500ull | (uint64_t)(a) << 3)
  18#define NPC_AF_PCK_CFG                 (0x600ull)
  19#define NPC_AF_PCK_DEF_OL2             (0x610ull)
  20#define NPC_AF_PCK_DEF_OIP4            (0x620ull)
  21#define NPC_AF_PCK_DEF_OIP6            (0x630ull)
  22#define NPC_AF_PCK_DEF_IIP4            (0x640ull)
  23#define NPC_AF_KEX_LDATAX_FLAGS_CFG(a) (0x800ull | (uint64_t)(a) << 3)
  24#define NPC_AF_INTFX_KEX_CFG(a)        (0x1010ull | (uint64_t)(a) << 8)
  25#define NPC_AF_PKINDX_ACTION0(a)       (0x80000ull | (uint64_t)(a) << 6)
  26#define NPC_AF_PKINDX_ACTION1(a)       (0x80008ull | (uint64_t)(a) << 6)
  27#define NPC_AF_PKINDX_CPI_DEFX(a, b)                                           \
  28        (0x80020ull | (uint64_t)(a) << 6 | (uint64_t)(b) << 3)
  29#define NPC_AF_CHLEN90B_PKIND (0x3bull)
  30#define NPC_AF_KPUX_ENTRYX_CAMX(a, b, c)                                       \
  31        (0x100000ull | (uint64_t)(a) << 14 | (uint64_t)(b) << 6 |              \
  32         (uint64_t)(c) << 3)
  33#define NPC_AF_KPUX_ENTRYX_ACTION0(a, b)                                       \
  34        (0x100020ull | (uint64_t)(a) << 14 | (uint64_t)(b) << 6)
  35#define NPC_AF_KPUX_ENTRYX_ACTION1(a, b)                                       \
  36        (0x100028ull | (uint64_t)(a) << 14 | (uint64_t)(b) << 6)
  37#define NPC_AF_KPUX_ENTRY_DISX(a, b)                                           \
  38        (0x180000ull | (uint64_t)(a) << 6 | (uint64_t)(b) << 3)
  39#define NPC_AF_CPIX_CFG(a) (0x200000ull | (uint64_t)(a) << 3)
  40#define NPC_AF_INTFX_LIDX_LTX_LDX_CFG(a, b, c, d)                              \
  41        (0x900000ull | (uint64_t)(a) << 16 | (uint64_t)(b) << 12 |             \
  42         (uint64_t)(c) << 5 | (uint64_t)(d) << 3)
  43#define NPC_AF_INTFX_LDATAX_FLAGSX_CFG(a, b, c)                                \
  44        (0x980000ull | (uint64_t)(a) << 16 | (uint64_t)(b) << 12 |             \
  45         (uint64_t)(c) << 3)
  46#define NPC_AF_MCAMEX_BANKX_CAMX_INTF(a, b, c)                                 \
  47        (0x1000000ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 |             \
  48         (uint64_t)(c) << 3)
  49#define NPC_AF_MCAMEX_BANKX_CAMX_W0(a, b, c)                                   \
  50        (0x1000010ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 |             \
  51         (uint64_t)(c) << 3)
  52#define NPC_AF_MCAMEX_BANKX_CAMX_W1(a, b, c)                                   \
  53        (0x1000020ull | (uint64_t)(a) << 10 | (uint64_t)(b) << 6 |             \
  54         (uint64_t)(c) << 3)
  55#define NPC_AF_MCAMEX_BANKX_CFG(a, b)                                          \
  56        (0x1800000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
  57#define NPC_AF_MCAMEX_BANKX_STAT_ACT(a, b)                                     \
  58        (0x1880000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
  59#define NPC_AF_MATCH_STATX(a)         (0x1880008ull | (uint64_t)(a) << 8)
  60#define NPC_AF_INTFX_MISS_STAT_ACT(a) (0x1880040ull + 0x8 * (uint64_t)(a))
  61#define NPC_AF_MCAMEX_BANKX_ACTION(a, b)                                       \
  62        (0x1900000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
  63#define NPC_AF_MCAMEX_BANKX_TAG_ACT(a, b)                                      \
  64        (0x1900008ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
  65#define NPC_AF_INTFX_MISS_ACT(a)     (0x1a00000ull | (uint64_t)(a) << 4)
  66#define NPC_AF_INTFX_MISS_TAG_ACT(a) (0x1b00008ull | (uint64_t)(a) << 4)
  67#define NPC_AF_MCAM_BANKX_HITX(a, b)                                           \
  68        (0x1c80000ull | (uint64_t)(a) << 8 | (uint64_t)(b) << 4)
  69#define NPC_AF_LKUP_CTL        (0x2000000ull)
  70#define NPC_AF_LKUP_DATAX(a)   (0x2000200ull | (uint64_t)(a) << 4)
  71#define NPC_AF_LKUP_RESULTX(a) (0x2000400ull | (uint64_t)(a) << 4)
  72#define NPC_AF_INTFX_STAT(a)   (0x2000800ull | (uint64_t)(a) << 4)
  73#define NPC_AF_DBG_CTL         (0x3000000ull)
  74#define NPC_AF_DBG_STATUS      (0x3000010ull)
  75#define NPC_AF_KPUX_DBG(a)     (0x3000020ull | (uint64_t)(a) << 8)
  76#define NPC_AF_IKPU_ERR_CTL    (0x3000080ull)
  77#define NPC_AF_KPUX_ERR_CTL(a) (0x30000a0ull | (uint64_t)(a) << 8)
  78#define NPC_AF_MCAM_DBG        (0x3001000ull)
  79#define NPC_AF_DBG_DATAX(a)    (0x3001400ull | (uint64_t)(a) << 4)
  80#define NPC_AF_DBG_RESULTX(a)  (0x3001800ull | (uint64_t)(a) << 4)
  81
  82/* Enum offsets */
  83
  84#define NPC_INTF_NIX0_RX (0x0ull)
  85#define NPC_INTF_NIX0_TX (0x1ull)
  86
  87#define NPC_LKUPOP_PKT (0x0ull)
  88#define NPC_LKUPOP_KEY (0x1ull)
  89
  90#define NPC_MCAM_KEY_X1 (0x0ull)
  91#define NPC_MCAM_KEY_X2 (0x1ull)
  92#define NPC_MCAM_KEY_X4 (0x2ull)
  93
  94#ifndef __NPC_ERRLEVELS__
  95#define __NPC_ERRLEVELS__
  96
  97enum NPC_ERRLEV_E {
  98        NPC_ERRLEV_RE = 0,
  99        NPC_ERRLEV_LA = 1,
 100        NPC_ERRLEV_LB = 2,
 101        NPC_ERRLEV_LC = 3,
 102        NPC_ERRLEV_LD = 4,
 103        NPC_ERRLEV_LE = 5,
 104        NPC_ERRLEV_LF = 6,
 105        NPC_ERRLEV_LG = 7,
 106        NPC_ERRLEV_LH = 8,
 107        NPC_ERRLEV_R9 = 9,
 108        NPC_ERRLEV_R10 = 10,
 109        NPC_ERRLEV_R11 = 11,
 110        NPC_ERRLEV_R12 = 12,
 111        NPC_ERRLEV_R13 = 13,
 112        NPC_ERRLEV_R14 = 14,
 113        NPC_ERRLEV_NIX = 15,
 114        NPC_ERRLEV_ENUM_LAST = 16,
 115};
 116
 117#endif
 118
 119enum npc_kpu_err_code {
 120        NPC_EC_NOERR = 0, /* has to be zero */
 121        NPC_EC_UNK,
 122        NPC_EC_IH_LENGTH,
 123        NPC_EC_EDSA_UNK,
 124        NPC_EC_L2_K1,
 125        NPC_EC_L2_K2,
 126        NPC_EC_L2_K3,
 127        NPC_EC_L2_K3_ETYPE_UNK,
 128        NPC_EC_L2_K4,
 129        NPC_EC_MPLS_2MANY,
 130        NPC_EC_MPLS_UNK,
 131        NPC_EC_NSH_UNK,
 132        NPC_EC_IP_TTL_0,
 133        NPC_EC_IP_FRAG_OFFSET_1,
 134        NPC_EC_IP_VER,
 135        NPC_EC_IP6_HOP_0,
 136        NPC_EC_IP6_VER,
 137        NPC_EC_TCP_FLAGS_FIN_ONLY,
 138        NPC_EC_TCP_FLAGS_ZERO,
 139        NPC_EC_TCP_FLAGS_RST_FIN,
 140        NPC_EC_TCP_FLAGS_URG_SYN,
 141        NPC_EC_TCP_FLAGS_RST_SYN,
 142        NPC_EC_TCP_FLAGS_SYN_FIN,
 143        NPC_EC_VXLAN,
 144        NPC_EC_NVGRE,
 145        NPC_EC_GRE,
 146        NPC_EC_GRE_VER1,
 147        NPC_EC_L4,
 148        NPC_EC_OIP4_CSUM,
 149        NPC_EC_IIP4_CSUM,
 150        NPC_EC_LAST /* has to be the last item */
 151};
 152
 153enum NPC_LID_E {
 154        NPC_LID_LA = 0,
 155        NPC_LID_LB,
 156        NPC_LID_LC,
 157        NPC_LID_LD,
 158        NPC_LID_LE,
 159        NPC_LID_LF,
 160        NPC_LID_LG,
 161        NPC_LID_LH,
 162};
 163
 164#ifndef __NPC_LT_TYPES__
 165#define __NPC_LT_TYPES__
 166#define NPC_LT_NA 0
 167
 168enum npc_kpu_la_ltype {
 169        NPC_LT_LA_8023 = 1,
 170        NPC_LT_LA_ETHER,
 171        NPC_LT_LA_IH_NIX_ETHER,
 172        NPC_LT_LA_HIGIG2_ETHER = 7,
 173        NPC_LT_LA_IH_NIX_HIGIG2_ETHER,
 174        NPC_LT_LA_CUSTOM_L2_90B_ETHER,
 175        NPC_LT_LA_CPT_HDR,
 176        NPC_LT_LA_CUSTOM_L2_24B_ETHER,
 177        NPC_LT_LA_CUSTOM_PRE_L2_ETHER,
 178        NPC_LT_LA_CUSTOM0 = 0xE,
 179        NPC_LT_LA_CUSTOM1 = 0xF,
 180};
 181
 182enum npc_kpu_lb_ltype {
 183        NPC_LT_LB_ETAG = 1,
 184        NPC_LT_LB_CTAG,
 185        NPC_LT_LB_STAG_QINQ,
 186        NPC_LT_LB_BTAG,
 187        NPC_LT_LB_PPPOE,
 188        NPC_LT_LB_DSA,
 189        NPC_LT_LB_DSA_VLAN,
 190        NPC_LT_LB_EDSA,
 191        NPC_LT_LB_EDSA_VLAN,
 192        NPC_LT_LB_EXDSA,
 193        NPC_LT_LB_EXDSA_VLAN,
 194        NPC_LT_LB_FDSA,
 195        NPC_LT_LB_VLAN_EXDSA,
 196        NPC_LT_LB_CUSTOM0 = 0xE,
 197        NPC_LT_LB_CUSTOM1 = 0xF,
 198};
 199
 200enum npc_kpu_lc_ltype {
 201        NPC_LT_LC_PTP = 1,
 202        NPC_LT_LC_IP,
 203        NPC_LT_LC_IP_OPT,
 204        NPC_LT_LC_IP6,
 205        NPC_LT_LC_IP6_EXT,
 206        NPC_LT_LC_ARP,
 207        NPC_LT_LC_RARP,
 208        NPC_LT_LC_MPLS,
 209        NPC_LT_LC_NSH,
 210        NPC_LT_LC_FCOE,
 211        NPC_LT_LC_NGIO,
 212        NPC_LT_LC_CUSTOM0 = 0xE,
 213        NPC_LT_LC_CUSTOM1 = 0xF,
 214};
 215
 216/* Don't modify Ltypes up to SCTP, otherwise it will
 217 * effect flow tag calculation and thus RSS.
 218 */
 219enum npc_kpu_ld_ltype {
 220        NPC_LT_LD_TCP = 1,
 221        NPC_LT_LD_UDP,
 222        NPC_LT_LD_ICMP,
 223        NPC_LT_LD_SCTP,
 224        NPC_LT_LD_ICMP6,
 225        NPC_LT_LD_CUSTOM0,
 226        NPC_LT_LD_CUSTOM1,
 227        NPC_LT_LD_IGMP = 8,
 228        NPC_LT_LD_AH,
 229        NPC_LT_LD_GRE,
 230        NPC_LT_LD_NVGRE,
 231        NPC_LT_LD_NSH,
 232        NPC_LT_LD_TU_MPLS_IN_NSH,
 233        NPC_LT_LD_TU_MPLS_IN_IP,
 234};
 235
 236enum npc_kpu_le_ltype {
 237        NPC_LT_LE_VXLAN = 1,
 238        NPC_LT_LE_GENEVE,
 239        NPC_LT_LE_ESP,
 240        NPC_LT_LE_GTPU = 4,
 241        NPC_LT_LE_VXLANGPE,
 242        NPC_LT_LE_GTPC,
 243        NPC_LT_LE_NSH,
 244        NPC_LT_LE_TU_MPLS_IN_GRE,
 245        NPC_LT_LE_TU_NSH_IN_GRE,
 246        NPC_LT_LE_TU_MPLS_IN_UDP,
 247        NPC_LT_LE_CUSTOM0 = 0xE,
 248        NPC_LT_LE_CUSTOM1 = 0xF,
 249};
 250
 251#endif
 252
 253enum npc_kpu_lf_ltype {
 254        NPC_LT_LF_TU_ETHER = 1,
 255        NPC_LT_LF_TU_PPP,
 256        NPC_LT_LF_TU_MPLS_IN_VXLANGPE,
 257        NPC_LT_LF_TU_NSH_IN_VXLANGPE,
 258        NPC_LT_LF_TU_MPLS_IN_NSH,
 259        NPC_LT_LF_TU_3RD_NSH,
 260        NPC_LT_LF_CUSTOM0 = 0xE,
 261        NPC_LT_LF_CUSTOM1 = 0xF,
 262};
 263
 264enum npc_kpu_lg_ltype {
 265        NPC_LT_LG_TU_IP = 1,
 266        NPC_LT_LG_TU_IP6,
 267        NPC_LT_LG_TU_ARP,
 268        NPC_LT_LG_TU_ETHER_IN_NSH,
 269        NPC_LT_LG_CUSTOM0 = 0xE,
 270        NPC_LT_LG_CUSTOM1 = 0xF,
 271};
 272
 273/* Don't modify Ltypes up to SCTP, otherwise it will
 274 * effect flow tag calculation and thus RSS.
 275 */
 276enum npc_kpu_lh_ltype {
 277        NPC_LT_LH_TU_TCP = 1,
 278        NPC_LT_LH_TU_UDP,
 279        NPC_LT_LH_TU_ICMP,
 280        NPC_LT_LH_TU_SCTP,
 281        NPC_LT_LH_TU_ICMP6,
 282        NPC_LT_LH_TU_IGMP = 8,
 283        NPC_LT_LH_TU_ESP,
 284        NPC_LT_LH_TU_AH,
 285        NPC_LT_LH_CUSTOM0 = 0xE,
 286        NPC_LT_LH_CUSTOM1 = 0xF,
 287};
 288
 289enum npc_kpu_lb_uflag {
 290        NPC_F_LB_U_UNK_ETYPE = 0x80,
 291        NPC_F_LB_U_MORE_TAG = 0x40,
 292};
 293
 294enum npc_kpu_lb_lflag {
 295        NPC_F_LB_L_WITH_CTAG = 1,
 296        NPC_F_LB_L_WITH_CTAG_UNK,
 297        NPC_F_LB_L_WITH_STAG_CTAG,
 298        NPC_F_LB_L_WITH_STAG_STAG,
 299        NPC_F_LB_L_WITH_QINQ_CTAG,
 300        NPC_F_LB_L_WITH_QINQ_QINQ,
 301        NPC_F_LB_L_WITH_ITAG,
 302        NPC_F_LB_L_WITH_ITAG_STAG,
 303        NPC_F_LB_L_WITH_ITAG_CTAG,
 304        NPC_F_LB_L_WITH_ITAG_UNK,
 305        NPC_F_LB_L_WITH_BTAG_ITAG,
 306        NPC_F_LB_L_WITH_STAG,
 307        NPC_F_LB_L_WITH_QINQ,
 308        NPC_F_LB_L_DSA,
 309        NPC_F_LB_L_DSA_VLAN,
 310        NPC_F_LB_L_EDSA,
 311        NPC_F_LB_L_EDSA_VLAN,
 312        NPC_F_LB_L_EXDSA,
 313        NPC_F_LB_L_EXDSA_VLAN,
 314        NPC_F_LB_L_FDSA,
 315};
 316
 317enum npc_kpu_lc_uflag {
 318        NPC_F_LC_U_UNK_PROTO = 0x10,
 319        NPC_F_LC_U_IP_FRAG = 0x20,
 320        NPC_F_LC_U_IP6_FRAG = 0x40,
 321};
 322
 323enum npc_kpu_lc_lflag {
 324        NPC_F_LC_L_IP_IN_IP = 1,
 325        NPC_F_LC_L_6TO4,
 326        NPC_F_LC_L_MPLS_IN_IP,
 327        NPC_F_LC_L_IP6_TUN_IP6,
 328        NPC_F_LC_L_IP6_MPLS_IN_IP,
 329        NPC_F_LC_L_MPLS_4_LABELS,
 330        NPC_F_LC_L_MPLS_3_LABELS,
 331        NPC_F_LC_L_MPLS_2_LABELS,
 332        NPC_F_LC_L_EXT_HOP,
 333        NPC_F_LC_L_EXT_DEST,
 334        NPC_F_LC_L_EXT_ROUT,
 335        NPC_F_LC_L_EXT_MOBILITY,
 336        NPC_F_LC_L_EXT_HOSTID,
 337        NPC_F_LC_L_EXT_SHIM6,
 338};
 339
 340/* Structures definitions */
 341struct npc_kpu_profile_cam {
 342        uint8_t state;
 343        uint8_t state_mask;
 344        uint16_t dp0;
 345        uint16_t dp0_mask;
 346        uint16_t dp1;
 347        uint16_t dp1_mask;
 348        uint16_t dp2;
 349        uint16_t dp2_mask;
 350};
 351
 352struct npc_kpu_profile_action {
 353        uint8_t errlev;
 354        uint8_t errcode;
 355        uint8_t dp0_offset;
 356        uint8_t dp1_offset;
 357        uint8_t dp2_offset;
 358        uint8_t bypass_count;
 359        uint8_t parse_done;
 360        uint8_t next_state;
 361        uint8_t ptr_advance;
 362        uint8_t cap_ena;
 363        uint8_t lid;
 364        uint8_t ltype;
 365        uint8_t flags;
 366        uint8_t offset;
 367        uint8_t mask;
 368        uint8_t right;
 369        uint8_t shift;
 370};
 371
 372struct npc_kpu_profile {
 373        int cam_entries;
 374        int action_entries;
 375        struct npc_kpu_profile_cam *cam;
 376        struct npc_kpu_profile_action *action;
 377};
 378
 379/* NPC KPU register formats */
 380struct npc_kpu_cam {
 381        uint64_t dp0_data : 16;
 382        uint64_t dp1_data : 16;
 383        uint64_t dp2_data : 16;
 384        uint64_t state : 8;
 385        uint64_t rsvd_63_56 : 8;
 386};
 387
 388struct npc_kpu_action0 {
 389        uint64_t var_len_shift : 3;
 390        uint64_t var_len_right : 1;
 391        uint64_t var_len_mask : 8;
 392        uint64_t var_len_offset : 8;
 393        uint64_t ptr_advance : 8;
 394        uint64_t capture_flags : 8;
 395        uint64_t capture_ltype : 4;
 396        uint64_t capture_lid : 3;
 397        uint64_t rsvd_43 : 1;
 398        uint64_t next_state : 8;
 399        uint64_t parse_done : 1;
 400        uint64_t capture_ena : 1;
 401        uint64_t byp_count : 3;
 402        uint64_t rsvd_63_57 : 7;
 403};
 404
 405struct npc_kpu_action1 {
 406        uint64_t dp0_offset : 8;
 407        uint64_t dp1_offset : 8;
 408        uint64_t dp2_offset : 8;
 409        uint64_t errcode : 8;
 410        uint64_t errlev : 4;
 411        uint64_t rsvd_63_36 : 28;
 412};
 413
 414struct npc_kpu_pkind_cpi_def {
 415        uint64_t cpi_base : 10;
 416        uint64_t rsvd_11_10 : 2;
 417        uint64_t add_shift : 3;
 418        uint64_t rsvd_15 : 1;
 419        uint64_t add_mask : 8;
 420        uint64_t add_offset : 8;
 421        uint64_t flags_mask : 8;
 422        uint64_t flags_match : 8;
 423        uint64_t ltype_mask : 4;
 424        uint64_t ltype_match : 4;
 425        uint64_t lid : 3;
 426        uint64_t rsvd_62_59 : 4;
 427        uint64_t ena : 1;
 428};
 429
 430struct nix_rx_action {
 431        uint64_t op : 4;
 432        uint64_t pf_func : 16;
 433        uint64_t index : 20;
 434        uint64_t match_id : 16;
 435        uint64_t flow_key_alg : 5;
 436        uint64_t rsvd_63_61 : 3;
 437};
 438
 439struct nix_tx_action {
 440        uint64_t op : 4;
 441        uint64_t rsvd_11_4 : 8;
 442        uint64_t index : 20;
 443        uint64_t match_id : 16;
 444        uint64_t rsvd_63_48 : 16;
 445};
 446
 447/* NPC layer parse information structure */
 448struct npc_layer_info_s {
 449        uint32_t lptr : 8;
 450        uint32_t flags : 8;
 451        uint32_t ltype : 4;
 452        uint32_t rsvd_31_20 : 12;
 453};
 454
 455/* NPC layer mcam search key extract structure */
 456struct npc_layer_kex_s {
 457        uint16_t flags : 8;
 458        uint16_t ltype : 4;
 459        uint16_t rsvd_15_12 : 4;
 460};
 461
 462/* NPC mcam search key x1 structure */
 463struct npc_mcam_key_x1_s {
 464        uint64_t intf : 2;
 465        uint64_t rsvd_63_2 : 62;
 466        uint64_t kw0 : 64; /* W1 */
 467        uint64_t kw1 : 48;
 468        uint64_t rsvd_191_176 : 16;
 469};
 470
 471/* NPC mcam search key x2 structure */
 472struct npc_mcam_key_x2_s {
 473        uint64_t intf : 2;
 474        uint64_t rsvd_63_2 : 62;
 475        uint64_t kw0 : 64; /* W1 */
 476        uint64_t kw1 : 64; /* W2 */
 477        uint64_t kw2 : 64; /* W3 */
 478        uint64_t kw3 : 32;
 479        uint64_t rsvd_319_288 : 32;
 480};
 481
 482/* NPC mcam search key x4 structure */
 483struct npc_mcam_key_x4_s {
 484        uint64_t intf : 2;
 485        uint64_t rsvd_63_2 : 62;
 486        uint64_t kw0 : 64; /* W1 */
 487        uint64_t kw1 : 64; /* W2 */
 488        uint64_t kw2 : 64; /* W3 */
 489        uint64_t kw3 : 64; /* W4 */
 490        uint64_t kw4 : 64; /* W5 */
 491        uint64_t kw5 : 64; /* W6 */
 492        uint64_t kw6 : 64; /* W7 */
 493};
 494
 495/* NPC parse key extract structure */
 496struct npc_parse_kex_s {
 497        uint64_t chan : 12;
 498        uint64_t errlev : 4;
 499        uint64_t errcode : 8;
 500        uint64_t l2m : 1;
 501        uint64_t l2b : 1;
 502        uint64_t l3m : 1;
 503        uint64_t l3b : 1;
 504        uint64_t la : 12;
 505        uint64_t lb : 12;
 506        uint64_t lc : 12;
 507        uint64_t ld : 12;
 508        uint64_t le : 12;
 509        uint64_t lf : 12;
 510        uint64_t lg : 12;
 511        uint64_t lh : 12;
 512        uint64_t rsvd_127_124 : 4;
 513};
 514
 515/* NPC result structure */
 516struct npc_result_s {
 517        uint64_t intf : 2;
 518        uint64_t pkind : 6;
 519        uint64_t chan : 12;
 520        uint64_t errlev : 4;
 521        uint64_t errcode : 8;
 522        uint64_t l2m : 1;
 523        uint64_t l2b : 1;
 524        uint64_t l3m : 1;
 525        uint64_t l3b : 1;
 526        uint64_t eoh_ptr : 8;
 527        uint64_t rsvd_63_44 : 20;
 528        uint64_t action : 64;      /* W1 */
 529        uint64_t vtag_action : 64; /* W2 */
 530        uint64_t la : 20;
 531        uint64_t lb : 20;
 532        uint64_t lc : 20;
 533        uint64_t rsvd_255_252 : 4;
 534        uint64_t ld : 20;
 535        uint64_t le : 20;
 536        uint64_t lf : 20;
 537        uint64_t rsvd_319_316 : 4;
 538        uint64_t lg : 20;
 539        uint64_t lh : 20;
 540        uint64_t rsvd_383_360 : 24;
 541};
 542
 543#endif /* __NPC_HW_H__ */
 544