/* * COPYRIGHT (C) 2018, Real-Thread Information Technology Ltd * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2015-07-15 Bernard The first version */ #ifndef EMAC_DRV_H__ #define EMAC_DRV_H__ //#define ENHANCED_BD ///* Ethernet standard lengths in bytes*/ //#define ETH_ADDR_LEN (6) //#define ETH_TYPE_LEN (2) //#define ETH_CRC_LEN (4) //#define ETH_MAX_DATA (1500) //#define ETH_MIN_DATA (46) //#define ETH_HDR_LEN (ETH_ADDR_LEN * 2 + ETH_TYPE_LEN) //// 6 * 2 + 2 + 1500 + 4 ///* Maximum and Minimum Ethernet Frame Sizes */ //#define ETH_MAX_FRM (ETH_HDR_LEN + ETH_MAX_DATA + ETH_CRC_LEN) //#define ETH_MIN_FRM (ETH_HDR_LEN + ETH_MIN_DATA + ETH_CRC_LEN) //#define ETH_MTU (ETH_HDR_LEN + ETH_MAX_DATA) ///********INTERFACE**********/ //typedef enum //{ // MAC_MII, // MAC_RMII, //} ENET_INTERFACE; ///********AUTONEG**********/ //typedef enum //{ // AUTONEG_ON, // AUTONEG_OFF //} ENET_AUTONEG; ///********SPEED**********/ //typedef enum //{ // MII_10BASET, // MII_100BASET //} ENET_SPEED; ///********DUPLEX**********/ ///* MII Duplex Settings */ //typedef enum //{ // MII_HDX, /*!< half-duplex */ // MII_FDX /*!< full-duplex */ //} ENET_DUPLEX; ///********LOOPBACK**********/ //typedef enum //{ // INTERNAL_LOOPBACK, // EXTERNAL_LOOPBACK, // NO_LOOPBACK //} ENET_LOOPBACK; ///********EXTERNAL**********/ //typedef enum //{ // EXTERNAL_NONE, // EXTERNAL_YES //} ENET_EXTERNAL_CONN; ///* // * FEC Configuration Parameters // */ //typedef struct //{ // //ENET_Type* hw_base; /* FEC channel */ // ENET_INTERFACE interface; /* Transceiver mode */ // ENET_AUTONEG neg; /* FEC autoneg */ // ENET_SPEED speed; /* Ethernet Speed */ // ENET_DUPLEX duplex; /* Ethernet Duplex */ // ENET_LOOPBACK loopback; /* Loopback Mode */ // ENET_EXTERNAL_CONN external; /* outside test? */ // uint8_t prom; /* Promiscuous Mode? */ // uint8_t mac[6]; /* Ethernet Address */ //} ENET_CONFIG; //// Choose Enhanced Buffer Descriptor or Legacy ////#define ENHANCED_BD //// Buffer sizes in bytes (must be divisible by 16) //#define RX_BUFFER_SIZE ETH_MAX_FRM //#define TX_BUFFER_SIZE ETH_MAX_FRM //// Number of Receive and Transmit Buffers and Buffer Descriptors //#define NUM_RXBDS 8 //#define NUM_TXBDS 4 //// Buffer Descriptor Format //typedef struct //{ // uint16_t status; /* control and status */ // uint16_t length; /* transfer length */ // uint8_t *data; /* buffer address */ //#ifdef ENHANCED_BD // uint32_t ebd_status; // uint16_t length_proto_type; // uint16_t payload_checksum; // uint32_t bdu; // uint32_t timestamp; // uint32_t reserverd_word1; // uint32_t reserverd_word2; //#endif /* ENHANCED_BD */ //} NBUF; //// ---------------------------------------------------------------------- //// TX Buffer Descriptor Bit Definitions //// ---------------------------------------------------------------------- //#define TX_BD_R 0x0080 //#define TX_BD_TO1 0x0040 //#define TX_BD_W 0x0020 //#define TX_BD_TO2 0x0010 //#define TX_BD_L 0x0008 //#define TX_BD_TC 0x0004 //#define TX_BD_ABC 0x0002 //// ---------------------------------------------------------------------- //// TX Enhanced BD Bit Definitions //// ---------------------------------------------------------------------- //#define TX_BD_INT 0x00000040 //#define TX_BD_TS 0x00000020 //#define TX_BD_PINS 0x00000010 //#define TX_BD_IINS 0x00000008 //#define TX_BD_TXE 0x00800000 //#define TX_BD_UE 0x00200000 //#define TX_BD_EE 0x00100000 //#define TX_BD_FE 0x00080000 //#define TX_BD_LCE 0x00040000 //#define TX_BD_OE 0x00020000 //#define TX_BD_TSE 0x00010000 //#define TX_BD_BDU 0x00000080 //// ---------------------------------------------------------------------- //// RX Buffer Descriptor Bit Definitions //// ---------------------------------------------------------------------- //// Offset 0 flags - status: Big Endian //#define RX_BD_E 0x0080 //#define RX_BD_R01 0x0040 //#define RX_BD_W 0x0020 //#define RX_BD_R02 0x0010 //#define RX_BD_L 0x0008 //#define RX_BD_M 0x0001 //#define RX_BD_BC 0x8000 //#define RX_BD_MC 0x4000 //#define RX_BD_LG 0x2000 //#define RX_BD_NO 0x1000 //#define RX_BD_CR 0x0400 //#define RX_BD_OV 0x0200 //#define RX_BD_TR 0x0100 //// ---------------------------------------------------------------------- //// RX Enhanced BD Bit Definitions //// ---------------------------------------------------------------------- //#define RX_BD_ME 0x00000080 //#define RX_BD_PE 0x00000004 //#define RX_BD_CE 0x00000002 //#define RX_BD_UC 0x00000001 //#define RX_BD_INT 0x00008000 //#define RX_BD_ICE 0x20000000 //#define RX_BD_PCR 0x10000000 //#define RX_BD_VLAN 0x04000000 //#define RX_BD_IPV6 0x02000000 //#define RX_BD_FRAG 0x01000000 //#define RX_BD_BDU 0x00000080 ///* MII Register Addresses */ //#define PHY_BMCR (0x00) //#define PHY_BMSR (0x01) //#define PHY_PHYIDR1 (0x02) //#define PHY_PHYIDR2 (0x03) //#define PHY_ANAR (0x04) //#define PHY_ANLPAR (0x05) //#define PHY_ANLPARNP (0x05) //#define PHY_ANER (0x06) //#define PHY_ANNPTR (0x07) //#define PHY_PHYSTS (0x10) //#define PHY_MICR (0x11) //#define PHY_MISR (0x12) //#define PHY_PAGESEL (0x13) ///*TSI-EVB definition: National Semiconductor*/ //#define PHY_PHYCR2 (0x1C) ///*TWR definition: Micrel*/ //#define PHY_PHYCTRL1 (0x1E) //#define PHY_PHYCTRL2 (0x1F) ///* Bit definitions and macros for PHY_BMCR */ //#define PHY_BMCR_RESET (0x8000) //#define PHY_BMCR_LOOP (0x4000) //#define PHY_BMCR_SPEED (0x2000) //#define PHY_BMCR_AN_ENABLE (0x1000) //#define PHY_BMCR_POWERDOWN (0x0800) //#define PHY_BMCR_ISOLATE (0x0400) //#define PHY_BMCR_AN_RESTART (0x0200) //#define PHY_BMCR_FDX (0x0100) //#define PHY_BMCR_COL_TEST (0x0080) ///* Bit definitions and macros for PHY_BMSR */ //#define PHY_BMSR_100BT4 (0x8000) //#define PHY_BMSR_100BTX_FDX (0x4000) //#define PHY_BMSR_100BTX (0x2000) //#define PHY_BMSR_10BT_FDX (0x1000) //#define PHY_BMSR_10BT (0x0800) //#define PHY_BMSR_NO_PREAMBLE (0x0040) //#define PHY_BMSR_AN_COMPLETE (0x0020) //#define PHY_BMSR_REMOTE_FAULT (0x0010) //#define PHY_BMSR_AN_ABILITY (0x0008) //#define PHY_BMSR_LINK (0x0004) //#define PHY_BMSR_JABBER (0x0002) //#define PHY_BMSR_EXTENDED (0x0001) ///* Bit definitions and macros for PHY_ANAR */ //#define PHY_ANAR_NEXT_PAGE (0x8001) //#define PHY_ANAR_REM_FAULT (0x2001) //#define PHY_ANAR_PAUSE (0x0401) //#define PHY_ANAR_100BT4 (0x0201) //#define PHY_ANAR_100BTX_FDX (0x0101) //#define PHY_ANAR_100BTX (0x0081) //#define PHY_ANAR_10BT_FDX (0x0041) //#define PHY_ANAR_10BT (0x0021) //#define PHY_ANAR_802_3 (0x0001) ///* Bit definitions and macros for PHY_ANLPAR */ //#define PHY_ANLPAR_NEXT_PAGE (0x8000) //#define PHY_ANLPAR_ACK (0x4000) //#define PHY_ANLPAR_REM_FAULT (0x2000) //#define PHY_ANLPAR_PAUSE (0x0400) //#define PHY_ANLPAR_100BT4 (0x0200) //#define PHY_ANLPAR_100BTX_FDX (0x0100) //#define PHY_ANLPAR_100BTX (0x0080) //#define PHY_ANLPAR_10BTX_FDX (0x0040) //#define PHY_ANLPAR_10BT (0x0020) ///* Bit definitions of PHY_PHYSTS: National */ //#define PHY_PHYSTS_MDIXMODE (0x4000) //#define PHY_PHYSTS_RX_ERR_LATCH (0x2000) //#define PHY_PHYSTS_POL_STATUS (0x1000) //#define PHY_PHYSTS_FALSECARRSENSLAT (0x0800) //#define PHY_PHYSTS_SIGNALDETECT (0x0400) //#define PHY_PHYSTS_PAGERECEIVED (0x0100) //#define PHY_PHYSTS_MIIINTERRUPT (0x0080) //#define PHY_PHYSTS_REMOTEFAULT (0x0040) //#define PHY_PHYSTS_JABBERDETECT (0x0020) //#define PHY_PHYSTS_AUTONEGCOMPLETE (0x0010) //#define PHY_PHYSTS_LOOPBACKSTATUS (0x0008) //#define PHY_PHYSTS_DUPLEXSTATUS (0x0004) //#define PHY_PHYSTS_SPEEDSTATUS (0x0002) //#define PHY_PHYSTS_LINKSTATUS (0x0001) ///* Bit definitions of PHY_PHYCR2 */ //#define PHY_PHYCR2_SYNC_ENET_EN (0x2000) //#define PHY_PHYCR2_CLK_OUT_RXCLK (0x1000) //#define PHY_PHYCR2_BC_WRITE (0x0800) //#define PHY_PHYCR2_PHYTER_COMP (0x0400) //#define PHY_PHYCR2_SOFT_RESET (0x0200) //#define PHY_PHYCR2_CLK_OUT_DIS (0x0001) ///* Bit definition and macros for PHY_PHYCTRL1 */ //#define PHY_PHYCTRL1_LED_MASK (0xC000) //#define PHY_PHYCTRL1_POLARITY (0x2000) //#define PHY_PHYCTRL1_MDX_STATE (0x0800) //#define PHY_PHYCTRL1_REMOTE_LOOP (0x0080) ///* Bit definition and macros for PHY_PHYCTRL2 */ //#define PHY_PHYCTRL2_HP_MDIX (0x8000) //#define PHY_PHYCTRL2_MDIX_SELECT (0x4000) //#define PHY_PHYCTRL2_PAIRSWAP_DIS (0x2000) //#define PHY_PHYCTRL2_ENERGY_DET (0x1000) //#define PHY_PHYCTRL2_FORCE_LINK (0x0800) //#define PHY_PHYCTRL2_POWER_SAVING (0x0400) //#define PHY_PHYCTRL2_INT_LEVEL (0x0200) //#define PHY_PHYCTRL2_EN_JABBER (0x0100) //#define PHY_PHYCTRL2_AUTONEG_CMPLT (0x0080) //#define PHY_PHYCTRL2_ENABLE_PAUSE (0x0040) //#define PHY_PHYCTRL2_PHY_ISOLATE (0x0020) //#define PHY_PHYCTRL2_OP_MOD_MASK (0x001C) //#define PHY_PHYCTRL2_EN_SQE_TEST (0x0002) //#define PHY_PHYCTRL2_DATA_SCRAM_DIS (0x0001) ///* Bit definitions of PHY_PHYCTRL2_OP_MOD_MASK */ //#define PHY_PHYCTRL2_OP_MOD_SHIFT 2 //#define PHY_PHYCTRL2_MODE_OP_MOD_STILL_NEG 0 //#define PHY_PHYCTRL2_MODE_OP_MOD_10MBPS_HD 1 //#define PHY_PHYCTRL2_MODE_OP_MOD_100MBPS_HD 2 //#define PHY_PHYCTRL2_MODE_OP_MOD_10MBPS_FD 5 //#define PHY_PHYCTRL2_MODE_OP_MOD_100MBPS_FD 6 //#define MII_TIMEOUT 0x1FF //#define MII_LINK_TIMEOUT 0x1FF //int drv_emac_hw_init(void); #endif