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_ipc.h
36
37 @Description FM Inter-Partition prototypes, structures and definitions.
38 *//***************************************************************************/
39 #ifndef __FM_IPC_H
40 #define __FM_IPC_H
41
42 #include "error_ext.h"
43 #include "std_ext.h"
44
45
46 /**************************************************************************//**
47 @Group FM_grp Frame Manager API
48
49 @Description FM API functions, definitions and enums
50
51 @{
52 *//***************************************************************************/
53
54 /**************************************************************************//**
55 @Group FM_IPC_grp FM Inter-Partition messaging Unit
56
57 @Description FM Inter-Partition messaging unit API definitions and enums.
58
59 @{
60 *//***************************************************************************/
61
62 #if defined(__MWERKS__) && !defined(__GNUC__)
63 #pragma pack(push,1)
64 #endif /* defined(__MWERKS__) && ... */
65
66 /**************************************************************************//**
67 @Description enum for defining MAC types
68 *//***************************************************************************/
69
70 /**************************************************************************//**
71 @Description A structure of parameters for specifying a MAC.
72 *//***************************************************************************/
73 typedef _Packed struct
74 {
75 uint8_t id;
76 uint32_t enumType;
77 } _PackedType t_FmIpcMacParams;
78
79 /**************************************************************************//**
80 @Description A structure of parameters for specifying a MAC.
81 *//***************************************************************************/
82 typedef _Packed struct
83 {
84 t_FmIpcMacParams macParams;
85 uint16_t maxFrameLength;
86 } _PackedType t_FmIpcMacMaxFrameParams;
87
88 /**************************************************************************//**
89 @Description FM physical Address
90 *//***************************************************************************/
91 typedef _Packed struct t_FmIpcPhysAddr
92 {
93 volatile uint8_t high;
94 volatile uint32_t low;
95 } _PackedType t_FmIpcPhysAddr;
96
97
98 typedef _Packed struct t_FmIpcPortOutInitParams {
99 uint8_t numOfTasks; /**< OUT */
100 uint8_t numOfExtraTasks; /**< OUT */
101 uint8_t numOfOpenDmas; /**< OUT */
102 uint8_t numOfExtraOpenDmas; /**< OUT */
103 uint32_t sizeOfFifo; /**< OUT */
104 uint32_t extraSizeOfFifo; /**< OUT */
105 t_FmIpcPhysAddr ipcPhysAddr; /**< OUT */
106 } _PackedType t_FmIpcPortOutInitParams;
107
108 /**************************************************************************//**
109 @Description Structure for IPC communication during FM_PORT_Init.
110 *//***************************************************************************/
111 typedef _Packed struct t_FmIpcPortInInitParams {
112 uint8_t hardwarePortId; /**< IN. port Id */
113 uint32_t enumPortType; /**< IN. Port type */
114 uint8_t boolIndependentMode;/**< IN. TRUE if FM Port operates in independent mode */
115 uint16_t liodnOffset; /**< IN. Port's requested resource */
116 uint8_t numOfTasks; /**< IN. Port's requested resource */
117 uint8_t numOfExtraTasks; /**< IN. Port's requested resource */
118 uint8_t numOfOpenDmas; /**< IN. Port's requested resource */
119 uint8_t numOfExtraOpenDmas; /**< IN. Port's requested resource */
120 uint32_t sizeOfFifo; /**< IN. Port's requested resource */
121 uint32_t extraSizeOfFifo; /**< IN. Port's requested resource */
122 uint8_t deqPipelineDepth; /**< IN. Port's requested resource */
123 uint16_t maxFrameLength; /**< IN. Port's max frame length. */
124 uint16_t liodnBase; /**< IN. Irrelevant for P4080 rev 1.
125 LIODN base for this port, to be
126 used together with LIODN offset. */
127 } _PackedType t_FmIpcPortInInitParams;
128
129
130 /**************************************************************************//**
131 @Description Structure for IPC communication between port and FM
132 regarding tasks and open DMA resources management.
133 *//***************************************************************************/
134 typedef _Packed struct t_FmIpcPortRsrcParams {
135 uint8_t hardwarePortId; /**< IN. port Id */
136 uint32_t val; /**< IN. Port's requested resource */
137 uint32_t extra; /**< IN. Port's requested resource */
138 uint8_t boolInitialConfig;
139 } _PackedType t_FmIpcPortRsrcParams;
140
141
142 /**************************************************************************//**
143 @Description Structure for IPC communication between port and FM
144 regarding tasks and open DMA resources management.
145 *//***************************************************************************/
146 typedef _Packed struct t_FmIpcPortFifoParams {
147 t_FmIpcPortRsrcParams rsrcParams;
148 uint32_t enumPortType;
149 uint8_t boolIndependentMode;
150 uint8_t deqPipelineDepth;
151 uint8_t numOfPools;
152 uint16_t secondLargestBufSize;
153 uint16_t largestBufSize;
154 uint8_t boolInitialConfig;
155 } _PackedType t_FmIpcPortFifoParams;
156
157 /**************************************************************************//**
158 @Description Structure for port-FM communication during FM_PORT_Free.
159 *//***************************************************************************/
160 typedef _Packed struct t_FmIpcPortFreeParams {
161 uint8_t hardwarePortId; /**< IN. port Id */
162 uint32_t enumPortType; /**< IN. Port type */
163 uint8_t deqPipelineDepth; /**< IN. Port's requested resource */
164 } _PackedType t_FmIpcPortFreeParams;
165
166 /**************************************************************************//**
167 @Description Structure for defining DMA status
168 *//***************************************************************************/
169 typedef _Packed struct t_FmIpcDmaStatus {
170 uint8_t boolCmqNotEmpty; /**< Command queue is not empty */
171 uint8_t boolBusError; /**< Bus error occurred */
172 uint8_t boolReadBufEccError; /**< Double ECC error on buffer Read */
173 uint8_t boolWriteBufEccSysError; /**< Double ECC error on buffer write from system side */
174 uint8_t boolWriteBufEccFmError; /**< Double ECC error on buffer write from FM side */
175 uint8_t boolSinglePortEccError; /**< Single port ECC error from FM side */
176 } _PackedType t_FmIpcDmaStatus;
177
178 typedef _Packed struct t_FmIpcRegisterIntr
179 {
180 uint8_t guestId; /* IN */
181 uint32_t event; /* IN */
182 } _PackedType t_FmIpcRegisterIntr;
183
184 typedef _Packed struct t_FmIpcIsr
185 {
186 uint8_t boolErr; /* IN */
187 uint32_t pendingReg; /* IN */
188 } _PackedType t_FmIpcIsr;
189
190 /**************************************************************************//**
191 @Description structure for returning FM parameters
192 *//***************************************************************************/
193 typedef _Packed struct t_FmIpcParams {
194 uint16_t fmClkFreq; /**< OUT: FM Clock frequency */
195 uint16_t fmMacClkFreq; /**< OUT: FM MAC clock frequence */
196 uint8_t majorRev; /**< OUT: FM Major revision */
197 uint8_t minorRev; /**< OUT: FM Minor revision */
198 } _PackedType t_FmIpcParams;
199
200
201 /**************************************************************************//**
202 @Description structure for returning Fman Ctrl Code revision information
203 *//***************************************************************************/
204 typedef _Packed struct t_FmIpcFmanCtrlCodeRevisionInfo {
205 uint16_t packageRev; /**< OUT: Package revision */
206 uint8_t majorRev; /**< OUT: Major revision */
207 uint8_t minorRev; /**< OUT: Minor revision */
208 } _PackedType t_FmIpcFmanCtrlCodeRevisionInfo;
209
210 /**************************************************************************//**
211 @Description Structure for defining Fm number of Fman controlers
212 *//***************************************************************************/
213 typedef _Packed struct t_FmIpcPortNumOfFmanCtrls {
214 uint8_t hardwarePortId; /**< IN. port Id */
215 uint8_t numOfFmanCtrls; /**< IN. Port type */
216 t_FmFmanCtrl orFmanCtrl; /**< IN. fman controller for order restoration*/
217 } t_FmIpcPortNumOfFmanCtrls;
218
219 /**************************************************************************//**
220 @Description structure for setting Fman contriller events
221 *//***************************************************************************/
222 typedef _Packed struct t_FmIpcFmanEvents {
223 uint8_t eventRegId; /**< IN: Fman controller event register id */
224 uint32_t enableEvents; /**< IN/OUT: required enabled events mask */
225 } _PackedType t_FmIpcFmanEvents;
226
227 typedef _Packed struct t_FmIpcResourceAllocParams {
228 uint8_t guestId;
229 uint16_t base;
230 uint16_t num;
231 }_PackedType t_FmIpcResourceAllocParams;
232
233 typedef _Packed struct t_FmIpcVspSetPortWindow {
234 uint8_t hardwarePortId;
235 uint8_t baseStorageProfile;
236 uint8_t log2NumOfProfiles;
237 }_PackedType t_FmIpcVspSetPortWindow;
238
239 typedef _Packed struct t_FmIpcSetCongestionGroupPfcPriority {
240 uint32_t congestionGroupId;
241 uint8_t priorityBitMap;
242 }_PackedType t_FmIpcSetCongestionGroupPfcPriority;
243
244 #define FM_IPC_MAX_REPLY_BODY_SIZE 20
245 #define FM_IPC_MAX_REPLY_SIZE (FM_IPC_MAX_REPLY_BODY_SIZE + sizeof(uint32_t))
246 #define FM_IPC_MAX_MSG_SIZE 30
247
248 typedef _Packed struct t_FmIpcMsg
249 {
250 uint32_t msgId;
251 uint8_t msgBody[FM_IPC_MAX_MSG_SIZE];
252 } _PackedType t_FmIpcMsg;
253
254 typedef _Packed struct t_FmIpcReply
255 {
256 uint32_t error;
257 uint8_t replyBody[FM_IPC_MAX_REPLY_BODY_SIZE];
258 } _PackedType t_FmIpcReply;
259
260 #if defined(__MWERKS__) && !defined(__GNUC__)
261 #pragma pack(pop)
262 #endif /* defined(__MWERKS__) && ... */
263
264
265 /***************************************************************************/
266 /************************ FRONT-END-TO-BACK-END*****************************/
267 /***************************************************************************/
268
269 /**************************************************************************//**
270 @Function FM_GET_TIMESTAMP_SCALE
271
272 @Description Used by FM front-end.
273
274 @Param[out] uint32_t Pointer
275 *//***************************************************************************/
276 #define FM_GET_TIMESTAMP_SCALE 1
277
278 /**************************************************************************//**
279 @Function FM_GET_COUNTER
280
281 @Description Used by FM front-end.
282
283 @Param[in/out] t_FmIpcGetCounter Pointer
284 *//***************************************************************************/
285 #define FM_GET_COUNTER 2
286
287 /**************************************************************************//**
288 @Function FM_GET_SET_PORT_PARAMS
289
290 @Description Used by FM front-end for the PORT module in order to set and get
291 parameters in/from master FM module on FM PORT initialization time.
292
293 @Param[in/out] t_FmIcPortInitParams Pointer
294 *//***************************************************************************/
295 #define FM_GET_SET_PORT_PARAMS 4
296
297 /**************************************************************************//**
298 @Function FM_FREE_PORT
299
300 @Description Used by FM front-end for the PORT module when a port is freed
301 to free all FM PORT resources.
302
303 @Param[in] uint8_t Pointer
304 *//***************************************************************************/
305 #define FM_FREE_PORT 5
306
307 /**************************************************************************//**
308 @Function FM_RESET_MAC
309
310 @Description Used by front-end for the MAC module to reset the MAC registers
311
312 @Param[in] t_FmIpcMacParams Pointer .
313 *//***************************************************************************/
314 #define FM_RESET_MAC 6
315
316 /**************************************************************************//**
317 @Function FM_RESUME_STALLED_PORT
318
319 @Description Used by FM front-end for the PORT module in order to
320 release a stalled FM Port.
321
322 @Param[in] uint8_t Pointer
323 *//***************************************************************************/
324 #define FM_RESUME_STALLED_PORT 7
325
326 /**************************************************************************//**
327 @Function FM_IS_PORT_STALLED
328
329 @Description Used by FM front-end for the PORT module in order to check whether
330 an FM port is stalled.
331
332 @Param[in/out] t_FmIcPortIsStalled Pointer
333 *//***************************************************************************/
334 #define FM_IS_PORT_STALLED 8
335
336 /**************************************************************************//**
337 @Function FM_GET_PARAMS
338
339 @Description Used by FM front-end for the PORT module in order to dump
340 return FM parameters.
341
342 @Param[in] uint8_t Pointer
343 *//***************************************************************************/
344 #define FM_GET_PARAMS 10
345
346 /**************************************************************************//**
347 @Function FM_REGISTER_INTR
348
349 @Description Used by FM front-end to register an interrupt handler to
350 be called upon interrupt for guest.
351
352 @Param[out] t_FmIpcRegisterIntr Pointer
353 *//***************************************************************************/
354 #define FM_REGISTER_INTR 11
355
356 /**************************************************************************//**
357 @Function FM_DMA_STAT
358
359 @Description Used by FM front-end to read the FM DMA status.
360
361 @Param[out] t_FmIpcDmaStatus Pointer
362 *//***************************************************************************/
363 #define FM_DMA_STAT 13
364
365 /**************************************************************************//**
366 @Function FM_ALLOC_FMAN_CTRL_EVENT_REG
367
368 @Description Used by FM front-end to allocate event register.
369
370 @Param[out] Event register id Pointer
371 *//***************************************************************************/
372 #define FM_ALLOC_FMAN_CTRL_EVENT_REG 14
373
374 /**************************************************************************//**
375 @Function FM_FREE_FMAN_CTRL_EVENT_REG
376
377 @Description Used by FM front-end to free locate event register.
378
379 @Param[in] uint8_t Pointer - Event register id
380 *//***************************************************************************/
381 #define FM_FREE_FMAN_CTRL_EVENT_REG 15
382
383 /**************************************************************************//**
384 @Function FM_SET_FMAN_CTRL_EVENTS_ENABLE
385
386 @Description Used by FM front-end to enable events in the FPM
387 Fman controller event register.
388
389 @Param[in] t_FmIpcFmanEvents Pointer
390 *//***************************************************************************/
391 #define FM_SET_FMAN_CTRL_EVENTS_ENABLE 16
392
393 /**************************************************************************//**
394 @Function FM_SET_FMAN_CTRL_EVENTS_ENABLE
395
396 @Description Used by FM front-end to enable events in the FPM
397 Fman controller event register.
398
399 @Param[in/out] t_FmIpcFmanEvents Pointer
400 *//***************************************************************************/
401 #define FM_GET_FMAN_CTRL_EVENTS_ENABLE 17
402
403 /**************************************************************************//**
404 @Function FM_SET_MAC_MAX_FRAME
405
406 @Description Used by FM front-end to set MAC's MTU/RTU's in
407 back-end.
408
409 @Param[in/out] t_FmIpcMacMaxFrameParams Pointer
410 *//***************************************************************************/
411 #define FM_SET_MAC_MAX_FRAME 18
412
413 /**************************************************************************//**
414 @Function FM_GET_PHYS_MURAM_BASE
415
416 @Description Used by FM front-end in order to get MURAM base address
417
418 @Param[in/out] t_FmIpcPhysAddr Pointer
419 *//***************************************************************************/
420 #define FM_GET_PHYS_MURAM_BASE 19
421
422 /**************************************************************************//**
423 @Function FM_MASTER_IS_ALIVE
424
425 @Description Used by FM front-end in order to verify Master is up
426
427 @Param[in/out] bool
428 *//***************************************************************************/
429 #define FM_MASTER_IS_ALIVE 20
430
431 #define FM_ENABLE_RAM_ECC 21
432 #define FM_DISABLE_RAM_ECC 22
433 #define FM_SET_NUM_OF_FMAN_CTRL 23
434 #define FM_SET_SIZE_OF_FIFO 24
435 #define FM_SET_NUM_OF_TASKS 25
436 #define FM_SET_NUM_OF_OPEN_DMAS 26
437 #define FM_VSP_ALLOC 27
438 #define FM_VSP_FREE 28
439 #define FM_VSP_SET_PORT_WINDOW 29
440 #define FM_GET_FMAN_CTRL_CODE_REV 30
441 #define FM_SET_CONG_GRP_PFC_PRIO 31
442 #ifdef FM_TX_ECC_FRMS_ERRATA_10GMAC_A004
443 #define FM_10G_TX_ECC_WA 100
444 #endif /* FM_TX_ECC_FRMS_ERRATA_10GMAC_A004 */
445
446 /***************************************************************************/
447 /************************ BACK-END-TO-FRONT-END*****************************/
448 /***************************************************************************/
449
450 /**************************************************************************//**
451 @Function FM_GUEST_ISR
452
453 @Description Used by FM back-end to report an interrupt to the front-end.
454
455 @Param[out] t_FmIpcIsr Pointer
456 *//***************************************************************************/
457 #define FM_GUEST_ISR 1
458
459
460
461 /** @} */ /* end of FM_IPC_grp group */
462 /** @} */ /* end of FM_grp group */
463
464
465 #endif /* __FM_IPC_H */
Cache object: 90050bf51fbebfeda14bcba8f11a06c4
|