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_H_
7 #define _EFA_ADMIN_H_
8 
9 enum efa_admin_aq_completion_status {
10 	EFA_ADMIN_SUCCESS                           = 0,
11 	EFA_ADMIN_RESOURCE_ALLOCATION_FAILURE       = 1,
12 	EFA_ADMIN_BAD_OPCODE                        = 2,
13 	EFA_ADMIN_UNSUPPORTED_OPCODE                = 3,
14 	EFA_ADMIN_MALFORMED_REQUEST                 = 4,
15 	/* Additional status is provided in ACQ entry extended_status */
16 	EFA_ADMIN_ILLEGAL_PARAMETER                 = 5,
17 	EFA_ADMIN_UNKNOWN_ERROR                     = 6,
18 	EFA_ADMIN_RESOURCE_BUSY                     = 7,
19 };
20 
21 struct efa_admin_aq_common_desc {
22 	/*
23 	 * 11:0 : command_id
24 	 * 15:12 : reserved12
25 	 */
26 	u16 command_id;
27 
28 	/* as appears in efa_admin_aq_opcode */
29 	u8 opcode;
30 
31 	/*
32 	 * 0 : phase
33 	 * 1 : ctrl_data - control buffer address valid
34 	 * 2 : ctrl_data_indirect - control buffer address
35 	 *    points to list of pages with addresses of control
36 	 *    buffers
37 	 * 7:3 : reserved3
38 	 */
39 	u8 flags;
40 };
41 
42 /*
43  * used in efa_admin_aq_entry. Can point directly to control data, or to a
44  * page list chunk. Used also at the end of indirect mode page list chunks,
45  * for chaining.
46  */
47 struct efa_admin_ctrl_buff_info {
48 	u32 length;
49 
50 	struct efa_common_mem_addr address;
51 };
52 
53 struct efa_admin_aq_entry {
54 	struct efa_admin_aq_common_desc aq_common_descriptor;
55 
56 	union {
57 		u32 inline_data_w1[3];
58 
59 		struct efa_admin_ctrl_buff_info control_buffer;
60 	} u;
61 
62 	u32 inline_data_w4[12];
63 };
64 
65 struct efa_admin_acq_common_desc {
66 	/*
67 	 * command identifier to associate it with the aq descriptor
68 	 * 11:0 : command_id
69 	 * 15:12 : reserved12
70 	 */
71 	u16 command;
72 
73 	u8 status;
74 
75 	/*
76 	 * 0 : phase
77 	 * 7:1 : reserved1
78 	 */
79 	u8 flags;
80 
81 	u16 extended_status;
82 
83 	/*
84 	 * indicates to the driver which AQ entry has been consumed by the
85 	 *    device and could be reused
86 	 */
87 	u16 sq_head_indx;
88 };
89 
90 struct efa_admin_acq_entry {
91 	struct efa_admin_acq_common_desc acq_common_descriptor;
92 
93 	u32 response_specific_data[14];
94 };
95 
96 struct efa_admin_aenq_common_desc {
97 	u16 group;
98 
99 	u16 syndrom;
100 
101 	/*
102 	 * 0 : phase
103 	 * 7:1 : reserved - MBZ
104 	 */
105 	u8 flags;
106 
107 	u8 reserved1[3];
108 
109 	u32 timestamp_low;
110 
111 	u32 timestamp_high;
112 };
113 
114 struct efa_admin_aenq_entry {
115 	struct efa_admin_aenq_common_desc aenq_common_desc;
116 
117 	/* command specific inline data */
118 	u32 inline_data_w4[12];
119 };
120 
121 /* aq_common_desc */
122 #define EFA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK            GENMASK(11, 0)
123 #define EFA_ADMIN_AQ_COMMON_DESC_PHASE_MASK                 BIT(0)
124 #define EFA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK             BIT(1)
125 #define EFA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK    BIT(2)
126 
127 /* acq_common_desc */
128 #define EFA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK           GENMASK(11, 0)
129 #define EFA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK                BIT(0)
130 
131 /* aenq_common_desc */
132 #define EFA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK               BIT(0)
133 
134 #endif /* _EFA_ADMIN_H_ */
135