1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Freescale Layerscape MC I/O wrapper
4  *
5  * Copyright 2013-2016 Freescale Semiconductor, Inc.
6  * Copyright 2017 NXP
7  */
8 /*!
9  *  @file    fsl_dpbp.h
10  *  @brief   Data Path Buffer Pool API
11  */
12 #ifndef __FSL_DPBP_H
13 #define __FSL_DPBP_H
14 
15 /* DPBP Version */
16 #define DPBP_VER_MAJOR				3
17 #define DPBP_VER_MINOR				3
18 
19 /* Command IDs */
20 #define DPBP_CMDID_CLOSE				0x8001
21 #define DPBP_CMDID_OPEN					0x8041
22 #define DPBP_CMDID_CREATE				0x9041
23 #define DPBP_CMDID_DESTROY				0x9841
24 #define DPBP_CMDID_GET_API_VERSION			0xa041
25 
26 #define DPBP_CMDID_ENABLE				0x0021
27 #define DPBP_CMDID_DISABLE				0x0031
28 #define DPBP_CMDID_GET_ATTR				0x0041
29 #define DPBP_CMDID_RESET				0x0051
30 #define DPBP_CMDID_IS_ENABLED				0x0061
31 
32 /*                cmd, param, offset, width, type, arg_name */
33 #define DPBP_CMD_OPEN(cmd, dpbp_id) \
34 	MC_CMD_OP(cmd, 0, 0,  32, int,	    dpbp_id)
35 
36 /*                cmd, param, offset, width, type, arg_name */
37 #define DPBP_RSP_GET_ATTRIBUTES(cmd, attr) \
38 do { \
39 	MC_RSP_OP(cmd, 0, 16, 16, uint16_t, attr->bpid); \
40 	MC_RSP_OP(cmd, 0, 32, 32, int,	    attr->id);\
41 } while (0)
42 
43 /* Data Path Buffer Pool API
44  * Contains initialization APIs and runtime control APIs for DPBP
45  */
46 
47 struct fsl_mc_io;
48 
49 /**
50  * dpbp_open() - Open a control session for the specified object.
51  * @mc_io:	Pointer to MC portal's I/O object
52  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
53  * @dpbp_id:	DPBP unique ID
54  * @token:	Returned token; use in subsequent API calls
55  *
56  * This function can be used to open a control session for an
57  * already created object; an object may have been declared in
58  * the DPL or by calling the dpbp_create function.
59  * This function returns a unique authentication token,
60  * associated with the specific object ID and the specific MC
61  * portal; this token must be used in all subsequent commands for
62  * this specific object
63  *
64  * Return:	'0' on Success; Error code otherwise.
65  */
66 int dpbp_open(struct fsl_mc_io	*mc_io,
67 	      uint32_t		cmd_flags,
68 	      int		dpbp_id,
69 	      uint16_t		*token);
70 
71 /**
72  * dpbp_close() - Close the control session of the object
73  * @mc_io:	Pointer to MC portal's I/O object
74  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
75  * @token:	Token of DPBP object
76  *
77  * After this function is called, no further operations are
78  * allowed on the object without opening a new control session.
79  *
80  * Return:	'0' on Success; Error code otherwise.
81  */
82 int dpbp_close(struct fsl_mc_io	*mc_io,
83 	       uint32_t		cmd_flags,
84 	       uint16_t	token);
85 
86 /**
87  * struct dpbp_cfg - Structure representing DPBP configuration
88  * @options:	place holder
89  */
90 struct dpbp_cfg {
91 	uint32_t options;
92 };
93 
94 /**
95  * dpbp_create() - Create the DPBP object.
96  * @mc_io:	Pointer to MC portal's I/O object
97  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
98  * @cfg:	Configuration structure
99  * @token:	Returned token; use in subsequent API calls
100  *
101  * Create the DPBP object, allocate required resources and
102  * perform required initialization.
103  *
104  * The object can be created either by declaring it in the
105  * DPL file, or by calling this function.
106  * This function returns a unique authentication token,
107  * associated with the specific object ID and the specific MC
108  * portal; this token must be used in all subsequent calls to
109  * this specific object. For objects that are created using the
110  * DPL file, call dpbp_open function to get an authentication
111  * token first.
112  *
113  * Return:	'0' on Success; Error code otherwise.
114  */
115 int dpbp_create(struct fsl_mc_io	*mc_io,
116 		uint16_t		dprc_token,
117 		uint32_t		cmd_flags,
118 		const struct dpbp_cfg	*cfg,
119 		uint32_t		*obj_id);
120 
121 /**
122  * dpbp_destroy() - Destroy the DPBP object and release all its resources.
123  * @mc_io:	Pointer to MC portal's I/O object
124  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
125  * @token:	Token of DPBP object
126  *
127  * Return:	'0' on Success; error code otherwise.
128  */
129 int dpbp_destroy(struct fsl_mc_io	*mc_io,
130 		 uint16_t		dprc_token,
131 		 uint32_t		cmd_flags,
132 		 uint32_t		obj_id);
133 
134 /**
135  * dpbp_enable() - Enable the DPBP.
136  * @mc_io:	Pointer to MC portal's I/O object
137  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
138  * @token:	Token of DPBP object
139  *
140  * Return:	'0' on Success; Error code otherwise.
141  */
142 int dpbp_enable(struct fsl_mc_io	*mc_io,
143 		uint32_t		cmd_flags,
144 		uint16_t		token);
145 
146 /**
147  * dpbp_disable() - Disable the DPBP.
148  * @mc_io:	Pointer to MC portal's I/O object
149  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
150  * @token:	Token of DPBP object
151  *
152  * Return:	'0' on Success; Error code otherwise.
153  */
154 int dpbp_disable(struct fsl_mc_io	*mc_io,
155 		 uint32_t		cmd_flags,
156 		 uint16_t		token);
157 
158 /**
159  * dpbp_is_enabled() - Check if the DPBP is enabled.
160  * @mc_io:	Pointer to MC portal's I/O object
161  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
162  * @token:	Token of DPBP object
163  * @en:		Returns '1' if object is enabled; '0' otherwise
164  *
165  * Return:	'0' on Success; Error code otherwise.
166  */
167 int dpbp_is_enabled(struct fsl_mc_io	*mc_io,
168 		    uint32_t		cmd_flags,
169 		    uint16_t		token,
170 		    int		*en);
171 
172 /**
173  * dpbp_reset() - Reset the DPBP, returns the object to initial state.
174  * @mc_io:	Pointer to MC portal's I/O object
175  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
176  * @token:	Token of DPBP object
177  *
178  * Return:	'0' on Success; Error code otherwise.
179  */
180 int dpbp_reset(struct fsl_mc_io	*mc_io,
181 	       uint32_t		cmd_flags,
182 	       uint16_t	token);
183 
184 
185 /**
186  * struct dpbp_attr - Structure representing DPBP attributes
187  * @id:		DPBP object ID
188  * @version:	DPBP version
189  * @bpid:	Hardware buffer pool ID; should be used as an argument in
190  *		acquire/release operations on buffers
191  */
192 struct dpbp_attr {
193 	uint32_t id;
194 	uint16_t bpid;
195 };
196 
197 /**
198  * dpbp_get_attributes - Retrieve DPBP attributes.
199  *
200  * @mc_io:	Pointer to MC portal's I/O object
201  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
202  * @token:	Token of DPBP object
203  * @attr:	Returned object's attributes
204  *
205  * Return:	'0' on Success; Error code otherwise.
206  */
207 int dpbp_get_attributes(struct fsl_mc_io	*mc_io,
208 			uint32_t	cmd_flags,
209 			uint16_t		token,
210 			struct dpbp_attr	*attr);
211 
212 /**
213  * dpbp_get_api_version - Retrieve DPBP Major and Minor version info.
214  *
215  * @mc_io:	Pointer to MC portal's I/O object
216  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
217  * @major_ver:	DPBP major version
218  * @minor_ver:	DPBP minor version
219  *
220  * Return:	'0' on Success; Error code otherwise.
221  */
222 int dpbp_get_api_version(struct fsl_mc_io *mc_io,
223 			 u32 cmd_flags,
224 			 u16 *major_ver,
225 			 u16 *minor_ver);
226 
227 /** @} */
228 
229 #endif /* __FSL_DPBP_H */
230