xref: /freebsd/sys/contrib/ncsw/Peripherals/FM/MAC/tgec.h (revision c2c014f24c10f90d85126ac5fbd4d8524de32b1c)
1*852ba100SJustin Hibbits /*
2*852ba100SJustin Hibbits  * Copyright 2008-2012 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 
33*852ba100SJustin Hibbits 
340aeed3e9SJustin Hibbits /******************************************************************************
350aeed3e9SJustin Hibbits  @File          tgec.h
360aeed3e9SJustin Hibbits 
370aeed3e9SJustin Hibbits  @Description   FM 10G MAC ...
380aeed3e9SJustin Hibbits *//***************************************************************************/
390aeed3e9SJustin Hibbits #ifndef __TGEC_H
400aeed3e9SJustin Hibbits #define __TGEC_H
410aeed3e9SJustin Hibbits 
420aeed3e9SJustin Hibbits #include "std_ext.h"
430aeed3e9SJustin Hibbits #include "error_ext.h"
440aeed3e9SJustin Hibbits #include "list_ext.h"
45*852ba100SJustin Hibbits #include "enet_ext.h"
46*852ba100SJustin Hibbits 
470aeed3e9SJustin Hibbits #include "tgec_mii_acc.h"
480aeed3e9SJustin Hibbits #include "fm_mac.h"
490aeed3e9SJustin Hibbits 
500aeed3e9SJustin Hibbits 
51*852ba100SJustin Hibbits #define DEFAULT_exceptions                        \
52*852ba100SJustin Hibbits     ((uint32_t)(TGEC_IMASK_MDIO_SCAN_EVENT     |  \
53*852ba100SJustin Hibbits                 TGEC_IMASK_REM_FAULT           |  \
54*852ba100SJustin Hibbits                 TGEC_IMASK_LOC_FAULT           |  \
55*852ba100SJustin Hibbits                 TGEC_IMASK_TX_ECC_ER           |  \
56*852ba100SJustin Hibbits                 TGEC_IMASK_TX_FIFO_UNFL        |  \
57*852ba100SJustin Hibbits                 TGEC_IMASK_TX_FIFO_OVFL        |  \
58*852ba100SJustin Hibbits                 TGEC_IMASK_TX_ER               |  \
59*852ba100SJustin Hibbits                 TGEC_IMASK_RX_FIFO_OVFL        |  \
60*852ba100SJustin Hibbits                 TGEC_IMASK_RX_ECC_ER           |  \
61*852ba100SJustin Hibbits                 TGEC_IMASK_RX_JAB_FRM          |  \
62*852ba100SJustin Hibbits                 TGEC_IMASK_RX_OVRSZ_FRM        |  \
63*852ba100SJustin Hibbits                 TGEC_IMASK_RX_RUNT_FRM         |  \
64*852ba100SJustin Hibbits                 TGEC_IMASK_RX_FRAG_FRM         |  \
65*852ba100SJustin Hibbits                 TGEC_IMASK_RX_CRC_ER           |  \
66*852ba100SJustin Hibbits                 TGEC_IMASK_RX_ALIGN_ER))
670aeed3e9SJustin Hibbits 
680aeed3e9SJustin Hibbits #define GET_EXCEPTION_FLAG(bitMask, exception)      switch (exception){ \
690aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_MDIO_SCAN_EVENTMDIO:                           \
70*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_MDIO_SCAN_EVENT    ; break;                \
710aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_MDIO_CMD_CMPL:                                 \
72*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_MDIO_CMD_CMPL      ; break;                \
730aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_REM_FAULT:                                     \
74*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_REM_FAULT          ; break;                \
750aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_LOC_FAULT:                                     \
76*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_LOC_FAULT          ; break;                \
770aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_1TX_ECC_ER:                                    \
78*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_TX_ECC_ER         ; break;                 \
790aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_TX_FIFO_UNFL:                                  \
80*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_TX_FIFO_UNFL       ; break;                \
810aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_TX_FIFO_OVFL:                                  \
82*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_TX_FIFO_OVFL       ; break;                \
830aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_TX_ER:                                         \
84*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_TX_ER              ; break;                \
850aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_RX_FIFO_OVFL:                                  \
86*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_RX_FIFO_OVFL       ; break;                \
870aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_RX_ECC_ER:                                     \
88*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_RX_ECC_ER          ; break;                \
890aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_RX_JAB_FRM:                                    \
90*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_RX_JAB_FRM         ; break;                \
910aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_RX_OVRSZ_FRM:                                  \
92*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_RX_OVRSZ_FRM       ; break;                \
930aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_RX_RUNT_FRM:                                   \
94*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_RX_RUNT_FRM        ; break;                \
950aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_RX_FRAG_FRM:                                   \
96*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_RX_FRAG_FRM        ; break;                \
970aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_RX_LEN_ER:                                     \
98*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_RX_LEN_ER          ; break;                \
990aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_RX_CRC_ER:                                     \
100*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_RX_CRC_ER          ; break;                \
1010aeed3e9SJustin Hibbits     case e_FM_MAC_EX_10G_RX_ALIGN_ER:                                   \
102*852ba100SJustin Hibbits         bitMask = TGEC_IMASK_RX_ALIGN_ER        ; break;                \
1030aeed3e9SJustin Hibbits     default: bitMask = 0;break;}
1040aeed3e9SJustin Hibbits 
1050aeed3e9SJustin Hibbits #define MAX_PACKET_ALIGNMENT        31
1060aeed3e9SJustin Hibbits #define MAX_INTER_PACKET_GAP        0x7f
1070aeed3e9SJustin Hibbits #define MAX_INTER_PALTERNATE_BEB    0x0f
1080aeed3e9SJustin Hibbits #define MAX_RETRANSMISSION          0x0f
1090aeed3e9SJustin Hibbits #define MAX_COLLISION_WINDOW        0x03ff
1100aeed3e9SJustin Hibbits 
1110aeed3e9SJustin Hibbits #define TGEC_NUM_OF_PADDRS          1                   /* number of pattern match registers (entries) */
1120aeed3e9SJustin Hibbits 
1130aeed3e9SJustin Hibbits #define GROUP_ADDRESS               0x0000010000000000LL /* Group address bit indication */
1140aeed3e9SJustin Hibbits 
1150aeed3e9SJustin Hibbits #define HASH_TABLE_SIZE             512                 /* Hash table size (= 32 bits * 8 regs) */
1160aeed3e9SJustin Hibbits 
1170aeed3e9SJustin Hibbits #define TGEC_TO_MII_OFFSET          0x1030              /* Offset from the MEM map to the MDIO mem map */
1180aeed3e9SJustin Hibbits 
1190aeed3e9SJustin Hibbits /* 10-gigabit Ethernet MAC Controller ID (10GEC_ID) */
1200aeed3e9SJustin Hibbits #define TGEC_ID_ID                  0xffff0000
1210aeed3e9SJustin Hibbits #define TGEC_ID_MAC_VERSION         0x0000FF00
1220aeed3e9SJustin Hibbits #define TGEC_ID_MAC_REV             0x000000ff
1230aeed3e9SJustin Hibbits 
1240aeed3e9SJustin Hibbits 
1250aeed3e9SJustin Hibbits typedef struct {
1260aeed3e9SJustin Hibbits     t_FmMacControllerDriver     fmMacControllerDriver;              /**< Upper Mac control block */
1270aeed3e9SJustin Hibbits     t_Handle                    h_App;                              /**< Handle to the upper layer application  */
128*852ba100SJustin Hibbits     struct tgec_regs            *p_MemMap;                          /**< pointer to 10G memory mapped registers. */
1290aeed3e9SJustin Hibbits     t_TgecMiiAccessMemMap       *p_MiiMemMap;                       /**< pointer to MII memory mapped registers.          */
1300aeed3e9SJustin Hibbits     uint64_t                    addr;                               /**< MAC address of device; */
1310aeed3e9SJustin Hibbits     e_EnetMode                  enetMode;                           /**< Ethernet physical interface  */
1320aeed3e9SJustin Hibbits     t_FmMacExceptionCallback    *f_Exception;
1330aeed3e9SJustin Hibbits     int                         mdioIrq;
1340aeed3e9SJustin Hibbits     t_FmMacExceptionCallback    *f_Event;
1350aeed3e9SJustin Hibbits     bool                        indAddrRegUsed[TGEC_NUM_OF_PADDRS]; /**< Whether a particular individual address recognition register is being used */
1360aeed3e9SJustin Hibbits     uint64_t                    paddr[TGEC_NUM_OF_PADDRS];          /**< MAC address for particular individual address recognition register */
1370aeed3e9SJustin Hibbits     uint8_t                     numOfIndAddrInRegs;                 /**< Number of individual addresses in registers for this station. */
1380aeed3e9SJustin Hibbits     t_EthHash                   *p_MulticastAddrHash;               /**< pointer to driver's global address hash table  */
1390aeed3e9SJustin Hibbits     t_EthHash                   *p_UnicastAddrHash;                 /**< pointer to driver's individual address hash table  */
1400aeed3e9SJustin Hibbits     bool                        debugMode;
1410aeed3e9SJustin Hibbits     uint8_t                     macId;
1420aeed3e9SJustin Hibbits     uint32_t                    exceptions;
143*852ba100SJustin Hibbits     struct tgec_cfg             *p_TgecDriverParam;
1440aeed3e9SJustin Hibbits } t_Tgec;
1450aeed3e9SJustin Hibbits 
1460aeed3e9SJustin Hibbits 
1470aeed3e9SJustin Hibbits t_Error TGEC_MII_WritePhyReg(t_Handle h_Tgec, uint8_t phyAddr, uint8_t reg, uint16_t data);
1480aeed3e9SJustin Hibbits t_Error TGEC_MII_ReadPhyReg(t_Handle h_Tgec,  uint8_t phyAddr, uint8_t reg, uint16_t *p_Data);
1490aeed3e9SJustin Hibbits 
1500aeed3e9SJustin Hibbits 
1510aeed3e9SJustin Hibbits #endif /* __TGEC_H */
152