The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
mbed library. Release version 164

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /*
AnnaBridge 171:3a7713b1edbc 2 * The Clear BSD License
AnnaBridge 171:3a7713b1edbc 3 * Copyright (c) 2016, Freescale Semiconductor, Inc.
AnnaBridge 171:3a7713b1edbc 4 * Copyright 2016-2017 NXP
AnnaBridge 171:3a7713b1edbc 5 * All rights reserved.
AnnaBridge 171:3a7713b1edbc 6 *
AnnaBridge 171:3a7713b1edbc 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 171:3a7713b1edbc 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 171:3a7713b1edbc 9 * that the following conditions are met:
AnnaBridge 171:3a7713b1edbc 10 *
AnnaBridge 171:3a7713b1edbc 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 171:3a7713b1edbc 12 * of conditions and the following disclaimer.
AnnaBridge 171:3a7713b1edbc 13 *
AnnaBridge 171:3a7713b1edbc 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 171:3a7713b1edbc 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 171:3a7713b1edbc 16 * other materials provided with the distribution.
AnnaBridge 171:3a7713b1edbc 17 *
AnnaBridge 171:3a7713b1edbc 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 171:3a7713b1edbc 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 171:3a7713b1edbc 20 * software without specific prior written permission.
AnnaBridge 171:3a7713b1edbc 21 *
AnnaBridge 171:3a7713b1edbc 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 171:3a7713b1edbc 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 171:3a7713b1edbc 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 171:3a7713b1edbc 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 171:3a7713b1edbc 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 171:3a7713b1edbc 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 171:3a7713b1edbc 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 171:3a7713b1edbc 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 171:3a7713b1edbc 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 171:3a7713b1edbc 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 171:3a7713b1edbc 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 171:3a7713b1edbc 33 */
AnnaBridge 171:3a7713b1edbc 34 #ifndef _FSL_ENET_H_
AnnaBridge 171:3a7713b1edbc 35 #define _FSL_ENET_H_
AnnaBridge 171:3a7713b1edbc 36
AnnaBridge 171:3a7713b1edbc 37 #include "fsl_common.h"
AnnaBridge 171:3a7713b1edbc 38
AnnaBridge 171:3a7713b1edbc 39 /*!
AnnaBridge 171:3a7713b1edbc 40 * @addtogroup lpc_enet
AnnaBridge 171:3a7713b1edbc 41 * @{
AnnaBridge 171:3a7713b1edbc 42 */
AnnaBridge 171:3a7713b1edbc 43
AnnaBridge 171:3a7713b1edbc 44 /*******************************************************************************
AnnaBridge 171:3a7713b1edbc 45 * Definitions
AnnaBridge 171:3a7713b1edbc 46 ******************************************************************************/
AnnaBridge 171:3a7713b1edbc 47
AnnaBridge 171:3a7713b1edbc 48 /*! @name Driver version */
AnnaBridge 171:3a7713b1edbc 49 /*@{*/
AnnaBridge 171:3a7713b1edbc 50 /*! @brief Defines the driver version. */
AnnaBridge 171:3a7713b1edbc 51 #define FSL_ENET_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */
AnnaBridge 171:3a7713b1edbc 52 /*@}*/
AnnaBridge 171:3a7713b1edbc 53
AnnaBridge 171:3a7713b1edbc 54 /*! @name Control and status region bit masks of the receive buffer descriptor. */
AnnaBridge 171:3a7713b1edbc 55 /*@{*/
AnnaBridge 171:3a7713b1edbc 56 /*! @brief Defines for read format. */
AnnaBridge 171:3a7713b1edbc 57 #define ENET_RXDESCRIP_RD_BUFF1VALID_MASK (1U << 24) /*!< Buffer1 address valid. */
AnnaBridge 171:3a7713b1edbc 58 #define ENET_RXDESCRIP_RD_BUFF2VALID_MASK (1U << 25) /*!< Buffer2 address valid. */
AnnaBridge 171:3a7713b1edbc 59 #define ENET_RXDESCRIP_RD_IOC_MASK (1U << 30) /*!< Interrupt enable on complete. */
AnnaBridge 171:3a7713b1edbc 60 #define ENET_RXDESCRIP_RD_OWN_MASK (1U << 31) /*!< Own bit. */
AnnaBridge 171:3a7713b1edbc 61
AnnaBridge 171:3a7713b1edbc 62 /*! @brief Defines for write back format. */
AnnaBridge 171:3a7713b1edbc 63 #define ENET_RXDESCRIP_WR_ERR_MASK ((1U << 3) | (1U << 7))
AnnaBridge 171:3a7713b1edbc 64 #define ENET_RXDESCRIP_WR_PYLOAD_MASK (0x7U)
AnnaBridge 171:3a7713b1edbc 65 #define ENET_RXDESCRIP_WR_PTPMSGTYPE_MASK (0xF00U)
AnnaBridge 171:3a7713b1edbc 66 #define ENET_RXDESCRIP_WR_PTPTYPE_MASK (1U << 12)
AnnaBridge 171:3a7713b1edbc 67 #define ENET_RXDESCRIP_WR_PTPVERSION_MASK (1U << 13)
AnnaBridge 171:3a7713b1edbc 68 #define ENET_RXDESCRIP_WR_PTPTSA_MASK (1U << 14)
AnnaBridge 171:3a7713b1edbc 69 #define ENET_RXDESCRIP_WR_PACKETLEN_MASK (0x7FFFU)
AnnaBridge 171:3a7713b1edbc 70 #define ENET_RXDESCRIP_WR_ERRSUM_MASK (1U << 15)
AnnaBridge 171:3a7713b1edbc 71 #define ENET_RXDESCRIP_WR_TYPE_MASK (0x30000U)
AnnaBridge 171:3a7713b1edbc 72 #define ENET_RXDESCRIP_WR_DE_MASK (1U << 19)
AnnaBridge 171:3a7713b1edbc 73 #define ENET_RXDESCRIP_WR_RE_MASK (1U << 20)
AnnaBridge 171:3a7713b1edbc 74 #define ENET_RXDESCRIP_WR_OE_MASK (1U << 21)
AnnaBridge 171:3a7713b1edbc 75 #define ENET_RXDESCRIP_WR_RS0V_MASK (1U << 25)
AnnaBridge 171:3a7713b1edbc 76 #define ENET_RXDESCRIP_WR_RS1V_MASK (1U << 26)
AnnaBridge 171:3a7713b1edbc 77 #define ENET_RXDESCRIP_WR_RS2V_MASK (1U << 27)
AnnaBridge 171:3a7713b1edbc 78 #define ENET_RXDESCRIP_WR_LD_MASK (1U << 28)
AnnaBridge 171:3a7713b1edbc 79 #define ENET_RXDESCRIP_WR_FD_MASK (1U << 29)
AnnaBridge 171:3a7713b1edbc 80 #define ENET_RXDESCRIP_WR_CTXT_MASK (1U << 30)
AnnaBridge 171:3a7713b1edbc 81 #define ENET_RXDESCRIP_WR_OWN_MASK (1U << 31)
AnnaBridge 171:3a7713b1edbc 82 /*@}*/
AnnaBridge 171:3a7713b1edbc 83
AnnaBridge 171:3a7713b1edbc 84 /*! @name Control and status bit masks of the transmit buffer descriptor. */
AnnaBridge 171:3a7713b1edbc 85 /*@{*/
AnnaBridge 171:3a7713b1edbc 86 /*! @brief Defines for read format. */
AnnaBridge 171:3a7713b1edbc 87 #define ENET_TXDESCRIP_RD_BL1_MASK (0x3fffU)
AnnaBridge 171:3a7713b1edbc 88 #define ENET_TXDESCRIP_RD_BL2_MASK (ENET_TXDESCRIP_RD_BL1_MASK << 16)
AnnaBridge 171:3a7713b1edbc 89 #define ENET_TXDESCRIP_RD_BL1(n) ((uint32_t)(n) & ENET_TXDESCRIP_RD_BL1_MASK)
AnnaBridge 171:3a7713b1edbc 90 #define ENET_TXDESCRIP_RD_BL2(n) (((uint32_t)(n) & ENET_TXDESCRIP_RD_BL1_MASK) << 16)
AnnaBridge 171:3a7713b1edbc 91 #define ENET_TXDESCRIP_RD_TTSE_MASK (1U << 30)
AnnaBridge 171:3a7713b1edbc 92 #define ENET_TXDESCRIP_RD_IOC_MASK (1U << 31)
AnnaBridge 171:3a7713b1edbc 93
AnnaBridge 171:3a7713b1edbc 94 #define ENET_TXDESCRIP_RD_FL_MASK (0x7FFFU)
AnnaBridge 171:3a7713b1edbc 95 #define ENET_TXDESCRIP_RD_FL(n) ((uint32_t)(n) & ENET_TXDESCRIP_RD_FL_MASK)
AnnaBridge 171:3a7713b1edbc 96 #define ENET_TXDESCRIP_RD_CIC(n) (((uint32_t)(n) & 0x3) << 16)
AnnaBridge 171:3a7713b1edbc 97 #define ENET_TXDESCRIP_RD_TSE_MASK (1U << 18)
AnnaBridge 171:3a7713b1edbc 98 #define ENET_TXDESCRIP_RD_SLOT(n) (((uint32_t)(n) & 0x0f) << 19)
AnnaBridge 171:3a7713b1edbc 99 #define ENET_TXDESCRIP_RD_SAIC(n) (((uint32_t)(n) & 0x07) << 23)
AnnaBridge 171:3a7713b1edbc 100 #define ENET_TXDESCRIP_RD_CPC(n) (((uint32_t)(n) & 0x03) << 26)
AnnaBridge 171:3a7713b1edbc 101 #define ENET_TXDESCRIP_RD_LDFD(n) (((uint32_t)(n) & 0x03) << 28)
AnnaBridge 171:3a7713b1edbc 102 #define ENET_TXDESCRIP_RD_LD_MASK (1U << 28)
AnnaBridge 171:3a7713b1edbc 103 #define ENET_TXDESCRIP_RD_FD_MASK (1U << 29)
AnnaBridge 171:3a7713b1edbc 104 #define ENET_TXDESCRIP_RD_CTXT_MASK (1U << 30)
AnnaBridge 171:3a7713b1edbc 105 #define ENET_TXDESCRIP_RD_OWN_MASK (1UL << 31)
AnnaBridge 171:3a7713b1edbc 106
AnnaBridge 171:3a7713b1edbc 107 /*! @brief Defines for write back format. */
AnnaBridge 171:3a7713b1edbc 108 #define ENET_TXDESCRIP_WB_TTSS_MASK (1UL << 17)
AnnaBridge 171:3a7713b1edbc 109 /*@}*/
AnnaBridge 171:3a7713b1edbc 110
AnnaBridge 171:3a7713b1edbc 111 /*! @name Bit mask for interrupt enable type. */
AnnaBridge 171:3a7713b1edbc 112 /*@{*/
AnnaBridge 171:3a7713b1edbc 113 #define ENET_ABNORM_INT_MASK \
AnnaBridge 171:3a7713b1edbc 114 (ENET_DMA_CH_DMA_CHX_INT_EN_TSE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_RBUE_MASK | \
AnnaBridge 171:3a7713b1edbc 115 ENET_DMA_CH_DMA_CHX_INT_EN_RSE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_RWTE_MASK | \
AnnaBridge 171:3a7713b1edbc 116 ENET_DMA_CH_DMA_CHX_INT_EN_FBEE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_ETIE_MASK)
AnnaBridge 171:3a7713b1edbc 117 #define ENET_NORM_INT_MASK \
AnnaBridge 171:3a7713b1edbc 118 (ENET_DMA_CH_DMA_CHX_INT_EN_TIE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_TBUE_MASK | \
AnnaBridge 171:3a7713b1edbc 119 ENET_DMA_CH_DMA_CHX_INT_EN_RIE_MASK | ENET_DMA_CH_DMA_CHX_INT_EN_ERIE_MASK)
AnnaBridge 171:3a7713b1edbc 120 /*@}*/
AnnaBridge 171:3a7713b1edbc 121
AnnaBridge 171:3a7713b1edbc 122 /*! @name Defines some Ethernet parameters. */
AnnaBridge 171:3a7713b1edbc 123 /*@{*/
AnnaBridge 171:3a7713b1edbc 124
AnnaBridge 171:3a7713b1edbc 125 #define ENET_FRAME_MAX_FRAMELEN (1518U)/*!< Default maximum Ethernet frame size. */
AnnaBridge 171:3a7713b1edbc 126 #define ENET_ADDR_ALIGNMENT (0x3U) /*!< Recommended ethernet buffer alignment. */
AnnaBridge 171:3a7713b1edbc 127 #define ENET_BUFF_ALIGNMENT (4U) /*!< Receive buffer alignment shall be 4bytes-aligned. */
AnnaBridge 171:3a7713b1edbc 128 #define ENET_RING_NUM_MAX (2U) /*!< The Maximum number of tx/rx descriptor rings. */
AnnaBridge 171:3a7713b1edbc 129 #define ENET_MTL_RXFIFOSIZE (2048U) /*!< The rx fifo size. */
AnnaBridge 171:3a7713b1edbc 130 #define ENET_MTL_TXFIFOSIZE (2048U) /*!< The tx fifo size. */
AnnaBridge 171:3a7713b1edbc 131 #define ENET_MACINT_ENUM_OFFSET (16U) /*!< The offest for mac interrupt in enum type. */
AnnaBridge 171:3a7713b1edbc 132 /*@}*/
AnnaBridge 171:3a7713b1edbc 133
AnnaBridge 171:3a7713b1edbc 134 #ifdef ENET_PTP1588FEATURE_REQUIRED
AnnaBridge 171:3a7713b1edbc 135 /* Define the buffer length to store the rx buffers address.
AnnaBridge 171:3a7713b1edbc 136 * because the context descriptor will be updated for store the time
AnnaBridge 171:3a7713b1edbc 137 * stamp for rx frame. so we need to reinit the descriptors.
AnnaBridge 171:3a7713b1edbc 138 * This macro shall at least equal to the rxRingLen
AnnaBridge 171:3a7713b1edbc 139 * assigned in the enet_buffer_config. That means if the rx descriptor
AnnaBridge 171:3a7713b1edbc 140 * length is larger than 5, please increse this macro. */
AnnaBridge 171:3a7713b1edbc 141 #define ENET_RXBUFFSTORE_NUM (6)
AnnaBridge 171:3a7713b1edbc 142 #endif /* ENET_PTP1588FEATURE_REQUIRED */
AnnaBridge 171:3a7713b1edbc 143
AnnaBridge 171:3a7713b1edbc 144 /*! @brief Defines the status return codes for transaction. */
AnnaBridge 171:3a7713b1edbc 145 enum _enet_status
AnnaBridge 171:3a7713b1edbc 146 {
AnnaBridge 171:3a7713b1edbc 147 kStatus_ENET_RxFrameError = MAKE_STATUS(kStatusGroup_ENET, 0U), /*!< A frame received but data error happen. */
AnnaBridge 171:3a7713b1edbc 148 kStatus_ENET_RxFrameFail = MAKE_STATUS(kStatusGroup_ENET, 1U), /*!< Failed to receive a frame. */
AnnaBridge 171:3a7713b1edbc 149 kStatus_ENET_RxFrameEmpty = MAKE_STATUS(kStatusGroup_ENET, 2U), /*!< No frame arrive. */
AnnaBridge 171:3a7713b1edbc 150 kStatus_ENET_TxFrameBusy = MAKE_STATUS(kStatusGroup_ENET, 3U), /*!< Transmit descriptors are under process. */
AnnaBridge 171:3a7713b1edbc 151 kStatus_ENET_TxFrameFail = MAKE_STATUS(kStatusGroup_ENET, 4U), /*!< Transmit frame fail. */
AnnaBridge 171:3a7713b1edbc 152 kStatus_ENET_TxFrameOverLen = MAKE_STATUS(kStatusGroup_ENET, 5U) /*!< Transmit oversize. */
AnnaBridge 171:3a7713b1edbc 153 #ifdef ENET_PTP1588FEATURE_REQUIRED
AnnaBridge 171:3a7713b1edbc 154 ,
AnnaBridge 171:3a7713b1edbc 155 kStatus_ENET_PtpTsRingFull = MAKE_STATUS(kStatusGroup_ENET, 6U), /*!< Timestamp ring full. */
AnnaBridge 171:3a7713b1edbc 156 kStatus_ENET_PtpTsRingEmpty = MAKE_STATUS(kStatusGroup_ENET, 7U) /*!< Timestamp ring empty. */
AnnaBridge 171:3a7713b1edbc 157 #endif /* ENET_PTP1588FEATURE_REQUIRED */
AnnaBridge 171:3a7713b1edbc 158 };
AnnaBridge 171:3a7713b1edbc 159
AnnaBridge 171:3a7713b1edbc 160 /*! @brief Defines the MII/RMII mode for data interface between the MAC and the PHY. */
AnnaBridge 171:3a7713b1edbc 161 typedef enum _enet_mii_mode {
AnnaBridge 171:3a7713b1edbc 162 kENET_MiiMode = 0U, /*!< MII mode for data interface. */
AnnaBridge 171:3a7713b1edbc 163 kENET_RmiiMode = 1U /*!< RMII mode for data interface. */
AnnaBridge 171:3a7713b1edbc 164 } enet_mii_mode_t;
AnnaBridge 171:3a7713b1edbc 165
AnnaBridge 171:3a7713b1edbc 166 /*! @brief Defines the 10/100 Mbps speed for the MII data interface. */
AnnaBridge 171:3a7713b1edbc 167 typedef enum _enet_mii_speed {
AnnaBridge 171:3a7713b1edbc 168 kENET_MiiSpeed10M = 0U, /*!< Speed 10 Mbps. */
AnnaBridge 171:3a7713b1edbc 169 kENET_MiiSpeed100M = 1U, /*!< Speed 100 Mbps. */
AnnaBridge 171:3a7713b1edbc 170 } enet_mii_speed_t;
AnnaBridge 171:3a7713b1edbc 171
AnnaBridge 171:3a7713b1edbc 172 /*! @brief Defines the half or full duplex for the MII data interface. */
AnnaBridge 171:3a7713b1edbc 173 typedef enum _enet_mii_duplex {
AnnaBridge 171:3a7713b1edbc 174 kENET_MiiHalfDuplex = 0U, /*!< Half duplex mode. */
AnnaBridge 171:3a7713b1edbc 175 kENET_MiiFullDuplex /*!< Full duplex mode. */
AnnaBridge 171:3a7713b1edbc 176 } enet_mii_duplex_t;
AnnaBridge 171:3a7713b1edbc 177
AnnaBridge 171:3a7713b1edbc 178 /*! @brief Define the MII opcode for normal MDIO_CLAUSES_22 Frame. */
AnnaBridge 171:3a7713b1edbc 179 typedef enum _enet_mii_normal_opcode {
AnnaBridge 171:3a7713b1edbc 180 kENET_MiiWriteFrame = 1U, /*!< Write frame operation for a valid MII management frame. */
AnnaBridge 171:3a7713b1edbc 181 kENET_MiiReadFrame = 3U /*!< Read frame operation for a valid MII management frame. */
AnnaBridge 171:3a7713b1edbc 182 } enet_mii_normal_opcode;
AnnaBridge 171:3a7713b1edbc 183
AnnaBridge 171:3a7713b1edbc 184 /*! @brief Define the DMA maximum transmit burst length. */
AnnaBridge 171:3a7713b1edbc 185 typedef enum _enet_dma_burstlen {
AnnaBridge 171:3a7713b1edbc 186 kENET_BurstLen1 = 0x00001U, /*!< DMA burst length 1. */
AnnaBridge 171:3a7713b1edbc 187 kENET_BurstLen2 = 0x00002U, /*!< DMA burst length 2. */
AnnaBridge 171:3a7713b1edbc 188 kENET_BurstLen4 = 0x00004U, /*!< DMA burst length 4. */
AnnaBridge 171:3a7713b1edbc 189 kENET_BurstLen8 = 0x00008U, /*!< DMA burst length 8. */
AnnaBridge 171:3a7713b1edbc 190 kENET_BurstLen16 = 0x00010U, /*!< DMA burst length 16. */
AnnaBridge 171:3a7713b1edbc 191 kENET_BurstLen32 = 0x00020U, /*!< DMA burst length 32. */
AnnaBridge 171:3a7713b1edbc 192 kENET_BurstLen64 = 0x10008U, /*!< DMA burst length 64. eight times enabled. */
AnnaBridge 171:3a7713b1edbc 193 kENET_BurstLen128 = 0x10010U, /*!< DMA burst length 128. eight times enabled. */
AnnaBridge 171:3a7713b1edbc 194 kENET_BurstLen256 = 0x10020U, /*!< DMA burst length 256. eight times enabled. */
AnnaBridge 171:3a7713b1edbc 195 } enet_dma_burstlen;
AnnaBridge 171:3a7713b1edbc 196
AnnaBridge 171:3a7713b1edbc 197 /*! @brief Define the flag for the descriptor. */
AnnaBridge 171:3a7713b1edbc 198 typedef enum _enet_desc_flag {
AnnaBridge 171:3a7713b1edbc 199 kENET_MiddleFlag = 0, /*!< It's a middle descriptor of the frame. */
AnnaBridge 171:3a7713b1edbc 200 kENET_FirstFlagOnly, /*!< It's the first descriptor of the frame. */
AnnaBridge 171:3a7713b1edbc 201 kENET_LastFlagOnly, /*!< It's the last descriptor of the frame. */
AnnaBridge 171:3a7713b1edbc 202 kENET_FirstLastFlag /*!< It's the first and last descriptor of the frame. */
AnnaBridge 171:3a7713b1edbc 203 } enet_desc_flag;
AnnaBridge 171:3a7713b1edbc 204
AnnaBridge 171:3a7713b1edbc 205 /*! @brief Define the system time adjust operation control. */
AnnaBridge 171:3a7713b1edbc 206 typedef enum _enet_systime_op {
AnnaBridge 171:3a7713b1edbc 207 kENET_SystimeAdd = 0U, /*!< System time add to. */
AnnaBridge 171:3a7713b1edbc 208 kENET_SystimeSubtract = 1U /*!< System time subtract. */
AnnaBridge 171:3a7713b1edbc 209 } enet_systime_op;
AnnaBridge 171:3a7713b1edbc 210
AnnaBridge 171:3a7713b1edbc 211 /*! @brief Define the system time rollover control. */
AnnaBridge 171:3a7713b1edbc 212 typedef enum _enet_ts_rollover_type {
AnnaBridge 171:3a7713b1edbc 213 kENET_BinaryRollover = 0, /*!< System time binary rollover.*/
AnnaBridge 171:3a7713b1edbc 214 kENET_DigitalRollover = 1 /*!< System time digital rollover.*/
AnnaBridge 171:3a7713b1edbc 215 } enet_ts_rollover_type;
AnnaBridge 171:3a7713b1edbc 216
AnnaBridge 171:3a7713b1edbc 217 /*! @brief Defines some special configuration for ENET.
AnnaBridge 171:3a7713b1edbc 218 *
AnnaBridge 171:3a7713b1edbc 219 * These control flags are provided for special user requirements.
AnnaBridge 171:3a7713b1edbc 220 * Normally, these is no need to set this control flags for ENET initialization.
AnnaBridge 171:3a7713b1edbc 221 * But if you have some special requirements, set the flags to specialControl
AnnaBridge 171:3a7713b1edbc 222 * in the enet_config_t.
AnnaBridge 171:3a7713b1edbc 223 * @note "kENET_StoreAndForward" is recommended to be set when the
AnnaBridge 171:3a7713b1edbc 224 * ENET_PTP1588FEATURE_REQUIRED is defined or else the timestamp will be mess-up
AnnaBridge 171:3a7713b1edbc 225 * when the overflow happens.
AnnaBridge 171:3a7713b1edbc 226 */
AnnaBridge 171:3a7713b1edbc 227 typedef enum _enet_special_config {
AnnaBridge 171:3a7713b1edbc 228
AnnaBridge 171:3a7713b1edbc 229 /***********************DMA CONFGI**********************************************/
AnnaBridge 171:3a7713b1edbc 230 kENET_DescDoubleBuffer = 0x0001U, /*!< The double buffer is used in the tx/rx descriptor. */
AnnaBridge 171:3a7713b1edbc 231 /**************************MTL************************************/
AnnaBridge 171:3a7713b1edbc 232 kENET_StoreAndForward = 0x0002U, /*!< The rx/tx store and forward enable. */
AnnaBridge 171:3a7713b1edbc 233 /***********************MAC****************************************/
AnnaBridge 171:3a7713b1edbc 234 kENET_PromiscuousEnable = 0x0004U, /*!< The promiscuous enabled. */
AnnaBridge 171:3a7713b1edbc 235 kENET_FlowControlEnable = 0x0008U, /*!< The flow control enabled. */
AnnaBridge 171:3a7713b1edbc 236 kENET_BroadCastRxDisable = 0x0010U, /*!< The broadcast disabled. */
AnnaBridge 171:3a7713b1edbc 237 kENET_MulticastAllEnable = 0x0020U, /*!< All multicast are passed. */
AnnaBridge 171:3a7713b1edbc 238 kENET_8023AS2KPacket = 0x0040U /*!< 8023as support for 2K packets. */
AnnaBridge 171:3a7713b1edbc 239 } enet_special_config_t;
AnnaBridge 171:3a7713b1edbc 240
AnnaBridge 171:3a7713b1edbc 241 /*! @brief List of DMA interrupts supported by the ENET interrupt. This
AnnaBridge 171:3a7713b1edbc 242 * enumeration uses one-bot encoding to allow a logical OR of multiple
AnnaBridge 171:3a7713b1edbc 243 * members.
AnnaBridge 171:3a7713b1edbc 244 */
AnnaBridge 171:3a7713b1edbc 245 typedef enum _enet_dma_interrupt_enable {
AnnaBridge 171:3a7713b1edbc 246 kENET_DmaTx = ENET_DMA_CH_DMA_CHX_INT_EN_TIE_MASK, /*!< Tx interrupt. */
AnnaBridge 171:3a7713b1edbc 247 kENET_DmaTxStop = ENET_DMA_CH_DMA_CHX_INT_EN_TSE_MASK, /*!< Tx stop interrupt. */
AnnaBridge 171:3a7713b1edbc 248 kENET_DmaTxBuffUnavail = ENET_DMA_CH_DMA_CHX_INT_EN_TBUE_MASK, /*!< Tx buffer unavailable. */
AnnaBridge 171:3a7713b1edbc 249 kENET_DmaRx = ENET_DMA_CH_DMA_CHX_INT_EN_RIE_MASK, /*!< Rx interrupt. */
AnnaBridge 171:3a7713b1edbc 250 kENET_DmaRxBuffUnavail = ENET_DMA_CH_DMA_CHX_INT_EN_RBUE_MASK, /*!< Rx buffer unavailable. */
AnnaBridge 171:3a7713b1edbc 251 kENET_DmaRxStop = ENET_DMA_CH_DMA_CHX_INT_EN_RSE_MASK, /*!< Rx stop. */
AnnaBridge 171:3a7713b1edbc 252 kENET_DmaRxWatchdogTimeout = ENET_DMA_CH_DMA_CHX_INT_EN_RWTE_MASK, /*!< Rx watchdog timeout. */
AnnaBridge 171:3a7713b1edbc 253 kENET_DmaEarlyTx = ENET_DMA_CH_DMA_CHX_INT_EN_ETIE_MASK, /*!< Early transmit. */
AnnaBridge 171:3a7713b1edbc 254 kENET_DmaEarlyRx = ENET_DMA_CH_DMA_CHX_INT_EN_ERIE_MASK, /*!< Early receive. */
AnnaBridge 171:3a7713b1edbc 255 kENET_DmaBusErr = ENET_DMA_CH_DMA_CHX_INT_EN_FBEE_MASK, /*!< Fatal bus error. */
AnnaBridge 171:3a7713b1edbc 256 } enet_dma_interrupt_enable_t;
AnnaBridge 171:3a7713b1edbc 257
AnnaBridge 171:3a7713b1edbc 258 /*! @brief List of mac interrupts supported by the ENET interrupt. This
AnnaBridge 171:3a7713b1edbc 259 * enumeration uses one-bot encoding to allow a logical OR of multiple
AnnaBridge 171:3a7713b1edbc 260 * members.
AnnaBridge 171:3a7713b1edbc 261 */
AnnaBridge 171:3a7713b1edbc 262 typedef enum _enet_mac_interrupt_enable {
AnnaBridge 171:3a7713b1edbc 263 kENET_MacPmt = (ENET_MAC_INTR_EN_PMTIE_MASK << ENET_MACINT_ENUM_OFFSET),
AnnaBridge 171:3a7713b1edbc 264 kENET_MacTimestamp = (ENET_MAC_INTR_EN_TSIE_MASK << ENET_MACINT_ENUM_OFFSET),
AnnaBridge 171:3a7713b1edbc 265 } enet_mac_interrupt_enable_t;
AnnaBridge 171:3a7713b1edbc 266
AnnaBridge 171:3a7713b1edbc 267 /*! @brief Defines the common interrupt event for callback use. */
AnnaBridge 171:3a7713b1edbc 268 typedef enum _enet_event {
AnnaBridge 171:3a7713b1edbc 269 kENET_RxIntEvent, /*!< Receive interrupt event. */
AnnaBridge 171:3a7713b1edbc 270 kENET_TxIntEvent, /*!< Transmit interrupt event. */
AnnaBridge 171:3a7713b1edbc 271 kENET_WakeUpIntEvent, /*!< Wake up interrupt event. */
AnnaBridge 171:3a7713b1edbc 272 kENET_TimeStampIntEvent, /*!< Time stamp interrupt event. */
AnnaBridge 171:3a7713b1edbc 273 } enet_event_t;
AnnaBridge 171:3a7713b1edbc 274
AnnaBridge 171:3a7713b1edbc 275 /*! @brief Define the DMA transmit arbitration for multi-queue. */
AnnaBridge 171:3a7713b1edbc 276 typedef enum _enet_dma_tx_sche {
AnnaBridge 171:3a7713b1edbc 277 kENET_FixPri = 0, /*!< Fixed priority. channel 0 has lower priority than channel 1. */
AnnaBridge 171:3a7713b1edbc 278 kENET_WeightStrPri, /*!< Weighted(burst length) strict priority. */
AnnaBridge 171:3a7713b1edbc 279 kENET_WeightRoundRobin /*!< Weighted (weight factor) round robin. */
AnnaBridge 171:3a7713b1edbc 280 } enet_dma_tx_sche;
AnnaBridge 171:3a7713b1edbc 281
AnnaBridge 171:3a7713b1edbc 282 /*! @brief Define the MTL tx scheduling algorithm for multiple queues/rings. */
AnnaBridge 171:3a7713b1edbc 283 typedef enum _enet_mtl_multiqueue_txsche {
AnnaBridge 171:3a7713b1edbc 284 kENET_txWeightRR = 0U, /*!< Tx weight round-robin. */
AnnaBridge 171:3a7713b1edbc 285 kENET_txStrPrio = 3U, /*!< Tx strict priority. */
AnnaBridge 171:3a7713b1edbc 286 } enet_mtl_multiqueue_txsche;
AnnaBridge 171:3a7713b1edbc 287
AnnaBridge 171:3a7713b1edbc 288 /*! @brief Define the MTL rx scheduling algorithm for multiple queues/rings. */
AnnaBridge 171:3a7713b1edbc 289 typedef enum _enet_mtl_multiqueue_rxsche {
AnnaBridge 171:3a7713b1edbc 290 kENET_rxStrPrio = 0U, /*!< Tx weight round-robin, rx strict priority. */
AnnaBridge 171:3a7713b1edbc 291 kENET_rxWeightStrPrio, /*!< Tx strict priority, rx weight strict priority. */
AnnaBridge 171:3a7713b1edbc 292 } enet_mtl_multiqueue_rxsche;
AnnaBridge 171:3a7713b1edbc 293
AnnaBridge 171:3a7713b1edbc 294 /*! @brief Define the MTL rx queue and DMA channel mapping. */
AnnaBridge 171:3a7713b1edbc 295 typedef enum _enet_mtl_rxqueuemap {
AnnaBridge 171:3a7713b1edbc 296 kENET_StaticDirctMap = 0x100U, /*!< The received fame in rx Qn(n = 0,1) direclty map to dma channel n. */
AnnaBridge 171:3a7713b1edbc 297 kENET_DynamicMap =
AnnaBridge 171:3a7713b1edbc 298 0x1010U, /*!< The received frame in rx Qn(n = 0,1) map to the dma channel m(m = 0,1) related with the same Mac.
AnnaBridge 171:3a7713b1edbc 299 */
AnnaBridge 171:3a7713b1edbc 300 } enet_mtl_rxqueuemap;
AnnaBridge 171:3a7713b1edbc 301
AnnaBridge 171:3a7713b1edbc 302 /*! @brief Defines the ENET PTP message related constant. */
AnnaBridge 171:3a7713b1edbc 303 typedef enum _enet_ptp_event_type {
AnnaBridge 171:3a7713b1edbc 304 kENET_PtpEventMsgType = 3U, /*!< PTP event message type. */
AnnaBridge 171:3a7713b1edbc 305 kENET_PtpSrcPortIdLen = 10U, /*!< PTP message sequence id length. */
AnnaBridge 171:3a7713b1edbc 306 kENET_PtpEventPort = 319U, /*!< PTP event port number. */
AnnaBridge 171:3a7713b1edbc 307 kENET_PtpGnrlPort = 320U /*!< PTP general port number. */
AnnaBridge 171:3a7713b1edbc 308 } enet_ptp_event_type_t;
AnnaBridge 171:3a7713b1edbc 309
AnnaBridge 171:3a7713b1edbc 310 /*! @brief Defines the receive descriptor structure
AnnaBridge 171:3a7713b1edbc 311 * has the read-format and write-back format structure. They both
AnnaBridge 171:3a7713b1edbc 312 * has the same size with different region definition. so
AnnaBridge 171:3a7713b1edbc 313 * we define the read-format region as the recive descriptor structure
AnnaBridge 171:3a7713b1edbc 314 * Use the read-format region mask bits in the descriptor initialization
AnnaBridge 171:3a7713b1edbc 315 * Use the write-back format region mask bits in the receive data process.
AnnaBridge 171:3a7713b1edbc 316 */
AnnaBridge 171:3a7713b1edbc 317 typedef struct _enet_rx_bd_struct
AnnaBridge 171:3a7713b1edbc 318 {
AnnaBridge 171:3a7713b1edbc 319 __IO uint32_t buff1Addr; /*!< Buffer 1 address */
AnnaBridge 171:3a7713b1edbc 320 __IO uint32_t reserved; /*!< Reserved */
AnnaBridge 171:3a7713b1edbc 321 __IO uint32_t buff2Addr; /*!< Buffer 2 or next descriptor address */
AnnaBridge 171:3a7713b1edbc 322 __IO uint32_t control; /*!< Buffer 1/2 byte counts and control */
AnnaBridge 171:3a7713b1edbc 323 } enet_rx_bd_struct_t;
AnnaBridge 171:3a7713b1edbc 324
AnnaBridge 171:3a7713b1edbc 325 /*! @brief Defines the transmit descriptor structure
AnnaBridge 171:3a7713b1edbc 326 * has the read-format and write-back format structure. They both
AnnaBridge 171:3a7713b1edbc 327 * has the same size with different region definition. so
AnnaBridge 171:3a7713b1edbc 328 * we define the read-format region as the transmit descriptor structure
AnnaBridge 171:3a7713b1edbc 329 * Use the read-format region mask bits in the descriptor initialization
AnnaBridge 171:3a7713b1edbc 330 * Use the write-back format region mask bits in the transmit data process.
AnnaBridge 171:3a7713b1edbc 331 */
AnnaBridge 171:3a7713b1edbc 332 typedef struct _enet_tx_bd_struct
AnnaBridge 171:3a7713b1edbc 333 {
AnnaBridge 171:3a7713b1edbc 334 __IO uint32_t buff1Addr; /*!< Buffer 1 address */
AnnaBridge 171:3a7713b1edbc 335 __IO uint32_t buff2Addr; /*!< Buffer 2 address */
AnnaBridge 171:3a7713b1edbc 336 __IO uint32_t buffLen; /*!< Buffer 1/2 byte counts */
AnnaBridge 171:3a7713b1edbc 337 __IO uint32_t controlStat; /*!< TDES control and status word */
AnnaBridge 171:3a7713b1edbc 338 } enet_tx_bd_struct_t;
AnnaBridge 171:3a7713b1edbc 339
AnnaBridge 171:3a7713b1edbc 340 #ifdef ENET_PTP1588FEATURE_REQUIRED
AnnaBridge 171:3a7713b1edbc 341 /*! @brief Defines the ENET PTP time stamp structure. */
AnnaBridge 171:3a7713b1edbc 342 typedef struct _enet_ptp_time
AnnaBridge 171:3a7713b1edbc 343 {
AnnaBridge 171:3a7713b1edbc 344 uint64_t second; /*!< Second. */
AnnaBridge 171:3a7713b1edbc 345 uint32_t nanosecond; /*!< Nanosecond. */
AnnaBridge 171:3a7713b1edbc 346 } enet_ptp_time_t;
AnnaBridge 171:3a7713b1edbc 347
AnnaBridge 171:3a7713b1edbc 348 /*! @brief Defines the structure for the ENET PTP message data and timestamp data.*/
AnnaBridge 171:3a7713b1edbc 349 typedef struct _enet_ptp_time_data
AnnaBridge 171:3a7713b1edbc 350 {
AnnaBridge 171:3a7713b1edbc 351 uint8_t version; /*!< PTP version. */
AnnaBridge 171:3a7713b1edbc 352 uint8_t sourcePortId[kENET_PtpSrcPortIdLen]; /*!< PTP source port ID. */
AnnaBridge 171:3a7713b1edbc 353 uint16_t sequenceId; /*!< PTP sequence ID. */
AnnaBridge 171:3a7713b1edbc 354 uint8_t messageType; /*!< PTP message type. */
AnnaBridge 171:3a7713b1edbc 355 enet_ptp_time_t timeStamp; /*!< PTP timestamp. */
AnnaBridge 171:3a7713b1edbc 356 } enet_ptp_time_data_t;
AnnaBridge 171:3a7713b1edbc 357
AnnaBridge 171:3a7713b1edbc 358 /*! @brief Defines the ENET PTP ring buffer structure for the PTP message timestamp store.*/
AnnaBridge 171:3a7713b1edbc 359 typedef struct _enet_ptp_time_data_ring
AnnaBridge 171:3a7713b1edbc 360 {
AnnaBridge 171:3a7713b1edbc 361 uint32_t front; /*!< The first index of the ring. */
AnnaBridge 171:3a7713b1edbc 362 uint32_t end; /*!< The end index of the ring. */
AnnaBridge 171:3a7713b1edbc 363 uint32_t size; /*!< The size of the ring. */
AnnaBridge 171:3a7713b1edbc 364 enet_ptp_time_data_t *ptpTsData; /*!< PTP message data structure. */
AnnaBridge 171:3a7713b1edbc 365 } enet_ptp_time_data_ring_t;
AnnaBridge 171:3a7713b1edbc 366
AnnaBridge 171:3a7713b1edbc 367 /*! @brief Defines the ENET PTP configuration structure. */
AnnaBridge 171:3a7713b1edbc 368 typedef struct _enet_ptp_config
AnnaBridge 171:3a7713b1edbc 369 {
AnnaBridge 171:3a7713b1edbc 370 bool fineUpdateEnable; /*!< Use the fine update. */
AnnaBridge 171:3a7713b1edbc 371 bool ptp1588V2Enable; /*!< ptp 1588 version 2 is used. */
AnnaBridge 171:3a7713b1edbc 372 enet_ts_rollover_type tsRollover; /*!< 1588 time nanosecond rollover. */
AnnaBridge 171:3a7713b1edbc 373 } enet_ptp_config_t;
AnnaBridge 171:3a7713b1edbc 374 #endif /* ENET_PTP1588FEATURE_REQUIRED */
AnnaBridge 171:3a7713b1edbc 375
AnnaBridge 171:3a7713b1edbc 376 /*! @brief Defines the buffer descriptor configure structure.
AnnaBridge 171:3a7713b1edbc 377 *
AnnaBridge 171:3a7713b1edbc 378 * Notes:
AnnaBridge 171:3a7713b1edbc 379 * 1. The receive and transmit descriptor start address pointer and tail pointer must be word-aligned.
AnnaBridge 171:3a7713b1edbc 380 * 2. The recommended minimum tx/rx ring length is 4.
AnnaBridge 171:3a7713b1edbc 381 * 3. The tx/rx descriptor tail address shall be the address pointer to the address just after the end
AnnaBridge 171:3a7713b1edbc 382 * of the last last descriptor. because only the descriptors between the start address and the
AnnaBridge 171:3a7713b1edbc 383 * tail address will be used by DMA.
AnnaBridge 171:3a7713b1edbc 384 * 4. The decriptor address is the start address of all used contiguous memory.
AnnaBridge 171:3a7713b1edbc 385 * for example, the rxDescStartAddrAlign is the start address of rxRingLen contiguous descriptor memorise
AnnaBridge 171:3a7713b1edbc 386 * for rx descriptor ring 0.
AnnaBridge 171:3a7713b1edbc 387 * 5. The "*rxBufferstartAddr" is the first element of rxRingLen (2*rxRingLen for double buffers)
AnnaBridge 171:3a7713b1edbc 388 * rx buffers. It means the *rxBufferStartAddr is the rx buffer for the first descriptor
AnnaBridge 171:3a7713b1edbc 389 * the *rxBufferStartAddr + 1 is the rx buffer for the second descriptor or the rx buffer for
AnnaBridge 171:3a7713b1edbc 390 * the second buffer in the first descriptor. so please make sure the rxBufferStartAddr is the
AnnaBridge 171:3a7713b1edbc 391 * address of a rxRingLen or 2*rxRingLen array.
AnnaBridge 171:3a7713b1edbc 392 */
AnnaBridge 171:3a7713b1edbc 393 typedef struct _enet_buffer_config
AnnaBridge 171:3a7713b1edbc 394 {
AnnaBridge 171:3a7713b1edbc 395 uint8_t rxRingLen; /*!< The length of receive buffer descriptor ring. */
AnnaBridge 171:3a7713b1edbc 396 uint8_t txRingLen; /*!< The length of transmit buffer descriptor ring. */
AnnaBridge 171:3a7713b1edbc 397 enet_tx_bd_struct_t *txDescStartAddrAlign; /*!< Aligned transmit descriptor start address. */
AnnaBridge 171:3a7713b1edbc 398 enet_tx_bd_struct_t *txDescTailAddrAlign; /*!< Aligned transmit descriptor tail address. */
AnnaBridge 171:3a7713b1edbc 399 enet_rx_bd_struct_t *rxDescStartAddrAlign; /*!< Aligned receive descriptor start address. */
AnnaBridge 171:3a7713b1edbc 400 enet_rx_bd_struct_t *rxDescTailAddrAlign; /*!< Aligned receive descriptor tail address. */
AnnaBridge 171:3a7713b1edbc 401 uint32_t *rxBufferStartAddr; /*!< Start address of the rx buffers. */
AnnaBridge 171:3a7713b1edbc 402 uint32_t rxBuffSizeAlign; /*!< Aligned receive data buffer size. */
AnnaBridge 171:3a7713b1edbc 403 #ifdef ENET_PTP1588FEATURE_REQUIRED
AnnaBridge 171:3a7713b1edbc 404 uint8_t ptpTsRxBuffNum; /*!< Receive 1588 timestamp buffer number*/
AnnaBridge 171:3a7713b1edbc 405 uint8_t ptpTsTxBuffNum; /*!< Transmit 1588 timestamp buffer number*/
AnnaBridge 171:3a7713b1edbc 406 enet_ptp_time_data_t *rxPtpTsData; /*!< The start address of 1588 receive timestamp buffers */
AnnaBridge 171:3a7713b1edbc 407 enet_ptp_time_data_t *txPtpTsData; /*!< The start address of 1588 transmit timestamp buffers */
AnnaBridge 171:3a7713b1edbc 408 #endif /* ENET_PTP1588FEATURE_REQUIRED */
AnnaBridge 171:3a7713b1edbc 409 } enet_buffer_config_t;
AnnaBridge 171:3a7713b1edbc 410
AnnaBridge 171:3a7713b1edbc 411 /*! @brief Defines the configuration when multi-queue is used. */
AnnaBridge 171:3a7713b1edbc 412 typedef struct enet_multiqueue_config
AnnaBridge 171:3a7713b1edbc 413 {
AnnaBridge 171:3a7713b1edbc 414 /***********************DMA block*******************************/
AnnaBridge 171:3a7713b1edbc 415 enet_dma_tx_sche dmaTxSche; /*!< Transmit arbitation. */
AnnaBridge 171:3a7713b1edbc 416 enet_dma_burstlen burstLen; /*!< Burset len for the queue 1. */
AnnaBridge 171:3a7713b1edbc 417 uint8_t txdmaChnWeight[ENET_RING_NUM_MAX]; /*!< Transmit channel weight. */
AnnaBridge 171:3a7713b1edbc 418 /***********************MTL block*******************************/
AnnaBridge 171:3a7713b1edbc 419 enet_mtl_multiqueue_txsche mtltxSche; /*!< Transmit schedule for multi-queue. */
AnnaBridge 171:3a7713b1edbc 420 enet_mtl_multiqueue_rxsche mtlrxSche; /*!< Receive schedule for multi-queue. */
AnnaBridge 171:3a7713b1edbc 421 uint8_t rxqueweight[ENET_RING_NUM_MAX]; /*!< Refer to the MTL RxQ Control register. */
AnnaBridge 171:3a7713b1edbc 422 uint32_t txqueweight[ENET_RING_NUM_MAX]; /*!< Refer to the MTL TxQ Quantum Weight register. */
AnnaBridge 171:3a7713b1edbc 423 uint8_t rxqueuePrio[ENET_RING_NUM_MAX]; /*!< Receive queue priority. */
AnnaBridge 171:3a7713b1edbc 424 uint8_t txqueuePrio[ENET_RING_NUM_MAX]; /*!< Refer to Transmit Queue Priority Mapping register. */
AnnaBridge 171:3a7713b1edbc 425 enet_mtl_rxqueuemap mtlrxQuemap; /*!< Rx queue DMA Channel mapping. */
AnnaBridge 171:3a7713b1edbc 426 } enet_multiqueue_config_t;
AnnaBridge 171:3a7713b1edbc 427
AnnaBridge 171:3a7713b1edbc 428 /*! @brief Defines the basic configuration structure for the ENET device.
AnnaBridge 171:3a7713b1edbc 429 *
AnnaBridge 171:3a7713b1edbc 430 * Note:
AnnaBridge 171:3a7713b1edbc 431 * 1. Default the signal queue is used so the "*multiqueueCfg" is set default
AnnaBridge 171:3a7713b1edbc 432 * with NULL. Set the pointer with a valid configration pointer if the multiple
AnnaBridge 171:3a7713b1edbc 433 * queues are required. If multiple queue is enabled, please make sure the
AnnaBridge 171:3a7713b1edbc 434 * buffer configuration for all are prepared also.
AnnaBridge 171:3a7713b1edbc 435 */
AnnaBridge 171:3a7713b1edbc 436 typedef struct _enet_config
AnnaBridge 171:3a7713b1edbc 437 {
AnnaBridge 171:3a7713b1edbc 438 uint16_t specialControl; /*!< The logicl or of enet_special_config_t */
AnnaBridge 171:3a7713b1edbc 439 enet_multiqueue_config_t *multiqueueCfg; /*!< Use both tx/rx queue(dma channel) 0 and 1. */
AnnaBridge 171:3a7713b1edbc 440 /* -----------------MAC block-------------------------------*/
AnnaBridge 171:3a7713b1edbc 441 enet_mii_mode_t miiMode; /*!< MII mode. */
AnnaBridge 171:3a7713b1edbc 442 enet_mii_speed_t miiSpeed; /*!< MII Speed. */
AnnaBridge 171:3a7713b1edbc 443 enet_mii_duplex_t miiDuplex; /*!< MII duplex. */
AnnaBridge 171:3a7713b1edbc 444 uint16_t pauseDuration; /*!< Used in the tx flow control frame, only valid when kENET_FlowControlEnable is set. */
AnnaBridge 171:3a7713b1edbc 445 /* -----------------Timestamp -------------------------------*/
AnnaBridge 171:3a7713b1edbc 446 #ifdef ENET_PTP1588FEATURE_REQUIRED
AnnaBridge 171:3a7713b1edbc 447 enet_ptp_config_t *ptpConfig; /*!< PTP 1588 feature configuration */
AnnaBridge 171:3a7713b1edbc 448 #endif /* ENET_PTP1588FEATURE_REQUIRED */
AnnaBridge 171:3a7713b1edbc 449 } enet_config_t;
AnnaBridge 171:3a7713b1edbc 450
AnnaBridge 171:3a7713b1edbc 451 /* Forward declaration of the handle typedef. */
AnnaBridge 171:3a7713b1edbc 452 typedef struct _enet_handle enet_handle_t;
AnnaBridge 171:3a7713b1edbc 453
AnnaBridge 171:3a7713b1edbc 454 /*! @brief ENET callback function. */
AnnaBridge 171:3a7713b1edbc 455 typedef void (*enet_callback_t)(
AnnaBridge 171:3a7713b1edbc 456 ENET_Type *base, enet_handle_t *handle, enet_event_t event, uint8_t channel, void *userData);
AnnaBridge 171:3a7713b1edbc 457
AnnaBridge 171:3a7713b1edbc 458 /*! @brief Defines the ENET transmit buffer descriptor ring/queue structure. */
AnnaBridge 171:3a7713b1edbc 459 typedef struct _enet_tx_bd_ring
AnnaBridge 171:3a7713b1edbc 460 {
AnnaBridge 171:3a7713b1edbc 461 enet_tx_bd_struct_t *txBdBase; /*!< Buffer descriptor base address pointer. */
AnnaBridge 171:3a7713b1edbc 462 uint16_t txGenIdx; /*!< tx generate index. */
AnnaBridge 171:3a7713b1edbc 463 uint16_t txConsumIdx; /*!< tx consum index. */
AnnaBridge 171:3a7713b1edbc 464 volatile uint16_t txDescUsed; /*!< tx descriptor used number. */
AnnaBridge 171:3a7713b1edbc 465 uint16_t txRingLen; /*!< tx ring length. */
AnnaBridge 171:3a7713b1edbc 466 #ifdef ENET_PTP1588FEATURE_REQUIRED
AnnaBridge 171:3a7713b1edbc 467 enet_ptp_time_data_ring_t txPtpTsDataRing; /*!< Transmit PTP 1588 time stamp data ring buffer. */
AnnaBridge 171:3a7713b1edbc 468 #endif /* ENET_PTP1588FEATURE_REQUIRED */
AnnaBridge 171:3a7713b1edbc 469 } enet_tx_bd_ring_t;
AnnaBridge 171:3a7713b1edbc 470
AnnaBridge 171:3a7713b1edbc 471 /*! @brief Defines the ENET receive buffer descriptor ring/queue structure. */
AnnaBridge 171:3a7713b1edbc 472 typedef struct _enet_rx_bd_ring
AnnaBridge 171:3a7713b1edbc 473 {
AnnaBridge 171:3a7713b1edbc 474 enet_rx_bd_struct_t *rxBdBase; /*!< Buffer descriptor base address pointer. */
AnnaBridge 171:3a7713b1edbc 475 uint16_t rxGenIdx; /*!< The current available receive buffer descriptor pointer. */
AnnaBridge 171:3a7713b1edbc 476 uint16_t rxRingLen; /*!< Receive ring length. */
AnnaBridge 171:3a7713b1edbc 477 uint32_t rxBuffSizeAlign; /*!< Receive buffer size. */
AnnaBridge 171:3a7713b1edbc 478 #ifdef ENET_PTP1588FEATURE_REQUIRED
AnnaBridge 171:3a7713b1edbc 479 enet_ptp_time_data_ring_t rxPtpTsDataRing; /*!< Receive PTP 1588 time stamp data ring buffer. */
AnnaBridge 171:3a7713b1edbc 480 #endif /* ENET_PTP1588FEATURE_REQUIRED*/
AnnaBridge 171:3a7713b1edbc 481 } enet_rx_bd_ring_t;
AnnaBridge 171:3a7713b1edbc 482
AnnaBridge 171:3a7713b1edbc 483 /*! @brief Defines the ENET handler structure. */
AnnaBridge 171:3a7713b1edbc 484 struct _enet_handle
AnnaBridge 171:3a7713b1edbc 485 {
AnnaBridge 171:3a7713b1edbc 486 bool multiQueEnable; /*!< Enable multi-queue. */
AnnaBridge 171:3a7713b1edbc 487 bool doubleBuffEnable; /*!< The double buffer is used in the descriptor. */
AnnaBridge 171:3a7713b1edbc 488 bool rxintEnable; /*!< Rx interrup enabled. */
AnnaBridge 171:3a7713b1edbc 489 enet_rx_bd_ring_t rxBdRing[ENET_RING_NUM_MAX]; /*!< Receive buffer descriptor. */
AnnaBridge 171:3a7713b1edbc 490 enet_tx_bd_ring_t txBdRing[ENET_RING_NUM_MAX]; /*!< Transmit buffer descriptor. */
AnnaBridge 171:3a7713b1edbc 491 #ifdef ENET_PTP1588FEATURE_REQUIRED
AnnaBridge 171:3a7713b1edbc 492 uint32_t rxbuffers[ENET_RXBUFFSTORE_NUM]; /*!< The Initi-rx buffers will be used for reInitialize. */
AnnaBridge 171:3a7713b1edbc 493 #endif
AnnaBridge 171:3a7713b1edbc 494 enet_callback_t callback; /*!< Callback function. */
AnnaBridge 171:3a7713b1edbc 495 void *userData; /*!< Callback function parameter.*/
AnnaBridge 171:3a7713b1edbc 496 };
AnnaBridge 171:3a7713b1edbc 497
AnnaBridge 171:3a7713b1edbc 498 /*******************************************************************************
AnnaBridge 171:3a7713b1edbc 499 * API
AnnaBridge 171:3a7713b1edbc 500 ******************************************************************************/
AnnaBridge 171:3a7713b1edbc 501
AnnaBridge 171:3a7713b1edbc 502 #if defined(__cplusplus)
AnnaBridge 171:3a7713b1edbc 503 extern "C" {
AnnaBridge 171:3a7713b1edbc 504 #endif
AnnaBridge 171:3a7713b1edbc 505
AnnaBridge 171:3a7713b1edbc 506 /*!
AnnaBridge 171:3a7713b1edbc 507 * @name Initialization and De-initialization
AnnaBridge 171:3a7713b1edbc 508 * @{
AnnaBridge 171:3a7713b1edbc 509 */
AnnaBridge 171:3a7713b1edbc 510
AnnaBridge 171:3a7713b1edbc 511 /*!
AnnaBridge 171:3a7713b1edbc 512 * @brief Gets the ENET default configuration structure.
AnnaBridge 171:3a7713b1edbc 513 *
AnnaBridge 171:3a7713b1edbc 514 * The purpose of this API is to get the default ENET configure
AnnaBridge 171:3a7713b1edbc 515 * structure for ENET_Init(). User may use the initialized
AnnaBridge 171:3a7713b1edbc 516 * structure unchanged in ENET_Init(), or modify some fields of the
AnnaBridge 171:3a7713b1edbc 517 * structure before calling ENET_Init().
AnnaBridge 171:3a7713b1edbc 518 * Example:
AnnaBridge 171:3a7713b1edbc 519 @code
AnnaBridge 171:3a7713b1edbc 520 enet_config_t config;
AnnaBridge 171:3a7713b1edbc 521 ENET_GetDefaultConfig(&config);
AnnaBridge 171:3a7713b1edbc 522 @endcode
AnnaBridge 171:3a7713b1edbc 523 * @param config The ENET mac controller configuration structure pointer.
AnnaBridge 171:3a7713b1edbc 524 */
AnnaBridge 171:3a7713b1edbc 525 void ENET_GetDefaultConfig(enet_config_t *config);
AnnaBridge 171:3a7713b1edbc 526
AnnaBridge 171:3a7713b1edbc 527 /*!
AnnaBridge 171:3a7713b1edbc 528 * @brief Initializes the ENET module.
AnnaBridge 171:3a7713b1edbc 529 *
AnnaBridge 171:3a7713b1edbc 530 * This function ungates the module clock and initializes it with the ENET basic
AnnaBridge 171:3a7713b1edbc 531 * configuration.
AnnaBridge 171:3a7713b1edbc 532 *
AnnaBridge 171:3a7713b1edbc 533 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 534 * @param config ENET mac configuration structure pointer.
AnnaBridge 171:3a7713b1edbc 535 * The "enet_config_t" type mac configuration return from ENET_GetDefaultConfig
AnnaBridge 171:3a7713b1edbc 536 * can be used directly. It is also possible to verify the Mac configuration using other methods.
AnnaBridge 171:3a7713b1edbc 537 * @param macAddr ENET mac address of Ethernet device. This MAC address should be
AnnaBridge 171:3a7713b1edbc 538 * provided.
AnnaBridge 171:3a7713b1edbc 539 * @param refclkSrc_Hz ENET input reference clock.
AnnaBridge 171:3a7713b1edbc 540 */
AnnaBridge 171:3a7713b1edbc 541 void ENET_Init(ENET_Type *base, const enet_config_t *config, uint8_t *macAddr, uint32_t refclkSrc_Hz);
AnnaBridge 171:3a7713b1edbc 542
AnnaBridge 171:3a7713b1edbc 543 /*!
AnnaBridge 171:3a7713b1edbc 544 * @brief Deinitializes the ENET module.
AnnaBridge 171:3a7713b1edbc 545
AnnaBridge 171:3a7713b1edbc 546 * This function gates the module clock and disables the ENET module.
AnnaBridge 171:3a7713b1edbc 547 *
AnnaBridge 171:3a7713b1edbc 548 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 549 */
AnnaBridge 171:3a7713b1edbc 550 void ENET_Deinit(ENET_Type *base);
AnnaBridge 171:3a7713b1edbc 551
AnnaBridge 171:3a7713b1edbc 552 /*!
AnnaBridge 171:3a7713b1edbc 553 * @brief Initialize for all ENET descriptors.
AnnaBridge 171:3a7713b1edbc 554 *
AnnaBridge 171:3a7713b1edbc 555 * @note This function is do all tx/rx descriptors initialization. Because this API
AnnaBridge 171:3a7713b1edbc 556 * read all interrupt registers first and then set the interrupt flag for all descriptos,
AnnaBridge 171:3a7713b1edbc 557 * if the interrupt register is set. so the descriptor initialization should be called
AnnaBridge 171:3a7713b1edbc 558 * after ENET_Init(), ENET_EnableInterrupts() and ENET_CreateHandle()(if transactional APIs
AnnaBridge 171:3a7713b1edbc 559 * are used).
AnnaBridge 171:3a7713b1edbc 560 *
AnnaBridge 171:3a7713b1edbc 561 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 562 * @param config The configuration for ENET.
AnnaBridge 171:3a7713b1edbc 563 * @param bufferConfig All buffers configuration.
AnnaBridge 171:3a7713b1edbc 564 */
AnnaBridge 171:3a7713b1edbc 565 status_t ENET_DescriptorInit(ENET_Type *base, enet_config_t *config, enet_buffer_config_t *bufferConfig);
AnnaBridge 171:3a7713b1edbc 566
AnnaBridge 171:3a7713b1edbc 567 /*!
AnnaBridge 171:3a7713b1edbc 568 * @brief Starts the ENET rx/tx.
AnnaBridge 171:3a7713b1edbc 569 * This function enable the tx/rx and starts the rx/tx DMA.
AnnaBridge 171:3a7713b1edbc 570 * This shall be set after ENET initialization and before
AnnaBridge 171:3a7713b1edbc 571 * starting to receive the data.
AnnaBridge 171:3a7713b1edbc 572 *
AnnaBridge 171:3a7713b1edbc 573 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 574 * @param rxRingNum The number of the used rx rings. It shall not be
AnnaBridge 171:3a7713b1edbc 575 * larger than the ENET_RING_NUM_MAX(2). If the ringNum is set with
AnnaBridge 171:3a7713b1edbc 576 * 1, the ring 0 will be used.
AnnaBridge 171:3a7713b1edbc 577 * @param txRingNum The number of the used tx rings. It shall not be
AnnaBridge 171:3a7713b1edbc 578 * larger than the ENET_RING_NUM_MAX(2). If the ringNum is set with
AnnaBridge 171:3a7713b1edbc 579 * 1, the ring 0 will be used.
AnnaBridge 171:3a7713b1edbc 580 *
AnnaBridge 171:3a7713b1edbc 581 * @note This must be called after all the ENET initilization.
AnnaBridge 171:3a7713b1edbc 582 * And should be called when the ENET receive/transmit is required.
AnnaBridge 171:3a7713b1edbc 583 */
AnnaBridge 171:3a7713b1edbc 584 void ENET_StartRxTx(ENET_Type *base, uint8_t txRingNum, uint8_t rxRingNum);
AnnaBridge 171:3a7713b1edbc 585
AnnaBridge 171:3a7713b1edbc 586 /* @} */
AnnaBridge 171:3a7713b1edbc 587
AnnaBridge 171:3a7713b1edbc 588 /*!
AnnaBridge 171:3a7713b1edbc 589 * @name MII interface operation
AnnaBridge 171:3a7713b1edbc 590 * @{
AnnaBridge 171:3a7713b1edbc 591 */
AnnaBridge 171:3a7713b1edbc 592
AnnaBridge 171:3a7713b1edbc 593 /*!
AnnaBridge 171:3a7713b1edbc 594 * @brief Sets the ENET MII speed and duplex.
AnnaBridge 171:3a7713b1edbc 595 *
AnnaBridge 171:3a7713b1edbc 596 * This API is provided to dynamically change the speed and dulpex for MAC.
AnnaBridge 171:3a7713b1edbc 597 *
AnnaBridge 171:3a7713b1edbc 598 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 599 * @param speed The speed of the RMII mode.
AnnaBridge 171:3a7713b1edbc 600 * @param duplex The duplex of the RMII mode.
AnnaBridge 171:3a7713b1edbc 601 */
AnnaBridge 171:3a7713b1edbc 602 static inline void ENET_SetMII(ENET_Type *base, enet_mii_speed_t speed, enet_mii_duplex_t duplex)
AnnaBridge 171:3a7713b1edbc 603 {
AnnaBridge 171:3a7713b1edbc 604 uint32_t reg = base->MAC_CONFIG & ~(ENET_MAC_CONFIG_DM_MASK | ENET_MAC_CONFIG_FES_MASK);
AnnaBridge 171:3a7713b1edbc 605 reg |= ENET_MAC_CONFIG_DM(duplex) | ENET_MAC_CONFIG_FES(speed);
AnnaBridge 171:3a7713b1edbc 606
AnnaBridge 171:3a7713b1edbc 607 base->MAC_CONFIG = reg;
AnnaBridge 171:3a7713b1edbc 608 }
AnnaBridge 171:3a7713b1edbc 609
AnnaBridge 171:3a7713b1edbc 610 /*!
AnnaBridge 171:3a7713b1edbc 611 * @brief Sets the ENET SMI(serial management interface)- MII management interface.
AnnaBridge 171:3a7713b1edbc 612 *
AnnaBridge 171:3a7713b1edbc 613 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 614 */
AnnaBridge 171:3a7713b1edbc 615 void ENET_SetSMI(ENET_Type *base);
AnnaBridge 171:3a7713b1edbc 616
AnnaBridge 171:3a7713b1edbc 617 /*!
AnnaBridge 171:3a7713b1edbc 618 * @brief Checks if the SMI is busy.
AnnaBridge 171:3a7713b1edbc 619 *
AnnaBridge 171:3a7713b1edbc 620 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 621 * @return The status of MII Busy status.
AnnaBridge 171:3a7713b1edbc 622 */
AnnaBridge 171:3a7713b1edbc 623 static inline bool ENET_IsSMIBusy(ENET_Type *base)
AnnaBridge 171:3a7713b1edbc 624 {
AnnaBridge 171:3a7713b1edbc 625 return (base->MAC_MDIO_ADDR & ENET_MAC_MDIO_ADDR_MB_MASK) ? true : false;
AnnaBridge 171:3a7713b1edbc 626 }
AnnaBridge 171:3a7713b1edbc 627
AnnaBridge 171:3a7713b1edbc 628 /*!
AnnaBridge 171:3a7713b1edbc 629 * @brief Reads data from the PHY register through SMI interface.
AnnaBridge 171:3a7713b1edbc 630 *
AnnaBridge 171:3a7713b1edbc 631 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 632 * @return The data read from PHY
AnnaBridge 171:3a7713b1edbc 633 */
AnnaBridge 171:3a7713b1edbc 634 static inline uint16_t ENET_ReadSMIData(ENET_Type *base)
AnnaBridge 171:3a7713b1edbc 635 {
AnnaBridge 171:3a7713b1edbc 636 return (uint16_t)(base->MAC_MDIO_DATA & ENET_MAC_MDIO_DATA_MD_MASK);
AnnaBridge 171:3a7713b1edbc 637 }
AnnaBridge 171:3a7713b1edbc 638
AnnaBridge 171:3a7713b1edbc 639 /*!
AnnaBridge 171:3a7713b1edbc 640 * @brief Starts an SMI read command.
AnnaBridge 171:3a7713b1edbc 641 * support both MDIO IEEE802.3 Clause 22 and clause 45.
AnnaBridge 171:3a7713b1edbc 642 *
AnnaBridge 171:3a7713b1edbc 643 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 644 * @param phyAddr The PHY address.
AnnaBridge 171:3a7713b1edbc 645 * @param phyReg The PHY register.
AnnaBridge 171:3a7713b1edbc 646 */
AnnaBridge 171:3a7713b1edbc 647 void ENET_StartSMIRead(ENET_Type *base, uint32_t phyAddr, uint32_t phyReg);
AnnaBridge 171:3a7713b1edbc 648
AnnaBridge 171:3a7713b1edbc 649 /*!
AnnaBridge 171:3a7713b1edbc 650 * @brief Starts a SMI write command.
AnnaBridge 171:3a7713b1edbc 651 * support both MDIO IEEE802.3 Clause 22 and clause 45.
AnnaBridge 171:3a7713b1edbc 652 *
AnnaBridge 171:3a7713b1edbc 653 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 654 * @param phyAddr The PHY address.
AnnaBridge 171:3a7713b1edbc 655 * @param phyReg The PHY register.
AnnaBridge 171:3a7713b1edbc 656 * @param data The data written to PHY.
AnnaBridge 171:3a7713b1edbc 657 */
AnnaBridge 171:3a7713b1edbc 658 void ENET_StartSMIWrite(ENET_Type *base, uint32_t phyAddr, uint32_t phyReg, uint32_t data);
AnnaBridge 171:3a7713b1edbc 659 /* @} */
AnnaBridge 171:3a7713b1edbc 660
AnnaBridge 171:3a7713b1edbc 661 /*!
AnnaBridge 171:3a7713b1edbc 662 * @name Other basic operation
AnnaBridge 171:3a7713b1edbc 663 * @{
AnnaBridge 171:3a7713b1edbc 664 */
AnnaBridge 171:3a7713b1edbc 665
AnnaBridge 171:3a7713b1edbc 666 /*!
AnnaBridge 171:3a7713b1edbc 667 * @brief Sets the ENET module Mac address.
AnnaBridge 171:3a7713b1edbc 668 *
AnnaBridge 171:3a7713b1edbc 669 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 670 * @param macAddr The six-byte Mac address pointer.
AnnaBridge 171:3a7713b1edbc 671 * The pointer is allocated by application and input into the API.
AnnaBridge 171:3a7713b1edbc 672 */
AnnaBridge 171:3a7713b1edbc 673 static inline void ENET_SetMacAddr(ENET_Type *base, uint8_t *macAddr)
AnnaBridge 171:3a7713b1edbc 674 {
AnnaBridge 171:3a7713b1edbc 675 assert(macAddr);
AnnaBridge 171:3a7713b1edbc 676
AnnaBridge 171:3a7713b1edbc 677 /* Set Macaddr - low last as that synchronizes the update */
AnnaBridge 171:3a7713b1edbc 678 base->MAC_ADDR_HIGH = ((uint32_t)macAddr[5] << 8) | ((uint32_t)macAddr[4]);
AnnaBridge 171:3a7713b1edbc 679 base->MAC_ADDR_LOW = ((uint32_t)macAddr[3] << 24) | ((uint32_t)macAddr[2] << 16) | ((uint32_t)macAddr[1] << 8) |
AnnaBridge 171:3a7713b1edbc 680 ((uint32_t)macAddr[0]);
AnnaBridge 171:3a7713b1edbc 681 }
AnnaBridge 171:3a7713b1edbc 682
AnnaBridge 171:3a7713b1edbc 683 /*!
AnnaBridge 171:3a7713b1edbc 684 * @brief Gets the ENET module Mac address.
AnnaBridge 171:3a7713b1edbc 685 *
AnnaBridge 171:3a7713b1edbc 686 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 687 * @param macAddr The six-byte Mac address pointer.
AnnaBridge 171:3a7713b1edbc 688 * The pointer is allocated by application and input into the API.
AnnaBridge 171:3a7713b1edbc 689 */
AnnaBridge 171:3a7713b1edbc 690 void ENET_GetMacAddr(ENET_Type *base, uint8_t *macAddr);
AnnaBridge 171:3a7713b1edbc 691
AnnaBridge 171:3a7713b1edbc 692 /*!
AnnaBridge 171:3a7713b1edbc 693 * @brief Set the MAC to enter into power down mode.
AnnaBridge 171:3a7713b1edbc 694 * the remote power wake up frame and magic frame can wake up
AnnaBridge 171:3a7713b1edbc 695 * the ENET from the power down mode.
AnnaBridge 171:3a7713b1edbc 696 *
AnnaBridge 171:3a7713b1edbc 697 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 698 * @param wakeFilter The wakeFilter provided to configure the wake up frame fitlter.
AnnaBridge 171:3a7713b1edbc 699 * Set the wakeFilter to NULL is not required. But if you have the filter requirement,
AnnaBridge 171:3a7713b1edbc 700 * please make sure the wakeFilter pointer shall be eight continous
AnnaBridge 171:3a7713b1edbc 701 * 32-bits configuration.
AnnaBridge 171:3a7713b1edbc 702 */
AnnaBridge 171:3a7713b1edbc 703 void ENET_EnterPowerDown(ENET_Type *base, uint32_t *wakeFilter);
AnnaBridge 171:3a7713b1edbc 704
AnnaBridge 171:3a7713b1edbc 705 /*!
AnnaBridge 171:3a7713b1edbc 706 * @brief Set the MAC to exit power down mode.
AnnaBridge 171:3a7713b1edbc 707 * Eixt from the power down mode and recover to noraml work mode.
AnnaBridge 171:3a7713b1edbc 708 *
AnnaBridge 171:3a7713b1edbc 709 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 710 */
AnnaBridge 171:3a7713b1edbc 711 static inline void ENET_ExitPowerDown(ENET_Type *base)
AnnaBridge 171:3a7713b1edbc 712 {
AnnaBridge 171:3a7713b1edbc 713 /* Clear and status ans reset the power down. */
AnnaBridge 171:3a7713b1edbc 714 base->MAC_PMT_CRTL_STAT &= ~ENET_MAC_PMT_CRTL_STAT_PWRDWN_MASK;
AnnaBridge 171:3a7713b1edbc 715
AnnaBridge 171:3a7713b1edbc 716 /* Restore the tx which is disabled when enter power down mode. */
AnnaBridge 171:3a7713b1edbc 717 base->DMA_CH[0].DMA_CHX_TX_CTRL |= ENET_DMA_CH_DMA_CHX_TX_CTRL_ST_MASK;
AnnaBridge 171:3a7713b1edbc 718 base->DMA_CH[1].DMA_CHX_TX_CTRL |= ENET_DMA_CH_DMA_CHX_TX_CTRL_ST_MASK;
AnnaBridge 171:3a7713b1edbc 719 base->MAC_CONFIG |= ENET_MAC_CONFIG_TE_MASK;
AnnaBridge 171:3a7713b1edbc 720 }
AnnaBridge 171:3a7713b1edbc 721
AnnaBridge 171:3a7713b1edbc 722 /* @} */
AnnaBridge 171:3a7713b1edbc 723
AnnaBridge 171:3a7713b1edbc 724 /*!
AnnaBridge 171:3a7713b1edbc 725 * @name Interrupts.
AnnaBridge 171:3a7713b1edbc 726 * @{
AnnaBridge 171:3a7713b1edbc 727 */
AnnaBridge 171:3a7713b1edbc 728
AnnaBridge 171:3a7713b1edbc 729 /*!
AnnaBridge 171:3a7713b1edbc 730 * @brief Enables the ENET DMA and MAC interrupts.
AnnaBridge 171:3a7713b1edbc 731 *
AnnaBridge 171:3a7713b1edbc 732 * This function enables the ENET interrupt according to the provided mask. The mask
AnnaBridge 171:3a7713b1edbc 733 * is a logical OR of enet_dma_interrupt_enable_t and enet_mac_interrupt_enable_t.
AnnaBridge 171:3a7713b1edbc 734 * For example, to enable the dma and mac interrupt, do the following.
AnnaBridge 171:3a7713b1edbc 735 * @code
AnnaBridge 171:3a7713b1edbc 736 * ENET_EnableInterrupts(ENET, kENET_DmaRx | kENET_DmaTx | kENET_MacPmt);
AnnaBridge 171:3a7713b1edbc 737 * @endcode
AnnaBridge 171:3a7713b1edbc 738 *
AnnaBridge 171:3a7713b1edbc 739 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 740 * @param mask ENET interrupts to enable. This is a logical OR of both
AnnaBridge 171:3a7713b1edbc 741 * enumeration :: enet_dma_interrupt_enable_t and enet_mac_interrupt_enable_t.
AnnaBridge 171:3a7713b1edbc 742 */
AnnaBridge 171:3a7713b1edbc 743 void ENET_EnableInterrupts(ENET_Type *base, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 744
AnnaBridge 171:3a7713b1edbc 745 /*!
AnnaBridge 171:3a7713b1edbc 746 * @brief Disables the ENET DMA and MAC interrupts.
AnnaBridge 171:3a7713b1edbc 747 *
AnnaBridge 171:3a7713b1edbc 748 * This function disables the ENET interrupt according to the provided mask. The mask
AnnaBridge 171:3a7713b1edbc 749 * is a logical OR of enet_dma_interrupt_enable_t and enet_mac_interrupt_enable_t.
AnnaBridge 171:3a7713b1edbc 750 * For example, to disable the dma and mac interrupt, do the following.
AnnaBridge 171:3a7713b1edbc 751 * @code
AnnaBridge 171:3a7713b1edbc 752 * ENET_DisableInterrupts(ENET, kENET_DmaRx | kENET_DmaTx | kENET_MacPmt);
AnnaBridge 171:3a7713b1edbc 753 * @endcode
AnnaBridge 171:3a7713b1edbc 754 *
AnnaBridge 171:3a7713b1edbc 755 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 756 * @param mask ENET interrupts to disables. This is a logical OR of both
AnnaBridge 171:3a7713b1edbc 757 * enumeration :: enet_dma_interrupt_enable_t and enet_mac_interrupt_enable_t.
AnnaBridge 171:3a7713b1edbc 758 */
AnnaBridge 171:3a7713b1edbc 759 void ENET_DisableInterrupts(ENET_Type *base, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 760
AnnaBridge 171:3a7713b1edbc 761 /*!
AnnaBridge 171:3a7713b1edbc 762 * @brief Gets the ENET DMA interrupt status flag.
AnnaBridge 171:3a7713b1edbc 763 *
AnnaBridge 171:3a7713b1edbc 764 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 765 * @param channel The DMA Channel. Shall not be larger than ENET_RING_NUM_MAX.
AnnaBridge 171:3a7713b1edbc 766 * @return The event status of the interrupt source. This is the logical OR of members
AnnaBridge 171:3a7713b1edbc 767 * of the enumeration :: enet_dma_interrupt_enable_t.
AnnaBridge 171:3a7713b1edbc 768 */
AnnaBridge 171:3a7713b1edbc 769 static inline uint32_t ENET_GetDmaInterruptStatus(ENET_Type *base, uint8_t channel)
AnnaBridge 171:3a7713b1edbc 770 {
AnnaBridge 171:3a7713b1edbc 771 return base->DMA_CH[channel].DMA_CHX_STAT;
AnnaBridge 171:3a7713b1edbc 772 }
AnnaBridge 171:3a7713b1edbc 773
AnnaBridge 171:3a7713b1edbc 774 /*!
AnnaBridge 171:3a7713b1edbc 775 * @brief Clear the ENET DMA interrupt status flag.
AnnaBridge 171:3a7713b1edbc 776 *
AnnaBridge 171:3a7713b1edbc 777 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 778 * @param channel The DMA Channel. Shall not be larger than ENET_RING_NUM_MAX.
AnnaBridge 171:3a7713b1edbc 779 * @return The event status of the interrupt source. This is the logical OR of members
AnnaBridge 171:3a7713b1edbc 780 * of the enumeration :: enet_dma_interrupt_enable_t.
AnnaBridge 171:3a7713b1edbc 781 */
AnnaBridge 171:3a7713b1edbc 782 static inline void ENET_ClearDmaInterruptStatus(ENET_Type *base, uint8_t channel, uint32_t mask)
AnnaBridge 171:3a7713b1edbc 783 {
AnnaBridge 171:3a7713b1edbc 784 /* Clear the dam interrupt status bit in dma channel interrupt status register. */
AnnaBridge 171:3a7713b1edbc 785 base->DMA_CH[channel].DMA_CHX_STAT = mask;
AnnaBridge 171:3a7713b1edbc 786 }
AnnaBridge 171:3a7713b1edbc 787
AnnaBridge 171:3a7713b1edbc 788 /*!
AnnaBridge 171:3a7713b1edbc 789 * @brief Gets the ENET MAC interrupt status flag.
AnnaBridge 171:3a7713b1edbc 790 *
AnnaBridge 171:3a7713b1edbc 791 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 792 * @return The event status of the interrupt source.
AnnaBridge 171:3a7713b1edbc 793 * Use the enum in enet_mac_interrupt_enable_t and right shift
AnnaBridge 171:3a7713b1edbc 794 * ENET_MACINT_ENUM_OFFSET to mask the returned value to get the
AnnaBridge 171:3a7713b1edbc 795 * exact interrupt status.
AnnaBridge 171:3a7713b1edbc 796 */
AnnaBridge 171:3a7713b1edbc 797 static inline uint32_t ENET_GetMacInterruptStatus(ENET_Type *base)
AnnaBridge 171:3a7713b1edbc 798 {
AnnaBridge 171:3a7713b1edbc 799 return base->MAC_INTR_STAT;
AnnaBridge 171:3a7713b1edbc 800 }
AnnaBridge 171:3a7713b1edbc 801
AnnaBridge 171:3a7713b1edbc 802 /*!
AnnaBridge 171:3a7713b1edbc 803 * @brief Clears the ENET mac interrupt events status flag.
AnnaBridge 171:3a7713b1edbc 804 *
AnnaBridge 171:3a7713b1edbc 805 * This function clears enabled ENET interrupts according to the provided mask. The mask
AnnaBridge 171:3a7713b1edbc 806 * is a logical OR of enumeration members. See the @ref enet_mac_interrupt_enable_t.
AnnaBridge 171:3a7713b1edbc 807 * For example, to clear the TX frame interrupt and RX frame interrupt, do the following.
AnnaBridge 171:3a7713b1edbc 808 * @code
AnnaBridge 171:3a7713b1edbc 809 * ENET_ClearMacInterruptStatus(ENET, kENET_MacPmt);
AnnaBridge 171:3a7713b1edbc 810 * @endcode
AnnaBridge 171:3a7713b1edbc 811 *
AnnaBridge 171:3a7713b1edbc 812 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 813 * @param mask ENET interrupt source to be cleared.
AnnaBridge 171:3a7713b1edbc 814 * This is the logical OR of members of the enumeration :: enet_mac_interrupt_enable_t.
AnnaBridge 171:3a7713b1edbc 815 */
AnnaBridge 171:3a7713b1edbc 816 void ENET_ClearMacInterruptStatus(ENET_Type *base, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 817
AnnaBridge 171:3a7713b1edbc 818 /* @} */
AnnaBridge 171:3a7713b1edbc 819
AnnaBridge 171:3a7713b1edbc 820 /*!
AnnaBridge 171:3a7713b1edbc 821 * @name Functional operation.
AnnaBridge 171:3a7713b1edbc 822 * @{
AnnaBridge 171:3a7713b1edbc 823 */
AnnaBridge 171:3a7713b1edbc 824
AnnaBridge 171:3a7713b1edbc 825 /*!
AnnaBridge 171:3a7713b1edbc 826 * @brief Get the tx descriptor DMA Own flag.
AnnaBridge 171:3a7713b1edbc 827 *
AnnaBridge 171:3a7713b1edbc 828 * @param txDesc The given tx descriptor.
AnnaBridge 171:3a7713b1edbc 829 * @retval True the dma own tx descriptor, false application own tx descriptor.
AnnaBridge 171:3a7713b1edbc 830 *
AnnaBridge 171:3a7713b1edbc 831 */
AnnaBridge 171:3a7713b1edbc 832 static inline bool ENET_IsTxDescriptorDmaOwn(enet_tx_bd_struct_t *txDesc)
AnnaBridge 171:3a7713b1edbc 833 {
AnnaBridge 171:3a7713b1edbc 834 return (txDesc->controlStat & ENET_TXDESCRIP_RD_OWN_MASK) ? true : false;
AnnaBridge 171:3a7713b1edbc 835 }
AnnaBridge 171:3a7713b1edbc 836
AnnaBridge 171:3a7713b1edbc 837 /*!
AnnaBridge 171:3a7713b1edbc 838 * @brief Setup a given tx descriptor.
AnnaBridge 171:3a7713b1edbc 839 * This function is a low level functional API to setup or prepare
AnnaBridge 171:3a7713b1edbc 840 * a given tx descriptor.
AnnaBridge 171:3a7713b1edbc 841 *
AnnaBridge 171:3a7713b1edbc 842 * @param txDesc The given tx descriptor.
AnnaBridge 171:3a7713b1edbc 843 * @param buffer1 The first buffer address in the descriptor.
AnnaBridge 171:3a7713b1edbc 844 * @param bytes1 The bytes in the fist buffer.
AnnaBridge 171:3a7713b1edbc 845 * @param buffer2 The second buffer address in the descriptor.
AnnaBridge 171:3a7713b1edbc 846 * @param bytes1 The bytes in the second buffer.
AnnaBridge 171:3a7713b1edbc 847 * @param framelen The length of the frame to be transmitted.
AnnaBridge 171:3a7713b1edbc 848 * @param intEnable Interrupt enable flag.
AnnaBridge 171:3a7713b1edbc 849 * @param tsEnable The timestamp enable.
AnnaBridge 171:3a7713b1edbc 850 * @param flag The flag of this tx desciriptor, see "enet_desc_flag" .
AnnaBridge 171:3a7713b1edbc 851 * @param slotNum The slot num used for AV only.
AnnaBridge 171:3a7713b1edbc 852 *
AnnaBridge 171:3a7713b1edbc 853 * @note This must be called after all the ENET initilization.
AnnaBridge 171:3a7713b1edbc 854 * And should be called when the ENET receive/transmit is required.
AnnaBridge 171:3a7713b1edbc 855 * Transmit buffers are 'zero-copy' buffers, so the buffer must remain in
AnnaBridge 171:3a7713b1edbc 856 * memory until the packet has been fully transmitted. The buffers
AnnaBridge 171:3a7713b1edbc 857 * should be free or requeued in the transmit interrupt irq handler.
AnnaBridge 171:3a7713b1edbc 858 */
AnnaBridge 171:3a7713b1edbc 859 void ENET_SetupTxDescriptor(enet_tx_bd_struct_t *txDesc,
AnnaBridge 171:3a7713b1edbc 860 void *buffer1,
AnnaBridge 171:3a7713b1edbc 861 uint32_t bytes1,
AnnaBridge 171:3a7713b1edbc 862 void *buffer2,
AnnaBridge 171:3a7713b1edbc 863 uint32_t bytes2,
AnnaBridge 171:3a7713b1edbc 864 uint32_t framelen,
AnnaBridge 171:3a7713b1edbc 865 bool intEnable,
AnnaBridge 171:3a7713b1edbc 866 bool tsEnable,
AnnaBridge 171:3a7713b1edbc 867 enet_desc_flag flag,
AnnaBridge 171:3a7713b1edbc 868 uint8_t slotNum);
AnnaBridge 171:3a7713b1edbc 869
AnnaBridge 171:3a7713b1edbc 870 /*!
AnnaBridge 171:3a7713b1edbc 871 * @brief Update the tx descriptor tail pointer.
AnnaBridge 171:3a7713b1edbc 872 * This function is a low level functional API to update the
AnnaBridge 171:3a7713b1edbc 873 * the tx descriptor tail.
AnnaBridge 171:3a7713b1edbc 874 * This is called after you setup a new tx descriptor to update
AnnaBridge 171:3a7713b1edbc 875 * the tail pointer to make the new descritor accessable by DMA.
AnnaBridge 171:3a7713b1edbc 876 *
AnnaBridge 171:3a7713b1edbc 877 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 878 * @param channel The tx DMA channel.
AnnaBridge 171:3a7713b1edbc 879 * @param txDescTailAddrAlign The new tx tail pointer address.
AnnaBridge 171:3a7713b1edbc 880 *
AnnaBridge 171:3a7713b1edbc 881 */
AnnaBridge 171:3a7713b1edbc 882 static inline void ENET_UpdateTxDescriptorTail(ENET_Type *base, uint8_t channel, uint32_t txDescTailAddrAlign)
AnnaBridge 171:3a7713b1edbc 883 {
AnnaBridge 171:3a7713b1edbc 884 base->DMA_CH[channel].DMA_CHX_TXDESC_TAIL_PTR = txDescTailAddrAlign & ~ENET_ADDR_ALIGNMENT;
AnnaBridge 171:3a7713b1edbc 885 }
AnnaBridge 171:3a7713b1edbc 886
AnnaBridge 171:3a7713b1edbc 887 /*!
AnnaBridge 171:3a7713b1edbc 888 * @brief Update the rx descriptor tail pointer.
AnnaBridge 171:3a7713b1edbc 889 * This function is a low level functional API to update the
AnnaBridge 171:3a7713b1edbc 890 * the rx descriptor tail.
AnnaBridge 171:3a7713b1edbc 891 * This is called after you setup a new rx descriptor to update
AnnaBridge 171:3a7713b1edbc 892 * the tail pointer to make the new descritor accessable by DMA
AnnaBridge 171:3a7713b1edbc 893 * and to anouse the rx poll command for DMA.
AnnaBridge 171:3a7713b1edbc 894 *
AnnaBridge 171:3a7713b1edbc 895 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 896 * @param channel The rx DMA channel.
AnnaBridge 171:3a7713b1edbc 897 * @param rxDescTailAddrAlign The new rx tail pointer address.
AnnaBridge 171:3a7713b1edbc 898 *
AnnaBridge 171:3a7713b1edbc 899 */
AnnaBridge 171:3a7713b1edbc 900 static inline void ENET_UpdateRxDescriptorTail(ENET_Type *base, uint8_t channel, uint32_t rxDescTailAddrAlign)
AnnaBridge 171:3a7713b1edbc 901 {
AnnaBridge 171:3a7713b1edbc 902 base->DMA_CH[channel].DMA_CHX_RXDESC_TAIL_PTR = rxDescTailAddrAlign & ~ENET_ADDR_ALIGNMENT;
AnnaBridge 171:3a7713b1edbc 903 }
AnnaBridge 171:3a7713b1edbc 904
AnnaBridge 171:3a7713b1edbc 905 /*!
AnnaBridge 171:3a7713b1edbc 906 * @brief Gets the context in the ENET rx descriptor.
AnnaBridge 171:3a7713b1edbc 907 * This function is a low level functional API to get the
AnnaBridge 171:3a7713b1edbc 908 * the status flag from a given rx descriptor.
AnnaBridge 171:3a7713b1edbc 909 *
AnnaBridge 171:3a7713b1edbc 910 * @param rxDesc The given rx descriptor.
AnnaBridge 171:3a7713b1edbc 911 * @retval The RDES3 regions for write-back format rx buffer descriptor.
AnnaBridge 171:3a7713b1edbc 912 *
AnnaBridge 171:3a7713b1edbc 913 * @note This must be called after all the ENET initilization.
AnnaBridge 171:3a7713b1edbc 914 * And should be called when the ENET receive/transmit is required.
AnnaBridge 171:3a7713b1edbc 915 */
AnnaBridge 171:3a7713b1edbc 916 static inline uint32_t ENET_GetRxDescriptor(enet_rx_bd_struct_t *rxDesc)
AnnaBridge 171:3a7713b1edbc 917 {
AnnaBridge 171:3a7713b1edbc 918 assert(rxDesc);
AnnaBridge 171:3a7713b1edbc 919
AnnaBridge 171:3a7713b1edbc 920 return rxDesc->control;
AnnaBridge 171:3a7713b1edbc 921 }
AnnaBridge 171:3a7713b1edbc 922 /*!
AnnaBridge 171:3a7713b1edbc 923 * @brief Updates the buffers and the own status for a given rx descriptor.
AnnaBridge 171:3a7713b1edbc 924 * This function is a low level functional API to Updates the
AnnaBridge 171:3a7713b1edbc 925 * buffers and the own status for a given rx descriptor.
AnnaBridge 171:3a7713b1edbc 926 *
AnnaBridge 171:3a7713b1edbc 927 * @param rxDesc The given rx descriptor.
AnnaBridge 171:3a7713b1edbc 928 * @param buffer1 The first buffer address in the descriptor.
AnnaBridge 171:3a7713b1edbc 929 * @param buffer2 The second buffer address in the descriptor.
AnnaBridge 171:3a7713b1edbc 930 * @param intEnable Interrupt enable flag.
AnnaBridge 171:3a7713b1edbc 931 * @param doubleBuffEnable The double buffer enable flag.
AnnaBridge 171:3a7713b1edbc 932 *
AnnaBridge 171:3a7713b1edbc 933 * @note This must be called after all the ENET initilization.
AnnaBridge 171:3a7713b1edbc 934 * And should be called when the ENET receive/transmit is required.
AnnaBridge 171:3a7713b1edbc 935 */
AnnaBridge 171:3a7713b1edbc 936 void ENET_UpdateRxDescriptor(
AnnaBridge 171:3a7713b1edbc 937 enet_rx_bd_struct_t *rxDesc, void *buffer1, void *buffer2, bool intEnable, bool doubleBuffEnable);
AnnaBridge 171:3a7713b1edbc 938
AnnaBridge 171:3a7713b1edbc 939 /* @} */
AnnaBridge 171:3a7713b1edbc 940
AnnaBridge 171:3a7713b1edbc 941 /*!
AnnaBridge 171:3a7713b1edbc 942 * @name Transactional operation
AnnaBridge 171:3a7713b1edbc 943 * @{
AnnaBridge 171:3a7713b1edbc 944 */
AnnaBridge 171:3a7713b1edbc 945
AnnaBridge 171:3a7713b1edbc 946 /*!
AnnaBridge 171:3a7713b1edbc 947 * @brief Create ENET Handler
AnnaBridge 171:3a7713b1edbc 948 *
AnnaBridge 171:3a7713b1edbc 949 * This is a transactional API and it's provided to store all datas which are needed
AnnaBridge 171:3a7713b1edbc 950 * during the whole transactional process. This API should not be used when you use
AnnaBridge 171:3a7713b1edbc 951 * functional APIs to do data tx/rx. This is funtion will store many data/flag for
AnnaBridge 171:3a7713b1edbc 952 * transactional use, so all configure API such as ENET_Init(), ENET_DescriptorInit(),
AnnaBridge 171:3a7713b1edbc 953 * ENET_EnableInterrupts() etc.
AnnaBridge 171:3a7713b1edbc 954 *
AnnaBridge 171:3a7713b1edbc 955 * @note as our transactional transmit API use the zero-copy transmit buffer.
AnnaBridge 171:3a7713b1edbc 956 * so there are two thing we emphasize here:
AnnaBridge 171:3a7713b1edbc 957 * 1. tx buffer free/requeue for application should be done in the tx
AnnaBridge 171:3a7713b1edbc 958 * interrupt handler. Please set callback: kENET_TxIntEvent with tx buffer free/requeue
AnnaBridge 171:3a7713b1edbc 959 * process APIs.
AnnaBridge 171:3a7713b1edbc 960 * 2. the tx interrupt is forced to open.
AnnaBridge 171:3a7713b1edbc 961 *
AnnaBridge 171:3a7713b1edbc 962 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 963 * @param handle ENET handler.
AnnaBridge 171:3a7713b1edbc 964 * @param config ENET configuration.
AnnaBridge 171:3a7713b1edbc 965 * @param bufferConfig ENET buffer configuration.
AnnaBridge 171:3a7713b1edbc 966 * @param callback The callback function.
AnnaBridge 171:3a7713b1edbc 967 * @param userData The application data.
AnnaBridge 171:3a7713b1edbc 968 */
AnnaBridge 171:3a7713b1edbc 969 void ENET_CreateHandler(ENET_Type *base,
AnnaBridge 171:3a7713b1edbc 970 enet_handle_t *handle,
AnnaBridge 171:3a7713b1edbc 971 enet_config_t *config,
AnnaBridge 171:3a7713b1edbc 972 enet_buffer_config_t *bufferConfig,
AnnaBridge 171:3a7713b1edbc 973 enet_callback_t callback,
AnnaBridge 171:3a7713b1edbc 974 void *userData);
AnnaBridge 171:3a7713b1edbc 975
AnnaBridge 171:3a7713b1edbc 976 /*!
AnnaBridge 171:3a7713b1edbc 977 * @brief Gets the size of the read frame.
AnnaBridge 171:3a7713b1edbc 978 * This function gets a received frame size from the ENET buffer descriptors.
AnnaBridge 171:3a7713b1edbc 979 * @note The FCS of the frame is automatically removed by MAC and the size is the length without the FCS.
AnnaBridge 171:3a7713b1edbc 980 * After calling ENET_GetRxFrameSize, ENET_ReadFrame() should be called to update the
AnnaBridge 171:3a7713b1edbc 981 * receive buffers If the result is not "kStatus_ENET_RxFrameEmpty".
AnnaBridge 171:3a7713b1edbc 982 *
AnnaBridge 171:3a7713b1edbc 983 * @param handle The ENET handler structure. This is the same handler pointer used in the ENET_Init.
AnnaBridge 171:3a7713b1edbc 984 * @param length The length of the valid frame received.
AnnaBridge 171:3a7713b1edbc 985 * @param channel The DMAC channel for the rx.
AnnaBridge 171:3a7713b1edbc 986 * @retval kStatus_ENET_RxFrameEmpty No frame received. Should not call ENET_ReadFrame to read frame.
AnnaBridge 171:3a7713b1edbc 987 * @retval kStatus_ENET_RxFrameError Data error happens. ENET_ReadFrame should be called with NULL data
AnnaBridge 171:3a7713b1edbc 988 * and NULL length to update the receive buffers.
AnnaBridge 171:3a7713b1edbc 989 * @retval kStatus_Success Receive a frame Successfully then the ENET_ReadFrame
AnnaBridge 171:3a7713b1edbc 990 * should be called with the right data buffer and the captured data length input.
AnnaBridge 171:3a7713b1edbc 991 */
AnnaBridge 171:3a7713b1edbc 992 status_t ENET_GetRxFrameSize(ENET_Type *base, enet_handle_t *handle, uint32_t *length, uint8_t channel);
AnnaBridge 171:3a7713b1edbc 993
AnnaBridge 171:3a7713b1edbc 994 /*!
AnnaBridge 171:3a7713b1edbc 995 * @brief Reads a frame from the ENET device.
AnnaBridge 171:3a7713b1edbc 996 * This function reads a frame from the ENET DMA descriptors.
AnnaBridge 171:3a7713b1edbc 997 * The ENET_GetRxFrameSize should be used to get the size of the prepared data buffer.
AnnaBridge 171:3a7713b1edbc 998 * For example use rx dma channel 0:
AnnaBridge 171:3a7713b1edbc 999 * @code
AnnaBridge 171:3a7713b1edbc 1000 * uint32_t length;
AnnaBridge 171:3a7713b1edbc 1001 * enet_handle_t g_handle;
AnnaBridge 171:3a7713b1edbc 1002 * //Get the received frame size firstly.
AnnaBridge 171:3a7713b1edbc 1003 * status = ENET_GetRxFrameSize(&g_handle, &length, 0);
AnnaBridge 171:3a7713b1edbc 1004 * if (length != 0)
AnnaBridge 171:3a7713b1edbc 1005 * {
AnnaBridge 171:3a7713b1edbc 1006 * //Allocate memory here with the size of "length"
AnnaBridge 171:3a7713b1edbc 1007 * uint8_t *data = memory allocate interface;
AnnaBridge 171:3a7713b1edbc 1008 * if (!data)
AnnaBridge 171:3a7713b1edbc 1009 * {
AnnaBridge 171:3a7713b1edbc 1010 * ENET_ReadFrame(ENET, &g_handle, NULL, 0, 0);
AnnaBridge 171:3a7713b1edbc 1011 * //Add the console warning log.
AnnaBridge 171:3a7713b1edbc 1012 * }
AnnaBridge 171:3a7713b1edbc 1013 * else
AnnaBridge 171:3a7713b1edbc 1014 * {
AnnaBridge 171:3a7713b1edbc 1015 * status = ENET_ReadFrame(ENET, &g_handle, data, length, 0);
AnnaBridge 171:3a7713b1edbc 1016 * //Call stack input API to deliver the data to stack
AnnaBridge 171:3a7713b1edbc 1017 * }
AnnaBridge 171:3a7713b1edbc 1018 * }
AnnaBridge 171:3a7713b1edbc 1019 * else if (status == kStatus_ENET_RxFrameError)
AnnaBridge 171:3a7713b1edbc 1020 * {
AnnaBridge 171:3a7713b1edbc 1021 * //Update the received buffer when a error frame is received.
AnnaBridge 171:3a7713b1edbc 1022 * ENET_ReadFrame(ENET, &g_handle, NULL, 0, 0);
AnnaBridge 171:3a7713b1edbc 1023 * }
AnnaBridge 171:3a7713b1edbc 1024 * @endcode
AnnaBridge 171:3a7713b1edbc 1025 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1026 * @param handle The ENET handler structure. This is the same handler pointer used in the ENET_Init.
AnnaBridge 171:3a7713b1edbc 1027 * @param data The data buffer provided by user to store the frame which memory size should be at least "length".
AnnaBridge 171:3a7713b1edbc 1028 * @param length The size of the data buffer which is still the length of the received frame.
AnnaBridge 171:3a7713b1edbc 1029 * @param channel The rx DMA channel. shall not be larger than 2.
AnnaBridge 171:3a7713b1edbc 1030 * @return The execute status, successful or failure.
AnnaBridge 171:3a7713b1edbc 1031 */
AnnaBridge 171:3a7713b1edbc 1032 status_t ENET_ReadFrame(ENET_Type *base, enet_handle_t *handle, uint8_t *data, uint32_t length, uint8_t channel);
AnnaBridge 171:3a7713b1edbc 1033
AnnaBridge 171:3a7713b1edbc 1034 /*!
AnnaBridge 171:3a7713b1edbc 1035 * @brief Transmits an ENET frame.
AnnaBridge 171:3a7713b1edbc 1036 * @note The CRC is automatically appended to the data. Input the data
AnnaBridge 171:3a7713b1edbc 1037 * to send without the CRC.
AnnaBridge 171:3a7713b1edbc 1038 *
AnnaBridge 171:3a7713b1edbc 1039 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1040 * @param handle The ENET handler pointer. This is the same handler pointer used in the ENET_Init.
AnnaBridge 171:3a7713b1edbc 1041 * @param data The data buffer provided by user to be send.
AnnaBridge 171:3a7713b1edbc 1042 * @param length The length of the data to be send.
AnnaBridge 171:3a7713b1edbc 1043 * @retval kStatus_Success Send frame succeed.
AnnaBridge 171:3a7713b1edbc 1044 * @retval kStatus_ENET_TxFrameBusy Transmit buffer descriptor is busy under transmission.
AnnaBridge 171:3a7713b1edbc 1045 * The transmit busy happens when the data send rate is over the MAC capacity.
AnnaBridge 171:3a7713b1edbc 1046 * The waiting mechanism is recommended to be added after each call return with
AnnaBridge 171:3a7713b1edbc 1047 * kStatus_ENET_TxFrameBusy.
AnnaBridge 171:3a7713b1edbc 1048 */
AnnaBridge 171:3a7713b1edbc 1049 status_t ENET_SendFrame(ENET_Type *base, enet_handle_t *handle, uint8_t *data, uint32_t length);
AnnaBridge 171:3a7713b1edbc 1050
AnnaBridge 171:3a7713b1edbc 1051 /*!
AnnaBridge 171:3a7713b1edbc 1052 * @brief Reclaim tx descriptors.
AnnaBridge 171:3a7713b1edbc 1053 * This function is used to update the tx descriptor status and
AnnaBridge 171:3a7713b1edbc 1054 * store the tx timestamp when the 1588 feature is enabled.
AnnaBridge 171:3a7713b1edbc 1055 * This is called by the transmit interupt IRQ handler after the
AnnaBridge 171:3a7713b1edbc 1056 * complete of a frame transmission.
AnnaBridge 171:3a7713b1edbc 1057 *
AnnaBridge 171:3a7713b1edbc 1058 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1059 * @param handle The ENET handler pointer. This is the same handler pointer used in the ENET_Init.
AnnaBridge 171:3a7713b1edbc 1060 * @param channel The tx DMA channnel.
AnnaBridge 171:3a7713b1edbc 1061 *
AnnaBridge 171:3a7713b1edbc 1062 */
AnnaBridge 171:3a7713b1edbc 1063 void ENET_ReclaimTxDescriptor(ENET_Type *base, enet_handle_t *handle, uint8_t channel);
AnnaBridge 171:3a7713b1edbc 1064
AnnaBridge 171:3a7713b1edbc 1065 /*!
AnnaBridge 171:3a7713b1edbc 1066 * @brief The ENET PMT IRQ handler.
AnnaBridge 171:3a7713b1edbc 1067 *
AnnaBridge 171:3a7713b1edbc 1068 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1069 * @param handle The ENET handler pointer.
AnnaBridge 171:3a7713b1edbc 1070 */
AnnaBridge 171:3a7713b1edbc 1071 void ENET_PMTIRQHandler(ENET_Type *base, enet_handle_t *handle);
AnnaBridge 171:3a7713b1edbc 1072
AnnaBridge 171:3a7713b1edbc 1073 /*!
AnnaBridge 171:3a7713b1edbc 1074 * @brief The ENET IRQ handler.
AnnaBridge 171:3a7713b1edbc 1075 *
AnnaBridge 171:3a7713b1edbc 1076 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1077 * @param handle The ENET handler pointer.
AnnaBridge 171:3a7713b1edbc 1078 */
AnnaBridge 171:3a7713b1edbc 1079 void ENET_IRQHandler(ENET_Type *base, enet_handle_t *handle);
AnnaBridge 171:3a7713b1edbc 1080
AnnaBridge 171:3a7713b1edbc 1081 /* @} */
AnnaBridge 171:3a7713b1edbc 1082
AnnaBridge 171:3a7713b1edbc 1083 #ifdef ENET_PTP1588FEATURE_REQUIRED
AnnaBridge 171:3a7713b1edbc 1084 /*!
AnnaBridge 171:3a7713b1edbc 1085 * @name ENET Enhanced function operation
AnnaBridge 171:3a7713b1edbc 1086 * @{
AnnaBridge 171:3a7713b1edbc 1087 */
AnnaBridge 171:3a7713b1edbc 1088
AnnaBridge 171:3a7713b1edbc 1089 /*!
AnnaBridge 171:3a7713b1edbc 1090 * @brief Starts the ENET PTP 1588 Timer.
AnnaBridge 171:3a7713b1edbc 1091 * This function is used to initialize the PTP timer. After the PTP starts,
AnnaBridge 171:3a7713b1edbc 1092 * the PTP timer starts running.
AnnaBridge 171:3a7713b1edbc 1093 *
AnnaBridge 171:3a7713b1edbc 1094 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1095 * @param ptpClkSrc The clock source of the PTP timer.
AnnaBridge 171:3a7713b1edbc 1096 */
AnnaBridge 171:3a7713b1edbc 1097 void ENET_Ptp1588StartTimer(ENET_Type *base, uint32_t ptpClkSrc);
AnnaBridge 171:3a7713b1edbc 1098
AnnaBridge 171:3a7713b1edbc 1099 /*!
AnnaBridge 171:3a7713b1edbc 1100 * @brief Coreect the ENET PTP 1588 timer in coarse method.
AnnaBridge 171:3a7713b1edbc 1101 *
AnnaBridge 171:3a7713b1edbc 1102 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1103 * @param operation The system time operation, refer to "enet_systime_op"
AnnaBridge 171:3a7713b1edbc 1104 * @param second The correction second.
AnnaBridge 171:3a7713b1edbc 1105 * @param nanosecond The correction nanosecond.
AnnaBridge 171:3a7713b1edbc 1106 */
AnnaBridge 171:3a7713b1edbc 1107 void ENET_Ptp1588CorrectTimerInCoarse(ENET_Type *base, enet_systime_op operation, uint32_t second, uint32_t nanosecond);
AnnaBridge 171:3a7713b1edbc 1108
AnnaBridge 171:3a7713b1edbc 1109 /*!
AnnaBridge 171:3a7713b1edbc 1110 * @brief Coreect the ENET PTP 1588 timer in fine method.
AnnaBridge 171:3a7713b1edbc 1111 *
AnnaBridge 171:3a7713b1edbc 1112 *
AnnaBridge 171:3a7713b1edbc 1113 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1114 * @param addend The addend value to be set in the fine method
AnnaBridge 171:3a7713b1edbc 1115 * @note Should take refer to the chapter "System time corretion" and
AnnaBridge 171:3a7713b1edbc 1116 * see the description for the "fine correction method".
AnnaBridge 171:3a7713b1edbc 1117 */
AnnaBridge 171:3a7713b1edbc 1118 static inline void ENET_Ptp1588CorrectTimerInFine(ENET_Type *base, uint32_t addend)
AnnaBridge 171:3a7713b1edbc 1119 {
AnnaBridge 171:3a7713b1edbc 1120 /* Set the freqCompensation value. */
AnnaBridge 171:3a7713b1edbc 1121 base->MAC_SYS_TIMESTMP_ADDEND = addend;
AnnaBridge 171:3a7713b1edbc 1122 base->MAC_TIMESTAMP_CTRL |= ENET_MAC_TIMESTAMP_CTRL_TADDREG_MASK;
AnnaBridge 171:3a7713b1edbc 1123 }
AnnaBridge 171:3a7713b1edbc 1124
AnnaBridge 171:3a7713b1edbc 1125 /*!
AnnaBridge 171:3a7713b1edbc 1126 * @brief Get the ENET Time stamp current addend value.
AnnaBridge 171:3a7713b1edbc 1127 *
AnnaBridge 171:3a7713b1edbc 1128 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1129 * @return The addend value.
AnnaBridge 171:3a7713b1edbc 1130 */
AnnaBridge 171:3a7713b1edbc 1131 static inline uint32_t ENET_Ptp1588GetAddend(ENET_Type *base)
AnnaBridge 171:3a7713b1edbc 1132 {
AnnaBridge 171:3a7713b1edbc 1133 return base->MAC_SYS_TIMESTMP_ADDEND;
AnnaBridge 171:3a7713b1edbc 1134 }
AnnaBridge 171:3a7713b1edbc 1135
AnnaBridge 171:3a7713b1edbc 1136 /*!
AnnaBridge 171:3a7713b1edbc 1137 * @brief Gets the current ENET time from the PTP 1588 timer.
AnnaBridge 171:3a7713b1edbc 1138 *
AnnaBridge 171:3a7713b1edbc 1139 * @param base ENET peripheral base address.
AnnaBridge 171:3a7713b1edbc 1140 * @param second The PTP 1588 system timer second.
AnnaBridge 171:3a7713b1edbc 1141 * @param nanosecond The PTP 1588 system timer nanosecond.
AnnaBridge 171:3a7713b1edbc 1142 * For the unit of the nanosecond is 1ns. so the nanosecond is the real nanosecond.
AnnaBridge 171:3a7713b1edbc 1143 */
AnnaBridge 171:3a7713b1edbc 1144 void ENET_Ptp1588GetTimer(ENET_Type *base, uint64_t *second, uint32_t *nanosecond);
AnnaBridge 171:3a7713b1edbc 1145
AnnaBridge 171:3a7713b1edbc 1146 /*!
AnnaBridge 171:3a7713b1edbc 1147 * @brief Gets the time stamp of the received frame.
AnnaBridge 171:3a7713b1edbc 1148 *
AnnaBridge 171:3a7713b1edbc 1149 * This function is used for PTP stack to get the timestamp captured by the ENET driver.
AnnaBridge 171:3a7713b1edbc 1150 *
AnnaBridge 171:3a7713b1edbc 1151 * @param handle The ENET handler pointer.This is the same state pointer used in
AnnaBridge 171:3a7713b1edbc 1152 * ENET_Init.
AnnaBridge 171:3a7713b1edbc 1153 * @param ptpTimeData The special PTP timestamp data for search the receive timestamp.
AnnaBridge 171:3a7713b1edbc 1154 * @retval kStatus_Success Get 1588 timestamp success.
AnnaBridge 171:3a7713b1edbc 1155 * @retval kStatus_ENET_PtpTsRingEmpty 1588 timestamp ring empty.
AnnaBridge 171:3a7713b1edbc 1156 * @retval kStatus_ENET_PtpTsRingFull 1588 timestamp ring full.
AnnaBridge 171:3a7713b1edbc 1157 */
AnnaBridge 171:3a7713b1edbc 1158 status_t ENET_GetRxFrameTime(enet_handle_t *handle, enet_ptp_time_data_t *ptpTimeData);
AnnaBridge 171:3a7713b1edbc 1159
AnnaBridge 171:3a7713b1edbc 1160 /*!
AnnaBridge 171:3a7713b1edbc 1161 * @brief Gets the time stamp of the transmit frame.
AnnaBridge 171:3a7713b1edbc 1162 *
AnnaBridge 171:3a7713b1edbc 1163 * This function is used for PTP stack to get the timestamp captured by the ENET driver.
AnnaBridge 171:3a7713b1edbc 1164 *
AnnaBridge 171:3a7713b1edbc 1165 * @param handle The ENET handler pointer.This is the same state pointer used in
AnnaBridge 171:3a7713b1edbc 1166 * ENET_Init.
AnnaBridge 171:3a7713b1edbc 1167 * @param ptpTimeData The special PTP timestamp data for search the receive timestamp.
AnnaBridge 171:3a7713b1edbc 1168 * @retval kStatus_Success Get 1588 timestamp success.
AnnaBridge 171:3a7713b1edbc 1169 * @retval kStatus_ENET_PtpTsRingEmpty 1588 timestamp ring empty.
AnnaBridge 171:3a7713b1edbc 1170 * @retval kStatus_ENET_PtpTsRingFull 1588 timestamp ring full.
AnnaBridge 171:3a7713b1edbc 1171 */
AnnaBridge 171:3a7713b1edbc 1172 status_t ENET_GetTxFrameTime(enet_handle_t *handle, enet_ptp_time_data_t *ptpTimeData);
AnnaBridge 171:3a7713b1edbc 1173 #endif /* ENET_PTP1588FEATURE_REQUIRED */
AnnaBridge 171:3a7713b1edbc 1174 /* @} */
AnnaBridge 171:3a7713b1edbc 1175
AnnaBridge 171:3a7713b1edbc 1176 #if defined(__cplusplus)
AnnaBridge 171:3a7713b1edbc 1177 }
AnnaBridge 171:3a7713b1edbc 1178 #endif
AnnaBridge 171:3a7713b1edbc 1179
AnnaBridge 171:3a7713b1edbc 1180 /*! @}*/
AnnaBridge 171:3a7713b1edbc 1181
AnnaBridge 171:3a7713b1edbc 1182 #endif /* _FSL_ENET_H_ */