xref: /freebsd/sys/contrib/ncsw/Peripherals/FM/MAC/dtsec.h (revision c2c014f24c10f90d85126ac5fbd4d8524de32b1c)
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