//########################################################################### // // FILE: ethernet.h // // TITLE: CM Ethernet driver. // //########################################################################### // // // $Copyright: // Copyright (C) 2022 Texas Instruments Incorporated - http://www.ti.com // // 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 Texas Instruments Incorporated nor the names of // its contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "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 THE COPYRIGHT // OWNER OR CONTRIBUTORS 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. // $ //########################################################################### #ifndef ETHERNET_H #define ETHERNET_H //***************************************************************************** // // If building with a C++ compiler, make all of the definitions in this header // have a C binding. // //***************************************************************************** #ifdef __cplusplus extern "C" { #endif //***************************************************************************** // //! \addtogroup ethernet_api Ethernet //! @{ // //***************************************************************************** #include #include #include "inc/hw_types.h" #include "inc/hw_emac.h" #include "inc/hw_emac_ss.h" #include "interrupt.h" #include "platform_port.h" // //Transmit Store and Forward Shift Value // #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TSF_S 1U #define ETHERNET_MAC_CONFIGURATION_DM_S 13U//Duplex Mode Shift Value #define ETHERNET_MAC_CONFIGURATION_LM_S 12U // //MAC Packet Filter Register Bit Field Enumerations // #define ETHERNET_MAC_PACKET_FILTER_PCF_FILTER_ALL_CTRL 0U #define ETHERNET_MAC_PACKET_FILTER_PCF_FWD_ALL_EXCEPTPASS 1U #define ETHERNET_MAC_PACKET_FILTER_PCF_FWD_ALL_WITHOUT_ADDRESS_FILTER 2U #define ETHERNET_MAC_PACKET_FILTER_PCF_FWD_ALL_WITH_ADDRESS_FILTER 3U // //MAC Configuration Enumerations // #define ETHERNET_MAC_CONFIGURATION_DM_FULL_DUPLEX 1U #define ETHERNET_MAC_CONFIGURATION_DM_HALF_DUPLEX 0U #define ETHERNET_MAC_CONFIGURATION_LM_LOOPBACK_ENABLED 1U #define ETHERNET_MAC_CONFIGURATION_LM_LOOPBACK_DISABLED 0U #define ETHERNET_MAC_RXQ_CONTROL_RXQEN_ENABLED_GENERIC 2U // //MAC WatchDog Timeout Enumerations // #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_2KB 0U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_3KB 1U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_4KB 2U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_5KB 3U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_6KB 4U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_7KB 5U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_8KB 6U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_9KB 7U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_10KB 8U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_11KB 9U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_12KB 10U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_13KB 11U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_14KB 12U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_15KB 13U #define ETHERNET_MAC_WATCHDOG_TIMEOUT_WTO_15383 14U // //Value of F for WTO is reserved and hence not defined // //Threshold value defines for Transmit Threshold //Enumerations for MTL_TXQn_OPMode Register //These values can be used as an argument for Ethernet_setMTLTxQueueOpMode func // #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TTC_32 0U #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TTC_64 1U #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TTC_96 2U #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TTC_128 3U #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TTC_192 4U #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TTC_256 5U #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TTC_384 6U #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TTC_512 7U #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TXQ_DISABLED 0U #define ETHERNET_MTL_TXQ0_OPERATION_MODE_TXQ_ENABLED 2U // //Enumerations for DMA_Mode Register // #define ETHERNET_DMA_OPERATION_MODE_PR_TX1_RX1 0U #define ETHERNET_DMA_OPERATION_MODE_PR_TX2_RX1 1U #define ETHERNET_DMA_OPERATION_MODE_PR_TX3_RX1 2U #define ETHERNET_DMA_OPERATION_MODE_PR_TX4_RX1 3U #define ETHERNET_DMA_OPERATION_MODE_PR_TX5_RX1 4U #define ETHERNET_DMA_OPERATION_MODE_PR_TX6_RX1 5U #define ETHERNET_DMA_OPERATION_MODE_PR_TX7_RX1 6U #define ETHERNET_DMA_OPERATION_MODE_PR_TX8_RX1 7U #define ETHERNET_MTL_RXQ0_OPERATION_MODE_TXQ_DISABLED 0U #define ETHERNET_MTL_RXQ0_OPERATION_MODE_TXQ_ENABLED 2U #define ETHERNET_DMA_OPERATION_MODE_DA_ROUND_ROBIN 0U #define ETHERNET_DMA_OPERATION_MODE_DA_FIXED_PRIORITY 1U // //MTL OP Mode Register Bit Field Enumerations // #define ETHERNET_MTL_OPERATON_MODE_SCHALG_WRR 0U #define ETHERNET_MTL_OPERATON_MODE_SCHALG_WFQ 1U #define ETHERNET_MTL_OPERATON_MODE_SCHALG_DWRR 2U #define ETHERNET_MTL_OPERATON_MODE_SCHALG_STRICT_PRIORITY 3U #define ETHERNET_MTL_OPERATION_MODE_RAA_SP 0U #define ETHERNET_MTL_OPERATION_MODE_RAA_WSP 1U #define ETHERNET_MTL_OPERATION_MODE_RAA_S 2U #define ETHERNET_MTL_Q_OP_MODE_QSIZE_256 0U #define ETHERNET_MTL_Q_OP_MODE_QSIZE_512 1U #define ETHERNET_MTL_Q_OP_MODE_QSIZE_768 2U #define ETHERNET_MTL_Q_OP_MODE_QSIZE_1024 3U #define ETHERNET_MTL_Q_OP_MODE_QSIZE_1280 4U #define ETHERNET_MTL_Q_OP_MODE_QSIZE_1536 5U #define ETHERNET_MTL_Q_OP_MODE_QSIZE_1792 6U #define ETHERNET_MTL_Q_OP_MODE_QSIZE_2048 7U #define ETHERNET_MTL_Q_OP_MODE_QSIZE_4096 15U // //Enumeration for MTL_TxQ0_Operation_Mode Register // #define ETHERNET_MTL_TXQ_OPMODE_TSF_ENABLE 1U #define ETHERNET_MTL_TXQ_OPMODE_TSF_DISABLE 0U // //Enumeration for MTL_RxQ0_Operation_Mode Register // #define ETHERNET_MTL_RX_Q_OP_MODE_RSF_ENABLE 1U #define ETHERNET_MTL_RX_Q_OP_MODE_RSF_DISABLE 0U // //Enumerations for MTL_RXQn_OPMode Register // #define ETHERNET_MTL_RXQ0_OPERATION_MODE_RTC_64 0U #define ETHERNET_MTL_RXQ0_OPERATION_MODE_RTC_32 1U #define ETHERNET_MTL_RXQ0_OPERATION_MODE_RTC_96 2U #define ETHERNET_MTL_RXQ0_OPERATION_MODE_RTC_128 3U #define ETHERNET_MTL_RXQ0_OPERATION_MODE_RSF_S 5U // //Enumeration for DMA_CH(#i)_RX_Control Register //Received Buffer Size //Our Configuration has 2bits(since 4 bytes is burst size) //for the lower bits and Bit 0 is for Enable //Hence it should be left shift by 3 // #define ETHERNET_DMA_CHX_RX_CONTROL_RBSZ_16 4U #define ETHERNET_DMA_CHX_RX_CONTROL_RBSZ_32 8U #define ETHERNET_DMA_CHX_RX_CONTROL_RBSZ_64 16U #define ETHERNET_DMA_CHX_RX_CONTROL_RBSZ_128 32U #define ETHERNET_DMA_CHX_RX_CONTROL_RBSZ_256 64U #define ETHERNET_DMA_CHX_RX_CONTROL_RBSZ_512 128U #define ETHERNET_DMA_CHX_RX_CONTROL_RBSZ_1K 256U #define ETHERNET_DMA_CHX_RX_CONTROL_RBSZ_2K 512U // // Following defines are used for Timestamping module configuration. // #define ETHERNET_MAC_SUBNANOSECONDS_INC_MULTIPLIER 0x100U // 2^8 #define ETHERNET_MAC_DIGITAL_ROLLOVER_ACCURACY 1U // 1ns acc. #define ETHERNET_MAC_BINARY_ROLLOVER_ACCURACY 0.465F // 0.465 ns acc. // // MAC_PPSx_Target_Time_Nanoseconds Register bit fields // /* * TODO : This register can have many instances depending on the * instances of the PPS in MAC. */ #define ETHERNET_MAC_PPS_TARGET_TIME_SECONDS 0x0B80U #define ETHERNET_MAC_PPS_TARGET_TIME_NANOSECONDS 0x0B84U #define ETHERNET_MAC_PPS_WIDTH 0x0B8CU #define ETHERNET_MAC_PPS_INTERVAL 0x0B88U #define ETHERNET_MAC_PPS_TARGET_TIME_NANOSECONDS_TRGTBUSY 0x80000000U #define ETHERNET_MAC_PPS_OUT_INSTANCE_0 0x0U #define ETHERNET_MAC_PPS_OUT_INSTANCE_1 0x1U // // AUX Timestamp related // #define ETHERNET_MAC_AUX_TIMESTAMP_FIFO_DEPTH 0x4U // // Enumeration for ETHERNET_SS_O_PTPTSTRIGSEL0/1 register // #define ETHERNET_SS_PTPTSTRIGSEL_AUX_TRIG_SEL0 0x1U #define ETHERNET_SS_PTPTSTRIGSEL_AUX_TRIG_SEL1 0x2U // // Enumeration for EMACSS_PTPTSSWTRIG0/1 register // #define ETHERNET_SS_PTPTSSWTRIG_PTP_AUX_TS_SW_TRIG0 0x1U #define ETHERNET_SS_PTPTSSWTRIG_PTP_AUX_TS_SW_TRIG1 0x2U // // Maximum 32 configurations are allowed. // #define ETHERNET_SS_PTPTSTRIGSEL_AUX_TRIG_SEL_MAX_VALUE 0x1FU // //MAC_PPS_Control Register bit-fields // #define ETHERNET_MAC_PPS_CONTROL_PPSEN0 4U #define ETHERNET_MAC_PPS_CONTROL_TRGTMODSEL0_S 5U #define ETHERNET_MAC_PPS_CONTROL_TRGTMODSEL0_M 3U #define ETHERNET_MAC_PPS_CONTROL_TRGTMODSEL1_S 13U #define ETHERNET_MAC_PPS_CONTROL_TRGTMODSEL1_M 3U // //Enumeration for MAC_PPS_Control Register // #define ETHERNET_MAC_PPS_CONTROL_TRGTMODSEL_INTERRUPT 0x0U #define ETHERNET_MAC_PPS_CONTROL_TRGTMODSEL_RESERVED 0x1U #define ETHERNET_MAC_PPS_CONTROL_TRGTMODSEL_INTERRUPT_PULSE 0x2U #define ETHERNET_MAC_PPS_CONTROL_TRGTMODSEL_PULSE 0x3U #define ETHERNET_MAC_PPS_CONTROL_PPSEN0_PPS_FIXED_MODE 0x0U #define ETHERNET_MAC_PPS_CONTROL_PPSEN0_PPS_FLEXIBLE_MODE 0x1U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_SINGLE_PULSE 0x0U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_1HZ 0x1U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_2HZ 0x2U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_4HZ 0x3U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_8HZ 0x4U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_16HZ 0x5U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_32HZ 0x6U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_64HZ 0x7U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_128HZ 0x8U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_256HZ 0x9U #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_512HZ 0xAU #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_1024HZ 0xBU #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_2048HZ 0xCU #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_4096HZ 0xDU #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_8192HZ 0xEU #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_16384HZ 0xFU #define ETHERNET_MAC_PPS_CONTROL_PPSCTRL_PPS_OUTPUT_32768HZ 0x10U #define ETHERNET_MAC_PPS_CONTROL_PPSCMD_COMMAND_NONE 0x0U #define ETHERNET_MAC_PPS_CONTROL_PPSCMD_COMMAND_START_SINGLE 0x1U #define ETHERNET_MAC_PPS_CONTROL_PPSCMD_COMMAND_START_TRAIN 0x2U #define ETHERNET_MAC_PPS_CONTROL_PPSCMD_COMMAND_CANCEL_START 0x3U #define ETHERNET_MAC_PPS_CONTROL_PPSCMD_COMMAND_STOP_AT_TIME 0x4U #define ETHERNET_MAC_PPS_CONTROL_PPSCMD_COMMAND_STOP_NOW 0x5U #define ETHERNET_MAC_PPS_CONTROL_PPSCMD_COMMAND_CANCEL_STOP 0x6U // //Enumerations for VLAN Incl Register // #define ETHERNET_MAC_VLAN_INCL_VLP_S 18U // //Static means the Tag control is provided in the VLC Field // #define ETHERNET_MAC_VLAN_INCL_VLP_STATIC 1U // //Dynamic means the VLC field is ignored and uses Context Descriptor // #define ETHERNET_MAC_VLAN_INCL_VLP_DYNAMIC 0U #define ETHERNET_MAC_VLAN_INCL_CSVL_S 19U #define ETHERNET_MAC_VLAN_INCL_VLTI_S 20U #define ETHERNET_MAC_VLAN_INCL_CBTI_S 21U #define ETHERNET_MAC_VLAN_INCL_ADDR_S 24U #define ETHERNET_MAC_VLAN_INCL_ADDR_M 0x1000000U #define ETHERNET_MAC_VLAN_INCL_RDWR_S 30U #define ETHERNET_MAC_VLAN_INCL_BUSY_S 31U // //For MAC_ Inner VLAN Register // #define ETHERNET_MAC_INNER_VLAN_INCL_VLP_S 18U #define ETHERNET_MAC_INNER_VLAN_INCL_CSVL_S 19U #define ETHERNET_MAC_INNER_VLAN_INCL_VLTI_S 20U // //For MAC_VLAN_TAG_DATA Register // #define ETHERNET_MAC_VLAN_TAG_DATA_DATA_16_S 16U #define ETHERNET_MAC_VLAN_TAG_DATA_DATA_17_S 17U #define ETHERNET_MAC_VLAN_TAG_DATA_DATA_18_S 18U #define ETHERNET_MAC_VLAN_TAG_DATA_DATA_19_S 19U #define ETHERNET_MAC_VLAN_TAG_DATA_DATA_20_S 20U #define ETHERNET_MAC_VLAN_TAG_DATA_DATA_24_S 24U #define ETHERNET_MAC_VLAN_TAG_DATA_DATA_25_S 25U // //For MAC_VLAN_TAG_Ctrl Register // #define ETHERNET_MAC_VLAN_TAG_CTRL_CT_READ 1U #define ETHERNET_MAC_VLAN_TAG_CTRL_CT_WRITE 0U #define ETHERNET_MAC_VLAN_TAG_CTRL_ERIVLT_S 27U #define ETHERNET_MAC_VLAN_TAG_CTRL_ERIVLT_M 0x8000000U // // VLAN Tag Hash Table Match // #define ETHERNET_MAC_VLAN_TAG_CTRL_VTHM_M 0x2000000U // //Enumerations for DMA Mode Register // #define ETHERNET_DMA_MODE_INTM_MODE0 0U #define ETHERNET_DMA_MODE_INTM_MODE1 1U #define ETHERNET_DMA_MODE_INTM_MODE2 2U // //Defines for MDIO_ADDRESS register // #define ETHERNET_MDIO_ADDRESS_C45E_S 1U #define ETHERNET_MDIO_ADDRESS_HIGHCLK_ENABLE_S 11U #define ETHERNET_MAC_MDIO_ADDRESS_GOC_0_S 2U #define ETHERNET_MAC_MDIO_ADDRESS_GOC_WRITE 1U #define ETHERNET_MAC_MDIO_ADDRESS_GOC_READ 3U #define ETHERNET_MAC_MDIO_ADDRESS_GOC_POSTREAD_INC 2U // //Defines for MAC_ADDRESS Register // #define ETHERNET_MAC_ADDRESS0_HIGH_DCS_S 16U // //Defines for MTL_RXQ_DMA_MAP0 register // #define ETHERNET_MTL_RXQ_DMA_MAP0_DDMACH_S 4U #define ETHERNET_MTL_RXQ_DMA_MAP0_QDMACH_S 8U // //Defines for REVMII Registers // #define ETHERNET_REVMII_PHY_CONTROL 0x0U #define ETHERNET_REVMII_COMMON_STATUS 0x1U #define ETHERNET_REVMII_COMMON_EXT_STATUS 0xFU #define ETHERNET_REVMII_INTERRUPT_STATUS_MASK 0x10U #define ETHERNET_REVMII_REMOTE_PHY_STATUS 0x11U // //Bit field defines for the REVMII Registers used // //REVMII Interrupt Status Mask Register // #define ETHERNET_REVMII_INTERRUPT_STATUS_MASK_LSI_M 0x100U // //Generic Enable Disable Defines // #define ETHERNET_ENABLE 1U #define ETHERNET_DISABLE 0U // //hw_emac.h defines ends // // //hw_emac_SS.h defines // #define ETHERNET_SS_CTRLSTS_CLK_LM_S 4U #define ETHERNET_SS_CTRLSTS_CLK_SRC_SEL_S 7U // //Enumerations for CTRLSTS Register // #define ETHERNET_SS_CTRLSTS_PHY_INTF_SEL_GMII 0U /* Values 1-3 Reserved*/ #define ETHERNET_SS_CTRLSTS_PHY_INTF_SEL_RMII 4U #define ETHERNET_SS_CTRLSTS_PHY_INTF_SEL_REVMII 7U #define ETHERNET_SS_CTRLSTS_LMCLKSEL_NORMAL 0U #define ETHERNET_SS_CTRLSTS_LMCLKSEL_INTERNAL 1U #define ETHERNET_SS_CTRLSTS_CLK_SRC_SEL_EXTERNAL 0U #define ETHERNET_SS_CTRLSTS_CLK_SRC_SEL_INTERNAL 1U #define ETHERNET_SS_CTRLSTS_FLOW_CTRL_EN_ENABLED 3U #define ETHERNET_SS_CTRLSTS_FLOW_CTRL_EN_DISABLED 0U #define ETHERNET_SS_CTRLSTS_WRITE_KEY_VALUE 0xA5U // //hw_emac_SS.h ends // #define ETHERNET_NUMSTATS 56U #define ETHERNET_MAX_NUM_DMA_CHANNELS 2U #define ETHERNET_MAX_DMA_DIR 2U #define ETHERNET_CH_DIR_TX 0U #define ETHERNET_CH_DIR_RX 1U /*Hardware Descriptor related flags*/ /* Interrupt on Completion */ #define ETHERNET_TX_DESC_IOC 0x80000000U /*Owner ship Flag in Buffer Descriptor */ #define ETHERNET_DESC_OWNER 0x80000000U /*First/Last Descriptor indicator Flag*/ #define ETHERNET_TX_DESC_FIRST_DESC 0x20000000U #define ETHERNET_TX_DESC_LAST_DESC 0x10000000U #define ETHERNET_TX_DESC_TTSE 0x40000000U #define ETHERNET_RX_DESC_IOC 0x40000000U #define ETHERNET_RX_DESC_BUF1_VALID 0x01000000U //24th Bit #define ETHERNET_RX_DESC_BUF2_VALID 0x02000000U //25th Bit #define ETHERNET_TX_DESC_TSE_ENABLE 0x00040000U //18th Bit #define ETHERNET_TX_DESC_BUF2LENGTH_S 16U #define ETHERNET_TX_DESC_SAIC_NO_SA_INC 0U #define ETHERNET_TX_DESC_SAIC_INS_SA 1U #define ETHERNET_TX_DESC_SAIC_REPL_SA 2U #define ETHERNET_TX_DESC_SAIC_S 23U #define ETHERNET_TX_DESC_CPC_S 26U #define ETHERNET_TX_DESC_CIC_S 16U #define ETHERNET_TX_CTXT_DESC_IVLAN_TAG_S 16U #define ETHERNET_TX_DESC_VTIR_S 14U #define ETHERNET_TX_DESC_TTSS 0x00020000U #define ETHERNET_TX_CTXT_DESC_IVTIR_TAG_S 18U #define ETHERNET_DESCRIPTORS_NUM_TX 16U #define ETHERNET_DESCRIPTORS_NUM_TX_PER_CHANNEL 8U #define ETHERNET_DESCRIPTORS_NUM_RX 16U #define ETHERNET_DESCRIPTORS_NUM_RX_PER_CHANNEL 8U #define ETHERNET_DESCRIPTORS_NUM (ETHERNET_DESCRIPTORS_NUM_TX + \ ETHERNET_DESCRIPTORS_NUM_RX ) /* * | 31:16 | 15:14 | 13:0 | * | Inner VLAN Tag | x | Max Seg. Size | */ #define ETHERNET_PKT_EXTENDED_FLAG_IVT_S 16U #define ETHERNET_PKT_EXTENDED_FLAG_MSS_S 0U #define ETHERNET_PKT_EXTENDED_FLAG_IVT_M 0xFFFF0000U #define ETHERNET_PKT_EXTENDED_FLAG_MSS_M 0x00003FFFU /* * | 31 | 30 |29:28| 27 | 26 |25:24|23 |22:20|19:18| 17 | 16 |15:0| * | OWN|CTXT| x |OSTC|TCMSSV| x |CDE| x |IVTIR|IVLTV|VLTV| VT | */ #define ETHERNET_PKT_EXTENDED_FLAG_IVTIR_S 18U #define ETHERNET_PKT_EXTENDED_FLAG_VT_S 0U #define ETHERNET_PKT_EXTENDED_FLAG_CTXT 0x40000000U #define ETHERNET_PKT_EXTENDED_FLAG_OSTC 0x08000000U #define ETHERNET_PKT_EXTENDED_FLAG_TCMSSV 0x04000000U #define ETHERNET_PKT_EXTENDED_FLAG_CDE 0x00800000U #define ETHERNET_PKT_EXTENDED_FLAG_VTIR_M 0x000C0000U #define ETHERNET_PKT_EXTENDED_FLAG_VTIR_S 18U #define ETHERNET_PKT_EXTENDED_FLAG_VTIR_NOTAG 0U #define ETHERNET_PKT_EXTENDED_FLAG_VTIR_REMOVE 1U #define ETHERNET_PKT_EXTENDED_FLAG_VTIR_INSERT 2U #define ETHERNET_PKT_EXTENDED_FLAG_VTIR_REPLACE 3U #define ETHERNET_PKT_EXTENDED_FLAG_IVLTV 0x00020000U #define ETHERNET_PKT_EXTENDED_FLAG_VLTV 0x00010000U #define ETHERNET_PKT_EXTENDED_FLAG_VT_M 0x0000FFFFU #define ETHERNET_PKT_EXTENDED_FLAG_VLAN 0x5U #define ETHERNET_PKT_EXTENDED_FLAG_TSO 0x6U #define ETHERNET_PKT_EXTENDED_FLAG_OST 0x7U // //Layout of Flags Field in Tx Packet Descriptor //|31|30|29 |28 |27 |26 |25 |24 |23 |22 |21|20|19|18 |17 |16 | //|x |x |SOP|EOP|CPC|CPC|SAIC|SAIC|VLIC|VLIC|x | x|x |TSE|CIC|CIC| // #define ETHERNET_PKT_FLAG_SOP_S 29U #define ETHERNET_PKT_FLAG_EOP_S 28U #define ETHERNET_PKT_FLAG_CPC_S 26U #define ETHERNET_PKT_FLAG_SAIC_S 24U #define ETHERNET_PKT_FLAG_VLIC_S 22U #define ETHERNET_PKT_FLAG_TSE_S 18U #define ETHERNET_PKT_FLAG_CIC_S 16U // // Per packet control flags // #define ETHERNET_PKT_FLAG_TTSE 0x40000000U #define ETHERNET_PKT_FLAG_SOP 0x20000000U #define ETHERNET_PKT_FLAG_EOP 0x10000000U #define ETHERNET_PKT_FLAG_CPC 0x0c000000U #define ETHERNET_PKT_FLAG_SAIC 0x03000000U #define ETHERNET_PKT_FLAG_VLIC 0x00C00000U #define ETHERNET_PKT_FLAG_TSE 0x00040000U #define ETHERNET_PKT_FLAG_CIC 0x00030000U // //VLAN Tag Insertion Flags // #define ETHERNET_PKT_FLAG_NO_VLAN 0x00000000U #define ETHERNET_PKT_FLAG_VLAN_REMOVAL 0x00400000U #define ETHERNET_PKT_FLAG_VLAN_INSERTION 0x00800000U #define ETHERNET_PKT_FLAG_VLAN_REPLACE 0x00C00000U // //CRC insertion Control Flags // #define ETHERNET_PKT_FLAG_CRC_PAD_INS 0x00000000U #define ETHERNET_PKT_FLAG_CRC_INS_NO_PAD 0x04000000U #define ETHERNET_PKT_FLAG_CRC_PAD_DIS 0x08000000U #define ETHERNET_PKT_FLAG_CRC_REPL_NO_PAD 0x0C000000U // //SA Insertion Flags // #define ETHERNET_PKT_FLAG_SA_NO_INS 0x00000000U #define ETHERNET_PKT_FLAG_SA_INS 0x01000000U #define ETHERNET_PKT_FLAG_SA_REPLACE 0x02000000U // //L3 L4 Checksum Control Flags // #define ETHERNET_PKT_FLAG_CS_NO_INS 0x00000000U #define ETHERNET_PKT_FLAG_CS_IP_INS 0x00010000U #define ETHERNET_PKT_FLAG_CS_IP_PAYLOAD_INS_NO_PSEUDO 0x00020000U #define ETHERNET_PKT_FLAG_CS_IP_PAYLOAD_PSEUDO_INS 0x00030000U #define ETHERNET_NUM_PORTS 1U #define ETHERNET_DMA_CHANNEL_NUM_0 0U #define ETHERNET_DMA_CHANNEL_NUM_1 1U // #define ETHERNET_RX_NORMAL_DESC_RDES1_TSA_LBIT_POS 0xeU #define ETHERNET_RX_CONTEXT_DESC_RDES3_CTXT_HBIT_POS 0x1eU #define ETHERNET_DRV_DEVMAGIC 0x0acefaceU #define ETHERNET_ERROR_CODE (0x2000000U) #define ETHERNET_ERROR_INFO (ETHERNET_ERROR_CODE) #define ETHERNET_ERROR_WARNING (ETHERNET_ERROR_CODE | 0x10000000U) #define ETHERNET_ERROR_MINOR (ETHERNET_ERROR_CODE | 0x20000000U) #define ETHERNET_ERROR_MAJOR (ETHERNET_ERROR_CODE | 0x30000000U) #define ETHERNET_ERROR_CRITICAL (ETHERNET_ERROR_CODE | 0x40000000U) #define ETHERNET_ERR_INVALID_HANDLE (ETHERNET_ERROR_MAJOR + 1U) #define ETHERNET_ERR_INVALID_PARAM (ETHERNET_ERROR_MAJOR + 2U) #define ETHERNET_ERR_BAD_PACKET (ETHERNET_ERROR_MAJOR + 3U) #define ETHERNET_RET_SUCCESS 0U // //Interrupt related defines // #define ETHERNET_GENERIC_INTERRUPT 0U #define ETHERNET_TX_INTR_CH0 1U #define ETHERNET_TX_INTR_CH1 2U #define ETHERNET_RX_INTR_CH0 3U #define ETHERNET_RX_INTR_CH1 4U #define ETHERNET_NUM_INTERRUPTS 5U // // Define for deriving the offset of channel specific registers // #define ETHERNET_CHANNEL_OFFSET (0x80U) // // Define for deriving the offset of Queue specific registers // #define ETHERNET_QUEUE_OFFSET (0x40U) // //Define for Signalling Early Rx Completion // typedef enum { ETHERNET_COMPLETION_NORMAL = 0x00U, //!Normal Packet Completion ETHERNET_COMPLETION_EARLY = 0x01U //!