linux/drivers/infiniband/hw/efa/efa_admin_cmds_defs.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
   2/*
   3 * Copyright 2018-2020 Amazon.com, Inc. or its affiliates. All rights reserved.
   4 */
   5
   6#ifndef _EFA_ADMIN_CMDS_H_
   7#define _EFA_ADMIN_CMDS_H_
   8
   9#define EFA_ADMIN_API_VERSION_MAJOR          0
  10#define EFA_ADMIN_API_VERSION_MINOR          1
  11
  12/* EFA admin queue opcodes */
  13enum efa_admin_aq_opcode {
  14        EFA_ADMIN_CREATE_QP                         = 1,
  15        EFA_ADMIN_MODIFY_QP                         = 2,
  16        EFA_ADMIN_QUERY_QP                          = 3,
  17        EFA_ADMIN_DESTROY_QP                        = 4,
  18        EFA_ADMIN_CREATE_AH                         = 5,
  19        EFA_ADMIN_DESTROY_AH                        = 6,
  20        EFA_ADMIN_REG_MR                            = 7,
  21        EFA_ADMIN_DEREG_MR                          = 8,
  22        EFA_ADMIN_CREATE_CQ                         = 9,
  23        EFA_ADMIN_DESTROY_CQ                        = 10,
  24        EFA_ADMIN_GET_FEATURE                       = 11,
  25        EFA_ADMIN_SET_FEATURE                       = 12,
  26        EFA_ADMIN_GET_STATS                         = 13,
  27        EFA_ADMIN_ALLOC_PD                          = 14,
  28        EFA_ADMIN_DEALLOC_PD                        = 15,
  29        EFA_ADMIN_ALLOC_UAR                         = 16,
  30        EFA_ADMIN_DEALLOC_UAR                       = 17,
  31        EFA_ADMIN_MAX_OPCODE                        = 17,
  32};
  33
  34enum efa_admin_aq_feature_id {
  35        EFA_ADMIN_DEVICE_ATTR                       = 1,
  36        EFA_ADMIN_AENQ_CONFIG                       = 2,
  37        EFA_ADMIN_NETWORK_ATTR                      = 3,
  38        EFA_ADMIN_QUEUE_ATTR                        = 4,
  39        EFA_ADMIN_HW_HINTS                          = 5,
  40        EFA_ADMIN_HOST_INFO                         = 6,
  41};
  42
  43/* QP transport type */
  44enum efa_admin_qp_type {
  45        /* Unreliable Datagram */
  46        EFA_ADMIN_QP_TYPE_UD                        = 1,
  47        /* Scalable Reliable Datagram */
  48        EFA_ADMIN_QP_TYPE_SRD                       = 2,
  49};
  50
  51/* QP state */
  52enum efa_admin_qp_state {
  53        EFA_ADMIN_QP_STATE_RESET                    = 0,
  54        EFA_ADMIN_QP_STATE_INIT                     = 1,
  55        EFA_ADMIN_QP_STATE_RTR                      = 2,
  56        EFA_ADMIN_QP_STATE_RTS                      = 3,
  57        EFA_ADMIN_QP_STATE_SQD                      = 4,
  58        EFA_ADMIN_QP_STATE_SQE                      = 5,
  59        EFA_ADMIN_QP_STATE_ERR                      = 6,
  60};
  61
  62enum efa_admin_get_stats_type {
  63        EFA_ADMIN_GET_STATS_TYPE_BASIC              = 0,
  64        EFA_ADMIN_GET_STATS_TYPE_MESSAGES           = 1,
  65        EFA_ADMIN_GET_STATS_TYPE_RDMA_READ          = 2,
  66};
  67
  68enum efa_admin_get_stats_scope {
  69        EFA_ADMIN_GET_STATS_SCOPE_ALL               = 0,
  70        EFA_ADMIN_GET_STATS_SCOPE_QUEUE             = 1,
  71};
  72
  73/*
  74 * QP allocation sizes, converted by fabric QueuePair (QP) create command
  75 * from QP capabilities.
  76 */
  77struct efa_admin_qp_alloc_size {
  78        /* Send descriptor ring size in bytes */
  79        u32 send_queue_ring_size;
  80
  81        /* Max number of WQEs that can be outstanding on send queue. */
  82        u32 send_queue_depth;
  83
  84        /*
  85         * Recv descriptor ring size in bytes, sufficient for user-provided
  86         * number of WQEs
  87         */
  88        u32 recv_queue_ring_size;
  89
  90        /* Max number of WQEs that can be outstanding on recv queue */
  91        u32 recv_queue_depth;
  92};
  93
  94struct efa_admin_create_qp_cmd {
  95        /* Common Admin Queue descriptor */
  96        struct efa_admin_aq_common_desc aq_common_desc;
  97
  98        /* Protection Domain associated with this QP */
  99        u16 pd;
 100
 101        /* QP type */
 102        u8 qp_type;
 103
 104        /*
 105         * 0 : sq_virt - If set, SQ ring base address is
 106         *    virtual (IOVA returned by MR registration)
 107         * 1 : rq_virt - If set, RQ ring base address is
 108         *    virtual (IOVA returned by MR registration)
 109         * 7:2 : reserved - MBZ
 110         */
 111        u8 flags;
 112
 113        /*
 114         * Send queue (SQ) ring base physical address. This field is not
 115         * used if this is a Low Latency Queue(LLQ).
 116         */
 117        u64 sq_base_addr;
 118
 119        /* Receive queue (RQ) ring base address. */
 120        u64 rq_base_addr;
 121
 122        /* Index of CQ to be associated with Send Queue completions */
 123        u32 send_cq_idx;
 124
 125        /* Index of CQ to be associated with Recv Queue completions */
 126        u32 recv_cq_idx;
 127
 128        /*
 129         * Memory registration key for the SQ ring, used only when not in
 130         * LLQ mode and base address is virtual
 131         */
 132        u32 sq_l_key;
 133
 134        /*
 135         * Memory registration key for the RQ ring, used only when base
 136         * address is virtual
 137         */
 138        u32 rq_l_key;
 139
 140        /* Requested QP allocation sizes */
 141        struct efa_admin_qp_alloc_size qp_alloc_size;
 142
 143        /* UAR number */
 144        u16 uar;
 145
 146        /* MBZ */
 147        u16 reserved;
 148
 149        /* MBZ */
 150        u32 reserved2;
 151};
 152
 153struct efa_admin_create_qp_resp {
 154        /* Common Admin Queue completion descriptor */
 155        struct efa_admin_acq_common_desc acq_common_desc;
 156
 157        /*
 158         * Opaque handle to be used for consequent admin operations on the
 159         * QP
 160         */
 161        u32 qp_handle;
 162
 163        /*
 164         * QP number in the given EFA virtual device. Least-significant bits
 165         *    (as needed according to max_qp) carry unique QP ID
 166         */
 167        u16 qp_num;
 168
 169        /* MBZ */
 170        u16 reserved;
 171
 172        /* Index of sub-CQ for Send Queue completions */
 173        u16 send_sub_cq_idx;
 174
 175        /* Index of sub-CQ for Receive Queue completions */
 176        u16 recv_sub_cq_idx;
 177
 178        /* SQ doorbell address, as offset to PCIe DB BAR */
 179        u32 sq_db_offset;
 180
 181        /* RQ doorbell address, as offset to PCIe DB BAR */
 182        u32 rq_db_offset;
 183
 184        /*
 185         * low latency send queue ring base address as an offset to PCIe
 186         * MMIO LLQ_MEM BAR
 187         */
 188        u32 llq_descriptors_offset;
 189};
 190
 191struct efa_admin_modify_qp_cmd {
 192        /* Common Admin Queue descriptor */
 193        struct efa_admin_aq_common_desc aq_common_desc;
 194
 195        /*
 196         * Mask indicating which fields should be updated
 197         * 0 : qp_state
 198         * 1 : cur_qp_state
 199         * 2 : qkey
 200         * 3 : sq_psn
 201         * 4 : sq_drained_async_notify
 202         * 5 : rnr_retry
 203         * 31:6 : reserved
 204         */
 205        u32 modify_mask;
 206
 207        /* QP handle returned by create_qp command */
 208        u32 qp_handle;
 209
 210        /* QP state */
 211        u32 qp_state;
 212
 213        /* Override current QP state (before applying the transition) */
 214        u32 cur_qp_state;
 215
 216        /* QKey */
 217        u32 qkey;
 218
 219        /* SQ PSN */
 220        u32 sq_psn;
 221
 222        /* Enable async notification when SQ is drained */
 223        u8 sq_drained_async_notify;
 224
 225        /* Number of RNR retries (valid only for SRD QPs) */
 226        u8 rnr_retry;
 227
 228        /* MBZ */
 229        u16 reserved2;
 230};
 231
 232struct efa_admin_modify_qp_resp {
 233        /* Common Admin Queue completion descriptor */
 234        struct efa_admin_acq_common_desc acq_common_desc;
 235};
 236
 237struct efa_admin_query_qp_cmd {
 238        /* Common Admin Queue descriptor */
 239        struct efa_admin_aq_common_desc aq_common_desc;
 240
 241        /* QP handle returned by create_qp command */
 242        u32 qp_handle;
 243};
 244
 245struct efa_admin_query_qp_resp {
 246        /* Common Admin Queue completion descriptor */
 247        struct efa_admin_acq_common_desc acq_common_desc;
 248
 249        /* QP state */
 250        u32 qp_state;
 251
 252        /* QKey */
 253        u32 qkey;
 254
 255        /* SQ PSN */
 256        u32 sq_psn;
 257
 258        /* Indicates that draining is in progress */
 259        u8 sq_draining;
 260
 261        /* Number of RNR retries (valid only for SRD QPs) */
 262        u8 rnr_retry;
 263
 264        /* MBZ */
 265        u16 reserved2;
 266};
 267
 268struct efa_admin_destroy_qp_cmd {
 269        /* Common Admin Queue descriptor */
 270        struct efa_admin_aq_common_desc aq_common_desc;
 271
 272        /* QP handle returned by create_qp command */
 273        u32 qp_handle;
 274};
 275
 276struct efa_admin_destroy_qp_resp {
 277        /* Common Admin Queue completion descriptor */
 278        struct efa_admin_acq_common_desc acq_common_desc;
 279};
 280
 281/*
 282 * Create Address Handle command parameters. Must not be called more than
 283 * once for the same destination
 284 */
 285struct efa_admin_create_ah_cmd {
 286        /* Common Admin Queue descriptor */
 287        struct efa_admin_aq_common_desc aq_common_desc;
 288
 289        /* Destination address in network byte order */
 290        u8 dest_addr[16];
 291
 292        /* PD number */
 293        u16 pd;
 294
 295        /* MBZ */
 296        u16 reserved;
 297};
 298
 299struct efa_admin_create_ah_resp {
 300        /* Common Admin Queue completion descriptor */
 301        struct efa_admin_acq_common_desc acq_common_desc;
 302
 303        /* Target interface address handle (opaque) */
 304        u16 ah;
 305
 306        /* MBZ */
 307        u16 reserved;
 308};
 309
 310struct efa_admin_destroy_ah_cmd {
 311        /* Common Admin Queue descriptor */
 312        struct efa_admin_aq_common_desc aq_common_desc;
 313
 314        /* Target interface address handle (opaque) */
 315        u16 ah;
 316
 317        /* PD number */
 318        u16 pd;
 319};
 320
 321struct efa_admin_destroy_ah_resp {
 322        /* Common Admin Queue completion descriptor */
 323        struct efa_admin_acq_common_desc acq_common_desc;
 324};
 325
 326/*
 327 * Registration of MemoryRegion, required for QP working with Virtual
 328 * Addresses. In standard verbs semantics, region length is limited to 2GB
 329 * space, but EFA offers larger MR support for large memory space, to ease
 330 * on users working with very large datasets (i.e. full GPU memory mapping).
 331 */
 332struct efa_admin_reg_mr_cmd {
 333        /* Common Admin Queue descriptor */
 334        struct efa_admin_aq_common_desc aq_common_desc;
 335
 336        /* Protection Domain */
 337        u16 pd;
 338
 339        /* MBZ */
 340        u16 reserved16_w1;
 341
 342        /* Physical Buffer List, each element is page-aligned. */
 343        union {
 344                /*
 345                 * Inline array of guest-physical page addresses of user
 346                 * memory pages (optimization for short region
 347                 * registrations)
 348                 */
 349                u64 inline_pbl_array[4];
 350
 351                /* points to PBL (direct or indirect, chained if needed) */
 352                struct efa_admin_ctrl_buff_info pbl;
 353        } pbl;
 354
 355        /* Memory region length, in bytes. */
 356        u64 mr_length;
 357
 358        /*
 359         * flags and page size
 360         * 4:0 : phys_page_size_shift - page size is (1 <<
 361         *    phys_page_size_shift). Page size is used for
 362         *    building the Virtual to Physical address mapping
 363         * 6:5 : reserved - MBZ
 364         * 7 : mem_addr_phy_mode_en - Enable bit for physical
 365         *    memory registration (no translation), can be used
 366         *    only by privileged clients. If set, PBL must
 367         *    contain a single entry.
 368         */
 369        u8 flags;
 370
 371        /*
 372         * permissions
 373         * 0 : local_write_enable - Local write permissions:
 374         *    must be set for RQ buffers and buffers posted for
 375         *    RDMA Read requests
 376         * 1 : reserved1 - MBZ
 377         * 2 : remote_read_enable - Remote read permissions:
 378         *    must be set to enable RDMA read from the region
 379         * 7:3 : reserved2 - MBZ
 380         */
 381        u8 permissions;
 382
 383        /* MBZ */
 384        u16 reserved16_w5;
 385
 386        /* number of pages in PBL (redundant, could be calculated) */
 387        u32 page_num;
 388
 389        /*
 390         * IO Virtual Address associated with this MR. If
 391         * mem_addr_phy_mode_en is set, contains the physical address of
 392         * the region.
 393         */
 394        u64 iova;
 395};
 396
 397struct efa_admin_reg_mr_resp {
 398        /* Common Admin Queue completion descriptor */
 399        struct efa_admin_acq_common_desc acq_common_desc;
 400
 401        /*
 402         * L_Key, to be used in conjunction with local buffer references in
 403         * SQ and RQ WQE, or with virtual RQ/CQ rings
 404         */
 405        u32 l_key;
 406
 407        /*
 408         * R_Key, to be used in RDMA messages to refer to remotely accessed
 409         * memory region
 410         */
 411        u32 r_key;
 412};
 413
 414struct efa_admin_dereg_mr_cmd {
 415        /* Common Admin Queue descriptor */
 416        struct efa_admin_aq_common_desc aq_common_desc;
 417
 418        /* L_Key, memory region's l_key */
 419        u32 l_key;
 420};
 421
 422struct efa_admin_dereg_mr_resp {
 423        /* Common Admin Queue completion descriptor */
 424        struct efa_admin_acq_common_desc acq_common_desc;
 425};
 426
 427struct efa_admin_create_cq_cmd {
 428        struct efa_admin_aq_common_desc aq_common_desc;
 429
 430        /*
 431         * 4:0 : reserved5 - MBZ
 432         * 5 : interrupt_mode_enabled - if set, cq operates
 433         *    in interrupt mode (i.e. CQ events and MSI-X are
 434         *    generated), otherwise - polling
 435         * 6 : virt - If set, ring base address is virtual
 436         *    (IOVA returned by MR registration)
 437         * 7 : reserved6 - MBZ
 438         */
 439        u8 cq_caps_1;
 440
 441        /*
 442         * 4:0 : cq_entry_size_words - size of CQ entry in
 443         *    32-bit words, valid values: 4, 8.
 444         * 7:5 : reserved7 - MBZ
 445         */
 446        u8 cq_caps_2;
 447
 448        /* completion queue depth in # of entries. must be power of 2 */
 449        u16 cq_depth;
 450
 451        /* msix vector assigned to this cq */
 452        u32 msix_vector_idx;
 453
 454        /*
 455         * CQ ring base address, virtual or physical depending on 'virt'
 456         * flag
 457         */
 458        struct efa_common_mem_addr cq_ba;
 459
 460        /*
 461         * Memory registration key for the ring, used only when base
 462         * address is virtual
 463         */
 464        u32 l_key;
 465
 466        /*
 467         * number of sub cqs - must be equal to sub_cqs_per_cq of queue
 468         *    attributes.
 469         */
 470        u16 num_sub_cqs;
 471
 472        /* UAR number */
 473        u16 uar;
 474};
 475
 476struct efa_admin_create_cq_resp {
 477        struct efa_admin_acq_common_desc acq_common_desc;
 478
 479        u16 cq_idx;
 480
 481        /* actual cq depth in number of entries */
 482        u16 cq_actual_depth;
 483};
 484
 485struct efa_admin_destroy_cq_cmd {
 486        struct efa_admin_aq_common_desc aq_common_desc;
 487
 488        u16 cq_idx;
 489
 490        /* MBZ */
 491        u16 reserved1;
 492};
 493
 494struct efa_admin_destroy_cq_resp {
 495        struct efa_admin_acq_common_desc acq_common_desc;
 496};
 497
 498/*
 499 * EFA AQ Get Statistics command. Extended statistics are placed in control
 500 * buffer pointed by AQ entry
 501 */
 502struct efa_admin_aq_get_stats_cmd {
 503        struct efa_admin_aq_common_desc aq_common_descriptor;
 504
 505        union {
 506                /* command specific inline data */
 507                u32 inline_data_w1[3];
 508
 509                struct efa_admin_ctrl_buff_info control_buffer;
 510        } u;
 511
 512        /* stats type as defined in enum efa_admin_get_stats_type */
 513        u8 type;
 514
 515        /* stats scope defined in enum efa_admin_get_stats_scope */
 516        u8 scope;
 517
 518        u16 scope_modifier;
 519};
 520
 521struct efa_admin_basic_stats {
 522        u64 tx_bytes;
 523
 524        u64 tx_pkts;
 525
 526        u64 rx_bytes;
 527
 528        u64 rx_pkts;
 529
 530        u64 rx_drops;
 531};
 532
 533struct efa_admin_messages_stats {
 534        u64 send_bytes;
 535
 536        u64 send_wrs;
 537
 538        u64 recv_bytes;
 539
 540        u64 recv_wrs;
 541};
 542
 543struct efa_admin_rdma_read_stats {
 544        u64 read_wrs;
 545
 546        u64 read_bytes;
 547
 548        u64 read_wr_err;
 549
 550        u64 read_resp_bytes;
 551};
 552
 553struct efa_admin_acq_get_stats_resp {
 554        struct efa_admin_acq_common_desc acq_common_desc;
 555
 556        union {
 557                struct efa_admin_basic_stats basic_stats;
 558
 559                struct efa_admin_messages_stats messages_stats;
 560
 561                struct efa_admin_rdma_read_stats rdma_read_stats;
 562        } u;
 563};
 564
 565struct efa_admin_get_set_feature_common_desc {
 566        /*
 567         * 1:0 : select - 0x1 - current value; 0x3 - default
 568         *    value
 569         * 7:3 : reserved3 - MBZ
 570         */
 571        u8 flags;
 572
 573        /* as appears in efa_admin_aq_feature_id */
 574        u8 feature_id;
 575
 576        /* MBZ */
 577        u16 reserved16;
 578};
 579
 580struct efa_admin_feature_device_attr_desc {
 581        /* Bitmap of efa_admin_aq_feature_id */
 582        u64 supported_features;
 583
 584        /* Bitmap of supported page sizes in MR registrations */
 585        u64 page_size_cap;
 586
 587        u32 fw_version;
 588
 589        u32 admin_api_version;
 590
 591        u32 device_version;
 592
 593        /* Bar used for SQ and RQ doorbells */
 594        u16 db_bar;
 595
 596        /* Indicates how many bits are used on physical address access */
 597        u8 phys_addr_width;
 598
 599        /* Indicates how many bits are used on virtual address access */
 600        u8 virt_addr_width;
 601
 602        /*
 603         * 0 : rdma_read - If set, RDMA Read is supported on
 604         *    TX queues
 605         * 1 : rnr_retry - If set, RNR retry is supported on
 606         *    modify QP command
 607         * 31:2 : reserved - MBZ
 608         */
 609        u32 device_caps;
 610
 611        /* Max RDMA transfer size in bytes */
 612        u32 max_rdma_size;
 613};
 614
 615struct efa_admin_feature_queue_attr_desc {
 616        /* The maximum number of queue pairs supported */
 617        u32 max_qp;
 618
 619        /* Maximum number of WQEs per Send Queue */
 620        u32 max_sq_depth;
 621
 622        /* Maximum size of data that can be sent inline in a Send WQE */
 623        u32 inline_buf_size;
 624
 625        /* Maximum number of buffer descriptors per Recv Queue */
 626        u32 max_rq_depth;
 627
 628        /* The maximum number of completion queues supported per VF */
 629        u32 max_cq;
 630
 631        /* Maximum number of CQEs per Completion Queue */
 632        u32 max_cq_depth;
 633
 634        /* Number of sub-CQs to be created for each CQ */
 635        u16 sub_cqs_per_cq;
 636
 637        /* Minimum number of WQEs per SQ */
 638        u16 min_sq_depth;
 639
 640        /* Maximum number of SGEs (buffers) allowed for a single send WQE */
 641        u16 max_wr_send_sges;
 642
 643        /* Maximum number of SGEs allowed for a single recv WQE */
 644        u16 max_wr_recv_sges;
 645
 646        /* The maximum number of memory regions supported */
 647        u32 max_mr;
 648
 649        /* The maximum number of pages can be registered */
 650        u32 max_mr_pages;
 651
 652        /* The maximum number of protection domains supported */
 653        u32 max_pd;
 654
 655        /* The maximum number of address handles supported */
 656        u32 max_ah;
 657
 658        /* The maximum size of LLQ in bytes */
 659        u32 max_llq_size;
 660
 661        /* Maximum number of SGEs for a single RDMA read WQE */
 662        u16 max_wr_rdma_sges;
 663
 664        /*
 665         * Maximum number of bytes that can be written to SQ between two
 666         * consecutive doorbells (in units of 64B). Driver must ensure that only
 667         * complete WQEs are written to queue before issuing a doorbell.
 668         * Examples: max_tx_batch=16 and WQE size = 64B, means up to 16 WQEs can
 669         * be written to SQ between two consecutive doorbells. max_tx_batch=11
 670         * and WQE size = 128B, means up to 5 WQEs can be written to SQ between
 671         * two consecutive doorbells. Zero means unlimited.
 672         */
 673        u16 max_tx_batch;
 674};
 675
 676struct efa_admin_feature_aenq_desc {
 677        /* bitmask for AENQ groups the device can report */
 678        u32 supported_groups;
 679
 680        /* bitmask for AENQ groups to report */
 681        u32 enabled_groups;
 682};
 683
 684struct efa_admin_feature_network_attr_desc {
 685        /* Raw address data in network byte order */
 686        u8 addr[16];
 687
 688        /* max packet payload size in bytes */
 689        u32 mtu;
 690};
 691
 692/*
 693 * When hint value is 0, hints capabilities are not supported or driver
 694 * should use its own predefined value
 695 */
 696struct efa_admin_hw_hints {
 697        /* value in ms */
 698        u16 mmio_read_timeout;
 699
 700        /* value in ms */
 701        u16 driver_watchdog_timeout;
 702
 703        /* value in ms */
 704        u16 admin_completion_timeout;
 705
 706        /* poll interval in ms */
 707        u16 poll_interval;
 708};
 709
 710struct efa_admin_get_feature_cmd {
 711        struct efa_admin_aq_common_desc aq_common_descriptor;
 712
 713        struct efa_admin_ctrl_buff_info control_buffer;
 714
 715        struct efa_admin_get_set_feature_common_desc feature_common;
 716
 717        u32 raw[11];
 718};
 719
 720struct efa_admin_get_feature_resp {
 721        struct efa_admin_acq_common_desc acq_common_desc;
 722
 723        union {
 724                u32 raw[14];
 725
 726                struct efa_admin_feature_device_attr_desc device_attr;
 727
 728                struct efa_admin_feature_aenq_desc aenq;
 729
 730                struct efa_admin_feature_network_attr_desc network_attr;
 731
 732                struct efa_admin_feature_queue_attr_desc queue_attr;
 733
 734                struct efa_admin_hw_hints hw_hints;
 735        } u;
 736};
 737
 738struct efa_admin_set_feature_cmd {
 739        struct efa_admin_aq_common_desc aq_common_descriptor;
 740
 741        struct efa_admin_ctrl_buff_info control_buffer;
 742
 743        struct efa_admin_get_set_feature_common_desc feature_common;
 744
 745        union {
 746                u32 raw[11];
 747
 748                /* AENQ configuration */
 749                struct efa_admin_feature_aenq_desc aenq;
 750        } u;
 751};
 752
 753struct efa_admin_set_feature_resp {
 754        struct efa_admin_acq_common_desc acq_common_desc;
 755
 756        union {
 757                u32 raw[14];
 758        } u;
 759};
 760
 761struct efa_admin_alloc_pd_cmd {
 762        struct efa_admin_aq_common_desc aq_common_descriptor;
 763};
 764
 765struct efa_admin_alloc_pd_resp {
 766        struct efa_admin_acq_common_desc acq_common_desc;
 767
 768        /* PD number */
 769        u16 pd;
 770
 771        /* MBZ */
 772        u16 reserved;
 773};
 774
 775struct efa_admin_dealloc_pd_cmd {
 776        struct efa_admin_aq_common_desc aq_common_descriptor;
 777
 778        /* PD number */
 779        u16 pd;
 780
 781        /* MBZ */
 782        u16 reserved;
 783};
 784
 785struct efa_admin_dealloc_pd_resp {
 786        struct efa_admin_acq_common_desc acq_common_desc;
 787};
 788
 789struct efa_admin_alloc_uar_cmd {
 790        struct efa_admin_aq_common_desc aq_common_descriptor;
 791};
 792
 793struct efa_admin_alloc_uar_resp {
 794        struct efa_admin_acq_common_desc acq_common_desc;
 795
 796        /* UAR number */
 797        u16 uar;
 798
 799        /* MBZ */
 800        u16 reserved;
 801};
 802
 803struct efa_admin_dealloc_uar_cmd {
 804        struct efa_admin_aq_common_desc aq_common_descriptor;
 805
 806        /* UAR number */
 807        u16 uar;
 808
 809        /* MBZ */
 810        u16 reserved;
 811};
 812
 813struct efa_admin_dealloc_uar_resp {
 814        struct efa_admin_acq_common_desc acq_common_desc;
 815};
 816
 817/* asynchronous event notification groups */
 818enum efa_admin_aenq_group {
 819        EFA_ADMIN_FATAL_ERROR                       = 1,
 820        EFA_ADMIN_WARNING                           = 2,
 821        EFA_ADMIN_NOTIFICATION                      = 3,
 822        EFA_ADMIN_KEEP_ALIVE                        = 4,
 823        EFA_ADMIN_AENQ_GROUPS_NUM                   = 5,
 824};
 825
 826enum efa_admin_aenq_notification_syndrom {
 827        EFA_ADMIN_SUSPEND                           = 0,
 828        EFA_ADMIN_RESUME                            = 1,
 829        EFA_ADMIN_UPDATE_HINTS                      = 2,
 830};
 831
 832struct efa_admin_mmio_req_read_less_resp {
 833        u16 req_id;
 834
 835        u16 reg_off;
 836
 837        /* value is valid when poll is cleared */
 838        u32 reg_val;
 839};
 840
 841enum efa_admin_os_type {
 842        EFA_ADMIN_OS_LINUX                          = 0,
 843};
 844
 845struct efa_admin_host_info {
 846        /* OS distribution string format */
 847        u8 os_dist_str[128];
 848
 849        /* Defined in enum efa_admin_os_type */
 850        u32 os_type;
 851
 852        /* Kernel version string format */
 853        u8 kernel_ver_str[32];
 854
 855        /* Kernel version numeric format */
 856        u32 kernel_ver;
 857
 858        /*
 859         * 7:0 : driver_module_type
 860         * 15:8 : driver_sub_minor
 861         * 23:16 : driver_minor
 862         * 31:24 : driver_major
 863         */
 864        u32 driver_ver;
 865
 866        /*
 867         * Device's Bus, Device and Function
 868         * 2:0 : function
 869         * 7:3 : device
 870         * 15:8 : bus
 871         */
 872        u16 bdf;
 873
 874        /*
 875         * Spec version
 876         * 7:0 : spec_minor
 877         * 15:8 : spec_major
 878         */
 879        u16 spec_ver;
 880
 881        /*
 882         * 0 : intree - Intree driver
 883         * 1 : gdr - GPUDirect RDMA supported
 884         * 31:2 : reserved2
 885         */
 886        u32 flags;
 887};
 888
 889/* create_qp_cmd */
 890#define EFA_ADMIN_CREATE_QP_CMD_SQ_VIRT_MASK                BIT(0)
 891#define EFA_ADMIN_CREATE_QP_CMD_RQ_VIRT_MASK                BIT(1)
 892
 893/* modify_qp_cmd */
 894#define EFA_ADMIN_MODIFY_QP_CMD_QP_STATE_MASK               BIT(0)
 895#define EFA_ADMIN_MODIFY_QP_CMD_CUR_QP_STATE_MASK           BIT(1)
 896#define EFA_ADMIN_MODIFY_QP_CMD_QKEY_MASK                   BIT(2)
 897#define EFA_ADMIN_MODIFY_QP_CMD_SQ_PSN_MASK                 BIT(3)
 898#define EFA_ADMIN_MODIFY_QP_CMD_SQ_DRAINED_ASYNC_NOTIFY_MASK BIT(4)
 899#define EFA_ADMIN_MODIFY_QP_CMD_RNR_RETRY_MASK              BIT(5)
 900
 901/* reg_mr_cmd */
 902#define EFA_ADMIN_REG_MR_CMD_PHYS_PAGE_SIZE_SHIFT_MASK      GENMASK(4, 0)
 903#define EFA_ADMIN_REG_MR_CMD_MEM_ADDR_PHY_MODE_EN_MASK      BIT(7)
 904#define EFA_ADMIN_REG_MR_CMD_LOCAL_WRITE_ENABLE_MASK        BIT(0)
 905#define EFA_ADMIN_REG_MR_CMD_REMOTE_READ_ENABLE_MASK        BIT(2)
 906
 907/* create_cq_cmd */
 908#define EFA_ADMIN_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK BIT(5)
 909#define EFA_ADMIN_CREATE_CQ_CMD_VIRT_MASK                   BIT(6)
 910#define EFA_ADMIN_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK    GENMASK(4, 0)
 911
 912/* get_set_feature_common_desc */
 913#define EFA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK   GENMASK(1, 0)
 914
 915/* feature_device_attr_desc */
 916#define EFA_ADMIN_FEATURE_DEVICE_ATTR_DESC_RDMA_READ_MASK   BIT(0)
 917#define EFA_ADMIN_FEATURE_DEVICE_ATTR_DESC_RNR_RETRY_MASK   BIT(1)
 918
 919/* host_info */
 920#define EFA_ADMIN_HOST_INFO_DRIVER_MODULE_TYPE_MASK         GENMASK(7, 0)
 921#define EFA_ADMIN_HOST_INFO_DRIVER_SUB_MINOR_MASK           GENMASK(15, 8)
 922#define EFA_ADMIN_HOST_INFO_DRIVER_MINOR_MASK               GENMASK(23, 16)
 923#define EFA_ADMIN_HOST_INFO_DRIVER_MAJOR_MASK               GENMASK(31, 24)
 924#define EFA_ADMIN_HOST_INFO_FUNCTION_MASK                   GENMASK(2, 0)
 925#define EFA_ADMIN_HOST_INFO_DEVICE_MASK                     GENMASK(7, 3)
 926#define EFA_ADMIN_HOST_INFO_BUS_MASK                        GENMASK(15, 8)
 927#define EFA_ADMIN_HOST_INFO_SPEC_MINOR_MASK                 GENMASK(7, 0)
 928#define EFA_ADMIN_HOST_INFO_SPEC_MAJOR_MASK                 GENMASK(15, 8)
 929#define EFA_ADMIN_HOST_INFO_INTREE_MASK                     BIT(0)
 930#define EFA_ADMIN_HOST_INFO_GDR_MASK                        BIT(1)
 931
 932#endif /* _EFA_ADMIN_CMDS_H_ */
 933