lpc_emac.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647
  1. #ifndef _ARCH_CM3_NXP_MACH_LPC__EMAC_H_
  2. #define _ARCH_CM3_NXP_MACH_LPC__EMAC_H_
  3. /*
  4. * Copyright 2011 by egnite GmbH
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions
  8. * are met:
  9. *
  10. * 1. Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. * 2. Redistributions in binary form must reproduce the above copyright
  13. * notice, this list of conditions and the following disclaimer in the
  14. * documentation and/or other materials provided with the distribution.
  15. * 3. Neither the name of the copyright holders nor the names of
  16. * contributors may be used to endorse or promote products derived
  17. * from this software without specific prior written permission.
  18. *
  19. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20. * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  22. * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  23. * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  24. * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  25. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  26. * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
  27. * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  28. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
  29. * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. * SUCH DAMAGE.
  31. *
  32. * For additional information see http://www.ethernut.de/
  33. */
  34. /*!
  35. * \file arch/cm3/nxp/mach/lpc_emac.h
  36. * \brief LPC Ethernet MAC definitions.
  37. *
  38. * \verbatim
  39. * $Id$
  40. * \endverbatim
  41. */
  42. #include <stdint.h>
  43. /*!
  44. * \addtogroup xgNutArchArmLpcEmac
  45. */
  46. /*@{*/
  47. /*! \name MAC Configuration Register 1 */
  48. /*@{*/
  49. #define EMAC_MAC1_OFF 0x000
  50. #define EMAC_MAC1 (LPC_EMAC_BASE + EMAC_MAC1_OFF)
  51. #define EMAC_MAC1_REC_EN_LSB 0
  52. #define EMAC_MAC1_PASS_ALL_LSB 1
  53. #define EMAC_MAC1_RX_FLOWC_LSB 2
  54. #define EMAC_MAC1_TX_FLOWC_LSB 3
  55. #define EMAC_MAC1_LOOPB_LSB 4
  56. #define EMAC_MAC1_RES_TX_LSB 8
  57. #define EMAC_MAC1_RES_MCS_TX_LSB 9
  58. #define EMAC_MAC1_RES_RX_LSB 10
  59. #define EMAC_MAC1_RES_MCS_RX_LSB 11
  60. #define EMAC_MAC1_SIM_RES_LSB 14
  61. #define EMAC_MAC1_SOFT_RES_LSB 15
  62. #define EMAC_MAC1_REC_EN (1 << EMAC_MAC1_REC_EN_LSB)
  63. #define EMAC_MAC1_PASS_ALL (1 << EMAC_MAC1_PASS_ALL_LSB)
  64. #define EMAC_MAC1_RX_FLOWC (1 << EMAC_MAC1_RX_FLOWC_LSB)
  65. #define EMAC_MAC1_TX_FLOWC (1 << EMAC_MAC1_TX_FLOWC_LSB)
  66. #define EMAC_MAC1_LOOPB (1 << EMAC_MAC1_LOOPB_LSB)
  67. #define EMAC_MAC1_RES_TX (1 << EMAC_MAC1_RES_TX_LSB)
  68. #define EMAC_MAC1_RES_MCS_TX (1 << EMAC_MAC1_RES_MCS_TX_LSB)
  69. #define EMAC_MAC1_RES_RX (1 << EMAC_MAC1_RES_RX_LSB)
  70. #define EMAC_MAC1_RES_MCS_RX (1 << EMAC_MAC1_RES_MCS_RX_LSB)
  71. #define EMAC_MAC1_SIM_RES (1 << EMAC_MAC1_SIM_RES_LSB)
  72. #define EMAC_MAC1_SOFT_RES (1 << EMAC_MAC1_SOFT_RES_LSB)
  73. /*@}*/
  74. /*! \name MAC Configuration Register 2 */
  75. /*@{*/
  76. #define EMAC_MAC2_OFF 0x004
  77. #define EMAC_MAC2 (LPC_EMAC_BASE + EMAC_MAC2_OFF)
  78. #define EMAC_MAC2_FULL_DUP_LSB 0
  79. #define EMAC_MAC2_FRM_LEN_CHK_LSB 1
  80. #define EMAC_MAC2_HUGE_FRM_EN_LSB 2
  81. #define EMAC_MAC2_DLY_CRC_LSB 3
  82. #define EMAC_MAC2_CRC_EN_LSB 4
  83. #define EMAC_MAC2_PAD_EN_LSB 5
  84. #define EMAC_MAC2_VLAN_PAD_EN_LSB 6
  85. #define EMAC_MAC2_ADET_PAD_EN_LSB 7
  86. #define EMAC_MAC2_PPREAM_ENF_LSB 8
  87. #define EMAC_MAC2_LPREAM_ENF_LSB 9
  88. #define EMAC_MAC2_NO_BACKOFF_LSB 12
  89. #define EMAC_MAC2_BACK_PRESSURE_LSB 13
  90. #define EMAC_MAC2_EXCESS_DEF_LSB 14
  91. #define EMAC_MAC2_FULL_DUP (1 << EMAC_MAC2_FULL_DUP_LSB)
  92. #define EMAC_MAC2_FRM_LEN_CHK (1 << EMAC_MAC2_FRM_LEN_CHK_LSB)
  93. #define EMAC_MAC2_HUGE_FRM_EN (1 << EMAC_MAC2_HUGE_FRM_EN_LSB)
  94. #define EMAC_MAC2_DLY_CRC (1 << EMAC_MAC2_DLY_CRC_LSB)
  95. #define EMAC_MAC2_CRC_EN (1 << EMAC_MAC2_CRC_EN_LSB)
  96. #define EMAC_MAC2_PAD_EN (1 << EMAC_MAC2_PAD_EN_LSB)
  97. #define EMAC_MAC2_VLAN_PAD_EN (1 << EMAC_MAC2_VLAN_PAD_EN_LSB)
  98. #define EMAC_MAC2_ADET_PAD_EN (1 << EMAC_MAC2_ADET_PAD_EN_LSB)
  99. #define EMAC_MAC2_PPREAM_ENF (1 << EMAC_MAC2_PPREAM_ENF_LSB)
  100. #define EMAC_MAC2_LPREAM_ENF (1 << EMAC_MAC2_LPREAM_ENF_LSB)
  101. #define EMAC_MAC2_NO_BACKOFF (1 << EMAC_MAC2_NO_BACKOFF_LSB)
  102. #define EMAC_MAC2_BACK_PRESSURE (1 << EMAC_MAC2_BACK_PRESSURE_LSB)
  103. #define EMAC_MAC2_EXCESS_DEF (1 << EMAC_MAC2_EXCESS_DEF_LSB)
  104. /*@}*/
  105. /*! \name Back-to-Back Inter-Packet-Gap Register */
  106. /*@{*/
  107. #define EMAC_IPGT_OFF 0x008
  108. #define EMAC_IPGT (LPC_EMAC_BASE + EMAC_IPGT_OFF)
  109. #define EMAC_IPGT_BB_LSB 0
  110. #define EMAC_IPGT_BB_MSB 6
  111. /*@}*/
  112. /*! \name Non Back-to-Back Inter-Packet-Gap Register */
  113. /*@{*/
  114. #define EMAC_IPGR_OFF 0x00C
  115. #define EMAC_IPGR (LPC_EMAC_BASE + EMAC_IPGR_OFF)
  116. #define EMAC_IPGR_NBB2_LSB 0
  117. #define EMAC_IPGR_NBB2_MSB 6
  118. #define EMAC_IPGR_NBB1_LSB 8
  119. #define EMAC_IPGR_NBB1_MSB 14
  120. /*@}*/
  121. /*! \name Collision Window / Retry Register */
  122. /*@{*/
  123. #define EMAC_CLRT_OFF 0x010
  124. #define EMAC_CLRT (LPC_EMAC_BASE + EMAC_CLRT_OFF)
  125. #define EMAC_CLRT_RMAX_LSB 0
  126. #define EMAC_CLRT_RMAX_MSB 3
  127. #define EMAC_CLRT_COLLWIN_LSB 8
  128. #define EMAC_CLRT_COLLWIN_MSB 13
  129. /*@}*/
  130. /*! \name Maximum Frame Register */
  131. /*@{*/
  132. #define EMAC_MAXF_OFF 0x014
  133. #define EMAC_MAXF (LPC_EMAC_BASE + EMAC_MAXF_OFF)
  134. /*@}*/
  135. /*! \name PHY Support Register */
  136. /*@{*/
  137. #define EMAC_SUPP_OFF 0x018
  138. #define EMAC_SUPP (LPC_EMAC_BASE + EMAC_SUPP_OFF)
  139. #define EMAC_SUPP_SPEED_LSB 8
  140. #define EMAC_SUPP_RES_RMII_LSB 11
  141. #define EMAC_SUPP_SPEED (1 << EMAC_SUPP_SPEED_LSB)
  142. #define EMAC_SUPP_RES_RMII (1 << EMAC_SUPP_RES_RMII_LSB)
  143. /*@}*/
  144. /*! \name Test Register */
  145. /*@{*/
  146. #define EMAC_TEST_OFF 0x01C
  147. #define EMAC_TEST (LPC_EMAC_BASE + EMAC_TEST_OFF)
  148. #define EMAC_TEST_SHCUT_PQUANTA_LSB 0
  149. #define EMAC_TEST_TST_PAUSE_LSB 1
  150. #define EMAC_TEST_TST_BACKP_LSB 2
  151. #define EMAC_TEST_SHCUT_PQUANTA (1 << EMAC_TEST_SHCUT_PQUANTA_LSB)
  152. #define EMAC_TEST_TST_PAUSE (1 << EMAC_TEST_TST_PAUSE_LSB)
  153. #define EMAC_TEST_TST_BACKP (1 << EMAC_TEST_TST_BACKP_LSB)
  154. /*@}*/
  155. /*! \name MII Management Configuration Register */
  156. /*@{*/
  157. #define EMAC_MCFG_OFF 0x020
  158. #define EMAC_MCFG (LPC_EMAC_BASE + EMAC_MCFG_OFF)
  159. #define EMAC_MCFG_SCAN_INC_LSB 0
  160. #define EMAC_MCFG_SUPP_PREAM_LSB 1
  161. #define EMAC_MCFG_CLK_SEL_LSB 2
  162. #define EMAC_MCFG_CLK_SEL_MSB 5
  163. #define EMAC_MCFG_RES_MII_LSB 15
  164. #define EMAC_MCFG_SCAN_INC (1 << EMAC_MCFG_SCAN_INC_LSB)
  165. #define EMAC_MCFG_SUPP_PREAM (1 << EMAC_MCFG_SUPP_PREAM_LSB)
  166. #define EMAC_MCFG_RES_MII (1 << EMAC_MCFG_RES_MII_LSB)
  167. /*@}*/
  168. /*! \name MII Management Command Register */
  169. /*@{*/
  170. #define EMAC_MCMD_OFF 0x024
  171. #define EMAC_MCMD (LPC_EMAC_BASE + EMAC_MCMD_OFF)
  172. #define EMAC_MCMD_READ_LSB 0
  173. #define EMAC_MCMD_SCAN_LSB 1
  174. #define EMAC_MCMD_READ (1 << EMAC_MCMD_READ_LSB)
  175. #define EMAC_MCMD_SCAN (1 << EMAC_MCMD_SCAN_LSB)
  176. /*@}*/
  177. /*! \name MII Management Address Register */
  178. /*@{*/
  179. #define EMAC_MADR_OFF 0x028
  180. #define EMAC_MADR (LPC_EMAC_BASE + EMAC_MADR_OFF)
  181. #define EMAC_MADR_REG_ADR_LSB 0
  182. #define EMAC_MADR_REG_ADR_MSB 4
  183. #define EMAC_MADR_PHY_ADR_LSB 8
  184. #define EMAC_MADR_PHY_ADR_MSB 12
  185. /*@}*/
  186. /*! \name MII Management Write Data Register */
  187. /*@{*/
  188. #define EMAC_MWTD_OFF 0x02C
  189. #define EMAC_MWTD (LPC_EMAC_BASE + EMAC_MWTD_OFF)
  190. /*@}*/
  191. /*! \name MII Management Read Data Register */
  192. /*@{*/
  193. #define EMAC_MRDD_OFF 0x030
  194. #define EMAC_MRDD (LPC_EMAC_BASE + EMAC_MRDD_OFF)
  195. /*@}*/
  196. /*! \name MII Management Indicators Register */
  197. /*@{*/
  198. #define EMAC_MIND_OFF 0x034
  199. #define EMAC_MIND (LPC_EMAC_BASE + EMAC_MIND_OFF)
  200. #define EMAC_MIND_BUSY_LSB 0
  201. #define EMAC_MIND_SCAN_LSB 1
  202. #define EMAC_MIND_NOT_VAL_LSB 2
  203. #define EMAC_MIND_MII_LINK_FAIL_LSB 3
  204. #define EMAC_MIND_BUSY (1 << EMAC_MIND_BUSY_LSB)
  205. #define EMAC_MIND_SCAN (1 << EMAC_MIND_SCAN_LSB)
  206. #define EMAC_MIND_NOT_VAL (1 << EMAC_MIND_NOT_VAL_LSB)
  207. #define EMAC_MIND_MII_LINK_FAIL (1 << EMAC_MIND_MII_LINK_FAIL_LSB)
  208. /*@}*/
  209. /*! \name Station Address Registers */
  210. /*@{*/
  211. #define EMAC_SA0_OFF 0x040
  212. #define EMAC_SA0 (LPC_EMAC_BASE + EMAC_SA0_OFF)
  213. #define EMAC_SA1_OFF 0x044
  214. #define EMAC_SA1 (LPC_EMAC_BASE + EMAC_SA1_OFF)
  215. #define EMAC_SA2_OFF 0x048
  216. #define EMAC_SA2 (LPC_EMAC_BASE + EMAC_SA2_OFF)
  217. #define EMAC_SA_HI_LSB 0
  218. #define EMAC_SA_HI_MSB 7
  219. #define EMAC_SA_LO_LSB 8
  220. #define EMAC_SA_LO_MSB 15
  221. /*@}*/
  222. /*! \name Command Register */
  223. /*@{*/
  224. #define EMAC_CR_OFF 0x100
  225. #define EMAC_CR (LPC_EMAC_BASE + EMAC_CR_OFF)
  226. #define EMAC_CR_RX_EN_LSB 0
  227. #define EMAC_CR_TX_EN_LSB 1
  228. #define EMAC_CR_REG_RES_LSB 3
  229. #define EMAC_CR_TX_RES_LSB 4
  230. #define EMAC_CR_RX_RES_LSB 5
  231. #define EMAC_CR_PASS_RUNT_FRM_LSB 6
  232. #define EMAC_CR_PASS_RX_FILT_LSB 7
  233. #define EMAC_CR_TX_FLOW_CTRL_LSB 8
  234. #define EMAC_CR_RMII_LSB 9
  235. #define EMAC_CR_FULL_DUP_LSB 10
  236. #define EMAC_CR_RX_EN (1 << EMAC_CR_RX_EN_LSB)
  237. #define EMAC_CR_TX_EN (1 << EMAC_CR_TX_EN_LSB)
  238. #define EMAC_CR_REG_RES (1 << EMAC_CR_REG_RES_LSB)
  239. #define EMAC_CR_TX_RES (1 << EMAC_CR_TX_RES_LSB)
  240. #define EMAC_CR_RX_RES (1 << EMAC_CR_RX_RES_LSB)
  241. #define EMAC_CR_PASS_RUNT_FRM (1 << EMAC_CR_PASS_RUNT_FRM_LSB)
  242. #define EMAC_CR_PASS_RX_FILT (1 << EMAC_CR_PASS_RX_FILT_LSB)
  243. #define EMAC_CR_TX_FLOW_CTRL (1 << EMAC_CR_TX_FLOW_CTRL_LSB)
  244. #define EMAC_CR_RMII (1 << EMAC_CR_RMII_LSB)
  245. #define EMAC_CR_FULL_DUP (1 << EMAC_CR_FULL_DUP_LSB)
  246. /*@}*/
  247. /*! \name Status Register */
  248. /*@{*/
  249. #define EMAC_SR_OFF 0x104
  250. #define EMAC_SR (LPC_EMAC_BASE + EMAC_SR_OFF)
  251. #define EMAC_SR_RX_EN_LSB 0
  252. #define EMAC_SR_TX_EN_LSB 1
  253. #define EMAC_SR_RX_EN (1 << EMAC_SR_RX_EN_LSB)
  254. #define EMAC_SR_TX_EN (1 << EMAC_SR_TX_EN_LSB)
  255. /*@}*/
  256. /*! \name Receive Descriptor Base Address Register */
  257. /*@{*/
  258. #define EMAC_RXDESCR_OFF 0x108
  259. #define EMAC_RXDESCR (LPC_EMAC_BASE + EMAC_RXDESCR_OFF)
  260. /*@}*/
  261. /*! \name Receive Status Base Address Register */
  262. /*@{*/
  263. #define EMAC_RXSTAT_OFF 0x10C
  264. #define EMAC_RXSTAT (LPC_EMAC_BASE + EMAC_RXSTAT_OFF)
  265. /*@}*/
  266. /*! \name Receive Number of Descriptors Register */
  267. /*@{*/
  268. #define EMAC_RXDESCR_NUM_OFF 0x110
  269. #define EMAC_RXDESCR_NUM (LPC_EMAC_BASE + EMAC_RXDESCR_NUM_OFF)
  270. /*@}*/
  271. /*! \name Receive Produce Index Register */
  272. /*@{*/
  273. #define EMAC_RXPROD_IDX_OFF 0x114
  274. #define EMAC_RXPROD_IDX (LPC_EMAC_BASE + EMAC_RXPROD_IDX_OFF)
  275. /*@}*/
  276. /*! \name Receive Consume Index Register */
  277. /*@{*/
  278. #define EMAC_RXCONS_IDX_OFF 0x118
  279. #define EMAC_RXCONS_IDX (LPC_EMAC_BASE + EMAC_RXCONS_IDX_OFF)
  280. /*@}*/
  281. /*! \name Transmit Descriptor Base Address Register */
  282. /*@{*/
  283. #define EMAC_TXDESCR_OFF 0x11C
  284. #define EMAC_TXDESCR (LPC_EMAC_BASE + EMAC_TXDESCR_OFF)
  285. /*@}*/
  286. /*! \name Transmit Status Base Address Register */
  287. /*@{*/
  288. #define EMAC_TXSTAT_OFF 0x120
  289. #define EMAC_TXSTAT (LPC_EMAC_BASE + EMAC_TXSTAT_OFF)
  290. /*@}*/
  291. /*! \name Transmit Number of Descriptors Register */
  292. /*@{*/
  293. #define EMAC_TXDESCR_NUM_OFF 0x124
  294. #define EMAC_TXDESCR_NUM (LPC_EMAC_BASE + EMAC_TXDESCR_NUM_OFF)
  295. /*@}*/
  296. /*! \name Transmit Produce Index Register */
  297. /*@{*/
  298. #define EMAC_TXPROD_IDX_OFF 0x128
  299. #define EMAC_TXPROD_IDX (LPC_EMAC_BASE + EMAC_TXPROD_IDX_OFF)
  300. /*@}*/
  301. /*! \name Transmit Consume Index Register */
  302. /*@{*/
  303. #define EMAC_TXCONS_IDX_OFF 0x12C
  304. #define EMAC_TXCONS_IDX (LPC_EMAC_BASE + EMAC_TXCONS_IDX_OFF)
  305. /*@}*/
  306. /*! \name Transmit Status Vector 0 Register */
  307. /*@{*/
  308. #define EMAC_TSV0_OFF 0x158
  309. #define EMAC_TSV0 (LPC_EMAC_BASE + EMAC_TSV0_OFF)
  310. #define EMAC_TSV0_CRC_ERR_LSB 0
  311. #define EMAC_TSV0_LEN_CHKERR_LSB 1
  312. #define EMAC_TSV0_LEN_OUTRNG_LSB 2
  313. #define EMAC_TSV0_DONE_LSB 3
  314. #define EMAC_TSV0_MCAST_LSB 4
  315. #define EMAC_TSV0_BCAST_LSB 5
  316. #define EMAC_TSV0_PKT_DEFER_LSB 6
  317. #define EMAC_TSV0_EXC_DEFER_LSB 7
  318. #define EMAC_TSV0_EXC_COLL_LSB 8
  319. #define EMAC_TSV0_LATE_COLL_LSB 9
  320. #define EMAC_TSV0_GIANT_LSB 10
  321. #define EMAC_TSV0_UNDERRUN_LSB 11
  322. #define EMAC_TSV0_BYTES_LSB 12
  323. #define EMAC_TSV0_BYTES_MSB 27
  324. #define EMAC_TSV0_CTRL_FRAME_LSB 28
  325. #define EMAC_TSV0_PAUSE_LSB 29
  326. #define EMAC_TSV0_BACK_PRESS_LSB 30
  327. #define EMAC_TSV0_VLAN_LSB 31
  328. #define EMAC_TSV0_CRC_ERR (1 << EMAC_TSV0_CRC_ERR_LSB)
  329. #define EMAC_TSV0_LEN_CHKERR (1 << EMAC_TSV0_LEN_CHKERR_LSB)
  330. #define EMAC_TSV0_LEN_OUTRNG (1 << EMAC_TSV0_LEN_OUTRNG_LSB)
  331. #define EMAC_TSV0_DONE (1 << EMAC_TSV0_DONE_LSB)
  332. #define EMAC_TSV0_MCAST (1 << EMAC_TSV0_MCAST_LSB)
  333. #define EMAC_TSV0_BCAST (1 << EMAC_TSV0_BCAST_LSB)
  334. #define EMAC_TSV0_PKT_DEFER (1 << EMAC_TSV0_PKT_DEFER_LSB)
  335. #define EMAC_TSV0_EXC_DEFER (1 << EMAC_TSV0_EXC_DEFER_LSB)
  336. #define EMAC_TSV0_EXC_COLL (1 << EMAC_TSV0_EXC_COLL_LSB)
  337. #define EMAC_TSV0_LATE_COLL (1 << EMAC_TSV0_LATE_COLL_LSB)
  338. #define EMAC_TSV0_GIANT (1 << EMAC_TSV0_GIANT_LSB)
  339. #define EMAC_TSV0_UNDERRUN (1 << EMAC_TSV0_UNDERRUN_LSB)
  340. #define EMAC_TSV0_CTRL_FRAME (1 << EMAC_TSV0_CTRL_FRAME_LSB)
  341. #define EMAC_TSV0_PAUSE (1 << EMAC_TSV0_PAUSE_LSB)
  342. #define EMAC_TSV0_BACK_PRESS (1 << EMAC_TSV0_BACK_PRESS_LSB)
  343. #define EMAC_TSV0_VLAN (1 << EMAC_TSV0_VLAN_LSB)
  344. /*@}*/
  345. /*! \name Transmit Status Vector 1 Register */
  346. /*@{*/
  347. #define EMAC_TSV1_OFF 0x15C
  348. #define EMAC_TSV1 (LPC_EMAC_BASE + EMAC_TSV1_OFF)
  349. #define EMAC_TSV1_BYTE_CNT_LSB 0
  350. #define EMAC_TSV1_BYTE_CNT_MSB 15
  351. #define EMAC_TSV1_COLL_CNT_LSB 16
  352. #define EMAC_TSV1_COLL_CNT_MSB 19
  353. /*@}*/
  354. /*! \name Receive Status Vector Register */
  355. /*@{*/
  356. #define EMAC_RSV_OFF 0x160
  357. #define EMAC_RSV (LPC_EMAC_BASE + EMAC_RSV_OFF)
  358. #define EMAC_RSV_BYTE_CNT_LSB 0
  359. #define EMAC_RSV_BYTE_CNT_MSB 15
  360. #define EMAC_RSV_PKT_IGNORED_LSB 16
  361. #define EMAC_RSV_RXDV_SEEN_LSB 17
  362. #define EMAC_RSV_CARR_SEEN_LSB 18
  363. #define EMAC_RSV_REC_CODEV_LSB 19
  364. #define EMAC_RSV_CRC_ERR_LSB 20
  365. #define EMAC_RSV_LEN_CHKERR_LSB 21
  366. #define EMAC_RSV_LEN_OUTRNG_LSB 22
  367. #define EMAC_RSV_REC_OK_LSB 23
  368. #define EMAC_RSV_MCAST_LSB 24
  369. #define EMAC_RSV_BCAST_LSB 25
  370. #define EMAC_RSV_DRIB_NIBB_LSB 26
  371. #define EMAC_RSV_CTRL_FRAME_LSB 27
  372. #define EMAC_RSV_PAUSE_LSB 28
  373. #define EMAC_RSV_UNSUPP_OPC_LSB 29
  374. #define EMAC_RSV_VLAN_LSB 30
  375. #define EMAC_RSV_PKT_IGNORED (1 << EMAC_RSV_PKT_IGNORED_LSB)
  376. #define EMAC_RSV_RXDV_SEEN (1 << EMAC_RSV_RXDV_SEEN_LSB)
  377. #define EMAC_RSV_CARR_SEEN (1 << EMAC_RSV_CARR_SEEN_LSB)
  378. #define EMAC_RSV_REC_CODEV (1 << EMAC_RSV_REC_CODEV_LSB)
  379. #define EMAC_RSV_CRC_ERR (1 << EMAC_RSV_CRC_ERR_LSB)
  380. #define EMAC_RSV_LEN_CHKERR (1 << EMAC_RSV_LEN_CHKERR_LSB)
  381. #define EMAC_RSV_LEN_OUTRNG (1 << EMAC_RSV_LEN_OUTRNG_LSB)
  382. #define EMAC_RSV_REC_OK (1 << EMAC_RSV_REC_OK_LSB)
  383. #define EMAC_RSV_MCAST (1 << EMAC_RSV_MCAST_LSB)
  384. #define EMAC_RSV_BCAST (1 << EMAC_RSV_BCAST_LSB)
  385. #define EMAC_RSV_DRIB_NIBB (1 << EMAC_RSV_DRIB_NIBB_LSB)
  386. #define EMAC_RSV_CTRL_FRAME (1 << EMAC_RSV_CTRL_FRAME_LSB)
  387. #define EMAC_RSV_PAUSE (1 << EMAC_RSV_PAUSE_LSB)
  388. #define EMAC_RSV_UNSUPP_OPC (1 << EMAC_RSV_UNSUPP_OPC_LSB)
  389. #define EMAC_RSV_VLAN (1 << EMAC_RSV_VLAN_LSB)
  390. /*@}*/
  391. /*! \name Flow Control Counter Register */
  392. /*@{*/
  393. #define EMAC_FCC_OFF 0x170
  394. #define EMAC_FCC (LPC_EMAC_BASE + EMAC_FCC_OFF)
  395. #define EMAC_FCC_MIRR_CNT_LSB 0
  396. #define EMAC_FCC_MIRR_CNT_MSB 15
  397. #define EMAC_FCC_PAUSE_TIM_LSB 16
  398. #define EMAC_FCC_PAUSE_TIM_MSB 31
  399. /*@}*/
  400. /*! \name Flow Control Status Register */
  401. /*@{*/
  402. #define EMAC_FCS_OFF 0x174
  403. #define EMAC_FCS (LPC_EMAC_BASE + EMAC_FCS_OFF)
  404. #define EMAC_FCS_MIRR_CNT_LSB 0
  405. #define EMAC_FCS_MIRR_CNT_MSB 15
  406. /*@}*/
  407. /*! \name Receiver Filter Control Register */
  408. /*@{*/
  409. #define EMAC_RFC_OFF 0x200
  410. #define EMAC_RFC (LPC_EMAC_BASE + EMAC_RFC_OFF)
  411. #define EMAC_RFC_UCAST_EN_LSB 0
  412. #define EMAC_RFC_BCAST_EN_LSB 1
  413. #define EMAC_RFC_MCAST_EN_LSB 2
  414. #define EMAC_RFC_UCAST_HASH_EN_LSB 3
  415. #define EMAC_RFC_MCAST_HASH_EN_LSB 4
  416. #define EMAC_RFC_PERFECT_EN_LSB 5
  417. #define EMAC_RFC_MAGP_WOL_EN_LSB 12
  418. #define EMAC_RFC_PFILT_WOL_EN_LSB 13
  419. #define EMAC_RFC_UCAST_EN (1 << EMAC_RFC_UCAST_EN_LSB)
  420. #define EMAC_RFC_BCAST_EN (1 << EMAC_RFC_BCAST_EN_LSB)
  421. #define EMAC_RFC_MCAST_EN (1 << EMAC_RFC_MCAST_EN_LSB)
  422. #define EMAC_RFC_UCAST_HASH_EN (1 << EMAC_RFC_UCAST_HASH_EN_LSB)
  423. #define EMAC_RFC_MCAST_HASH_EN (1 << EMAC_RFC_MCAST_HASH_EN_LSB)
  424. #define EMAC_RFC_PERFECT_EN (1 << EMAC_RFC_PERFECT_EN_LSB)
  425. #define EMAC_RFC_MAGP_WOL_EN (1 << EMAC_RFC_MAGP_WOL_EN_LSB)
  426. #define EMAC_RFC_PFILT_WOL_EN (1 << EMAC_RFC_PFILT_WOL_EN_LSB)
  427. /*@}*/
  428. /*! \name Receiver Filter WoL Registers */
  429. /*@{*/
  430. #define EMAC_WOLSR_OFF 0x204
  431. #define EMAC_WOLSR (LPC_EMAC_BASE + EMAC_WOLSR_OFF)
  432. #define EMAC_WOLCR_OFF 0x208
  433. #define EMAC_WOLCR (LPC_EMAC_BASE + EMAC_WOLCR_OFF)
  434. #define EMAC_WOL_UCAST_LSB 0
  435. #define EMAC_WOL_BCAST_LSB 1
  436. #define EMAC_WOL_MCAST_LSB 2
  437. #define EMAC_WOL_UCAST_HASH_LSB 3
  438. #define EMAC_WOL_MCAST_HASH_LSB 4
  439. #define EMAC_WOL_PERFECT_LSB 5
  440. #define EMAC_WOL_RX_FILTER_LSB 7
  441. #define EMAC_WOL_MAG_PACKET_LSB 8
  442. #define EMAC_WOL_UCAST (1 << EMAC_WOL_UCAST_LSB)
  443. #define EMAC_WOL_BCAST (1 << EMAC_WOL_BCAST_LSB)
  444. #define EMAC_WOL_MCAST (1 << EMAC_WOL_MCAST_LSB)
  445. #define EMAC_WOL_UCAST_HASH (1 << EMAC_WOL_UCAST_HASH_LSB)
  446. #define EMAC_WOL_MCAST_HASH (1 << EMAC_WOL_MCAST_HASH_LSB)
  447. #define EMAC_WOL_PERFECT (1 << EMAC_WOL_PERFECT_LSB)
  448. #define EMAC_WOL_RX_FILTER (1 << EMAC_WOL_RX_FILTER_LSB)
  449. #define EMAC_WOL_MAG_PACKET (1 << EMAC_WOL_MAG_PACKET_LSB)
  450. /*@}*/
  451. /*! \name Hash Filter Table Registers */
  452. /*@{*/
  453. #define EMAC_HASHFILTERL_OFF 0x210
  454. #define EMAC_HASHFILTERL (LPC_EMAC_BASE + EMAC_HASHFILTERL_OFF)
  455. #define EMAC_HASHFILTERH_OFF 0x214
  456. #define EMAC_HASHFILTERH (LPC_EMAC_BASE + EMAC_HASHFILTERH_OFF)
  457. /*@}*/
  458. /*! \name Interrupt Registers */
  459. /*@{*/
  460. #define EMAC_INT_STAT_OFF 0xFE0
  461. #define EMAC_INT_STAT (LPC_EMAC_BASE + EMAC_INT_STAT_OFF)
  462. #define EMAC_INT_ENA_OFF 0xFE4
  463. #define EMAC_INT_ENA (LPC_EMAC_BASE + EMAC_INT_ENA_OFF)
  464. #define EMAC_INT_CLR_OFF 0xFE8
  465. #define EMAC_INT_CLR (LPC_EMAC_BASE + EMAC_INT_CLR_OFF)
  466. #define EMAC_INT_SET_OFF 0xFEC
  467. #define EMAC_INT_SET (LPC_EMAC_BASE + EMAC_INT_SET_OFF)
  468. #define EMAC_INT_RX_OVERRUN_LSB 0
  469. #define EMAC_INT_RX_ERR_LSB 1
  470. #define EMAC_INT_RX_FIN_LSB 2
  471. #define EMAC_INT_RX_DONE_LSB 3
  472. #define EMAC_INT_TX_UNDERRUN_LSB 4
  473. #define EMAC_INT_TX_ERR_LSB 5
  474. #define EMAC_INT_TX_FIN_LSB 6
  475. #define EMAC_INT_TX_DONE_LSB 7
  476. #define EMAC_INT_SOFT_INT_LSB 12
  477. #define EMAC_INT_WAKEUP_LSB 13
  478. #define EMAC_INT_RX_OVERRUN (1 << EMAC_INT_RX_OVERRUN_LSB)
  479. #define EMAC_INT_RX_ERR (1 << EMAC_INT_RX_ERR_LSB)
  480. #define EMAC_INT_RX_FIN (1 << EMAC_INT_RX_FIN_LSB)
  481. #define EMAC_INT_RX_DONE (1 << EMAC_INT_RX_DONE_LSB)
  482. #define EMAC_INT_TX_UNDERRUN (1 << EMAC_INT_TX_UNDERRUN_LSB)
  483. #define EMAC_INT_TX_ERR (1 << EMAC_INT_TX_ERR_LSB)
  484. #define EMAC_INT_TX_FIN (1 << EMAC_INT_TX_FIN_LSB)
  485. #define EMAC_INT_TX_DONE (1 << EMAC_INT_TX_DONE_LSB)
  486. #define EMAC_INT_SOFT_INT (1 << EMAC_INT_SOFT_INT_LSB)
  487. #define EMAC_INT_WAKEUP (1 << EMAC_INT_WAKEUP_LSB)
  488. /*@}*/
  489. /*! \name Power-Down Register */
  490. /*@{*/
  491. #define EMAC_PD_OFF 0xFF4
  492. #define EMAC_PD (LPC_EMAC_BASE + EMAC_PD_OFF)
  493. #define EMAC_PD_POWER_DOWN_LSB 31
  494. #define EMAC_PD_POWER_DOWN (1 << EMAC_PD_POWER_DOWN_LSB)
  495. /*@}*/
  496. /*! \name Module ID Register */
  497. /*@{*/
  498. #define EMAC_MODULE_ID_OFF 0xFFC
  499. #define EMAC_MODULE_ID (LPC_EMAC_BASE + EMAC_MODULE_ID_OFF)
  500. /*@}*/
  501. /*! \name Descriptor Structures */
  502. /*@{*/
  503. typedef struct _EMAC_DESCRIPTOR {
  504. uint8_t *desc_packet;
  505. uint32_t desc_control;
  506. } EMAC_DESCRIPTOR;
  507. typedef struct EMAC_RXSTATUS {
  508. uint32_t rxs_info;
  509. uint32_t rxs_hashcrc;
  510. } EMAC_RXSTATUS;
  511. /*@}*/
  512. /*! \name Receive Descriptor Control Word */
  513. /*@{*/
  514. #define EMAC_RCTRL_SIZE(n) (n&0x7FF)
  515. #define EMAC_RCTRL_INT 0x80000000
  516. /*@}*/
  517. /*! \name Receive Descriptor Status Word */
  518. /*@{*/
  519. #define EMAC_RINFO_SIZE 0x000007FF
  520. #define EMAC_RINFO_CTRL_FRAME 0x00040000
  521. #define EMAC_RINFO_VLAN 0x00080000
  522. #define EMAC_RINFO_FAIL_FILT 0x00100000
  523. #define EMAC_RINFO_MCAST 0x00200000
  524. #define EMAC_RINFO_BCAST 0x00400000
  525. #define EMAC_RINFO_CRC_ERR 0x00800000
  526. #define EMAC_RINFO_SYM_ERR 0x01000000
  527. #define EMAC_RINFO_LEN_ERR 0x02000000
  528. #define EMAC_RINFO_RANGE_ERR 0x04000000
  529. #define EMAC_RINFO_ALIGN_ERR 0x08000000
  530. #define EMAC_RINFO_OVERRUN 0x10000000
  531. #define EMAC_RINFO_NO_DESCR 0x20000000
  532. #define EMAC_RINFO_LAST_FLAG 0x40000000
  533. #define EMAC_RINFO_ERR 0x80000000
  534. #define EMAC_RINFO_ERR_MASK (EMAC_RINFO_FAIL_FILT | EMAC_RINFO_CRC_ERR | \
  535. EMAC_RINFO_SYM_ERR | EMAC_RINFO_LEN_ERR | \
  536. EMAC_RINFO_ALIGN_ERR | EMAC_RINFO_OVERRUN)
  537. /*@}*/
  538. /*! \name Transmit Descriptor Control Word */
  539. /*@{*/
  540. #define EMAC_TCTRL_SIZE 0x000007FF
  541. #define EMAC_TCTRL_OVERRIDE 0x04000000
  542. #define EMAC_TCTRL_HUGE 0x08000000
  543. #define EMAC_TCTRL_PAD 0x10000000
  544. #define EMAC_TCTRL_CRC 0x20000000
  545. #define EMAC_TCTRL_LAST 0x40000000
  546. #define EMAC_TCTRL_INT 0x80000000
  547. /*@}*/
  548. /*! \name Transmit Descriptor Status Word */
  549. /*@{*/
  550. #define EMAC_TINFO_COL_CNT 0x01E00000
  551. #define EMAC_TINFO_DEFER 0x02000000
  552. #define EMAC_TINFO_EXCESS_DEF 0x04000000
  553. #define EMAC_TINFO_EXCESS_COL 0x08000000
  554. #define EMAC_TINFO_LATE_COL 0x10000000
  555. #define EMAC_TINFO_UNDERRUN 0x20000000
  556. #define EMAC_TINFO_NO_DESCR 0x40000000
  557. #define EMAC_TINFO_ERR 0x80000000
  558. /*@}*/
  559. #endif