rtl838x_eth.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. #ifndef _RTL838X_ETH_H
  3. #define _RTL838X_ETH_H
  4. /* Register definition */
  5. /* Per port MAC control */
  6. #define RTL838X_MAC_PORT_CTRL (0xd560)
  7. #define RTL839X_MAC_PORT_CTRL (0x8004)
  8. #define RTL930X_MAC_L2_PORT_CTRL (0x3268)
  9. #define RTL930X_MAC_PORT_CTRL (0x3260)
  10. #define RTL931X_MAC_L2_PORT_CTRL (0x6000)
  11. #define RTL931X_MAC_PORT_CTRL (0x6004)
  12. /* DMA interrupt control and status registers */
  13. #define RTL838X_DMA_IF_CTRL (0x9f58)
  14. #define RTL838X_DMA_IF_INTR_STS (0x9f54)
  15. #define RTL838X_DMA_IF_INTR_MSK (0x9f50)
  16. #define RTL839X_DMA_IF_CTRL (0x786c)
  17. #define RTL839X_DMA_IF_INTR_STS (0x7868)
  18. #define RTL839X_DMA_IF_INTR_MSK (0x7864)
  19. #define RTL930X_DMA_IF_CTRL (0xe028)
  20. #define RTL930X_DMA_IF_INTR_RX_RUNOUT_STS (0xe01C)
  21. #define RTL930X_DMA_IF_INTR_RX_DONE_STS (0xe020)
  22. #define RTL930X_DMA_IF_INTR_TX_DONE_STS (0xe024)
  23. #define RTL930X_DMA_IF_INTR_RX_RUNOUT_MSK (0xe010)
  24. #define RTL930X_DMA_IF_INTR_RX_DONE_MSK (0xe014)
  25. #define RTL930X_DMA_IF_INTR_TX_DONE_MSK (0xe018)
  26. #define RTL930X_L2_NTFY_IF_INTR_MSK (0xe04C)
  27. #define RTL930X_L2_NTFY_IF_INTR_STS (0xe050)
  28. /* TODO: RTL931X_DMA_IF_CTRL has different bits meanings */
  29. #define RTL931X_DMA_IF_CTRL (0x0928)
  30. #define RTL931X_DMA_IF_INTR_RX_RUNOUT_STS (0x091c)
  31. #define RTL931X_DMA_IF_INTR_RX_DONE_STS (0x0920)
  32. #define RTL931X_DMA_IF_INTR_TX_DONE_STS (0x0924)
  33. #define RTL931X_DMA_IF_INTR_RX_RUNOUT_MSK (0x0910)
  34. #define RTL931X_DMA_IF_INTR_RX_DONE_MSK (0x0914)
  35. #define RTL931X_DMA_IF_INTR_TX_DONE_MSK (0x0918)
  36. #define RTL931X_L2_NTFY_IF_INTR_MSK (0x09E4)
  37. #define RTL931X_L2_NTFY_IF_INTR_STS (0x09E8)
  38. #define RTL838X_MAC_FORCE_MODE_CTRL (0xa104)
  39. #define RTL839X_MAC_FORCE_MODE_CTRL (0x02bc)
  40. #define RTL930X_MAC_FORCE_MODE_CTRL (0xCA1C)
  41. #define RTL931X_MAC_FORCE_MODE_CTRL (0x0ddc)
  42. /* MAC address settings */
  43. #define RTL838X_MAC (0xa9ec)
  44. #define RTL839X_MAC (0x02b4)
  45. #define RTL838X_MAC_ALE (0x6b04)
  46. #define RTL838X_MAC2 (0xa320)
  47. #define RTL930X_MAC_L2_ADDR_CTRL (0xC714)
  48. #define RTL931X_MAC_L2_ADDR_CTRL (0x135c)
  49. /* Ringbuffer setup */
  50. #define RTL838X_DMA_RX_BASE (0x9f00)
  51. #define RTL839X_DMA_RX_BASE (0x780c)
  52. #define RTL930X_DMA_RX_BASE (0xdf00)
  53. #define RTL931X_DMA_RX_BASE (0x0800)
  54. #define RTL838X_DMA_TX_BASE (0x9f40)
  55. #define RTL839X_DMA_TX_BASE (0x784c)
  56. #define RTL930X_DMA_TX_BASE (0xe000)
  57. #define RTL931X_DMA_TX_BASE (0x0900)
  58. #define RTL838X_DMA_IF_RX_RING_SIZE (0xB7E4)
  59. #define RTL839X_DMA_IF_RX_RING_SIZE (0x6038)
  60. #define RTL930X_DMA_IF_RX_RING_SIZE (0x7C60)
  61. #define RTL931X_DMA_IF_RX_RING_SIZE (0x2080)
  62. #define RTL838X_DMA_IF_RX_RING_CNTR (0xB7E8)
  63. #define RTL839X_DMA_IF_RX_RING_CNTR (0x603c)
  64. #define RTL930X_DMA_IF_RX_RING_CNTR (0x7C8C)
  65. #define RTL931X_DMA_IF_RX_RING_CNTR (0x20AC)
  66. #define RTL838X_DMA_IF_RX_CUR (0x9F20)
  67. #define RTL839X_DMA_IF_RX_CUR (0x782c)
  68. #define RTL930X_DMA_IF_RX_CUR (0xdf80)
  69. #define RTL931X_DMA_IF_RX_CUR (0x0880)
  70. #define RTL838X_DMA_IF_TX_CUR_DESC_ADDR_CTRL (0x9F48)
  71. #define RTL930X_DMA_IF_TX_CUR_DESC_ADDR_CTRL (0xE008)
  72. #define RTL838X_DMY_REG31 (0x3b28)
  73. #define RTL838X_SDS_MODE_SEL (0x0028)
  74. #define RTL838X_SDS_CFG_REG (0x0034)
  75. #define RTL838X_INT_MODE_CTRL (0x005c)
  76. #define RTL838X_CHIP_INFO (0x00d8)
  77. #define RTL838X_SDS4_REG28 (0xef80)
  78. #define RTL838X_SDS4_DUMMY0 (0xef8c)
  79. #define RTL838X_SDS5_EXT_REG6 (0xf18c)
  80. /* L2 features */
  81. #define RTL839X_TBL_ACCESS_L2_CTRL (0x1180)
  82. #define RTL839X_TBL_ACCESS_L2_DATA(idx) (0x1184 + ((idx) << 2))
  83. #define RTL838X_TBL_ACCESS_CTRL_0 (0x6914)
  84. #define RTL838X_TBL_ACCESS_DATA_0(idx) (0x6918 + ((idx) << 2))
  85. /* MAC-side link state handling */
  86. #define RTL838X_MAC_LINK_STS (0xa188)
  87. #define RTL839X_MAC_LINK_STS (0x0390)
  88. #define RTL930X_MAC_LINK_STS (0xCB10)
  89. #define RTL931X_MAC_LINK_STS (0x0ec0)
  90. #define RTL838X_MAC_LINK_SPD_STS (0xa190)
  91. #define RTL839X_MAC_LINK_SPD_STS (0x03a0)
  92. #define RTL930X_MAC_LINK_SPD_STS (0xCB18)
  93. #define RTL931X_MAC_LINK_SPD_STS (0x0ed0)
  94. #define RTL838X_MAC_LINK_DUP_STS (0xa19c)
  95. #define RTL839X_MAC_LINK_DUP_STS (0x03b0)
  96. #define RTL930X_MAC_LINK_DUP_STS (0xCB28)
  97. #define RTL931X_MAC_LINK_DUP_STS (0x0ef0)
  98. /* TODO: RTL8390_MAC_LINK_MEDIA_STS_ADDR??? */
  99. #define RTL838X_MAC_TX_PAUSE_STS (0xa1a0)
  100. #define RTL839X_MAC_TX_PAUSE_STS (0x03b8)
  101. #define RTL930X_MAC_TX_PAUSE_STS (0xCB2C)
  102. #define RTL931X_MAC_TX_PAUSE_STS (0x0ef8)
  103. #define RTL838X_MAC_RX_PAUSE_STS (0xa1a4)
  104. #define RTL839X_MAC_RX_PAUSE_STS (0xCB30)
  105. #define RTL930X_MAC_RX_PAUSE_STS (0xC2F8)
  106. #define RTL931X_MAC_RX_PAUSE_STS (0x0f00)
  107. #define RTL838X_EEE_TX_TIMER_GIGA_CTRL (0xaa04)
  108. #define RTL838X_EEE_TX_TIMER_GELITE_CTRL (0xaa08)
  109. #define RTL930X_L2_UNKN_UC_FLD_PMSK (0x9064)
  110. #define RTL931X_L2_UNKN_UC_FLD_PMSK (0xC8F4)
  111. #define RTL839X_MAC_GLB_CTRL (0x02a8)
  112. #define RTL839X_SCHED_LB_TICK_TKN_CTRL (0x60f8)
  113. #define RTL838X_L2_TBL_FLUSH_CTRL (0x3370)
  114. #define RTL839X_L2_TBL_FLUSH_CTRL (0x3ba0)
  115. #define RTL930X_L2_TBL_FLUSH_CTRL (0x9404)
  116. #define RTL931X_L2_TBL_FLUSH_CTRL (0xCD9C)
  117. #define RTL930X_L2_PORT_SABLK_CTRL (0x905c)
  118. #define RTL930X_L2_PORT_DABLK_CTRL (0x9060)
  119. /* MAC link state bits */
  120. #define FORCE_EN (1 << 0)
  121. #define FORCE_LINK_EN (1 << 1)
  122. #define NWAY_EN (1 << 2)
  123. #define DUPLX_MODE (1 << 3)
  124. #define TX_PAUSE_EN (1 << 6)
  125. #define RX_PAUSE_EN (1 << 7)
  126. /* L2 Notification DMA interface */
  127. #define RTL839X_DMA_IF_NBUF_BASE_DESC_ADDR_CTRL (0x785C)
  128. #define RTL839X_L2_NOTIFICATION_CTRL (0x7808)
  129. #define RTL931X_L2_NTFY_RING_BASE_ADDR (0x09DC)
  130. #define RTL931X_L2_NTFY_RING_CUR_ADDR (0x09E0)
  131. #define RTL839X_L2_NOTIFICATION_CTRL (0x7808)
  132. #define RTL931X_L2_NTFY_CTRL (0xCDC8)
  133. #define RTL838X_L2_CTRL_0 (0x3200)
  134. #define RTL839X_L2_CTRL_0 (0x3800)
  135. #define RTL930X_L2_CTRL (0x8FD8)
  136. #define RTL931X_L2_CTRL (0xC800)
  137. /* TRAPPING to CPU-PORT */
  138. #define RTL838X_SPCL_TRAP_IGMP_CTRL (0x6984)
  139. #define RTL838X_RMA_CTRL_0 (0x4300)
  140. #define RTL838X_RMA_CTRL_1 (0x4304)
  141. #define RTL839X_RMA_CTRL_0 (0x1200)
  142. #define RTL839X_SPCL_TRAP_IGMP_CTRL (0x1058)
  143. #define RTL839X_RMA_CTRL_1 (0x1204)
  144. #define RTL839X_RMA_CTRL_2 (0x1208)
  145. #define RTL839X_RMA_CTRL_3 (0x120C)
  146. #define RTL930X_VLAN_APP_PKT_CTRL (0xA23C)
  147. #define RTL930X_RMA_CTRL_0 (0x9E60)
  148. #define RTL930X_RMA_CTRL_1 (0x9E64)
  149. #define RTL930X_RMA_CTRL_2 (0x9E68)
  150. #define RTL931X_VLAN_APP_PKT_CTRL (0x96b0)
  151. #define RTL931X_RMA_CTRL_0 (0x8800)
  152. #define RTL931X_RMA_CTRL_1 (0x8804)
  153. #define RTL931X_RMA_CTRL_2 (0x8808)
  154. /* Advanced SMI control for clause 45 PHYs */
  155. #define RTL930X_SMI_MAC_TYPE_CTRL (0xCA04)
  156. #define RTL930X_SMI_PORT24_27_ADDR_CTRL (0xCB90)
  157. #define RTL930X_SMI_PORT0_15_POLLING_SEL (0xCA08)
  158. #define RTL930X_SMI_PORT16_27_POLLING_SEL (0xCA0C)
  159. #define RTL930X_SMI_10GPHY_POLLING_REG0_CFG (0xCBB4)
  160. #define RTL930X_SMI_10GPHY_POLLING_REG9_CFG (0xCBB8)
  161. #define RTL930X_SMI_10GPHY_POLLING_REG10_CFG (0xCBBC)
  162. #define RTL930X_SMI_PRVTE_POLLING_CTRL (0xCA10)
  163. /* Registers of the internal Serdes of the 8390 */
  164. #define RTL839X_SDS12_13_XSG0 (0xB800)
  165. /* Chip configuration registers of the RTL9310 */
  166. #define RTL931X_MEM_ENCAP_INIT (0x4854)
  167. #define RTL931X_MEM_MIB_INIT (0x7E18)
  168. #define RTL931X_MEM_ACL_INIT (0x40BC)
  169. #define RTL931X_MEM_ALE_INIT_0 (0x83F0)
  170. #define RTL931X_MEM_ALE_INIT_1 (0x83F4)
  171. #define RTL931X_MEM_ALE_INIT_2 (0x82E4)
  172. #define RTL931X_MDX_CTRL_RSVD (0x0fcc)
  173. #define RTL931X_PS_SOC_CTRL (0x13f8)
  174. #define RTL931X_SMI_10GPHY_POLLING_SEL2 (0xCF8)
  175. #define RTL931X_SMI_10GPHY_POLLING_SEL3 (0xCFC)
  176. #define RTL931X_SMI_10GPHY_POLLING_SEL4 (0xD00)
  177. /* Registers of the internal Serdes of the 8380 */
  178. #define RTL838X_SDS4_FIB_REG0 (0xF800)
  179. inline int rtl838x_mac_port_ctrl(int p)
  180. {
  181. return RTL838X_MAC_PORT_CTRL + (p << 7);
  182. }
  183. inline int rtl839x_mac_port_ctrl(int p)
  184. {
  185. return RTL839X_MAC_PORT_CTRL + (p << 7);
  186. }
  187. /* On the RTL931XX, the functionality of the MAC port control register is split up
  188. * into RTL931X_MAC_L2_PORT_CTRL and RTL931X_MAC_PORT_CTRL the functionality used
  189. * by the Ethernet driver is in the same bits now in RTL931X_MAC_L2_PORT_CTRL
  190. */
  191. inline int rtl930x_mac_port_ctrl(int p)
  192. {
  193. return RTL930X_MAC_L2_PORT_CTRL + (p << 6);
  194. }
  195. inline int rtl931x_mac_port_ctrl(int p)
  196. {
  197. return RTL931X_MAC_L2_PORT_CTRL + (p << 7);
  198. }
  199. inline int rtl838x_dma_if_rx_ring_size(int i)
  200. {
  201. return RTL838X_DMA_IF_RX_RING_SIZE + ((i >> 3) << 2);
  202. }
  203. inline int rtl839x_dma_if_rx_ring_size(int i)
  204. {
  205. return RTL839X_DMA_IF_RX_RING_SIZE + ((i >> 3) << 2);
  206. }
  207. inline int rtl930x_dma_if_rx_ring_size(int i)
  208. {
  209. return RTL930X_DMA_IF_RX_RING_SIZE + ((i / 3) << 2);
  210. }
  211. inline int rtl931x_dma_if_rx_ring_size(int i)
  212. {
  213. return RTL931X_DMA_IF_RX_RING_SIZE + ((i / 3) << 2);
  214. }
  215. inline int rtl838x_dma_if_rx_ring_cntr(int i)
  216. {
  217. return RTL838X_DMA_IF_RX_RING_CNTR + ((i >> 3) << 2);
  218. }
  219. inline int rtl839x_dma_if_rx_ring_cntr(int i)
  220. {
  221. return RTL839X_DMA_IF_RX_RING_CNTR + ((i >> 3) << 2);
  222. }
  223. inline int rtl930x_dma_if_rx_ring_cntr(int i)
  224. {
  225. return RTL930X_DMA_IF_RX_RING_CNTR + ((i / 3) << 2);
  226. }
  227. inline int rtl931x_dma_if_rx_ring_cntr(int i)
  228. {
  229. return RTL931X_DMA_IF_RX_RING_CNTR + ((i / 3) << 2);
  230. }
  231. inline u32 rtl838x_get_mac_link_sts(int port)
  232. {
  233. return (sw_r32(RTL838X_MAC_LINK_STS) & BIT(port));
  234. }
  235. inline u32 rtl839x_get_mac_link_sts(int p)
  236. {
  237. return (sw_r32(RTL839X_MAC_LINK_STS + ((p >> 5) << 2)) & BIT(p % 32));
  238. }
  239. inline u32 rtl930x_get_mac_link_sts(int port)
  240. {
  241. u32 link = sw_r32(RTL930X_MAC_LINK_STS);
  242. link = sw_r32(RTL930X_MAC_LINK_STS);
  243. pr_info("%s link state is %08x\n", __func__, link);
  244. return link & BIT(port);
  245. }
  246. inline u32 rtl931x_get_mac_link_sts(int p)
  247. {
  248. return (sw_r32(RTL931X_MAC_LINK_STS + ((p >> 5) << 2)) & BIT(p % 32));
  249. }
  250. inline u32 rtl838x_get_mac_link_dup_sts(int port)
  251. {
  252. return (sw_r32(RTL838X_MAC_LINK_DUP_STS) & BIT(port));
  253. }
  254. inline u32 rtl839x_get_mac_link_dup_sts(int p)
  255. {
  256. return (sw_r32(RTL839X_MAC_LINK_DUP_STS + ((p >> 5) << 2)) & BIT(p % 32));
  257. }
  258. inline u32 rtl930x_get_mac_link_dup_sts(int port)
  259. {
  260. return (sw_r32(RTL930X_MAC_LINK_DUP_STS) & BIT(port));
  261. }
  262. inline u32 rtl931x_get_mac_link_dup_sts(int p)
  263. {
  264. return (sw_r32(RTL931X_MAC_LINK_DUP_STS + ((p >> 5) << 2)) & BIT(p % 32));
  265. }
  266. inline u32 rtl838x_get_mac_link_spd_sts(int port)
  267. {
  268. int r = RTL838X_MAC_LINK_SPD_STS + ((port >> 4) << 2);
  269. u32 speed = sw_r32(r);
  270. speed >>= (port % 16) << 1;
  271. return (speed & 0x3);
  272. }
  273. inline u32 rtl839x_get_mac_link_spd_sts(int port)
  274. {
  275. int r = RTL839X_MAC_LINK_SPD_STS + ((port >> 4) << 2);
  276. u32 speed = sw_r32(r);
  277. speed >>= (port % 16) << 1;
  278. return (speed & 0x3);
  279. }
  280. inline u32 rtl930x_get_mac_link_spd_sts(int port)
  281. {
  282. int r = RTL930X_MAC_LINK_SPD_STS + ((port >> 3) << 2);
  283. u32 speed = sw_r32(r);
  284. speed >>= (port % 8) << 2;
  285. return (speed & 0xf);
  286. }
  287. inline u32 rtl931x_get_mac_link_spd_sts(int port)
  288. {
  289. int r = RTL931X_MAC_LINK_SPD_STS + ((port >> 3) << 2);
  290. u32 speed = sw_r32(r);
  291. speed >>= (port % 8) << 2;
  292. return (speed & 0xf);
  293. }
  294. inline u32 rtl838x_get_mac_rx_pause_sts(int port)
  295. {
  296. return (sw_r32(RTL838X_MAC_RX_PAUSE_STS) & (1 << port));
  297. }
  298. inline u32 rtl839x_get_mac_rx_pause_sts(int p)
  299. {
  300. return (sw_r32(RTL839X_MAC_RX_PAUSE_STS + ((p >> 5) << 2)) & BIT(p % 32));
  301. }
  302. inline u32 rtl930x_get_mac_rx_pause_sts(int port)
  303. {
  304. return (sw_r32(RTL930X_MAC_RX_PAUSE_STS) & (1 << port));
  305. }
  306. inline u32 rtl931x_get_mac_rx_pause_sts(int p)
  307. {
  308. return (sw_r32(RTL931X_MAC_RX_PAUSE_STS + ((p >> 5) << 2)) & BIT(p % 32));
  309. }
  310. inline u32 rtl838x_get_mac_tx_pause_sts(int port)
  311. {
  312. return (sw_r32(RTL838X_MAC_TX_PAUSE_STS) & (1 << port));
  313. }
  314. inline u32 rtl839x_get_mac_tx_pause_sts(int p)
  315. {
  316. return (sw_r32(RTL839X_MAC_TX_PAUSE_STS + ((p >> 5) << 2)) & BIT(p % 32));
  317. }
  318. inline u32 rtl930x_get_mac_tx_pause_sts(int port)
  319. {
  320. return (sw_r32(RTL930X_MAC_TX_PAUSE_STS) & (1 << port));
  321. }
  322. inline u32 rtl931x_get_mac_tx_pause_sts(int p)
  323. {
  324. return (sw_r32(RTL931X_MAC_TX_PAUSE_STS + ((p >> 5) << 2)) & BIT(p % 32));
  325. }
  326. struct p_hdr;
  327. struct dsa_tag;
  328. struct rtl838x_eth_reg {
  329. irqreturn_t (*net_irq)(int irq, void *dev_id);
  330. int (*mac_port_ctrl)(int port);
  331. int dma_if_intr_sts;
  332. int dma_if_intr_msk;
  333. int dma_if_intr_rx_runout_sts;
  334. int dma_if_intr_rx_done_sts;
  335. int dma_if_intr_tx_done_sts;
  336. int dma_if_intr_rx_runout_msk;
  337. int dma_if_intr_rx_done_msk;
  338. int dma_if_intr_tx_done_msk;
  339. int l2_ntfy_if_intr_sts;
  340. int l2_ntfy_if_intr_msk;
  341. int dma_if_ctrl;
  342. int mac_force_mode_ctrl;
  343. int dma_rx_base;
  344. int dma_tx_base;
  345. int (*dma_if_rx_ring_size)(int ring);
  346. int (*dma_if_rx_ring_cntr)(int ring);
  347. int dma_if_rx_cur;
  348. int rst_glb_ctrl;
  349. u32 (*get_mac_link_sts)(int port);
  350. u32 (*get_mac_link_dup_sts)(int port);
  351. u32 (*get_mac_link_spd_sts)(int port);
  352. u32 (*get_mac_rx_pause_sts)(int port);
  353. u32 (*get_mac_tx_pause_sts)(int port);
  354. int mac;
  355. int l2_tbl_flush_ctrl;
  356. void (*update_cntr)(int r, int work_done);
  357. void (*create_tx_header)(struct p_hdr *h, unsigned int dest_port, int prio);
  358. bool (*decode_tag)(struct p_hdr *h, struct dsa_tag *tag);
  359. };
  360. int rtl838x_write_phy(u32 port, u32 page, u32 reg, u32 val);
  361. int rtl838x_read_phy(u32 port, u32 page, u32 reg, u32 *val);
  362. int rtl838x_write_mmd_phy(u32 port, u32 addr, u32 reg, u32 val);
  363. int rtl838x_read_mmd_phy(u32 port, u32 addr, u32 reg, u32 *val);
  364. int rtl839x_write_phy(u32 port, u32 page, u32 reg, u32 val);
  365. int rtl839x_read_phy(u32 port, u32 page, u32 reg, u32 *val);
  366. int rtl839x_read_mmd_phy(u32 port, u32 devnum, u32 regnum, u32 *val);
  367. int rtl839x_write_mmd_phy(u32 port, u32 devnum, u32 regnum, u32 val);
  368. int rtl930x_write_phy(u32 port, u32 page, u32 reg, u32 val);
  369. int rtl930x_read_phy(u32 port, u32 page, u32 reg, u32 *val);
  370. int rtl931x_write_phy(u32 port, u32 page, u32 reg, u32 val);
  371. int rtl931x_read_phy(u32 port, u32 page, u32 reg, u32 *val);
  372. int rtl83xx_setup_tc(struct net_device *dev, enum tc_setup_type type, void *type_data);
  373. #endif /* _RTL838X_ETH_H */