]> git.sur5r.net Git - u-boot/blob - include/fsl-mc/fsl_dpbp.h
SPDX: Convert all of our single license tags to Linux Kernel style
[u-boot] / include / fsl-mc / fsl_dpbp.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Freescale Layerscape MC I/O wrapper
4  *
5  * Copyright (C) 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 */