Blame view

include/fsl-mc/fsl_dprc.h 36.9 KB
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
1
2
3
4
5
6
7
8
9
10
11
12
  /*
   * Freescale Layerscape MC I/O wrapper
   *
   * Copyright (C) 2013-2015 Freescale Semiconductor, Inc.
   * Author: German Rivera <German.Rivera@freescale.com>
   *
   * SPDX-License-Identifier:	GPL-2.0+
   */
  #ifndef _FSL_DPRC_H
  #define _FSL_DPRC_H
  
  /* DPRC Version */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
13
  #define DPRC_VER_MAJOR				5
53e353fc3   Prabhakar Kushwaha   driver: net: fsl-...
14
  #define DPRC_VER_MINOR				1
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
15
16
17
18
  
  /* Command IDs */
  #define DPRC_CMDID_CLOSE			0x800
  #define DPRC_CMDID_OPEN				0x805
1ebbe4fcf   Prabhakar Kushwaha   driver: net: fsl-...
19
  #define DPRC_CMDID_CREATE			0x905
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
20
21
22
  
  #define DPRC_CMDID_GET_ATTR			0x004
  #define DPRC_CMDID_RESET_CONT			0x005
1ebbe4fcf   Prabhakar Kushwaha   driver: net: fsl-...
23
24
  #define DPRC_CMDID_CREATE_CONT			0x151
  #define DPRC_CMDID_DESTROY_CONT			0x152
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  #define DPRC_CMDID_GET_CONT_ID			0x830
  #define DPRC_CMDID_GET_OBJ_COUNT		0x159
  #define DPRC_CMDID_GET_OBJ			0x15A
  #define DPRC_CMDID_GET_RES_COUNT		0x15B
  #define DPRC_CMDID_GET_RES_IDS			0x15C
  #define DPRC_CMDID_GET_OBJ_REG			0x15E
  
  #define DPRC_CMDID_CONNECT			0x167
  #define DPRC_CMDID_DISCONNECT			0x168
  #define DPRC_CMDID_GET_CONNECTION		0x16C
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_RSP_GET_CONTAINER_ID(cmd, container_id) \
  	MC_RSP_OP(cmd, 0, 0,  32,  int,	    container_id)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_CMD_OPEN(cmd, container_id) \
  	MC_CMD_OP(cmd, 0, 0,  32, int,	    container_id)
  
  /*                cmd, param, offset, width, type, arg_name */
