• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
13 enum 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 
34 enum 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 */
44 enum 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 */
52 enum 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 
62 enum 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 
68 enum 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  */
77 struct 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 
94 struct 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 
153 struct 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 
191 struct 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 
232 struct efa_admin_modify_qp_resp {
233 	/* Common Admin Queue completion descriptor */
234 	struct efa_admin_acq_common_desc acq_common_desc;
235 };
236 
237 struct 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 
245 struct 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 
268 struct 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 
276 struct 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  */
285 struct 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 
299 struct 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 
310 struct 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 
321 struct 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  */
332 struct 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 
397 struct 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 
414 struct 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 
422 struct efa_admin_dereg_mr_resp {
423 	/* Common Admin Queue completion descriptor */
424 	struct efa_admin_acq_common_desc acq_common_desc;
425 };
426 
427 struct 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 
476 struct 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 
485 struct 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 
494 struct 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  */
502 struct 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 
521 struct 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 
533 struct 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 
543 struct 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 
553 struct 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 
565 struct 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 
580 struct 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 
615 struct 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 
676 struct 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 
684 struct 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  */
696 struct 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 
710 struct 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 
720 struct 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 
738 struct 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 
753 struct 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 
761 struct efa_admin_alloc_pd_cmd {
762 	struct efa_admin_aq_common_desc aq_common_descriptor;
763 };
764 
765 struct 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 
775 struct 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 
785 struct efa_admin_dealloc_pd_resp {
786 	struct efa_admin_acq_common_desc acq_common_desc;
787 };
788 
789 struct efa_admin_alloc_uar_cmd {
790 	struct efa_admin_aq_common_desc aq_common_descriptor;
791 };
792 
793 struct 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 
803 struct 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 
813 struct efa_admin_dealloc_uar_resp {
814 	struct efa_admin_acq_common_desc acq_common_desc;
815 };
816 
817 /* asynchronous event notification groups */
818 enum 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 
826 enum efa_admin_aenq_notification_syndrom {
827 	EFA_ADMIN_SUSPEND                           = 0,
828 	EFA_ADMIN_RESUME                            = 1,
829 	EFA_ADMIN_UPDATE_HINTS                      = 2,
830 };
831 
832 struct 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 
841 enum efa_admin_os_type {
842 	EFA_ADMIN_OS_LINUX                          = 0,
843 };
844 
845 struct 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