1852ba100SJustin Hibbits /* Copyright (c) 2008-2012 Freescale Semiconductor, Inc 20aeed3e9SJustin Hibbits * All rights reserved. 30aeed3e9SJustin Hibbits * 40aeed3e9SJustin Hibbits * Redistribution and use in source and binary forms, with or without 50aeed3e9SJustin Hibbits * modification, are permitted provided that the following conditions are met: 60aeed3e9SJustin Hibbits * * Redistributions of source code must retain the above copyright 70aeed3e9SJustin Hibbits * notice, this list of conditions and the following disclaimer. 80aeed3e9SJustin Hibbits * * Redistributions in binary form must reproduce the above copyright 90aeed3e9SJustin Hibbits * notice, this list of conditions and the following disclaimer in the 100aeed3e9SJustin Hibbits * documentation and/or other materials provided with the distribution. 110aeed3e9SJustin Hibbits * * Neither the name of Freescale Semiconductor nor the 120aeed3e9SJustin Hibbits * names of its contributors may be used to endorse or promote products 130aeed3e9SJustin Hibbits * derived from this software without specific prior written permission. 140aeed3e9SJustin Hibbits * 150aeed3e9SJustin Hibbits * 160aeed3e9SJustin Hibbits * ALTERNATIVELY, this software may be distributed under the terms of the 170aeed3e9SJustin Hibbits * GNU General Public License ("GPL") as published by the Free Software 180aeed3e9SJustin Hibbits * Foundation, either version 2 of that License or (at your option) any 190aeed3e9SJustin Hibbits * later version. 200aeed3e9SJustin Hibbits * 210aeed3e9SJustin Hibbits * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY 220aeed3e9SJustin Hibbits * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 230aeed3e9SJustin Hibbits * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 240aeed3e9SJustin Hibbits * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY 250aeed3e9SJustin Hibbits * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 260aeed3e9SJustin Hibbits * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 270aeed3e9SJustin Hibbits * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 280aeed3e9SJustin Hibbits * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 290aeed3e9SJustin Hibbits * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 300aeed3e9SJustin Hibbits * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 310aeed3e9SJustin Hibbits */ 320aeed3e9SJustin Hibbits 33852ba100SJustin Hibbits 34852ba100SJustin Hibbits /**************************************************************************//** 350aeed3e9SJustin Hibbits @File dpaa_ext.h 360aeed3e9SJustin Hibbits 370aeed3e9SJustin Hibbits @Description DPAA Application Programming Interface. 380aeed3e9SJustin Hibbits *//***************************************************************************/ 390aeed3e9SJustin Hibbits #ifndef __DPAA_EXT_H 400aeed3e9SJustin Hibbits #define __DPAA_EXT_H 410aeed3e9SJustin Hibbits 420aeed3e9SJustin Hibbits #include "std_ext.h" 430aeed3e9SJustin Hibbits #include "error_ext.h" 440aeed3e9SJustin Hibbits 450aeed3e9SJustin Hibbits 460aeed3e9SJustin Hibbits /**************************************************************************//** 470aeed3e9SJustin Hibbits @Group DPAA_grp Data Path Acceleration Architecture API 480aeed3e9SJustin Hibbits 490aeed3e9SJustin Hibbits @Description DPAA API functions, definitions and enums. 500aeed3e9SJustin Hibbits 510aeed3e9SJustin Hibbits @{ 520aeed3e9SJustin Hibbits *//***************************************************************************/ 530aeed3e9SJustin Hibbits 540aeed3e9SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__) 550aeed3e9SJustin Hibbits #pragma pack(push,1) 560aeed3e9SJustin Hibbits #endif /* defined(__MWERKS__) && ... */ 57852ba100SJustin Hibbits 58852ba100SJustin Hibbits #include <machine/endian.h> 59852ba100SJustin Hibbits 60*aef13f05SJustin Hibbits #ifndef __BYTE_ORDER__ 61852ba100SJustin Hibbits #define __BYTE_ORDER__ BYTE_ORDER 62*aef13f05SJustin Hibbits #endif 63*aef13f05SJustin Hibbits #ifndef __ORDER_BIG_ENDIAN__ 64852ba100SJustin Hibbits #define __ORDER_BIG_ENDIAN__ BIG_ENDIAN 65*aef13f05SJustin Hibbits #endif 660aeed3e9SJustin Hibbits 670aeed3e9SJustin Hibbits /**************************************************************************//** 680aeed3e9SJustin Hibbits @Description Frame descriptor 690aeed3e9SJustin Hibbits *//***************************************************************************/ 700aeed3e9SJustin Hibbits typedef _Packed struct t_DpaaFD { 71852ba100SJustin Hibbits #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 72852ba100SJustin Hibbits volatile uint8_t liodn; 73852ba100SJustin Hibbits volatile uint8_t bpid; 74852ba100SJustin Hibbits volatile uint8_t elion; 75852ba100SJustin Hibbits volatile uint8_t addrh; 76852ba100SJustin Hibbits volatile uint32_t addrl; 77852ba100SJustin Hibbits #else 78852ba100SJustin Hibbits volatile uint32_t addrl; 79852ba100SJustin Hibbits volatile uint8_t addrh; 80852ba100SJustin Hibbits volatile uint8_t elion; 81852ba100SJustin Hibbits volatile uint8_t bpid; 82852ba100SJustin Hibbits volatile uint8_t liodn; 83852ba100SJustin Hibbits #endif 840aeed3e9SJustin Hibbits volatile uint32_t length; /**< Frame length */ 850aeed3e9SJustin Hibbits volatile uint32_t status; /**< FD status */ 860aeed3e9SJustin Hibbits } _PackedType t_DpaaFD; 870aeed3e9SJustin Hibbits 880aeed3e9SJustin Hibbits /**************************************************************************//** 890aeed3e9SJustin Hibbits @Description enum for defining frame format 900aeed3e9SJustin Hibbits *//***************************************************************************/ 910aeed3e9SJustin Hibbits typedef enum e_DpaaFDFormatType { 920aeed3e9SJustin Hibbits e_DPAA_FD_FORMAT_TYPE_SHORT_SBSF = 0x0, /**< Simple frame Single buffer; Offset and 930aeed3e9SJustin Hibbits small length (9b OFFSET, 20b LENGTH) */ 940aeed3e9SJustin Hibbits e_DPAA_FD_FORMAT_TYPE_LONG_SBSF = 0x2, /**< Simple frame, single buffer; big length 950aeed3e9SJustin Hibbits (29b LENGTH ,No OFFSET) */ 960aeed3e9SJustin Hibbits e_DPAA_FD_FORMAT_TYPE_SHORT_MBSF = 0x4, /**< Simple frame, Scatter Gather table; Offset 970aeed3e9SJustin Hibbits and small length (9b OFFSET, 20b LENGTH) */ 980aeed3e9SJustin Hibbits e_DPAA_FD_FORMAT_TYPE_LONG_MBSF = 0x6, /**< Simple frame, Scatter Gather table; 990aeed3e9SJustin Hibbits big length (29b LENGTH ,No OFFSET) */ 1000aeed3e9SJustin Hibbits e_DPAA_FD_FORMAT_TYPE_COMPOUND = 0x1, /**< Compound Frame (29b CONGESTION-WEIGHT 1010aeed3e9SJustin Hibbits No LENGTH or OFFSET) */ 1020aeed3e9SJustin Hibbits e_DPAA_FD_FORMAT_TYPE_DUMMY 1030aeed3e9SJustin Hibbits } e_DpaaFDFormatType; 1040aeed3e9SJustin Hibbits 1050aeed3e9SJustin Hibbits /**************************************************************************//** 1060aeed3e9SJustin Hibbits @Collection Frame descriptor macros 1070aeed3e9SJustin Hibbits *//***************************************************************************/ 1080aeed3e9SJustin Hibbits #define DPAA_FD_DD_MASK 0xc0000000 /**< FD DD field mask */ 1090aeed3e9SJustin Hibbits #define DPAA_FD_PID_MASK 0x3f000000 /**< FD PID field mask */ 1100aeed3e9SJustin Hibbits #define DPAA_FD_ELIODN_MASK 0x0000f000 /**< FD ELIODN field mask */ 1110aeed3e9SJustin Hibbits #define DPAA_FD_BPID_MASK 0x00ff0000 /**< FD BPID field mask */ 1120aeed3e9SJustin Hibbits #define DPAA_FD_ADDRH_MASK 0x000000ff /**< FD ADDRH field mask */ 1130aeed3e9SJustin Hibbits #define DPAA_FD_ADDRL_MASK 0xffffffff /**< FD ADDRL field mask */ 1140aeed3e9SJustin Hibbits #define DPAA_FD_FORMAT_MASK 0xe0000000 /**< FD FORMAT field mask */ 1150aeed3e9SJustin Hibbits #define DPAA_FD_OFFSET_MASK 0x1ff00000 /**< FD OFFSET field mask */ 1160aeed3e9SJustin Hibbits #define DPAA_FD_LENGTH_MASK 0x000fffff /**< FD LENGTH field mask */ 1170aeed3e9SJustin Hibbits 118852ba100SJustin Hibbits #define DPAA_FD_GET_ADDRH(fd) ((t_DpaaFD *)fd)->addrh /**< Macro to get FD ADDRH field */ 1190aeed3e9SJustin Hibbits #define DPAA_FD_GET_ADDRL(fd) ((t_DpaaFD *)fd)->addrl /**< Macro to get FD ADDRL field */ 1200aeed3e9SJustin Hibbits #define DPAA_FD_GET_PHYS_ADDR(fd) ((physAddress_t)(((uint64_t)DPAA_FD_GET_ADDRH(fd) << 32) | (uint64_t)DPAA_FD_GET_ADDRL(fd))) /**< Macro to get FD ADDR field */ 1210aeed3e9SJustin Hibbits #define DPAA_FD_GET_FORMAT(fd) ((((t_DpaaFD *)fd)->length & DPAA_FD_FORMAT_MASK) >> (31-2)) /**< Macro to get FD FORMAT field */ 1220aeed3e9SJustin Hibbits #define DPAA_FD_GET_OFFSET(fd) ((((t_DpaaFD *)fd)->length & DPAA_FD_OFFSET_MASK) >> (31-11)) /**< Macro to get FD OFFSET field */ 1230aeed3e9SJustin Hibbits #define DPAA_FD_GET_LENGTH(fd) (((t_DpaaFD *)fd)->length & DPAA_FD_LENGTH_MASK) /**< Macro to get FD LENGTH field */ 1240aeed3e9SJustin Hibbits #define DPAA_FD_GET_STATUS(fd) ((t_DpaaFD *)fd)->status /**< Macro to get FD STATUS field */ 125852ba100SJustin Hibbits #define DPAA_FD_GET_ADDR(fd) XX_PhysToVirt(DPAA_FD_GET_PHYS_ADDR(fd)) /**< Macro to get FD ADDR (virtual) */ 1260aeed3e9SJustin Hibbits 127852ba100SJustin Hibbits #define DPAA_FD_SET_ADDRH(fd,val) ((t_DpaaFD *)fd)->addrh = (val) /**< Macro to set FD ADDRH field */ 1280aeed3e9SJustin Hibbits #define DPAA_FD_SET_ADDRL(fd,val) ((t_DpaaFD *)fd)->addrl = (val) /**< Macro to set FD ADDRL field */ 1290aeed3e9SJustin Hibbits #define DPAA_FD_SET_ADDR(fd,val) \ 1300aeed3e9SJustin Hibbits do { \ 1310aeed3e9SJustin Hibbits uint64_t physAddr = (uint64_t)(XX_VirtToPhys(val)); \ 1320aeed3e9SJustin Hibbits DPAA_FD_SET_ADDRH(fd, ((uint32_t)(physAddr >> 32))); \ 1330aeed3e9SJustin Hibbits DPAA_FD_SET_ADDRL(fd, (uint32_t)physAddr); \ 1340aeed3e9SJustin Hibbits } while (0) /**< Macro to set FD ADDR field */ 1350aeed3e9SJustin Hibbits #define DPAA_FD_SET_FORMAT(fd,val) (((t_DpaaFD *)fd)->length = ((((t_DpaaFD *)fd)->length & ~DPAA_FD_FORMAT_MASK) | (((val) << (31-2))& DPAA_FD_FORMAT_MASK))) /**< Macro to set FD FORMAT field */ 1360aeed3e9SJustin Hibbits #define DPAA_FD_SET_OFFSET(fd,val) (((t_DpaaFD *)fd)->length = ((((t_DpaaFD *)fd)->length & ~DPAA_FD_OFFSET_MASK) | (((val) << (31-11))& DPAA_FD_OFFSET_MASK) )) /**< Macro to set FD OFFSET field */ 1370aeed3e9SJustin Hibbits #define DPAA_FD_SET_LENGTH(fd,val) (((t_DpaaFD *)fd)->length = (((t_DpaaFD *)fd)->length & ~DPAA_FD_LENGTH_MASK) | ((val) & DPAA_FD_LENGTH_MASK)) /**< Macro to set FD LENGTH field */ 1380aeed3e9SJustin Hibbits #define DPAA_FD_SET_STATUS(fd,val) ((t_DpaaFD *)fd)->status = (val) /**< Macro to set FD STATUS field */ 1390aeed3e9SJustin Hibbits /* @} */ 1400aeed3e9SJustin Hibbits 1410aeed3e9SJustin Hibbits /**************************************************************************//** 1420aeed3e9SJustin Hibbits @Description Frame Scatter/Gather Table Entry 1430aeed3e9SJustin Hibbits *//***************************************************************************/ 1440aeed3e9SJustin Hibbits typedef _Packed struct t_DpaaSGTE { 1450aeed3e9SJustin Hibbits volatile uint32_t addrh; /**< Buffer Address high */ 1460aeed3e9SJustin Hibbits volatile uint32_t addrl; /**< Buffer Address low */ 1470aeed3e9SJustin Hibbits volatile uint32_t length; /**< Buffer length */ 1480aeed3e9SJustin Hibbits volatile uint32_t offset; /**< SGTE offset */ 1490aeed3e9SJustin Hibbits } _PackedType t_DpaaSGTE; 1500aeed3e9SJustin Hibbits 1510aeed3e9SJustin Hibbits #define DPAA_NUM_OF_SG_TABLE_ENTRY 16 1520aeed3e9SJustin Hibbits 1530aeed3e9SJustin Hibbits /**************************************************************************//** 1540aeed3e9SJustin Hibbits @Description Frame Scatter/Gather Table 1550aeed3e9SJustin Hibbits *//***************************************************************************/ 1560aeed3e9SJustin Hibbits typedef _Packed struct t_DpaaSGT { 1570aeed3e9SJustin Hibbits t_DpaaSGTE tableEntry[DPAA_NUM_OF_SG_TABLE_ENTRY]; 158852ba100SJustin Hibbits /**< Structure that holds information about 1590aeed3e9SJustin Hibbits a single S/G entry. */ 1600aeed3e9SJustin Hibbits } _PackedType t_DpaaSGT; 1610aeed3e9SJustin Hibbits 1620aeed3e9SJustin Hibbits /**************************************************************************//** 1630aeed3e9SJustin Hibbits @Description Compound Frame Table 1640aeed3e9SJustin Hibbits *//***************************************************************************/ 1650aeed3e9SJustin Hibbits typedef _Packed struct t_DpaaCompTbl { 166852ba100SJustin Hibbits t_DpaaSGTE outputBuffInfo; /**< Structure that holds information about 1670aeed3e9SJustin Hibbits the compound-frame output buffer; 1680aeed3e9SJustin Hibbits NOTE: this may point to a S/G table */ 169852ba100SJustin Hibbits t_DpaaSGTE inputBuffInfo; /**< Structure that holds information about 1700aeed3e9SJustin Hibbits the compound-frame input buffer; 1710aeed3e9SJustin Hibbits NOTE: this may point to a S/G table */ 1720aeed3e9SJustin Hibbits } _PackedType t_DpaaCompTbl; 1730aeed3e9SJustin Hibbits 1740aeed3e9SJustin Hibbits /**************************************************************************//** 1750aeed3e9SJustin Hibbits @Collection Frame Scatter/Gather Table Entry macros 1760aeed3e9SJustin Hibbits *//***************************************************************************/ 1770aeed3e9SJustin Hibbits #define DPAA_SGTE_ADDRH_MASK 0x000000ff /**< SGTE ADDRH field mask */ 1780aeed3e9SJustin Hibbits #define DPAA_SGTE_ADDRL_MASK 0xffffffff /**< SGTE ADDRL field mask */ 1790aeed3e9SJustin Hibbits #define DPAA_SGTE_E_MASK 0x80000000 /**< SGTE Extension field mask */ 1800aeed3e9SJustin Hibbits #define DPAA_SGTE_F_MASK 0x40000000 /**< SGTE Final field mask */ 1810aeed3e9SJustin Hibbits #define DPAA_SGTE_LENGTH_MASK 0x3fffffff /**< SGTE LENGTH field mask */ 1820aeed3e9SJustin Hibbits #define DPAA_SGTE_BPID_MASK 0x00ff0000 /**< SGTE BPID field mask */ 1830aeed3e9SJustin Hibbits #define DPAA_SGTE_OFFSET_MASK 0x00001fff /**< SGTE OFFSET field mask */ 1840aeed3e9SJustin Hibbits 1850aeed3e9SJustin Hibbits #define DPAA_SGTE_GET_ADDRH(sgte) (((t_DpaaSGTE *)sgte)->addrh & DPAA_SGTE_ADDRH_MASK) /**< Macro to get SGTE ADDRH field */ 1860aeed3e9SJustin Hibbits #define DPAA_SGTE_GET_ADDRL(sgte) ((t_DpaaSGTE *)sgte)->addrl /**< Macro to get SGTE ADDRL field */ 1870aeed3e9SJustin Hibbits #define DPAA_SGTE_GET_PHYS_ADDR(sgte) ((physAddress_t)(((uint64_t)DPAA_SGTE_GET_ADDRH(sgte) << 32) | (uint64_t)DPAA_SGTE_GET_ADDRL(sgte))) /**< Macro to get FD ADDR field */ 1880aeed3e9SJustin Hibbits #define DPAA_SGTE_GET_EXTENSION(sgte) ((((t_DpaaSGTE *)sgte)->length & DPAA_SGTE_E_MASK) >> (31-0)) /**< Macro to get SGTE EXTENSION field */ 1890aeed3e9SJustin Hibbits #define DPAA_SGTE_GET_FINAL(sgte) ((((t_DpaaSGTE *)sgte)->length & DPAA_SGTE_F_MASK) >> (31-1)) /**< Macro to get SGTE FINAL field */ 1900aeed3e9SJustin Hibbits #define DPAA_SGTE_GET_LENGTH(sgte) (((t_DpaaSGTE *)sgte)->length & DPAA_SGTE_LENGTH_MASK) /**< Macro to get SGTE LENGTH field */ 1910aeed3e9SJustin Hibbits #define DPAA_SGTE_GET_BPID(sgte) ((((t_DpaaSGTE *)sgte)->offset & DPAA_SGTE_BPID_MASK) >> (31-15)) /**< Macro to get SGTE BPID field */ 1920aeed3e9SJustin Hibbits #define DPAA_SGTE_GET_OFFSET(sgte) (((t_DpaaSGTE *)sgte)->offset & DPAA_SGTE_OFFSET_MASK) /**< Macro to get SGTE OFFSET field */ 1930aeed3e9SJustin Hibbits #define DPAA_SGTE_GET_ADDR(sgte) XX_PhysToVirt(DPAA_SGTE_GET_PHYS_ADDR(sgte)) 1940aeed3e9SJustin Hibbits 1950aeed3e9SJustin Hibbits #define DPAA_SGTE_SET_ADDRH(sgte,val) (((t_DpaaSGTE *)sgte)->addrh = ((((t_DpaaSGTE *)sgte)->addrh & ~DPAA_SGTE_ADDRH_MASK) | ((val) & DPAA_SGTE_ADDRH_MASK))) /**< Macro to set SGTE ADDRH field */ 1960aeed3e9SJustin Hibbits #define DPAA_SGTE_SET_ADDRL(sgte,val) ((t_DpaaSGTE *)sgte)->addrl = (val) /**< Macro to set SGTE ADDRL field */ 1970aeed3e9SJustin Hibbits #define DPAA_SGTE_SET_ADDR(sgte,val) \ 1980aeed3e9SJustin Hibbits do { \ 1990aeed3e9SJustin Hibbits uint64_t physAddr = (uint64_t)(XX_VirtToPhys(val)); \ 2000aeed3e9SJustin Hibbits DPAA_SGTE_SET_ADDRH(sgte, ((uint32_t)(physAddr >> 32))); \ 2010aeed3e9SJustin Hibbits DPAA_SGTE_SET_ADDRL(sgte, (uint32_t)physAddr); \ 2020aeed3e9SJustin Hibbits } while (0) /**< Macro to set SGTE ADDR field */ 2030aeed3e9SJustin Hibbits #define DPAA_SGTE_SET_EXTENSION(sgte,val) (((t_DpaaSGTE *)sgte)->length = ((((t_DpaaSGTE *)sgte)->length & ~DPAA_SGTE_E_MASK) | (((val) << (31-0))& DPAA_SGTE_E_MASK))) /**< Macro to set SGTE EXTENSION field */ 2040aeed3e9SJustin Hibbits #define DPAA_SGTE_SET_FINAL(sgte,val) (((t_DpaaSGTE *)sgte)->length = ((((t_DpaaSGTE *)sgte)->length & ~DPAA_SGTE_F_MASK) | (((val) << (31-1))& DPAA_SGTE_F_MASK))) /**< Macro to set SGTE FINAL field */ 2050aeed3e9SJustin Hibbits #define DPAA_SGTE_SET_LENGTH(sgte,val) (((t_DpaaSGTE *)sgte)->length = (((t_DpaaSGTE *)sgte)->length & ~DPAA_SGTE_LENGTH_MASK) | ((val) & DPAA_SGTE_LENGTH_MASK)) /**< Macro to set SGTE LENGTH field */ 2060aeed3e9SJustin Hibbits #define DPAA_SGTE_SET_BPID(sgte,val) (((t_DpaaSGTE *)sgte)->offset = ((((t_DpaaSGTE *)sgte)->offset & ~DPAA_SGTE_BPID_MASK) | (((val) << (31-15))& DPAA_SGTE_BPID_MASK))) /**< Macro to set SGTE BPID field */ 2070aeed3e9SJustin Hibbits #define DPAA_SGTE_SET_OFFSET(sgte,val) (((t_DpaaSGTE *)sgte)->offset = ((((t_DpaaSGTE *)sgte)->offset & ~DPAA_SGTE_OFFSET_MASK) | (((val) << (31-31))& DPAA_SGTE_OFFSET_MASK) )) /**< Macro to set SGTE OFFSET field */ 2080aeed3e9SJustin Hibbits /* @} */ 2090aeed3e9SJustin Hibbits 2100aeed3e9SJustin Hibbits #if defined(__MWERKS__) && !defined(__GNUC__) 2110aeed3e9SJustin Hibbits #pragma pack(pop) 2120aeed3e9SJustin Hibbits #endif /* defined(__MWERKS__) && ... */ 2130aeed3e9SJustin Hibbits 214852ba100SJustin Hibbits #define DPAA_LIODN_DONT_OVERRIDE (-1) 215852ba100SJustin Hibbits 2160aeed3e9SJustin Hibbits /** @} */ /* end of DPAA_grp group */ 2170aeed3e9SJustin Hibbits 2180aeed3e9SJustin Hibbits 2190aeed3e9SJustin Hibbits #endif /* __DPAA_EXT_H */ 220