1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
3 * Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All rights reserved.
6 #ifndef _EFA_COM_CMD_H_
7 #define _EFA_COM_CMD_H_
11 #define EFA_GID_SIZE 16
13 struct efa_com_create_qp_params {
18 * Send descriptor ring size in bytes,
19 * sufficient for user-provided number of WQEs and SGL size
21 u32 sq_ring_size_in_bytes;
22 /* Max number of WQEs that will be posted on send queue */
24 /* Recv descriptor ring size in bytes */
25 u32 rq_ring_size_in_bytes;
32 struct efa_com_create_qp_result {
37 u32 llq_descriptors_offset;
42 struct efa_com_modify_qp_params {
49 u8 sq_drained_async_notify;
53 struct efa_com_query_qp_params {
57 struct efa_com_query_qp_result {
65 struct efa_com_destroy_qp_params {
69 struct efa_com_create_cq_params {
70 /* cq physical base address in OS memory */
72 /* completion queue depth in # of entries */
77 u8 entry_size_in_bytes;
78 u8 interrupt_mode_enabled : 1;
82 struct efa_com_create_cq_result {
85 /* actual cq depth in # of entries */
91 struct efa_com_destroy_cq_params {
95 struct efa_com_create_ah_params {
97 /* Destination address in network byte order */
98 u8 dest_addr[EFA_GID_SIZE];
101 struct efa_com_create_ah_result {
105 struct efa_com_destroy_ah_params {
110 struct efa_com_get_device_attr_result {
111 u8 addr[EFA_GID_SIZE];
116 u32 admin_api_version;
118 u32 supported_features;
122 u32 max_sq_depth; /* wqes */
123 u32 max_rq_depth; /* wqes */
125 u32 max_cq_depth; /* cqes */
135 u32 event_bitmask; /* EQ events bitmask */
145 struct efa_com_get_hw_hints_result {
146 u16 mmio_read_timeout;
147 u16 driver_watchdog_timeout;
148 u16 admin_completion_timeout;
153 struct efa_com_mem_addr {
158 /* Used at indirect mode page list chunks for chaining */
159 struct efa_com_ctrl_buff_info {
160 /* indicates length of the buffer pointed by control_buffer_address. */
162 /* points to control buffer (direct or indirect) */
163 struct efa_com_mem_addr address;
166 struct efa_com_reg_mr_params {
167 /* Memory region length, in bytes. */
168 u64 mr_length_in_bytes;
169 /* IO Virtual Address associated with this MR. */
171 /* words 8:15: Physical Buffer List, each element is page-aligned. */
174 * Inline array of physical addresses of app pages
175 * (optimization for short region reservations)
177 u64 inline_pbl_array[4];
179 * Describes the next physically contiguous chunk of indirect
180 * page list. A page list contains physical addresses of command
181 * data pages. Data pages are 4KB; page list chunks are
184 struct efa_com_ctrl_buff_info pbl;
186 /* number of pages in PBL (redundant, could be calculated) */
188 /* Protection Domain */
191 * phys_page_size_shift - page size is (1 << phys_page_size_shift)
192 * Page size is used for building the Virtual to Physical
196 /* see permissions field of struct efa_admin_reg_mr_cmd */
202 struct efa_com_reg_mr_result {
204 * To be used in conjunction with local buffers references in SQ and
209 * To be used in incoming RDMA semantics messages to refer to remotely
210 * accessed memory region
215 struct efa_com_dereg_mr_params {
219 struct efa_com_alloc_pd_result {
223 struct efa_com_dealloc_pd_params {
227 struct efa_com_alloc_uar_result {
231 struct efa_com_dealloc_uar_params {
235 struct efa_com_get_stats_params {
236 /* see enum efa_admin_get_stats_type */
238 /* see enum efa_admin_get_stats_scope */
243 struct efa_com_basic_stats {
251 struct efa_com_messages_stats {
258 struct efa_com_rdma_read_stats {
265 union efa_com_get_stats_result {
266 struct efa_com_basic_stats basic_stats;
267 struct efa_com_messages_stats messages_stats;
268 struct efa_com_rdma_read_stats rdma_read_stats;
271 int efa_com_create_qp(struct efa_com_dev *edev,
272 struct efa_com_create_qp_params *params,
273 struct efa_com_create_qp_result *res);
274 int efa_com_modify_qp(struct efa_com_dev *edev,
275 struct efa_com_modify_qp_params *params);
276 int efa_com_query_qp(struct efa_com_dev *edev,
277 struct efa_com_query_qp_params *params,
278 struct efa_com_query_qp_result *result);
279 int efa_com_destroy_qp(struct efa_com_dev *edev,
280 struct efa_com_destroy_qp_params *params);
281 int efa_com_create_cq(struct efa_com_dev *edev,
282 struct efa_com_create_cq_params *params,
283 struct efa_com_create_cq_result *result);
284 int efa_com_destroy_cq(struct efa_com_dev *edev,
285 struct efa_com_destroy_cq_params *params);
286 int efa_com_register_mr(struct efa_com_dev *edev,
287 struct efa_com_reg_mr_params *params,
288 struct efa_com_reg_mr_result *result);
289 int efa_com_dereg_mr(struct efa_com_dev *edev,
290 struct efa_com_dereg_mr_params *params);
291 int efa_com_create_ah(struct efa_com_dev *edev,
292 struct efa_com_create_ah_params *params,
293 struct efa_com_create_ah_result *result);
294 int efa_com_destroy_ah(struct efa_com_dev *edev,
295 struct efa_com_destroy_ah_params *params);
296 int efa_com_get_device_attr(struct efa_com_dev *edev,
297 struct efa_com_get_device_attr_result *result);
298 int efa_com_get_hw_hints(struct efa_com_dev *edev,
299 struct efa_com_get_hw_hints_result *result);
301 efa_com_check_supported_feature_id(struct efa_com_dev *edev,
302 enum efa_admin_aq_feature_id feature_id);
303 int efa_com_set_feature_ex(struct efa_com_dev *edev,
304 struct efa_admin_set_feature_resp *set_resp,
305 struct efa_admin_set_feature_cmd *set_cmd,
306 enum efa_admin_aq_feature_id feature_id,
307 dma_addr_t control_buf_dma_addr,
308 u32 control_buff_size);
309 int efa_com_set_aenq_config(struct efa_com_dev *edev, u32 groups);
310 int efa_com_alloc_pd(struct efa_com_dev *edev,
311 struct efa_com_alloc_pd_result *result);
312 int efa_com_dealloc_pd(struct efa_com_dev *edev,
313 struct efa_com_dealloc_pd_params *params);
314 int efa_com_alloc_uar(struct efa_com_dev *edev,
315 struct efa_com_alloc_uar_result *result);
316 int efa_com_dealloc_uar(struct efa_com_dev *edev,
317 struct efa_com_dealloc_uar_params *params);
318 int efa_com_get_stats(struct efa_com_dev *edev,
319 struct efa_com_get_stats_params *params,
320 union efa_com_get_stats_result *result);
322 #endif /* _EFA_COM_CMD_H_ */