101edac3aSGal Pressman /* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */ 201edac3aSGal Pressman /* 32307157cSMichael Margolin * Copyright 2018-2024 Amazon.com, Inc. or its affiliates. All rights reserved. 401edac3aSGal Pressman */ 501edac3aSGal Pressman 601edac3aSGal Pressman #ifndef _EFA_ADMIN_CMDS_H_ 701edac3aSGal Pressman #define _EFA_ADMIN_CMDS_H_ 801edac3aSGal Pressman 901edac3aSGal Pressman #define EFA_ADMIN_API_VERSION_MAJOR 0 1001edac3aSGal Pressman #define EFA_ADMIN_API_VERSION_MINOR 1 1101edac3aSGal Pressman 1201edac3aSGal Pressman /* EFA admin queue opcodes */ 1301edac3aSGal Pressman enum efa_admin_aq_opcode { 1401edac3aSGal Pressman EFA_ADMIN_CREATE_QP = 1, 1501edac3aSGal Pressman EFA_ADMIN_MODIFY_QP = 2, 1601edac3aSGal Pressman EFA_ADMIN_QUERY_QP = 3, 1701edac3aSGal Pressman EFA_ADMIN_DESTROY_QP = 4, 1801edac3aSGal Pressman EFA_ADMIN_CREATE_AH = 5, 1901edac3aSGal Pressman EFA_ADMIN_DESTROY_AH = 6, 2001edac3aSGal Pressman EFA_ADMIN_REG_MR = 7, 2101edac3aSGal Pressman EFA_ADMIN_DEREG_MR = 8, 2201edac3aSGal Pressman EFA_ADMIN_CREATE_CQ = 9, 2301edac3aSGal Pressman EFA_ADMIN_DESTROY_CQ = 10, 2401edac3aSGal Pressman EFA_ADMIN_GET_FEATURE = 11, 2501edac3aSGal Pressman EFA_ADMIN_SET_FEATURE = 12, 2601edac3aSGal Pressman EFA_ADMIN_GET_STATS = 13, 2701edac3aSGal Pressman EFA_ADMIN_ALLOC_PD = 14, 2801edac3aSGal Pressman EFA_ADMIN_DEALLOC_PD = 15, 2901edac3aSGal Pressman EFA_ADMIN_ALLOC_UAR = 16, 3001edac3aSGal Pressman EFA_ADMIN_DEALLOC_UAR = 17, 312a152512SGal Pressman EFA_ADMIN_CREATE_EQ = 18, 322a152512SGal Pressman EFA_ADMIN_DESTROY_EQ = 19, 332a152512SGal Pressman EFA_ADMIN_MAX_OPCODE = 19, 3401edac3aSGal Pressman }; 3501edac3aSGal Pressman 3601edac3aSGal Pressman enum efa_admin_aq_feature_id { 3701edac3aSGal Pressman EFA_ADMIN_DEVICE_ATTR = 1, 3801edac3aSGal Pressman EFA_ADMIN_AENQ_CONFIG = 2, 3901edac3aSGal Pressman EFA_ADMIN_NETWORK_ATTR = 3, 4001edac3aSGal Pressman EFA_ADMIN_QUEUE_ATTR = 4, 4101edac3aSGal Pressman EFA_ADMIN_HW_HINTS = 5, 42e1ca01a9SGal Pressman EFA_ADMIN_HOST_INFO = 6, 432a152512SGal Pressman EFA_ADMIN_EVENT_QUEUE_ATTR = 7, 4401edac3aSGal Pressman }; 4501edac3aSGal Pressman 4601edac3aSGal Pressman /* QP transport type */ 4701edac3aSGal Pressman enum efa_admin_qp_type { 4801edac3aSGal Pressman /* Unreliable Datagram */ 4901edac3aSGal Pressman EFA_ADMIN_QP_TYPE_UD = 1, 5001edac3aSGal Pressman /* Scalable Reliable Datagram */ 5101edac3aSGal Pressman EFA_ADMIN_QP_TYPE_SRD = 2, 5201edac3aSGal Pressman }; 5301edac3aSGal Pressman 5401edac3aSGal Pressman /* QP state */ 5501edac3aSGal Pressman enum efa_admin_qp_state { 5601edac3aSGal Pressman EFA_ADMIN_QP_STATE_RESET = 0, 5701edac3aSGal Pressman EFA_ADMIN_QP_STATE_INIT = 1, 5801edac3aSGal Pressman EFA_ADMIN_QP_STATE_RTR = 2, 5901edac3aSGal Pressman EFA_ADMIN_QP_STATE_RTS = 3, 6001edac3aSGal Pressman EFA_ADMIN_QP_STATE_SQD = 4, 6101edac3aSGal Pressman EFA_ADMIN_QP_STATE_SQE = 5, 6201edac3aSGal Pressman EFA_ADMIN_QP_STATE_ERR = 6, 6301edac3aSGal Pressman }; 6401edac3aSGal Pressman 6501edac3aSGal Pressman enum efa_admin_get_stats_type { 6601edac3aSGal Pressman EFA_ADMIN_GET_STATS_TYPE_BASIC = 0, 67b0cff387SDaniel Kranzdorf EFA_ADMIN_GET_STATS_TYPE_MESSAGES = 1, 68b0cff387SDaniel Kranzdorf EFA_ADMIN_GET_STATS_TYPE_RDMA_READ = 2, 69113383efSMichael Margolin EFA_ADMIN_GET_STATS_TYPE_RDMA_WRITE = 3, 7001edac3aSGal Pressman }; 7101edac3aSGal Pressman 7201edac3aSGal Pressman enum efa_admin_get_stats_scope { 7301edac3aSGal Pressman EFA_ADMIN_GET_STATS_SCOPE_ALL = 0, 7401edac3aSGal Pressman EFA_ADMIN_GET_STATS_SCOPE_QUEUE = 1, 7501edac3aSGal Pressman }; 7601edac3aSGal Pressman 7701edac3aSGal Pressman /* 7801edac3aSGal Pressman * QP allocation sizes, converted by fabric QueuePair (QP) create command 7901edac3aSGal Pressman * from QP capabilities. 8001edac3aSGal Pressman */ 8101edac3aSGal Pressman struct efa_admin_qp_alloc_size { 8201edac3aSGal Pressman /* Send descriptor ring size in bytes */ 8301edac3aSGal Pressman u32 send_queue_ring_size; 8401edac3aSGal Pressman 8501edac3aSGal Pressman /* Max number of WQEs that can be outstanding on send queue. */ 8601edac3aSGal Pressman u32 send_queue_depth; 8701edac3aSGal Pressman 8801edac3aSGal Pressman /* 8901edac3aSGal Pressman * Recv descriptor ring size in bytes, sufficient for user-provided 9001edac3aSGal Pressman * number of WQEs 9101edac3aSGal Pressman */ 9201edac3aSGal Pressman u32 recv_queue_ring_size; 9301edac3aSGal Pressman 9401edac3aSGal Pressman /* Max number of WQEs that can be outstanding on recv queue */ 9501edac3aSGal Pressman u32 recv_queue_depth; 9601edac3aSGal Pressman }; 9701edac3aSGal Pressman 9801edac3aSGal Pressman struct efa_admin_create_qp_cmd { 9901edac3aSGal Pressman /* Common Admin Queue descriptor */ 10001edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 10101edac3aSGal Pressman 10201edac3aSGal Pressman /* Protection Domain associated with this QP */ 10301edac3aSGal Pressman u16 pd; 10401edac3aSGal Pressman 10501edac3aSGal Pressman /* QP type */ 10601edac3aSGal Pressman u8 qp_type; 10701edac3aSGal Pressman 10801edac3aSGal Pressman /* 10901edac3aSGal Pressman * 0 : sq_virt - If set, SQ ring base address is 11001edac3aSGal Pressman * virtual (IOVA returned by MR registration) 11101edac3aSGal Pressman * 1 : rq_virt - If set, RQ ring base address is 11201edac3aSGal Pressman * virtual (IOVA returned by MR registration) 11301edac3aSGal Pressman * 7:2 : reserved - MBZ 11401edac3aSGal Pressman */ 11501edac3aSGal Pressman u8 flags; 11601edac3aSGal Pressman 11701edac3aSGal Pressman /* 11801edac3aSGal Pressman * Send queue (SQ) ring base physical address. This field is not 11901edac3aSGal Pressman * used if this is a Low Latency Queue(LLQ). 12001edac3aSGal Pressman */ 12101edac3aSGal Pressman u64 sq_base_addr; 12201edac3aSGal Pressman 12301edac3aSGal Pressman /* Receive queue (RQ) ring base address. */ 12401edac3aSGal Pressman u64 rq_base_addr; 12501edac3aSGal Pressman 12601edac3aSGal Pressman /* Index of CQ to be associated with Send Queue completions */ 12701edac3aSGal Pressman u32 send_cq_idx; 12801edac3aSGal Pressman 12901edac3aSGal Pressman /* Index of CQ to be associated with Recv Queue completions */ 13001edac3aSGal Pressman u32 recv_cq_idx; 13101edac3aSGal Pressman 13201edac3aSGal Pressman /* 13301edac3aSGal Pressman * Memory registration key for the SQ ring, used only when not in 13401edac3aSGal Pressman * LLQ mode and base address is virtual 13501edac3aSGal Pressman */ 13601edac3aSGal Pressman u32 sq_l_key; 13701edac3aSGal Pressman 13801edac3aSGal Pressman /* 13901edac3aSGal Pressman * Memory registration key for the RQ ring, used only when base 14001edac3aSGal Pressman * address is virtual 14101edac3aSGal Pressman */ 14201edac3aSGal Pressman u32 rq_l_key; 14301edac3aSGal Pressman 14401edac3aSGal Pressman /* Requested QP allocation sizes */ 14501edac3aSGal Pressman struct efa_admin_qp_alloc_size qp_alloc_size; 14601edac3aSGal Pressman 14701edac3aSGal Pressman /* UAR number */ 14801edac3aSGal Pressman u16 uar; 14901edac3aSGal Pressman 15001edac3aSGal Pressman /* MBZ */ 15101edac3aSGal Pressman u16 reserved; 15201edac3aSGal Pressman 15301edac3aSGal Pressman /* MBZ */ 15401edac3aSGal Pressman u32 reserved2; 15501edac3aSGal Pressman }; 15601edac3aSGal Pressman 15701edac3aSGal Pressman struct efa_admin_create_qp_resp { 15801edac3aSGal Pressman /* Common Admin Queue completion descriptor */ 15901edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 16001edac3aSGal Pressman 16157f63f37SGal Pressman /* 16257f63f37SGal Pressman * Opaque handle to be used for consequent admin operations on the 16357f63f37SGal Pressman * QP 16457f63f37SGal Pressman */ 16501edac3aSGal Pressman u32 qp_handle; 16601edac3aSGal Pressman 16757f63f37SGal Pressman /* 168631b6189SGal Pressman * QP number in the given EFA virtual device. Least-significant bits (as 169631b6189SGal Pressman * needed according to max_qp) carry unique QP ID 17057f63f37SGal Pressman */ 17101edac3aSGal Pressman u16 qp_num; 17201edac3aSGal Pressman 17301edac3aSGal Pressman /* MBZ */ 17401edac3aSGal Pressman u16 reserved; 17501edac3aSGal Pressman 17601edac3aSGal Pressman /* Index of sub-CQ for Send Queue completions */ 17701edac3aSGal Pressman u16 send_sub_cq_idx; 17801edac3aSGal Pressman 17901edac3aSGal Pressman /* Index of sub-CQ for Receive Queue completions */ 18001edac3aSGal Pressman u16 recv_sub_cq_idx; 18101edac3aSGal Pressman 18201edac3aSGal Pressman /* SQ doorbell address, as offset to PCIe DB BAR */ 18301edac3aSGal Pressman u32 sq_db_offset; 18401edac3aSGal Pressman 18501edac3aSGal Pressman /* RQ doorbell address, as offset to PCIe DB BAR */ 18601edac3aSGal Pressman u32 rq_db_offset; 18701edac3aSGal Pressman 18801edac3aSGal Pressman /* 18901edac3aSGal Pressman * low latency send queue ring base address as an offset to PCIe 19001edac3aSGal Pressman * MMIO LLQ_MEM BAR 19101edac3aSGal Pressman */ 19201edac3aSGal Pressman u32 llq_descriptors_offset; 19301edac3aSGal Pressman }; 19401edac3aSGal Pressman 19501edac3aSGal Pressman struct efa_admin_modify_qp_cmd { 19601edac3aSGal Pressman /* Common Admin Queue descriptor */ 19701edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 19801edac3aSGal Pressman 19901edac3aSGal Pressman /* 200ab67baddSGal Pressman * Mask indicating which fields should be updated 201ab67baddSGal Pressman * 0 : qp_state 202ab67baddSGal Pressman * 1 : cur_qp_state 203ab67baddSGal Pressman * 2 : qkey 204ab67baddSGal Pressman * 3 : sq_psn 205ab67baddSGal Pressman * 4 : sq_drained_async_notify 206a4e6a1ddSGal Pressman * 5 : rnr_retry 207a4e6a1ddSGal Pressman * 31:6 : reserved 20801edac3aSGal Pressman */ 20901edac3aSGal Pressman u32 modify_mask; 21001edac3aSGal Pressman 21101edac3aSGal Pressman /* QP handle returned by create_qp command */ 21201edac3aSGal Pressman u32 qp_handle; 21301edac3aSGal Pressman 21401edac3aSGal Pressman /* QP state */ 21501edac3aSGal Pressman u32 qp_state; 21601edac3aSGal Pressman 21701edac3aSGal Pressman /* Override current QP state (before applying the transition) */ 21801edac3aSGal Pressman u32 cur_qp_state; 21901edac3aSGal Pressman 22001edac3aSGal Pressman /* QKey */ 22101edac3aSGal Pressman u32 qkey; 22201edac3aSGal Pressman 22301edac3aSGal Pressman /* SQ PSN */ 22401edac3aSGal Pressman u32 sq_psn; 22501edac3aSGal Pressman 22601edac3aSGal Pressman /* Enable async notification when SQ is drained */ 22701edac3aSGal Pressman u8 sq_drained_async_notify; 22801edac3aSGal Pressman 229a4e6a1ddSGal Pressman /* Number of RNR retries (valid only for SRD QPs) */ 230a4e6a1ddSGal Pressman u8 rnr_retry; 23101edac3aSGal Pressman 23201edac3aSGal Pressman /* MBZ */ 23301edac3aSGal Pressman u16 reserved2; 23401edac3aSGal Pressman }; 23501edac3aSGal Pressman 23601edac3aSGal Pressman struct efa_admin_modify_qp_resp { 23701edac3aSGal Pressman /* Common Admin Queue completion descriptor */ 23801edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 23901edac3aSGal Pressman }; 24001edac3aSGal Pressman 24101edac3aSGal Pressman struct efa_admin_query_qp_cmd { 24201edac3aSGal Pressman /* Common Admin Queue descriptor */ 24301edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 24401edac3aSGal Pressman 24501edac3aSGal Pressman /* QP handle returned by create_qp command */ 24601edac3aSGal Pressman u32 qp_handle; 24701edac3aSGal Pressman }; 24801edac3aSGal Pressman 24901edac3aSGal Pressman struct efa_admin_query_qp_resp { 25001edac3aSGal Pressman /* Common Admin Queue completion descriptor */ 25101edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 25201edac3aSGal Pressman 25301edac3aSGal Pressman /* QP state */ 25401edac3aSGal Pressman u32 qp_state; 25501edac3aSGal Pressman 25601edac3aSGal Pressman /* QKey */ 25701edac3aSGal Pressman u32 qkey; 25801edac3aSGal Pressman 25901edac3aSGal Pressman /* SQ PSN */ 26001edac3aSGal Pressman u32 sq_psn; 26101edac3aSGal Pressman 26201edac3aSGal Pressman /* Indicates that draining is in progress */ 26301edac3aSGal Pressman u8 sq_draining; 26401edac3aSGal Pressman 265a4e6a1ddSGal Pressman /* Number of RNR retries (valid only for SRD QPs) */ 266a4e6a1ddSGal Pressman u8 rnr_retry; 26701edac3aSGal Pressman 26801edac3aSGal Pressman /* MBZ */ 26901edac3aSGal Pressman u16 reserved2; 27001edac3aSGal Pressman }; 27101edac3aSGal Pressman 27201edac3aSGal Pressman struct efa_admin_destroy_qp_cmd { 27301edac3aSGal Pressman /* Common Admin Queue descriptor */ 27401edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 27501edac3aSGal Pressman 27601edac3aSGal Pressman /* QP handle returned by create_qp command */ 27701edac3aSGal Pressman u32 qp_handle; 27801edac3aSGal Pressman }; 27901edac3aSGal Pressman 28001edac3aSGal Pressman struct efa_admin_destroy_qp_resp { 28101edac3aSGal Pressman /* Common Admin Queue completion descriptor */ 28201edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 28301edac3aSGal Pressman }; 28401edac3aSGal Pressman 28501edac3aSGal Pressman /* 28601edac3aSGal Pressman * Create Address Handle command parameters. Must not be called more than 28701edac3aSGal Pressman * once for the same destination 28801edac3aSGal Pressman */ 28901edac3aSGal Pressman struct efa_admin_create_ah_cmd { 29001edac3aSGal Pressman /* Common Admin Queue descriptor */ 29101edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 29201edac3aSGal Pressman 29301edac3aSGal Pressman /* Destination address in network byte order */ 29401edac3aSGal Pressman u8 dest_addr[16]; 29501edac3aSGal Pressman 29601edac3aSGal Pressman /* PD number */ 29701edac3aSGal Pressman u16 pd; 29801edac3aSGal Pressman 29957f63f37SGal Pressman /* MBZ */ 30001edac3aSGal Pressman u16 reserved; 30101edac3aSGal Pressman }; 30201edac3aSGal Pressman 30301edac3aSGal Pressman struct efa_admin_create_ah_resp { 30401edac3aSGal Pressman /* Common Admin Queue completion descriptor */ 30501edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 30601edac3aSGal Pressman 30701edac3aSGal Pressman /* Target interface address handle (opaque) */ 30801edac3aSGal Pressman u16 ah; 30901edac3aSGal Pressman 31057f63f37SGal Pressman /* MBZ */ 31101edac3aSGal Pressman u16 reserved; 31201edac3aSGal Pressman }; 31301edac3aSGal Pressman 31401edac3aSGal Pressman struct efa_admin_destroy_ah_cmd { 31501edac3aSGal Pressman /* Common Admin Queue descriptor */ 31601edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 31701edac3aSGal Pressman 31801edac3aSGal Pressman /* Target interface address handle (opaque) */ 31901edac3aSGal Pressman u16 ah; 32001edac3aSGal Pressman 32101edac3aSGal Pressman /* PD number */ 32201edac3aSGal Pressman u16 pd; 32301edac3aSGal Pressman }; 32401edac3aSGal Pressman 32501edac3aSGal Pressman struct efa_admin_destroy_ah_resp { 32601edac3aSGal Pressman /* Common Admin Queue completion descriptor */ 32701edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 32801edac3aSGal Pressman }; 32901edac3aSGal Pressman 33001edac3aSGal Pressman /* 33101edac3aSGal Pressman * Registration of MemoryRegion, required for QP working with Virtual 33201edac3aSGal Pressman * Addresses. In standard verbs semantics, region length is limited to 2GB 33301edac3aSGal Pressman * space, but EFA offers larger MR support for large memory space, to ease 33401edac3aSGal Pressman * on users working with very large datasets (i.e. full GPU memory mapping). 33501edac3aSGal Pressman */ 33601edac3aSGal Pressman struct efa_admin_reg_mr_cmd { 33701edac3aSGal Pressman /* Common Admin Queue descriptor */ 33801edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 33901edac3aSGal Pressman 34001edac3aSGal Pressman /* Protection Domain */ 34101edac3aSGal Pressman u16 pd; 34201edac3aSGal Pressman 34301edac3aSGal Pressman /* MBZ */ 34401edac3aSGal Pressman u16 reserved16_w1; 34501edac3aSGal Pressman 34601edac3aSGal Pressman /* Physical Buffer List, each element is page-aligned. */ 34701edac3aSGal Pressman union { 34801edac3aSGal Pressman /* 34901edac3aSGal Pressman * Inline array of guest-physical page addresses of user 35001edac3aSGal Pressman * memory pages (optimization for short region 35101edac3aSGal Pressman * registrations) 35201edac3aSGal Pressman */ 35301edac3aSGal Pressman u64 inline_pbl_array[4]; 35401edac3aSGal Pressman 35501edac3aSGal Pressman /* points to PBL (direct or indirect, chained if needed) */ 35601edac3aSGal Pressman struct efa_admin_ctrl_buff_info pbl; 35701edac3aSGal Pressman } pbl; 35801edac3aSGal Pressman 35901edac3aSGal Pressman /* Memory region length, in bytes. */ 36001edac3aSGal Pressman u64 mr_length; 36101edac3aSGal Pressman 36201edac3aSGal Pressman /* 36301edac3aSGal Pressman * flags and page size 36401edac3aSGal Pressman * 4:0 : phys_page_size_shift - page size is (1 << 36501edac3aSGal Pressman * phys_page_size_shift). Page size is used for 36601edac3aSGal Pressman * building the Virtual to Physical address mapping 36701edac3aSGal Pressman * 6:5 : reserved - MBZ 36801edac3aSGal Pressman * 7 : mem_addr_phy_mode_en - Enable bit for physical 36901edac3aSGal Pressman * memory registration (no translation), can be used 37001edac3aSGal Pressman * only by privileged clients. If set, PBL must 37101edac3aSGal Pressman * contain a single entry. 37201edac3aSGal Pressman */ 37301edac3aSGal Pressman u8 flags; 37401edac3aSGal Pressman 37501edac3aSGal Pressman /* 37601edac3aSGal Pressman * permissions 377e6c4f3ffSDaniel Kranzdorf * 0 : local_write_enable - Local write permissions: 378e6c4f3ffSDaniel Kranzdorf * must be set for RQ buffers and buffers posted for 379e6c4f3ffSDaniel Kranzdorf * RDMA Read requests 380531094dcSYonatan Nachum * 1 : remote_write_enable - Remote write 381531094dcSYonatan Nachum * permissions: must be set to enable RDMA write to 382531094dcSYonatan Nachum * the region 383e6c4f3ffSDaniel Kranzdorf * 2 : remote_read_enable - Remote read permissions: 384e6c4f3ffSDaniel Kranzdorf * must be set to enable RDMA read from the region 385e6c4f3ffSDaniel Kranzdorf * 7:3 : reserved2 - MBZ 38601edac3aSGal Pressman */ 38701edac3aSGal Pressman u8 permissions; 38801edac3aSGal Pressman 38957f63f37SGal Pressman /* MBZ */ 39001edac3aSGal Pressman u16 reserved16_w5; 39101edac3aSGal Pressman 39201edac3aSGal Pressman /* number of pages in PBL (redundant, could be calculated) */ 39301edac3aSGal Pressman u32 page_num; 39401edac3aSGal Pressman 39501edac3aSGal Pressman /* 39601edac3aSGal Pressman * IO Virtual Address associated with this MR. If 39701edac3aSGal Pressman * mem_addr_phy_mode_en is set, contains the physical address of 39801edac3aSGal Pressman * the region. 39901edac3aSGal Pressman */ 40001edac3aSGal Pressman u64 iova; 40101edac3aSGal Pressman }; 40201edac3aSGal Pressman 40301edac3aSGal Pressman struct efa_admin_reg_mr_resp { 40401edac3aSGal Pressman /* Common Admin Queue completion descriptor */ 40501edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 40601edac3aSGal Pressman 40701edac3aSGal Pressman /* 40801edac3aSGal Pressman * L_Key, to be used in conjunction with local buffer references in 40901edac3aSGal Pressman * SQ and RQ WQE, or with virtual RQ/CQ rings 41001edac3aSGal Pressman */ 41101edac3aSGal Pressman u32 l_key; 41201edac3aSGal Pressman 41301edac3aSGal Pressman /* 41401edac3aSGal Pressman * R_Key, to be used in RDMA messages to refer to remotely accessed 41501edac3aSGal Pressman * memory region 41601edac3aSGal Pressman */ 41701edac3aSGal Pressman u32 r_key; 4182307157cSMichael Margolin 4192307157cSMichael Margolin /* 4202307157cSMichael Margolin * Mask indicating which fields have valid values 4212307157cSMichael Margolin * 0 : recv_ic_id 4222307157cSMichael Margolin * 1 : rdma_read_ic_id 4232307157cSMichael Margolin * 2 : rdma_recv_ic_id 4242307157cSMichael Margolin */ 4252307157cSMichael Margolin u8 validity; 4262307157cSMichael Margolin 4272307157cSMichael Margolin /* 4282307157cSMichael Margolin * Physical interconnect used by the device to reach the MR for receive 4292307157cSMichael Margolin * operation 4302307157cSMichael Margolin */ 4312307157cSMichael Margolin u8 recv_ic_id; 4322307157cSMichael Margolin 4332307157cSMichael Margolin /* 4342307157cSMichael Margolin * Physical interconnect used by the device to reach the MR for RDMA 4352307157cSMichael Margolin * read operation 4362307157cSMichael Margolin */ 4372307157cSMichael Margolin u8 rdma_read_ic_id; 4382307157cSMichael Margolin 4392307157cSMichael Margolin /* 4402307157cSMichael Margolin * Physical interconnect used by the device to reach the MR for RDMA 4412307157cSMichael Margolin * write receive 4422307157cSMichael Margolin */ 4432307157cSMichael Margolin u8 rdma_recv_ic_id; 44401edac3aSGal Pressman }; 44501edac3aSGal Pressman 44601edac3aSGal Pressman struct efa_admin_dereg_mr_cmd { 44701edac3aSGal Pressman /* Common Admin Queue descriptor */ 44801edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 44901edac3aSGal Pressman 45001edac3aSGal Pressman /* L_Key, memory region's l_key */ 45101edac3aSGal Pressman u32 l_key; 45201edac3aSGal Pressman }; 45301edac3aSGal Pressman 45401edac3aSGal Pressman struct efa_admin_dereg_mr_resp { 45501edac3aSGal Pressman /* Common Admin Queue completion descriptor */ 45601edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 45701edac3aSGal Pressman }; 45801edac3aSGal Pressman 45901edac3aSGal Pressman struct efa_admin_create_cq_cmd { 46001edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 46101edac3aSGal Pressman 46201edac3aSGal Pressman /* 46357f63f37SGal Pressman * 4:0 : reserved5 - MBZ 46401edac3aSGal Pressman * 5 : interrupt_mode_enabled - if set, cq operates 4652a152512SGal Pressman * in interrupt mode (i.e. CQ events and EQ elements 4662a152512SGal Pressman * are generated), otherwise - polling 46701edac3aSGal Pressman * 6 : virt - If set, ring base address is virtual 46801edac3aSGal Pressman * (IOVA returned by MR registration) 46957f63f37SGal Pressman * 7 : reserved6 - MBZ 47001edac3aSGal Pressman */ 47101edac3aSGal Pressman u8 cq_caps_1; 47201edac3aSGal Pressman 47301edac3aSGal Pressman /* 47401edac3aSGal Pressman * 4:0 : cq_entry_size_words - size of CQ entry in 47501edac3aSGal Pressman * 32-bit words, valid values: 4, 8. 476dc13fbf7SMichael Margolin * 5 : set_src_addr - If set, source address will be 477dc13fbf7SMichael Margolin * filled on RX completions from unknown senders. 478dc13fbf7SMichael Margolin * Requires 8 words CQ entry size. 479dc13fbf7SMichael Margolin * 7:6 : reserved7 - MBZ 48001edac3aSGal Pressman */ 48101edac3aSGal Pressman u8 cq_caps_2; 48201edac3aSGal Pressman 48301edac3aSGal Pressman /* completion queue depth in # of entries. must be power of 2 */ 48401edac3aSGal Pressman u16 cq_depth; 48501edac3aSGal Pressman 4862a152512SGal Pressman /* EQ number assigned to this cq */ 4872a152512SGal Pressman u16 eqn; 4882a152512SGal Pressman 4892a152512SGal Pressman /* MBZ */ 4902a152512SGal Pressman u16 reserved; 49101edac3aSGal Pressman 49201edac3aSGal Pressman /* 49301edac3aSGal Pressman * CQ ring base address, virtual or physical depending on 'virt' 49401edac3aSGal Pressman * flag 49501edac3aSGal Pressman */ 49601edac3aSGal Pressman struct efa_common_mem_addr cq_ba; 49701edac3aSGal Pressman 49801edac3aSGal Pressman /* 49901edac3aSGal Pressman * Memory registration key for the ring, used only when base 50001edac3aSGal Pressman * address is virtual 50101edac3aSGal Pressman */ 50201edac3aSGal Pressman u32 l_key; 50301edac3aSGal Pressman 50401edac3aSGal Pressman /* 50501edac3aSGal Pressman * number of sub cqs - must be equal to sub_cqs_per_cq of queue 50601edac3aSGal Pressman * attributes. 50701edac3aSGal Pressman */ 50801edac3aSGal Pressman u16 num_sub_cqs; 50901edac3aSGal Pressman 51001edac3aSGal Pressman /* UAR number */ 51101edac3aSGal Pressman u16 uar; 51201edac3aSGal Pressman }; 51301edac3aSGal Pressman 51401edac3aSGal Pressman struct efa_admin_create_cq_resp { 51501edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 51601edac3aSGal Pressman 51701edac3aSGal Pressman u16 cq_idx; 51801edac3aSGal Pressman 51901edac3aSGal Pressman /* actual cq depth in number of entries */ 52001edac3aSGal Pressman u16 cq_actual_depth; 5212a152512SGal Pressman 5222a152512SGal Pressman /* CQ doorbell address, as offset to PCIe DB BAR */ 5232a152512SGal Pressman u32 db_offset; 5242a152512SGal Pressman 5252a152512SGal Pressman /* 5262a152512SGal Pressman * 0 : db_valid - If set, doorbell offset is valid. 5272a152512SGal Pressman * Always set when interrupts are requested. 5282a152512SGal Pressman */ 5292a152512SGal Pressman u32 flags; 53001edac3aSGal Pressman }; 53101edac3aSGal Pressman 53201edac3aSGal Pressman struct efa_admin_destroy_cq_cmd { 53301edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_desc; 53401edac3aSGal Pressman 53501edac3aSGal Pressman u16 cq_idx; 53601edac3aSGal Pressman 53757f63f37SGal Pressman /* MBZ */ 53801edac3aSGal Pressman u16 reserved1; 53901edac3aSGal Pressman }; 54001edac3aSGal Pressman 54101edac3aSGal Pressman struct efa_admin_destroy_cq_resp { 54201edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 54301edac3aSGal Pressman }; 54401edac3aSGal Pressman 54501edac3aSGal Pressman /* 54601edac3aSGal Pressman * EFA AQ Get Statistics command. Extended statistics are placed in control 54701edac3aSGal Pressman * buffer pointed by AQ entry 54801edac3aSGal Pressman */ 54901edac3aSGal Pressman struct efa_admin_aq_get_stats_cmd { 55001edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_descriptor; 55101edac3aSGal Pressman 55201edac3aSGal Pressman union { 55301edac3aSGal Pressman /* command specific inline data */ 55401edac3aSGal Pressman u32 inline_data_w1[3]; 55501edac3aSGal Pressman 55601edac3aSGal Pressman struct efa_admin_ctrl_buff_info control_buffer; 55701edac3aSGal Pressman } u; 55801edac3aSGal Pressman 55901edac3aSGal Pressman /* stats type as defined in enum efa_admin_get_stats_type */ 56001edac3aSGal Pressman u8 type; 56101edac3aSGal Pressman 56201edac3aSGal Pressman /* stats scope defined in enum efa_admin_get_stats_scope */ 56301edac3aSGal Pressman u8 scope; 56401edac3aSGal Pressman 56501edac3aSGal Pressman u16 scope_modifier; 56601edac3aSGal Pressman }; 56701edac3aSGal Pressman 56801edac3aSGal Pressman struct efa_admin_basic_stats { 56901edac3aSGal Pressman u64 tx_bytes; 57001edac3aSGal Pressman 57101edac3aSGal Pressman u64 tx_pkts; 57201edac3aSGal Pressman 57301edac3aSGal Pressman u64 rx_bytes; 57401edac3aSGal Pressman 57501edac3aSGal Pressman u64 rx_pkts; 57601edac3aSGal Pressman 57701edac3aSGal Pressman u64 rx_drops; 57801edac3aSGal Pressman }; 57901edac3aSGal Pressman 580b0cff387SDaniel Kranzdorf struct efa_admin_messages_stats { 581b0cff387SDaniel Kranzdorf u64 send_bytes; 582b0cff387SDaniel Kranzdorf 583b0cff387SDaniel Kranzdorf u64 send_wrs; 584b0cff387SDaniel Kranzdorf 585b0cff387SDaniel Kranzdorf u64 recv_bytes; 586b0cff387SDaniel Kranzdorf 587b0cff387SDaniel Kranzdorf u64 recv_wrs; 588b0cff387SDaniel Kranzdorf }; 589b0cff387SDaniel Kranzdorf 590b0cff387SDaniel Kranzdorf struct efa_admin_rdma_read_stats { 591b0cff387SDaniel Kranzdorf u64 read_wrs; 592b0cff387SDaniel Kranzdorf 593b0cff387SDaniel Kranzdorf u64 read_bytes; 594b0cff387SDaniel Kranzdorf 595b0cff387SDaniel Kranzdorf u64 read_wr_err; 596b0cff387SDaniel Kranzdorf 597b0cff387SDaniel Kranzdorf u64 read_resp_bytes; 598b0cff387SDaniel Kranzdorf }; 599b0cff387SDaniel Kranzdorf 600113383efSMichael Margolin struct efa_admin_rdma_write_stats { 601113383efSMichael Margolin u64 write_wrs; 602113383efSMichael Margolin 603113383efSMichael Margolin u64 write_bytes; 604113383efSMichael Margolin 605113383efSMichael Margolin u64 write_wr_err; 606113383efSMichael Margolin 607113383efSMichael Margolin u64 write_recv_bytes; 608113383efSMichael Margolin }; 609113383efSMichael Margolin 61001edac3aSGal Pressman struct efa_admin_acq_get_stats_resp { 61101edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 61201edac3aSGal Pressman 613b0cff387SDaniel Kranzdorf union { 61401edac3aSGal Pressman struct efa_admin_basic_stats basic_stats; 615b0cff387SDaniel Kranzdorf 616b0cff387SDaniel Kranzdorf struct efa_admin_messages_stats messages_stats; 617b0cff387SDaniel Kranzdorf 618b0cff387SDaniel Kranzdorf struct efa_admin_rdma_read_stats rdma_read_stats; 619113383efSMichael Margolin 620113383efSMichael Margolin struct efa_admin_rdma_write_stats rdma_write_stats; 621b0cff387SDaniel Kranzdorf } u; 62201edac3aSGal Pressman }; 62301edac3aSGal Pressman 62401edac3aSGal Pressman struct efa_admin_get_set_feature_common_desc { 6259bf61b8cSGal Pressman /* MBZ */ 6269bf61b8cSGal Pressman u8 reserved0; 62701edac3aSGal Pressman 62801edac3aSGal Pressman /* as appears in efa_admin_aq_feature_id */ 62901edac3aSGal Pressman u8 feature_id; 63001edac3aSGal Pressman 63101edac3aSGal Pressman /* MBZ */ 63201edac3aSGal Pressman u16 reserved16; 63301edac3aSGal Pressman }; 63401edac3aSGal Pressman 63501edac3aSGal Pressman struct efa_admin_feature_device_attr_desc { 63601edac3aSGal Pressman /* Bitmap of efa_admin_aq_feature_id */ 63701edac3aSGal Pressman u64 supported_features; 63801edac3aSGal Pressman 63901edac3aSGal Pressman /* Bitmap of supported page sizes in MR registrations */ 64001edac3aSGal Pressman u64 page_size_cap; 64101edac3aSGal Pressman 64201edac3aSGal Pressman u32 fw_version; 64301edac3aSGal Pressman 64401edac3aSGal Pressman u32 admin_api_version; 64501edac3aSGal Pressman 64601edac3aSGal Pressman u32 device_version; 64701edac3aSGal Pressman 64801edac3aSGal Pressman /* Bar used for SQ and RQ doorbells */ 64901edac3aSGal Pressman u16 db_bar; 65001edac3aSGal Pressman 65157f63f37SGal Pressman /* Indicates how many bits are used on physical address access */ 65201edac3aSGal Pressman u8 phys_addr_width; 65301edac3aSGal Pressman 65457f63f37SGal Pressman /* Indicates how many bits are used on virtual address access */ 65501edac3aSGal Pressman u8 virt_addr_width; 656666e8ff5SDaniel Kranzdorf 657666e8ff5SDaniel Kranzdorf /* 658666e8ff5SDaniel Kranzdorf * 0 : rdma_read - If set, RDMA Read is supported on 659666e8ff5SDaniel Kranzdorf * TX queues 660a4e6a1ddSGal Pressman * 1 : rnr_retry - If set, RNR retry is supported on 661a4e6a1ddSGal Pressman * modify QP command 6626dddd939SYonatan Nachum * 2 : data_polling_128 - If set, 128 bytes data 6636dddd939SYonatan Nachum * polling is supported 664531094dcSYonatan Nachum * 3 : rdma_write - If set, RDMA Write is supported 665531094dcSYonatan Nachum * on TX queues 666531094dcSYonatan Nachum * 31:4 : reserved - MBZ 667666e8ff5SDaniel Kranzdorf */ 668666e8ff5SDaniel Kranzdorf u32 device_caps; 669666e8ff5SDaniel Kranzdorf 670666e8ff5SDaniel Kranzdorf /* Max RDMA transfer size in bytes */ 671666e8ff5SDaniel Kranzdorf u32 max_rdma_size; 67201edac3aSGal Pressman }; 67301edac3aSGal Pressman 67401edac3aSGal Pressman struct efa_admin_feature_queue_attr_desc { 67501edac3aSGal Pressman /* The maximum number of queue pairs supported */ 67601edac3aSGal Pressman u32 max_qp; 67701edac3aSGal Pressman 67857f63f37SGal Pressman /* Maximum number of WQEs per Send Queue */ 67901edac3aSGal Pressman u32 max_sq_depth; 68001edac3aSGal Pressman 68157f63f37SGal Pressman /* Maximum size of data that can be sent inline in a Send WQE */ 68201edac3aSGal Pressman u32 inline_buf_size; 68301edac3aSGal Pressman 68457f63f37SGal Pressman /* Maximum number of buffer descriptors per Recv Queue */ 68501edac3aSGal Pressman u32 max_rq_depth; 68601edac3aSGal Pressman 68701edac3aSGal Pressman /* The maximum number of completion queues supported per VF */ 68801edac3aSGal Pressman u32 max_cq; 68901edac3aSGal Pressman 69057f63f37SGal Pressman /* Maximum number of CQEs per Completion Queue */ 69101edac3aSGal Pressman u32 max_cq_depth; 69201edac3aSGal Pressman 69301edac3aSGal Pressman /* Number of sub-CQs to be created for each CQ */ 69401edac3aSGal Pressman u16 sub_cqs_per_cq; 69501edac3aSGal Pressman 696da2924bdSGal Pressman /* Minimum number of WQEs per SQ */ 697da2924bdSGal Pressman u16 min_sq_depth; 69801edac3aSGal Pressman 69957f63f37SGal Pressman /* Maximum number of SGEs (buffers) allowed for a single send WQE */ 70001edac3aSGal Pressman u16 max_wr_send_sges; 70101edac3aSGal Pressman 70201edac3aSGal Pressman /* Maximum number of SGEs allowed for a single recv WQE */ 70301edac3aSGal Pressman u16 max_wr_recv_sges; 70401edac3aSGal Pressman 70501edac3aSGal Pressman /* The maximum number of memory regions supported */ 70601edac3aSGal Pressman u32 max_mr; 70701edac3aSGal Pressman 70801edac3aSGal Pressman /* The maximum number of pages can be registered */ 70901edac3aSGal Pressman u32 max_mr_pages; 71001edac3aSGal Pressman 71101edac3aSGal Pressman /* The maximum number of protection domains supported */ 71201edac3aSGal Pressman u32 max_pd; 71301edac3aSGal Pressman 71401edac3aSGal Pressman /* The maximum number of address handles supported */ 71501edac3aSGal Pressman u32 max_ah; 71601edac3aSGal Pressman 71701edac3aSGal Pressman /* The maximum size of LLQ in bytes */ 71801edac3aSGal Pressman u32 max_llq_size; 719666e8ff5SDaniel Kranzdorf 720531094dcSYonatan Nachum /* Maximum number of SGEs for a single RDMA read/write WQE */ 721666e8ff5SDaniel Kranzdorf u16 max_wr_rdma_sges; 722556c811fSGal Pressman 723556c811fSGal Pressman /* 724556c811fSGal Pressman * Maximum number of bytes that can be written to SQ between two 725556c811fSGal Pressman * consecutive doorbells (in units of 64B). Driver must ensure that only 726556c811fSGal Pressman * complete WQEs are written to queue before issuing a doorbell. 727556c811fSGal Pressman * Examples: max_tx_batch=16 and WQE size = 64B, means up to 16 WQEs can 728556c811fSGal Pressman * be written to SQ between two consecutive doorbells. max_tx_batch=11 729556c811fSGal Pressman * and WQE size = 128B, means up to 5 WQEs can be written to SQ between 730556c811fSGal Pressman * two consecutive doorbells. Zero means unlimited. 731556c811fSGal Pressman */ 732556c811fSGal Pressman u16 max_tx_batch; 73301edac3aSGal Pressman }; 73401edac3aSGal Pressman 7352a152512SGal Pressman struct efa_admin_event_queue_attr_desc { 7362a152512SGal Pressman /* The maximum number of event queues supported */ 7372a152512SGal Pressman u32 max_eq; 7382a152512SGal Pressman 7392a152512SGal Pressman /* Maximum number of EQEs per Event Queue */ 7402a152512SGal Pressman u32 max_eq_depth; 7412a152512SGal Pressman 7422a152512SGal Pressman /* Supported events bitmask */ 7432a152512SGal Pressman u32 event_bitmask; 7442a152512SGal Pressman }; 7452a152512SGal Pressman 74601edac3aSGal Pressman struct efa_admin_feature_aenq_desc { 74701edac3aSGal Pressman /* bitmask for AENQ groups the device can report */ 74801edac3aSGal Pressman u32 supported_groups; 74901edac3aSGal Pressman 75001edac3aSGal Pressman /* bitmask for AENQ groups to report */ 75101edac3aSGal Pressman u32 enabled_groups; 75201edac3aSGal Pressman }; 75301edac3aSGal Pressman 75401edac3aSGal Pressman struct efa_admin_feature_network_attr_desc { 75501edac3aSGal Pressman /* Raw address data in network byte order */ 75601edac3aSGal Pressman u8 addr[16]; 75701edac3aSGal Pressman 758666e8ff5SDaniel Kranzdorf /* max packet payload size in bytes */ 75901edac3aSGal Pressman u32 mtu; 76001edac3aSGal Pressman }; 76101edac3aSGal Pressman 76201edac3aSGal Pressman /* 76301edac3aSGal Pressman * When hint value is 0, hints capabilities are not supported or driver 76401edac3aSGal Pressman * should use its own predefined value 76501edac3aSGal Pressman */ 76601edac3aSGal Pressman struct efa_admin_hw_hints { 76701edac3aSGal Pressman /* value in ms */ 76801edac3aSGal Pressman u16 mmio_read_timeout; 76901edac3aSGal Pressman 77001edac3aSGal Pressman /* value in ms */ 77101edac3aSGal Pressman u16 driver_watchdog_timeout; 77201edac3aSGal Pressman 77301edac3aSGal Pressman /* value in ms */ 77401edac3aSGal Pressman u16 admin_completion_timeout; 77501edac3aSGal Pressman 77601edac3aSGal Pressman /* poll interval in ms */ 77701edac3aSGal Pressman u16 poll_interval; 77801edac3aSGal Pressman }; 77901edac3aSGal Pressman 78001edac3aSGal Pressman struct efa_admin_get_feature_cmd { 78101edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_descriptor; 78201edac3aSGal Pressman 78301edac3aSGal Pressman struct efa_admin_ctrl_buff_info control_buffer; 78401edac3aSGal Pressman 78501edac3aSGal Pressman struct efa_admin_get_set_feature_common_desc feature_common; 78601edac3aSGal Pressman 78701edac3aSGal Pressman u32 raw[11]; 78801edac3aSGal Pressman }; 78901edac3aSGal Pressman 79001edac3aSGal Pressman struct efa_admin_get_feature_resp { 79101edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 79201edac3aSGal Pressman 79301edac3aSGal Pressman union { 79401edac3aSGal Pressman u32 raw[14]; 79501edac3aSGal Pressman 79601edac3aSGal Pressman struct efa_admin_feature_device_attr_desc device_attr; 79701edac3aSGal Pressman 79801edac3aSGal Pressman struct efa_admin_feature_aenq_desc aenq; 79901edac3aSGal Pressman 80001edac3aSGal Pressman struct efa_admin_feature_network_attr_desc network_attr; 80101edac3aSGal Pressman 80201edac3aSGal Pressman struct efa_admin_feature_queue_attr_desc queue_attr; 80301edac3aSGal Pressman 8042a152512SGal Pressman struct efa_admin_event_queue_attr_desc event_queue_attr; 8052a152512SGal Pressman 80601edac3aSGal Pressman struct efa_admin_hw_hints hw_hints; 80701edac3aSGal Pressman } u; 80801edac3aSGal Pressman }; 80901edac3aSGal Pressman 81001edac3aSGal Pressman struct efa_admin_set_feature_cmd { 81101edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_descriptor; 81201edac3aSGal Pressman 81301edac3aSGal Pressman struct efa_admin_ctrl_buff_info control_buffer; 81401edac3aSGal Pressman 81501edac3aSGal Pressman struct efa_admin_get_set_feature_common_desc feature_common; 81601edac3aSGal Pressman 81701edac3aSGal Pressman union { 81801edac3aSGal Pressman u32 raw[11]; 81901edac3aSGal Pressman 82001edac3aSGal Pressman /* AENQ configuration */ 82101edac3aSGal Pressman struct efa_admin_feature_aenq_desc aenq; 82201edac3aSGal Pressman } u; 82301edac3aSGal Pressman }; 82401edac3aSGal Pressman 82501edac3aSGal Pressman struct efa_admin_set_feature_resp { 82601edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 82701edac3aSGal Pressman 82801edac3aSGal Pressman union { 82901edac3aSGal Pressman u32 raw[14]; 83001edac3aSGal Pressman } u; 83101edac3aSGal Pressman }; 83201edac3aSGal Pressman 83301edac3aSGal Pressman struct efa_admin_alloc_pd_cmd { 83401edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_descriptor; 83501edac3aSGal Pressman }; 83601edac3aSGal Pressman 83701edac3aSGal Pressman struct efa_admin_alloc_pd_resp { 83801edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 83901edac3aSGal Pressman 84001edac3aSGal Pressman /* PD number */ 84101edac3aSGal Pressman u16 pd; 84201edac3aSGal Pressman 84301edac3aSGal Pressman /* MBZ */ 84401edac3aSGal Pressman u16 reserved; 84501edac3aSGal Pressman }; 84601edac3aSGal Pressman 84701edac3aSGal Pressman struct efa_admin_dealloc_pd_cmd { 84801edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_descriptor; 84901edac3aSGal Pressman 85001edac3aSGal Pressman /* PD number */ 85101edac3aSGal Pressman u16 pd; 85201edac3aSGal Pressman 85301edac3aSGal Pressman /* MBZ */ 85401edac3aSGal Pressman u16 reserved; 85501edac3aSGal Pressman }; 85601edac3aSGal Pressman 85701edac3aSGal Pressman struct efa_admin_dealloc_pd_resp { 85801edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 85901edac3aSGal Pressman }; 86001edac3aSGal Pressman 86101edac3aSGal Pressman struct efa_admin_alloc_uar_cmd { 86201edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_descriptor; 86301edac3aSGal Pressman }; 86401edac3aSGal Pressman 86501edac3aSGal Pressman struct efa_admin_alloc_uar_resp { 86601edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 86701edac3aSGal Pressman 86801edac3aSGal Pressman /* UAR number */ 86901edac3aSGal Pressman u16 uar; 87001edac3aSGal Pressman 87101edac3aSGal Pressman /* MBZ */ 87201edac3aSGal Pressman u16 reserved; 87301edac3aSGal Pressman }; 87401edac3aSGal Pressman 87501edac3aSGal Pressman struct efa_admin_dealloc_uar_cmd { 87601edac3aSGal Pressman struct efa_admin_aq_common_desc aq_common_descriptor; 87701edac3aSGal Pressman 87801edac3aSGal Pressman /* UAR number */ 87901edac3aSGal Pressman u16 uar; 88001edac3aSGal Pressman 88101edac3aSGal Pressman /* MBZ */ 88201edac3aSGal Pressman u16 reserved; 88301edac3aSGal Pressman }; 88401edac3aSGal Pressman 88501edac3aSGal Pressman struct efa_admin_dealloc_uar_resp { 88601edac3aSGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 88701edac3aSGal Pressman }; 88801edac3aSGal Pressman 8892a152512SGal Pressman struct efa_admin_create_eq_cmd { 8902a152512SGal Pressman struct efa_admin_aq_common_desc aq_common_descriptor; 8912a152512SGal Pressman 8922a152512SGal Pressman /* Size of the EQ in entries, must be power of 2 */ 8932a152512SGal Pressman u16 depth; 8942a152512SGal Pressman 8952a152512SGal Pressman /* MSI-X table entry index */ 8962a152512SGal Pressman u8 msix_vec; 8972a152512SGal Pressman 8982a152512SGal Pressman /* 8992a152512SGal Pressman * 4:0 : entry_size_words - size of EQ entry in 9002a152512SGal Pressman * 32-bit words 9012a152512SGal Pressman * 7:5 : reserved - MBZ 9022a152512SGal Pressman */ 9032a152512SGal Pressman u8 caps; 9042a152512SGal Pressman 9052a152512SGal Pressman /* EQ ring base address */ 9062a152512SGal Pressman struct efa_common_mem_addr ba; 9072a152512SGal Pressman 9082a152512SGal Pressman /* 9092a152512SGal Pressman * Enabled events on this EQ 9102a152512SGal Pressman * 0 : completion_events - Enable completion events 9112a152512SGal Pressman * 31:1 : reserved - MBZ 9122a152512SGal Pressman */ 9132a152512SGal Pressman u32 event_bitmask; 9142a152512SGal Pressman 9152a152512SGal Pressman /* MBZ */ 9162a152512SGal Pressman u32 reserved; 9172a152512SGal Pressman }; 9182a152512SGal Pressman 9192a152512SGal Pressman struct efa_admin_create_eq_resp { 9202a152512SGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 9212a152512SGal Pressman 9222a152512SGal Pressman /* EQ number */ 9232a152512SGal Pressman u16 eqn; 9242a152512SGal Pressman 9252a152512SGal Pressman /* MBZ */ 9262a152512SGal Pressman u16 reserved; 9272a152512SGal Pressman }; 9282a152512SGal Pressman 9292a152512SGal Pressman struct efa_admin_destroy_eq_cmd { 9302a152512SGal Pressman struct efa_admin_aq_common_desc aq_common_descriptor; 9312a152512SGal Pressman 9322a152512SGal Pressman /* EQ number */ 9332a152512SGal Pressman u16 eqn; 9342a152512SGal Pressman 9352a152512SGal Pressman /* MBZ */ 9362a152512SGal Pressman u16 reserved; 9372a152512SGal Pressman }; 9382a152512SGal Pressman 9392a152512SGal Pressman struct efa_admin_destroy_eq_resp { 9402a152512SGal Pressman struct efa_admin_acq_common_desc acq_common_desc; 9412a152512SGal Pressman }; 9422a152512SGal Pressman 94301edac3aSGal Pressman /* asynchronous event notification groups */ 94401edac3aSGal Pressman enum efa_admin_aenq_group { 94501edac3aSGal Pressman EFA_ADMIN_FATAL_ERROR = 1, 94601edac3aSGal Pressman EFA_ADMIN_WARNING = 2, 94701edac3aSGal Pressman EFA_ADMIN_NOTIFICATION = 3, 94801edac3aSGal Pressman EFA_ADMIN_KEEP_ALIVE = 4, 94901edac3aSGal Pressman EFA_ADMIN_AENQ_GROUPS_NUM = 5, 95001edac3aSGal Pressman }; 95101edac3aSGal Pressman 95201edac3aSGal Pressman struct efa_admin_mmio_req_read_less_resp { 95301edac3aSGal Pressman u16 req_id; 95401edac3aSGal Pressman 95501edac3aSGal Pressman u16 reg_off; 95601edac3aSGal Pressman 95701edac3aSGal Pressman /* value is valid when poll is cleared */ 95801edac3aSGal Pressman u32 reg_val; 95901edac3aSGal Pressman }; 96001edac3aSGal Pressman 961e1ca01a9SGal Pressman enum efa_admin_os_type { 962e1ca01a9SGal Pressman EFA_ADMIN_OS_LINUX = 0, 963e1ca01a9SGal Pressman }; 964e1ca01a9SGal Pressman 965e1ca01a9SGal Pressman struct efa_admin_host_info { 966e1ca01a9SGal Pressman /* OS distribution string format */ 967e1ca01a9SGal Pressman u8 os_dist_str[128]; 968e1ca01a9SGal Pressman 969e1ca01a9SGal Pressman /* Defined in enum efa_admin_os_type */ 970e1ca01a9SGal Pressman u32 os_type; 971e1ca01a9SGal Pressman 972e1ca01a9SGal Pressman /* Kernel version string format */ 973e1ca01a9SGal Pressman u8 kernel_ver_str[32]; 974e1ca01a9SGal Pressman 975e1ca01a9SGal Pressman /* Kernel version numeric format */ 976e1ca01a9SGal Pressman u32 kernel_ver; 977e1ca01a9SGal Pressman 978e1ca01a9SGal Pressman /* 979e1ca01a9SGal Pressman * 7:0 : driver_module_type 980e1ca01a9SGal Pressman * 15:8 : driver_sub_minor 981e1ca01a9SGal Pressman * 23:16 : driver_minor 982e1ca01a9SGal Pressman * 31:24 : driver_major 983e1ca01a9SGal Pressman */ 984e1ca01a9SGal Pressman u32 driver_ver; 985e1ca01a9SGal Pressman 986e1ca01a9SGal Pressman /* 987e1ca01a9SGal Pressman * Device's Bus, Device and Function 988e1ca01a9SGal Pressman * 2:0 : function 989e1ca01a9SGal Pressman * 7:3 : device 990e1ca01a9SGal Pressman * 15:8 : bus 991e1ca01a9SGal Pressman */ 992e1ca01a9SGal Pressman u16 bdf; 993e1ca01a9SGal Pressman 994e1ca01a9SGal Pressman /* 995e1ca01a9SGal Pressman * Spec version 996e1ca01a9SGal Pressman * 7:0 : spec_minor 997e1ca01a9SGal Pressman * 15:8 : spec_major 998e1ca01a9SGal Pressman */ 999e1ca01a9SGal Pressman u16 spec_ver; 1000e1ca01a9SGal Pressman 1001e1ca01a9SGal Pressman /* 1002e1ca01a9SGal Pressman * 0 : intree - Intree driver 1003e1ca01a9SGal Pressman * 1 : gdr - GPUDirect RDMA supported 1004e1ca01a9SGal Pressman * 31:2 : reserved2 1005e1ca01a9SGal Pressman */ 1006e1ca01a9SGal Pressman u32 flags; 1007e1ca01a9SGal Pressman }; 1008e1ca01a9SGal Pressman 100901edac3aSGal Pressman /* create_qp_cmd */ 101001edac3aSGal Pressman #define EFA_ADMIN_CREATE_QP_CMD_SQ_VIRT_MASK BIT(0) 101101edac3aSGal Pressman #define EFA_ADMIN_CREATE_QP_CMD_RQ_VIRT_MASK BIT(1) 101201edac3aSGal Pressman 1013ab67baddSGal Pressman /* modify_qp_cmd */ 1014ab67baddSGal Pressman #define EFA_ADMIN_MODIFY_QP_CMD_QP_STATE_MASK BIT(0) 1015ab67baddSGal Pressman #define EFA_ADMIN_MODIFY_QP_CMD_CUR_QP_STATE_MASK BIT(1) 1016ab67baddSGal Pressman #define EFA_ADMIN_MODIFY_QP_CMD_QKEY_MASK BIT(2) 1017ab67baddSGal Pressman #define EFA_ADMIN_MODIFY_QP_CMD_SQ_PSN_MASK BIT(3) 1018ab67baddSGal Pressman #define EFA_ADMIN_MODIFY_QP_CMD_SQ_DRAINED_ASYNC_NOTIFY_MASK BIT(4) 1019a4e6a1ddSGal Pressman #define EFA_ADMIN_MODIFY_QP_CMD_RNR_RETRY_MASK BIT(5) 1020ab67baddSGal Pressman 102101edac3aSGal Pressman /* reg_mr_cmd */ 102201edac3aSGal Pressman #define EFA_ADMIN_REG_MR_CMD_PHYS_PAGE_SIZE_SHIFT_MASK GENMASK(4, 0) 102301edac3aSGal Pressman #define EFA_ADMIN_REG_MR_CMD_MEM_ADDR_PHY_MODE_EN_MASK BIT(7) 102401edac3aSGal Pressman #define EFA_ADMIN_REG_MR_CMD_LOCAL_WRITE_ENABLE_MASK BIT(0) 1025531094dcSYonatan Nachum #define EFA_ADMIN_REG_MR_CMD_REMOTE_WRITE_ENABLE_MASK BIT(1) 1026e6c4f3ffSDaniel Kranzdorf #define EFA_ADMIN_REG_MR_CMD_REMOTE_READ_ENABLE_MASK BIT(2) 102701edac3aSGal Pressman 10282307157cSMichael Margolin /* reg_mr_resp */ 10292307157cSMichael Margolin #define EFA_ADMIN_REG_MR_RESP_RECV_IC_ID_MASK BIT(0) 10302307157cSMichael Margolin #define EFA_ADMIN_REG_MR_RESP_RDMA_READ_IC_ID_MASK BIT(1) 10312307157cSMichael Margolin #define EFA_ADMIN_REG_MR_RESP_RDMA_RECV_IC_ID_MASK BIT(2) 10322307157cSMichael Margolin 103301edac3aSGal Pressman /* create_cq_cmd */ 103401edac3aSGal Pressman #define EFA_ADMIN_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK BIT(5) 103501edac3aSGal Pressman #define EFA_ADMIN_CREATE_CQ_CMD_VIRT_MASK BIT(6) 103601edac3aSGal Pressman #define EFA_ADMIN_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK GENMASK(4, 0) 1037dc13fbf7SMichael Margolin #define EFA_ADMIN_CREATE_CQ_CMD_SET_SRC_ADDR_MASK BIT(5) 103801edac3aSGal Pressman 10392a152512SGal Pressman /* create_cq_resp */ 10402a152512SGal Pressman #define EFA_ADMIN_CREATE_CQ_RESP_DB_VALID_MASK BIT(0) 10412a152512SGal Pressman 1042666e8ff5SDaniel Kranzdorf /* feature_device_attr_desc */ 1043666e8ff5SDaniel Kranzdorf #define EFA_ADMIN_FEATURE_DEVICE_ATTR_DESC_RDMA_READ_MASK BIT(0) 1044a4e6a1ddSGal Pressman #define EFA_ADMIN_FEATURE_DEVICE_ATTR_DESC_RNR_RETRY_MASK BIT(1) 10456dddd939SYonatan Nachum #define EFA_ADMIN_FEATURE_DEVICE_ATTR_DESC_DATA_POLLING_128_MASK BIT(2) 1046531094dcSYonatan Nachum #define EFA_ADMIN_FEATURE_DEVICE_ATTR_DESC_RDMA_WRITE_MASK BIT(3) 1047666e8ff5SDaniel Kranzdorf 10482a152512SGal Pressman /* create_eq_cmd */ 10492a152512SGal Pressman #define EFA_ADMIN_CREATE_EQ_CMD_ENTRY_SIZE_WORDS_MASK GENMASK(4, 0) 10502a152512SGal Pressman #define EFA_ADMIN_CREATE_EQ_CMD_VIRT_MASK BIT(6) 10512a152512SGal Pressman #define EFA_ADMIN_CREATE_EQ_CMD_COMPLETION_EVENTS_MASK BIT(0) 10522a152512SGal Pressman 1053e1ca01a9SGal Pressman /* host_info */ 1054e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_DRIVER_MODULE_TYPE_MASK GENMASK(7, 0) 1055e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_DRIVER_SUB_MINOR_MASK GENMASK(15, 8) 1056e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_DRIVER_MINOR_MASK GENMASK(23, 16) 1057e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_DRIVER_MAJOR_MASK GENMASK(31, 24) 1058e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_FUNCTION_MASK GENMASK(2, 0) 1059e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_DEVICE_MASK GENMASK(7, 3) 1060e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_BUS_MASK GENMASK(15, 8) 1061e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_SPEC_MINOR_MASK GENMASK(7, 0) 1062e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_SPEC_MAJOR_MASK GENMASK(15, 8) 1063e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_INTREE_MASK BIT(0) 1064e1ca01a9SGal Pressman #define EFA_ADMIN_HOST_INFO_GDR_MASK BIT(1) 1065e1ca01a9SGal Pressman 106601edac3aSGal Pressman #endif /* _EFA_ADMIN_CMDS_H_ */ 1067