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