blob: 1107daf4efbf63f24fa562b0762d742665759c19 [file] [log] [blame]
/****************************************************************************
* arch/arm/src/gd32f4/hardware/gd32f4xx_enet.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __ARCH_ARM_SRC_GD32F4_HARDWARE_GD32F4XX_ENET_H
#define __ARCH_ARM_SRC_GD32F4_HARDWARE_GD32F4XX_ENET_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include "chip.h"
#if GD32_NETHERNET > 0
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Register Offsets *********************************************************/
/* MAC Registers */
#define GD32_ENET_MAC_CFG_OFFSET 0x0000 /* MAC configuration register offset */
#define GD32_ENET_MAC_FRMF_OFFSET 0x0004 /* MAC frame filter register offset */
#define GD32_ENET_MAC_HLH_OFFSET 0x0008 /* MAC hash list high register offset */
#define GD32_ENET_MAC_HLL_OFFSET 0x000C /* MAC hash list low register offset */
#define GD32_ENET_MAC_PHY_CTL_OFFSET 0x0010 /* MAC PHY control register offset */
#define GD32_ENET_MAC_PHY_DATA_OFFSET 0x0014 /* MAC PHY data register offset */
#define GD32_ENET_MAC_FCTL_OFFSET 0x0018 /* MAC flow control register offset */
#define GD32_ENET_MAC_VLT_OFFSET 0x001C /* MAC VLAN tag register offset */
#define GD32_ENET_MAC_RWFF_OFFSET 0x0028 /* MAC remote wakeup frame filter register offset */
#define GD32_ENET_MAC_WUM_OFFSET 0x002C /* MAC wakeup managenment register offset */
#define GD32_ENET_MAC_DBG_OFFSET 0x0034 /* MAC debug register offset */
#define GD32_ENET_MAC_INTF_OFFSET 0x0038 /* MAC interrupt flag register offset */
#define GD32_ENET_MAC_INTMSK_OFFSET 0x003C /* MAC interrupt mask register offset */
#define GD32_ENET_MAC_ADDR0H_OFFSET 0x0040 /* MAC address 0 high register offset */
#define GD32_ENET_MAC_ADDR0L_OFFSET 0x0044 /* MAC address 0 low register offset */
#define GD32_ENET_MAC_ADDR1H_OFFSET 0x0048 /* MAC address 1 high register offset */
#define GD32_ENET_MAC_ADDR1L_OFFSET 0x004C /* MAC address 1 low register offset */
#define GD32_ENET_MAC_ADDR2H_OFFSET 0x0050 /* MAC address 2 high register offset */
#define GD32_ENET_MAC_ADDR2L_OFFSET 0x0054 /* MAC address 2 low register offset */
#define GD32_ENET_MAC_ADDR3H_OFFSET 0x0058 /* MAC address 3 high register offset */
#define GD32_ENET_MAC_ADDR3L_OFFSET 0x005C /* MAC address 3 low register offset */
#define GD32_ENET_MAC_FCTH_OFFSET 0x1080 /* MAC flow control threshold register offset */
/* MSC Registers */
#define GD32_ENET_MSC_CTL_OFFSET 0x0100 /* MSC control register offset */
#define GD32_ENET_MSC_RINTF_OFFSET 0x0104 /* MSC receive interrupt flag register offset */
#define GD32_ENET_MSC_TINTF_OFFSET 0x0108 /* MSC transmit interrupt flag register offset */
#define GD32_ENET_MSC_RINTMSK_OFFSET 0x010C /* MSC receive interrupt mask register offset */
#define GD32_ENET_MSC_TINTMSK_OFFSET 0x0110 /* MSC transmit interrupt mask register offset */
#define GD32_ENET_MSC_SCCNT_OFFSET 0x014C /* MSC transmitted good frames after a single collision counter register offset */
#define GD32_ENET_MSC_MSCCNT_OFFSET 0x0150 /* MSC transmitted good frames after more than a signle collision counter register offset */
#define GD32_ENET_MSC_TGFCNT_OFFSET 0x0168 /* MSC transmitted good frames counter register offset */
#define GD32_ENET_MSC_RFCECNT_OFFSET 0x0194 /* MSC received frames with CRC error counter register offset */
#define GD32_ENET_MSC_RFAECNT_OFFSET 0x0198 /* MSC received frames with alignment error counter offset */
#define GD32_ENET_MSC_RGUFCNT_OFFSET 0x01C4 /* MSC received good unicast frames counter register offset */
/* PTP Registers */
#define GD32_ENET_PTP_TSCTL_OFFSET 0x0700 /* PTP time stamp control register offset */
#define GD32_ENET_PTP_SSINC_OFFSET 0x0704 /* PTP subsecond increment register offset */
#define GD32_ENET_PTP_TSH_OFFSET 0x0708 /* PTP time stamp high register offset */
#define GD32_ENET_PTP_TSL_OFFSET 0x070C /* PTP time stamp low register offset */
#define GD32_ENET_PTP_TSUH_OFFSET 0x0710 /* PTP time stamp update high register offset */
#define GD32_ENET_PTP_TSUL_OFFSET 0x0714 /* PTP time stamp update low register offset */
#define GD32_ENET_PTP_TSADDEND_OFFSET 0x0718 /* PTP time stamp addend register offset */
#define GD32_ENET_PTP_ETH_OFFSET 0x071C /* PTP expected time high register offset */
#define GD32_ENET_PTP_ETL_OFFSET 0x0720 /* PTP expected time low register offset */
#define GD32_ENET_PTP_TSF_OFFSET 0x0728 /* PTP time stamp flag register offset */
#define GD32_ENET_PTP_PPSCTL_OFFSET 0x072C /* PTP PPS control register offset */
/* DMA Registers */
#define GD32_ENET_DMA_BCTL_OFFSET 0x1000 /* DMA bus control register offset */
#define GD32_ENET_DMA_TPEN_OFFSET 0x1004 /* DMA transmit poll enable register offset */
#define GD32_ENET_DMA_RPEN_OFFSET 0x1008 /* DMA receive poll enable register offset */
#define GD32_ENET_DMA_RDTADDR_OFFSET 0x100C /* DMA receive descriptor table address register offset */
#define GD32_ENET_DMA_TDTADDR_OFFSET 0x1010 /* DMA transmit descriptor table address register offset */
#define GD32_ENET_DMA_STAT_OFFSET 0x1014 /* DMA status register offset */
#define GD32_ENET_DMA_CTL_OFFSET 0x1018 /* DMA control register offset */
#define GD32_ENET_DMA_INTEN_OFFSET 0x101C /* DMA interrupt enable register offset */
#define GD32_ENET_DMA_MFBOCNT_OFFSET 0x1020 /* DMA missed frame and buffer overflow counter register offset */
#define GD32_ENET_DMA_RSWDC_OFFSET 0x1024 /* DMA receive state watchdog counter register offset */
#define GD32_ENET_DMA_CTDADDR_OFFSET 0x1048 /* DMA current transmit descriptor address register offset */
#define GD32_ENET_DMA_CRDADDR_OFFSET 0x104C /* DMA current receive descriptor address register offset */
#define GD32_ENET_DMA_CTBADDR_OFFSET 0x1050 /* DMA current transmit buffer address register offset */
#define GD32_ENET_DMA_CRBADDR_OFFSET 0x1054 /* DMA current receive buffer address register offset */
/* Register Base Addresses **************************************************/
/* MAC Registers */
#define GD32_ENET_MAC_CFG (GD32_ENET_BASE + GD32_ENET_MAC_CFG_OFFSET)
#define GD32_ENET_MAC_FRMF (GD32_ENET_BASE + GD32_ENET_MAC_FRMF_OFFSET)
#define GD32_ENET_MAC_HLH (GD32_ENET_BASE + GD32_ENET_MAC_HLH_OFFSET)
#define GD32_ENET_MAC_HLL (GD32_ENET_BASE + GD32_ENET_MAC_HLL_OFFSET)
#define GD32_ENET_MAC_PHY_CTL (GD32_ENET_BASE + GD32_ENET_MAC_PHY_CTL_OFFSET)
#define GD32_ENET_MAC_PHY_DATA (GD32_ENET_BASE + GD32_ENET_MAC_PHY_DATA_OFFSET)
#define GD32_ENET_MAC_FCTL (GD32_ENET_BASE + GD32_ENET_MAC_FCTL_OFFSET)
#define GD32_ENET_MAC_VLT (GD32_ENET_BASE + GD32_ENET_MAC_VLT_OFFSET)
#define GD32_ENET_MAC_RWFF (GD32_ENET_BASE + GD32_ENET_MAC_RWFF_OFFSET)
#define GD32_ENET_MAC_WUM (GD32_ENET_BASE + GD32_ENET_MAC_WUM_OFFSET)
#define GD32_ENET_MAC_DBG (GD32_ENET_BASE + GD32_ENET_MAC_DBG_OFFSET)
#define GD32_ENET_MAC_INTF (GD32_ENET_BASE + GD32_ENET_MAC_INTF_OFFSET)
#define GD32_ENET_MAC_INTMSK (GD32_ENET_BASE + GD32_ENET_MAC_INTMSK_OFFSET)
#define GD32_ENET_MAC_ADDR0H (GD32_ENET_BASE + GD32_ENET_MAC_ADDR0H_OFFSET)
#define GD32_ENET_MAC_ADDR0L (GD32_ENET_BASE + GD32_ENET_MAC_ADDR0L_OFFSET)
#define GD32_ENET_MAC_ADDR1H (GD32_ENET_BASE + GD32_ENET_MAC_ADDR1H_OFFSET)
#define GD32_ENET_MAC_ADDR1L (GD32_ENET_BASE + GD32_ENET_MAC_ADDR1L_OFFSET)
#define GD32_ENET_MAC_ADDT2H (GD32_ENET_BASE + GD32_ENET_MAC_ADDT2H_OFFSET)
#define GD32_ENET_MAC_ADDR2L (GD32_ENET_BASE + GD32_ENET_MAC_ADDR2L_OFFSET)
#define GD32_ENET_MAC_ADDR3H (GD32_ENET_BASE + GD32_ENET_MAC_ADDR3H_OFFSET)
#define GD32_ENET_MAC_ADDR3L (GD32_ENET_BASE + GD32_ENET_MAC_ADDR3L_OFFSET)
#define GD32_ENET_MAC_FCTH (GD32_ENET_BASE + GD32_ENET_MAC_FCTH_OFFSET)
/* MSC Registers */
#define GD32_ENET_MSC_CTL (GD32_ENET_BASE + GD32_ENET_MSC_CTL_OFFSET)
#define GD32_ENET_MSC_RINTF (GD32_ENET_BASE + GD32_ENET_MSC_RINTF_OFFSET)
#define GD32_ENET_MSC_TINTF (GD32_ENET_BASE + GD32_ENET_MSC_TINTF_OFFSET)
#define GD32_ENET_MSC_RINTMSK (GD32_ENET_BASE + GD32_ENET_MSC_RINTMSK_OFFSET)
#define GD32_ENET_MSC_TINTMSK (GD32_ENET_BASE + GD32_ENET_MSC_TINTMSK_OFFSET)
#define GD32_ENET_MSC_SCCNT (GD32_ENET_BASE + GD32_ENET_MSC_SCCNT_OFFSET)
#define GD32_ENET_MSC_MSCCNT (GD32_ENET_BASE + GD32_ENET_MSC_MSCCNT_OFFSET)
#define GD32_ENET_MSC_TGFCNT (GD32_ENET_BASE + GD32_ENET_MSC_TGFCNT_OFFSET)
#define GD32_ENET_MSC_RFCECNT (GD32_ENET_BASE + GD32_ENET_MSC_RFCECNT_OFFSET)
#define GD32_ENET_MSC_RFAECNT (GD32_ENET_BASE + GD32_ENET_MSC_RFAECNT_OFFSET)
#define GD32_ENET_MSC_RGUFCNT (GD32_ENET_BASE + GD32_ENET_MSC_RGUFCNT_OFFSET)
/* PTP Registers */
#define GD32_ENET_PTP_TSCTL (GD32_ENET_BASE + GD32_ENET_PTP_TSCTL_OFFSET)
#define GD32_ENET_PTP_SSINC (GD32_ENET_BASE + GD32_ENET_PTP_SSINC_OFFSET)
#define GD32_ENET_PTP_TSH (GD32_ENET_BASE + GD32_ENET_PTP_TSH_OFFSET)
#define GD32_ENET_PTP_TSL (GD32_ENET_BASE + GD32_ENET_PTP_TSL_OFFSET)
#define GD32_ENET_PTP_TSUH (GD32_ENET_BASE + GD32_ENET_PTP_TSUH_OFFSET)
#define GD32_ENET_PTP_TSUL (GD32_ENET_BASE + GD32_ENET_PTP_TSUL_OFFSET)
#define GD32_ENET_PTP_TSADDEND (GD32_ENET_BASE + GD32_ENET_PTP_TSADDEND_OFFSET)
#define GD32_ENET_PTP_ETH (GD32_ENET_BASE + GD32_ENET_PTP_ETH_OFFSET)
#define GD32_ENET_PTP_ETL (GD32_ENET_BASE + GD32_ENET_PTP_ETL_OFFSET)
#define GD32_ENET_PTP_TSF (GD32_ENET_BASE + GD32_ENET_PTP_TSF_OFFSET)
#define GD32_ENET_PTP_PPSCTL (GD32_ENET_BASE + GD32_ENET_PTP_PPSCTL_OFFSET)
/* DMA Registers */
#define GD32_ENET_DMA_BCTL (GD32_ENET_BASE + GD32_ENET_DMA_BCTL_OFFSET)
#define GD32_ENET_DMA_TPEN (GD32_ENET_BASE + GD32_ENET_DMA_TPEN_OFFSET)
#define GD32_ENET_DMA_RPEN (GD32_ENET_BASE + GD32_ENET_DMA_RPEN_OFFSET)
#define GD32_ENET_DMA_RDTADDR (GD32_ENET_BASE + GD32_ENET_DMA_RDTADDR_OFFSET)
#define GD32_ENET_DMA_TDTADDR (GD32_ENET_BASE + GD32_ENET_DMA_TDTADDR_OFFSET)
#define GD32_ENET_DMA_STAT (GD32_ENET_BASE + GD32_ENET_DMA_STAT_OFFSET)
#define GD32_ENET_DMA_CTL (GD32_ENET_BASE + GD32_ENET_DMA_CTL_OFFSET)
#define GD32_ENET_DMA_INTEN (GD32_ENET_BASE + GD32_ENET_DMA_INTEN_OFFSET)
#define GD32_ENET_DMA_MFBOCNT (GD32_ENET_BASE + GD32_ENET_DMA_MFBOCNT_OFFSET)
#define GD32_ENET_DMA_RSWDC (GD32_ENET_BASE + GD32_ENET_DMA_RSWDC_OFFSET)
#define GD32_ENET_DMA_CTDADDR (GD32_ENET_BASE + GD32_ENET_DMA_CTDADDR_OFFSET)
#define GD32_ENET_DMA_CRDADDR (GD32_ENET_BASE + GD32_ENET_DMA_CRDADDR_OFFSET)
#define GD32_ENET_DMA_CTBADDR (GD32_ENET_BASE + GD32_ENET_DMA_CTBADDR_OFFSET)
#define GD32_ENET_DMA_CRBADDR (GD32_ENET_BASE + GD32_ENET_DMA_CRBADDR_OFFSET)
/* Register Bit-Field Definitions */
/* MAC Registers */
/* MAC configuration register (GD32_ENET_MAC_CFG) */
#define ENET_MAC_CFG_REN (1 << 2) /* Bit 2: receiver enable */
#define ENET_MAC_CFG_TEN (1 << 3) /* Bit 3: transmitter enable */
#define ENET_MAC_CFG_DFC (1 << 4) /* Bit 4: defferal check */
#define ENET_MAC_CFG_BOL_SHIFT (5) /* Bits 5-6: back-off limit */
#define ENET_MAC_CFG_BOL_MASK (3 << ENET_MAC_CFG_BOL_SHIFT)
#define ENET_BACKOFFLIMIT_10 (0 << ENET_MAC_CFG_BOL_SHIFT) /* 00: k = min (n, 10) */
#define ENET_BACKOFFLIMIT_8 (1 << ENET_MAC_CFG_BOL_SHIFT) /* 01: k = min (n, 8) */
#define ENET_BACKOFFLIMIT_4 (2 << ENET_MAC_CFG_BOL_SHIFT) /* 10: k = min (n, 4) */
#define ENET_BACKOFFLIMIT_1 (3 << ENET_MAC_CFG_BOL_SHIFT) /* 11: k = min (n, 1) */
#define ENET_MAC_CFG_APCD (1 << 7) /* Bit 7: automatic pad/CRC drop */
#define ENET_MAC_CFG_RTD (1 << 9) /* Bit 9: retry disable */
#define ENET_MAC_CFG_IPFCO (1 << 10) /* Bit 10: IP frame checksum offload */
#define ENET_MAC_CFG_DPM (1 << 11) /* Bit 11: duplex mode */
#define ENET_MAC_CFG_LBM (1 << 12) /* Bit 12: loopback mode */
#define ENET_MAC_CFG_ROD (1 << 13) /* Bit 13: receive own disable */
#define ENET_MAC_CFG_SPD (1 << 14) /* Bit 14: fast ethernet speed */
#define ENET_MAC_CFG_CSD (1 << 16) /* Bit 16: carrier sense disable */
#define ENET_MAC_CFG_IGBS_SHIFT (17) /* Bits 17-19: inter-frame gap bit selection */
#define ENET_MAC_CFG_IGBS_MASK (7 << ENET_MAC_CFG_IGBS_SHIFT)
#define ENET_MAC_CFG_IGBS(n) ((12 - ((n) >> 3)) << ENET_MAC_CFG_IGBS_SHIFT) /* n bit times, n=40, 48,...96 */
#define ENET_MAC_CFG_JBD (1 << 22) /* Bit 22: jabber disable */
#define ENET_MAC_CFG_WDD (1 << 23) /* Bit 23: watchdog disable */
#define ENET_MAC_CFG_TFCD (1 << 25) /* Bit 25: type frame CRC dropping */
/* MAC frame filter register (GD32_ENET_MAC_FRMF) */
#define ENET_MAC_FRMF_PM (1 << 0) /* Bit 0: promiscuous mode */
#define ENET_MAC_FRMF_HUF (1 << 1) /* Bit 1: hash unicast filter */
#define ENET_MAC_FRMF_HMF (1 << 2) /* Bit 2: hash multicast filter */
#define ENET_MAC_FRMF_DAIFLT (1 << 3) /* Bit 3: destination address inverse filtering enable */
#define ENET_MAC_FRMF_MFD (1 << 4) /* Bit 4: multicast filter disable */
#define ENET_MAC_FRMF_BFRMD (1 << 5) /* Bit 5: broadcast frame disable */
#define ENET_MAC_FRMF_PCFRM_SHIFT (6) /* Bits 6-7: pass control frames */
#define ENET_MAC_FRMF_PCFRM_MASK (3 << ENET_MAC_FRMF_PCFRM_SHIFT)
#define ENET_PCFRM_PREVENT_ALL (0 << ENET_MAC_FRMF_PCFRM_SHIFT) /* prevents all control frames */
#define ENET_PCFRM_PREVENT_PAUSEFRAME (1 << ENET_MAC_FRMF_PCFRM_SHIFT) /* prevents all except Pause control frames */
#define ENET_PCFRM_FORWARD_ALL (2 << ENET_MAC_FRMF_PCFRM_SHIFT) /* forwards all control frames */
#define ENET_PCFRM_FORWARD_FILTERED (3 << ENET_MAC_FRMF_PCFRM_SHIFT) /* forwards all that pass address filter */
#define ENET_MAC_FRMF_SAIFLT (1 << 8) /* Bit 8: source address inverse filtering */
#define ENET_MAC_FRMF_SAFLT (1 << 9) /* Bit 9: source address filter */
#define ENET_MAC_FRMF_HPFLT (1 << 10) /* Bit 10: hash or perfect filter */
#define ENET_MAC_FRMF_FAR (1 << 31) /* Bit 31: receive all frames */
/* MAC hash list high registers (GD32_ENET_MAC_HLH) */
/* MAC hash list low registers (GD32_ENET_MAC_HLL) */
/* MAC PHY control register (GD32_ENET_MAC_PHY_CTL) */
#define ENET_MAC_PHY_CTL_PB (1 << 0) /* Bit 0: PHY busy */
#define ENET_MAC_PHY_CTL_PW (1 << 1) /* Bit 1: PHY write */
#define ENET_MAC_PHY_CTL_CLR_SHIFT (2) /* Bits 2-4: clock range */
#define ENET_MAC_PHY_CTL_CLR_MASK (7 << ENET_MAC_PHY_CTL_CLR_SHIFT)
#define ENET_MDC_HCLK_DIV42 (0 << ENET_MAC_PHY_CTL_CLR_SHIFT) /* 000 60-100 MHz HCLK/42 */
#define ENET_MDC_HCLK_DIV62 (1 << ENET_MAC_PHY_CTL_CLR_SHIFT) /* 001 100-150 MHz HCLK/62 */
#define ENET_MDC_HCLK_DIV16 (2 << ENET_MAC_PHY_CTL_CLR_SHIFT) /* 010 20-35 MHz HCLK/16 */
#define ENET_MDC_HCLK_DIV26 (3 << ENET_MAC_PHY_CTL_CLR_SHIFT) /* 011 35-60 MHz HCLK/26 */
#define ENET_MDC_HCLK_DIV102 (4 << ENET_MAC_PHY_CTL_CLR_SHIFT) /* 100 150-240 MHz HCLK/102 */
#define ENET_MAC_PHY_CTL_PR_SHIFT (6) /* Bits 6-10: PHY register */
#define ENET_MAC_PHY_CTL_PR_MASK (31 << ENET_MAC_PHY_CTL_PR_SHIFT)
#define ENET_MAC_PHY_CTL_PA_SHIFT (11) /* Bits 11-15: PHY address */
#define ENET_MAC_PHY_CTL_PA_MASK (31 << ENET_MAC_PHY_CTL_PA_SHIFT)
/* MAC PHY data register (GD32_ENET_MAC_PHY_DATA) */
#define ENET_MAC_PHY_DATA_PD_MASK (0xFFFF)
/* MAC flow control register (GD32_ENET_MAC_FCTL) */
#define ENET_MAC_FCTL_FLCBBKPA (1 << 0) /* Bit 0: flow control busy(in full duplex mode)/backpressure activate(in half duplex mode) */
#define ENET_MAC_FCTL_TFCEN (1 << 1) /* Bit 1: transmit flow control enable */
#define ENET_MAC_FCTL_RFCEN (1 << 2) /* Bit 2: receive flow control enable */
#define ENET_MAC_FCTL_UPFDT (1 << 3) /* Bit 3: unicast pause frame detect */
#define ENET_MAC_FCTL_PLTS_SHIFT (4) /* Bits 4-5: pause low threshold */
#define ENET_MAC_FCTL_PLTS_MASK (3 << ENET_MAC_FCTL_PLTS_SHIFT)
#define ENET_PAUSETIME_MINUS4 (0 << ENET_MAC_FCTL_PLTS_SHIFT) /* 00 pause time minus 4 slot times */
#define ENET_PAUSETIME_MINUS28 (1 << ENET_MAC_FCTL_PLTS_SHIFT) /* 01 pause time minus 28 slot times */
#define ENET_PAUSETIME_MINUS144 (2 << ENET_MAC_FCTL_PLTS_SHIFT) /* 10 pause time minus 144 slot times */
#define ENET_PAUSETIME_MINUS256 (3 << ENET_MAC_FCTL_PLTS_SHIFT) /* 11 pause time minus 256 slot times */
#define ENET_MAC_FCTL_DZQP (1 << 7) /* Bit 7: disable zero-quanta pause */
#define ENET_MAC_FCTL_PTM_SHIFT (16) /* Bits 16-31: pause time */
#define ENET_MAC_FCTL_PTM_MASK (0xFFFF << ENET_MAC_FCTL_PTM_SHIFT)
/* MAC VLAN tag register (GD32_ENET_MAC_VLT) */
#define ENET_MAC_VLT_VLTI_SHIFT (0) /* Bits 0-15: VLAN tag identifier(for receive frames) */
#define ENET_MAC_VLT_VLTI_MASK (0xFFFF << ENET_MAC_VLT_VLTI_SHIFT)
#define ENET_MAC_VLT_VLTC (1 << 16) /* Bit 16: 12-bit VLAN tag comparison */
/* MAC remote wakeup frame filter register (GD32_ENET_MAC_RWFF) */
/* MAC wakeup management register (GD32_ENET_MAC_WUM) */
#define ENET_MAC_WUM_PWD (1 << 0) /* Bit 0: power down */
#define ENET_MAC_WUM_MPEN (1 << 1) /* Bit 1: magic Packet enable */
#define ENET_MAC_WUM_WFEN (1 << 2) /* Bit 2: wakeup frame enable */
#define ENET_MAC_WUM_MPKR (1 << 5) /* Bit 5: magic packet received */
#define ENET_MAC_WUM_WUFR (1 << 6) /* Bit 6: wakeup frame received */
#define ENET_MAC_WUM_GU (1 << 9) /* Bit 9: global unicast */
#define ENET_MAC_WUM_WUFFRPR (1 << 31) /* Bit 31: wakeup frame filter register pointer reset */
/* MAC debug register (GD32_ENET_MAC_DBG) */
#define ENET_MAC_DBG_MRNI (1 << 0) /* Bit 0: MAC receive state not idle */
#define ENET_MAC_DBG_RXAFS_SHIFT (1) /* Bits 1-2: Rx asynchronous FIFO status */
#define ENET_MAC_DBG_RXAFS_MASK (3 << ENET_MAC_DBG_RXAFS_SHIFT)
#define ENET_MAC_DBG_RXFW (1 << 4) /* Bit 4: RxFIFO is writing */
#define ENET_MAC_DBG_RXFRS_SHIFT (5) /* Bits 5-6: RxFIFO read controller status */
#define ENET_MAC_DBG_RXFRS_MASK (3 << ENET_MAC_DBG_RXFRS_SHIFT)
#define ENET_MAC_DBG_RXFRS_IDLE (0 << ENET_MAC_DBG_RXFRS_SHIFT) /* 00: IDLE state */
#define ENET_MAC_DBG_RXFRS_RFRAME (1 << ENET_MAC_DBG_RXFRS_SHIFT) /* 01: reading frame data */
#define ENET_MAC_DBG_RXFRS_RSTATUS (2 << ENET_MAC_DBG_RXFRS_SHIFT) /* 10: reading frame status (or time-stamp) */
#define ENET_MAC_DBG_RXFRS_FLUSHING (3 << ENET_MAC_DBG_RXFRS_SHIFT) /* 11: flushing the frame data and status */
#define ENET_MAC_DBG_RXFS_SHIFT (8) /* Bits 8-9: rxFIFO fill level */
#define ENET_MAC_DBG_RXFS_MASK (3 << ENET_MAC_DBG_RXFS_SHIFT)
#define ENET_MAC_DBG_RXFS_EMPTY (0 << ENET_MAC_DBG_RXFS_SHIFT) /* 00: RxFIFO empty */
#define ENET_MAC_DBG_RXFS_DEACT (1 << ENET_MAC_DBG_RXFS_SHIFT) /* 01: RxFIFO fill-level below flow-control de-activate threshold */
#define ENET_MAC_DBG_RXFS_ACTIV (2 << ENET_MAC_DBG_RXFS_SHIFT) /* 10: RxFIFO fill-level above flow-control activate threshold */
#define ENET_MAC_DBG_RXFS_FULL (3 << ENET_MAC_DBG_RXFS_SHIFT) /* 11: RxFIFO full */
#define ENET_MAC_DBG_MTNI (1 << 16) /* Bit 16: MAC transmit state not idle */
#define ENET_MAC_DBG_SOMT_SHIFT (17) /* Bits 17-18: status of mac transmitter */
#define ENET_MAC_DBG_SOMT_MASK (3 << ENET_MAC_DBG_SOMT_SHIFT)
#define ENET_MAC_DBG_SOMT_IDLE (0 << ENET_MAC_DBG_SOMT_SHIFT) /* 00: idle */
#define ENET_MAC_DBG_SOMT_WAITING (1 << ENET_MAC_DBG_SOMT_SHIFT) /* 01: waiting for Status of previous frame or IFG/backoff period to be over */
#define ENET_MAC_DBG_SOMT_PAUSE (2 << ENET_MAC_DBG_SOMT_SHIFT) /* 10: generating and transmitting a Pause control frame */
#define ENET_MAC_DBG_SOMT_FRAME (3 << ENET_MAC_DBG_SOMT_SHIFT) /* 11: transferring input frame for transmission */
#define ENET_MAC_DBG_PCS (1 << 19) /* Bit 19: pause condition status */
#define ENET_MAC_DBG_TXFRS_SHIFT (20) /* Bits 20-21: TxFIFO read operation status */
#define ENET_MAC_DBG_TXFRS_MASK (3 << ENET_MAC_DBG_TXFRS_SHIFT)
#define ENET_MAC_DBG_TXFRS_IDLE (0 << ENET_MAC_DBG_TXFRS_SHIFT) /* 00: idle state */
#define ENET_MAC_DBG_TXFRS_READ (1 << ENET_MAC_DBG_TXFRS_SHIFT) /* 01: read state */
#define ENET_MAC_DBG_TXFRS_WAITING (2 << ENET_MAC_DBG_TXFRS_SHIFT) /* 10: waiting for TxStatus from MAC transmitter */
#define ENET_MAC_DBG_TXFRS_WRITING (3 << ENET_MAC_DBG_TXFRS_SHIFT) /* 11: writing the received TxStatus or flushing the TxFIFO */
#define ENET_MAC_DBG_TXFW (1 << 22) /* Bit 22: TxFIFO is writing */
#define ENET_MAC_DBG_TXFNE (1 << 24) /* Bit 24: TxFIFO not empty flag */
#define ENET_MAC_DBG_TXFF (1 << 25) /* Bit 25: TxFIFO full flag */
/* MAC interrupt flag register (GD32_ENET_MAC_INTF) */
#define ENET_MAC_INTF_WUM (1 << 3) /* Bit 3: WUM status */
#define ENET_MAC_INTF_MSC (1 << 4) /* Bit 4: MSC status */
#define ENET_MAC_INTF_MSCR (1 << 5) /* Bit 5: MSC receive status */
#define ENET_MAC_INTF_MSCT (1 << 6) /* Bit 6: MSC transmit status */
#define ENET_MAC_INTF_TMST (1 << 9) /* Bit 9: timestamp trigger status */
/* MAC interrupt mask register (GD32_ENET_MAC_INTMSK) */
#define ENET_MAC_INTMSK_WUMIM (1 << 3) /* Bit 3: PMT interrupt mask */
#define ENET_MAC_INTMSK_TMSTIM (1 << 9) /* Bit 9: Time stamp trigger interrupt mask */
#define ENET_MAC_INTMSK_ALLINTS (ENET_MAC_INTMSK_WUMIM | ENET_MAC_INTMSK_TMSTIM)
/* MAC address 0 high register (GD32_ENET_MAC_ADDR0H) */
#define ENET_MAC_ADDR0H_ADDR0H_SHIFT (0) /* Bits 0-15: MAC address0 high [47:32] */
#define ENET_MAC_ADDR0H_ADDR0H_MASK (0xFFFF << ENET_MAC_ADDR0H_ADDR0H_SHIFT)
#define ENET_MAC_ADDR0H_MO (1 << 31) /* Bit 31:always read 1 and must be kept */
/* MAC address 0 low register (GD32_ENET_MAC_ADDR0L) */
/* MAC address 1 high register (GD32_ENET_MAC_ADDR1H) */
#define ENET_MAC_ADDR1H_ADDR1H_SHIFT (0) /* Bits 0-15: MAC address1 high [47:32] */
#define ENET_MAC_ADDR1H_ADDR1H_MASK (0xFFFF << ENET_MAC_ADDR1H_ADDR1H_SHIFT)
#define ENET_MAC_ADDR1H_MB_SHIFT (24) /* Bits 24-29: mask byte control */
#define ENET_MAC_ADDR1H_MB_MASK (0x3F << ENET_MAC_ADDR1H_MB_SHIFT)
#define ENET_MAC_ADDR1H_MB_40_47 (0x20 << ENET_MAC_ADDR1H_MB_SHIFT) /* Bit 29: ENET_MAC_ADDR1H[8-15] */
#define ENET_MAC_ADDR1H_MB_32_39 (0x10 << ENET_MAC_ADDR1H_MB_SHIFT) /* Bit 28: ENET_MAC_ADDR1H[0-7] */
#define ENET_MAC_ADDR1H_MB_24_31 (0x08 << ENET_MAC_ADDR1H_MB_SHIFT) /* Bit 27: ENET_MAC_ADDR1L[24-31] */
#define ENET_MAC_ADDR1H_MB_16_23 (0x04 << ENET_MAC_ADDR1H_MB_SHIFT) /* Bit 26: ENET_MAC_ADDR1L[16-23] */
#define ENET_MAC_ADDR1H_MB_8_15 (0x02 << ENET_MAC_ADDR1H_MB_SHIFT) /* Bit 25: ENET_MAC_ADDR1L[8-15] */
#define ENET_MAC_ADDR1H_MB_0_7 (0x01 << ENET_MAC_ADDR1H_MB_SHIFT) /* Bit 24: ENET_MAC_ADDR1L[0-7] */
#define ENET_MAC_ADDR1H_SAF (1 << 30) /* Bit 30: source address filter */
#define ENET_MAC_ADDR1H_AFE (1 << 31) /* Bit 31: address filter enable */
/* MAC address 1 low register (GD32_ENET_MAC_ADDR1L) */
/* MAC address 2 high register (GD32_ENET_MAC_ADDR2H) */
#define ENET_MAC_ADDR2H_ADDR2H_SHIFT (0) /* Bits 0-15: MAC address2 high [47:32] */
#define ENET_MAC_ADDR2H_ADDR2H_MASK (0xFFFF << ENET_MAC_ADDR2H_ADDR2H_SHIFT)
#define ENET_MAC_ADDR2H_MB_SHIFT (24) /* Bits 24-29: Mask byte control */
#define ENET_MAC_ADDR2H_MB_MASK (0x3F << ENET_MAC_ADDR2H_MB_SHIFT)
#define ENET_MAC_ADDR2H_MB_40_47 (0x20 << ENET_MAC_ADDR2H_MB_SHIFT) /* Bit 29: ENET_MAC_ADDR2H[8-15] */
#define ENET_MAC_ADDR2H_MB_32_39 (0x10 << ENET_MAC_ADDR2H_MB_SHIFT) /* Bit 28: ENET_MAC_ADDR2H[0-7] */
#define ENET_MAC_ADDR2H_MB_24_31 (0x08 << ENET_MAC_ADDR2H_MB_SHIFT) /* Bit 27: ENET_MAC_ADDR2L[24-31] */
#define ENET_MAC_ADDR2H_MB_16_23 (0x04 << ENET_MAC_ADDR2H_MB_SHIFT) /* Bit 26: ENET_MAC_ADDR2L[16-23] */
#define ENET_MAC_ADDR2H_MB_8_15 (0x02 << ENET_MAC_ADDR2H_MB_SHIFT) /* Bit 25: ENET_MAC_ADDR2L[8-15] */
#define ENET_MAC_ADDR2H_MB_0_7 (0x01 << ENET_MAC_ADDR2H_MB_SHIFT) /* Bit 24: ENET_MAC_ADDR2L[0-7] */
#define ENET_MAC_ADDR2H_SAF (1 << 30) /* Bit 30: source address filter */
#define ENET_MAC_ADDR2H_AFE (1 << 31) /* Bit 31: address filter enable */
/* MAC address 2 low register (GD32_ENET_MAC_ADDR2L) */
/* MAC address 3 high register (GD32_ENET_MAC_ADDR3H) */
#define ENET_MAC_ADDR3H_ADDR3H_SHIFT (0) /* Bits 0-15: MAC address3 high [47:32] */
#define ENET_MAC_ADDR3H_ADDR3H_MASK (0xFFFF << ENET_MAC_ADDR3H_ADDR3H_SHIFT)
#define ENET_MAC_ADDR3H_MB_SHIFT (24) /* Bits 24-29: Mask byte control */
#define ENET_MAC_ADDR3H_MB_MASK (0x3F << ENET_MAC_ADDR3H_MB_SHIFT)
#define ENET_MAC_ADDR3H_MB_40_47 (0x20 << ENET_MAC_ADDR3H_MB_SHIFT) /* Bit 29: ENET_MAC_ADDR3H[8-15] */
#define ENET_MAC_ADDR3H_MB_32_39 (0x10 << ENET_MAC_ADDR3H_MB_SHIFT) /* Bit 28: ENET_MAC_ADDR3H[0-7] */
#define ENET_MAC_ADDR3H_MB_24_31 (0x08 << ENET_MAC_ADDR3H_MB_SHIFT) /* Bit 27: ENET_MAC_ADDR3L[24-31] */
#define ENET_MAC_ADDR3H_MB_16_23 (0x04 << ENET_MAC_ADDR3H_MB_SHIFT) /* Bit 26: ENET_MAC_ADDR3L[16-23] */
#define ENET_MAC_ADDR3H_MB_8_15 (0x02 << ENET_MAC_ADDR3H_MB_SHIFT) /* Bit 25: ENET_MAC_ADDR3L[8-15] */
#define ENET_MAC_ADDR3H_MB_0_7 (0x01 << ENET_MAC_ADDR3H_MB_SHIFT) /* Bit 24: ENET_MAC_ADDR3L[0-7] */
#define ENET_MAC_ADDR3H_SAF (1 << 30) /* Bit 30: source address filter */
#define ENET_MAC_ADDR3H_AFE (1 << 31) /* Bit 31: address filter enable */
/* MAC address 3 low register (GD32_ENET_MAC_ADDR3L) */
/* MAC flow control threshold register (GD32_ENET_MAC_FCTH) */
#define ENET_MAC_FCTH_RFA_SHIFT (0) /* Bits 0-2 threshold of active flow control */
#define ENET_MAC_FCTH_RFA_MASK (7 << ENET_MAC_FCTH_RFA_SHIFT)
#define ENET_MAC_FCTH_RFD_SHIFT (4) /* Bits 4-6 threshold of deactive flow control */
#define ENET_MAC_FCTH_RFD_MASK (7 << ENET_MAC_FCTH_RFD_SHIFT)
/* MSC Registers */
/* MSC control register (GD32_ENET_MSC_CTL) */
#define ENET_MSC_CTL_CTR (1 << 0) /* Bit 0: counter reset */
#define ENET_MSC_CTL_CTSR (1 << 1) /* Bit 1: counter stop rollover */
#define ENET_MSC_CTL_RTOR (1 << 2) /* Bit 2: reset on read */
#define ENET_MSC_CTL_MCFZ (1 << 3) /* Bit 3: MSC counter freeze */
#define ENET_MSC_CTL_PMC (1 << 4) /* Bit 4: preset MSC counter */
#define ENET_MSC_CTL_AFHPM (1 << 5) /* Bit 5: almost full or half preset mode */
/* MSC receive interrupt flag register (GD32_ENET_MSC_RINTF) */
#define ENET_MSC_RINTF_RFCE (1 << 5) /* Bit 5: received frames CRC error */
#define ENET_MSC_RINTF_RFAE (1 << 6) /* Bit 6: received frames alignment error */
#define ENET_MSC_RINTF_RGUF (1 << 17) /* Bit 17: received good unicast frames */
/* MSC transmit interrupt flag register (GD32_ENET_MSC_TINTF) */
#define ETH_MMCTI_TGFSC (1 << 14) /* Bit 14: transmitted good frames single collision */
#define ETH_MMCTI_TGFMSC (1 << 15) /* Bit 15: transmitted good frames more single collision */
#define ETH_MMCTI_TGF (1 << 21) /* Bit 21: transmitted good frames */
/* MSC receive interrupt mask register (GD32_ENET_MSC_RINTMSK) */
#define ENET_MSC_RINTMSK_RFCEIM (1 << 5) /* Bit 5: received frame CRC error interrupt mask */
#define ENET_MSC_RINTMSK_RFAEIM (1 << 6) /* Bit 6: received frames alignment error interrupt mask */
#define ENET_MSC_RINTMSK_RGUFIM (1 << 17) /* Bit 17: received good unicast frames interrupt mask */
/* MSC transmit interrupt mask register (GD32_ENET_MSC_TINTMSK) */
#define ENET_MSC_TINTMSK_TGFSCIM (1 << 14) /* Bit 14: received frame CRC error interrupt mask */
#define ENET_MSC_TINTMSK_TGFMSCIM (1 << 15) /* Bit 15: received frames alignment error interrupt mask */
#define ENET_MSC_TINTMSK_TGFIM (1 << 21) /* Bit 21: received good unicast frames interrupt mask */
/* MSC transmitted good frames after a single collision counter register
* (GD32_ENET_MSC_SCCNT)
*/
/* MSC transmitted good frames after more than a single collision counter
* register (GD32_ENET_MSC_MSCCNT)
*/
/* MSC transmitted good frames counter register (GD32_ENET_MSC_TGFCNT) */
/* MSC received frames with CRC error counter register
* (GD32_ENET_MSC_RFCECNT)
*/
/* MSC received frames with alignment error counter register
* (GD32_ENET_MSC_RFAECNT)
*/
/* MSC received good unicast frames counter register
* (GD32_ENET_MSC_RGUFCNT)
*/
/* PTP Registers */
/* PTP time stamp control register (GD32_ENET_PTP_TSCTL) */
#define ENET_PTP_TSCTL_TMSEN (1 << 0) /* Bit 0: timestamp enable */
#define ENET_PTP_TSCTL_TMSFCU (1 << 1) /* Bit 1: timestamp fine or coarse update */
#define ENET_PTP_TSCTL_TMSSTI (1 << 2) /* Bit 2: timestamp system time initialize */
#define ENET_PTP_TSCTL_TMSSTU (1 << 3) /* Bit 3: timestamp system time update */
#define ENET_PTP_TSCTL_TMSITEN (1 << 4) /* Bit 4: timestamp interrupt trigger enable */
#define ENET_PTP_TSCTL_TMSARU (1 << 5) /* Bit 5: timestamp addend register update */
#define ENET_PTP_TSCTL_ARFSEN (1 << 8) /* Bit 8: all received frames snapshot enable */
#define ENET_PTP_TSCTL_SCROM (1 << 9) /* Bit 9: subsecond counter rollover mode */
#define ENET_PTP_TSCTL_PFSV (1 << 10) /* Bit 10: PTP frame snooping version */
#define ENET_PTP_TSCTL_ESEN (1 << 11) /* Bit 11: received Ethernet snapshot enable */
#define ENET_PTP_TSCTL_IP6SEN (1 << 12) /* Bit 12: received IPv6 snapshot enable */
#define ENET_PTP_TSCTL_IP4SEN (1 << 13) /* Bit 13: received IPv4 snapshot enable */
#define ENET_PTP_TSCTL_ETMSEN (1 << 14) /* Bit 14: received event type message snapshot enable */
#define ENET_PTP_TSCTL_MNMSEN (1 << 15) /* Bit 15: received master node message snapshot enable */
#define ENET_PTP_TSCTL_CKNT_SHIFT (16) /* Bits 16-17: clock node type for time stamp */
#define ENET_PTP_TSCTL_CKNT_MASK (3 << ENET_PTP_TSCTL_CKNT_SHIFT)
#define ENET_CKNT_ORDINARY (0 << ENET_PTP_TSCTL_CKNT_SHIFT) /* 00: ordinary clock */
#define ENET_CKNT_BOUNDARY (1 << ENET_PTP_TSCTL_CKNT_SHIFT) /* 01: boundary clock */
#define ENET_CKNT_END_TO_END (2 << ENET_PTP_TSCTL_CKNT_SHIFT) /* 10: end-to-end transparent clock */
#define ENET_CKNT_PEER_TO_PEER (3 << ENET_PTP_TSCTL_CKNT_SHIFT) /* 11: peer-to-peer transparent clock */
#define ENET_PTP_TSCTL_MAFEN (1 << 18) /* Bit 18: MAC address filter enable for PTP frame */
/* PTP subsecond increment register (GD32_ENET_PTP_SSINC) */
#define ENET_PTP_SSINC_STMSSI_MASK (0xFF)
/* PTP time stamp high register (GD32_ENET_PTP_TSH) */
/* PTP time stamp low register (GD32_ENET_PTP_TSL) */
#define ENET_PTP_TSL_STMSS_MASK (0x7FFFFFFF) /* Bits 0-30: system time subseconds */
#define ENET_PTP_TSL_STS (1 << 31) /* Bit 31: system time sign */
/* PTP time stamp update high register (GD32_ENET_PTP_TSUH) */
/* PTP time stamp update low register (GD32_ENET_PTP_TSUL) */
#define ENET_PTP_TSUL_TMSUSS_MASK (0x7FFFFFFF) /* Bits 0-30: timestamp update subseconds */
#define ENET_PTP_TSUL_TMSUPNS (1 << 31) /* Bit 31: timestamp update positive or negative sign */
/* PTP time stamp addend register (GD32_ENET_PTP_TSADDAND) */
/* PTP expected time high register (GD32_ENET_PTP_ETH) */
/* PTP expected time low register (GD32_ENET_PTP_ETL) */
/* PTP time stamp flag register (GD32_ENET_PTP_TSF) */
#define ENET_PTP_TSF_TSSCO (1 << 0) /* Bit 0: timestamp second counter overflow */
#define ENET_PTP_TSF_TTM (1 << 1) /* Bit 1: target time match */
/* PTP PPS control register (GD32_ENET_PTP_PPSCTL) */
#define ENET_PTP_PPSCTL_PPSOFC_SHIFT (0) /* Bits 0-3: PPS output frequency configuration */
#define ENET_PTP_PPSCTL_PPSOFC_MASK (15 << ENET_PTP_PPSCTL_PPSOFC_SHIFT)
#define ENET_PPSOFC_1HZ (0 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 1Hz frequency */
#define ENET_PPSOFC_2HZ (1 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 2Hz frequency */
#define ENET_PPSOFC_4HZ (2 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 4Hz frequency */
#define ENET_PPSOFC_8HZ (3 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 8Hz frequency */
#define ENET_PPSOFC_16HZ (4 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 16Hz frequency */
#define ENET_PPSOFC_32HZ (5 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 32Hz frequency */
#define ENET_PPSOFC_64HZ (6 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 64Hz frequency */
#define ENET_PPSOFC_128HZ (7 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 128Hz frequency */
#define ENET_PPSOFC_256HZ (8 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 256Hz frequency */
#define ENET_PPSOFC_512HZ (9 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 512Hz frequency */
#define ENET_PPSOFC_1KHZ (10 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 1024Hz frequency */
#define ENET_PPSOFC_2KHZ (11 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 2048Hz frequency */
#define ENET_PPSOFC_4KHZ (12 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 4096Hz frequency */
#define ENET_PPSOFC_8KHZ (13 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 8192Hz frequency */
#define ENET_PPSOFC_16KHZ (14 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 16384Hz frequency */
#define ENET_PPSOFC_32KHZ (15 << ENET_PTP_PPSCTL_PPSOFC_SHIFT) /* PPS output 32768Hz frequency */
/* DMA Registers */
/* DMA bus control register (GD32_ENET_DMA_BCTL) */
#define ENET_DMA_BCTL_SWR (1 << 0) /* Bit 0: software reset */
#define ENET_DMA_BCTL_DAB (1 << 1) /* Bit 1: DMA arbitration */
#define ENET_DMA_BCTL_DPSL_SHIFT (2) /* Bits 2-6: descriptor skip length */
#define ENET_DMA_BCTL_DPSL_MASK (31 << ENET_DMA_BCTL_DPSL_SHIFT)
#define ENET_DMA_BCTL_DPSL(n) ((n) << ENET_DMA_BCTL_DPSL_SHIFT)
#define ENET_DMA_BCTL_DFM (1 << 7) /* Bit 7: descriptor format mode */
#define ENET_DMA_BCTL_PGBL_SHIFT (8) /* Bits 8-13: programmable burst length */
#define ENET_DMA_BCTL_PGBL_MASK (0x3F << ENET_DMA_BCTL_PGBL_SHIFT)
#define ENET_DMA_BCTL_PGBL(n) ((n) << ENET_DMA_BCTL_PGBL_SHIFT) /* n = 1, 2, 4, 8, 16, 32 */
#define ENET_DMA_BCTL_RTPR_SHIFT (14) /* Bits 14-15: Rx Tx priority ratio */
#define ENET_DMA_BCTL_RTPR_MASK (3 << ENET_DMA_BCTL_RTPR_SHIFT)
#define ENET_ARBITRATION_RXTX_1_1 (0 << ENET_DMA_BCTL_RTPR_SHIFT) /* receive and transmit priority ratio is 1:1 */
#define ENET_ARBITRATION_RXTX_2_1 (1 << ENET_DMA_BCTL_RTPR_SHIFT) /* receive and transmit priority ratio is 2:1 */
#define ENET_ARBITRATION_RXTX_3_1 (2 << ENET_DMA_BCTL_RTPR_SHIFT) /* receive and transmit priority ratio is 3:1 */
#define ENET_ARBITRATION_RXTX_4_1 (3 << ENET_DMA_BCTL_RTPR_SHIFT) /* receive and transmit priority ratio is 4:1 */
#define ENET_DMA_BCTL_FB (1 << 16) /* Bit 16: fixed burst */
#define ENET_DMA_BCTL_RXDP_SHIFT (17) /* Bits 17-22: Rx DMA PGBL */
#define ENET_DMA_BCTL_RXDP_MASK (0x3F << ENET_DMA_BCTL_RXDP_SHIFT)
#define ENET_DMA_BCTL_RXDP(n) ((n) << ENET_DMA_BCTL_RXDP_SHIFT) /* n = 1, 2, 4, 8, 16, 32 */
#define ENET_DMA_BCTL_UIP (1 << 23) /* Bit 23: use independent PGBL */
#define ENET_DMA_BCTL_FPBL (1 << 24) /* Bit 24: four times PGBL mod */
#define ENET_DMA_BCTL_AA (1 << 25) /* Bit 25: address-aligned */
#define ENET_DMA_BCTL_MB (1 << 26) /* Bit 26: mixed burst */
/* DMA transmit poll enable register (GD32_ENET_DMA_TPEN) */
/* DMA receive poll enable register (GD32_ENET_DMA_RPEN) */
/* DMA receive descriptor table address register (GD32_ENET_DMA_RDTADDR) */
/* DMA transmit descriptor table address register (GD32_ENET_DMA_TDTADDR) */
/* DMA status register (GD32_ENET_DMA_STAT) */
#define ENET_DMA_STAT_TS (1 << 0) /* Bit 0: transmit status */
#define ENET_DMA_STAT_TPS (1 << 1) /* Bit 1: transmit process stopped status */
#define ENET_DMA_STAT_TBU (1 << 2) /* Bit 2: transmit buffer unavailable status */
#define ENET_DMA_STAT_TJT (1 << 3) /* Bit 3: transmit jabber timeout status */
#define ENET_DMA_STAT_RO (1 << 4) /* Bit 4: receive overflow status */
#define ENET_DMA_STAT_TU (1 << 5) /* Bit 5: transmit underflow status */
#define ENET_DMA_STAT_RS (1 << 6) /* Bit 6: receive status */
#define ENET_DMA_STAT_RBU (1 << 7) /* Bit 7: receive buffer unavailable status */
#define ENET_DMA_STAT_RPS (1 << 8) /* Bit 8: receive process stopped status */
#define ENET_DMA_STAT_RWT (1 << 9) /* Bit 9: receive watchdog timeout status */
#define ENET_DMA_STAT_ET (1 << 10) /* Bit 10: early transmit status */
#define ENET_DMA_STAT_FBE (1 << 13) /* Bit 13: fatal bus error status */
#define ENET_DMA_STAT_ER (1 << 14) /* Bit 14: early receive status */
#define ENET_DMA_STAT_AI (1 << 15) /* Bit 15: abnormal interrupt summary */
#define ENET_DMA_STAT_NI (1 << 16) /* Bit 16: normal interrupt summary */
#define ENET_DMA_STAT_RP_SHIFT (17) /* Bits 17-19: receive process state */
#define ENET_DMA_STAT_RP_MASK (7 << ENET_DMA_STAT_RP_SHIFT)
#define ENET_RX_STATE_STOPPED (0 << ENET_DMA_STAT_RP_SHIFT) /* 000: reset or stop rx command issued */
#define ENET_RX_STATE_FETCHING (1 << ENET_DMA_STAT_RP_SHIFT) /* 001: fetching the Rx descriptor */
#define ENET_RX_STATE_WAITING (3 << ENET_DMA_STAT_RP_SHIFT) /* 011: waiting for receive packet */
#define ENET_RX_STATE_SUSPENDED (4 << ENET_DMA_STAT_RP_SHIFT) /* 100: Rx descriptor unavailable */
#define ENET_RX_STATE_CLOSING (5 << ENET_DMA_STAT_RP_SHIFT) /* 101: closing receive descriptor */
#define ENET_RX_STATE_QUEUING (6 << ENET_DMA_STAT_RP_SHIFT) /* 111: transferring the receive packet data from recevie buffer to host memory */
#define ENET_DMA_STAT_TP_SHIFT (20) /* Bits 20-22: transmit process state */
#define ENET_DMA_STAT_TP_MASK (7 << ENET_DMA_STAT_TP_SHIFT)
#define ENET_TX_STATE_STOPPED (0 << ENET_DMA_STAT_TP_SHIFT) /* 000: reset or stop Tx Command issued */
#define ENET_TX_STATE_FETCHING (1 << ENET_DMA_STAT_TP_SHIFT) /* 001: fetching the Tx descriptor */
#define ENET_TX_STATE_WAITING (2 << ENET_DMA_STAT_TP_SHIFT) /* 010: waiting for status */
#define ENET_TX_STATE_READING (3 << ENET_DMA_STAT_TP_SHIFT) /* 011: reading the data from host memory buffer and queuing it to transmit buffer */
#define ENET_TX_STATE_SUSPENDED (6 << ENET_DMA_STAT_TP_SHIFT) /* 110: Tx descriptor unavailabe or transmit buffer underflow */
#define ENET_TX_STATE_CLOSING (7 << ENET_DMA_STAT_TP_SHIFT) /* 111: closing Tx descriptor */
#define ENET_DMA_STAT_EB_SHIFT (23) /* Bits 23-25: error bits status */
#define ENET_DMA_STAT_EB_MASK (7 << ENET_DMA_STAT_EB_SHIFT)
#define ENET_ERROR_TXDATA_TRANSFER (1 << ENET_DMA_STAT_EB_SHIFT) /* Bit 23 1 error during data transfer by TxDMA or RxDMA */
#define ENET_ERROR_READ_TRANSFER (2 << ENET_DMA_STAT_EB_SHIFT) /* Bit 24 1 error during write transfer or read transfer */
#define ENET_ERROR_DESC_ACCESS (4 << ENET_DMA_STAT_EB_SHIFT) /* Bit 25 1 error during descriptor or buffer access */
#define ENET_DMA_STAT_MSC (1 << 27) /* Bit 27: MSC status */
#define ENET_DMA_STAT_WUM (1 << 28) /* Bit 28: WUM status */
#define ENET_DMA_STAT_TST (1 << 29) /* Bit 29: timestamp trigger status */
/* DMA control register (GD32_ENET_DMA_CTL) */
#define ENET_DMA_CTL_SRE (1 << 1) /* Bit 1: start/stop receive enable */
#define ENET_DMA_CTL_OSF (1 << 2) /* Bit 2: operate on second frame */
#define ENET_DMA_CTL_RTHC_SHIFT (3) /* Bits 3-4: receive threshold control */
#define ENET_DMA_CTL_RTHC_MASK (3 << ENET_DMA_CTL_RTHC_SHIFT)
#define ENET_RX_THRESHOLD_64BYTES (0 << ENET_DMA_CTL_RTHC_SHIFT) /* threshold level is 64 Bytes */
#define ENET_RX_THRESHOLD_32BYTES (1 << ENET_DMA_CTL_RTHC_SHIFT) /* threshold level is 32 Bytes */
#define ENET_RX_THRESHOLD_96BYTES (2 << ENET_DMA_CTL_RTHC_SHIFT) /* threshold level is 96 Bytes */
#define ENET_RX_THRESHOLD_128BYTES (3 << ENET_DMA_CTL_RTHC_SHIFT) /* threshold level is 128 Bytes */
#define ENET_DMA_CTL_FUF (1 << 6) /* Bit 6: forward undersized good frames */
#define ENET_DMA_CTL_FERF (1 << 7) /* Bit 7: forward error frames */
#define ENET_DMA_CTL_STE (1 << 13) /* Bit 13: start/stop transmission enable */
#define ENET_DMA_CTL_TTHC_SHIFT (14) /* Bits 14-16: transmit threshold control */
#define ENET_DMA_CTL_TTHC_MASK (7 << ENET_DMA_CTL_TTHC_SHIFT)
#define ENET_TX_THRESHOLD_64BYTES (0 << ENET_DMA_CTL_TTHC_SHIFT) /* threshold level is 64 Bytes */
#define ENET_TX_THRESHOLD_128BYTES (1 << ENET_DMA_CTL_TTHC_SHIFT) /* threshold level is 128 Bytes */
#define ENET_TX_THRESHOLD_192BYTES (2 << ENET_DMA_CTL_TTHC_SHIFT) /* threshold level is 192 Bytes */
#define ENET_TX_THRESHOLD_256BYTES (3 << ENET_DMA_CTL_TTHC_SHIFT) /* threshold level is 256 Bytes */
#define ENET_TX_THRESHOLD_40BYTES (4 << ENET_DMA_CTL_TTHC_SHIFT) /* threshold level is 40 Bytes */
#define ENET_TX_THRESHOLD_32BYTES (5 << ENET_DMA_CTL_TTHC_SHIFT) /* threshold level is 32 Bytes */
#define ENET_TX_THRESHOLD_24BYTES (6 << ENET_DMA_CTL_TTHC_SHIFT) /* threshold level is 24 Bytes */
#define ENET_TX_THRESHOLD_16BYTES (7 << ENET_DMA_CTL_TTHC_SHIFT) /* threshold level is 16 Bytes */
#define ENET_DMA_CTL_FTF (1 << 20) /* Bit 20: flush transmit FIFO */
#define ENET_DMA_CTL_TSFD (1 << 21) /* Bit 21: transmit store-and-forward */
#define ENET_DMA_CTL_DAFRF (1 << 24) /* Bit 24: disable flushing of received frames */
#define ENET_DMA_CTL_RSFD (1 << 25) /* Bit 25: receive store-and-forward */
#define ENET_DMA_CTL_DTCERFD (1 << 26) /* Bit 26: dropping of TCP/IP checksum error frames disable */
/* DMA interrupt enable register (GD32_ENET_DMA_INTEN) */
#define ENET_DMA_INTEN_TIE (1 << 0) /* Bit 0: transmit interrupt enable */
#define ENET_DMA_INTEN_TPSIE (1 << 1) /* Bit 1: transmit process stopped interrupt enable */
#define ENET_DMA_INTEN_TBUIE (1 << 2) /* Bit 2: transmit buffer unavailable interrupt enable */
#define ENET_DMA_INTEN_TJTIE (1 << 3) /* Bit 3: transmit jabber timeout interrupt enable */
#define ENET_DMA_INTEN_ROIE (1 << 4) /* Bit 4: receive overflow interrupt enable */
#define ENET_DMA_INTEN_TUIE (1 << 5) /* Bit 5: transmit underflow interrupt enable */
#define ENET_DMA_INTEN_RIE (1 << 6) /* Bit 6: receive interrupt enable */
#define ENET_DMA_INTEN_RBUIE (1 << 7) /* Bit 7: receive buffer unavailable interrupt enable */
#define ENET_DMA_INTEN_RPSIE (1 << 8) /* Bit 8: receive process stopped interrupt enable */
#define ENET_DMA_INTEN_RWTIE (1 << 9) /* Bit 9: receive watchdog timeout interrupt enable */
#define ENET_DMA_INTEN_ETIE (1 << 10) /* Bit 10: early transmit interrupt enable */
#define ENET_DMA_INTEN_FBEIE (1 << 13) /* Bit 13: fatal bus error interrupt enable */
#define ENET_DMA_INTEN_ERIE (1 << 14) /* Bit 14: early receive interrupt enable */
#define ENET_DMA_INTEN_AIE (1 << 15) /* Bit 15: abnormal interrupt summary enable */
#define ENET_DMA_INTEN_NIE (1 << 16) /* Bit 16: normal interrupt summary enable */
/* DMA missed frame and buffer overflow counter register
* (GD32_ENET_DMA_MFBOCNT)
*/
#define ENET_DMA_MFBOCNT_MSFC_SHIFT (0) /* Bits 0-15: missed frames by the controller */
#define ENET_DMA_MFBOCNT_MSFC_MASK (0xFFFF << ENET_DMA_MFBOCNT_MSFC_SHIFT)
#define ENET_DMA_MFBOCNT_MSFA_SHIFT (17) /* Bits 17-27: missed frames by the application */
#define ENET_DMA_MFBOCNT_MSFA_MASK (0x7FF << ENET_DMA_MFBOCNT_MSFC_SHIFT)
/* DMA receive state watchdog counter register (GD32_ENET_DMA_RSWDC) */
#define ETH_DMARSWTR_MASK (0xFF)
/* DMA current transmit descriptor address register (GD32_ENET_DMA_CTDADDR) */
/* DMA current receive descriptor address register (GD32_ENET_DMA_CRDADDR) */
/* DMA current transmit buffer address register (GD32-ENET_DMA_CTBADDR) */
/* DMA current receive buffer address register (GD32_ENET_DMA_CRBADDR) */
/* DMA Descriptors */
/* ENET DMA Tx descriptor TDES0 */
#define ENET_TDES0_DB (1 << 0) /* Bit 0: deferred */
#define ENET_TDES0_UFE (1 << 1) /* Bit 1: underflow error */
#define ENET_TDES0_EXD (1 << 2) /* Bit 2: excessive deferral */
#define ENET_TDES0_COCNT_SHIFT (3) /* Bits 3-6: collision count */
#define ENET_TDES0_COCNT_MASK (15 << ENET_TDES0_COCNT_SHIFT)
#define ENET_TDES0_VFRM (1 << 7) /* Bit 7: VLAN frame */
#define ENET_TDES0_ECO (1 << 8) /* Bit 8: excessive collision */
#define ENET_TDES0_LCO (1 << 9) /* Bit 9: late collision */
#define ENET_TDES0_NCA (1 << 10) /* Bit 10: no carrier */
#define ENET_TDES0_LCA (1 << 11) /* Bit 11: loss of carrier */
#define ENET_TDES0_IPPE (1 << 12) /* Bit 12: IP payload error */
#define ENET_TDES0_FRMF (1 << 13) /* Bit 13: frame flushed */
#define ENET_TDES0_JT (1 << 14) /* Bit 14: jabber timeout */
#define ENET_TDES0_ES (1 << 15) /* Bit 15: error summaryy */
#define ENET_TDES0_IPHE (1 << 16) /* Bit 16: IP header error */
#define ENET_TDES0_TTMSS (1 << 17) /* Bit 17: transmit timestamp status */
#define ENET_TDES0_TCHM (1 << 20) /* Bit 20: the second address chained mode */
#define ENET_TDES0_TERM (1 << 21) /* Bit 21: transmit end of ring mode */
#define ENET_TDES0_CM_SHIFT (22) /* Bits 22-23: checksum mode */
#define ENET_TDES0_CM_MASK (3 << ENET_TDES0_CM_SHIFT)
#define ENET_CHECKSUM_DISABLE (0 << ENET_TDES0_CM_SHIFT) /* checksum insertion disabled */
#define ENET_CHECKSUM_IPV4HEADER (1 << ENET_TDES0_CM_SHIFT) /* only IP header checksum calculation and insertion are enabled */
#define ENET_CHECKSUM_TCPUDPICMP_SEGMENT (2 << ENET_TDES0_CM_SHIFT) /* TCP/UDP/ICMP checksum insertion calculated but pseudo-header */
#define ENET_CHECKSUM_TCPUDPICMP_FULL (3 << ENET_TDES0_CM_SHIFT) /* TCP/UDP/ICMP checksum insertion fully calculated */
#define ENET_TDES0_TTSEN (1 << 25) /* Bit 25: transmit timestamp function enable */
#define ENET_TDES0_DPAD (1 << 26) /* Bit 26: disable adding pad */
#define ENET_TDES0_DCRC (1 << 27) /* Bit 27: disable CRC */
#define ENET_TDES0_FSG (1 << 28) /* Bit 28: first segment */
#define ENET_TDES0_LSG (1 << 29) /* Bit 29: last segment */
#define ENET_TDES0_INTC (1 << 30) /* Bit 30: interrupt on completion */
#define ENET_TDES0_DAV (1 << 31) /* Bit 31: DAV bit */
/* ENET DMA Tx descriptor TDES1 */
#define ENET_TDES1_TB1S_SHIFT (0) /* Bits 0-12: transmit buffer 1 size */
#define ENET_TDES1_TB1S_MASK (0x1FFF << ENET_TDES1_TB1S_SHIFT)
#define ENET_TDES1_TB2S_SHIFT (16) /* Bits 16-28: transmit buffer 2 size */
#define ENET_TDES1_TB2S_MASK (0x1FFF << ENET_TDES1_TB2S_SHIFT)
/* ENET DMA Tx descriptor TDES2 (32-bit address) */
/* ENET DMA Tx descriptor TDES3 (32-bit address) */
/* ENET DMA Tx descriptor TDES6 (32-bit time stamp) */
/* ENET DMA Tx descriptor TDES7 (32-bit time stamp) */
/* ENET DMA Rx descriptor RDES0 */
#define ENET_RDES0_PCERR (1 << 0) /* Bit 0: payload checksum error */
#define ENET_RDES0_EXSV (1 << 0) /* Bit 0: extended status valid */
#define ENET_RDES0_CERR (1 << 1) /* Bit 1: CRC error */
#define ENET_RDES0_DBERR (1 << 2) /* Bit 2: dribble bit error */
#define ENET_RDES0_RERR (1 << 3) /* Bit 3: receive error */
#define ENET_RDES0_RWDT (1 << 4) /* Bit 4: receive watchdog timeout */
#define ENET_RDES0_FRMT (1 << 5) /* Bit 5: frame type */
#define ENET_RDES0_LCO (1 << 6) /* Bit 6: late collision */
#define ENET_RDES0_IPHERR (1 << 7) /* Bit 7: IP frame header error */
#define ENET_RDES0_TSV (1 << 7) /* Bit 7: timestamp valid */
#define ENET_RDES0_LDES (1 << 8) /* Bit 8: last descriptor */
#define ENET_RDES0_FDES (1 << 9) /* Bit 9: first descriptor */
#define ENET_RDES0_VTAG (1 << 10) /* Bit 10: VLAN tag */
#define ENET_RDES0_OERR (1 << 11) /* Bit 11: overflow Error */
#define ENET_RDES0_LERR (1 << 12) /* Bit 12: length error */
#define ENET_RDES0_SAFF (1 << 13) /* Bit 13: source address filter fail */
#define ENET_RDES0_DERR (1 << 14) /* Bit 14: descriptor error */
#define ENET_RDES0_ERRS (1 << 15) /* Bit 15: error summary */
#define ENET_RDES0_FRML_SHIFT (16) /* Bits 16-29: frame length */
#define ENET_RDES0_FRML_MASK (0x3FFF << ENET_RDES0_FRML_SHIFT)
#define ENET_RDES0_DAFF (1 << 30) /* Bit 30: destination address filter fail */
#define ENET_RDES0_DAV (1 << 31) /* Bit 31: descriptor available */
/* ENET DMA Rx descriptor RDES1 */
#define ENET_RDES1_RB1S_SHIFT (0) /* Bits 0-12: receive buffer 1 size */
#define ENET_RDES1_RB1S_MASK (0x1FFF << ENET_RDES1_RB1S_SHIFT)
#define ENET_RDES1_RCHM (1 << 14) /* Bit 14: receive chained mode for second address */
#define ENET_RDES1_RERM (1 << 15) /* Bit 15: receive end of ring mode */
#define ENET_RDES1_RB2S_SHIFT (16) /* Bits 16-28: receive buffer 2 size */
#define ENET_RDES1_RB2S_MASK (0x1FFF << ENET_RDES1_RB2S_SHIFT)
#define ENET_RDES1_DINTC (1 << 31) /* Bit 31: disable interrupt on completion */
/* ENET DMA Rx descriptor RDES2 (32-bit address) */
/* ENET DMA Rx descriptor RDES3 (32-bit address) */
/* ENET DMA Rx descriptor RDES4 */
#define ENET_RDES4_IPPLDT_SHIFT (0) /* Bits 0-2: IP frame payload type */
#define ENET_RDES4_IPPLDT_MASK (7 << ENET_RDES4_IPPLDT_SHIFT)
#define ENET_RDES4_IPPLDT_UDP (1 << ENET_RDES4_IPPLDT_SHIFT) /* UDP payload in IP datagram */
#define ENET_RDES4_IPPLDT_TCP (2 << ENET_RDES4_IPPLDT_SHIFT) /* TCP payload in IP datagram */
#define ENET_RDES4_IPPLDT_ICMP (3 << ENET_RDES4_IPPLDT_SHIFT) /* ICMP payload in IP datagram */
#define ENET_RDES4_IPHERR (1 << 3) /* Bit 3: IP frame header error */
#define ENET_RDES4_IPPLDERR (1 << 4) /* Bit 4: IP frame payload error */
#define ENET_RDES4_IPCKSB (1 << 5) /* Bit 5: IP frame checksum bypassed */
#define ENET_RDES4_IPF4 (1 << 6) /* Bit 6: IP frame in version 4 */
#define ENET_RDES4_IPF6 (1 << 7) /* Bit 7: IP frame in version 6 */
#define ENET_RDES4_PTPMT_SHIFT (8) /* Bits 8-11: PTP message type */
#define ENET_RDES4_PTPMT_MASK (15 << ENET_RDES4_PTPMT_SHIFT)
#define ENET_RDES4_PTPMT_NONE (0 << ENET_RDES4_PTPMT_SHIFT) /* No PTP message received */
#define ENET_RDES4_PTPMT_SYNC (1 << ENET_RDES4_PTPMT_SHIFT) /* SYNC (all clock types) */
#define ENET_RDES4_PTPMT_FOLLOWUP (2 << ENET_RDES4_PTPMT_SHIFT) /* Follow_Up (all clock types) */
#define ENET_RDES4_PTPMT_DELAYREQ (3 << ENET_RDES4_PTPMT_SHIFT) /* Delay_Req (all clock types) */
#define ENET_RDES4_PTPMT_DELAYRESP (4 << ENET_RDES4_PTPMT_SHIFT) /* Delay_Resp (all clock types) */
#define ENET_RDES4_PTPMT_PDELREQAM (5 << ENET_RDES4_PTPMT_SHIFT) /* Pdelay_Req (in peer-to-peer transparent clock) or Announce (in ordinary or boundary clock) */
#define ENET_RDES4_PTPMT_PDELREQMM (6 << ETH_RDES4_PMT_SHIFT) /* Pdelay_Resp (in peer-to-peer transparent clock) or Management (in ordinary or boundary clock) */
#define ENET_RDES4_PTPMT_PDELREQFUS (7 << ETH_RDES4_PMT_SHIFT) /* Pdelay_Resp_Follow_Up (in peer-to-peer transparent clock) or Signaling (for ordinary or boundary clock) */
#define ENET_RDES4_PTPOEF (1 << 12) /* Bit 12: ENET_RDES4_PTPMT */
#define ENET_RDES4_PTPVF (1 << 13) /* Bit 13: PTP version format */
/* ENET DMA Rx descriptor RDES5 (Reserved) */
/* ENET DMA Rx descriptor RDES6 (32-bit time stamp) */
/* ENET DMA Rx descriptor RDES7 (32-bit time stamp) */
/****************************************************************************
* Public Types
****************************************************************************/
#ifndef __ASSEMBLY__
/* Ethernet TX DMA Descriptor */
struct enet_txdesc_s
{
/* Normal DMA descriptor words */
volatile uint32_t tdes0; /* Status */
volatile uint32_t tdes1; /* Control and buffer1/2 lengths */
volatile uint32_t tdes2; /* Buffer1 address pointer */
volatile uint32_t tdes3; /* Buffer2 or next descriptor address pointer */
/* Enhanced DMA descriptor words with time stamp */
#ifdef CONFIG_GD32F4_ENET_ENHANCEDDESC
volatile uint32_t tdes4; /* Reserved */
volatile uint32_t tdes5; /* Reserved */
volatile uint32_t tdes6; /* Time Stamp Low value for transmit and receive */
volatile uint32_t tdes7; /* Time Stamp High value for transmit and receive */
#endif
};
/* Ethernet RX DMA Descriptor */
struct enet_rxdesc_s
{
volatile uint32_t rdes0; /* Status */
volatile uint32_t rdes1; /* Control and buffer1/2 lengths */
volatile uint32_t rdes2; /* Buffer1 address pointer */
volatile uint32_t rdes3; /* Buffer2 or next descriptor address pointer */
/* Enhanced DMA descriptor words with time stamp and PTP support */
#ifdef CONFIG_GD32F4_ENET_ENHANCEDDESC
volatile uint32_t rdes4; /* Extended status for PTP receive descriptor */
volatile uint32_t rdes5; /* Reserved */
volatile uint32_t rdes6; /* Time Stamp Low value for transmit and receive */
volatile uint32_t rdes7; /* Time Stamp High value for transmit and receive */
#endif
};
#endif /* __ASSEMBLY__ */
#endif /* GD32_NETHERNET > 0 */
#endif /* __ARCH_ARM_SRC_GD32F4_HARDWARE_GD32F4XX_ENET_H */