#ifndef __ETHERNETIF_H #define __ETHERNETIF_H #include "lwip/err.h" #include "lwip/netif.h" /* Unique device ID */ #define ROM_CFG_USERADR_ID 0x1FFFF7E8 /* Ethernet Frame Size Definitions */ #define ETH_HEADER \ 14 /* 6 byte Dest addr, 6 byte Src addr, 2 byte length/type */ #define ETH_CRC 4 /* Ethernet CRC */ #define ETH_EXTRA 2 /* Extra bytes in some cases */ #define VLAN_TAG 4 /* optional 802.1q VLAN Tag */ #define MIN_ETH_PAYLOAD 46 /* Minimum Ethernet payload size */ #define MAX_ETH_PAYLOAD 1500 /* Maximum Ethernet payload size */ #define ETH_MAX_PACKET_SIZE \ 1536 /* ETH_HEADER + VLAN_TAG + MAX_ETH_PAYLOAD + ETH_CRC */ #define MIN_ETH_FRAME_SIZE (ETH_HEADER + MIN_ETH_PAYLOAD) /* 60 bytes */ /* Buffer Configuration */ #define ETH_RX_BUF_COUNT 4 #define ETH_TX_BUF_COUNT 2 #define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE #define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* DMA descriptor stuff */ #define ETH_DMARxDesc_FrameLengthShift 16 typedef struct { uint32_t volatile Status; /* Status */ uint32_t ControlBufferSize; /* Control and Buffer1, Buffer2 lengths */ uint32_t Buffer1Addr; /* Buffer1 address pointer */ uint32_t Buffer2NextDescAddr; /* Buffer2 or next descriptor address pointer */ } ETH_DMADESCTypeDef; /** * Should be called at the beginning of the program to set up the * network interface. It calls the function low_level_init() to do the * actual setup of the hardware. * * This function should be passed as a parameter to netif_add(). * * @param netif the lwip network interface structure for this ethernetif * @return ERR_OK if the loopif is initialized * ERR_MEM if private data couldn't be allocated * any other err_t on error */ err_t ethernetif_init(struct netif* netif); /** * This function should be called when a packet is ready to be read * from the interface. It uses the function low_level_input() that * should handle the actual reception of bytes from the network * interface. Then the type of the received packet is determined and * the appropriate input function is called. * * @param netif the lwip network interface structure for this ethernetif */ void ethernetif_input(struct netif* netif); /** * This function should be called periodically from the main loop * to check the link status and update lwIP accordingly. * * @param netif the lwip network interface structure for this ethernetif */ void ethernetif_link_poll(struct netif* netif); /** * Write a value to PHY register. * * @param reg_add PHY register address. * @param reg_val Value to write. */ void phy_write_reg(uint8_t reg_add, uint16_t reg_val); /** * Read a value from PHY register. * * @param reg_add PHY register address. * @return Register value. */ uint16_t phy_read_reg(uint8_t reg_add); #endif /* __ETHERNETIF_H */