xref: /rk3399_rockchip-uboot/include/fsl-mc/fsl_dprc.h (revision 1ebbe4fcf75b15ccf23234bb6a7d28895a7e6b11)
1a2a55e51SPrabhakar Kushwaha /*
2a2a55e51SPrabhakar Kushwaha  * Freescale Layerscape MC I/O wrapper
3a2a55e51SPrabhakar Kushwaha  *
4a2a55e51SPrabhakar Kushwaha  * Copyright (C) 2013-2015 Freescale Semiconductor, Inc.
5a2a55e51SPrabhakar Kushwaha  * Author: German Rivera <German.Rivera@freescale.com>
6a2a55e51SPrabhakar Kushwaha  *
7a2a55e51SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
8a2a55e51SPrabhakar Kushwaha  */
9a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPRC_H
10a2a55e51SPrabhakar Kushwaha #define _FSL_DPRC_H
11a2a55e51SPrabhakar Kushwaha 
12a2a55e51SPrabhakar Kushwaha /* DPRC Version */
1387457d11SPrabhakar Kushwaha #define DPRC_VER_MAJOR				5
14a2a55e51SPrabhakar Kushwaha #define DPRC_VER_MINOR				0
15a2a55e51SPrabhakar Kushwaha 
16a2a55e51SPrabhakar Kushwaha /* Command IDs */
17a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_CLOSE			0x800
18a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_OPEN				0x805
19*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMDID_CREATE			0x905
20a2a55e51SPrabhakar Kushwaha 
21a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_ATTR			0x004
22a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_RESET_CONT			0x005
23a2a55e51SPrabhakar Kushwaha 
24*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMDID_CREATE_CONT			0x151
25*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMDID_DESTROY_CONT			0x152
26a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_CONT_ID			0x830
27a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ_COUNT		0x159
28a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ			0x15A
29a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_RES_COUNT		0x15B
30a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_RES_IDS			0x15C
31a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ_REG			0x15E
32a2a55e51SPrabhakar Kushwaha 
33a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_CONNECT			0x167
34a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_DISCONNECT			0x168
35a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_CONNECTION		0x16C
36a2a55e51SPrabhakar Kushwaha 
37a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
38a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_CONTAINER_ID(cmd, container_id) \
39a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32,  int,	    container_id)
40a2a55e51SPrabhakar Kushwaha 
41a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
42a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_OPEN(cmd, container_id) \
43a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    container_id)
44a2a55e51SPrabhakar Kushwaha 
45a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
46*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMD_CREATE_CONTAINER(cmd, cfg) \
47*1ebbe4fcSPrabhakar Kushwaha do { \
48*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 16, uint16_t, cfg->icid); \
49*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, uint32_t, cfg->options); \
50*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 32, int,	    cfg->portal_id); \
51*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    cfg->label[0]);\
52*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    cfg->label[1]);\
53*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    cfg->label[2]);\
54*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    cfg->label[3]);\
55*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    cfg->label[4]);\
56*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    cfg->label[5]);\
57*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    cfg->label[6]);\
58*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    cfg->label[7]);\
59*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  8,  char,	    cfg->label[8]);\
60*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,  8,  char,	    cfg->label[9]);\
61*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 16, 8,  char,	    cfg->label[10]);\
62*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 24, 8,  char,	    cfg->label[11]);\
63*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 8,  char,	    cfg->label[12]);\
64*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 40, 8,  char,	    cfg->label[13]);\
65*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 48, 8,  char,	    cfg->label[14]);\
66*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 56, 8,  char,	    cfg->label[15]);\
67*1ebbe4fcSPrabhakar Kushwaha } while (0)
68*1ebbe4fcSPrabhakar Kushwaha 
69*1ebbe4fcSPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
70*1ebbe4fcSPrabhakar Kushwaha #define DPRC_RSP_CREATE_CONTAINER(cmd, child_container_id, child_portal_offset)\
71*1ebbe4fcSPrabhakar Kushwaha do { \
72*1ebbe4fcSPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, int,	   child_container_id); \
73*1ebbe4fcSPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  64, uint64_t, child_portal_offset);\
74*1ebbe4fcSPrabhakar Kushwaha } while (0)
75*1ebbe4fcSPrabhakar Kushwaha 
76*1ebbe4fcSPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
77*1ebbe4fcSPrabhakar Kushwaha #define DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id) \
78*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    child_container_id)
79*1ebbe4fcSPrabhakar Kushwaha 
80*1ebbe4fcSPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
81a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_RESET_CONTAINER(cmd, child_container_id) \
82a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    child_container_id)
83a2a55e51SPrabhakar Kushwaha 
84a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
85a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_ATTRIBUTES(cmd, attr) \
86a2a55e51SPrabhakar Kushwaha do { \
87a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,	    attr->container_id); \
88a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->icid); \
89a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, uint32_t, attr->options);\
90a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 32, int,      attr->portal_id); \
91a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  16, uint16_t, attr->version.major);\
92a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 16, 16, uint16_t, attr->version.minor);\
93a2a55e51SPrabhakar Kushwaha } while (0)
94a2a55e51SPrabhakar Kushwaha 
95a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
96a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_COUNT(cmd, obj_count) \
97a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 32, int,      obj_count)
98a2a55e51SPrabhakar Kushwaha 
99a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
100a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ(cmd, obj_index) \
101a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    obj_index)
102a2a55e51SPrabhakar Kushwaha 
103a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
104a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ(cmd, obj_desc) \
105a2a55e51SPrabhakar Kushwaha do { \
106a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 32, int,	    obj_desc->id); \
107a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  16, uint16_t, obj_desc->vendor); \
108a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 8,  uint8_t,  obj_desc->irq_count); \
109a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 24, 8,  uint8_t,  obj_desc->region_count); \
110a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 32, uint32_t, obj_desc->state);\
111a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  16, uint16_t, obj_desc->ver_major);\
112a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 16, 16, uint16_t, obj_desc->ver_minor);\
113a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 0,  8,  char,	    obj_desc->type[0]);\
114a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 8,  8,  char,	    obj_desc->type[1]);\
115a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 16, 8,  char,	    obj_desc->type[2]);\
116a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 24, 8,  char,	    obj_desc->type[3]);\
117a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 32, 8,  char,	    obj_desc->type[4]);\
118a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 40, 8,  char,	    obj_desc->type[5]);\
119a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 48, 8,  char,	    obj_desc->type[6]);\
120a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 56, 8,  char,	    obj_desc->type[7]);\
121a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 0,  8,  char,	    obj_desc->type[8]);\
122a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 8,  8,  char,	    obj_desc->type[9]);\
123a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 16, 8,  char,	    obj_desc->type[10]);\
124a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 24, 8,  char,	    obj_desc->type[11]);\
125a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 32, 8,  char,	    obj_desc->type[12]);\
126a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 40, 8,  char,	    obj_desc->type[13]);\
127a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 48, 8,  char,	    obj_desc->type[14]);\
128a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 56, 8,  char,	    obj_desc->type[15]);\
1291f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 0,  8,  char,	    obj_desc->label[0]);\
1301f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 8,  8,  char,	    obj_desc->label[1]);\
1311f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 16, 8,  char,	    obj_desc->label[2]);\
1321f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 24, 8,  char,	    obj_desc->label[3]);\
1331f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 32, 8,  char,	    obj_desc->label[4]);\
1341f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 40, 8,  char,	    obj_desc->label[5]);\
1351f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 48, 8,  char,	    obj_desc->label[6]);\
1361f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 56, 8,  char,	    obj_desc->label[7]);\
1371f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 0,  8,  char,	    obj_desc->label[8]);\
1381f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 8,  8,  char,	    obj_desc->label[9]);\
1391f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 16, 8,  char,	    obj_desc->label[10]);\
1401f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 24, 8,  char,	    obj_desc->label[11]);\
1411f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 32, 8,  char,	    obj_desc->label[12]);\
1421f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 40, 8,  char,	    obj_desc->label[13]);\
1431f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 48, 8,  char,	    obj_desc->label[14]);\
1441f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 56, 8,  char,	    obj_desc->label[15]);\
145a2a55e51SPrabhakar Kushwaha } while (0)
146a2a55e51SPrabhakar Kushwaha 
147a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
148a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_COUNT(cmd, type) \
149a2a55e51SPrabhakar Kushwaha do { \
150a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  8,  char,	    type[0]);\
151a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 8,  8,  char,	    type[1]);\
152a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 8,  char,	    type[2]);\
153a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 24, 8,  char,	    type[3]);\
154a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 8,  char,	    type[4]);\
155a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 40, 8,  char,	    type[5]);\
156a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 48, 8,  char,	    type[6]);\
157a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 56, 8,  char,	    type[7]);\
158a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    type[8]);\
159a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    type[9]);\
160a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    type[10]);\
161a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    type[11]);\
162a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    type[12]);\
163a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    type[13]);\
164a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    type[14]);\
165a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    type[15]);\
166a2a55e51SPrabhakar Kushwaha } while (0)
167a2a55e51SPrabhakar Kushwaha 
168a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
169a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_COUNT(cmd, res_count) \
170a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,	    res_count)
171a2a55e51SPrabhakar Kushwaha 
172a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
173a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_IDS(cmd, range_desc, type) \
174a2a55e51SPrabhakar Kushwaha do { \
175a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 42, 7,  enum dprc_iter_status, \
176a2a55e51SPrabhakar Kushwaha 					    range_desc->iter_status); \
177a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  32, int,	    range_desc->base_id); \
178a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 32, int,	    range_desc->last_id);\
179a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    type[0]);\
180a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    type[1]);\
181a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    type[2]);\
182a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    type[3]);\
183a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    type[4]);\
184a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,     type[5]);\
185a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    type[6]);\
186a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    type[7]);\
187a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  8,  char,	    type[8]);\
188a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,  8,  char,	    type[9]);\
189a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 16, 8,  char,	    type[10]);\
190a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 24, 8,  char,	    type[11]);\
191a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 8,  char,	    type[12]);\
192a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 40, 8,  char,	    type[13]);\
193a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 48, 8,  char,	    type[14]);\
194a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 56, 8,  char,	    type[15]);\
195a2a55e51SPrabhakar Kushwaha } while (0)
196a2a55e51SPrabhakar Kushwaha 
197a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
198a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_IDS(cmd, range_desc) \
199a2a55e51SPrabhakar Kushwaha do { \
200a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 42, 7,  enum dprc_iter_status, \
201a2a55e51SPrabhakar Kushwaha 					    range_desc->iter_status);\
202a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, int,	    range_desc->base_id); \
203a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 32, int,	    range_desc->last_id);\
204a2a55e51SPrabhakar Kushwaha } while (0)
205a2a55e51SPrabhakar Kushwaha 
206a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
207a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index) \
208a2a55e51SPrabhakar Kushwaha do { \
209a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    obj_id); \
210a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  region_index);\
211a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  8,  char,	    obj_type[0]);\
212a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,  8,  char,	    obj_type[1]);\
213a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 16, 8,  char,	    obj_type[2]);\
214a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 24, 8,  char,	    obj_type[3]);\
215a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 8,  char,	    obj_type[4]);\
216a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 40, 8,  char,	    obj_type[5]);\
217a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 48, 8,  char,	    obj_type[6]);\
218a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 56, 8,  char,	    obj_type[7]);\
219a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 0,  8,  char,	    obj_type[8]);\
220a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 8,  8,  char,	    obj_type[9]);\
221a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 16, 8,  char,	    obj_type[10]);\
222a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 24, 8,  char,	    obj_type[11]);\
223a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 32, 8,  char,	    obj_type[12]);\
224a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 40, 8,  char,	    obj_type[13]);\
225a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 48, 8,  char,	    obj_type[14]);\
226a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 56, 8,  char,	    obj_type[15]);\
227a2a55e51SPrabhakar Kushwaha } while (0)
228a2a55e51SPrabhakar Kushwaha 
229a2a55e51SPrabhakar Kushwaha /*	param, offset, width,	type,		arg_name */
230a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_REGION(cmd, region_desc) \
231a2a55e51SPrabhakar Kushwaha do { \
23287457d11SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, uint32_t, region_desc->base_offset);\
233a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  32, uint32_t, region_desc->size); \
23487457d11SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 32, 4,  enum dprc_region_type, region_desc->type);\
23587457d11SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 0,  32, uint32_t, region_desc->flags);\
236a2a55e51SPrabhakar Kushwaha } while (0)
237a2a55e51SPrabhakar Kushwaha 
238a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
23987457d11SPrabhakar Kushwaha #define DPRC_CMD_SET_OBJ_LABEL(cmd, obj_type, obj_id, label) \
2401f1c25c7SPrabhakar Kushwaha do { \
24187457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,      obj_id); \
2421f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  8,  char,	    label[0]);\
2431f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 8,  8,  char,	    label[1]);\
2441f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 8,  char,	    label[2]);\
2451f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 24, 8,  char,	    label[3]);\
2461f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 8,  char,	    label[4]);\
2471f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 40, 8,  char,	    label[5]);\
2481f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 48, 8,  char,	    label[6]);\
2491f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 56, 8,  char,	    label[7]);\
2501f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    label[8]);\
2511f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    label[9]);\
2521f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    label[10]);\
2531f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    label[11]);\
2541f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    label[12]);\
2551f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    label[13]);\
2561f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    label[14]);\
2571f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    label[15]);\
25887457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  8,  char,	    obj_type[0]);\
25987457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,  8,  char,	    obj_type[1]);\
26087457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 16, 8,  char,	    obj_type[2]);\
26187457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 24, 8,  char,	    obj_type[3]);\
26287457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 8,  char,	    obj_type[4]);\
26387457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 40, 8,  char,	    obj_type[5]);\
26487457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 48, 8,  char,	    obj_type[6]);\
26587457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 56, 8,  char,	    obj_type[7]);\
26687457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 0,  8,  char,	    obj_type[8]);\
26787457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 8,  8,  char,	    obj_type[9]);\
26887457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 16, 8,  char,	    obj_type[10]);\
26987457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 24, 8,  char,	    obj_type[11]);\
27087457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 32, 8,  char,	    obj_type[12]);\
27187457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 40, 8,  char,	    obj_type[13]);\
27287457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 48, 8,  char,	    obj_type[14]);\
27387457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 56, 8,  char,	    obj_type[15]);\
2741f1c25c7SPrabhakar Kushwaha } while (0)
2751f1c25c7SPrabhakar Kushwaha 
2761f1c25c7SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
27787457d11SPrabhakar Kushwaha #define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg) \
278a2a55e51SPrabhakar Kushwaha do { \
279a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,      endpoint1->id); \
28087457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \
281a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  32, int,	    endpoint2->id); \
28287457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 16, uint16_t, endpoint2->if_id); \
283a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,     endpoint1->type[0]); \
284a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    endpoint1->type[1]); \
285a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    endpoint1->type[2]); \
286a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    endpoint1->type[3]); \
287a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    endpoint1->type[4]); \
288a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    endpoint1->type[5]); \
289a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    endpoint1->type[6]); \
290a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    endpoint1->type[7]); \
291a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  8,  char,	    endpoint1->type[8]); \
292a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,  8,  char,	    endpoint1->type[9]); \
293a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 16, 8,  char,	    endpoint1->type[10]); \
294a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 24, 8,  char,	    endpoint1->type[11]); \
295a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 8,  char,     endpoint1->type[12]); \
296a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 40, 8,  char,	    endpoint1->type[13]); \
297a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 48, 8,  char,	    endpoint1->type[14]); \
298a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 56, 8,  char,	    endpoint1->type[15]); \
29987457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 0,  32, uint32_t, cfg->max_rate); \
30087457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 32, 32, uint32_t, cfg->committed_rate); \
301a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 0,  8,  char,	    endpoint2->type[0]); \
302a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 8,  8,  char,	    endpoint2->type[1]); \
303a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 16, 8,  char,	    endpoint2->type[2]); \
304a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 24, 8,  char,	    endpoint2->type[3]); \
305a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 32, 8,  char,	    endpoint2->type[4]); \
306a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 40, 8,  char,	    endpoint2->type[5]); \
307a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 48, 8,  char,	    endpoint2->type[6]); \
308a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 56, 8,  char,	    endpoint2->type[7]); \
309a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 0,  8,  char,	    endpoint2->type[8]); \
310a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 8,  8,  char,	    endpoint2->type[9]); \
311a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 16, 8,  char,	    endpoint2->type[10]); \
312a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 24, 8,  char,	    endpoint2->type[11]); \
313a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 32, 8,  char,	    endpoint2->type[12]); \
314a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 40, 8,  char,	    endpoint2->type[13]); \
315a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 48, 8,  char,	    endpoint2->type[14]); \
316a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 56, 8,  char,	    endpoint2->type[15]); \
317a2a55e51SPrabhakar Kushwaha } while (0)
318a2a55e51SPrabhakar Kushwaha 
319a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
320a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_DISCONNECT(cmd, endpoint) \
321a2a55e51SPrabhakar Kushwaha do { \
322a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    endpoint->id); \
32387457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint->if_id); \
324a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  8,  char,	    endpoint->type[0]); \
325a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 8,  8,  char,	    endpoint->type[1]); \
326a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 8,  char,	    endpoint->type[2]); \
327a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 24, 8,  char,	    endpoint->type[3]); \
328a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 8,  char,	    endpoint->type[4]); \
329a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 40, 8,  char,	    endpoint->type[5]); \
330a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 48, 8,  char,	    endpoint->type[6]); \
331a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 56, 8,  char,	    endpoint->type[7]); \
332a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    endpoint->type[8]); \
333a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    endpoint->type[9]); \
334a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    endpoint->type[10]); \
335a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    endpoint->type[11]); \
336a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    endpoint->type[12]); \
337a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    endpoint->type[13]); \
338a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    endpoint->type[14]); \
339a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    endpoint->type[15]); \
340a2a55e51SPrabhakar Kushwaha } while (0)
341a2a55e51SPrabhakar Kushwaha 
342a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
343a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \
344a2a55e51SPrabhakar Kushwaha do { \
345a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,      endpoint1->id); \
34687457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 16, uint16_t, endpoint1->if_id); \
347a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  8,  char,     endpoint1->type[0]); \
348a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 8,  8,  char,	    endpoint1->type[1]); \
349a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 8,  char,	    endpoint1->type[2]); \
350a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 24, 8,  char,	    endpoint1->type[3]); \
351a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 8,  char,	    endpoint1->type[4]); \
352a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 40, 8,  char,	    endpoint1->type[5]); \
353a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 48, 8,  char,	    endpoint1->type[6]); \
354a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 56, 8,  char,	    endpoint1->type[7]); \
355a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    endpoint1->type[8]); \
356a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    endpoint1->type[9]); \
357a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    endpoint1->type[10]); \
358a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    endpoint1->type[11]); \
359a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,     endpoint1->type[12]); \
360a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    endpoint1->type[13]); \
361a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    endpoint1->type[14]); \
362a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    endpoint1->type[15]); \
363a2a55e51SPrabhakar Kushwaha } while (0)
364a2a55e51SPrabhakar Kushwaha 
365a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
366a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_CONNECTION(cmd, endpoint2, state) \
367a2a55e51SPrabhakar Kushwaha do { \
368a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 0,  32, int,	    endpoint2->id); \
36987457d11SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 32, 16, uint16_t, endpoint2->if_id); \
370a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 0,  8,  char,	    endpoint2->type[0]); \
371a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 8,  8,  char,	    endpoint2->type[1]); \
372a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 16, 8,  char,	    endpoint2->type[2]); \
373a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 24, 8,  char,	    endpoint2->type[3]); \
374a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 32, 8,  char,	    endpoint2->type[4]); \
375a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 40, 8,  char,	    endpoint2->type[5]); \
376a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 48, 8,  char,	    endpoint2->type[6]); \
377a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 56, 8,  char,	    endpoint2->type[7]); \
378a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 0,  8,  char,	    endpoint2->type[8]); \
379a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 8,  8,  char,	    endpoint2->type[9]); \
380a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 16, 8,  char,	    endpoint2->type[10]); \
381a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 24, 8,  char,	    endpoint2->type[11]); \
382a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 32, 8,  char,	    endpoint2->type[12]); \
383a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 40, 8,  char,	    endpoint2->type[13]); \
384a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 48, 8,  char,	    endpoint2->type[14]); \
385a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 56, 8,  char,	    endpoint2->type[15]); \
386a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 0,  32, int,	    state); \
387a2a55e51SPrabhakar Kushwaha } while (0)
388a2a55e51SPrabhakar Kushwaha 
389a2a55e51SPrabhakar Kushwaha /* Data Path Resource Container API
390a2a55e51SPrabhakar Kushwaha  * Contains DPRC API for managing and querying DPAA resources
391a2a55e51SPrabhakar Kushwaha  */
3921f1c25c7SPrabhakar Kushwaha 
393a2a55e51SPrabhakar Kushwaha struct fsl_mc_io;
394a2a55e51SPrabhakar Kushwaha 
395a2a55e51SPrabhakar Kushwaha /**
396a2a55e51SPrabhakar Kushwaha  * Set this value as the icid value in dprc_cfg structure when creating a
397a2a55e51SPrabhakar Kushwaha  * container, in case the ICID is not selected by the user and should be
398a2a55e51SPrabhakar Kushwaha  * allocated by the DPRC from the pool of ICIDs.
399a2a55e51SPrabhakar Kushwaha  */
400a2a55e51SPrabhakar Kushwaha #define DPRC_GET_ICID_FROM_POOL			(uint16_t)(~(0))
401a2a55e51SPrabhakar Kushwaha 
402a2a55e51SPrabhakar Kushwaha /**
403a2a55e51SPrabhakar Kushwaha  * Set this value as the portal_id value in dprc_cfg structure when creating a
404a2a55e51SPrabhakar Kushwaha  * container, in case the portal ID is not specifically selected by the
405a2a55e51SPrabhakar Kushwaha  * user and should be allocated by the DPRC from the pool of portal ids.
406a2a55e51SPrabhakar Kushwaha  */
407a2a55e51SPrabhakar Kushwaha #define DPRC_GET_PORTAL_ID_FROM_POOL	(int)(~(0))
408a2a55e51SPrabhakar Kushwaha 
409a2a55e51SPrabhakar Kushwaha /**
410a2a55e51SPrabhakar Kushwaha  * dprc_get_container_id() - Get container ID associated with a given portal.
411a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
41287457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
413a2a55e51SPrabhakar Kushwaha  * @container_id:	Requested container ID
414a2a55e51SPrabhakar Kushwaha  *
415a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
416a2a55e51SPrabhakar Kushwaha  */
41787457d11SPrabhakar Kushwaha int dprc_get_container_id(struct fsl_mc_io	*mc_io,
41887457d11SPrabhakar Kushwaha 			  uint32_t		cmd_flags,
41987457d11SPrabhakar Kushwaha 			  int			*container_id);
420a2a55e51SPrabhakar Kushwaha 
421a2a55e51SPrabhakar Kushwaha /**
422a2a55e51SPrabhakar Kushwaha  * dprc_open() - Open DPRC object for use
423a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
42487457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
425a2a55e51SPrabhakar Kushwaha  * @container_id: Container ID to open
426a2a55e51SPrabhakar Kushwaha  * @token:	Returned token of DPRC object
427a2a55e51SPrabhakar Kushwaha  *
428a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
429a2a55e51SPrabhakar Kushwaha  *
430a2a55e51SPrabhakar Kushwaha  * @warning	Required before any operation on the object.
431a2a55e51SPrabhakar Kushwaha  */
43287457d11SPrabhakar Kushwaha int dprc_open(struct fsl_mc_io	*mc_io,
43387457d11SPrabhakar Kushwaha 	      uint32_t		cmd_flags,
43487457d11SPrabhakar Kushwaha 	      int		container_id,
43587457d11SPrabhakar Kushwaha 	      uint16_t		*token);
436a2a55e51SPrabhakar Kushwaha 
437a2a55e51SPrabhakar Kushwaha /**
438a2a55e51SPrabhakar Kushwaha  * dprc_close() - Close the control session of the object
439a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
44087457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
441a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
442a2a55e51SPrabhakar Kushwaha  *
443a2a55e51SPrabhakar Kushwaha  * After this function is called, no further operations are
444a2a55e51SPrabhakar Kushwaha  * allowed on the object without opening a new control session.
445a2a55e51SPrabhakar Kushwaha  *
446a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
447a2a55e51SPrabhakar Kushwaha  */
44887457d11SPrabhakar Kushwaha int dprc_close(struct fsl_mc_io	*mc_io,
44987457d11SPrabhakar Kushwaha 	       uint32_t		cmd_flags,
45087457d11SPrabhakar Kushwaha 	       uint16_t		token);
451a2a55e51SPrabhakar Kushwaha 
452a2a55e51SPrabhakar Kushwaha /**
453a2a55e51SPrabhakar Kushwaha  * Container general options
454a2a55e51SPrabhakar Kushwaha  *
455a2a55e51SPrabhakar Kushwaha  * These options may be selected at container creation by the container creator
456a2a55e51SPrabhakar Kushwaha  * and can be retrieved using dprc_get_attributes()
457a2a55e51SPrabhakar Kushwaha  */
458a2a55e51SPrabhakar Kushwaha 
459a2a55e51SPrabhakar Kushwaha /* Spawn Policy Option allowed - Indicates that the new container is allowed
460a2a55e51SPrabhakar Kushwaha  * to spawn and have its own child containers.
461a2a55e51SPrabhakar Kushwaha  */
462a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_SPAWN_ALLOWED		0x00000001
463a2a55e51SPrabhakar Kushwaha 
464a2a55e51SPrabhakar Kushwaha /* General Container allocation policy - Indicates that the new container is
465a2a55e51SPrabhakar Kushwaha  * allowed to allocate requested resources from its parent container; if not
466a2a55e51SPrabhakar Kushwaha  * set, the container is only allowed to use resources in its own pools; Note
467a2a55e51SPrabhakar Kushwaha  * that this is a container's global policy, but the parent container may
468a2a55e51SPrabhakar Kushwaha  * override it and set specific quota per resource type.
469a2a55e51SPrabhakar Kushwaha  */
470a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_ALLOC_ALLOWED		0x00000002
471a2a55e51SPrabhakar Kushwaha 
472a2a55e51SPrabhakar Kushwaha /* Object initialization allowed - software context associated with this
473a2a55e51SPrabhakar Kushwaha  * container is allowed to invoke object initialization operations.
474a2a55e51SPrabhakar Kushwaha  */
475a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_OBJ_CREATE_ALLOWED		0x00000004
476a2a55e51SPrabhakar Kushwaha 
477a2a55e51SPrabhakar Kushwaha /* Topology change allowed - software context associated with this
478a2a55e51SPrabhakar Kushwaha  * container is allowed to invoke topology operations, such as attach/detach
479a2a55e51SPrabhakar Kushwaha  * of network objects.
480a2a55e51SPrabhakar Kushwaha  */
481a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED	0x00000008
482a2a55e51SPrabhakar Kushwaha 
483a2a55e51SPrabhakar Kushwaha /* IOMMU bypass - indicates whether objects of this container are permitted
484a2a55e51SPrabhakar Kushwaha  * to bypass the IOMMU.
485a2a55e51SPrabhakar Kushwaha  */
486a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_IOMMU_BYPASS		0x00000010
487a2a55e51SPrabhakar Kushwaha 
488a2a55e51SPrabhakar Kushwaha /* AIOP - Indicates that container belongs to AIOP.  */
489a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_AIOP			0x00000020
490a2a55e51SPrabhakar Kushwaha 
491a2a55e51SPrabhakar Kushwaha /**
492a2a55e51SPrabhakar Kushwaha  * struct dprc_cfg - Container configuration options
493a2a55e51SPrabhakar Kushwaha  * @icid: Container's ICID; if set to 'DPRC_GET_ICID_FROM_POOL', a free
494a2a55e51SPrabhakar Kushwaha  *		ICID value is allocated by the DPRC
495a2a55e51SPrabhakar Kushwaha  * @portal_id: Portal ID; if set to 'DPRC_GET_PORTAL_ID_FROM_POOL', a free
496a2a55e51SPrabhakar Kushwaha  *		portal ID is allocated by the DPRC
497a2a55e51SPrabhakar Kushwaha  * @options: Combination of 'DPRC_CFG_OPT_<X>' options
4981f1c25c7SPrabhakar Kushwaha  * @label: Object's label
499a2a55e51SPrabhakar Kushwaha  */
500a2a55e51SPrabhakar Kushwaha struct dprc_cfg {
501a2a55e51SPrabhakar Kushwaha 	uint16_t icid;
502a2a55e51SPrabhakar Kushwaha 	int portal_id;
503a2a55e51SPrabhakar Kushwaha 	uint64_t options;
5041f1c25c7SPrabhakar Kushwaha 	char label[16];
505a2a55e51SPrabhakar Kushwaha };
506a2a55e51SPrabhakar Kushwaha 
507a2a55e51SPrabhakar Kushwaha /**
508*1ebbe4fcSPrabhakar Kushwaha  * dprc_create_container() - Create child container
509*1ebbe4fcSPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
510*1ebbe4fcSPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
511*1ebbe4fcSPrabhakar Kushwaha  * @token:	Token of DPRC object
512*1ebbe4fcSPrabhakar Kushwaha  * @cfg:	Child container configuration
513*1ebbe4fcSPrabhakar Kushwaha  * @child_container_id:	Returned child container ID
514*1ebbe4fcSPrabhakar Kushwaha  * @child_portal_offset: Returned child portal offset from MC portal base
515*1ebbe4fcSPrabhakar Kushwaha  *
516*1ebbe4fcSPrabhakar Kushwaha  *
517*1ebbe4fcSPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
518*1ebbe4fcSPrabhakar Kushwaha  */
519*1ebbe4fcSPrabhakar Kushwaha int dprc_create_container(struct fsl_mc_io	*mc_io,
520*1ebbe4fcSPrabhakar Kushwaha 			  uint32_t		cmd_flags,
521*1ebbe4fcSPrabhakar Kushwaha 			  uint16_t		token,
522*1ebbe4fcSPrabhakar Kushwaha 			  struct dprc_cfg	*cfg,
523*1ebbe4fcSPrabhakar Kushwaha 			  int			*child_container_id,
524*1ebbe4fcSPrabhakar Kushwaha 			  uint64_t		*child_portal_offset);
525*1ebbe4fcSPrabhakar Kushwaha 
526*1ebbe4fcSPrabhakar Kushwaha /**
527*1ebbe4fcSPrabhakar Kushwaha  * dprc_destroy_container() - Destroy child container.
528*1ebbe4fcSPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
529*1ebbe4fcSPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
530*1ebbe4fcSPrabhakar Kushwaha  * @token:	Token of DPRC object
531*1ebbe4fcSPrabhakar Kushwaha  * @child_container_id:	ID of the container to destroy
532*1ebbe4fcSPrabhakar Kushwaha  *
533*1ebbe4fcSPrabhakar Kushwaha  * This function terminates the child container, so following this call the
534*1ebbe4fcSPrabhakar Kushwaha  * child container ID becomes invalid.
535*1ebbe4fcSPrabhakar Kushwaha  *
536*1ebbe4fcSPrabhakar Kushwaha  * Notes:
537*1ebbe4fcSPrabhakar Kushwaha  * - All resources and objects of the destroyed container are returned to the
538*1ebbe4fcSPrabhakar Kushwaha  * parent container or destroyed if were created be the destroyed container.
539*1ebbe4fcSPrabhakar Kushwaha  * - This function destroy all the child containers of the specified
540*1ebbe4fcSPrabhakar Kushwaha  *   container prior to destroying the container itself.
541*1ebbe4fcSPrabhakar Kushwaha  *
542*1ebbe4fcSPrabhakar Kushwaha  * warning: Only the parent container is allowed to destroy a child policy
543*1ebbe4fcSPrabhakar Kushwaha  *		Container 0 can't be destroyed
544*1ebbe4fcSPrabhakar Kushwaha  *
545*1ebbe4fcSPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
546*1ebbe4fcSPrabhakar Kushwaha  *
547*1ebbe4fcSPrabhakar Kushwaha  */
548*1ebbe4fcSPrabhakar Kushwaha int dprc_destroy_container(struct fsl_mc_io	*mc_io,
549*1ebbe4fcSPrabhakar Kushwaha 			   uint32_t		cmd_flags,
550*1ebbe4fcSPrabhakar Kushwaha 			   uint16_t		token,
551*1ebbe4fcSPrabhakar Kushwaha 			   int			child_container_id);
552*1ebbe4fcSPrabhakar Kushwaha 
553*1ebbe4fcSPrabhakar Kushwaha /**
554a2a55e51SPrabhakar Kushwaha  * dprc_reset_container - Reset child container.
555a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
55687457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
557a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
558a2a55e51SPrabhakar Kushwaha  * @child_container_id:	ID of the container to reset
559a2a55e51SPrabhakar Kushwaha  *
560a2a55e51SPrabhakar Kushwaha  * In case a software context crashes or becomes non-responsive, the parent
561a2a55e51SPrabhakar Kushwaha  * may wish to reset its resources container before the software context is
562a2a55e51SPrabhakar Kushwaha  * restarted.
563a2a55e51SPrabhakar Kushwaha  *
564a2a55e51SPrabhakar Kushwaha  * This routine informs all objects assigned to the child container that the
565a2a55e51SPrabhakar Kushwaha  * container is being reset, so they may perform any cleanup operations that are
566a2a55e51SPrabhakar Kushwaha  * needed. All objects handles that were owned by the child container shall be
567a2a55e51SPrabhakar Kushwaha  * closed.
568a2a55e51SPrabhakar Kushwaha  *
569a2a55e51SPrabhakar Kushwaha  * Note that such request may be submitted even if the child software context
570a2a55e51SPrabhakar Kushwaha  * has not crashed, but the resulting object cleanup operations will not be
571a2a55e51SPrabhakar Kushwaha  * aware of that.
572a2a55e51SPrabhakar Kushwaha  *
573a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
574a2a55e51SPrabhakar Kushwaha  */
575a2a55e51SPrabhakar Kushwaha int dprc_reset_container(struct fsl_mc_io	*mc_io,
57687457d11SPrabhakar Kushwaha 			 uint32_t		cmd_flags,
577a2a55e51SPrabhakar Kushwaha 			 uint16_t		token,
578a2a55e51SPrabhakar Kushwaha 			 int			child_container_id);
579a2a55e51SPrabhakar Kushwaha 
580a2a55e51SPrabhakar Kushwaha /**
581a2a55e51SPrabhakar Kushwaha  * struct dprc_attributes - Container attributes
582a2a55e51SPrabhakar Kushwaha  * @container_id: Container's ID
583a2a55e51SPrabhakar Kushwaha  * @icid: Container's ICID
584a2a55e51SPrabhakar Kushwaha  * @portal_id: Container's portal ID
585a2a55e51SPrabhakar Kushwaha  * @options: Container's options as set at container's creation
586a2a55e51SPrabhakar Kushwaha  * @version: DPRC version
587a2a55e51SPrabhakar Kushwaha  */
588a2a55e51SPrabhakar Kushwaha struct dprc_attributes {
589a2a55e51SPrabhakar Kushwaha 	int container_id;
590a2a55e51SPrabhakar Kushwaha 	uint16_t icid;
591a2a55e51SPrabhakar Kushwaha 	int portal_id;
592a2a55e51SPrabhakar Kushwaha 	uint64_t options;
593a2a55e51SPrabhakar Kushwaha 	/**
594a2a55e51SPrabhakar Kushwaha 	 * struct version - DPRC version
595a2a55e51SPrabhakar Kushwaha 	 * @major: DPRC major version
596a2a55e51SPrabhakar Kushwaha 	 * @minor: DPRC minor version
597a2a55e51SPrabhakar Kushwaha 	 */
598a2a55e51SPrabhakar Kushwaha 	struct {
599a2a55e51SPrabhakar Kushwaha 		uint16_t major;
600a2a55e51SPrabhakar Kushwaha 		uint16_t minor;
601a2a55e51SPrabhakar Kushwaha 	} version;
602a2a55e51SPrabhakar Kushwaha };
603a2a55e51SPrabhakar Kushwaha 
604a2a55e51SPrabhakar Kushwaha /**
605a2a55e51SPrabhakar Kushwaha  * dprc_get_attributes() - Obtains container attributes
606a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
60787457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
608a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
60987457d11SPrabhakar Kushwaha  * @attributes:	Returned container attributes
610a2a55e51SPrabhakar Kushwaha  *
611a2a55e51SPrabhakar Kushwaha  * Return:     '0' on Success; Error code otherwise.
612a2a55e51SPrabhakar Kushwaha  */
613a2a55e51SPrabhakar Kushwaha int dprc_get_attributes(struct fsl_mc_io	*mc_io,
61487457d11SPrabhakar Kushwaha 			uint32_t		cmd_flags,
615a2a55e51SPrabhakar Kushwaha 			uint16_t		token,
616a2a55e51SPrabhakar Kushwaha 			struct dprc_attributes	*attributes);
617a2a55e51SPrabhakar Kushwaha 
618a2a55e51SPrabhakar Kushwaha /**
619a2a55e51SPrabhakar Kushwaha  * dprc_get_obj_count() - Obtains the number of objects in the DPRC
620a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
62187457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
622a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
623a2a55e51SPrabhakar Kushwaha  * @obj_count:	Number of objects assigned to the DPRC
624a2a55e51SPrabhakar Kushwaha  *
625a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
626a2a55e51SPrabhakar Kushwaha  */
62787457d11SPrabhakar Kushwaha int dprc_get_obj_count(struct fsl_mc_io	*mc_io,
62887457d11SPrabhakar Kushwaha 		       uint32_t		cmd_flags,
62987457d11SPrabhakar Kushwaha 		       uint16_t		token,
63087457d11SPrabhakar Kushwaha 		       int			*obj_count);
631a2a55e51SPrabhakar Kushwaha 
632a2a55e51SPrabhakar Kushwaha /* Objects Attributes Flags */
633a2a55e51SPrabhakar Kushwaha 
634a2a55e51SPrabhakar Kushwaha /* Opened state - Indicates that an object is open by at least one owner */
635a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_OPEN		0x00000001
636a2a55e51SPrabhakar Kushwaha /* Plugged state - Indicates that the object is plugged */
637a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_PLUGGED		0x00000002
638a2a55e51SPrabhakar Kushwaha 
639a2a55e51SPrabhakar Kushwaha /**
640a2a55e51SPrabhakar Kushwaha  * struct dprc_obj_desc - Object descriptor, returned from dprc_get_obj()
641a2a55e51SPrabhakar Kushwaha  * @type: Type of object: NULL terminated string
642a2a55e51SPrabhakar Kushwaha  * @id: ID of logical object resource
643a2a55e51SPrabhakar Kushwaha  * @vendor: Object vendor identifier
644a2a55e51SPrabhakar Kushwaha  * @ver_major: Major version number
645a2a55e51SPrabhakar Kushwaha  * @ver_minor:  Minor version number
646a2a55e51SPrabhakar Kushwaha  * @irq_count: Number of interrupts supported by the object
647a2a55e51SPrabhakar Kushwaha  * @region_count: Number of mappable regions supported by the object
648a2a55e51SPrabhakar Kushwaha  * @state: Object state: combination of DPRC_OBJ_STATE_ states
6491f1c25c7SPrabhakar Kushwaha  * @label: Object label
650a2a55e51SPrabhakar Kushwaha  */
651a2a55e51SPrabhakar Kushwaha struct dprc_obj_desc {
652a2a55e51SPrabhakar Kushwaha 	char type[16];
653a2a55e51SPrabhakar Kushwaha 	int id;
654a2a55e51SPrabhakar Kushwaha 	uint16_t vendor;
655a2a55e51SPrabhakar Kushwaha 	uint16_t ver_major;
656a2a55e51SPrabhakar Kushwaha 	uint16_t ver_minor;
657a2a55e51SPrabhakar Kushwaha 	uint8_t irq_count;
658a2a55e51SPrabhakar Kushwaha 	uint8_t region_count;
659a2a55e51SPrabhakar Kushwaha 	uint32_t state;
6601f1c25c7SPrabhakar Kushwaha 	char label[16];
661a2a55e51SPrabhakar Kushwaha };
662a2a55e51SPrabhakar Kushwaha 
663a2a55e51SPrabhakar Kushwaha /**
664a2a55e51SPrabhakar Kushwaha  * dprc_get_obj() - Get general information on an object
665a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
66687457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
667a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
668a2a55e51SPrabhakar Kushwaha  * @obj_index:	Index of the object to be queried (< obj_count)
669a2a55e51SPrabhakar Kushwaha  * @obj_desc:	Returns the requested object descriptor
670a2a55e51SPrabhakar Kushwaha  *
671a2a55e51SPrabhakar Kushwaha  * The object descriptors are retrieved one by one by incrementing
672a2a55e51SPrabhakar Kushwaha  * obj_index up to (not including) the value of obj_count returned
673a2a55e51SPrabhakar Kushwaha  * from dprc_get_obj_count(). dprc_get_obj_count() must
674a2a55e51SPrabhakar Kushwaha  * be called prior to dprc_get_obj().
675a2a55e51SPrabhakar Kushwaha  *
676a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
677a2a55e51SPrabhakar Kushwaha  */
678a2a55e51SPrabhakar Kushwaha int dprc_get_obj(struct fsl_mc_io	*mc_io,
67987457d11SPrabhakar Kushwaha 		 uint32_t		cmd_flags,
680a2a55e51SPrabhakar Kushwaha 		 uint16_t		token,
681a2a55e51SPrabhakar Kushwaha 		 int			obj_index,
682a2a55e51SPrabhakar Kushwaha 		 struct dprc_obj_desc	*obj_desc);
683a2a55e51SPrabhakar Kushwaha 
684a2a55e51SPrabhakar Kushwaha /**
6851f1c25c7SPrabhakar Kushwaha  * dprc_get_res_count() - Obtains the number of free resources that are
6861f1c25c7SPrabhakar Kushwaha  *		assigned to this container, by pool type
687a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
68887457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
689a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
690a2a55e51SPrabhakar Kushwaha  * @type:	pool type
691a2a55e51SPrabhakar Kushwaha  * @res_count:	Returned number of free resources of the given
692a2a55e51SPrabhakar Kushwaha  *			resource type that are assigned to this DPRC
693a2a55e51SPrabhakar Kushwaha  *
694a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
695a2a55e51SPrabhakar Kushwaha  */
696a2a55e51SPrabhakar Kushwaha int dprc_get_res_count(struct fsl_mc_io *mc_io,
69787457d11SPrabhakar Kushwaha 		       uint32_t	cmd_flags,
698a2a55e51SPrabhakar Kushwaha 		       uint16_t		token,
699a2a55e51SPrabhakar Kushwaha 		       char		*type,
700a2a55e51SPrabhakar Kushwaha 		       int		*res_count);
701a2a55e51SPrabhakar Kushwaha 
702a2a55e51SPrabhakar Kushwaha /**
703a2a55e51SPrabhakar Kushwaha  * enum dprc_iter_status - Iteration status
704a2a55e51SPrabhakar Kushwaha  * @DPRC_ITER_STATUS_FIRST: Perform first iteration
705a2a55e51SPrabhakar Kushwaha  * @DPRC_ITER_STATUS_MORE: Indicates more/next iteration is needed
706a2a55e51SPrabhakar Kushwaha  * @DPRC_ITER_STATUS_LAST: Indicates last iteration
707a2a55e51SPrabhakar Kushwaha  */
708a2a55e51SPrabhakar Kushwaha enum dprc_iter_status {
709a2a55e51SPrabhakar Kushwaha 	DPRC_ITER_STATUS_FIRST = 0,
710a2a55e51SPrabhakar Kushwaha 	DPRC_ITER_STATUS_MORE = 1,
711a2a55e51SPrabhakar Kushwaha 	DPRC_ITER_STATUS_LAST = 2
712a2a55e51SPrabhakar Kushwaha };
713a2a55e51SPrabhakar Kushwaha 
714a2a55e51SPrabhakar Kushwaha /**
715a2a55e51SPrabhakar Kushwaha  * struct dprc_res_ids_range_desc - Resource ID range descriptor
716a2a55e51SPrabhakar Kushwaha  * @base_id: Base resource ID of this range
717a2a55e51SPrabhakar Kushwaha  * @last_id: Last resource ID of this range
718a2a55e51SPrabhakar Kushwaha  * @iter_status: Iteration status - should be set to DPRC_ITER_STATUS_FIRST at
719a2a55e51SPrabhakar Kushwaha  *	first iteration; while the returned marker is DPRC_ITER_STATUS_MORE,
720a2a55e51SPrabhakar Kushwaha  *	additional iterations are needed, until the returned marker is
721a2a55e51SPrabhakar Kushwaha  *	DPRC_ITER_STATUS_LAST
722a2a55e51SPrabhakar Kushwaha  */
723a2a55e51SPrabhakar Kushwaha struct dprc_res_ids_range_desc {
724a2a55e51SPrabhakar Kushwaha 	int base_id;
725a2a55e51SPrabhakar Kushwaha 	int last_id;
726a2a55e51SPrabhakar Kushwaha 	enum dprc_iter_status iter_status;
727a2a55e51SPrabhakar Kushwaha };
728a2a55e51SPrabhakar Kushwaha 
729a2a55e51SPrabhakar Kushwaha /**
730a2a55e51SPrabhakar Kushwaha  * dprc_get_res_ids() - Obtains IDs of free resources in the container
731a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
73287457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
733a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
734a2a55e51SPrabhakar Kushwaha  * @type:	pool type
735a2a55e51SPrabhakar Kushwaha  * @range_desc:	range descriptor
736a2a55e51SPrabhakar Kushwaha  *
737a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
738a2a55e51SPrabhakar Kushwaha  */
739a2a55e51SPrabhakar Kushwaha int dprc_get_res_ids(struct fsl_mc_io			*mc_io,
74087457d11SPrabhakar Kushwaha 		     uint32_t				cmd_flags,
741a2a55e51SPrabhakar Kushwaha 		     uint16_t				token,
742a2a55e51SPrabhakar Kushwaha 		     char				*type,
743a2a55e51SPrabhakar Kushwaha 		     struct dprc_res_ids_range_desc	*range_desc);
744a2a55e51SPrabhakar Kushwaha 
74587457d11SPrabhakar Kushwaha /* Region flags */
74687457d11SPrabhakar Kushwaha /* Cacheable - Indicates that region should be mapped as cacheable */
74787457d11SPrabhakar Kushwaha #define DPRC_REGION_CACHEABLE	0x00000001
74887457d11SPrabhakar Kushwaha 
74987457d11SPrabhakar Kushwaha /**
75087457d11SPrabhakar Kushwaha  * enum dprc_region_type - Region type
75187457d11SPrabhakar Kushwaha  * @DPRC_REGION_TYPE_MC_PORTAL: MC portal region
75287457d11SPrabhakar Kushwaha  * @DPRC_REGION_TYPE_QBMAN_PORTAL: Qbman portal region
75387457d11SPrabhakar Kushwaha  */
75487457d11SPrabhakar Kushwaha enum dprc_region_type {
75587457d11SPrabhakar Kushwaha 	DPRC_REGION_TYPE_MC_PORTAL,
75687457d11SPrabhakar Kushwaha 	DPRC_REGION_TYPE_QBMAN_PORTAL
75787457d11SPrabhakar Kushwaha };
75887457d11SPrabhakar Kushwaha 
759a2a55e51SPrabhakar Kushwaha /**
760a2a55e51SPrabhakar Kushwaha  * struct dprc_region_desc - Mappable region descriptor
7611f1c25c7SPrabhakar Kushwaha  * @base_offset: Region offset from region's base address.
7621f1c25c7SPrabhakar Kushwaha  *	For DPMCP and DPRC objects, region base is offset from SoC MC portals
7631f1c25c7SPrabhakar Kushwaha  *	base address; For DPIO, region base is offset from SoC QMan portals
7641f1c25c7SPrabhakar Kushwaha  *	base address
765a2a55e51SPrabhakar Kushwaha  * @size: Region size (in bytes)
76687457d11SPrabhakar Kushwaha  * @flags: Region attributes
76787457d11SPrabhakar Kushwaha  * @type: Portal region type
768a2a55e51SPrabhakar Kushwaha  */
769a2a55e51SPrabhakar Kushwaha struct dprc_region_desc {
77087457d11SPrabhakar Kushwaha 	uint32_t base_offset;
771a2a55e51SPrabhakar Kushwaha 	uint32_t size;
77287457d11SPrabhakar Kushwaha 	uint32_t flags;
77387457d11SPrabhakar Kushwaha 	enum dprc_region_type type;
774a2a55e51SPrabhakar Kushwaha };
775a2a55e51SPrabhakar Kushwaha 
776a2a55e51SPrabhakar Kushwaha /**
777a2a55e51SPrabhakar Kushwaha  * dprc_get_obj_region() - Get region information for a specified object.
778a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
77987457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
780a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
78187457d11SPrabhakar Kushwaha  * @obj_type:	Object type as returned in dprc_get_obj()
782a2a55e51SPrabhakar Kushwaha  * @obj_id:	Unique object instance as returned in dprc_get_obj()
783a2a55e51SPrabhakar Kushwaha  * @region_index: The specific region to query
784a2a55e51SPrabhakar Kushwaha  * @region_desc:  Returns the requested region descriptor
785a2a55e51SPrabhakar Kushwaha  *
786a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
787a2a55e51SPrabhakar Kushwaha  */
788a2a55e51SPrabhakar Kushwaha int dprc_get_obj_region(struct fsl_mc_io	*mc_io,
78987457d11SPrabhakar Kushwaha 			uint32_t		cmd_flags,
790a2a55e51SPrabhakar Kushwaha 			uint16_t		token,
791a2a55e51SPrabhakar Kushwaha 			char			*obj_type,
792a2a55e51SPrabhakar Kushwaha 			int			obj_id,
793a2a55e51SPrabhakar Kushwaha 			uint8_t			region_index,
794a2a55e51SPrabhakar Kushwaha 			struct dprc_region_desc	*region_desc);
795a2a55e51SPrabhakar Kushwaha /**
796a2a55e51SPrabhakar Kushwaha  * struct dprc_endpoint - Endpoint description for link connect/disconnect
797a2a55e51SPrabhakar Kushwaha  *			operations
798a2a55e51SPrabhakar Kushwaha  * @type: Endpoint object type: NULL terminated string
799a2a55e51SPrabhakar Kushwaha  * @id: Endpoint object ID
80087457d11SPrabhakar Kushwaha  * @if_id: Interface ID; should be set for endpoints with multiple
801a2a55e51SPrabhakar Kushwaha  *		interfaces ("dpsw", "dpdmux"); for others, always set to 0
802a2a55e51SPrabhakar Kushwaha  */
803a2a55e51SPrabhakar Kushwaha struct dprc_endpoint {
804a2a55e51SPrabhakar Kushwaha 	char		type[16];
805a2a55e51SPrabhakar Kushwaha 	int		id;
80687457d11SPrabhakar Kushwaha 	uint16_t	if_id;
80787457d11SPrabhakar Kushwaha };
80887457d11SPrabhakar Kushwaha 
80987457d11SPrabhakar Kushwaha /**
81087457d11SPrabhakar Kushwaha  * struct dprc_connection_cfg - Connection configuration.
81187457d11SPrabhakar Kushwaha  *				Used for virtual connections only
81287457d11SPrabhakar Kushwaha  * @committed_rate: Committed rate (Mbits/s)
81387457d11SPrabhakar Kushwaha  * @max_rate: Maximum rate (Mbits/s)
81487457d11SPrabhakar Kushwaha  */
81587457d11SPrabhakar Kushwaha struct dprc_connection_cfg {
81687457d11SPrabhakar Kushwaha 	uint32_t committed_rate;
81787457d11SPrabhakar Kushwaha 	uint32_t max_rate;
818a2a55e51SPrabhakar Kushwaha };
819a2a55e51SPrabhakar Kushwaha 
820a2a55e51SPrabhakar Kushwaha /**
821a2a55e51SPrabhakar Kushwaha  * dprc_connect() - Connect two endpoints to create a network link between them
822a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
82387457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
824a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
825a2a55e51SPrabhakar Kushwaha  * @endpoint1:	Endpoint 1 configuration parameters
826a2a55e51SPrabhakar Kushwaha  * @endpoint2:	Endpoint 2 configuration parameters
82787457d11SPrabhakar Kushwaha  * @cfg: Connection configuration. The connection configuration is ignored for
82887457d11SPrabhakar Kushwaha  *	connections made to DPMAC objects, where rate is retrieved from the
82987457d11SPrabhakar Kushwaha  *	MAC configuration.
830a2a55e51SPrabhakar Kushwaha  *
831a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
832a2a55e51SPrabhakar Kushwaha  */
833a2a55e51SPrabhakar Kushwaha int dprc_connect(struct fsl_mc_io			*mc_io,
83487457d11SPrabhakar Kushwaha 		 uint32_t				cmd_flags,
835a2a55e51SPrabhakar Kushwaha 		 uint16_t				token,
836a2a55e51SPrabhakar Kushwaha 		 const struct dprc_endpoint		*endpoint1,
83787457d11SPrabhakar Kushwaha 		 const struct dprc_endpoint		*endpoint2,
83887457d11SPrabhakar Kushwaha 		 const struct dprc_connection_cfg	*cfg);
839a2a55e51SPrabhakar Kushwaha 
840a2a55e51SPrabhakar Kushwaha /**
841a2a55e51SPrabhakar Kushwaha  * dprc_disconnect() - Disconnect one endpoint to remove its network connection
842a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
84387457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
844a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
845a2a55e51SPrabhakar Kushwaha  * @endpoint:	Endpoint configuration parameters
846a2a55e51SPrabhakar Kushwaha  *
847a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
848a2a55e51SPrabhakar Kushwaha  */
849a2a55e51SPrabhakar Kushwaha int dprc_disconnect(struct fsl_mc_io		*mc_io,
85087457d11SPrabhakar Kushwaha 		    uint32_t			cmd_flags,
851a2a55e51SPrabhakar Kushwaha 		    uint16_t			token,
852a2a55e51SPrabhakar Kushwaha 		    const struct dprc_endpoint	*endpoint);
853a2a55e51SPrabhakar Kushwaha 
854a2a55e51SPrabhakar Kushwaha /**
855a2a55e51SPrabhakar Kushwaha * dprc_get_connection() - Get connected endpoint and link status if connection
856a2a55e51SPrabhakar Kushwaha *			exists.
85787457d11SPrabhakar Kushwaha * @mc_io:	Pointer to MC portal's I/O object
85887457d11SPrabhakar Kushwaha * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
85987457d11SPrabhakar Kushwaha * @token:	Token of DPRC object
86087457d11SPrabhakar Kushwaha * @endpoint1:	Endpoint 1 configuration parameters
86187457d11SPrabhakar Kushwaha * @endpoint2:	Returned endpoint 2 configuration parameters
862a2a55e51SPrabhakar Kushwaha * @state:	Returned link state: 1 - link is up, 0 - link is down
863a2a55e51SPrabhakar Kushwaha *
864a2a55e51SPrabhakar Kushwaha * Return:     '0' on Success; -ENAVAIL if connection does not exist.
865a2a55e51SPrabhakar Kushwaha */
866a2a55e51SPrabhakar Kushwaha int dprc_get_connection(struct fsl_mc_io		*mc_io,
86787457d11SPrabhakar Kushwaha 			uint32_t			cmd_flags,
868a2a55e51SPrabhakar Kushwaha 			uint16_t			token,
869a2a55e51SPrabhakar Kushwaha 			const struct dprc_endpoint	*endpoint1,
870a2a55e51SPrabhakar Kushwaha 			struct dprc_endpoint		*endpoint2,
871a2a55e51SPrabhakar Kushwaha 			int				*state);
872a2a55e51SPrabhakar Kushwaha 
873a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPRC_H */
874