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