linux/drivers/infiniband/hw/i40iw/i40iw_type.h
<<
>>
Prefs
   1/*******************************************************************************
   2*
   3* Copyright (c) 2015-2016 Intel Corporation.  All rights reserved.
   4*
   5* This software is available to you under a choice of one of two
   6* licenses.  You may choose to be licensed under the terms of the GNU
   7* General Public License (GPL) Version 2, available from the file
   8* COPYING in the main directory of this source tree, or the
   9* OpenFabrics.org BSD license below:
  10*
  11*   Redistribution and use in source and binary forms, with or
  12*   without modification, are permitted provided that the following
  13*   conditions are met:
  14*
  15*    - Redistributions of source code must retain the above
  16*       copyright notice, this list of conditions and the following
  17*       disclaimer.
  18*
  19*    - Redistributions in binary form must reproduce the above
  20*       copyright notice, this list of conditions and the following
  21*       disclaimer in the documentation and/or other materials
  22*       provided with the distribution.
  23*
  24* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  25* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  26* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  27* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  28* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  29* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  30* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  31* SOFTWARE.
  32*
  33*******************************************************************************/
  34
  35#ifndef I40IW_TYPE_H
  36#define I40IW_TYPE_H
  37#include "i40iw_user.h"
  38#include "i40iw_hmc.h"
  39#include "i40iw_vf.h"
  40#include "i40iw_virtchnl.h"
  41
  42struct i40iw_cqp_sq_wqe {
  43        u64 buf[I40IW_CQP_WQE_SIZE];
  44};
  45
  46struct i40iw_sc_aeqe {
  47        u64 buf[I40IW_AEQE_SIZE];
  48};
  49
  50struct i40iw_ceqe {
  51        u64 buf[I40IW_CEQE_SIZE];
  52};
  53
  54struct i40iw_cqp_ctx {
  55        u64 buf[I40IW_CQP_CTX_SIZE];
  56};
  57
  58struct i40iw_cq_shadow_area {
  59        u64 buf[I40IW_SHADOW_AREA_SIZE];
  60};
  61
  62struct i40iw_sc_dev;
  63struct i40iw_hmc_info;
  64struct i40iw_vsi_pestat;
  65
  66struct i40iw_cqp_ops;
  67struct i40iw_ccq_ops;
  68struct i40iw_ceq_ops;
  69struct i40iw_aeq_ops;
  70struct i40iw_mr_ops;
  71struct i40iw_cqp_misc_ops;
  72struct i40iw_pd_ops;
  73struct i40iw_priv_qp_ops;
  74struct i40iw_priv_cq_ops;
  75struct i40iw_hmc_ops;
  76struct pci_dev;
  77
  78enum i40iw_page_size {
  79        I40IW_PAGE_SIZE_4K,
  80        I40IW_PAGE_SIZE_2M
  81};
  82
  83enum i40iw_resource_indicator_type {
  84        I40IW_RSRC_INDICATOR_TYPE_ADAPTER = 0,
  85        I40IW_RSRC_INDICATOR_TYPE_CQ,
  86        I40IW_RSRC_INDICATOR_TYPE_QP,
  87        I40IW_RSRC_INDICATOR_TYPE_SRQ
  88};
  89
  90enum i40iw_hdrct_flags {
  91        DDP_LEN_FLAG = 0x80,
  92        DDP_HDR_FLAG = 0x40,
  93        RDMA_HDR_FLAG = 0x20
  94};
  95
  96enum i40iw_term_layers {
  97        LAYER_RDMA = 0,
  98        LAYER_DDP = 1,
  99        LAYER_MPA = 2
 100};
 101
 102enum i40iw_term_error_types {
 103        RDMAP_REMOTE_PROT = 1,
 104        RDMAP_REMOTE_OP = 2,
 105        DDP_CATASTROPHIC = 0,
 106        DDP_TAGGED_BUFFER = 1,
 107        DDP_UNTAGGED_BUFFER = 2,
 108        DDP_LLP = 3
 109};
 110
 111enum i40iw_term_rdma_errors {
 112        RDMAP_INV_STAG = 0x00,
 113        RDMAP_INV_BOUNDS = 0x01,
 114        RDMAP_ACCESS = 0x02,
 115        RDMAP_UNASSOC_STAG = 0x03,
 116        RDMAP_TO_WRAP = 0x04,
 117        RDMAP_INV_RDMAP_VER = 0x05,
 118        RDMAP_UNEXPECTED_OP = 0x06,
 119        RDMAP_CATASTROPHIC_LOCAL = 0x07,
 120        RDMAP_CATASTROPHIC_GLOBAL = 0x08,
 121        RDMAP_CANT_INV_STAG = 0x09,
 122        RDMAP_UNSPECIFIED = 0xff
 123};
 124
 125enum i40iw_term_ddp_errors {
 126        DDP_CATASTROPHIC_LOCAL = 0x00,
 127        DDP_TAGGED_INV_STAG = 0x00,
 128        DDP_TAGGED_BOUNDS = 0x01,
 129        DDP_TAGGED_UNASSOC_STAG = 0x02,
 130        DDP_TAGGED_TO_WRAP = 0x03,
 131        DDP_TAGGED_INV_DDP_VER = 0x04,
 132        DDP_UNTAGGED_INV_QN = 0x01,
 133        DDP_UNTAGGED_INV_MSN_NO_BUF = 0x02,
 134        DDP_UNTAGGED_INV_MSN_RANGE = 0x03,
 135        DDP_UNTAGGED_INV_MO = 0x04,
 136        DDP_UNTAGGED_INV_TOO_LONG = 0x05,
 137        DDP_UNTAGGED_INV_DDP_VER = 0x06
 138};
 139
 140enum i40iw_term_mpa_errors {
 141        MPA_CLOSED = 0x01,
 142        MPA_CRC = 0x02,
 143        MPA_MARKER = 0x03,
 144        MPA_REQ_RSP = 0x04,
 145};
 146
 147enum i40iw_flush_opcode {
 148        FLUSH_INVALID = 0,
 149        FLUSH_PROT_ERR,
 150        FLUSH_REM_ACCESS_ERR,
 151        FLUSH_LOC_QP_OP_ERR,
 152        FLUSH_REM_OP_ERR,
 153        FLUSH_LOC_LEN_ERR,
 154        FLUSH_GENERAL_ERR,
 155        FLUSH_FATAL_ERR
 156};
 157
 158enum i40iw_term_eventtypes {
 159        TERM_EVENT_QP_FATAL,
 160        TERM_EVENT_QP_ACCESS_ERR
 161};
 162
 163struct i40iw_terminate_hdr {
 164        u8 layer_etype;
 165        u8 error_code;
 166        u8 hdrct;
 167        u8 rsvd;
 168};
 169
 170enum i40iw_debug_flag {
 171        I40IW_DEBUG_NONE        = 0x00000000,
 172        I40IW_DEBUG_ERR         = 0x00000001,
 173        I40IW_DEBUG_INIT        = 0x00000002,
 174        I40IW_DEBUG_DEV         = 0x00000004,
 175        I40IW_DEBUG_CM          = 0x00000008,
 176        I40IW_DEBUG_VERBS       = 0x00000010,
 177        I40IW_DEBUG_PUDA        = 0x00000020,
 178        I40IW_DEBUG_ILQ         = 0x00000040,
 179        I40IW_DEBUG_IEQ         = 0x00000080,
 180        I40IW_DEBUG_QP          = 0x00000100,
 181        I40IW_DEBUG_CQ          = 0x00000200,
 182        I40IW_DEBUG_MR          = 0x00000400,
 183        I40IW_DEBUG_PBLE        = 0x00000800,
 184        I40IW_DEBUG_WQE         = 0x00001000,
 185        I40IW_DEBUG_AEQ         = 0x00002000,
 186        I40IW_DEBUG_CQP         = 0x00004000,
 187        I40IW_DEBUG_HMC         = 0x00008000,
 188        I40IW_DEBUG_USER        = 0x00010000,
 189        I40IW_DEBUG_VIRT        = 0x00020000,
 190        I40IW_DEBUG_DCB         = 0x00040000,
 191        I40IW_DEBUG_CQE         = 0x00800000,
 192        I40IW_DEBUG_ALL         = 0xFFFFFFFF
 193};
 194
 195enum i40iw_hw_stats_index_32b {
 196        I40IW_HW_STAT_INDEX_IP4RXDISCARD = 0,
 197        I40IW_HW_STAT_INDEX_IP4RXTRUNC,
 198        I40IW_HW_STAT_INDEX_IP4TXNOROUTE,
 199        I40IW_HW_STAT_INDEX_IP6RXDISCARD,
 200        I40IW_HW_STAT_INDEX_IP6RXTRUNC,
 201        I40IW_HW_STAT_INDEX_IP6TXNOROUTE,
 202        I40IW_HW_STAT_INDEX_TCPRTXSEG,
 203        I40IW_HW_STAT_INDEX_TCPRXOPTERR,
 204        I40IW_HW_STAT_INDEX_TCPRXPROTOERR,
 205        I40IW_HW_STAT_INDEX_MAX_32
 206};
 207
 208enum i40iw_hw_stats_index_64b {
 209        I40IW_HW_STAT_INDEX_IP4RXOCTS = 0,
 210        I40IW_HW_STAT_INDEX_IP4RXPKTS,
 211        I40IW_HW_STAT_INDEX_IP4RXFRAGS,
 212        I40IW_HW_STAT_INDEX_IP4RXMCPKTS,
 213        I40IW_HW_STAT_INDEX_IP4TXOCTS,
 214        I40IW_HW_STAT_INDEX_IP4TXPKTS,
 215        I40IW_HW_STAT_INDEX_IP4TXFRAGS,
 216        I40IW_HW_STAT_INDEX_IP4TXMCPKTS,
 217        I40IW_HW_STAT_INDEX_IP6RXOCTS,
 218        I40IW_HW_STAT_INDEX_IP6RXPKTS,
 219        I40IW_HW_STAT_INDEX_IP6RXFRAGS,
 220        I40IW_HW_STAT_INDEX_IP6RXMCPKTS,
 221        I40IW_HW_STAT_INDEX_IP6TXOCTS,
 222        I40IW_HW_STAT_INDEX_IP6TXPKTS,
 223        I40IW_HW_STAT_INDEX_IP6TXFRAGS,
 224        I40IW_HW_STAT_INDEX_IP6TXMCPKTS,
 225        I40IW_HW_STAT_INDEX_TCPRXSEGS,
 226        I40IW_HW_STAT_INDEX_TCPTXSEG,
 227        I40IW_HW_STAT_INDEX_RDMARXRDS,
 228        I40IW_HW_STAT_INDEX_RDMARXSNDS,
 229        I40IW_HW_STAT_INDEX_RDMARXWRS,
 230        I40IW_HW_STAT_INDEX_RDMATXRDS,
 231        I40IW_HW_STAT_INDEX_RDMATXSNDS,
 232        I40IW_HW_STAT_INDEX_RDMATXWRS,
 233        I40IW_HW_STAT_INDEX_RDMAVBND,
 234        I40IW_HW_STAT_INDEX_RDMAVINV,
 235        I40IW_HW_STAT_INDEX_MAX_64
 236};
 237
 238enum i40iw_feature_type {
 239        I40IW_FEATURE_FW_INFO = 0,
 240        I40IW_MAX_FEATURES
 241};
 242
 243struct i40iw_dev_hw_stats_offsets {
 244        u32 stats_offset_32[I40IW_HW_STAT_INDEX_MAX_32];
 245        u32 stats_offset_64[I40IW_HW_STAT_INDEX_MAX_64];
 246};
 247
 248struct i40iw_dev_hw_stats {
 249        u64 stats_value_32[I40IW_HW_STAT_INDEX_MAX_32];
 250        u64 stats_value_64[I40IW_HW_STAT_INDEX_MAX_64];
 251};
 252
 253struct i40iw_vsi_pestat {
 254        struct i40iw_hw *hw;
 255        struct i40iw_dev_hw_stats hw_stats;
 256        struct i40iw_dev_hw_stats last_read_hw_stats;
 257        struct i40iw_dev_hw_stats_offsets hw_stats_offsets;
 258        struct timer_list stats_timer;
 259        struct i40iw_sc_vsi *vsi;
 260        spinlock_t lock; /* rdma stats lock */
 261};
 262
 263struct i40iw_hw {
 264        u8 __iomem *hw_addr;
 265        struct pci_dev *pcidev;
 266        struct i40iw_hmc_info hmc;
 267};
 268
 269struct i40iw_pfpdu {
 270        struct list_head rxlist;
 271        u32 rcv_nxt;
 272        u32 fps;
 273        u32 max_fpdu_data;
 274        bool mode;
 275        bool mpa_crc_err;
 276        u64 total_ieq_bufs;
 277        u64 fpdu_processed;
 278        u64 bad_seq_num;
 279        u64 crc_err;
 280        u64 no_tx_bufs;
 281        u64 tx_err;
 282        u64 out_of_order;
 283        u64 pmode_count;
 284};
 285
 286struct i40iw_sc_pd {
 287        u32 size;
 288        struct i40iw_sc_dev *dev;
 289        u16 pd_id;
 290        int abi_ver;
 291};
 292
 293struct i40iw_cqp_quanta {
 294        u64 elem[I40IW_CQP_WQE_SIZE];
 295};
 296
 297struct i40iw_sc_cqp {
 298        u32 size;
 299        u64 sq_pa;
 300        u64 host_ctx_pa;
 301        void *back_cqp;
 302        struct i40iw_sc_dev *dev;
 303        enum i40iw_status_code (*process_cqp_sds)(struct i40iw_sc_dev *,
 304                                                  struct i40iw_update_sds_info *);
 305        struct i40iw_dma_mem sdbuf;
 306        struct i40iw_ring sq_ring;
 307        struct i40iw_cqp_quanta *sq_base;
 308        u64 *host_ctx;
 309        u64 *scratch_array;
 310        u32 cqp_id;
 311        u32 sq_size;
 312        u32 hw_sq_size;
 313        u8 struct_ver;
 314        u8 polarity;
 315        bool en_datacenter_tcp;
 316        u8 hmc_profile;
 317        u8 enabled_vf_count;
 318        u8 timeout_count;
 319};
 320
 321struct i40iw_sc_aeq {
 322        u32 size;
 323        u64 aeq_elem_pa;
 324        struct i40iw_sc_dev *dev;
 325        struct i40iw_sc_aeqe *aeqe_base;
 326        void *pbl_list;
 327        u32 elem_cnt;
 328        struct i40iw_ring aeq_ring;
 329        bool virtual_map;
 330        u8 pbl_chunk_size;
 331        u32 first_pm_pbl_idx;
 332        u8 polarity;
 333};
 334
 335struct i40iw_sc_ceq {
 336        u32 size;
 337        u64 ceq_elem_pa;
 338        struct i40iw_sc_dev *dev;
 339        struct i40iw_ceqe *ceqe_base;
 340        void *pbl_list;
 341        u32 ceq_id;
 342        u32 elem_cnt;
 343        struct i40iw_ring ceq_ring;
 344        bool virtual_map;
 345        u8 pbl_chunk_size;
 346        bool tph_en;
 347        u8 tph_val;
 348        u32 first_pm_pbl_idx;
 349        u8 polarity;
 350};
 351
 352struct i40iw_sc_cq {
 353        struct i40iw_cq_uk cq_uk;
 354        u64 cq_pa;
 355        u64 shadow_area_pa;
 356        struct i40iw_sc_dev *dev;
 357        struct i40iw_sc_vsi *vsi;
 358        void *pbl_list;
 359        void *back_cq;
 360        u32 ceq_id;
 361        u32 shadow_read_threshold;
 362        bool ceqe_mask;
 363        bool virtual_map;
 364        u8 pbl_chunk_size;
 365        u8 cq_type;
 366        bool ceq_id_valid;
 367        bool tph_en;
 368        u8 tph_val;
 369        u32 first_pm_pbl_idx;
 370        bool check_overflow;
 371};
 372
 373struct i40iw_sc_qp {
 374        struct i40iw_qp_uk qp_uk;
 375        u64 sq_pa;
 376        u64 rq_pa;
 377        u64 hw_host_ctx_pa;
 378        u64 shadow_area_pa;
 379        u64 q2_pa;
 380        struct i40iw_sc_dev *dev;
 381        struct i40iw_sc_vsi *vsi;
 382        struct i40iw_sc_pd *pd;
 383        u64 *hw_host_ctx;
 384        void *llp_stream_handle;
 385        void *back_qp;
 386        struct i40iw_pfpdu pfpdu;
 387        u8 *q2_buf;
 388        u64 qp_compl_ctx;
 389        u16 qs_handle;
 390        u16 push_idx;
 391        u8 sq_tph_val;
 392        u8 rq_tph_val;
 393        u8 qp_state;
 394        u8 qp_type;
 395        u8 hw_sq_size;
 396        u8 hw_rq_size;
 397        u8 src_mac_addr_idx;
 398        bool sq_tph_en;
 399        bool rq_tph_en;
 400        bool rcv_tph_en;
 401        bool xmit_tph_en;
 402        bool virtual_map;
 403        bool flush_sq;
 404        bool flush_rq;
 405        u8 user_pri;
 406        struct list_head list;
 407        bool on_qoslist;
 408        bool sq_flush;
 409        enum i40iw_flush_opcode flush_code;
 410        enum i40iw_term_eventtypes eventtype;
 411        u8 term_flags;
 412};
 413
 414struct i40iw_hmc_fpm_misc {
 415        u32 max_ceqs;
 416        u32 max_sds;
 417        u32 xf_block_size;
 418        u32 q1_block_size;
 419        u32 ht_multiplier;
 420        u32 timer_bucket;
 421};
 422
 423struct i40iw_vchnl_if {
 424        enum i40iw_status_code (*vchnl_recv)(struct i40iw_sc_dev *, u32, u8 *, u16);
 425        enum i40iw_status_code (*vchnl_send)(struct i40iw_sc_dev *dev, u32, u8 *, u16);
 426};
 427
 428#define I40IW_VCHNL_MAX_VF_MSG_SIZE 512
 429
 430struct i40iw_vchnl_vf_msg_buffer {
 431        struct i40iw_virtchnl_op_buf vchnl_msg;
 432        char parm_buffer[I40IW_VCHNL_MAX_VF_MSG_SIZE - 1];
 433};
 434
 435struct i40iw_qos {
 436        struct list_head qplist;
 437        spinlock_t lock;        /* qos list */
 438        u16 qs_handle;
 439};
 440
 441struct i40iw_vfdev {
 442        struct i40iw_sc_dev *pf_dev;
 443        u8 *hmc_info_mem;
 444        struct i40iw_vsi_pestat pestat;
 445        struct i40iw_hmc_pble_info *pble_info;
 446        struct i40iw_hmc_info hmc_info;
 447        struct i40iw_vchnl_vf_msg_buffer vf_msg_buffer;
 448        u64 fpm_query_buf_pa;
 449        u64 *fpm_query_buf;
 450        u32 vf_id;
 451        u32 msg_count;
 452        bool pf_hmc_initialized;
 453        u16 pmf_index;
 454        u16 iw_vf_idx;          /* VF Device table index */
 455        bool stats_initialized;
 456};
 457
 458#define I40IW_INVALID_FCN_ID 0xff
 459struct i40iw_sc_vsi {
 460        struct i40iw_sc_dev *dev;
 461        void *back_vsi; /* Owned by OS */
 462        u32 ilq_count;
 463        struct i40iw_virt_mem ilq_mem;
 464        struct i40iw_puda_rsrc *ilq;
 465        u32 ieq_count;
 466        struct i40iw_virt_mem ieq_mem;
 467        struct i40iw_puda_rsrc *ieq;
 468        u16 exception_lan_queue;
 469        u16 mtu;
 470        u8 fcn_id;
 471        bool stats_fcn_id_alloc;
 472        struct i40iw_qos qos[I40IW_MAX_USER_PRIORITY];
 473        struct i40iw_vsi_pestat *pestat;
 474};
 475
 476struct i40iw_sc_dev {
 477        struct list_head cqp_cmd_head;  /* head of the CQP command list */
 478        spinlock_t cqp_lock; /* cqp list sync */
 479        struct i40iw_dev_uk dev_uk;
 480        bool fcn_id_array[I40IW_MAX_STATS_COUNT];
 481        struct i40iw_dma_mem vf_fpm_query_buf[I40IW_MAX_PE_ENABLED_VF_COUNT];
 482        u64 fpm_query_buf_pa;
 483        u64 fpm_commit_buf_pa;
 484        u64 *fpm_query_buf;
 485        u64 *fpm_commit_buf;
 486        void *back_dev;
 487        struct i40iw_hw *hw;
 488        u8 __iomem *db_addr;
 489        struct i40iw_hmc_info *hmc_info;
 490        struct i40iw_hmc_pble_info *pble_info;
 491        struct i40iw_vfdev *vf_dev[I40IW_MAX_PE_ENABLED_VF_COUNT];
 492        struct i40iw_sc_cqp *cqp;
 493        struct i40iw_sc_aeq *aeq;
 494        struct i40iw_sc_ceq *ceq[I40IW_CEQ_MAX_COUNT];
 495        struct i40iw_sc_cq *ccq;
 496        struct i40iw_cqp_ops *cqp_ops;
 497        struct i40iw_ccq_ops *ccq_ops;
 498        struct i40iw_ceq_ops *ceq_ops;
 499        struct i40iw_aeq_ops *aeq_ops;
 500        struct i40iw_pd_ops *iw_pd_ops;
 501        struct i40iw_priv_qp_ops *iw_priv_qp_ops;
 502        struct i40iw_priv_cq_ops *iw_priv_cq_ops;
 503        struct i40iw_mr_ops *mr_ops;
 504        struct i40iw_cqp_misc_ops *cqp_misc_ops;
 505        struct i40iw_hmc_ops *hmc_ops;
 506        struct i40iw_vchnl_if vchnl_if;
 507        const struct i40iw_vf_cqp_ops *iw_vf_cqp_ops;
 508
 509        struct i40iw_hmc_fpm_misc hmc_fpm_misc;
 510        u64 feature_info[I40IW_MAX_FEATURES];
 511        u32 debug_mask;
 512        u8 hmc_fn_id;
 513        bool is_pf;
 514        bool vchnl_up;
 515        bool ceq_valid;
 516        u8 vf_id;
 517        wait_queue_head_t vf_reqs;
 518        u64 cqp_cmd_stats[OP_SIZE_CQP_STAT_ARRAY];
 519        struct i40iw_vchnl_vf_msg_buffer vchnl_vf_msg_buf;
 520        u8 hw_rev;
 521};
 522
 523struct i40iw_modify_cq_info {
 524        u64 cq_pa;
 525        struct i40iw_cqe *cq_base;
 526        void *pbl_list;
 527        u32 ceq_id;
 528        u32 cq_size;
 529        u32 shadow_read_threshold;
 530        bool virtual_map;
 531        u8 pbl_chunk_size;
 532        bool check_overflow;
 533        bool cq_resize;
 534        bool ceq_change;
 535        bool check_overflow_change;
 536        u32 first_pm_pbl_idx;
 537        bool ceq_valid;
 538};
 539
 540struct i40iw_create_qp_info {
 541        u8 next_iwarp_state;
 542        bool ord_valid;
 543        bool tcp_ctx_valid;
 544        bool cq_num_valid;
 545        bool arp_cache_idx_valid;
 546};
 547
 548struct i40iw_modify_qp_info {
 549        u64 rx_win0;
 550        u64 rx_win1;
 551        u8 next_iwarp_state;
 552        u8 termlen;
 553        bool ord_valid;
 554        bool tcp_ctx_valid;
 555        bool cq_num_valid;
 556        bool arp_cache_idx_valid;
 557        bool reset_tcp_conn;
 558        bool remove_hash_idx;
 559        bool dont_send_term;
 560        bool dont_send_fin;
 561        bool cached_var_valid;
 562        bool force_loopback;
 563};
 564
 565struct i40iw_ccq_cqe_info {
 566        struct i40iw_sc_cqp *cqp;
 567        u64 scratch;
 568        u32 op_ret_val;
 569        u16 maj_err_code;
 570        u16 min_err_code;
 571        u8 op_code;
 572        bool error;
 573};
 574
 575struct i40iw_l2params {
 576        u16 qs_handle_list[I40IW_MAX_USER_PRIORITY];
 577        u16 mtu;
 578};
 579
 580struct i40iw_vsi_init_info {
 581        struct i40iw_sc_dev *dev;
 582        void  *back_vsi;
 583        struct i40iw_l2params *params;
 584        u16 exception_lan_queue;
 585};
 586
 587struct i40iw_vsi_stats_info {
 588        struct i40iw_vsi_pestat *pestat;
 589        u8 fcn_id;
 590        bool alloc_fcn_id;
 591        bool stats_initialize;
 592};
 593
 594struct i40iw_device_init_info {
 595        u64 fpm_query_buf_pa;
 596        u64 fpm_commit_buf_pa;
 597        u64 *fpm_query_buf;
 598        u64 *fpm_commit_buf;
 599        struct i40iw_hw *hw;
 600        void __iomem *bar0;
 601        enum i40iw_status_code (*vchnl_send)(struct i40iw_sc_dev *, u32, u8 *, u16);
 602        u8 hmc_fn_id;
 603        bool is_pf;
 604        u32 debug_mask;
 605};
 606
 607enum i40iw_cqp_hmc_profile {
 608        I40IW_HMC_PROFILE_DEFAULT = 1,
 609        I40IW_HMC_PROFILE_FAVOR_VF = 2,
 610        I40IW_HMC_PROFILE_EQUAL = 3,
 611};
 612
 613struct i40iw_cqp_init_info {
 614        u64 cqp_compl_ctx;
 615        u64 host_ctx_pa;
 616        u64 sq_pa;
 617        struct i40iw_sc_dev *dev;
 618        struct i40iw_cqp_quanta *sq;
 619        u64 *host_ctx;
 620        u64 *scratch_array;
 621        u32 sq_size;
 622        u8 struct_ver;
 623        bool en_datacenter_tcp;
 624        u8 hmc_profile;
 625        u8 enabled_vf_count;
 626};
 627
 628struct i40iw_ceq_init_info {
 629        u64 ceqe_pa;
 630        struct i40iw_sc_dev *dev;
 631        u64 *ceqe_base;
 632        void *pbl_list;
 633        u32 elem_cnt;
 634        u32 ceq_id;
 635        bool virtual_map;
 636        u8 pbl_chunk_size;
 637        bool tph_en;
 638        u8 tph_val;
 639        u32 first_pm_pbl_idx;
 640};
 641
 642struct i40iw_aeq_init_info {
 643        u64 aeq_elem_pa;
 644        struct i40iw_sc_dev *dev;
 645        u32 *aeqe_base;
 646        void *pbl_list;
 647        u32 elem_cnt;
 648        bool virtual_map;
 649        u8 pbl_chunk_size;
 650        u32 first_pm_pbl_idx;
 651};
 652
 653struct i40iw_ccq_init_info {
 654        u64 cq_pa;
 655        u64 shadow_area_pa;
 656        struct i40iw_sc_dev *dev;
 657        struct i40iw_cqe *cq_base;
 658        u64 *shadow_area;
 659        void *pbl_list;
 660        u32 num_elem;
 661        u32 ceq_id;
 662        u32 shadow_read_threshold;
 663        bool ceqe_mask;
 664        bool ceq_id_valid;
 665        bool tph_en;
 666        u8 tph_val;
 667        bool avoid_mem_cflct;
 668        bool virtual_map;
 669        u8 pbl_chunk_size;
 670        u32 first_pm_pbl_idx;
 671};
 672
 673struct i40iwarp_offload_info {
 674        u16 rcv_mark_offset;
 675        u16 snd_mark_offset;
 676        u16 pd_id;
 677        u8 ddp_ver;
 678        u8 rdmap_ver;
 679        u8 ord_size;
 680        u8 ird_size;
 681        bool wr_rdresp_en;
 682        bool rd_enable;
 683        bool snd_mark_en;
 684        bool rcv_mark_en;
 685        bool bind_en;
 686        bool fast_reg_en;
 687        bool priv_mode_en;
 688        bool lsmm_present;
 689        u8 iwarp_mode;
 690        bool align_hdrs;
 691        bool rcv_no_mpa_crc;
 692
 693        u8 last_byte_sent;
 694};
 695
 696struct i40iw_tcp_offload_info {
 697        bool ipv4;
 698        bool no_nagle;
 699        bool insert_vlan_tag;
 700        bool time_stamp;
 701        u8 cwnd_inc_limit;
 702        bool drop_ooo_seg;
 703        u8 dup_ack_thresh;
 704        u8 ttl;
 705        u8 src_mac_addr_idx;
 706        bool avoid_stretch_ack;
 707        u8 tos;
 708        u16 src_port;
 709        u16 dst_port;
 710        u32 dest_ip_addr0;
 711        u32 dest_ip_addr1;
 712        u32 dest_ip_addr2;
 713        u32 dest_ip_addr3;
 714        u32 snd_mss;
 715        u16 vlan_tag;
 716        u16 arp_idx;
 717        u32 flow_label;
 718        bool wscale;
 719        u8 tcp_state;
 720        u8 snd_wscale;
 721        u8 rcv_wscale;
 722        u32 time_stamp_recent;
 723        u32 time_stamp_age;
 724        u32 snd_nxt;
 725        u32 snd_wnd;
 726        u32 rcv_nxt;
 727        u32 rcv_wnd;
 728        u32 snd_max;
 729        u32 snd_una;
 730        u32 srtt;
 731        u32 rtt_var;
 732        u32 ss_thresh;
 733        u32 cwnd;
 734        u32 snd_wl1;
 735        u32 snd_wl2;
 736        u32 max_snd_window;
 737        u8 rexmit_thresh;
 738        u32 local_ipaddr0;
 739        u32 local_ipaddr1;
 740        u32 local_ipaddr2;
 741        u32 local_ipaddr3;
 742        bool ignore_tcp_opt;
 743        bool ignore_tcp_uns_opt;
 744};
 745
 746struct i40iw_qp_host_ctx_info {
 747        u64 qp_compl_ctx;
 748        struct i40iw_tcp_offload_info *tcp_info;
 749        struct i40iwarp_offload_info *iwarp_info;
 750        u32 send_cq_num;
 751        u32 rcv_cq_num;
 752        u16 push_idx;
 753        bool push_mode_en;
 754        bool tcp_info_valid;
 755        bool iwarp_info_valid;
 756        bool err_rq_idx_valid;
 757        u16 err_rq_idx;
 758        bool add_to_qoslist;
 759        u8 user_pri;
 760};
 761
 762struct i40iw_aeqe_info {
 763        u64 compl_ctx;
 764        u32 qp_cq_id;
 765        u16 ae_id;
 766        u16 wqe_idx;
 767        u8 tcp_state;
 768        u8 iwarp_state;
 769        bool qp;
 770        bool cq;
 771        bool sq;
 772        bool in_rdrsp_wr;
 773        bool out_rdrsp;
 774        u8 q2_data_written;
 775        bool aeqe_overflow;
 776};
 777
 778struct i40iw_allocate_stag_info {
 779        u64 total_len;
 780        u32 chunk_size;
 781        u32 stag_idx;
 782        u32 page_size;
 783        u16 pd_id;
 784        u16 access_rights;
 785        bool remote_access;
 786        bool use_hmc_fcn_index;
 787        u8 hmc_fcn_index;
 788        bool use_pf_rid;
 789};
 790
 791struct i40iw_reg_ns_stag_info {
 792        u64 reg_addr_pa;
 793        u64 fbo;
 794        void *va;
 795        u64 total_len;
 796        u32 page_size;
 797        u32 chunk_size;
 798        u32 first_pm_pbl_index;
 799        enum i40iw_addressing_type addr_type;
 800        i40iw_stag_index stag_idx;
 801        u16 access_rights;
 802        u16 pd_id;
 803        i40iw_stag_key stag_key;
 804        bool use_hmc_fcn_index;
 805        u8 hmc_fcn_index;
 806        bool use_pf_rid;
 807};
 808
 809struct i40iw_fast_reg_stag_info {
 810        u64 wr_id;
 811        u64 reg_addr_pa;
 812        u64 fbo;
 813        void *va;
 814        u64 total_len;
 815        u32 page_size;
 816        u32 chunk_size;
 817        u32 first_pm_pbl_index;
 818        enum i40iw_addressing_type addr_type;
 819        i40iw_stag_index stag_idx;
 820        u16 access_rights;
 821        u16 pd_id;
 822        i40iw_stag_key stag_key;
 823        bool local_fence;
 824        bool read_fence;
 825        bool signaled;
 826        bool use_hmc_fcn_index;
 827        u8 hmc_fcn_index;
 828        bool use_pf_rid;
 829        bool defer_flag;
 830};
 831
 832struct i40iw_dealloc_stag_info {
 833        u32 stag_idx;
 834        u16 pd_id;
 835        bool mr;
 836        bool dealloc_pbl;
 837};
 838
 839struct i40iw_register_shared_stag {
 840        void *va;
 841        enum i40iw_addressing_type addr_type;
 842        i40iw_stag_index new_stag_idx;
 843        i40iw_stag_index parent_stag_idx;
 844        u32 access_rights;
 845        u16 pd_id;
 846        i40iw_stag_key new_stag_key;
 847};
 848
 849struct i40iw_qp_init_info {
 850        struct i40iw_qp_uk_init_info qp_uk_init_info;
 851        struct i40iw_sc_pd *pd;
 852        struct i40iw_sc_vsi *vsi;
 853        u64 *host_ctx;
 854        u8 *q2;
 855        u64 sq_pa;
 856        u64 rq_pa;
 857        u64 host_ctx_pa;
 858        u64 q2_pa;
 859        u64 shadow_area_pa;
 860        int abi_ver;
 861        u8 sq_tph_val;
 862        u8 rq_tph_val;
 863        u8 type;
 864        bool sq_tph_en;
 865        bool rq_tph_en;
 866        bool rcv_tph_en;
 867        bool xmit_tph_en;
 868        bool virtual_map;
 869};
 870
 871struct i40iw_cq_init_info {
 872        struct i40iw_sc_dev *dev;
 873        u64 cq_base_pa;
 874        u64 shadow_area_pa;
 875        u32 ceq_id;
 876        u32 shadow_read_threshold;
 877        bool virtual_map;
 878        bool ceqe_mask;
 879        u8 pbl_chunk_size;
 880        u32 first_pm_pbl_idx;
 881        bool ceq_id_valid;
 882        bool tph_en;
 883        u8 tph_val;
 884        u8 type;
 885        struct i40iw_cq_uk_init_info cq_uk_init_info;
 886};
 887
 888struct i40iw_upload_context_info {
 889        u64 buf_pa;
 890        bool freeze_qp;
 891        bool raw_format;
 892        u32 qp_id;
 893        u8 qp_type;
 894};
 895
 896struct i40iw_add_arp_cache_entry_info {
 897        u8 mac_addr[6];
 898        u32 reach_max;
 899        u16 arp_index;
 900        bool permanent;
 901};
 902
 903struct i40iw_apbvt_info {
 904        u16 port;
 905        bool add;
 906};
 907
 908enum i40iw_quad_entry_type {
 909        I40IW_QHASH_TYPE_TCP_ESTABLISHED = 1,
 910        I40IW_QHASH_TYPE_TCP_SYN,
 911};
 912
 913enum i40iw_quad_hash_manage_type {
 914        I40IW_QHASH_MANAGE_TYPE_DELETE = 0,
 915        I40IW_QHASH_MANAGE_TYPE_ADD,
 916        I40IW_QHASH_MANAGE_TYPE_MODIFY
 917};
 918
 919struct i40iw_qhash_table_info {
 920        struct i40iw_sc_vsi *vsi;
 921        enum i40iw_quad_hash_manage_type manage;
 922        enum i40iw_quad_entry_type entry_type;
 923        bool vlan_valid;
 924        bool ipv4_valid;
 925        u8 mac_addr[6];
 926        u16 vlan_id;
 927        u8 user_pri;
 928        u32 qp_num;
 929        u32 dest_ip[4];
 930        u32 src_ip[4];
 931        u16 dest_port;
 932        u16 src_port;
 933};
 934
 935struct i40iw_local_mac_ipaddr_entry_info {
 936        u8 mac_addr[6];
 937        u8 entry_idx;
 938};
 939
 940struct i40iw_cqp_manage_push_page_info {
 941        u32 push_idx;
 942        u16 qs_handle;
 943        u8 free_page;
 944};
 945
 946struct i40iw_qp_flush_info {
 947        u16 sq_minor_code;
 948        u16 sq_major_code;
 949        u16 rq_minor_code;
 950        u16 rq_major_code;
 951        u16 ae_code;
 952        u8 ae_source;
 953        bool sq;
 954        bool rq;
 955        bool userflushcode;
 956        bool generate_ae;
 957};
 958
 959struct i40iw_cqp_commit_fpm_values {
 960        u64 qp_base;
 961        u64 cq_base;
 962        u32 hte_base;
 963        u32 arp_base;
 964        u32 apbvt_inuse_base;
 965        u32 mr_base;
 966        u32 xf_base;
 967        u32 xffl_base;
 968        u32 q1_base;
 969        u32 q1fl_base;
 970        u32 fsimc_base;
 971        u32 fsiav_base;
 972        u32 pbl_base;
 973
 974        u32 qp_cnt;
 975        u32 cq_cnt;
 976        u32 hte_cnt;
 977        u32 arp_cnt;
 978        u32 mr_cnt;
 979        u32 xf_cnt;
 980        u32 xffl_cnt;
 981        u32 q1_cnt;
 982        u32 q1fl_cnt;
 983        u32 fsimc_cnt;
 984        u32 fsiav_cnt;
 985        u32 pbl_cnt;
 986};
 987
 988struct i40iw_cqp_query_fpm_values {
 989        u16 first_pe_sd_index;
 990        u32 qp_objsize;
 991        u32 cq_objsize;
 992        u32 hte_objsize;
 993        u32 arp_objsize;
 994        u32 mr_objsize;
 995        u32 xf_objsize;
 996        u32 q1_objsize;
 997        u32 fsimc_objsize;
 998        u32 fsiav_objsize;
 999
1000        u32 qp_max;
1001        u32 cq_max;
1002        u32 hte_max;
1003        u32 arp_max;
1004        u32 mr_max;
1005        u32 xf_max;
1006        u32 xffl_max;
1007        u32 q1_max;
1008        u32 q1fl_max;
1009        u32 fsimc_max;
1010        u32 fsiav_max;
1011        u32 pbl_max;
1012};
1013
1014struct i40iw_gen_ae_info {
1015        u16 ae_code;
1016        u8 ae_source;
1017};
1018
1019struct i40iw_cqp_ops {
1020        enum i40iw_status_code (*cqp_init)(struct i40iw_sc_cqp *,
1021                                           struct i40iw_cqp_init_info *);
1022        enum i40iw_status_code (*cqp_create)(struct i40iw_sc_cqp *, u16 *, u16 *);
1023        void (*cqp_post_sq)(struct i40iw_sc_cqp *);
1024        u64 *(*cqp_get_next_send_wqe)(struct i40iw_sc_cqp *, u64 scratch);
1025        enum i40iw_status_code (*cqp_destroy)(struct i40iw_sc_cqp *);
1026        enum i40iw_status_code (*poll_for_cqp_op_done)(struct i40iw_sc_cqp *, u8,
1027                                                       struct i40iw_ccq_cqe_info *);
1028};
1029
1030struct i40iw_ccq_ops {
1031        enum i40iw_status_code (*ccq_init)(struct i40iw_sc_cq *,
1032                                           struct i40iw_ccq_init_info *);
1033        enum i40iw_status_code (*ccq_create)(struct i40iw_sc_cq *, u64, bool, bool);
1034        enum i40iw_status_code (*ccq_destroy)(struct i40iw_sc_cq *, u64, bool);
1035        enum i40iw_status_code (*ccq_create_done)(struct i40iw_sc_cq *);
1036        enum i40iw_status_code (*ccq_get_cqe_info)(struct i40iw_sc_cq *,
1037                                                   struct i40iw_ccq_cqe_info *);
1038        void (*ccq_arm)(struct i40iw_sc_cq *);
1039};
1040
1041struct i40iw_ceq_ops {
1042        enum i40iw_status_code (*ceq_init)(struct i40iw_sc_ceq *,
1043                                           struct i40iw_ceq_init_info *);
1044        enum i40iw_status_code (*ceq_create)(struct i40iw_sc_ceq *, u64, bool);
1045        enum i40iw_status_code (*cceq_create_done)(struct i40iw_sc_ceq *);
1046        enum i40iw_status_code (*cceq_destroy_done)(struct i40iw_sc_ceq *);
1047        enum i40iw_status_code (*cceq_create)(struct i40iw_sc_ceq *, u64);
1048        enum i40iw_status_code (*ceq_destroy)(struct i40iw_sc_ceq *, u64, bool);
1049        void *(*process_ceq)(struct i40iw_sc_dev *, struct i40iw_sc_ceq *);
1050};
1051
1052struct i40iw_aeq_ops {
1053        enum i40iw_status_code (*aeq_init)(struct i40iw_sc_aeq *,
1054                                           struct i40iw_aeq_init_info *);
1055        enum i40iw_status_code (*aeq_create)(struct i40iw_sc_aeq *, u64, bool);
1056        enum i40iw_status_code (*aeq_destroy)(struct i40iw_sc_aeq *, u64, bool);
1057        enum i40iw_status_code (*get_next_aeqe)(struct i40iw_sc_aeq *,
1058                                                struct i40iw_aeqe_info *);
1059        enum i40iw_status_code (*repost_aeq_entries)(struct i40iw_sc_dev *, u32);
1060        enum i40iw_status_code (*aeq_create_done)(struct i40iw_sc_aeq *);
1061        enum i40iw_status_code (*aeq_destroy_done)(struct i40iw_sc_aeq *);
1062};
1063
1064struct i40iw_pd_ops {
1065        void (*pd_init)(struct i40iw_sc_dev *, struct i40iw_sc_pd *, u16, int);
1066};
1067
1068struct i40iw_priv_qp_ops {
1069        enum i40iw_status_code (*qp_init)(struct i40iw_sc_qp *, struct i40iw_qp_init_info *);
1070        enum i40iw_status_code (*qp_create)(struct i40iw_sc_qp *,
1071                                            struct i40iw_create_qp_info *, u64, bool);
1072        enum i40iw_status_code (*qp_modify)(struct i40iw_sc_qp *,
1073                                            struct i40iw_modify_qp_info *, u64, bool);
1074        enum i40iw_status_code (*qp_destroy)(struct i40iw_sc_qp *, u64, bool, bool, bool);
1075        enum i40iw_status_code (*qp_flush_wqes)(struct i40iw_sc_qp *,
1076                                                struct i40iw_qp_flush_info *, u64, bool);
1077        enum i40iw_status_code (*qp_upload_context)(struct i40iw_sc_dev *,
1078                                                    struct i40iw_upload_context_info *,
1079                                                    u64, bool);
1080        enum i40iw_status_code (*qp_setctx)(struct i40iw_sc_qp *, u64 *,
1081                                            struct i40iw_qp_host_ctx_info *);
1082
1083        void (*qp_send_lsmm)(struct i40iw_sc_qp *, void *, u32, i40iw_stag);
1084        void (*qp_send_lsmm_nostag)(struct i40iw_sc_qp *, void *, u32);
1085        void (*qp_send_rtt)(struct i40iw_sc_qp *, bool);
1086        enum i40iw_status_code (*qp_post_wqe0)(struct i40iw_sc_qp *, u8);
1087        enum i40iw_status_code (*iw_mr_fast_register)(struct i40iw_sc_qp *,
1088                                                      struct i40iw_fast_reg_stag_info *,
1089                                                      bool);
1090};
1091
1092struct i40iw_priv_cq_ops {
1093        enum i40iw_status_code (*cq_init)(struct i40iw_sc_cq *, struct i40iw_cq_init_info *);
1094        enum i40iw_status_code (*cq_create)(struct i40iw_sc_cq *, u64, bool, bool);
1095        enum i40iw_status_code (*cq_destroy)(struct i40iw_sc_cq *, u64, bool);
1096        enum i40iw_status_code (*cq_modify)(struct i40iw_sc_cq *,
1097                                            struct i40iw_modify_cq_info *, u64, bool);
1098};
1099
1100struct i40iw_mr_ops {
1101        enum i40iw_status_code (*alloc_stag)(struct i40iw_sc_dev *,
1102                                             struct i40iw_allocate_stag_info *, u64, bool);
1103        enum i40iw_status_code (*mr_reg_non_shared)(struct i40iw_sc_dev *,
1104                                                    struct i40iw_reg_ns_stag_info *,
1105                                                    u64, bool);
1106        enum i40iw_status_code (*mr_reg_shared)(struct i40iw_sc_dev *,
1107                                                struct i40iw_register_shared_stag *,
1108                                                u64, bool);
1109        enum i40iw_status_code (*dealloc_stag)(struct i40iw_sc_dev *,
1110                                               struct i40iw_dealloc_stag_info *,
1111                                               u64, bool);
1112        enum i40iw_status_code (*query_stag)(struct i40iw_sc_dev *, u64, u32, bool);
1113        enum i40iw_status_code (*mw_alloc)(struct i40iw_sc_dev *, u64, u32, u16, bool);
1114};
1115
1116struct i40iw_cqp_misc_ops {
1117        enum i40iw_status_code (*manage_push_page)(struct i40iw_sc_cqp *,
1118                                                   struct i40iw_cqp_manage_push_page_info *,
1119                                                   u64, bool);
1120        enum i40iw_status_code (*manage_hmc_pm_func_table)(struct i40iw_sc_cqp *,
1121                                                           u64, u8, bool, bool);
1122        enum i40iw_status_code (*set_hmc_resource_profile)(struct i40iw_sc_cqp *,
1123                                                           u64, u8, u8, bool, bool);
1124        enum i40iw_status_code (*commit_fpm_values)(struct i40iw_sc_cqp *, u64, u8,
1125                                                    struct i40iw_dma_mem *, bool, u8);
1126        enum i40iw_status_code (*query_fpm_values)(struct i40iw_sc_cqp *, u64, u8,
1127                                                   struct i40iw_dma_mem *, bool, u8);
1128        enum i40iw_status_code (*static_hmc_pages_allocated)(struct i40iw_sc_cqp *,
1129                                                             u64, u8, bool, bool);
1130        enum i40iw_status_code (*add_arp_cache_entry)(struct i40iw_sc_cqp *,
1131                                                      struct i40iw_add_arp_cache_entry_info *,
1132                                                      u64, bool);
1133        enum i40iw_status_code (*del_arp_cache_entry)(struct i40iw_sc_cqp *, u64, u16, bool);
1134        enum i40iw_status_code (*query_arp_cache_entry)(struct i40iw_sc_cqp *, u64, u16, bool);
1135        enum i40iw_status_code (*manage_apbvt_entry)(struct i40iw_sc_cqp *,
1136                                                     struct i40iw_apbvt_info *, u64, bool);
1137        enum i40iw_status_code (*manage_qhash_table_entry)(struct i40iw_sc_cqp *,
1138                                                           struct i40iw_qhash_table_info *, u64, bool);
1139        enum i40iw_status_code (*alloc_local_mac_ipaddr_table_entry)(struct i40iw_sc_cqp *, u64, bool);
1140        enum i40iw_status_code (*add_local_mac_ipaddr_entry)(struct i40iw_sc_cqp *,
1141                                                             struct i40iw_local_mac_ipaddr_entry_info *,
1142                                                             u64, bool);
1143        enum i40iw_status_code (*del_local_mac_ipaddr_entry)(struct i40iw_sc_cqp *, u64, u8, u8, bool);
1144        enum i40iw_status_code (*cqp_nop)(struct i40iw_sc_cqp *, u64, bool);
1145        enum i40iw_status_code (*commit_fpm_values_done)(struct i40iw_sc_cqp
1146                                                          *);
1147        enum i40iw_status_code (*query_fpm_values_done)(struct i40iw_sc_cqp *);
1148        enum i40iw_status_code (*manage_hmc_pm_func_table_done)(struct i40iw_sc_cqp *);
1149        enum i40iw_status_code (*update_suspend_qp)(struct i40iw_sc_cqp *, struct i40iw_sc_qp *, u64);
1150        enum i40iw_status_code (*update_resume_qp)(struct i40iw_sc_cqp *, struct i40iw_sc_qp *, u64);
1151};
1152
1153struct i40iw_hmc_ops {
1154        enum i40iw_status_code (*init_iw_hmc)(struct i40iw_sc_dev *, u8);
1155        enum i40iw_status_code (*parse_fpm_query_buf)(u64 *, struct i40iw_hmc_info *,
1156                                                      struct i40iw_hmc_fpm_misc *);
1157        enum i40iw_status_code (*configure_iw_fpm)(struct i40iw_sc_dev *, u8);
1158        enum i40iw_status_code (*parse_fpm_commit_buf)(u64 *, struct i40iw_hmc_obj_info *, u32 *sd);
1159        enum i40iw_status_code (*create_hmc_object)(struct i40iw_sc_dev *dev,
1160                                                    struct i40iw_hmc_create_obj_info *);
1161        enum i40iw_status_code (*del_hmc_object)(struct i40iw_sc_dev *dev,
1162                                                 struct i40iw_hmc_del_obj_info *,
1163                                                 bool reset);
1164        enum i40iw_status_code (*pf_init_vfhmc)(struct i40iw_sc_dev *, u8, u32 *);
1165        enum i40iw_status_code (*vf_configure_vffpm)(struct i40iw_sc_dev *, u32 *);
1166};
1167
1168struct cqp_info {
1169        union {
1170                struct {
1171                        struct i40iw_sc_qp *qp;
1172                        struct i40iw_create_qp_info info;
1173                        u64 scratch;
1174                } qp_create;
1175
1176                struct {
1177                        struct i40iw_sc_qp *qp;
1178                        struct i40iw_modify_qp_info info;
1179                        u64 scratch;
1180                } qp_modify;
1181
1182                struct {
1183                        struct i40iw_sc_qp *qp;
1184                        u64 scratch;
1185                        bool remove_hash_idx;
1186                        bool ignore_mw_bnd;
1187                } qp_destroy;
1188
1189                struct {
1190                        struct i40iw_sc_cq *cq;
1191                        u64 scratch;
1192                        bool check_overflow;
1193                } cq_create;
1194
1195                struct {
1196                        struct i40iw_sc_cq *cq;
1197                        u64 scratch;
1198                } cq_destroy;
1199
1200                struct {
1201                        struct i40iw_sc_dev *dev;
1202                        struct i40iw_allocate_stag_info info;
1203                        u64 scratch;
1204                } alloc_stag;
1205
1206                struct {
1207                        struct i40iw_sc_dev *dev;
1208                        u64 scratch;
1209                        u32 mw_stag_index;
1210                        u16 pd_id;
1211                } mw_alloc;
1212
1213                struct {
1214                        struct i40iw_sc_dev *dev;
1215                        struct i40iw_reg_ns_stag_info info;
1216                        u64 scratch;
1217                } mr_reg_non_shared;
1218
1219                struct {
1220                        struct i40iw_sc_dev *dev;
1221                        struct i40iw_dealloc_stag_info info;
1222                        u64 scratch;
1223                } dealloc_stag;
1224
1225                struct {
1226                        struct i40iw_sc_cqp *cqp;
1227                        struct i40iw_local_mac_ipaddr_entry_info info;
1228                        u64 scratch;
1229                } add_local_mac_ipaddr_entry;
1230
1231                struct {
1232                        struct i40iw_sc_cqp *cqp;
1233                        struct i40iw_add_arp_cache_entry_info info;
1234                        u64 scratch;
1235                } add_arp_cache_entry;
1236
1237                struct {
1238                        struct i40iw_sc_cqp *cqp;
1239                        u64 scratch;
1240                        u8 entry_idx;
1241                        u8 ignore_ref_count;
1242                } del_local_mac_ipaddr_entry;
1243
1244                struct {
1245                        struct i40iw_sc_cqp *cqp;
1246                        u64 scratch;
1247                        u16 arp_index;
1248                } del_arp_cache_entry;
1249
1250                struct {
1251                        struct i40iw_sc_cqp *cqp;
1252                        struct i40iw_manage_vf_pble_info info;
1253                        u64 scratch;
1254                } manage_vf_pble_bp;
1255
1256                struct {
1257                        struct i40iw_sc_cqp *cqp;
1258                        struct i40iw_cqp_manage_push_page_info info;
1259                        u64 scratch;
1260                } manage_push_page;
1261
1262                struct {
1263                        struct i40iw_sc_dev *dev;
1264                        struct i40iw_upload_context_info info;
1265                        u64 scratch;
1266                } qp_upload_context;
1267
1268                struct {
1269                        struct i40iw_sc_cqp *cqp;
1270                        u64 scratch;
1271                } alloc_local_mac_ipaddr_entry;
1272
1273                struct {
1274                        struct i40iw_sc_dev *dev;
1275                        struct i40iw_hmc_fcn_info info;
1276                        u64 scratch;
1277                } manage_hmc_pm;
1278
1279                struct {
1280                        struct i40iw_sc_ceq *ceq;
1281                        u64 scratch;
1282                } ceq_create;
1283
1284                struct {
1285                        struct i40iw_sc_ceq *ceq;
1286                        u64 scratch;
1287                } ceq_destroy;
1288
1289                struct {
1290                        struct i40iw_sc_aeq *aeq;
1291                        u64 scratch;
1292                } aeq_create;
1293
1294                struct {
1295                        struct i40iw_sc_aeq *aeq;
1296                        u64 scratch;
1297                } aeq_destroy;
1298
1299                struct {
1300                        struct i40iw_sc_qp *qp;
1301                        struct i40iw_qp_flush_info info;
1302                        u64 scratch;
1303                } qp_flush_wqes;
1304
1305                struct {
1306                        struct i40iw_sc_qp *qp;
1307                        struct i40iw_gen_ae_info info;
1308                        u64 scratch;
1309                } gen_ae;
1310
1311                struct {
1312                        struct i40iw_sc_cqp *cqp;
1313                        void *fpm_values_va;
1314                        u64 fpm_values_pa;
1315                        u8 hmc_fn_id;
1316                        u64 scratch;
1317                } query_fpm_values;
1318
1319                struct {
1320                        struct i40iw_sc_cqp *cqp;
1321                        void *fpm_values_va;
1322                        u64 fpm_values_pa;
1323                        u8 hmc_fn_id;
1324                        u64 scratch;
1325                } commit_fpm_values;
1326
1327                struct {
1328                        struct i40iw_sc_cqp *cqp;
1329                        struct i40iw_apbvt_info info;
1330                        u64 scratch;
1331                } manage_apbvt_entry;
1332
1333                struct {
1334                        struct i40iw_sc_cqp *cqp;
1335                        struct i40iw_qhash_table_info info;
1336                        u64 scratch;
1337                } manage_qhash_table_entry;
1338
1339                struct {
1340                        struct i40iw_sc_dev *dev;
1341                        struct i40iw_update_sds_info info;
1342                        u64 scratch;
1343                } update_pe_sds;
1344
1345                struct {
1346                        struct i40iw_sc_cqp *cqp;
1347                        struct i40iw_sc_qp *qp;
1348                        u64 scratch;
1349                } suspend_resume;
1350                struct {
1351                        struct i40iw_sc_cqp *cqp;
1352                        void *cap_va;
1353                        u64 cap_pa;
1354                        u64 scratch;
1355                } query_rdma_features;
1356        } u;
1357};
1358
1359struct cqp_commands_info {
1360        struct list_head cqp_cmd_entry;
1361        u8 cqp_cmd;
1362        u8 post_sq;
1363        struct cqp_info in;
1364};
1365
1366struct i40iw_virtchnl_work_info {
1367        void (*callback_fcn)(void *vf_dev);
1368        void *worker_vf_dev;
1369};
1370
1371struct i40iw_cqp_timeout {
1372        u64 compl_cqp_cmds;
1373        u8 count;
1374};
1375
1376#endif
1377