1 /**
2   ******************************************************************************
3   * @file    emac_reg.h
4   * @version V1.0
5   * @date    2022-09-27
6   * @brief   This file is the description of.IP register
7   ******************************************************************************
8   * @attention
9   *
10   * <h2><center>&copy; COPYRIGHT(c) 2022 Bouffalo Lab</center></h2>
11   *
12   * Redistribution and use in source and binary forms, with or without modification,
13   * are permitted provided that the following conditions are met:
14   *   1. Redistributions of source code must retain the above copyright notice,
15   *      this list of conditions and the following disclaimer.
16   *   2. Redistributions in binary form must reproduce the above copyright notice,
17   *      this list of conditions and the following disclaimer in the documentation
18   *      and/or other materials provided with the distribution.
19   *   3. Neither the name of Bouffalo Lab nor the names of its contributors
20   *      may be used to endorse or promote products derived from this software
21   *      without specific prior written permission.
22   *
23   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
27   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30   * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
31   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33   *
34   ******************************************************************************
35   */
36 #ifndef __HARDWARE_EMAC_H__
37 #define __HARDWARE_EMAC_H__
38 
39 /****************************************************************************
40  * Pre-processor Definitions
41 ****************************************************************************/
42 
43 /* Register offsets *********************************************************/
44 #define EMAC_MODE_OFFSET       (0x0)
45 #define EMAC_INT_SOURCE_OFFSET (0x4)
46 #define EMAC_INT_MASK_OFFSET   (0x8)
47 #define EMAC_IPGT_OFFSET       (0xC)
48 #define EMAC_PACKETLEN_OFFSET  (0x18)
49 #define EMAC_COLLCONFIG_OFFSET (0x1C)
50 #define EMAC_TX_BD_NUM_OFFSET  (0x20)
51 #define EMAC_MIIMODE_OFFSET    (0x28)
52 #define EMAC_MIICOMMAND_OFFSET (0x2C)
53 #define EMAC_MIIADDRESS_OFFSET (0x30)
54 #define EMAC_MIITX_DATA_OFFSET (0x34)
55 #define EMAC_MIIRX_DATA_OFFSET (0x38)
56 #define EMAC_MIISTATUS_OFFSET  (0x3C)
57 #define EMAC_MAC_ADDR0_OFFSET  (0x40)
58 #define EMAC_MAC_ADDR1_OFFSET  (0x44)
59 #define EMAC_HASH0_ADDR_OFFSET (0x48)
60 #define EMAC_HASH1_ADDR_OFFSET (0x4C)
61 #define EMAC_TXCTRL_OFFSET     (0x50)
62 #define EMAC_DMA_DESC_OFFSET   (0x400)
63 
64 /* 0x0 : EMAC MODE config */
65 #define EMAC_RX_EN    (1 << 0U)
66 #define EMAC_TX_EN    (1 << 1U)
67 #define EMAC_NOPRE    (1 << 2U)
68 #define EMAC_BRO      (1 << 3U)
69 #define EMAC_PRO      (1 << 5U)
70 #define EMAC_IFG      (1 << 6U)
71 #define EMAC_FULLD    (1 << 10U)
72 #define EMAC_CRCEN    (1 << 13U)
73 #define EMAC_HUGEN    (1 << 14U)
74 #define EMAC_PAD      (1 << 15U)
75 #define EMAC_RECSMALL (1 << 16U)
76 #define EMAC_RMII_EN  (1 << 17U)
77 
78 /* 0x4 : INT_SOURCE */
79 #define EMAC_TXB  (1 << 0U)
80 #define EMAC_TXE  (1 << 1U)
81 #define EMAC_RXB  (1 << 2U)
82 #define EMAC_RXE  (1 << 3U)
83 #define EMAC_BUSY (1 << 4U)
84 #define EMAC_TXC  (1 << 5U)
85 #define EMAC_RXC  (1 << 6U)
86 
87 /* 0x8 : INT_MASK */
88 #define EMAC_TXB_M  (1 << 0U)
89 #define EMAC_TXE_M  (1 << 1U)
90 #define EMAC_RXB_M  (1 << 2U)
91 #define EMAC_RXE_M  (1 << 3U)
92 #define EMAC_BUSY_M (1 << 4U)
93 #define EMAC_TXC_M  (1 << 5U)
94 #define EMAC_RXC_M  (1 << 6U)
95 
96 /* 0xC : IPGT */
97 #define EMAC_IPGT_SHIFT (0U)
98 #define EMAC_IPGT_MASK  (0x7f << EMAC_IPGT_SHIFT)
99 
100 /* 0x18 : PACKETLEN */
101 #define EMAC_MAXFL_SHIFT (0U)
102 #define EMAC_MAXFL_MASK  (0xffff << EMAC_MAXFL_SHIFT)
103 #define EMAC_MINFL_SHIFT (16U)
104 #define EMAC_MINFL_MASK  (0xffff << EMAC_MINFL_SHIFT)
105 
106 /* 0x1C : COLLCONFIG */
107 #define EMAC_COLLVALID_SHIFT (0U)
108 #define EMAC_COLLVALID_MASK  (0x3F << EMAC_COLLVALID_SHIFT)
109 #define EMAC_MAXRET_SHIFT    (16U)
110 #define EMAC_MAXRET_MASK     (0xF << EMAC_MAXRET_SHIFT)
111 
112 /* 0x20 : TX_BD_NUM */
113 #define EMAC_TXBDNUM_SHIFT (0U)
114 #define EMAC_TXBDNUM_MASK  (0xff << EMAC_TXBDNUM_SHIFT)
115 #define EMAC_TXBDPTR_SHIFT (16U)
116 #define EMAC_TXBDPTR_MASK  (0x7f << EMAC_TXBDPTR_SHIFT)
117 #define EMAC_RXBDPTR_SHIFT (24U)
118 #define EMAC_RXBDPTR_MASK  (0x7f << EMAC_RXBDPTR_SHIFT)
119 
120 /* 0x28 : MIIMODE */
121 #define EMAC_CLKDIV_SHIFT (0U)
122 #define EMAC_CLKDIV_MASK  (0xff << EMAC_CLKDIV_SHIFT)
123 #define EMAC_MIINOPRE     (1 << 8U)
124 
125 /* 0x2C : MIICOMMAND */
126 #define EMAC_SCANSTAT  (1 << 0U)
127 #define EMAC_RSTAT     (1 << 1U)
128 #define EMAC_WCTRLDATA (1 << 2U)
129 
130 /* 0x30 : MIIADDRESS */
131 #define EMAC_FIAD_SHIFT (0U)
132 #define EMAC_FIAD_MASK  (0x1f << EMAC_FIAD_SHIFT)
133 #define EMAC_RGAD_SHIFT (8U)
134 #define EMAC_RGAD_MASK  (0x1f << EMAC_RGAD_SHIFT)
135 
136 /* 0x34 : MIITX_DATA */
137 #define EMAC_CTRLDATA_SHIFT (0U)
138 #define EMAC_CTRLDATA_MASK  (0xffff << EMAC_CTRLDATA_SHIFT)
139 
140 /* 0x38 : MIIRX_DATA */
141 #define EMAC_PRSD_SHIFT (0U)
142 #define EMAC_PRSD_MASK  (0xffff << EMAC_PRSD_SHIFT)
143 
144 /* 0x3C : MIISTATUS */
145 #define EMAC_MIIM_LINKFAIL (1 << 0U)
146 #define EMAC_MIIM_BUSY     (1 << 1U)
147 
148 /* 0x40 : MAC_ADDR0 */
149 #define EMAC_MAC_B5_SHIFT (0U)
150 #define EMAC_MAC_B5_MASK  (0xff << EMAC_MAC_B5_SHIFT)
151 #define EMAC_MAC_B4_SHIFT (8U)
152 #define EMAC_MAC_B4_MASK  (0xff << EMAC_MAC_B4_SHIFT)
153 #define EMAC_MAC_B3_SHIFT (16U)
154 #define EMAC_MAC_B3_MASK  (0xff << EMAC_MAC_B3_SHIFT)
155 #define EMAC_MAC_B2_SHIFT (24U)
156 #define EMAC_MAC_B2_MASK  (0xff << EMAC_MAC_B2_SHIFT)
157 
158 /* 0x44 : MAC_ADDR1 */
159 #define EMAC_MAC_B1_SHIFT (0U)
160 #define EMAC_MAC_B1_MASK  (0xff << EMAC_MAC_B1_SHIFT)
161 #define EMAC_MAC_B0_SHIFT (8U)
162 #define EMAC_MAC_B0_MASK  (0xff << EMAC_MAC_B0_SHIFT)
163 
164 /* 0x48 : HASH0_ADDR */
165 #define EMAC_HASH0_SHIFT (0U)
166 #define EMAC_HASH0_MASK  (0xffffffff << EMAC_HASH0_SHIFT)
167 
168 /* 0x4C : HASH1_ADDR */
169 #define EMAC_HASH1_SHIFT (0U)
170 #define EMAC_HASH1_MASK  (0xffffffff << EMAC_HASH1_SHIFT)
171 
172 /* 0x50 : TXCTRL */
173 #define EMAC_TXPAUSETV_SHIFT (0U)
174 #define EMAC_TXPAUSETV_MASK  (0xffff << EMAC_TXPAUSETV_SHIFT)
175 #define EMAC_TXPAUSERQ_SHIFT (16U)
176 #define EMAC_TXPAUSERQ_MASK  (0x1 << EMAC_TXPAUSETV_SHIFT)
177 
178 /* 0x400 :EAMC DMA BD DESC */
179 /* EMAC TX BD DESC BASE: (TX_BD_NUM * 8) */
180 #define EMAC_BD_TX_CS_SHIFT   (0) /*!< Carrier Sense Lost */
181 #define EMAC_BD_TX_CS_MASK    (1 << EMAC_BD_TX_CS_SHIFT)
182 #define EMAC_BD_TX_DF_SHIFT   (1) /*!< Defer Indication */
183 #define EMAC_BD_TX_DF_MASK    (1 << EMAC_BD_TX_DF_SHIFT)
184 #define EMAC_BD_TX_LC_SHIFT   (2) /*!< Late Collision */
185 #define EMAC_BD_TX_LC_MASK    (1 << EMAC_BD_TX_LC_SHIFT)
186 #define EMAC_BD_TX_RL_SHIFT   (3) /*!< Retransmission Limit */
187 #define EMAC_BD_TX_RL_MASK    (1 << EMAC_BD_TX_RL_SHIFT)
188 #define EMAC_BD_TX_RTRY_SHIFT (4) /*!< Retry Count */
189 #define EMAC_BD_TX_RTRY_MASK  (4 << EMAC_BD_TX_RTRY_SHIFT)
190 #define EMAC_BD_TX_UR_SHIFT   (8) /*!< Underrun */
191 #define EMAC_BD_TX_UR_MASK    (1 << EMAC_BD_TX_UR_SHIFT)
192 #define EMAC_BD_TX_EOF_SHIFT  (10) /*!< EOF */
193 #define EMAC_BD_TX_EOF_MASK   (1 << EMAC_BD_TX_EOF_SHIFT)
194 #define EMAC_BD_TX_CRC_SHIFT  (11) /*!< CRC Enable */
195 #define EMAC_BD_TX_CRC_MASK   (1 << EMAC_BD_TX_CRC_SHIFT)
196 #define EMAC_BD_TX_PAD_SHIFT  (12) /*!< PAD enable */
197 #define EMAC_BD_TX_PAD_MASK   (1 << EMAC_BD_TX_PAD_SHIFT)
198 #define EMAC_BD_TX_WR_SHIFT   (13) /*!< Wrap */
199 #define EMAC_BD_TX_WR_MASK    (1 << EMAC_BD_TX_WR_SHIFT)
200 #define EMAC_BD_TX_IRQ_SHIFT  (14) /*!< Interrupt Request Enable */
201 #define EMAC_BD_TX_IRQ_MASK   (1 << EMAC_BD_TX_IRQ_SHIFT)
202 #define EMAC_BD_TX_RD_SHIFT   (15) /*!< The data buffer is ready for transmission or is currently being transmitted. You are not allowed to change it */
203 #define EMAC_BD_TX_RD_MASK    (1 << EMAC_BD_TX_RD_SHIFT)
204 #define EMAC_BD_TX_LEN_SHIFT  (16) /*!< TX Data buffer length */
205 #define EMAC_BD_TX_LEN_MASK   (0xffff << EMAC_BD_TX_LEN_SHIFT)
206 
207 /* RX BD DESC BASE: ((TX_BD_NUM + RX_BD_NUM) * 8) */
208 #define EMAC_BD_RX_LC_SHIFT  (0) /*!< Late Collision */
209 #define EMAC_BD_RX_LC_MASK   (1 << EMAC_BD_RX_LC_SHIFT)
210 #define EMAC_BD_RX_CRC_SHIFT (1) /*!< RX CRC Error */
211 #define EMAC_BD_RX_CRC_MASK  (1 << EMAC_BD_RX_CRC_SHIFT)
212 #define EMAC_BD_RX_SF_SHIFT  (2) /*!< Short Frame */
213 #define EMAC_BD_RX_SF_MASK   (1 << EMAC_BD_RX_SF_SHIFT)
214 #define EMAC_BD_RX_TL_SHIFT  (3) /*!< Too Long */
215 #define EMAC_BD_RX_TL_MASK   (1 << EMAC_BD_RX_TL_SHIFT)
216 #define EMAC_BD_RX_DN_SHIFT  (4) /*!< Dribble Nibble */
217 #define EMAC_BD_RX_DN_MASK   (1 << EMAC_BD_RX_DN_SHIFT)
218 #define EMAC_BD_RX_RE_SHIFT  (5) /*!< Receive Error */
219 #define EMAC_BD_RX_RE_MASK   (1 << EMAC_BD_RX_RE_SHIFT)
220 #define EMAC_BD_RX_OR_SHIFT  (6) /*!< Overrun */
221 #define EMAC_BD_RX_OR_MASK   (1 << EMAC_BD_RX_OR_SHIFT)
222 #define EMAC_BD_RX_M_SHIFT   (7) /*!< Miss */
223 #define EMAC_BD_RX_M_MASK    (1 << EMAC_BD_RX_M_SHIFT)
224 #define EMAC_BD_RX_CF_SHIFT  (8) /*!< Control Frame Received */
225 #define EMAC_BD_RX_CF_MASK   (1 << EMAC_BD_RX_CF_SHIFT)
226 #define EMAC_BD_RX_WR_SHIFT  (13) /*!< Wrap */
227 #define EMAC_BD_RX_WR_MASK   (1 << EMAC_BD_RX_WR_SHIFT)
228 #define EMAC_BD_RX_IRQ_SHIFT (14) /*!< Interrupt Request Enable */
229 #define EMAC_BD_RX_IRQ_MASK  (1 << EMAC_BD_RX_IRQ_SHIFT)
230 #define EMAC_BD_RX_E_SHIFT   (15) /*!< The data buffer is empty (and ready for receiving data) or currently receiving data */
231 #define EMAC_BD_RX_E_MASK    (1 << EMAC_BD_RX_E_SHIFT)
232 #define EMAC_BD_RX_LEN_SHIFT (16) /*!< RX Data buffer length */
233 #define EMAC_BD_RX_LEN_MASK  (0xffff << EMAC_BD_RX_LEN_SHIFT)
234 
235 /* MAX BD DESC 0x7FF */
236 
237 #endif /* __HARDWARE_EMAC_H__ */