1ebbe4fcf   Prabhakar Kushwaha   driver: net: fsl-...
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
  #define DPRC_CMD_CREATE_CONTAINER(cmd, cfg) \
  do { \
  	MC_CMD_OP(cmd, 0, 32, 16, uint16_t, cfg->icid); \
  	MC_CMD_OP(cmd, 0, 0,  32, uint32_t, cfg->options); \
  	MC_CMD_OP(cmd, 1, 32, 32, int,	    cfg->portal_id); \
  	MC_CMD_OP(cmd, 2, 0,  8,  char,	    cfg->label[0]);\
  	MC_CMD_OP(cmd, 2, 8,  8,  char,	    cfg->label[1]);\
  	MC_CMD_OP(cmd, 2, 16, 8,  char,	    cfg->label[2]);\
  	MC_CMD_OP(cmd, 2, 24, 8,  char,	    cfg->label[3]);\
  	MC_CMD_OP(cmd, 2, 32, 8,  char,	    cfg->label[4]);\
  	MC_CMD_OP(cmd, 2, 40, 8,  char,	    cfg->label[5]);\
  	MC_CMD_OP(cmd, 2, 48, 8,  char,	    cfg->label[6]);\
  	MC_CMD_OP(cmd, 2, 56, 8,  char,	    cfg->label[7]);\
  	MC_CMD_OP(cmd, 3, 0,  8,  char,	    cfg->label[8]);\
  	MC_CMD_OP(cmd, 3, 8,  8,  char,	    cfg->label[9]);\
  	MC_CMD_OP(cmd, 3, 16, 8,  char,	    cfg->label[10]);\
  	MC_CMD_OP(cmd, 3, 24, 8,  char,	    cfg->label[11]);\
  	MC_CMD_OP(cmd, 3, 32, 8,  char,	    cfg->label[12]);\
  	MC_CMD_OP(cmd, 3, 40, 8,  char,	    cfg->label[13]);\
  	MC_CMD_OP(cmd, 3, 48, 8,  char,	    cfg->label[14]);\
  	MC_CMD_OP(cmd, 3, 56, 8,  char,	    cfg->label[15]);\
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_RSP_CREATE_CONTAINER(cmd, child_container_id, child_portal_offset)\
  do { \
  	MC_RSP_OP(cmd, 1, 0,  32, int,	   child_container_id); \
  	MC_RSP_OP(cmd, 2, 0,  64, uint64_t, child_portal_offset);\
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id) \
  	MC_CMD_OP(cmd, 0, 0,  32, int,	    child_container_id)
  
  /*                cmd, param, offset, width, type, arg_name */
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
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
  #define DPRC_CMD_RESET_CONTAINER(cmd, child_container_id) \
  	MC_CMD_OP(cmd, 0, 0,  32, int,	    child_container_id)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_RSP_GET_ATTRIBUTES(cmd, attr) \
  do { \
  	MC_RSP_OP(cmd, 0, 0,  32, int,	    attr->container_id); \
  	MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->icid); \
  	MC_RSP_OP(cmd, 1, 0,  32, uint32_t, attr->options);\
  	MC_RSP_OP(cmd, 1, 32, 32, int,      attr->portal_id); \
  	MC_RSP_OP(cmd, 2, 0,  16, uint16_t, attr->version.major);\
  	MC_RSP_OP(cmd, 2, 16, 16, uint16_t, attr->version.minor);\
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_RSP_GET_OBJ_COUNT(cmd, obj_count) \
  	MC_RSP_OP(cmd, 0, 32, 32, int,      obj_count)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_CMD_GET_OBJ(cmd, obj_index) \
  	MC_CMD_OP(cmd, 0, 0,  32, int,	    obj_index)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_RSP_GET_OBJ(cmd, obj_desc) \
  do { \
  	MC_RSP_OP(cmd, 0, 32, 32, int,	    obj_desc->id); \
  	MC_RSP_OP(cmd, 1, 0,  16, uint16_t, obj_desc->vendor); \
  	MC_RSP_OP(cmd, 1, 16, 8,  uint8_t,  obj_desc->irq_count); \
  	MC_RSP_OP(cmd, 1, 24, 8,  uint8_t,  obj_desc->region_count); \
  	MC_RSP_OP(cmd, 1, 32, 32, uint32_t, obj_desc->state);\
  	MC_RSP_OP(cmd, 2, 0,  16, uint16_t, obj_desc->ver_major);\
  	MC_RSP_OP(cmd, 2, 16, 16, uint16_t, obj_desc->ver_minor);\
53e353fc3   Prabhakar Kushwaha   driver: net: fsl-...
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
176
177
178
179
  	MC_RSP_OP(cmd, 2, 32, 16, uint16_t, obj_desc->flags); \
  	MC_RSP_OP(cmd, 3, 0,  8,  char,	    obj_desc->type[0]);\
  	MC_RSP_OP(cmd, 3, 8,  8,  char,	    obj_desc->type[1]);\
  	MC_RSP_OP(cmd, 3, 16, 8,  char,	    obj_desc->type[2]);\
  	MC_RSP_OP(cmd, 3, 24, 8,  char,	    obj_desc->type[3]);\
  	MC_RSP_OP(cmd, 3, 32, 8,  char,	    obj_desc->type[4]);\
  	MC_RSP_OP(cmd, 3, 40, 8,  char,	    obj_desc->type[5]);\
  	MC_RSP_OP(cmd, 3, 48, 8,  char,	    obj_desc->type[6]);\
  	MC_RSP_OP(cmd, 3, 56, 8,  char,	    obj_desc->type[7]);\
  	MC_RSP_OP(cmd, 4, 0,  8,  char,	    obj_desc->type[8]);\
  	MC_RSP_OP(cmd, 4, 8,  8,  char,	    obj_desc->type[9]);\
  	MC_RSP_OP(cmd, 4, 16, 8,  char,	    obj_desc->type[10]);\
  	MC_RSP_OP(cmd, 4, 24, 8,  char,	    obj_desc->type[11]);\
  	MC_RSP_OP(cmd, 4, 32, 8,  char,	    obj_desc->type[12]);\
  	MC_RSP_OP(cmd, 4, 40, 8,  char,	    obj_desc->type[13]);\
  	MC_RSP_OP(cmd, 4, 48, 8,  char,	    obj_desc->type[14]);\
  	MC_RSP_OP(cmd, 4, 56, 8,  char,	    obj_desc->type[15]);\
  	MC_RSP_OP(cmd, 5, 0,  8,  char,	    obj_desc->label[0]);\
  	MC_RSP_OP(cmd, 5, 8,  8,  char,	    obj_desc->label[1]);\
  	MC_RSP_OP(cmd, 5, 16, 8,  char,	    obj_desc->label[2]);\
  	MC_RSP_OP(cmd, 5, 24, 8,  char,	    obj_desc->label[3]);\
  	MC_RSP_OP(cmd, 5, 32, 8,  char,	    obj_desc->label[4]);\
  	MC_RSP_OP(cmd, 5, 40, 8,  char,	    obj_desc->label[5]);\
  	MC_RSP_OP(cmd, 5, 48, 8,  char,	    obj_desc->label[6]);\
  	MC_RSP_OP(cmd, 5, 56, 8,  char,	    obj_desc->label[7]);\
  	MC_RSP_OP(cmd, 6, 0,  8,  char,	    obj_desc->label[8]);\
  	MC_RSP_OP(cmd, 6, 8,  8,  char,	    obj_desc->label[9]);\
  	MC_RSP_OP(cmd, 6, 16, 8,  char,	    obj_desc->label[10]);\
  	MC_RSP_OP(cmd, 6, 24, 8,  char,	    obj_desc->label[11]);\
  	MC_RSP_OP(cmd, 6, 32, 8,  char,	    obj_desc->label[12]);\
  	MC_RSP_OP(cmd, 6, 40, 8,  char,	    obj_desc->label[13]);\
  	MC_RSP_OP(cmd, 6, 48, 8,  char,	    obj_desc->label[14]);\
  	MC_RSP_OP(cmd, 6, 56, 8,  char,	    obj_desc->label[15]);\
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_CMD_GET_OBJ_DESC(cmd, obj_type, obj_id) \
  do { \
  	MC_CMD_OP(cmd, 0, 0,  32, int,	    obj_id);\
  	MC_CMD_OP(cmd, 1, 0,  8,  char,     obj_type[0]);\
  	MC_CMD_OP(cmd, 1, 8,  8,  char,	    obj_type[1]);\
  	MC_CMD_OP(cmd, 1, 16, 8,  char,	    obj_type[2]);\
  	MC_CMD_OP(cmd, 1, 24, 8,  char,	    obj_type[3]);\
  	MC_CMD_OP(cmd, 1, 32, 8,  char,	    obj_type[4]);\
  	MC_CMD_OP(cmd, 1, 40, 8,  char,	    obj_type[5]);\
  	MC_CMD_OP(cmd, 1, 48, 8,  char,	    obj_type[6]);\
  	MC_CMD_OP(cmd, 1, 56, 8,  char,	    obj_type[7]);\
  	MC_CMD_OP(cmd, 2, 0,  8,  char,	    obj_type[8]);\
  	MC_CMD_OP(cmd, 2, 8,  8,  char,	    obj_type[9]);\
  	MC_CMD_OP(cmd, 2, 16, 8,  char,	    obj_type[10]);\
  	MC_CMD_OP(cmd, 2, 24, 8,  char,	    obj_type[11]);\
  	MC_CMD_OP(cmd, 2, 32, 8,  char,	    obj_type[12]);\
  	MC_CMD_OP(cmd, 2, 40, 8,  char,	    obj_type[13]);\
  	MC_CMD_OP(cmd, 2, 48, 8,  char,     obj_type[14]);\
  	MC_CMD_OP(cmd, 2, 56, 8,  char,	    obj_type[15]);\
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_RSP_GET_OBJ_DESC(cmd, obj_desc) \
  do { \
  	MC_RSP_OP(cmd, 0, 32, 32, int,	    obj_desc->id); \
  	MC_RSP_OP(cmd, 1, 0,  16, uint16_t, obj_desc->vendor); \
  	MC_RSP_OP(cmd, 1, 16, 8,  uint8_t,  obj_desc->irq_count); \
  	MC_RSP_OP(cmd, 1, 24, 8,  uint8_t,  obj_desc->region_count); \
  	MC_RSP_OP(cmd, 1, 32, 32, uint32_t, obj_desc->state);\
  	MC_RSP_OP(cmd, 2, 0,  16, uint16_t, obj_desc->ver_major);\
  	MC_RSP_OP(cmd, 2, 16, 16, uint16_t, obj_desc->ver_minor);\
  	MC_RSP_OP(cmd, 2, 32, 16, uint16_t, obj_desc->flags); \
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
  	MC_RSP_OP(cmd, 3, 0,  8,  char,	    obj_desc->type[0]);\
  	MC_RSP_OP(cmd, 3, 8,  8,  char,	    obj_desc->type[1]);\
  	MC_RSP_OP(cmd, 3, 16, 8,  char,	    obj_desc->type[2]);\
  	MC_RSP_OP(cmd, 3, 24, 8,  char,	    obj_desc->type[3]);\
  	MC_RSP_OP(cmd, 3, 32, 8,  char,	    obj_desc->type[4]);\
  	MC_RSP_OP(cmd, 3, 40, 8,  char,	    obj_desc->type[5]);\
  	MC_RSP_OP(cmd, 3, 48, 8,  char,	    obj_desc->type[6]);\
  	MC_RSP_OP(cmd, 3, 56, 8,  char,	    obj_desc->type[7]);\
  	MC_RSP_OP(cmd, 4, 0,  8,  char,	    obj_desc->type[8]);\
  	MC_RSP_OP(cmd, 4, 8,  8,  char,	    obj_desc->type[9]);\
  	MC_RSP_OP(cmd, 4, 16, 8,  char,	    obj_desc->type[10]);\
  	MC_RSP_OP(cmd, 4, 24, 8,  char,	    obj_desc->type[11]);\
  	MC_RSP_OP(cmd, 4, 32, 8,  char,	    obj_desc->type[12]);\
  	MC_RSP_OP(cmd, 4, 40, 8,  char,	    obj_desc->type[13]);\
  	MC_RSP_OP(cmd, 4, 48, 8,  char,	    obj_desc->type[14]);\
  	MC_RSP_OP(cmd, 4, 56, 8,  char,	    obj_desc->type[15]);\
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
  	MC_RSP_OP(cmd, 5, 0,  8,  char,	    obj_desc->label[0]);\
  	MC_RSP_OP(cmd, 5, 8,  8,  char,	    obj_desc->label[1]);\
  	MC_RSP_OP(cmd, 5, 16, 8,  char,	    obj_desc->label[2]);\
  	MC_RSP_OP(cmd, 5, 24, 8,  char,	    obj_desc->label[3]);\
  	MC_RSP_OP(cmd, 5, 32, 8,  char,	    obj_desc->label[4]);\
  	MC_RSP_OP(cmd, 5, 40, 8,  char,	    obj_desc->label[5]);\
  	MC_RSP_OP(cmd, 5, 48, 8,  char,	    obj_desc->label[6]);\
  	MC_RSP_OP(cmd, 5, 56, 8,  char,	    obj_desc->label[7]);\
  	MC_RSP_OP(cmd, 6, 0,  8,  char,	    obj_desc->label[8]);\
  	MC_RSP_OP(cmd, 6, 8,  8,  char,	    obj_desc->label[9]);\
  	MC_RSP_OP(cmd, 6, 16, 8,  char,	    obj_desc->label[10]);\
  	MC_RSP_OP(cmd, 6, 24, 8,  char,	    obj_desc->label[11]);\
  	MC_RSP_OP(cmd, 6, 32, 8,  char,	    obj_desc->label[12]);\
  	MC_RSP_OP(cmd, 6, 40, 8,  char,	    obj_desc->label[13]);\
  	MC_RSP_OP(cmd, 6, 48, 8,  char,	    obj_desc->label[14]);\
  	MC_RSP_OP(cmd, 6, 56, 8,  char,	    obj_desc->label[15]);\
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_CMD_GET_RES_COUNT(cmd, type) \
  do { \
  	MC_CMD_OP(cmd, 1, 0,  8,  char,	    type[0]);\
  	MC_CMD_OP(cmd, 1, 8,  8,  char,	    type[1]);\
  	MC_CMD_OP(cmd, 1, 16, 8,  char,	    type[2]);\
  	MC_CMD_OP(cmd, 1, 24, 8,  char,	    type[3]);\
  	MC_CMD_OP(cmd, 1, 32, 8,  char,	    type[4]);\
  	MC_CMD_OP(cmd, 1, 40, 8,  char,	    type[5]);\
  	MC_CMD_OP(cmd, 1, 48, 8,  char,	    type[6]);\
  	MC_CMD_OP(cmd, 1, 56, 8,  char,	    type[7]);\
  	MC_CMD_OP(cmd, 2, 0,  8,  char,	    type[8]);\
  	MC_CMD_OP(cmd, 2, 8,  8,  char,	    type[9]);\
  	MC_CMD_OP(cmd, 2, 16, 8,  char,	    type[10]);\
  	MC_CMD_OP(cmd, 2, 24, 8,  char,	    type[11]);\
  	MC_CMD_OP(cmd, 2, 32, 8,  char,	    type[12]);\
  	MC_CMD_OP(cmd, 2, 40, 8,  char,	    type[13]);\
  	MC_CMD_OP(cmd, 2, 48, 8,  char,	    type[14]);\
  	MC_CMD_OP(cmd, 2, 56, 8,  char,	    type[15]);\
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_RSP_GET_RES_COUNT(cmd, res_count) \
  	MC_RSP_OP(cmd, 0, 0,  32, int,	    res_count)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_CMD_GET_RES_IDS(cmd, range_desc, type) \
  do { \
  	MC_CMD_OP(cmd, 0, 42, 7,  enum dprc_iter_status, \
  					    range_desc->iter_status); \
  	MC_CMD_OP(cmd, 1, 0,  32, int,	    range_desc->base_id); \
  	MC_CMD_OP(cmd, 1, 32, 32, int,	    range_desc->last_id);\
  	MC_CMD_OP(cmd, 2, 0,  8,  char,	    type[0]);\
  	MC_CMD_OP(cmd, 2, 8,  8,  char,	    type[1]);\
  	MC_CMD_OP(cmd, 2, 16, 8,  char,	    type[2]);\
  	MC_CMD_OP(cmd, 2, 24, 8,  char,	    type[3]);\
  	MC_CMD_OP(cmd, 2, 32, 8,  char,	    type[4]);\
  	MC_CMD_OP(cmd, 2, 40, 8,  char,     type[5]);\
  	MC_CMD_OP(cmd, 2, 48, 8,  char,	    type[6]);\
  	MC_CMD_OP(cmd, 2, 56, 8,  char,	    type[7]);\
  	MC_CMD_OP(cmd, 3, 0,  8,  char,	    type[8]);\
  	MC_CMD_OP(cmd, 3, 8,  8,  char,	    type[9]);\
  	MC_CMD_OP(cmd, 3, 16, 8,  char,	    type[10]);\
  	MC_CMD_OP(cmd, 3, 24, 8,  char,	    type[11]);\
  	MC_CMD_OP(cmd, 3, 32, 8,  char,	    type[12]);\
  	MC_CMD_OP(cmd, 3, 40, 8,  char,	    type[13]);\
  	MC_CMD_OP(cmd, 3, 48, 8,  char,	    type[14]);\
  	MC_CMD_OP(cmd, 3, 56, 8,  char,	    type[15]);\
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_RSP_GET_RES_IDS(cmd, range_desc) \
  do { \
  	MC_RSP_OP(cmd, 0, 42, 7,  enum dprc_iter_status, \
  					    range_desc->iter_status);\
  	MC_RSP_OP(cmd, 1, 0,  32, int,	    range_desc->base_id); \
  	MC_RSP_OP(cmd, 1, 32, 32, int,	    range_desc->last_id);\
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index) \
  do { \
  	MC_CMD_OP(cmd, 0, 0,  32, int,	    obj_id); \
  	MC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  region_index);\
  	MC_CMD_OP(cmd, 3, 0,  8,  char,	    obj_type[0]);\
  	MC_CMD_OP(cmd, 3, 8,  8,  char,	    obj_type[1]);\
  	MC_CMD_OP(cmd, 3, 16, 8,  char,	    obj_type[2]);\
  	MC_CMD_OP(cmd, 3, 24, 8,  char,	    obj_type[3]);\
  	MC_CMD_OP(cmd, 3, 32, 8,  char,	    obj_type[4]);\
  	MC_CMD_OP(cmd, 3, 40, 8,  char,	    obj_type[5]);\
  	MC_CMD_OP(cmd, 3, 48, 8,  char,	    obj_type[6]);\
  	MC_CMD_OP(cmd, 3, 56, 8,  char,	    obj_type[7]);\
  	MC_CMD_OP(cmd, 4, 0,  8,  char,	    obj_type[8]);\
  	MC_CMD_OP(cmd, 4, 8,  8,  char,	    obj_type[9]);\
  	MC_CMD_OP(cmd, 4, 16, 8,  char,	    obj_type[10]);\
  	MC_CMD_OP(cmd, 4, 24, 8,  char,	    obj_type[11]);\
  	MC_CMD_OP(cmd, 4, 32, 8,  char,	    obj_type[12]);\
  	MC_CMD_OP(cmd, 4, 40, 8,  char,	    obj_type[13]);\
  	MC_CMD_OP(cmd, 4, 48, 8,  char,	    obj_type[14]);\
  	MC_CMD_OP(cmd, 4, 56, 8,  char,	    obj_type[15]);\
  } while (0)
  
  /*	param, offset, width,	type,		arg_name */
  #define DPRC_RSP_GET_OBJ_REGION(cmd, region_desc) \
  do { \
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
299
  	MC_RSP_OP(cmd, 1, 0,  32, uint32_t, region_desc->base_offset);\
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
300
  	MC_RSP_OP(cmd, 2, 0,  32, uint32_t, region_desc->size); \
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
301
302
  	MC_RSP_OP(cmd, 2, 32, 4,  enum dprc_region_type, region_desc->type);\
  	MC_RSP_OP(cmd, 3, 0,  32, uint32_t, region_desc->flags);\
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
303
304
305
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
306
  #define DPRC_CMD_SET_OBJ_LABEL(cmd, obj_type, obj_id, label) \
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
307
  do { \
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
308
  	MC_CMD_OP(cmd, 0, 0,  32, int,      obj_id); \
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
  	MC_CMD_OP(cmd, 1, 0,  8,  char,	    label[0]);\
  	MC_CMD_OP(cmd, 1, 8,  8,  char,	    label[1]);\
  	MC_CMD_OP(cmd, 1, 16, 8,  char,	    label[2]);\
  	MC_CMD_OP(cmd, 1, 24, 8,  char,	    label[3]);\
  	MC_CMD_OP(cmd, 1, 32, 8,  char,	    label[4]);\
  	MC_CMD_OP(cmd, 1, 40, 8,  char,	    label[5]);\
  	MC_CMD_OP(cmd, 1, 48, 8,  char,	    label[6]);\
  	MC_CMD_OP(cmd, 1, 56, 8,  char,	    label[7]);\
  	MC_CMD_OP(cmd, 2, 0,  8,  char,	    label[8]);\
  	MC_CMD_OP(cmd, 2, 8,  8,  char,	    label[9]);\
  	MC_CMD_OP(cmd, 2, 16, 8,  char,	    label[10]);\
  	MC_CMD_OP(cmd, 2, 24, 8,  char,	    label[11]);\
  	MC_CMD_OP(cmd, 2, 32, 8,  char,	    label[12]);\
  	MC_CMD_OP(cmd, 2, 40, 8,  char,	    label[13]);\
  	MC_CMD_OP(cmd, 2, 48, 8,  char,	    label[14]);\
  	MC_CMD_OP(cmd, 2, 56, 8,  char,	    label[15]);\
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
  	MC_CMD_OP(cmd, 3, 0,  8,  char,	    obj_type[0]);\
  	MC_CMD_OP(cmd, 3, 8,  8,  char,	    obj_type[1]);\
  	MC_CMD_OP(cmd, 3, 16, 8,  char,	    obj_type[2]);\
  	MC_CMD_OP(cmd, 3, 24, 8,  char,	    obj_type[3]);\
  	MC_CMD_OP(cmd, 3, 32, 8,  char,	    obj_type[4]);\
  	MC_CMD_OP(cmd, 3, 40, 8,  char,	    obj_type[5]);\
  	MC_CMD_OP(cmd, 3, 48, 8,  char,	    obj_type[6]);\
  	MC_CMD_OP(cmd, 3, 56, 8,  char,	    obj_type[7]);\
  	MC_CMD_OP(cmd, 4, 0,  8,  char,	    obj_type[8]);\
  	MC_CMD_OP(cmd, 4, 8,  8,  char,	    obj_type[9]);\
  	MC_CMD_OP(cmd, 4, 16, 8,  char,	    obj_type[10]);\
  	MC_CMD_OP(cmd, 4, 24, 8,  char,	    obj_type[11]);\
  	MC_CMD_OP(cmd, 4, 32, 8,  char,	    obj_type[12]);\
  	MC_CMD_OP(cmd, 4, 40, 8,  char,	    obj_type[13]);\
  	MC_CMD_OP(cmd, 4, 48, 8,  char,	    obj_type[14]);\
  	MC_CMD_OP(cmd, 4, 56, 8,  char,	    obj_type[15]);\
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
341
342
343
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
344
  #define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg) \
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
345
346
  do { \
  	MC_CMD_OP(cmd, 0, 0,  32, int,      endpoint1->id); \
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
347
  	MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
348
  	MC_CMD_OP(cmd, 1, 0,  32, int,	    endpoint2->id); \
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
349
  	MC_CMD_OP(cmd, 1, 32, 16, uint16_t, endpoint2->if_id); \
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
  	MC_CMD_OP(cmd, 2, 0,  8,  char,     endpoint1->type[0]); \
  	MC_CMD_OP(cmd, 2, 8,  8,  char,	    endpoint1->type[1]); \
  	MC_CMD_OP(cmd, 2, 16, 8,  char,	    endpoint1->type[2]); \
  	MC_CMD_OP(cmd, 2, 24, 8,  char,	    endpoint1->type[3]); \
  	MC_CMD_OP(cmd, 2, 32, 8,  char,	    endpoint1->type[4]); \
  	MC_CMD_OP(cmd, 2, 40, 8,  char,	    endpoint1->type[5]); \
  	MC_CMD_OP(cmd, 2, 48, 8,  char,	    endpoint1->type[6]); \
  	MC_CMD_OP(cmd, 2, 56, 8,  char,	    endpoint1->type[7]); \
  	MC_CMD_OP(cmd, 3, 0,  8,  char,	    endpoint1->type[8]); \
  	MC_CMD_OP(cmd, 3, 8,  8,  char,	    endpoint1->type[9]); \
  	MC_CMD_OP(cmd, 3, 16, 8,  char,	    endpoint1->type[10]); \
  	MC_CMD_OP(cmd, 3, 24, 8,  char,	    endpoint1->type[11]); \
  	MC_CMD_OP(cmd, 3, 32, 8,  char,     endpoint1->type[12]); \
  	MC_CMD_OP(cmd, 3, 40, 8,  char,	    endpoint1->type[13]); \
  	MC_CMD_OP(cmd, 3, 48, 8,  char,	    endpoint1->type[14]); \
  	MC_CMD_OP(cmd, 3, 56, 8,  char,	    endpoint1->type[15]); \
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
366
367
  	MC_CMD_OP(cmd, 4, 0,  32, uint32_t, cfg->max_rate); \
  	MC_CMD_OP(cmd, 4, 32, 32, uint32_t, cfg->committed_rate); \
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
  	MC_CMD_OP(cmd, 5, 0,  8,  char,	    endpoint2->type[0]); \
  	MC_CMD_OP(cmd, 5, 8,  8,  char,	    endpoint2->type[1]); \
  	MC_CMD_OP(cmd, 5, 16, 8,  char,	    endpoint2->type[2]); \
  	MC_CMD_OP(cmd, 5, 24, 8,  char,	    endpoint2->type[3]); \
  	MC_CMD_OP(cmd, 5, 32, 8,  char,	    endpoint2->type[4]); \
  	MC_CMD_OP(cmd, 5, 40, 8,  char,	    endpoint2->type[5]); \
  	MC_CMD_OP(cmd, 5, 48, 8,  char,	    endpoint2->type[6]); \
  	MC_CMD_OP(cmd, 5, 56, 8,  char,	    endpoint2->type[7]); \
  	MC_CMD_OP(cmd, 6, 0,  8,  char,	    endpoint2->type[8]); \
  	MC_CMD_OP(cmd, 6, 8,  8,  char,	    endpoint2->type[9]); \
  	MC_CMD_OP(cmd, 6, 16, 8,  char,	    endpoint2->type[10]); \
  	MC_CMD_OP(cmd, 6, 24, 8,  char,	    endpoint2->type[11]); \
  	MC_CMD_OP(cmd, 6, 32, 8,  char,	    endpoint2->type[12]); \
  	MC_CMD_OP(cmd, 6, 40, 8,  char,	    endpoint2->type[13]); \
  	MC_CMD_OP(cmd, 6, 48, 8,  char,	    endpoint2->type[14]); \
  	MC_CMD_OP(cmd, 6, 56, 8,  char,	    endpoint2->type[15]); \
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_CMD_DISCONNECT(cmd, endpoint) \
  do { \
  	MC_CMD_OP(cmd, 0, 0,  32, int,	    endpoint->id); \
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
390
  	MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint->if_id); \
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
  	MC_CMD_OP(cmd, 1, 0,  8,  char,	    endpoint->type[0]); \
  	MC_CMD_OP(cmd, 1, 8,  8,  char,	    endpoint->type[1]); \
  	MC_CMD_OP(cmd, 1, 16, 8,  char,	    endpoint->type[2]); \
  	MC_CMD_OP(cmd, 1, 24, 8,  char,	    endpoint->type[3]); \
  	MC_CMD_OP(cmd, 1, 32, 8,  char,	    endpoint->type[4]); \
  	MC_CMD_OP(cmd, 1, 40, 8,  char,	    endpoint->type[5]); \
  	MC_CMD_OP(cmd, 1, 48, 8,  char,	    endpoint->type[6]); \
  	MC_CMD_OP(cmd, 1, 56, 8,  char,	    endpoint->type[7]); \
  	MC_CMD_OP(cmd, 2, 0,  8,  char,	    endpoint->type[8]); \
  	MC_CMD_OP(cmd, 2, 8,  8,  char,	    endpoint->type[9]); \
  	MC_CMD_OP(cmd, 2, 16, 8,  char,	    endpoint->type[10]); \
  	MC_CMD_OP(cmd, 2, 24, 8,  char,	    endpoint->type[11]); \
  	MC_CMD_OP(cmd, 2, 32, 8,  char,	    endpoint->type[12]); \
  	MC_CMD_OP(cmd, 2, 40, 8,  char,	    endpoint->type[13]); \
  	MC_CMD_OP(cmd, 2, 48, 8,  char,	    endpoint->type[14]); \
  	MC_CMD_OP(cmd, 2, 56, 8,  char,	    endpoint->type[15]); \
  } while (0)
  
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \
  do { \
  	MC_CMD_OP(cmd, 0, 0,  32, int,      endpoint1->id); \
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
413
  	MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
  	MC_CMD_OP(cmd, 1, 0,  8,  char,     endpoint1->type[0]); \
  	MC_CMD_OP(cmd, 1, 8,  8,  char,	    endpoint1->type[1]); \
  	MC_CMD_OP(cmd, 1, 16, 8,  char,	    endpoint1->type[2]); \
  	MC_CMD_OP(cmd, 1, 24, 8,  char,	    endpoint1->type[3]); \
  	MC_CMD_OP(cmd, 1, 32, 8,  char,	    endpoint1->type[4]); \
  	MC_CMD_OP(cmd, 1, 40, 8,  char,	    endpoint1->type[5]); \
  	MC_CMD_OP(cmd, 1, 48, 8,  char,	    endpoint1->type[6]); \
  	MC_CMD_OP(cmd, 1, 56, 8,  char,	    endpoint1->type[7]); \
  	MC_CMD_OP(cmd, 2, 0,  8,  char,	    endpoint1->type[8]); \
  	MC_CMD_OP(cmd, 2, 8,  8,  char,	    endpoint1->type[9]); \
  	MC_CMD_OP(cmd, 2, 16, 8,  char,	    endpoint1->type[10]); \
  	MC_CMD_OP(cmd, 2, 24, 8,  char,	    endpoint1->type[11]); \
  	MC_CMD_OP(cmd, 2, 32, 8,  char,     endpoint1->type[12]); \
  	MC_CMD_OP(cmd, 2, 40, 8,  char,	    endpoint1->type[13]); \
  	MC_CMD_OP(cmd, 2, 48, 8,  char,	    endpoint1->type[14]); \
  	MC_CMD_OP(cmd, 2, 56, 8,  char,	    endpoint1->type[15]); \
  } while (0)
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
431
432
433
434
  /*                cmd, param, offset, width, type, arg_name */
  #define DPRC_RSP_GET_CONNECTION(cmd, endpoint2, state) \
  do { \
  	MC_RSP_OP(cmd, 3, 0,  32, int,	    endpoint2->id); \
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
435
  	MC_RSP_OP(cmd, 3, 32, 16, uint16_t, endpoint2->if_id); \
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
  	MC_RSP_OP(cmd, 4, 0,  8,  char,	    endpoint2->type[0]); \
  	MC_RSP_OP(cmd, 4, 8,  8,  char,	    endpoint2->type[1]); \
  	MC_RSP_OP(cmd, 4, 16, 8,  char,	    endpoint2->type[2]); \
  	MC_RSP_OP(cmd, 4, 24, 8,  char,	    endpoint2->type[3]); \
  	MC_RSP_OP(cmd, 4, 32, 8,  char,	    endpoint2->type[4]); \
  	MC_RSP_OP(cmd, 4, 40, 8,  char,	    endpoint2->type[5]); \
  	MC_RSP_OP(cmd, 4, 48, 8,  char,	    endpoint2->type[6]); \
  	MC_RSP_OP(cmd, 4, 56, 8,  char,	    endpoint2->type[7]); \
  	MC_RSP_OP(cmd, 5, 0,  8,  char,	    endpoint2->type[8]); \
  	MC_RSP_OP(cmd, 5, 8,  8,  char,	    endpoint2->type[9]); \
  	MC_RSP_OP(cmd, 5, 16, 8,  char,	    endpoint2->type[10]); \
  	MC_RSP_OP(cmd, 5, 24, 8,  char,	    endpoint2->type[11]); \
  	MC_RSP_OP(cmd, 5, 32, 8,  char,	    endpoint2->type[12]); \
  	MC_RSP_OP(cmd, 5, 40, 8,  char,	    endpoint2->type[13]); \
  	MC_RSP_OP(cmd, 5, 48, 8,  char,	    endpoint2->type[14]); \
  	MC_RSP_OP(cmd, 5, 56, 8,  char,	    endpoint2->type[15]); \
  	MC_RSP_OP(cmd, 6, 0,  32, int,	    state); \
  } while (0)
  
  /* Data Path Resource Container API
   * Contains DPRC API for managing and querying DPAA resources
   */
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
458

a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
  struct fsl_mc_io;
  
  /**
   * Set this value as the icid value in dprc_cfg structure when creating a
   * container, in case the ICID is not selected by the user and should be
   * allocated by the DPRC from the pool of ICIDs.
   */
  #define DPRC_GET_ICID_FROM_POOL			(uint16_t)(~(0))
  
  /**
   * Set this value as the portal_id value in dprc_cfg structure when creating a
   * container, in case the portal ID is not specifically selected by the
   * user and should be allocated by the DPRC from the pool of portal ids.
   */
  #define DPRC_GET_PORTAL_ID_FROM_POOL	(int)(~(0))
  
  /**
   * dprc_get_container_id() - Get container ID associated with a given portal.
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
477
478
   * @mc_io:	Pointer to MC portal's I/O object
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
479
480
481
482
   * @container_id:	Requested container ID
   *
   * Return:	'0' on Success; Error code otherwise.
   */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
483
484
485
  int dprc_get_container_id(struct fsl_mc_io	*mc_io,
  			  uint32_t		cmd_flags,
  			  int			*container_id);
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
486
487
488
489
  
  /**
   * dprc_open() - Open DPRC object for use
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
490
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
491
492
493
494
495
496
497
   * @container_id: Container ID to open
   * @token:	Returned token of DPRC object
   *
   * Return:	'0' on Success; Error code otherwise.
   *
   * @warning	Required before any operation on the object.
   */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
498
499
500
501
  int dprc_open(struct fsl_mc_io	*mc_io,
  	      uint32_t		cmd_flags,
  	      int		container_id,
  	      uint16_t		*token);
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
502
503
504
505
  
  /**
   * dprc_close() - Close the control session of the object
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
506
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
507
508
509
510
511
512
513
   * @token:	Token of DPRC object
   *
   * After this function is called, no further operations are
   * allowed on the object without opening a new control session.
   *
   * Return:	'0' on Success; Error code otherwise.
   */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
514
515
516
  int dprc_close(struct fsl_mc_io	*mc_io,
  	       uint32_t		cmd_flags,
  	       uint16_t		token);
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
  
  /**
   * Container general options
   *
   * These options may be selected at container creation by the container creator
   * and can be retrieved using dprc_get_attributes()
   */
  
  /* Spawn Policy Option allowed - Indicates that the new container is allowed
   * to spawn and have its own child containers.
   */
  #define DPRC_CFG_OPT_SPAWN_ALLOWED		0x00000001
  
  /* General Container allocation policy - Indicates that the new container is
   * allowed to allocate requested resources from its parent container; if not
   * set, the container is only allowed to use resources in its own pools; Note
   * that this is a container's global policy, but the parent container may
   * override it and set specific quota per resource type.
   */
  #define DPRC_CFG_OPT_ALLOC_ALLOWED		0x00000002
  
  /* Object initialization allowed - software context associated with this
   * container is allowed to invoke object initialization operations.
   */
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
541
  #define DPRC_CFG_OPT_OBJ_CREATE_ALLOWED		0x00000004
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
542
543
544
545
546
547
  
  /* Topology change allowed - software context associated with this
   * container is allowed to invoke topology operations, such as attach/detach
   * of network objects.
   */
  #define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED	0x00000008
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
548

53e353fc3   Prabhakar Kushwaha   driver: net: fsl-...
549
  /* AIOP - Indicates that container belongs to AIOP. */
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
550
  #define DPRC_CFG_OPT_AIOP			0x00000020
53e353fc3   Prabhakar Kushwaha   driver: net: fsl-...
551
552
  /* IRQ Config - Indicates that the container allowed to configure its IRQs.*/
  #define DPRC_CFG_OPT_IRQ_CFG_ALLOWED		0x00000040
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
553
554
555
556
557
558
559
  /**
   * struct dprc_cfg - Container configuration options
   * @icid: Container's ICID; if set to 'DPRC_GET_ICID_FROM_POOL', a free
   *		ICID value is allocated by the DPRC
   * @portal_id: Portal ID; if set to 'DPRC_GET_PORTAL_ID_FROM_POOL', a free
   *		portal ID is allocated by the DPRC
   * @options: Combination of 'DPRC_CFG_OPT_<X>' options
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
560
   * @label: Object's label
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
561
562
563
564
565
   */
  struct dprc_cfg {
  	uint16_t icid;
  	int portal_id;
  	uint64_t options;
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
566
  	char label[16];
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
567
568
569
  };
  
  /**
1ebbe4fcf   Prabhakar Kushwaha   driver: net: fsl-...
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
   * dprc_create_container() - Create child container
   * @mc_io:	Pointer to MC portal's I/O object
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
   * @token:	Token of DPRC object
   * @cfg:	Child container configuration
   * @child_container_id:	Returned child container ID
   * @child_portal_offset: Returned child portal offset from MC portal base
   *
   *
   * Return:	'0' on Success; Error code otherwise.
   */
  int dprc_create_container(struct fsl_mc_io	*mc_io,
  			  uint32_t		cmd_flags,
  			  uint16_t		token,
  			  struct dprc_cfg	*cfg,
  			  int			*child_container_id,
  			  uint64_t		*child_portal_offset);
  
  /**
   * dprc_destroy_container() - Destroy child container.
   * @mc_io:	Pointer to MC portal's I/O object
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
   * @token:	Token of DPRC object
   * @child_container_id:	ID of the container to destroy
   *
   * This function terminates the child container, so following this call the
   * child container ID becomes invalid.
   *
   * Notes:
   * - All resources and objects of the destroyed container are returned to the
   * parent container or destroyed if were created be the destroyed container.
   * - This function destroy all the child containers of the specified
   *   container prior to destroying the container itself.
   *
   * warning: Only the parent container is allowed to destroy a child policy
   *		Container 0 can't be destroyed
   *
   * Return:	'0' on Success; Error code otherwise.
   *
   */
  int dprc_destroy_container(struct fsl_mc_io	*mc_io,
  			   uint32_t		cmd_flags,
  			   uint16_t		token,
  			   int			child_container_id);
  
  /**
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
616
617
   * dprc_reset_container - Reset child container.
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
618
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
   * @token:	Token of DPRC object
   * @child_container_id:	ID of the container to reset
   *
   * In case a software context crashes or becomes non-responsive, the parent
   * may wish to reset its resources container before the software context is
   * restarted.
   *
   * This routine informs all objects assigned to the child container that the
   * container is being reset, so they may perform any cleanup operations that are
   * needed. All objects handles that were owned by the child container shall be
   * closed.
   *
   * Note that such request may be submitted even if the child software context
   * has not crashed, but the resulting object cleanup operations will not be
   * aware of that.
   *
   * Return:	'0' on Success; Error code otherwise.
   */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
637
638
639
640
  int dprc_reset_container(struct fsl_mc_io	*mc_io,
  			 uint32_t		cmd_flags,
  			 uint16_t		token,
  			 int			child_container_id);
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
  
  /**
   * struct dprc_attributes - Container attributes
   * @container_id: Container's ID
   * @icid: Container's ICID
   * @portal_id: Container's portal ID
   * @options: Container's options as set at container's creation
   * @version: DPRC version
   */
  struct dprc_attributes {
  	int container_id;
  	uint16_t icid;
  	int portal_id;
  	uint64_t options;
  	/**
  	 * struct version - DPRC version
  	 * @major: DPRC major version
  	 * @minor: DPRC minor version
  	 */
  	struct {
  		uint16_t major;
  		uint16_t minor;
  	} version;
  };
  
  /**
   * dprc_get_attributes() - Obtains container attributes
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
669
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
670
   * @token:	Token of DPRC object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
671
   * @attributes:	Returned container attributes
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
672
673
674
675
   *
   * Return:     '0' on Success; Error code otherwise.
   */
  int dprc_get_attributes(struct fsl_mc_io	*mc_io,
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
676
  			uint32_t		cmd_flags,
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
677
678
679
680
681
682
  			uint16_t		token,
  			struct dprc_attributes	*attributes);
  
  /**
   * dprc_get_obj_count() - Obtains the number of objects in the DPRC
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
683
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
684
685
686
687
688
   * @token:	Token of DPRC object
   * @obj_count:	Number of objects assigned to the DPRC
   *
   * Return:	'0' on Success; Error code otherwise.
   */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
689
690
691
692
  int dprc_get_obj_count(struct fsl_mc_io	*mc_io,
  		       uint32_t		cmd_flags,
  		       uint16_t		token,
  		       int			*obj_count);
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
693
694
695
696
697
698
699
700
701
  
  /* Objects Attributes Flags */
  
  /* Opened state - Indicates that an object is open by at least one owner */
  #define DPRC_OBJ_STATE_OPEN		0x00000001
  /* Plugged state - Indicates that the object is plugged */
  #define DPRC_OBJ_STATE_PLUGGED		0x00000002
  
  /**
53e353fc3   Prabhakar Kushwaha   driver: net: fsl-...
702
703
704
705
706
707
708
709
   * Shareability flag - Object flag indicating no memory shareability.
   *  the object generates memory accesses that are non coherent with other
   *  masters;
   *  user is responsible for proper memory handling through IOMMU configuration.
   */
  #define DPRC_OBJ_FLAG_NO_MEM_SHAREABILITY		0x0001
  
  /**
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
710
711
712
713
714
715
716
717
718
   * struct dprc_obj_desc - Object descriptor, returned from dprc_get_obj()
   * @type: Type of object: NULL terminated string
   * @id: ID of logical object resource
   * @vendor: Object vendor identifier
   * @ver_major: Major version number
   * @ver_minor:  Minor version number
   * @irq_count: Number of interrupts supported by the object
   * @region_count: Number of mappable regions supported by the object
   * @state: Object state: combination of DPRC_OBJ_STATE_ states
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
719
   * @label: Object label
53e353fc3   Prabhakar Kushwaha   driver: net: fsl-...
720
   * @flags: Object's flags
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
721
722
723
724
725
726
727
728
729
730
   */
  struct dprc_obj_desc {
  	char type[16];
  	int id;
  	uint16_t vendor;
  	uint16_t ver_major;
  	uint16_t ver_minor;
  	uint8_t irq_count;
  	uint8_t region_count;
  	uint32_t state;
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
731
  	char label[16];
53e353fc3   Prabhakar Kushwaha   driver: net: fsl-...
732
  	uint16_t	flags;
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
733
734
735
736
737
  };
  
  /**
   * dprc_get_obj() - Get general information on an object
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
738
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
739
740
741
742
743
744
745
746
747
748
749
750
   * @token:	Token of DPRC object
   * @obj_index:	Index of the object to be queried (< obj_count)
   * @obj_desc:	Returns the requested object descriptor
   *
   * The object descriptors are retrieved one by one by incrementing
   * obj_index up to (not including) the value of obj_count returned
   * from dprc_get_obj_count(). dprc_get_obj_count() must
   * be called prior to dprc_get_obj().
   *
   * Return:	'0' on Success; Error code otherwise.
   */
  int dprc_get_obj(struct fsl_mc_io	*mc_io,
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
751
  		 uint32_t		cmd_flags,
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
752
753
754
755
756
  		 uint16_t		token,
  		 int			obj_index,
  		 struct dprc_obj_desc	*obj_desc);
  
  /**
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
757
758
   * dprc_get_res_count() - Obtains the number of free resources that are
   *		assigned to this container, by pool type
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
759
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
760
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
761
762
763
764
765
766
767
   * @token:	Token of DPRC object
   * @type:	pool type
   * @res_count:	Returned number of free resources of the given
   *			resource type that are assigned to this DPRC
   *
   * Return:	'0' on Success; Error code otherwise.
   */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
768
769
  int dprc_get_res_count(struct fsl_mc_io *mc_io,
  		       uint32_t	cmd_flags,
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
  		       uint16_t		token,
  		       char		*type,
  		       int		*res_count);
  
  /**
   * enum dprc_iter_status - Iteration status
   * @DPRC_ITER_STATUS_FIRST: Perform first iteration
   * @DPRC_ITER_STATUS_MORE: Indicates more/next iteration is needed
   * @DPRC_ITER_STATUS_LAST: Indicates last iteration
   */
  enum dprc_iter_status {
  	DPRC_ITER_STATUS_FIRST = 0,
  	DPRC_ITER_STATUS_MORE = 1,
  	DPRC_ITER_STATUS_LAST = 2
  };
  
  /**
   * struct dprc_res_ids_range_desc - Resource ID range descriptor
   * @base_id: Base resource ID of this range
   * @last_id: Last resource ID of this range
   * @iter_status: Iteration status - should be set to DPRC_ITER_STATUS_FIRST at
   *	first iteration; while the returned marker is DPRC_ITER_STATUS_MORE,
   *	additional iterations are needed, until the returned marker is
   *	DPRC_ITER_STATUS_LAST
   */
  struct dprc_res_ids_range_desc {
  	int base_id;
  	int last_id;
  	enum dprc_iter_status iter_status;
  };
  
  /**
   * dprc_get_res_ids() - Obtains IDs of free resources in the container
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
804
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
805
806
807
808
809
810
811
   * @token:	Token of DPRC object
   * @type:	pool type
   * @range_desc:	range descriptor
   *
   * Return:	'0' on Success; Error code otherwise.
   */
  int dprc_get_res_ids(struct fsl_mc_io			*mc_io,
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
812
  		     uint32_t				cmd_flags,
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
813
814
815
  		     uint16_t				token,
  		     char				*type,
  		     struct dprc_res_ids_range_desc	*range_desc);
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
816
817
818
819
820
821
822
823
824
825
826
827
828
  /* Region flags */
  /* Cacheable - Indicates that region should be mapped as cacheable */
  #define DPRC_REGION_CACHEABLE	0x00000001
  
  /**
   * enum dprc_region_type - Region type
   * @DPRC_REGION_TYPE_MC_PORTAL: MC portal region
   * @DPRC_REGION_TYPE_QBMAN_PORTAL: Qbman portal region
   */
  enum dprc_region_type {
  	DPRC_REGION_TYPE_MC_PORTAL,
  	DPRC_REGION_TYPE_QBMAN_PORTAL
  };
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
829
830
  /**
   * struct dprc_region_desc - Mappable region descriptor
1f1c25c74   Prabhakar Kushwaha   drivers: fsl-mc: ...
831
832
833
834
   * @base_offset: Region offset from region's base address.
   *	For DPMCP and DPRC objects, region base is offset from SoC MC portals
   *	base address; For DPIO, region base is offset from SoC QMan portals
   *	base address
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
835
   * @size: Region size (in bytes)
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
836
837
   * @flags: Region attributes
   * @type: Portal region type
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
838
839
   */
  struct dprc_region_desc {
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
840
  	uint32_t base_offset;
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
841
  	uint32_t size;
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
842
843
  	uint32_t flags;
  	enum dprc_region_type type;
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
844
845
846
847
848
  };
  
  /**
   * dprc_get_obj_region() - Get region information for a specified object.
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
849
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
850
   * @token:	Token of DPRC object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
851
   * @obj_type:	Object type as returned in dprc_get_obj()
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
852
853
854
855
856
857
858
   * @obj_id:	Unique object instance as returned in dprc_get_obj()
   * @region_index: The specific region to query
   * @region_desc:  Returns the requested region descriptor
   *
   * Return:	'0' on Success; Error code otherwise.
   */
  int dprc_get_obj_region(struct fsl_mc_io	*mc_io,
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
859
  			uint32_t		cmd_flags,
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
860
861
862
863
864
865
866
867
868
869
  			uint16_t		token,
  			char			*obj_type,
  			int			obj_id,
  			uint8_t			region_index,
  			struct dprc_region_desc	*region_desc);
  /**
   * struct dprc_endpoint - Endpoint description for link connect/disconnect
   *			operations
   * @type: Endpoint object type: NULL terminated string
   * @id: Endpoint object ID
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
870
   * @if_id: Interface ID; should be set for endpoints with multiple
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
871
872
873
   *		interfaces ("dpsw", "dpdmux"); for others, always set to 0
   */
  struct dprc_endpoint {
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
874
875
876
877
878
879
880
881
882
883
884
885
886
887
  	char		type[16];
  	int		id;
  	uint16_t	if_id;
  };
  
  /**
   * struct dprc_connection_cfg - Connection configuration.
   *				Used for virtual connections only
   * @committed_rate: Committed rate (Mbits/s)
   * @max_rate: Maximum rate (Mbits/s)
   */
  struct dprc_connection_cfg {
  	uint32_t committed_rate;
  	uint32_t max_rate;
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
888
889
890
891
892
  };
  
  /**
   * dprc_connect() - Connect two endpoints to create a network link between them
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
893
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
894
895
896
   * @token:	Token of DPRC object
   * @endpoint1:	Endpoint 1 configuration parameters
   * @endpoint2:	Endpoint 2 configuration parameters
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
897
898
899
   * @cfg: Connection configuration. The connection configuration is ignored for
   *	connections made to DPMAC objects, where rate is retrieved from the
   *	MAC configuration.
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
900
901
902
   *
   * Return:	'0' on Success; Error code otherwise.
   */
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
903
904
905
906
907
908
  int dprc_connect(struct fsl_mc_io			*mc_io,
  		 uint32_t				cmd_flags,
  		 uint16_t				token,
  		 const struct dprc_endpoint		*endpoint1,
  		 const struct dprc_endpoint		*endpoint2,
  		 const struct dprc_connection_cfg	*cfg);
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
909
910
911
912
  
  /**
   * dprc_disconnect() - Disconnect one endpoint to remove its network connection
   * @mc_io:	Pointer to MC portal's I/O object
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
913
   * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
914
915
916
917
918
919
   * @token:	Token of DPRC object
   * @endpoint:	Endpoint configuration parameters
   *
   * Return:	'0' on Success; Error code otherwise.
   */
  int dprc_disconnect(struct fsl_mc_io		*mc_io,
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
920
  		    uint32_t			cmd_flags,
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
921
922
923
924
925
926
  		    uint16_t			token,
  		    const struct dprc_endpoint	*endpoint);
  
  /**
  * dprc_get_connection() - Get connected endpoint and link status if connection
  *			exists.
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
927
928
929
930
931
  * @mc_io:	Pointer to MC portal's I/O object
  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
  * @token:	Token of DPRC object
  * @endpoint1:	Endpoint 1 configuration parameters
  * @endpoint2:	Returned endpoint 2 configuration parameters
53e353fc3   Prabhakar Kushwaha   driver: net: fsl-...
932
933
934
935
  * @state:	Returned link state:
  *           1 - link is up;
  *           0 - link is down;
  *           -1 - no connection (endpoint2 information is irrelevant)
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
936
937
938
939
  *
  * Return:     '0' on Success; -ENAVAIL if connection does not exist.
  */
  int dprc_get_connection(struct fsl_mc_io		*mc_io,
87457d118   Prabhakar Kushwaha   drivers/fsl-mc: f...
940
  			uint32_t			cmd_flags,
a2a55e518   Prabhakar Kushwaha   driver/fsl-mc: Ad...
941
942
943
944
945
946
  			uint16_t			token,
  			const struct dprc_endpoint	*endpoint1,
  			struct dprc_endpoint		*endpoint2,
  			int				*state);
  
  #endif /* _FSL_DPRC_H */