mirror of https://github.com/F-Stack/f-stack.git
229 lines
9.7 KiB
C
229 lines
9.7 KiB
C
/*
|
|
* Copyright 2008-2013 Freescale Semiconductor Inc.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of Freescale Semiconductor nor the
|
|
* names of its contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
*
|
|
* ALTERNATIVELY, this software may be distributed under the terms of the
|
|
* GNU General Public License ("GPL") as published by the Free Software
|
|
* Foundation, either version 2 of that License or (at your option) any
|
|
* later version.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/******************************************************************************
|
|
@File dtsec.h
|
|
|
|
@Description FM dTSEC ...
|
|
*//***************************************************************************/
|
|
#ifndef __DTSEC_H
|
|
#define __DTSEC_H
|
|
|
|
#include "std_ext.h"
|
|
#include "error_ext.h"
|
|
#include "list_ext.h"
|
|
#include "enet_ext.h"
|
|
|
|
#include "dtsec_mii_acc.h"
|
|
#include "fm_mac.h"
|
|
|
|
|
|
#define DEFAULT_exceptions \
|
|
((uint32_t)(DTSEC_IMASK_BREN | \
|
|
DTSEC_IMASK_RXCEN | \
|
|
DTSEC_IMASK_BTEN | \
|
|
DTSEC_IMASK_TXCEN | \
|
|
DTSEC_IMASK_TXEEN | \
|
|
DTSEC_IMASK_ABRTEN | \
|
|
DTSEC_IMASK_LCEN | \
|
|
DTSEC_IMASK_CRLEN | \
|
|
DTSEC_IMASK_XFUNEN | \
|
|
DTSEC_IMASK_IFERREN | \
|
|
DTSEC_IMASK_MAGEN | \
|
|
DTSEC_IMASK_TDPEEN | \
|
|
DTSEC_IMASK_RDPEEN))
|
|
|
|
#define GET_EXCEPTION_FLAG(bitMask, exception) switch (exception){ \
|
|
case e_FM_MAC_EX_1G_BAB_RX: \
|
|
bitMask = DTSEC_IMASK_BREN; break; \
|
|
case e_FM_MAC_EX_1G_RX_CTL: \
|
|
bitMask = DTSEC_IMASK_RXCEN; break; \
|
|
case e_FM_MAC_EX_1G_GRATEFUL_TX_STP_COMPLET: \
|
|
bitMask = DTSEC_IMASK_GTSCEN ; break; \
|
|
case e_FM_MAC_EX_1G_BAB_TX: \
|
|
bitMask = DTSEC_IMASK_BTEN ; break; \
|
|
case e_FM_MAC_EX_1G_TX_CTL: \
|
|
bitMask = DTSEC_IMASK_TXCEN ; break; \
|
|
case e_FM_MAC_EX_1G_TX_ERR: \
|
|
bitMask = DTSEC_IMASK_TXEEN ; break; \
|
|
case e_FM_MAC_EX_1G_LATE_COL: \
|
|
bitMask = DTSEC_IMASK_LCEN ; break; \
|
|
case e_FM_MAC_EX_1G_COL_RET_LMT: \
|
|
bitMask = DTSEC_IMASK_CRLEN ; break; \
|
|
case e_FM_MAC_EX_1G_TX_FIFO_UNDRN: \
|
|
bitMask = DTSEC_IMASK_XFUNEN ; break; \
|
|
case e_FM_MAC_EX_1G_MAG_PCKT: \
|
|
bitMask = DTSEC_IMASK_MAGEN ; break; \
|
|
case e_FM_MAC_EX_1G_MII_MNG_RD_COMPLET: \
|
|
bitMask = DTSEC_IMASK_MMRDEN; break; \
|
|
case e_FM_MAC_EX_1G_MII_MNG_WR_COMPLET: \
|
|
bitMask = DTSEC_IMASK_MMWREN ; break; \
|
|
case e_FM_MAC_EX_1G_GRATEFUL_RX_STP_COMPLET: \
|
|
bitMask = DTSEC_IMASK_GRSCEN; break; \
|
|
case e_FM_MAC_EX_1G_TX_DATA_ERR: \
|
|
bitMask = DTSEC_IMASK_TDPEEN; break; \
|
|
case e_FM_MAC_EX_1G_RX_MIB_CNT_OVFL: \
|
|
bitMask = DTSEC_IMASK_MSROEN ; break; \
|
|
default: bitMask = 0;break;}
|
|
|
|
|
|
#define MAX_PACKET_ALIGNMENT 31
|
|
#define MAX_INTER_PACKET_GAP 0x7f
|
|
#define MAX_INTER_PALTERNATE_BEB 0x0f
|
|
#define MAX_RETRANSMISSION 0x0f
|
|
#define MAX_COLLISION_WINDOW 0x03ff
|
|
|
|
|
|
/********************* From mac ext ******************************************/
|
|
typedef uint32_t t_ErrorDisable;
|
|
|
|
#define ERROR_DISABLE_TRANSMIT 0x00400000
|
|
#define ERROR_DISABLE_LATE_COLLISION 0x00040000
|
|
#define ERROR_DISABLE_COLLISION_RETRY_LIMIT 0x00020000
|
|
#define ERROR_DISABLE_TxFIFO_UNDERRUN 0x00010000
|
|
#define ERROR_DISABLE_TxABORT 0x00008000
|
|
#define ERROR_DISABLE_INTERFACE 0x00004000
|
|
#define ERROR_DISABLE_TxDATA_PARITY 0x00000002
|
|
#define ERROR_DISABLE_RxDATA_PARITY 0x00000001
|
|
|
|
/*****************************************************************************/
|
|
#define DTSEC_NUM_OF_PADDRS 15 /* number of pattern match registers (entries) */
|
|
|
|
#define GROUP_ADDRESS 0x0000010000000000LL /* Group address bit indication */
|
|
|
|
#define HASH_TABLE_SIZE 256 /* Hash table size (= 32 bits * 8 regs) */
|
|
|
|
#define HASH_TABLE_SIZE 256 /* Hash table size (32 bits * 8 regs) */
|
|
#define EXTENDED_HASH_TABLE_SIZE 512 /* Extended Hash table size (32 bits * 16 regs) */
|
|
|
|
#define DTSEC_TO_MII_OFFSET 0x1000 /* number of pattern match registers (entries) */
|
|
|
|
#define MAX_PHYS 32 /* maximum number of phys */
|
|
|
|
#define VAL32BIT 0x100000000LL
|
|
#define VAL22BIT 0x00400000
|
|
#define VAL16BIT 0x00010000
|
|
#define VAL12BIT 0x00001000
|
|
|
|
/* CAR1/2 bits */
|
|
#define CAR1_TR64 0x80000000
|
|
#define CAR1_TR127 0x40000000
|
|
#define CAR1_TR255 0x20000000
|
|
#define CAR1_TR511 0x10000000
|
|
#define CAR1_TRK1 0x08000000
|
|
#define CAR1_TRMAX 0x04000000
|
|
#define CAR1_TRMGV 0x02000000
|
|
|
|
#define CAR1_RBYT 0x00010000
|
|
#define CAR1_RPKT 0x00008000
|
|
#define CAR1_RMCA 0x00002000
|
|
#define CAR1_RBCA 0x00001000
|
|
#define CAR1_RXPF 0x00000400
|
|
#define CAR1_RALN 0x00000100
|
|
#define CAR1_RFLR 0x00000080
|
|
#define CAR1_RCDE 0x00000040
|
|
#define CAR1_RCSE 0x00000020
|
|
#define CAR1_RUND 0x00000010
|
|
#define CAR1_ROVR 0x00000008
|
|
#define CAR1_RFRG 0x00000004
|
|
#define CAR1_RJBR 0x00000002
|
|
#define CAR1_RDRP 0x00000001
|
|
|
|
#define CAR2_TFCS 0x00040000
|
|
#define CAR2_TBYT 0x00002000
|
|
#define CAR2_TPKT 0x00001000
|
|
#define CAR2_TMCA 0x00000800
|
|
#define CAR2_TBCA 0x00000400
|
|
#define CAR2_TXPF 0x00000200
|
|
#define CAR2_TDRP 0x00000001
|
|
|
|
typedef struct t_InternalStatistics
|
|
{
|
|
uint64_t tr64;
|
|
uint64_t tr127;
|
|
uint64_t tr255;
|
|
uint64_t tr511;
|
|
uint64_t tr1k;
|
|
uint64_t trmax;
|
|
uint64_t trmgv;
|
|
uint64_t rfrg;
|
|
uint64_t rjbr;
|
|
uint64_t rdrp;
|
|
uint64_t raln;
|
|
uint64_t rund;
|
|
uint64_t rovr;
|
|
uint64_t rxpf;
|
|
uint64_t txpf;
|
|
uint64_t rbyt;
|
|
uint64_t rpkt;
|
|
uint64_t rmca;
|
|
uint64_t rbca;
|
|
uint64_t rflr;
|
|
uint64_t rcde;
|
|
uint64_t rcse;
|
|
uint64_t tbyt;
|
|
uint64_t tpkt;
|
|
uint64_t tmca;
|
|
uint64_t tbca;
|
|
uint64_t tdrp;
|
|
uint64_t tfcs;
|
|
} t_InternalStatistics;
|
|
|
|
typedef struct {
|
|
t_FmMacControllerDriver fmMacControllerDriver;
|
|
t_Handle h_App; /**< Handle to the upper layer application */
|
|
struct dtsec_regs *p_MemMap; /**< pointer to dTSEC memory mapped registers. */
|
|
struct dtsec_mii_reg *p_MiiMemMap; /**< pointer to dTSEC MII memory mapped registers. */
|
|
uint64_t addr; /**< MAC address of device; */
|
|
e_EnetMode enetMode; /**< Ethernet physical interface */
|
|
t_FmMacExceptionCallback *f_Exception;
|
|
int mdioIrq;
|
|
t_FmMacExceptionCallback *f_Event;
|
|
bool indAddrRegUsed[DTSEC_NUM_OF_PADDRS]; /**< Whether a particular individual address recognition register is being used */
|
|
uint64_t paddr[DTSEC_NUM_OF_PADDRS]; /**< MAC address for particular individual address recognition register */
|
|
uint8_t numOfIndAddrInRegs; /**< Number of individual addresses in registers for this station. */
|
|
bool halfDuplex;
|
|
t_InternalStatistics internalStatistics;
|
|
t_EthHash *p_MulticastAddrHash; /* pointer to driver's global address hash table */
|
|
t_EthHash *p_UnicastAddrHash; /* pointer to driver's individual address hash table */
|
|
uint8_t macId;
|
|
uint8_t tbi_phy_addr;
|
|
uint32_t exceptions;
|
|
bool ptpTsuEnabled;
|
|
bool enTsuErrExeption;
|
|
e_FmMacStatisticsLevel statisticsLevel;
|
|
struct dtsec_cfg *p_DtsecDriverParam;
|
|
} t_Dtsec;
|
|
|
|
|
|
#endif /* __DTSEC_H */
|