1*852ba100SJustin Hibbits /* 2*852ba100SJustin Hibbits * Copyright 2008-2013 Freescale Semiconductor Inc. 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 330aeed3e9SJustin Hibbits /****************************************************************************** 340aeed3e9SJustin Hibbits @File dtsec.h 350aeed3e9SJustin Hibbits 360aeed3e9SJustin Hibbits @Description FM dTSEC ... 370aeed3e9SJustin Hibbits *//***************************************************************************/ 380aeed3e9SJustin Hibbits #ifndef __DTSEC_H 390aeed3e9SJustin Hibbits #define __DTSEC_H 400aeed3e9SJustin Hibbits 410aeed3e9SJustin Hibbits #include "std_ext.h" 420aeed3e9SJustin Hibbits #include "error_ext.h" 430aeed3e9SJustin Hibbits #include "list_ext.h" 44*852ba100SJustin Hibbits #include "enet_ext.h" 45*852ba100SJustin Hibbits 460aeed3e9SJustin Hibbits #include "dtsec_mii_acc.h" 470aeed3e9SJustin Hibbits #include "fm_mac.h" 480aeed3e9SJustin Hibbits 490aeed3e9SJustin Hibbits 50*852ba100SJustin Hibbits #define DEFAULT_exceptions \ 51*852ba100SJustin Hibbits ((uint32_t)(DTSEC_IMASK_BREN | \ 52*852ba100SJustin Hibbits DTSEC_IMASK_RXCEN | \ 53*852ba100SJustin Hibbits DTSEC_IMASK_BTEN | \ 54*852ba100SJustin Hibbits DTSEC_IMASK_TXCEN | \ 55*852ba100SJustin Hibbits DTSEC_IMASK_TXEEN | \ 56*852ba100SJustin Hibbits DTSEC_IMASK_ABRTEN | \ 57*852ba100SJustin Hibbits DTSEC_IMASK_LCEN | \ 58*852ba100SJustin Hibbits DTSEC_IMASK_CRLEN | \ 59*852ba100SJustin Hibbits DTSEC_IMASK_XFUNEN | \ 60*852ba100SJustin Hibbits DTSEC_IMASK_IFERREN | \ 61*852ba100SJustin Hibbits DTSEC_IMASK_MAGEN | \ 62*852ba100SJustin Hibbits DTSEC_IMASK_TDPEEN | \ 63*852ba100SJustin Hibbits DTSEC_IMASK_RDPEEN)) 640aeed3e9SJustin Hibbits 650aeed3e9SJustin Hibbits #define GET_EXCEPTION_FLAG(bitMask, exception) switch (exception){ \ 660aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_BAB_RX: \ 67*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_BREN; break; \ 680aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_RX_CTL: \ 69*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_RXCEN; break; \ 700aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_GRATEFUL_TX_STP_COMPLET: \ 71*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_GTSCEN ; break; \ 720aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_BAB_TX: \ 73*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_BTEN ; break; \ 740aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_TX_CTL: \ 75*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_TXCEN ; break; \ 760aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_TX_ERR: \ 77*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_TXEEN ; break; \ 780aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_LATE_COL: \ 79*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_LCEN ; break; \ 800aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_COL_RET_LMT: \ 81*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_CRLEN ; break; \ 820aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_TX_FIFO_UNDRN: \ 83*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_XFUNEN ; break; \ 840aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_MAG_PCKT: \ 85*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_MAGEN ; break; \ 860aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_MII_MNG_RD_COMPLET: \ 87*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_MMRDEN; break; \ 880aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_MII_MNG_WR_COMPLET: \ 89*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_MMWREN ; break; \ 900aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_GRATEFUL_RX_STP_COMPLET: \ 91*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_GRSCEN; break; \ 920aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_TX_DATA_ERR: \ 93*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_TDPEEN; break; \ 940aeed3e9SJustin Hibbits case e_FM_MAC_EX_1G_RX_MIB_CNT_OVFL: \ 95*852ba100SJustin Hibbits bitMask = DTSEC_IMASK_MSROEN ; break; \ 960aeed3e9SJustin Hibbits default: bitMask = 0;break;} 970aeed3e9SJustin Hibbits 980aeed3e9SJustin Hibbits 990aeed3e9SJustin Hibbits #define MAX_PACKET_ALIGNMENT 31 1000aeed3e9SJustin Hibbits #define MAX_INTER_PACKET_GAP 0x7f 1010aeed3e9SJustin Hibbits #define MAX_INTER_PALTERNATE_BEB 0x0f 1020aeed3e9SJustin Hibbits #define MAX_RETRANSMISSION 0x0f 1030aeed3e9SJustin Hibbits #define MAX_COLLISION_WINDOW 0x03ff 1040aeed3e9SJustin Hibbits 1050aeed3e9SJustin Hibbits 1060aeed3e9SJustin Hibbits /********************* From mac ext ******************************************/ 1070aeed3e9SJustin Hibbits typedef uint32_t t_ErrorDisable; 1080aeed3e9SJustin Hibbits 1090aeed3e9SJustin Hibbits #define ERROR_DISABLE_TRANSMIT 0x00400000 1100aeed3e9SJustin Hibbits #define ERROR_DISABLE_LATE_COLLISION 0x00040000 1110aeed3e9SJustin Hibbits #define ERROR_DISABLE_COLLISION_RETRY_LIMIT 0x00020000 1120aeed3e9SJustin Hibbits #define ERROR_DISABLE_TxFIFO_UNDERRUN 0x00010000 1130aeed3e9SJustin Hibbits #define ERROR_DISABLE_TxABORT 0x00008000 1140aeed3e9SJustin Hibbits #define ERROR_DISABLE_INTERFACE 0x00004000 1150aeed3e9SJustin Hibbits #define ERROR_DISABLE_TxDATA_PARITY 0x00000002 1160aeed3e9SJustin Hibbits #define ERROR_DISABLE_RxDATA_PARITY 0x00000001 1170aeed3e9SJustin Hibbits 1180aeed3e9SJustin Hibbits /*****************************************************************************/ 1190aeed3e9SJustin Hibbits #define DTSEC_NUM_OF_PADDRS 15 /* number of pattern match registers (entries) */ 1200aeed3e9SJustin Hibbits 1210aeed3e9SJustin Hibbits #define GROUP_ADDRESS 0x0000010000000000LL /* Group address bit indication */ 1220aeed3e9SJustin Hibbits 1230aeed3e9SJustin Hibbits #define HASH_TABLE_SIZE 256 /* Hash table size (= 32 bits * 8 regs) */ 1240aeed3e9SJustin Hibbits 125*852ba100SJustin Hibbits #define HASH_TABLE_SIZE 256 /* Hash table size (32 bits * 8 regs) */ 126*852ba100SJustin Hibbits #define EXTENDED_HASH_TABLE_SIZE 512 /* Extended Hash table size (32 bits * 16 regs) */ 1270aeed3e9SJustin Hibbits 128*852ba100SJustin Hibbits #define DTSEC_TO_MII_OFFSET 0x1000 /* number of pattern match registers (entries) */ 1290aeed3e9SJustin Hibbits 1300aeed3e9SJustin Hibbits #define MAX_PHYS 32 /* maximum number of phys */ 1310aeed3e9SJustin Hibbits 1320aeed3e9SJustin Hibbits #define VAL32BIT 0x100000000LL 1330aeed3e9SJustin Hibbits #define VAL22BIT 0x00400000 1340aeed3e9SJustin Hibbits #define VAL16BIT 0x00010000 1350aeed3e9SJustin Hibbits #define VAL12BIT 0x00001000 1360aeed3e9SJustin Hibbits 1370aeed3e9SJustin Hibbits /* CAR1/2 bits */ 1380aeed3e9SJustin Hibbits #define CAR1_TR64 0x80000000 1390aeed3e9SJustin Hibbits #define CAR1_TR127 0x40000000 1400aeed3e9SJustin Hibbits #define CAR1_TR255 0x20000000 1410aeed3e9SJustin Hibbits #define CAR1_TR511 0x10000000 1420aeed3e9SJustin Hibbits #define CAR1_TRK1 0x08000000 1430aeed3e9SJustin Hibbits #define CAR1_TRMAX 0x04000000 1440aeed3e9SJustin Hibbits #define CAR1_TRMGV 0x02000000 1450aeed3e9SJustin Hibbits 1460aeed3e9SJustin Hibbits #define CAR1_RBYT 0x00010000 1470aeed3e9SJustin Hibbits #define CAR1_RPKT 0x00008000 1480aeed3e9SJustin Hibbits #define CAR1_RMCA 0x00002000 1490aeed3e9SJustin Hibbits #define CAR1_RBCA 0x00001000 1500aeed3e9SJustin Hibbits #define CAR1_RXPF 0x00000400 1510aeed3e9SJustin Hibbits #define CAR1_RALN 0x00000100 1520aeed3e9SJustin Hibbits #define CAR1_RFLR 0x00000080 1530aeed3e9SJustin Hibbits #define CAR1_RCDE 0x00000040 1540aeed3e9SJustin Hibbits #define CAR1_RCSE 0x00000020 1550aeed3e9SJustin Hibbits #define CAR1_RUND 0x00000010 1560aeed3e9SJustin Hibbits #define CAR1_ROVR 0x00000008 1570aeed3e9SJustin Hibbits #define CAR1_RFRG 0x00000004 1580aeed3e9SJustin Hibbits #define CAR1_RJBR 0x00000002 1590aeed3e9SJustin Hibbits #define CAR1_RDRP 0x00000001 1600aeed3e9SJustin Hibbits 1610aeed3e9SJustin Hibbits #define CAR2_TFCS 0x00040000 1620aeed3e9SJustin Hibbits #define CAR2_TBYT 0x00002000 1630aeed3e9SJustin Hibbits #define CAR2_TPKT 0x00001000 1640aeed3e9SJustin Hibbits #define CAR2_TMCA 0x00000800 1650aeed3e9SJustin Hibbits #define CAR2_TBCA 0x00000400 1660aeed3e9SJustin Hibbits #define CAR2_TXPF 0x00000200 1670aeed3e9SJustin Hibbits #define CAR2_TDRP 0x00000001 1680aeed3e9SJustin Hibbits 1690aeed3e9SJustin Hibbits typedef struct t_InternalStatistics 1700aeed3e9SJustin Hibbits { 1710aeed3e9SJustin Hibbits uint64_t tr64; 1720aeed3e9SJustin Hibbits uint64_t tr127; 1730aeed3e9SJustin Hibbits uint64_t tr255; 1740aeed3e9SJustin Hibbits uint64_t tr511; 1750aeed3e9SJustin Hibbits uint64_t tr1k; 1760aeed3e9SJustin Hibbits uint64_t trmax; 1770aeed3e9SJustin Hibbits uint64_t trmgv; 1780aeed3e9SJustin Hibbits uint64_t rfrg; 1790aeed3e9SJustin Hibbits uint64_t rjbr; 1800aeed3e9SJustin Hibbits uint64_t rdrp; 1810aeed3e9SJustin Hibbits uint64_t raln; 1820aeed3e9SJustin Hibbits uint64_t rund; 1830aeed3e9SJustin Hibbits uint64_t rovr; 1840aeed3e9SJustin Hibbits uint64_t rxpf; 1850aeed3e9SJustin Hibbits uint64_t txpf; 1860aeed3e9SJustin Hibbits uint64_t rbyt; 1870aeed3e9SJustin Hibbits uint64_t rpkt; 1880aeed3e9SJustin Hibbits uint64_t rmca; 1890aeed3e9SJustin Hibbits uint64_t rbca; 1900aeed3e9SJustin Hibbits uint64_t rflr; 1910aeed3e9SJustin Hibbits uint64_t rcde; 1920aeed3e9SJustin Hibbits uint64_t rcse; 1930aeed3e9SJustin Hibbits uint64_t tbyt; 1940aeed3e9SJustin Hibbits uint64_t tpkt; 1950aeed3e9SJustin Hibbits uint64_t tmca; 1960aeed3e9SJustin Hibbits uint64_t tbca; 1970aeed3e9SJustin Hibbits uint64_t tdrp; 1980aeed3e9SJustin Hibbits uint64_t tfcs; 1990aeed3e9SJustin Hibbits } t_InternalStatistics; 2000aeed3e9SJustin Hibbits 2010aeed3e9SJustin Hibbits typedef struct { 2020aeed3e9SJustin Hibbits t_FmMacControllerDriver fmMacControllerDriver; 2030aeed3e9SJustin Hibbits t_Handle h_App; /**< Handle to the upper layer application */ 204*852ba100SJustin Hibbits struct dtsec_regs *p_MemMap; /**< pointer to dTSEC memory mapped registers. */ 205*852ba100SJustin Hibbits struct dtsec_mii_reg *p_MiiMemMap; /**< pointer to dTSEC MII memory mapped registers. */ 2060aeed3e9SJustin Hibbits uint64_t addr; /**< MAC address of device; */ 2070aeed3e9SJustin Hibbits e_EnetMode enetMode; /**< Ethernet physical interface */ 2080aeed3e9SJustin Hibbits t_FmMacExceptionCallback *f_Exception; 2090aeed3e9SJustin Hibbits int mdioIrq; 2100aeed3e9SJustin Hibbits t_FmMacExceptionCallback *f_Event; 2110aeed3e9SJustin Hibbits bool indAddrRegUsed[DTSEC_NUM_OF_PADDRS]; /**< Whether a particular individual address recognition register is being used */ 2120aeed3e9SJustin Hibbits uint64_t paddr[DTSEC_NUM_OF_PADDRS]; /**< MAC address for particular individual address recognition register */ 2130aeed3e9SJustin Hibbits uint8_t numOfIndAddrInRegs; /**< Number of individual addresses in registers for this station. */ 2140aeed3e9SJustin Hibbits bool halfDuplex; 2150aeed3e9SJustin Hibbits t_InternalStatistics internalStatistics; 2160aeed3e9SJustin Hibbits t_EthHash *p_MulticastAddrHash; /* pointer to driver's global address hash table */ 2170aeed3e9SJustin Hibbits t_EthHash *p_UnicastAddrHash; /* pointer to driver's individual address hash table */ 2180aeed3e9SJustin Hibbits uint8_t macId; 219*852ba100SJustin Hibbits uint8_t tbi_phy_addr; 2200aeed3e9SJustin Hibbits uint32_t exceptions; 2210aeed3e9SJustin Hibbits bool ptpTsuEnabled; 2220aeed3e9SJustin Hibbits bool enTsuErrExeption; 2230aeed3e9SJustin Hibbits e_FmMacStatisticsLevel statisticsLevel; 224*852ba100SJustin Hibbits struct dtsec_cfg *p_DtsecDriverParam; 2250aeed3e9SJustin Hibbits } t_Dtsec; 2260aeed3e9SJustin Hibbits 2270aeed3e9SJustin Hibbits 2280aeed3e9SJustin Hibbits #endif /* __DTSEC_H */ 229