1 /*
2  * Copyright 2008-2012 Freescale Semiconductor Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of Freescale Semiconductor nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  *
15  *
16  * ALTERNATIVELY, this software may be distributed under the terms of the
17  * GNU General Public License ("GPL") as published by the Free Software
18  * Foundation, either version 2 of that License or (at your option) any
19  * later version.
20  *
21  * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
25  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
28  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 
34 /**************************************************************************//**
35  @File          fm_pcd_ipc.h
36 
37  @Description   FM PCD Inter-Partition prototypes, structures and definitions.
38 *//***************************************************************************/
39 #ifndef __FM_PCD_IPC_H
40 #define __FM_PCD_IPC_H
41 
42 #include "std_ext.h"
43 
44 
45 /**************************************************************************//**
46  @Group         FM_grp Frame Manager API
47 
48  @Description   FM API functions, definitions and enums
49 
50  @{
51 *//***************************************************************************/
52 
53 
54 #if defined(__MWERKS__) && !defined(__GNUC__)
55 #pragma pack(push,1)
56 #endif /* defined(__MWERKS__) && ... */
57 
58 /**************************************************************************//**
59  @Description   Structure for getting a sw parser address according to a label
60                 Fields commented 'IN' are passed by the port module to be used
61                 by the FM module.
62                 Fields commented 'OUT' will be filled by FM before returning to port.
63 *//***************************************************************************/
64 typedef _Packed struct t_FmPcdIpcSwPrsLable
65 {
66     uint32_t    enumHdr;                        /**< IN. The existence of this header will invoke
67                                                      the sw parser code. */
68     uint8_t     indexPerHdr;                    /**< IN. Normally 0, if more than one sw parser
69                                                      attachments for the same header, use this
70 
71                                                    index to distinguish between them. */
72 } _PackedType t_FmPcdIpcSwPrsLable;
73 
74 /**************************************************************************//**
75  @Description   Structure for port-PCD communication.
76                 Fields commented 'IN' are passed by the port module to be used
77                 by the FM module.
78                 Fields commented 'OUT' will be filled by FM before returning to port.
79                 Some fields are optional (depending on configuration) and
80                 will be analized by the port and FM modules accordingly.
81 *//***************************************************************************/
82 
83 typedef  struct t_FmPcdIpcKgSchemesParams
84 {
85     uint8_t     guestId;
86     uint8_t     numOfSchemes;
87     uint8_t     schemesIds[FM_PCD_KG_NUM_OF_SCHEMES];
88 } _PackedType t_FmPcdIpcKgSchemesParams;
89 
90 typedef  struct t_FmPcdIpcKgClsPlanParams
91 {
92     uint8_t     guestId;
93     uint16_t    numOfClsPlanEntries;
94     uint8_t     clsPlanBase;
95 } _PackedType t_FmPcdIpcKgClsPlanParams;
96 
97 typedef _Packed struct t_FmPcdIpcPrsIncludePort
98 {
99     uint8_t     hardwarePortId;
100     bool        include;
101 } _PackedType t_FmPcdIpcPrsIncludePort;
102 
103 
104 #define FM_PCD_MAX_REPLY_SIZE           16
105 #define FM_PCD_MAX_MSG_SIZE             36
106 #define FM_PCD_MAX_REPLY_BODY_SIZE      36
107 
108 typedef _Packed struct {
109     uint32_t    msgId;
110     uint8_t     msgBody[FM_PCD_MAX_MSG_SIZE];
111 } _PackedType t_FmPcdIpcMsg;
112 
113 typedef _Packed struct t_FmPcdIpcReply {
114     uint32_t    error;
115     uint8_t     replyBody[FM_PCD_MAX_REPLY_BODY_SIZE];
116 } _PackedType t_FmPcdIpcReply;
117 
118 typedef _Packed struct t_FmIpcResourceAllocParams {
119     uint8_t     guestId;
120     uint16_t    base;
121     uint16_t    num;
122 }_PackedType t_FmIpcResourceAllocParams;
123 
124 #if defined(__MWERKS__) && !defined(__GNUC__)
125 #pragma pack(pop)
126 #endif /* defined(__MWERKS__) && ... */
127 
128 
129 
130 /**************************************************************************//**
131  @Function      FM_PCD_ALLOC_KG_SCHEMES
132 
133  @Description   Used by FM PCD front-end in order to allocate KG resources
134 
135  @Param[in/out] t_FmPcdIpcKgAllocParams Pointer
136 *//***************************************************************************/
137 #define FM_PCD_ALLOC_KG_SCHEMES                 3
138 
139 /**************************************************************************//**
140  @Function      FM_PCD_FREE_KG_SCHEMES
141 
142  @Description   Used by FM PCD front-end in order to Free KG resources
143 
144  @Param[in/out] t_FmPcdIpcKgSchemesParams Pointer
145 *//***************************************************************************/
146 #define FM_PCD_FREE_KG_SCHEMES                  4
147 
148 /**************************************************************************//**
149  @Function      FM_PCD_ALLOC_PROFILES
150 
151  @Description   Used by FM PCD front-end in order to allocate Policer profiles
152 
153  @Param[in/out] t_FmIpcResourceAllocParams Pointer
154 *//***************************************************************************/
155 #define FM_PCD_ALLOC_PROFILES                   5
156 
157 /**************************************************************************//**
158  @Function      FM_PCD_FREE_PROFILES
159 
160  @Description   Used by FM PCD front-end in order to Free Policer profiles
161 
162  @Param[in/out] t_FmIpcResourceAllocParams Pointer
163 *//***************************************************************************/
164 #define FM_PCD_FREE_PROFILES                    6
165 
166 /**************************************************************************//**
167  @Function      FM_PCD_SET_PORT_PROFILES
168 
169  @Description   Used by FM PCD front-end in order to allocate Policer profiles
170                 for specific port
171 
172  @Param[in/out] t_FmIpcResourceAllocParams Pointer
173 *//***************************************************************************/
174 #define FM_PCD_SET_PORT_PROFILES                7
175 
176 /**************************************************************************//**
177  @Function      FM_PCD_CLEAR_PORT_PROFILES
178 
179  @Description   Used by FM PCD front-end in order to allocate Policer profiles
180                 for specific port
181 
182  @Param[in/out] t_FmIpcResourceAllocParams Pointer
183 *//***************************************************************************/
184 #define FM_PCD_CLEAR_PORT_PROFILES              8
185 
186 /**************************************************************************//**
187  @Function      FM_PCD_GET_PHYS_MURAM_BASE
188 
189  @Description   Used by FM PCD front-end in order to get MURAM base address
190 
191  @Param[in/out] t_FmPcdIcPhysAddr Pointer
192 *//***************************************************************************/
193 #define FM_PCD_GET_PHYS_MURAM_BASE              9
194 
195 /**************************************************************************//**
196  @Function      FM_PCD_GET_SW_PRS_OFFSET
197 
198  @Description   Used by FM front-end to get the SW parser offset of the start of
199                 code relevant to a given label.
200 
201  @Param[in/out] t_FmPcdIpcSwPrsLable Pointer
202 *//***************************************************************************/
203 #define FM_PCD_GET_SW_PRS_OFFSET                10
204 
205 /**************************************************************************//**
206  @Function      FM_PCD_MASTER_IS_ENABLED
207 
208  @Description   Used by FM front-end in order to verify
209                 PCD enablement.
210 
211  @Param[in]     bool Pointer
212 *//***************************************************************************/
213 #define FM_PCD_MASTER_IS_ENABLED                15
214 
215 /**************************************************************************//**
216  @Function      FM_PCD_GUEST_DISABLE
217 
218  @Description   Used by FM front-end to inform back-end when
219                 front-end PCD is disabled
220 
221  @Param[in]     None
222 *//***************************************************************************/
223 #define FM_PCD_GUEST_DISABLE                    16
224 
225 /**************************************************************************//**
226  @Function      FM_PCD_FREE_KG_CLSPLAN
227 
228  @Description   Used by FM PCD front-end in order to Free KG classification plan entries
229 
230  @Param[in/out] t_FmPcdIpcKgClsPlanParams Pointer
231 *//***************************************************************************/
232 #define FM_PCD_FREE_KG_CLSPLAN                  22
233 
234 /**************************************************************************//**
235  @Function      FM_PCD_ALLOC_KG_CLSPLAN
236 
237  @Description   Used by FM PCD front-end in order to allocate KG classification plan entries
238 
239  @Param[in/out] t_FmPcdIpcKgClsPlanParams Pointer
240 *//***************************************************************************/
241 #define FM_PCD_ALLOC_KG_CLSPLAN                 23
242 
243 /**************************************************************************//**
244  @Function      FM_PCD_MASTER_IS_ALIVE
245 
246  @Description   Used by FM front-end to check that back-end exists
247 
248  @Param[in]     None
249 *//***************************************************************************/
250 #define FM_PCD_MASTER_IS_ALIVE                  24
251 
252 /**************************************************************************//**
253  @Function      FM_PCD_GET_COUNTER
254 
255  @Description   Used by FM front-end to read PCD counters
256 
257  @Param[in/out] t_FmPcdIpcGetCounter Pointer
258 *//***************************************************************************/
259 #define FM_PCD_GET_COUNTER                      25
260 
261 /**************************************************************************//**
262  @Function      FM_PCD_PRS_INC_PORT_STATS
263 
264  @Description   Used by FM front-end to set/clear statistics for port
265 
266  @Param[in/out] t_FmPcdIpcPrsIncludePort Pointer
267 *//***************************************************************************/
268 #define FM_PCD_PRS_INC_PORT_STATS               26
269 
270 #if (DPAA_VERSION >= 11)
271 /* TODO - doc */
272 #define FM_PCD_ALLOC_SP                         27
273 #endif /* (DPAA_VERSION >= 11) */
274 
275 
276 /** @} */ /* end of FM_PCD_IPC_grp group */
277 /** @} */ /* end of FM_grp group */
278 
279 
280 #endif /* __FM_PCD_IPC_H */
281