xref: /rk3399_rockchip-uboot/include/fsl-mc/fsl_dprc.h (revision a2a55e518f81900ab1538656e5df8d2759ccb1fb)
1*a2a55e51SPrabhakar Kushwaha /*
2*a2a55e51SPrabhakar Kushwaha  * Freescale Layerscape MC I/O wrapper
3*a2a55e51SPrabhakar Kushwaha  *
4*a2a55e51SPrabhakar Kushwaha  * Copyright (C) 2013-2015 Freescale Semiconductor, Inc.
5*a2a55e51SPrabhakar Kushwaha  * Author: German Rivera <German.Rivera@freescale.com>
6*a2a55e51SPrabhakar Kushwaha  *
7*a2a55e51SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
8*a2a55e51SPrabhakar Kushwaha  */
9*a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPRC_H
10*a2a55e51SPrabhakar Kushwaha #define _FSL_DPRC_H
11*a2a55e51SPrabhakar Kushwaha 
12*a2a55e51SPrabhakar Kushwaha /* DPRC Version */
13*a2a55e51SPrabhakar Kushwaha #define DPRC_VER_MAJOR				2
14*a2a55e51SPrabhakar Kushwaha #define DPRC_VER_MINOR				0
15*a2a55e51SPrabhakar Kushwaha 
16*a2a55e51SPrabhakar Kushwaha /* Command IDs */
17*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_CLOSE			0x800
18*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_OPEN				0x805
19*a2a55e51SPrabhakar Kushwaha 
20*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_ATTR			0x004
21*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_RESET_CONT			0x005
22*a2a55e51SPrabhakar Kushwaha 
23*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_CONT_ID			0x830
24*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ_COUNT		0x159
25*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ			0x15A
26*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_RES_COUNT		0x15B
27*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_RES_IDS			0x15C
28*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_OBJ_REG			0x15E
29*a2a55e51SPrabhakar Kushwaha 
30*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_CONNECT			0x167
31*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_DISCONNECT			0x168
32*a2a55e51SPrabhakar Kushwaha #define DPRC_CMDID_GET_CONNECTION		0x16C
33*a2a55e51SPrabhakar Kushwaha 
34*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
35*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_CONTAINER_ID(cmd, container_id) \
36*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32,  int,	    container_id)
37*a2a55e51SPrabhakar Kushwaha 
38*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
39*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_OPEN(cmd, container_id) \
40*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    container_id)
41*a2a55e51SPrabhakar Kushwaha 
42*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
43*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_RESET_CONTAINER(cmd, child_container_id) \
44*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    child_container_id)
45*a2a55e51SPrabhakar Kushwaha 
46*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
47*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_ATTRIBUTES(cmd, attr) \
48*a2a55e51SPrabhakar Kushwaha do { \
49*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,	    attr->container_id); \
50*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 16, uint16_t, attr->icid); \
51*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, uint32_t, attr->options);\
52*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 32, int,      attr->portal_id); \
53*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  16, uint16_t, attr->version.major);\
54*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 16, 16, uint16_t, attr->version.minor);\
55*a2a55e51SPrabhakar Kushwaha } while (0)
56*a2a55e51SPrabhakar Kushwaha 
57*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
58*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_COUNT(cmd, obj_count) \
59*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 32, int,      obj_count)
60*a2a55e51SPrabhakar Kushwaha 
61*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
62*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ(cmd, obj_index) \
63*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    obj_index)
64*a2a55e51SPrabhakar Kushwaha 
65*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
66*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ(cmd, obj_desc) \
67*a2a55e51SPrabhakar Kushwaha do { \
68*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 32, int,	    obj_desc->id); \
69*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  16, uint16_t, obj_desc->vendor); \
70*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 8,  uint8_t,  obj_desc->irq_count); \
71*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 24, 8,  uint8_t,  obj_desc->region_count); \
72*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 32, uint32_t, obj_desc->state);\
73*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  16, uint16_t, obj_desc->ver_major);\
74*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 16, 16, uint16_t, obj_desc->ver_minor);\
75*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 0,  8,  char,	    obj_desc->type[0]);\
76*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 8,  8,  char,	    obj_desc->type[1]);\
77*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 16, 8,  char,	    obj_desc->type[2]);\
78*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 24, 8,  char,	    obj_desc->type[3]);\
79*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 32, 8,  char,	    obj_desc->type[4]);\
80*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 40, 8,  char,	    obj_desc->type[5]);\
81*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 48, 8,  char,	    obj_desc->type[6]);\
82*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 56, 8,  char,	    obj_desc->type[7]);\
83*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 0,  8,  char,	    obj_desc->type[8]);\
84*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 8,  8,  char,	    obj_desc->type[9]);\
85*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 16, 8,  char,	    obj_desc->type[10]);\
86*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 24, 8,  char,	    obj_desc->type[11]);\
87*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 32, 8,  char,	    obj_desc->type[12]);\
88*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 40, 8,  char,	    obj_desc->type[13]);\
89*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 48, 8,  char,	    obj_desc->type[14]);\
90*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 56, 8,  char,	    obj_desc->type[15]);\
91*a2a55e51SPrabhakar Kushwaha } while (0)
92*a2a55e51SPrabhakar Kushwaha 
93*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
94*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_COUNT(cmd, type) \
95*a2a55e51SPrabhakar Kushwaha do { \
96*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  8,  char,	    type[0]);\
97*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 8,  8,  char,	    type[1]);\
98*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 8,  char,	    type[2]);\
99*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 24, 8,  char,	    type[3]);\
100*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 8,  char,	    type[4]);\
101*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 40, 8,  char,	    type[5]);\
102*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 48, 8,  char,	    type[6]);\
103*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 56, 8,  char,	    type[7]);\
104*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    type[8]);\
105*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    type[9]);\
106*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    type[10]);\
107*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    type[11]);\
108*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    type[12]);\
109*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    type[13]);\
110*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    type[14]);\
111*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    type[15]);\
112*a2a55e51SPrabhakar Kushwaha } while (0)
113*a2a55e51SPrabhakar Kushwaha 
114*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
115*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_COUNT(cmd, res_count) \
116*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,	    res_count)
117*a2a55e51SPrabhakar Kushwaha 
118*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
119*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_RES_IDS(cmd, range_desc, type) \
120*a2a55e51SPrabhakar Kushwaha do { \
121*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 42, 7,  enum dprc_iter_status, \
122*a2a55e51SPrabhakar Kushwaha 					    range_desc->iter_status); \
123*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  32, int,	    range_desc->base_id); \
124*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 32, int,	    range_desc->last_id);\
125*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    type[0]);\
126*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    type[1]);\
127*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    type[2]);\
128*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    type[3]);\
129*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    type[4]);\
130*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,     type[5]);\
131*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    type[6]);\
132*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    type[7]);\
133*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  8,  char,	    type[8]);\
134*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,  8,  char,	    type[9]);\
135*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 16, 8,  char,	    type[10]);\
136*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 24, 8,  char,	    type[11]);\
137*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 8,  char,	    type[12]);\
138*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 40, 8,  char,	    type[13]);\
139*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 48, 8,  char,	    type[14]);\
140*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 56, 8,  char,	    type[15]);\
141*a2a55e51SPrabhakar Kushwaha } while (0)
142*a2a55e51SPrabhakar Kushwaha 
143*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
144*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_RES_IDS(cmd, range_desc) \
145*a2a55e51SPrabhakar Kushwaha do { \
146*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 42, 7,  enum dprc_iter_status, \
147*a2a55e51SPrabhakar Kushwaha 					    range_desc->iter_status);\
148*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, int,	    range_desc->base_id); \
149*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 32, int,	    range_desc->last_id);\
150*a2a55e51SPrabhakar Kushwaha } while (0)
151*a2a55e51SPrabhakar Kushwaha 
152*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
153*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index) \
154*a2a55e51SPrabhakar Kushwaha do { \
155*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    obj_id); \
156*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  region_index);\
157*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  8,  char,	    obj_type[0]);\
158*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,  8,  char,	    obj_type[1]);\
159*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 16, 8,  char,	    obj_type[2]);\
160*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 24, 8,  char,	    obj_type[3]);\
161*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 8,  char,	    obj_type[4]);\
162*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 40, 8,  char,	    obj_type[5]);\
163*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 48, 8,  char,	    obj_type[6]);\
164*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 56, 8,  char,	    obj_type[7]);\
165*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 0,  8,  char,	    obj_type[8]);\
166*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 8,  8,  char,	    obj_type[9]);\
167*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 16, 8,  char,	    obj_type[10]);\
168*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 24, 8,  char,	    obj_type[11]);\
169*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 32, 8,  char,	    obj_type[12]);\
170*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 40, 8,  char,	    obj_type[13]);\
171*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 48, 8,  char,	    obj_type[14]);\
172*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 56, 8,  char,	    obj_type[15]);\
173*a2a55e51SPrabhakar Kushwaha } while (0)
174*a2a55e51SPrabhakar Kushwaha 
175*a2a55e51SPrabhakar Kushwaha /*	param, offset, width,	type,		arg_name */
176*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_OBJ_REGION(cmd, region_desc) \
177*a2a55e51SPrabhakar Kushwaha do { \
178*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, region_desc->base_paddr);\
179*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  32, uint32_t, region_desc->size); \
180*a2a55e51SPrabhakar Kushwaha } while (0)
181*a2a55e51SPrabhakar Kushwaha 
182*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
183*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2) \
184*a2a55e51SPrabhakar Kushwaha do { \
185*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,      endpoint1->id); \
186*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, int,	    endpoint1->interface_id); \
187*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  32, int,	    endpoint2->id); \
188*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 32, int,	    endpoint2->interface_id); \
189*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,     endpoint1->type[0]); \
190*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    endpoint1->type[1]); \
191*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    endpoint1->type[2]); \
192*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    endpoint1->type[3]); \
193*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    endpoint1->type[4]); \
194*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    endpoint1->type[5]); \
195*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    endpoint1->type[6]); \
196*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    endpoint1->type[7]); \
197*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  8,  char,	    endpoint1->type[8]); \
198*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,  8,  char,	    endpoint1->type[9]); \
199*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 16, 8,  char,	    endpoint1->type[10]); \
200*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 24, 8,  char,	    endpoint1->type[11]); \
201*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 8,  char,     endpoint1->type[12]); \
202*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 40, 8,  char,	    endpoint1->type[13]); \
203*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 48, 8,  char,	    endpoint1->type[14]); \
204*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 56, 8,  char,	    endpoint1->type[15]); \
205*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 0,  8,  char,	    endpoint2->type[0]); \
206*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 8,  8,  char,	    endpoint2->type[1]); \
207*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 16, 8,  char,	    endpoint2->type[2]); \
208*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 24, 8,  char,	    endpoint2->type[3]); \
209*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 32, 8,  char,	    endpoint2->type[4]); \
210*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 40, 8,  char,	    endpoint2->type[5]); \
211*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 48, 8,  char,	    endpoint2->type[6]); \
212*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 56, 8,  char,	    endpoint2->type[7]); \
213*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 0,  8,  char,	    endpoint2->type[8]); \
214*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 8,  8,  char,	    endpoint2->type[9]); \
215*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 16, 8,  char,	    endpoint2->type[10]); \
216*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 24, 8,  char,	    endpoint2->type[11]); \
217*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 32, 8,  char,	    endpoint2->type[12]); \
218*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 40, 8,  char,	    endpoint2->type[13]); \
219*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 48, 8,  char,	    endpoint2->type[14]); \
220*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 56, 8,  char,	    endpoint2->type[15]); \
221*a2a55e51SPrabhakar Kushwaha } while (0)
222*a2a55e51SPrabhakar Kushwaha 
223*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
224*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_DISCONNECT(cmd, endpoint) \
225*a2a55e51SPrabhakar Kushwaha do { \
226*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,	    endpoint->id); \
227*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, int,	    endpoint->interface_id); \
228*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  8,  char,	    endpoint->type[0]); \
229*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 8,  8,  char,	    endpoint->type[1]); \
230*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 8,  char,	    endpoint->type[2]); \
231*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 24, 8,  char,	    endpoint->type[3]); \
232*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 8,  char,	    endpoint->type[4]); \
233*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 40, 8,  char,	    endpoint->type[5]); \
234*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 48, 8,  char,	    endpoint->type[6]); \
235*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 56, 8,  char,	    endpoint->type[7]); \
236*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    endpoint->type[8]); \
237*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    endpoint->type[9]); \
238*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    endpoint->type[10]); \
239*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    endpoint->type[11]); \
240*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,	    endpoint->type[12]); \
241*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    endpoint->type[13]); \
242*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    endpoint->type[14]); \
243*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    endpoint->type[15]); \
244*a2a55e51SPrabhakar Kushwaha } while (0)
245*a2a55e51SPrabhakar Kushwaha 
246*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
247*a2a55e51SPrabhakar Kushwaha #define DPRC_CMD_GET_CONNECTION(cmd, endpoint1) \
248*a2a55e51SPrabhakar Kushwaha do { \
249*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,      endpoint1->id); \
250*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, int,	    endpoint1->interface_id); \
251*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  8,  char,     endpoint1->type[0]); \
252*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 8,  8,  char,	    endpoint1->type[1]); \
253*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 8,  char,	    endpoint1->type[2]); \
254*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 24, 8,  char,	    endpoint1->type[3]); \
255*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 8,  char,	    endpoint1->type[4]); \
256*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 40, 8,  char,	    endpoint1->type[5]); \
257*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 48, 8,  char,	    endpoint1->type[6]); \
258*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 56, 8,  char,	    endpoint1->type[7]); \
259*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  8,  char,	    endpoint1->type[8]); \
260*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,  8,  char,	    endpoint1->type[9]); \
261*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  char,	    endpoint1->type[10]); \
262*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24, 8,  char,	    endpoint1->type[11]); \
263*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 8,  char,     endpoint1->type[12]); \
264*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 40, 8,  char,	    endpoint1->type[13]); \
265*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48, 8,  char,	    endpoint1->type[14]); \
266*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56, 8,  char,	    endpoint1->type[15]); \
267*a2a55e51SPrabhakar Kushwaha } while (0)
268*a2a55e51SPrabhakar Kushwaha 
269*a2a55e51SPrabhakar Kushwaha 
270*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
271*a2a55e51SPrabhakar Kushwaha #define DPRC_RSP_GET_CONNECTION(cmd, endpoint2, state) \
272*a2a55e51SPrabhakar Kushwaha do { \
273*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 0,  32, int,	    endpoint2->id); \
274*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 32, 32, int,	    endpoint2->interface_id); \
275*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 0,  8,  char,	    endpoint2->type[0]); \
276*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 8,  8,  char,	    endpoint2->type[1]); \
277*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 16, 8,  char,	    endpoint2->type[2]); \
278*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 24, 8,  char,	    endpoint2->type[3]); \
279*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 32, 8,  char,	    endpoint2->type[4]); \
280*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 40, 8,  char,	    endpoint2->type[5]); \
281*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 48, 8,  char,	    endpoint2->type[6]); \
282*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 56, 8,  char,	    endpoint2->type[7]); \
283*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 0,  8,  char,	    endpoint2->type[8]); \
284*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 8,  8,  char,	    endpoint2->type[9]); \
285*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 16, 8,  char,	    endpoint2->type[10]); \
286*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 24, 8,  char,	    endpoint2->type[11]); \
287*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 32, 8,  char,	    endpoint2->type[12]); \
288*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 40, 8,  char,	    endpoint2->type[13]); \
289*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 48, 8,  char,	    endpoint2->type[14]); \
290*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 56, 8,  char,	    endpoint2->type[15]); \
291*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 6, 0,  32, int,	    state); \
292*a2a55e51SPrabhakar Kushwaha } while (0)
293*a2a55e51SPrabhakar Kushwaha 
294*a2a55e51SPrabhakar Kushwaha /* Data Path Resource Container API
295*a2a55e51SPrabhakar Kushwaha  * Contains DPRC API for managing and querying DPAA resources
296*a2a55e51SPrabhakar Kushwaha  */
297*a2a55e51SPrabhakar Kushwaha struct fsl_mc_io;
298*a2a55e51SPrabhakar Kushwaha 
299*a2a55e51SPrabhakar Kushwaha /**
300*a2a55e51SPrabhakar Kushwaha  * Set this value as the icid value in dprc_cfg structure when creating a
301*a2a55e51SPrabhakar Kushwaha  * container, in case the ICID is not selected by the user and should be
302*a2a55e51SPrabhakar Kushwaha  * allocated by the DPRC from the pool of ICIDs.
303*a2a55e51SPrabhakar Kushwaha  */
304*a2a55e51SPrabhakar Kushwaha #define DPRC_GET_ICID_FROM_POOL			(uint16_t)(~(0))
305*a2a55e51SPrabhakar Kushwaha 
306*a2a55e51SPrabhakar Kushwaha /**
307*a2a55e51SPrabhakar Kushwaha  * Set this value as the portal_id value in dprc_cfg structure when creating a
308*a2a55e51SPrabhakar Kushwaha  * container, in case the portal ID is not specifically selected by the
309*a2a55e51SPrabhakar Kushwaha  * user and should be allocated by the DPRC from the pool of portal ids.
310*a2a55e51SPrabhakar Kushwaha  */
311*a2a55e51SPrabhakar Kushwaha #define DPRC_GET_PORTAL_ID_FROM_POOL	(int)(~(0))
312*a2a55e51SPrabhakar Kushwaha 
313*a2a55e51SPrabhakar Kushwaha /**
314*a2a55e51SPrabhakar Kushwaha  * dprc_get_container_id() - Get container ID associated with a given portal.
315*a2a55e51SPrabhakar Kushwaha  * @mc_io:		Pointer to MC portal's I/O object
316*a2a55e51SPrabhakar Kushwaha  * @container_id:	Requested container ID
317*a2a55e51SPrabhakar Kushwaha  *
318*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
319*a2a55e51SPrabhakar Kushwaha  */
320*a2a55e51SPrabhakar Kushwaha int dprc_get_container_id(struct fsl_mc_io *mc_io, int *container_id);
321*a2a55e51SPrabhakar Kushwaha 
322*a2a55e51SPrabhakar Kushwaha /**
323*a2a55e51SPrabhakar Kushwaha  * dprc_open() - Open DPRC object for use
324*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
325*a2a55e51SPrabhakar Kushwaha  * @container_id: Container ID to open
326*a2a55e51SPrabhakar Kushwaha  * @token:	Returned token of DPRC object
327*a2a55e51SPrabhakar Kushwaha  *
328*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
329*a2a55e51SPrabhakar Kushwaha  *
330*a2a55e51SPrabhakar Kushwaha  * @warning	Required before any operation on the object.
331*a2a55e51SPrabhakar Kushwaha  */
332*a2a55e51SPrabhakar Kushwaha int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token);
333*a2a55e51SPrabhakar Kushwaha 
334*a2a55e51SPrabhakar Kushwaha /**
335*a2a55e51SPrabhakar Kushwaha  * dprc_close() - Close the control session of the object
336*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
337*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
338*a2a55e51SPrabhakar Kushwaha  *
339*a2a55e51SPrabhakar Kushwaha  * After this function is called, no further operations are
340*a2a55e51SPrabhakar Kushwaha  * allowed on the object without opening a new control session.
341*a2a55e51SPrabhakar Kushwaha  *
342*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
343*a2a55e51SPrabhakar Kushwaha  */
344*a2a55e51SPrabhakar Kushwaha int dprc_close(struct fsl_mc_io *mc_io, uint16_t token);
345*a2a55e51SPrabhakar Kushwaha 
346*a2a55e51SPrabhakar Kushwaha /**
347*a2a55e51SPrabhakar Kushwaha  * Container general options
348*a2a55e51SPrabhakar Kushwaha  *
349*a2a55e51SPrabhakar Kushwaha  * These options may be selected at container creation by the container creator
350*a2a55e51SPrabhakar Kushwaha  * and can be retrieved using dprc_get_attributes()
351*a2a55e51SPrabhakar Kushwaha  */
352*a2a55e51SPrabhakar Kushwaha 
353*a2a55e51SPrabhakar Kushwaha /* Spawn Policy Option allowed - Indicates that the new container is allowed
354*a2a55e51SPrabhakar Kushwaha  * to spawn and have its own child containers.
355*a2a55e51SPrabhakar Kushwaha  */
356*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_SPAWN_ALLOWED		0x00000001
357*a2a55e51SPrabhakar Kushwaha 
358*a2a55e51SPrabhakar Kushwaha /* General Container allocation policy - Indicates that the new container is
359*a2a55e51SPrabhakar Kushwaha  * allowed to allocate requested resources from its parent container; if not
360*a2a55e51SPrabhakar Kushwaha  * set, the container is only allowed to use resources in its own pools; Note
361*a2a55e51SPrabhakar Kushwaha  * that this is a container's global policy, but the parent container may
362*a2a55e51SPrabhakar Kushwaha  * override it and set specific quota per resource type.
363*a2a55e51SPrabhakar Kushwaha  */
364*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_ALLOC_ALLOWED		0x00000002
365*a2a55e51SPrabhakar Kushwaha 
366*a2a55e51SPrabhakar Kushwaha /* Object initialization allowed - software context associated with this
367*a2a55e51SPrabhakar Kushwaha  * container is allowed to invoke object initialization operations.
368*a2a55e51SPrabhakar Kushwaha  */
369*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_OBJ_CREATE_ALLOWED	0x00000004
370*a2a55e51SPrabhakar Kushwaha 
371*a2a55e51SPrabhakar Kushwaha /* Topology change allowed - software context associated with this
372*a2a55e51SPrabhakar Kushwaha  * container is allowed to invoke topology operations, such as attach/detach
373*a2a55e51SPrabhakar Kushwaha  * of network objects.
374*a2a55e51SPrabhakar Kushwaha  */
375*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_TOPOLOGY_CHANGES_ALLOWED	0x00000008
376*a2a55e51SPrabhakar Kushwaha 
377*a2a55e51SPrabhakar Kushwaha /* IOMMU bypass - indicates whether objects of this container are permitted
378*a2a55e51SPrabhakar Kushwaha  * to bypass the IOMMU.
379*a2a55e51SPrabhakar Kushwaha  */
380*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_IOMMU_BYPASS		0x00000010
381*a2a55e51SPrabhakar Kushwaha 
382*a2a55e51SPrabhakar Kushwaha /* AIOP - Indicates that container belongs to AIOP.  */
383*a2a55e51SPrabhakar Kushwaha #define DPRC_CFG_OPT_AIOP			0x00000020
384*a2a55e51SPrabhakar Kushwaha 
385*a2a55e51SPrabhakar Kushwaha /**
386*a2a55e51SPrabhakar Kushwaha  * struct dprc_cfg - Container configuration options
387*a2a55e51SPrabhakar Kushwaha  * @icid: Container's ICID; if set to 'DPRC_GET_ICID_FROM_POOL', a free
388*a2a55e51SPrabhakar Kushwaha  *		ICID value is allocated by the DPRC
389*a2a55e51SPrabhakar Kushwaha  * @portal_id: Portal ID; if set to 'DPRC_GET_PORTAL_ID_FROM_POOL', a free
390*a2a55e51SPrabhakar Kushwaha  *		portal ID is allocated by the DPRC
391*a2a55e51SPrabhakar Kushwaha  * @options: Combination of 'DPRC_CFG_OPT_<X>' options
392*a2a55e51SPrabhakar Kushwaha  */
393*a2a55e51SPrabhakar Kushwaha struct dprc_cfg {
394*a2a55e51SPrabhakar Kushwaha 	uint16_t icid;
395*a2a55e51SPrabhakar Kushwaha 	int portal_id;
396*a2a55e51SPrabhakar Kushwaha 	uint64_t options;
397*a2a55e51SPrabhakar Kushwaha };
398*a2a55e51SPrabhakar Kushwaha 
399*a2a55e51SPrabhakar Kushwaha /**
400*a2a55e51SPrabhakar Kushwaha  * dprc_reset_container - Reset child container.
401*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
402*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
403*a2a55e51SPrabhakar Kushwaha  * @child_container_id:	ID of the container to reset
404*a2a55e51SPrabhakar Kushwaha  *
405*a2a55e51SPrabhakar Kushwaha  * In case a software context crashes or becomes non-responsive, the parent
406*a2a55e51SPrabhakar Kushwaha  * may wish to reset its resources container before the software context is
407*a2a55e51SPrabhakar Kushwaha  * restarted.
408*a2a55e51SPrabhakar Kushwaha  *
409*a2a55e51SPrabhakar Kushwaha  * This routine informs all objects assigned to the child container that the
410*a2a55e51SPrabhakar Kushwaha  * container is being reset, so they may perform any cleanup operations that are
411*a2a55e51SPrabhakar Kushwaha  * needed. All objects handles that were owned by the child container shall be
412*a2a55e51SPrabhakar Kushwaha  * closed.
413*a2a55e51SPrabhakar Kushwaha  *
414*a2a55e51SPrabhakar Kushwaha  * Note that such request may be submitted even if the child software context
415*a2a55e51SPrabhakar Kushwaha  * has not crashed, but the resulting object cleanup operations will not be
416*a2a55e51SPrabhakar Kushwaha  * aware of that.
417*a2a55e51SPrabhakar Kushwaha  *
418*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
419*a2a55e51SPrabhakar Kushwaha  */
420*a2a55e51SPrabhakar Kushwaha int dprc_reset_container(struct fsl_mc_io *mc_io,
421*a2a55e51SPrabhakar Kushwaha 			 uint16_t token,
422*a2a55e51SPrabhakar Kushwaha 			 int child_container_id);
423*a2a55e51SPrabhakar Kushwaha 
424*a2a55e51SPrabhakar Kushwaha /**
425*a2a55e51SPrabhakar Kushwaha  * struct dprc_attributes - Container attributes
426*a2a55e51SPrabhakar Kushwaha  * @container_id: Container's ID
427*a2a55e51SPrabhakar Kushwaha  * @icid: Container's ICID
428*a2a55e51SPrabhakar Kushwaha  * @portal_id: Container's portal ID
429*a2a55e51SPrabhakar Kushwaha  * @options: Container's options as set at container's creation
430*a2a55e51SPrabhakar Kushwaha  * @version: DPRC version
431*a2a55e51SPrabhakar Kushwaha  */
432*a2a55e51SPrabhakar Kushwaha struct dprc_attributes {
433*a2a55e51SPrabhakar Kushwaha 	int container_id;
434*a2a55e51SPrabhakar Kushwaha 	uint16_t icid;
435*a2a55e51SPrabhakar Kushwaha 	int portal_id;
436*a2a55e51SPrabhakar Kushwaha 	uint64_t options;
437*a2a55e51SPrabhakar Kushwaha 	/**
438*a2a55e51SPrabhakar Kushwaha 	 * struct version - DPRC version
439*a2a55e51SPrabhakar Kushwaha 	 * @major: DPRC major version
440*a2a55e51SPrabhakar Kushwaha 	 * @minor: DPRC minor version
441*a2a55e51SPrabhakar Kushwaha 	 */
442*a2a55e51SPrabhakar Kushwaha 	struct {
443*a2a55e51SPrabhakar Kushwaha 		uint16_t major;
444*a2a55e51SPrabhakar Kushwaha 		uint16_t minor;
445*a2a55e51SPrabhakar Kushwaha 	} version;
446*a2a55e51SPrabhakar Kushwaha };
447*a2a55e51SPrabhakar Kushwaha 
448*a2a55e51SPrabhakar Kushwaha /**
449*a2a55e51SPrabhakar Kushwaha  * dprc_get_attributes() - Obtains container attributes
450*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
451*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
452*a2a55e51SPrabhakar Kushwaha  * @attributes	Returned container attributes
453*a2a55e51SPrabhakar Kushwaha  *
454*a2a55e51SPrabhakar Kushwaha  * Return:     '0' on Success; Error code otherwise.
455*a2a55e51SPrabhakar Kushwaha  */
456*a2a55e51SPrabhakar Kushwaha int dprc_get_attributes(struct fsl_mc_io	*mc_io,
457*a2a55e51SPrabhakar Kushwaha 			uint16_t		token,
458*a2a55e51SPrabhakar Kushwaha 			struct dprc_attributes	*attributes);
459*a2a55e51SPrabhakar Kushwaha 
460*a2a55e51SPrabhakar Kushwaha /**
461*a2a55e51SPrabhakar Kushwaha  * dprc_get_obj_count() - Obtains the number of objects in the DPRC
462*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
463*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
464*a2a55e51SPrabhakar Kushwaha  * @obj_count:	Number of objects assigned to the DPRC
465*a2a55e51SPrabhakar Kushwaha  *
466*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
467*a2a55e51SPrabhakar Kushwaha  */
468*a2a55e51SPrabhakar Kushwaha int dprc_get_obj_count(struct fsl_mc_io *mc_io, uint16_t token, int *obj_count);
469*a2a55e51SPrabhakar Kushwaha 
470*a2a55e51SPrabhakar Kushwaha /* Objects Attributes Flags */
471*a2a55e51SPrabhakar Kushwaha 
472*a2a55e51SPrabhakar Kushwaha /* Opened state - Indicates that an object is open by at least one owner */
473*a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_OPEN		0x00000001
474*a2a55e51SPrabhakar Kushwaha /* Plugged state - Indicates that the object is plugged */
475*a2a55e51SPrabhakar Kushwaha #define DPRC_OBJ_STATE_PLUGGED		0x00000002
476*a2a55e51SPrabhakar Kushwaha 
477*a2a55e51SPrabhakar Kushwaha /**
478*a2a55e51SPrabhakar Kushwaha  * struct dprc_obj_desc - Object descriptor, returned from dprc_get_obj()
479*a2a55e51SPrabhakar Kushwaha  * @type: Type of object: NULL terminated string
480*a2a55e51SPrabhakar Kushwaha  * @id: ID of logical object resource
481*a2a55e51SPrabhakar Kushwaha  * @vendor: Object vendor identifier
482*a2a55e51SPrabhakar Kushwaha  * @ver_major: Major version number
483*a2a55e51SPrabhakar Kushwaha  * @ver_minor:  Minor version number
484*a2a55e51SPrabhakar Kushwaha  * @irq_count: Number of interrupts supported by the object
485*a2a55e51SPrabhakar Kushwaha  * @region_count: Number of mappable regions supported by the object
486*a2a55e51SPrabhakar Kushwaha  * @state: Object state: combination of DPRC_OBJ_STATE_ states
487*a2a55e51SPrabhakar Kushwaha  */
488*a2a55e51SPrabhakar Kushwaha struct dprc_obj_desc {
489*a2a55e51SPrabhakar Kushwaha 	char type[16];
490*a2a55e51SPrabhakar Kushwaha 	int id;
491*a2a55e51SPrabhakar Kushwaha 	uint16_t vendor;
492*a2a55e51SPrabhakar Kushwaha 	uint16_t ver_major;
493*a2a55e51SPrabhakar Kushwaha 	uint16_t ver_minor;
494*a2a55e51SPrabhakar Kushwaha 	uint8_t irq_count;
495*a2a55e51SPrabhakar Kushwaha 	uint8_t region_count;
496*a2a55e51SPrabhakar Kushwaha 	uint32_t state;
497*a2a55e51SPrabhakar Kushwaha };
498*a2a55e51SPrabhakar Kushwaha 
499*a2a55e51SPrabhakar Kushwaha /**
500*a2a55e51SPrabhakar Kushwaha  * dprc_get_obj() - Get general information on an object
501*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
502*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
503*a2a55e51SPrabhakar Kushwaha  * @obj_index:	Index of the object to be queried (< obj_count)
504*a2a55e51SPrabhakar Kushwaha  * @obj_desc:	Returns the requested object descriptor
505*a2a55e51SPrabhakar Kushwaha  *
506*a2a55e51SPrabhakar Kushwaha  * The object descriptors are retrieved one by one by incrementing
507*a2a55e51SPrabhakar Kushwaha  * obj_index up to (not including) the value of obj_count returned
508*a2a55e51SPrabhakar Kushwaha  * from dprc_get_obj_count(). dprc_get_obj_count() must
509*a2a55e51SPrabhakar Kushwaha  * be called prior to dprc_get_obj().
510*a2a55e51SPrabhakar Kushwaha  *
511*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
512*a2a55e51SPrabhakar Kushwaha  */
513*a2a55e51SPrabhakar Kushwaha int dprc_get_obj(struct fsl_mc_io	*mc_io,
514*a2a55e51SPrabhakar Kushwaha 		 uint16_t		token,
515*a2a55e51SPrabhakar Kushwaha 		 int			obj_index,
516*a2a55e51SPrabhakar Kushwaha 		 struct dprc_obj_desc	*obj_desc);
517*a2a55e51SPrabhakar Kushwaha 
518*a2a55e51SPrabhakar Kushwaha /**
519*a2a55e51SPrabhakar Kushwaha  * dprc_get_res_count() - Obtains the number of free resources that are assigned
520*a2a55e51SPrabhakar Kushwaha  *		to this container, by pool type
521*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
522*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
523*a2a55e51SPrabhakar Kushwaha  * @type:	pool type
524*a2a55e51SPrabhakar Kushwaha  * @res_count:	Returned number of free resources of the given
525*a2a55e51SPrabhakar Kushwaha  *			resource type that are assigned to this DPRC
526*a2a55e51SPrabhakar Kushwaha  *
527*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
528*a2a55e51SPrabhakar Kushwaha  */
529*a2a55e51SPrabhakar Kushwaha int dprc_get_res_count(struct fsl_mc_io	*mc_io,
530*a2a55e51SPrabhakar Kushwaha 		       uint16_t		token,
531*a2a55e51SPrabhakar Kushwaha 		       char		*type,
532*a2a55e51SPrabhakar Kushwaha 		       int		*res_count);
533*a2a55e51SPrabhakar Kushwaha 
534*a2a55e51SPrabhakar Kushwaha /**
535*a2a55e51SPrabhakar Kushwaha  * enum dprc_iter_status - Iteration status
536*a2a55e51SPrabhakar Kushwaha  * @DPRC_ITER_STATUS_FIRST: Perform first iteration
537*a2a55e51SPrabhakar Kushwaha  * @DPRC_ITER_STATUS_MORE: Indicates more/next iteration is needed
538*a2a55e51SPrabhakar Kushwaha  * @DPRC_ITER_STATUS_LAST: Indicates last iteration
539*a2a55e51SPrabhakar Kushwaha  */
540*a2a55e51SPrabhakar Kushwaha enum dprc_iter_status {
541*a2a55e51SPrabhakar Kushwaha 	DPRC_ITER_STATUS_FIRST = 0,
542*a2a55e51SPrabhakar Kushwaha 	DPRC_ITER_STATUS_MORE = 1,
543*a2a55e51SPrabhakar Kushwaha 	DPRC_ITER_STATUS_LAST = 2
544*a2a55e51SPrabhakar Kushwaha };
545*a2a55e51SPrabhakar Kushwaha 
546*a2a55e51SPrabhakar Kushwaha /**
547*a2a55e51SPrabhakar Kushwaha  * struct dprc_res_ids_range_desc - Resource ID range descriptor
548*a2a55e51SPrabhakar Kushwaha  * @base_id: Base resource ID of this range
549*a2a55e51SPrabhakar Kushwaha  * @last_id: Last resource ID of this range
550*a2a55e51SPrabhakar Kushwaha  * @iter_status: Iteration status - should be set to DPRC_ITER_STATUS_FIRST at
551*a2a55e51SPrabhakar Kushwaha  *	first iteration; while the returned marker is DPRC_ITER_STATUS_MORE,
552*a2a55e51SPrabhakar Kushwaha  *	additional iterations are needed, until the returned marker is
553*a2a55e51SPrabhakar Kushwaha  *	DPRC_ITER_STATUS_LAST
554*a2a55e51SPrabhakar Kushwaha  */
555*a2a55e51SPrabhakar Kushwaha struct dprc_res_ids_range_desc {
556*a2a55e51SPrabhakar Kushwaha 	int base_id;
557*a2a55e51SPrabhakar Kushwaha 	int last_id;
558*a2a55e51SPrabhakar Kushwaha 	enum dprc_iter_status iter_status;
559*a2a55e51SPrabhakar Kushwaha };
560*a2a55e51SPrabhakar Kushwaha 
561*a2a55e51SPrabhakar Kushwaha /**
562*a2a55e51SPrabhakar Kushwaha  * dprc_get_res_ids() - Obtains IDs of free resources in the container
563*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
564*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
565*a2a55e51SPrabhakar Kushwaha  * @type:	pool type
566*a2a55e51SPrabhakar Kushwaha  * @range_desc:	range descriptor
567*a2a55e51SPrabhakar Kushwaha  *
568*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
569*a2a55e51SPrabhakar Kushwaha  */
570*a2a55e51SPrabhakar Kushwaha int dprc_get_res_ids(struct fsl_mc_io			*mc_io,
571*a2a55e51SPrabhakar Kushwaha 		     uint16_t				token,
572*a2a55e51SPrabhakar Kushwaha 		     char				*type,
573*a2a55e51SPrabhakar Kushwaha 		     struct dprc_res_ids_range_desc	*range_desc);
574*a2a55e51SPrabhakar Kushwaha 
575*a2a55e51SPrabhakar Kushwaha /**
576*a2a55e51SPrabhakar Kushwaha  * struct dprc_region_desc - Mappable region descriptor
577*a2a55e51SPrabhakar Kushwaha  * @base_paddr: Region base physical address
578*a2a55e51SPrabhakar Kushwaha  * @size: Region size (in bytes)
579*a2a55e51SPrabhakar Kushwaha  */
580*a2a55e51SPrabhakar Kushwaha struct dprc_region_desc {
581*a2a55e51SPrabhakar Kushwaha 	uint64_t base_paddr;
582*a2a55e51SPrabhakar Kushwaha 	uint32_t size;
583*a2a55e51SPrabhakar Kushwaha };
584*a2a55e51SPrabhakar Kushwaha 
585*a2a55e51SPrabhakar Kushwaha /**
586*a2a55e51SPrabhakar Kushwaha  * dprc_get_obj_region() - Get region information for a specified object.
587*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
588*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
589*a2a55e51SPrabhakar Kushwaha  * @obj_type;	Object type as returned in dprc_get_obj()
590*a2a55e51SPrabhakar Kushwaha  * @obj_id:	Unique object instance as returned in dprc_get_obj()
591*a2a55e51SPrabhakar Kushwaha  * @region_index: The specific region to query
592*a2a55e51SPrabhakar Kushwaha  * @region_desc:  Returns the requested region descriptor
593*a2a55e51SPrabhakar Kushwaha  *
594*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
595*a2a55e51SPrabhakar Kushwaha  */
596*a2a55e51SPrabhakar Kushwaha int dprc_get_obj_region(struct fsl_mc_io	*mc_io,
597*a2a55e51SPrabhakar Kushwaha 			uint16_t		token,
598*a2a55e51SPrabhakar Kushwaha 			char			*obj_type,
599*a2a55e51SPrabhakar Kushwaha 			int			obj_id,
600*a2a55e51SPrabhakar Kushwaha 			uint8_t			region_index,
601*a2a55e51SPrabhakar Kushwaha 			struct dprc_region_desc	*region_desc);
602*a2a55e51SPrabhakar Kushwaha /**
603*a2a55e51SPrabhakar Kushwaha  * struct dprc_endpoint - Endpoint description for link connect/disconnect
604*a2a55e51SPrabhakar Kushwaha  *			operations
605*a2a55e51SPrabhakar Kushwaha  * @type: Endpoint object type: NULL terminated string
606*a2a55e51SPrabhakar Kushwaha  * @id: Endpoint object ID
607*a2a55e51SPrabhakar Kushwaha  * @interface_id: Interface ID; should be set for endpoints with multiple
608*a2a55e51SPrabhakar Kushwaha  *		interfaces ("dpsw", "dpdmux"); for others, always set to 0
609*a2a55e51SPrabhakar Kushwaha  */
610*a2a55e51SPrabhakar Kushwaha struct dprc_endpoint {
611*a2a55e51SPrabhakar Kushwaha 	char type[16];
612*a2a55e51SPrabhakar Kushwaha 	int id;
613*a2a55e51SPrabhakar Kushwaha 	int interface_id;
614*a2a55e51SPrabhakar Kushwaha };
615*a2a55e51SPrabhakar Kushwaha 
616*a2a55e51SPrabhakar Kushwaha /**
617*a2a55e51SPrabhakar Kushwaha  * dprc_connect() - Connect two endpoints to create a network link between them
618*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
619*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
620*a2a55e51SPrabhakar Kushwaha  * @endpoint1:	Endpoint 1 configuration parameters
621*a2a55e51SPrabhakar Kushwaha  * @endpoint2:	Endpoint 2 configuration parameters
622*a2a55e51SPrabhakar Kushwaha  *
623*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
624*a2a55e51SPrabhakar Kushwaha  */
625*a2a55e51SPrabhakar Kushwaha int dprc_connect(struct fsl_mc_io		*mc_io,
626*a2a55e51SPrabhakar Kushwaha 		 uint16_t			token,
627*a2a55e51SPrabhakar Kushwaha 		 const struct dprc_endpoint	*endpoint1,
628*a2a55e51SPrabhakar Kushwaha 		 const struct dprc_endpoint	*endpoint2);
629*a2a55e51SPrabhakar Kushwaha 
630*a2a55e51SPrabhakar Kushwaha /**
631*a2a55e51SPrabhakar Kushwaha  * dprc_disconnect() - Disconnect one endpoint to remove its network connection
632*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
633*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPRC object
634*a2a55e51SPrabhakar Kushwaha  * @endpoint:	Endpoint configuration parameters
635*a2a55e51SPrabhakar Kushwaha  *
636*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
637*a2a55e51SPrabhakar Kushwaha  */
638*a2a55e51SPrabhakar Kushwaha int dprc_disconnect(struct fsl_mc_io		*mc_io,
639*a2a55e51SPrabhakar Kushwaha 		    uint16_t			token,
640*a2a55e51SPrabhakar Kushwaha 		    const struct dprc_endpoint	*endpoint);
641*a2a55e51SPrabhakar Kushwaha 
642*a2a55e51SPrabhakar Kushwaha /**
643*a2a55e51SPrabhakar Kushwaha * dprc_get_connection() - Get connected endpoint and link status if connection
644*a2a55e51SPrabhakar Kushwaha *			exists.
645*a2a55e51SPrabhakar Kushwaha * @mc_io		Pointer to MC portal's I/O object
646*a2a55e51SPrabhakar Kushwaha * @token		Token of DPRC object
647*a2a55e51SPrabhakar Kushwaha * @endpoint1	Endpoint 1 configuration parameters
648*a2a55e51SPrabhakar Kushwaha * @endpoint2	Returned endpoint 2 configuration parameters
649*a2a55e51SPrabhakar Kushwaha * @state:	Returned link state: 1 - link is up, 0 - link is down
650*a2a55e51SPrabhakar Kushwaha *
651*a2a55e51SPrabhakar Kushwaha * Return:     '0' on Success; -ENAVAIL if connection does not exist.
652*a2a55e51SPrabhakar Kushwaha */
653*a2a55e51SPrabhakar Kushwaha int dprc_get_connection(struct fsl_mc_io		*mc_io,
654*a2a55e51SPrabhakar Kushwaha 			uint16_t			token,
655*a2a55e51SPrabhakar Kushwaha 			const struct dprc_endpoint	*endpoint1,
656*a2a55e51SPrabhakar Kushwaha 			struct dprc_endpoint		*endpoint2,
657*a2a55e51SPrabhakar Kushwaha 			int				*state);
658*a2a55e51SPrabhakar Kushwaha 
659*a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPRC_H */
660