71 #define VALID_CONFIG_FLAGS (EMAC_CONFIG_USE_MACADDR1 | \
72 EMAC_CONFIG_SA_INSERT | \
73 EMAC_CONFIG_SA_REPLACE | \
74 EMAC_CONFIG_2K_PACKETS | \
75 EMAC_CONFIG_STRIP_CRC | \
76 EMAC_CONFIG_JABBER_DISABLE | \
77 EMAC_CONFIG_JUMBO_ENABLE | \
78 EMAC_CONFIG_IF_GAP_MASK | \
79 EMAC_CONFIG_CS_DISABLE | \
80 EMAC_CONFIG_100MBPS | \
81 EMAC_CONFIG_RX_OWN_DISABLE | \
82 EMAC_CONFIG_LOOPBACK | \
83 EMAC_CONFIG_FULL_DUPLEX | \
84 EMAC_CONFIG_CHECKSUM_OFFLOAD | \
85 EMAC_CONFIG_RETRY_DISABLE | \
86 EMAC_CONFIG_AUTO_CRC_STRIPPING | \
87 EMAC_CONFIG_BO_MASK | \
88 EMAC_CONFIG_DEFERRAL_CHK_ENABLE | \
89 EMAC_CONFIG_PREAMBLE_MASK)
96 #define VALID_FRMFILTER_FLAGS (EMAC_FRMFILTER_RX_ALL | \
97 EMAC_FRMFILTER_VLAN | \
98 EMAC_FRMFILTER_HASH_AND_PERFECT | \
99 EMAC_FRMFILTER_SADDR | \
100 EMAC_FRMFILTER_INV_SADDR | \
101 EMAC_FRMFILTER_PASS_NO_PAUSE | \
102 EMAC_FRMFILTER_PASS_ALL_CTRL | \
103 EMAC_FRMFILTER_PASS_ADDR_CTRL | \
104 EMAC_FRMFILTER_BROADCAST | \
105 EMAC_FRMFILTER_PASS_MULTICAST | \
106 EMAC_FRMFILTER_INV_DADDR | \
107 EMAC_FRMFILTER_HASH_MULTICAST | \
108 EMAC_FRMFILTER_HASH_UNICAST | \
109 EMAC_FRMFILTER_PROMISCUOUS)
116 #define EMAC_MASKABLE_INTS (EMAC_INT_EARLY_RECEIVE | \
117 EMAC_INT_BUS_ERROR | \
118 EMAC_INT_EARLY_TRANSMIT | \
119 EMAC_INT_RX_WATCHDOG | \
120 EMAC_INT_RX_STOPPED | \
121 EMAC_INT_RX_NO_BUFFER | \
123 EMAC_INT_TX_UNDERFLOW | \
124 EMAC_INT_RX_OVERFLOW | \
125 EMAC_INT_TX_JABBER | \
126 EMAC_INT_TX_NO_BUFFER | \
127 EMAC_INT_TX_STOPPED | \
128 EMAC_INT_TRANSMIT | \
129 EMAC_INT_NORMAL_INT | \
130 EMAC_INT_ABNORMAL_INT | \
138 #define EMAC_NORMAL_INTS (EMAC_INT_TRANSMIT | \
140 EMAC_INT_EARLY_RECEIVE | \
141 EMAC_INT_TX_NO_BUFFER)
148 #define EMAC_ABNORMAL_INTS (EMAC_INT_TX_STOPPED | \
149 EMAC_INT_TX_JABBER | \
150 EMAC_INT_RX_OVERFLOW | \
151 EMAC_INT_TX_UNDERFLOW | \
152 EMAC_INT_RX_NO_BUFFER | \
153 EMAC_INT_RX_STOPPED | \
154 EMAC_INT_RX_WATCHDOG | \
155 EMAC_INT_EARLY_TRANSMIT | \
164 #define EMAC_NON_MASKED_INTS (EMAC_DMARIS_TT | \
173 #define NUM_MAC_ADDR 4
180 #define MAC_ADDR_OFFSET (EMAC_O_ADDR1L - EMAC_O_ADDR0L)
181 #define EMAC_O_ADDRL(n) (EMAC_O_ADDR0L + (MAC_ADDR_OFFSET * (n)))
182 #define EMAC_O_ADDRH(n) (EMAC_O_ADDR0H + (MAC_ADDR_OFFSET * (n)))
207 #define NUM_CLOCK_DIVISORS (sizeof(g_pi16MIIClockDiv) / \
208 sizeof(g_pi16MIIClockDiv[0]))
305 EMACInit(uint32_t ui32Base, uint32_t ui32SysClk, uint32_t ui32BusConfig,
306 uint32_t ui32RxBurst, uint32_t ui32TxBurst, uint32_t ui32DescSkipSize)
308 uint32_t ui32Val, ui32Div;
313 ASSERT(ui32DescSkipSize < 32);
314 ASSERT(ui32TxBurst < (32 * 8));
315 ASSERT(ui32RxBurst < (32 * 8));
334 if((ui32TxBurst > 32) || (ui32RxBurst > 32))
355 if(ui32RxBurst == ui32TxBurst)
819 EMACConfigSet(uint32_t ui32Base, uint32_t ui32Config, uint32_t ui32ModeFlags,
820 uint32_t ui32RxMaxFrameSize)
830 ASSERT(!ui32RxMaxFrameSize || ((ui32RxMaxFrameSize < 0x4000) &&
831 (ui32RxMaxFrameSize > 1522)));
847 if(ui32RxMaxFrameSize)
1055 uint32_t *pui32RxMaxFrameSize)
1064 ASSERT(pui32RxMaxFrameSize);
1103 *pui32RxMaxFrameSize = 10240;
1111 *pui32RxMaxFrameSize = 2048;
1171 EMACAddrSet(uint32_t ui32Base, uint32_t ui32Index,
const uint8_t *pui8MACAddr)
1186 pui8MACAddr[4] | (pui8MACAddr[5] << 8));
1192 (pui8MACAddr[0] | (pui8MACAddr[1] << 8) | (pui8MACAddr[2] << 16) |
1193 (pui8MACAddr[3] << 24));
1226 EMACAddrGet(uint32_t ui32Base, uint32_t ui32Index, uint8_t *pui8MACAddr)
1240 pui8MACAddr[0] = ui32Val & 0xFF;
1241 pui8MACAddr[1] = (ui32Val >> 8) & 0xFF;
1242 pui8MACAddr[2] = (ui32Val >> 16) & 0xFF;
1243 pui8MACAddr[3] = (ui32Val >> 24) & 0xFF;
1249 pui8MACAddr[4] = ui32Val & 0xFF;
1250 pui8MACAddr[5] = (ui32Val >> 8) & 0xFF;
1639 uint32_t *pui32HashLo)
1674 uint32_t ui32CRC, ui32Mask, ui32Loop;
1684 ui32CRC =
Crc32(0xFFFFFFFF, pui8MACAddr, 6);
1685 ui32CRC ^= 0xFFFFFFFF;
1697 for(ui32Loop = 0; ui32Loop < 6; ui32Loop++)
1700 ui32Mask |= (ui32CRC & 1);
1908 ASSERT(((uint32_t)pDescriptor & 3) == 0);
2028 ASSERT(((uint32_t)pDescriptor & 3) == 0);
2678 uint32_t ui32Val, ui32PHYStat;
2900 EMACPHYRead(uint32_t ui32Base, uint8_t ui8PhyAddr, uint8_t ui8RegAddr)
2954 uint16_t ui16RegAddr)
2994 uint16_t ui16RegAddr, uint16_t ui16Value)
3191 uint32_t ui32SubSecondInc)
3288 ASSERT(pui32SubSecondInc);
3388 uint32_t ui32SubSeconds)
3438 uint32_t *pui32SubSeconds)
3487 uint32_t ui32SubSeconds,
bool bInc)
3607 uint32_t ui32SubSeconds)
4240 return(ui32Value & ~EMAC_VLNINCREP_VLT_M);
4264 uint32_t ui32CRC, ui32Mask, ui32Loop;
4269 ui32CRC =
Crc32(0xFFFFFFFF, (uint8_t *)&ui16Tag, 2);
4270 ui32CRC ^= 0xFFFFFFFF;
4282 for(ui32Loop = 0; ui32Loop < 4; ui32Loop++)
4285 ui32Mask |= (ui32CRC & 1);
4414 uint32_t *pui32Data;
4432 pui32Data = (uint32_t *)pFilter;
4437 for(ui32Loop = 0; ui32Loop < 8; ui32Loop++)
4497 uint32_t *pui32Data;
4515 pui32Data = (uint32_t *)pFilter;
4520 for(ui32Loop = 0; ui32Loop < 8; ui32Loop++)
4596 ui32Value |= ui32Flags;
uint32_t EMACTimestampIntStatus(uint32_t ui32Base)
#define EMAC_DMAOPMODE_FTF
#define EMAC_TS_DIGITAL_ROLLOVER
#define EMAC_MIIADDR_CR_100_150
uint32_t EMACHashFilterBitCalculate(uint8_t *pui8MACAddr)
#define INT_EMAC0_TM4C129
#define EMAC_PPSCTRL_PPSEN0
#define EMAC_O_PMTCTLSTAT
uint8_t * EMACTxDMACurrentBufferGet(uint32_t ui32Base)
#define VALID_FRMFILTER_FLAGS
void EMACRxDMADescriptorListSet(uint32_t ui32Base, tEMACDMADescriptor *pDescriptor)
#define EMAC_FILTER_ADDR_ENABLE
#define EMAC_ABNORMAL_INTS
static const struct @0 g_pi16MIIClockDiv[]
void EMACIntEnable(uint32_t ui32Base, uint32_t ui32IntFlags)
void EMACTxFlush(uint32_t ui32Base)
#define EMAC_FILTER_SOURCE_ADDR
uint16_t EMACPHYRead(uint32_t ui32Base, uint8_t ui8PhyAddr, uint8_t ui8RegAddr)
void EMACTxDMAPollDemand(uint32_t ui32Base)
#define EMAC_PMT_GLOBAL_UNICAST_ENABLE
void EMACTimestampEnable(uint32_t ui32Base)
uint8_t * EMACRxDMACurrentBufferGet(uint32_t ui32Base)
void EMACTimestampTargetIntEnable(uint32_t ui32Base)
uint32_t EMACAddrFilterGet(uint32_t ui32Base, uint32_t ui32Index)
void EMACReset(uint32_t ui32Base)
void EMACVLANTxConfigSet(uint32_t ui32Base, uint16_t ui16Tag, uint32_t ui32Config)
void EMACAddrFilterSet(uint32_t ui32Base, uint32_t ui32Index, uint32_t ui32Config)
#define EMAC_DMABUSMOD_RPBL_S
void EMACRxWatchdogTimerSet(uint32_t ui32Base, uint8_t ui8Timeout)
#define EMAC_MIIDATA_DATA_M
#define EMAC_TIMSTCTRL_INTTRIG
bool SysCtlPeripheralReady(uint32_t ui32Peripheral)
void EMACRxEnable(uint32_t ui32Base)
#define EMAC_PMTCTLSTAT_WUPRX
void EMACPHYWrite(uint32_t ui32Base, uint8_t ui8PhyAddr, uint8_t ui8RegAddr, uint16_t ui16Data)
#define EMAC_EPHYMISC_INT
uint32_t EMACPowerManagementStatusGet(uint32_t ui32Base)
void EMACTxEnable(uint32_t ui32Base)
#define EMAC_TIMSTCTRL_TSEN
#define EMAC_DMABUSMOD_USP
#define EMAC_MIIADDR_CR_M
#define EMAC_MIIADDR_PLA_S
#define EMAC_TARGNANO_TRGTBUSY
uint32_t Crc32(uint32_t ui32Crc, const uint8_t *pui8Data, uint32_t ui32Count)
#define EMAC_PMT_MAGIC_PACKET_ENABLE
void EMACIntClear(uint32_t ui32Base, uint32_t ui32IntFlags)
void SysCtlDelay(uint32_t ui32Count)
void EMACTimestampPPSCommand(uint32_t ui32Base, uint8_t ui8Cmd)
#define EMAC_DMABUSMOD_PBL_S
void EMACTimestampSysTimeUpdate(uint32_t ui32Base, uint32_t ui32Seconds, uint32_t ui32SubSeconds, bool bInc)
void EMACInit(uint32_t ui32Base, uint32_t ui32SysClk, uint32_t ui32BusConfig, uint32_t ui32RxBurst, uint32_t ui32TxBurst, uint32_t ui32DescSkipSize)
uint16_t EMACPHYExtendedRead(uint32_t ui32Base, uint8_t ui8PhyAddr, uint16_t ui16RegAddr)
#define EMAC_PHY_TYPE_MASK
#define EMAC_TIMSTCTRL_TSINIT
#define EMAC_FILTER_BYTE_MASK_M
void EMACTimestampPPSPeriodSet(uint32_t ui32Base, uint32_t ui32Period, uint32_t ui32Width)
void EMACTimestampSysTimeGet(uint32_t ui32Base, uint32_t *pui32Seconds, uint32_t *pui32SubSeconds)
#define EMAC_PPSCTRL_PPSCTRL_M
#define EMAC_MIIADDR_CR_35_60
uint32_t EMACFrameFilterGet(uint32_t ui32Base)
void EMACPHYConfigSet(uint32_t ui32Base, uint32_t ui32Config)
#define VALID_CONFIG_FLAGS
void EMACHashFilterGet(uint32_t ui32Base, uint32_t *pui32HashHi, uint32_t *pui32HashLo)
#define EMAC_DMABUSMOD_DSL_S
void EMACRemoteWakeUpFrameFilterSet(uint32_t ui32Base, const tEMACWakeUpFrameFilter *pFilter)
#define EMAC_TIMNANOU_ADDSUB
#define EMAC_MASKABLE_INTS
void EMACVLANRxConfigSet(uint32_t ui32Base, uint16_t ui16Tag, uint32_t ui32Config)
#define EMAC_PPS_TARGET_PPS
A structure defining a single Ethernet DMA buffer descriptor.
#define EMAC_PMTCTLSTAT_PWRDWN
void EMACAddrGet(uint32_t ui32Base, uint32_t ui32Index, uint8_t *pui8MACAddr)
uint32_t EMACDMAStateGet(uint32_t ui32Base)
#define EMAC_DMAOPMODE_SR
#define EMAC_MIIADDR_MII_S
#define EMAC_PMTCTLSTAT_WUPFRRST
void EMACHashFilterSet(uint32_t ui32Base, uint32_t ui32HashHi, uint32_t ui32HashLo)
#define EMAC_CONFIG_TX_ENABLED
void EMACTimestampTargetIntDisable(uint32_t ui32Base)
#define EMAC_PMTCTLSTAT_GLBLUCAST
void EMACPHYPowerOn(uint32_t ui32Base, uint8_t ui8PhyAddr)
void EMACTimestampPPSSimpleModeSet(uint32_t ui32Base, uint32_t ui32FreqConfig)
#define EMAC_DMAOPMODE_ST
#define EMAC_DMABUSMOD_ATDS
void EMACVLANHashFilterSet(uint32_t ui32Base, uint32_t ui32Hash)
void EMACPHYPowerOff(uint32_t ui32Base, uint8_t ui8PhyAddr)
tEMACDMADescriptor * EMACRxDMADescriptorListGet(uint32_t ui32Base)
#define EMAC_TIMSTCTRL_TSUPDT
#define EMAC_PPS_TARGET_INT
#define EMAC_PHY_TYPE_EXTERNAL_RMII
#define EMAC_INT_ABNORMAL_INT
void EMACAddrSet(uint32_t ui32Base, uint32_t ui32Index, const uint8_t *pui8MACAddr)
#define EMAC_CONFIG_RX_ENABLED
void SysCtlPeripheralReset(uint32_t ui32Peripheral)
void EMACRxDMAPollDemand(uint32_t ui32Base)
#define EMAC_PMTCTLSTAT_MGKPKTEN
uint32_t EMACVLANHashFilterBitCalculate(uint16_t ui16Tag)
uint32_t EMACPowerManagementControlGet(uint32_t ui32Base)
void EMACConfigSet(uint32_t ui32Base, uint32_t ui32Config, uint32_t ui32ModeFlags, uint32_t ui32RxMaxFrameSize)
void EMACRxDisable(uint32_t ui32Base)
void EMACTxDisable(uint32_t ui32Base)
void EMACTimestampConfigSet(uint32_t ui32Base, uint32_t ui32Config, uint32_t ui32SubSecondInc)
#define EMAC_SUBSECINC_SSINC_M
#define NUM_CLOCK_DIVISORS
#define EMAC_SUBSECINC_SSINC_S
#define EMAC_WDOGTO_WTO_M
void IntUnregister(uint32_t ui32Interrupt)
#define EMAC_PHY_TYPE_INTERNAL
void EMACIntDisable(uint32_t ui32Base, uint32_t ui32IntFlags)
tEMACDMADescriptor * EMACTxDMADescriptorListGet(uint32_t ui32Base)
#define EMAC_DMABUSMOD_8XPBL
#define EMAC_PPS_SINGLE_PULSE
#define EMAC_MIIADDR_MIIB
#define EMAC_MIIADDR_MIIW
#define EMAC_PMT_POWER_DOWN
void EMACTxDMADescriptorListSet(uint32_t ui32Base, tEMACDMADescriptor *pDescriptor)
tEMACDMADescriptor * EMACRxDMACurrentDescriptorGet(uint32_t ui32Base)
#define EMAC_PPS_TARGET_BOTH
tEMACDMADescriptor * EMACTxDMACurrentDescriptorGet(uint32_t ui32Base)
void EMACIntRegister(uint32_t ui32Base, void(*pfnHandler)(void))
#define EMAC_VLNINCREP_VLT_M
uint32_t EMACVLANTxConfigGet(uint32_t ui32Base, uint16_t *pui16Tag)
void EMACTimestampAddendSet(uint32_t ui32Base, uint32_t ui32Increment)
#define EMAC_INT_NORMAL_INT
#define EMAC_PMT_WAKEUP_PACKET_ENABLE
uint32_t EMACVLANRxConfigGet(uint32_t ui32Base, uint16_t *pui16Tag)
#define EMAC_DMABUSMOD_SWR
void EMACTimestampTargetSet(uint32_t ui32Base, uint32_t ui32Seconds, uint32_t ui32SubSeconds)
void EMACRemoteWakeUpFrameFilterGet(uint32_t ui32Base, tEMACWakeUpFrameFilter *pFilter)
void EMACIntUnregister(uint32_t ui32Base)
void EMACTimestampSysTimeSet(uint32_t ui32Base, uint32_t ui32Seconds, uint32_t ui32SubSeconds)
void EMACTimestampPPSCommandModeSet(uint32_t ui32Base, uint32_t ui32Config)
Configures the Ethernet MAC PPS output in command mode.
void EMACTimestampDisable(uint32_t ui32Base)
void EMACConfigGet(uint32_t ui32Base, uint32_t *pui32Config, uint32_t *pui32Mode, uint32_t *pui32RxMaxFrameSize)
#define EMAC_MIIADDR_CR_60_100
uint32_t EMACVLANHashFilterGet(uint32_t ui32Base)
void EMACFrameFilterSet(uint32_t ui32Base, uint32_t ui32FilterOpts)
uint32_t EMACNumAddrGet(uint32_t ui32Base)
#define EMAC_PMTCTLSTAT_MGKPRX
#define SYSCTL_PERIPH_EPHY0
uint32_t EMACIntStatus(uint32_t ui32Base, bool bMasked)
#define EMAC_PMTCTLSTAT_WUPFREN
#define EMAC_NON_MASKED_INTS
void IntDisable(uint32_t ui32Interrupt)
void IntRegister(uint32_t ui32Interrupt, void(*pfnHandler)(void))
void EMACPHYExtendedWrite(uint32_t ui32Base, uint8_t ui8PhyAddr, uint16_t ui16RegAddr, uint16_t ui16Value)
#define EMAC_VLNINCREP_VLT_S
uint32_t EMACTimestampConfigGet(uint32_t ui32Base, uint32_t *pui32SubSecondInc)
#define EMAC_TIMSTCTRL_ADDREGUP
void IntEnable(uint32_t ui32Interrupt)
void EMACPowerManagementControlSet(uint32_t ui32Base, uint32_t ui32Flags)
uint32_t EMACStatusGet(uint32_t ui32Base)