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 */ 466