summaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/efa/efa_admin_defs.h
blob: 35700c93e639e46127d88f7bd9c45a3a0928e8ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/* SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause */
/*
 * Copyright 2018-2024 Amazon.com, Inc. or its affiliates. All rights reserved.
 */

#ifndef _EFA_ADMIN_H_
#define _EFA_ADMIN_H_

enum efa_admin_aq_completion_status {
	EFA_ADMIN_SUCCESS                           = 0,
	EFA_ADMIN_RESOURCE_ALLOCATION_FAILURE       = 1,
	EFA_ADMIN_BAD_OPCODE                        = 2,
	EFA_ADMIN_UNSUPPORTED_OPCODE                = 3,
	EFA_ADMIN_MALFORMED_REQUEST                 = 4,
	/* Additional status is provided in ACQ entry extended_status */
	EFA_ADMIN_ILLEGAL_PARAMETER                 = 5,
	EFA_ADMIN_UNKNOWN_ERROR                     = 6,
	EFA_ADMIN_RESOURCE_BUSY                     = 7,
};

struct efa_admin_aq_common_desc {
	/*
	 * 11:0 : command_id
	 * 15:12 : reserved12
	 */
	u16 command_id;

	/* as appears in efa_admin_aq_opcode */
	u8 opcode;

	/*
	 * 0 : phase
	 * 1 : ctrl_data - control buffer address valid
	 * 2 : ctrl_data_indirect - control buffer address
	 *    points to list of pages with addresses of control
	 *    buffers
	 * 7:3 : reserved3
	 */
	u8 flags;
};

/*
 * used in efa_admin_aq_entry. Can point directly to control data, or to a
 * page list chunk. Used also at the end of indirect mode page list chunks,
 * for chaining.
 */
struct efa_admin_ctrl_buff_info {
	u32 length;

	struct efa_common_mem_addr address;
};

struct efa_admin_aq_entry {
	struct efa_admin_aq_common_desc aq_common_descriptor;

	union {
		u32 inline_data_w1[3];

		struct efa_admin_ctrl_buff_info control_buffer;
	} u;

	u32 inline_data_w4[12];
};

struct efa_admin_acq_common_desc {
	/*
	 * command identifier to associate it with the aq descriptor
	 * 11:0 : command_id
	 * 15:12 : reserved12
	 */
	u16 command;

	u8 status;

	/*
	 * 0 : phase
	 * 7:1 : reserved1
	 */
	u8 flags;

	u16 extended_status;

	/*
	 * indicates to the driver which AQ entry has been consumed by the
	 * device and could be reused
	 */
	u16 sq_head_indx;
};

struct efa_admin_acq_entry {
	struct efa_admin_acq_common_desc acq_common_descriptor;

	u32 response_specific_data[14];
};

struct efa_admin_aenq_common_desc {
	u16 group;

	u16 syndrome;

	/*
	 * 0 : phase
	 * 7:1 : reserved - MBZ
	 */
	u8 flags;

	u8 reserved1[3];

	u32 timestamp_low;

	u32 timestamp_high;
};

struct efa_admin_aenq_entry {
	struct efa_admin_aenq_common_desc aenq_common_desc;

	/* command specific inline data */
	u32 inline_data_w4[12];
};

enum efa_admin_eqe_event_type {
	EFA_ADMIN_EQE_EVENT_TYPE_COMPLETION         = 0,
};

/* Completion event */
struct efa_admin_comp_event {
	/* CQ number */
	u16 cqn;

	/* MBZ */
	u16 reserved;

	/* MBZ */
	u32 reserved2;
};

/* Event Queue Element */
struct efa_admin_eqe {
	/*
	 * 0 : phase
	 * 8:1 : event_type - Event type
	 * 31:9 : reserved - MBZ
	 */
	u32 common;

	/* MBZ */
	u32 reserved;

	union {
		/* Event data */
		u32 event_data[2];

		/* Completion Event */
		struct efa_admin_comp_event comp_event;
	} u;
};

/* aq_common_desc */
#define EFA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK            GENMASK(11, 0)
#define EFA_ADMIN_AQ_COMMON_DESC_PHASE_MASK                 BIT(0)
#define EFA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK             BIT(1)
#define EFA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK    BIT(2)

/* acq_common_desc */
#define EFA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK           GENMASK(11, 0)
#define EFA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK                BIT(0)

/* aenq_common_desc */
#define EFA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK               BIT(0)

/* eqe */
#define EFA_ADMIN_EQE_PHASE_MASK                            BIT(0)
#define EFA_ADMIN_EQE_EVENT_TYPE_MASK                       GENMASK(8, 1)

#endif /* _EFA_ADMIN_H_ */