ar8216.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. /*
  2. * ar8216.h: AR8216 switch driver
  3. *
  4. * Copyright (C) 2009 Felix Fietkau <nbd@nbd.name>
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License
  8. * as published by the Free Software Foundation; either version 2
  9. * of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. */
  16. #ifndef __AR8216_H
  17. #define __AR8216_H
  18. #define BITS(_s, _n) (((1UL << (_n)) - 1) << _s)
  19. #define AR8XXX_CAP_GIGE BIT(0)
  20. #define AR8XXX_CAP_MIB_COUNTERS BIT(1)
  21. #define AR8XXX_NUM_PHYS 5
  22. #define AR8216_PORT_CPU 0
  23. #define AR8216_NUM_PORTS 6
  24. #define AR8216_NUM_VLANS 16
  25. #define AR8316_NUM_VLANS 4096
  26. /* size of the vlan table */
  27. #define AR8X16_MAX_VLANS 128
  28. #define AR8X16_PROBE_RETRIES 10
  29. #define AR8X16_MAX_PORTS 8
  30. #define AR8XXX_REG_ARL_CTRL_AGE_TIME_SECS 7
  31. #define AR8XXX_DEFAULT_ARL_AGE_TIME 300
  32. /* Atheros specific MII registers */
  33. #define MII_ATH_MMD_ADDR 0x0d
  34. #define MII_ATH_MMD_DATA 0x0e
  35. #define MII_ATH_DBG_ADDR 0x1d
  36. #define MII_ATH_DBG_DATA 0x1e
  37. #define AR8216_REG_CTRL 0x0000
  38. #define AR8216_CTRL_REVISION BITS(0, 8)
  39. #define AR8216_CTRL_REVISION_S 0
  40. #define AR8216_CTRL_VERSION BITS(8, 8)
  41. #define AR8216_CTRL_VERSION_S 8
  42. #define AR8216_CTRL_RESET BIT(31)
  43. #define AR8216_REG_FLOOD_MASK 0x002C
  44. #define AR8216_FM_UNI_DEST_PORTS BITS(0, 6)
  45. #define AR8216_FM_MULTI_DEST_PORTS BITS(16, 6)
  46. #define AR8236_FM_CPU_BROADCAST_EN BIT(26)
  47. #define AR8236_FM_CPU_BCAST_FWD_EN BIT(25)
  48. #define AR8216_REG_GLOBAL_CTRL 0x0030
  49. #define AR8216_GCTRL_MTU BITS(0, 11)
  50. #define AR8236_GCTRL_MTU BITS(0, 14)
  51. #define AR8316_GCTRL_MTU BITS(0, 14)
  52. #define AR8216_REG_VTU 0x0040
  53. #define AR8216_VTU_OP BITS(0, 3)
  54. #define AR8216_VTU_OP_NOOP 0x0
  55. #define AR8216_VTU_OP_FLUSH 0x1
  56. #define AR8216_VTU_OP_LOAD 0x2
  57. #define AR8216_VTU_OP_PURGE 0x3
  58. #define AR8216_VTU_OP_REMOVE_PORT 0x4
  59. #define AR8216_VTU_ACTIVE BIT(3)
  60. #define AR8216_VTU_FULL BIT(4)
  61. #define AR8216_VTU_PORT BITS(8, 4)
  62. #define AR8216_VTU_PORT_S 8
  63. #define AR8216_VTU_VID BITS(16, 12)
  64. #define AR8216_VTU_VID_S 16
  65. #define AR8216_VTU_PRIO BITS(28, 3)
  66. #define AR8216_VTU_PRIO_S 28
  67. #define AR8216_VTU_PRIO_EN BIT(31)
  68. #define AR8216_REG_VTU_DATA 0x0044
  69. #define AR8216_VTUDATA_MEMBER BITS(0, 10)
  70. #define AR8236_VTUDATA_MEMBER BITS(0, 7)
  71. #define AR8216_VTUDATA_VALID BIT(11)
  72. #define AR8216_REG_ATU_FUNC0 0x0050
  73. #define AR8216_ATU_OP BITS(0, 3)
  74. #define AR8216_ATU_OP_NOOP 0x0
  75. #define AR8216_ATU_OP_FLUSH 0x1
  76. #define AR8216_ATU_OP_LOAD 0x2
  77. #define AR8216_ATU_OP_PURGE 0x3
  78. #define AR8216_ATU_OP_FLUSH_UNLOCKED 0x4
  79. #define AR8216_ATU_OP_FLUSH_PORT 0x5
  80. #define AR8216_ATU_OP_GET_NEXT 0x6
  81. #define AR8216_ATU_ACTIVE BIT(3)
  82. #define AR8216_ATU_PORT_NUM BITS(8, 4)
  83. #define AR8216_ATU_PORT_NUM_S 8
  84. #define AR8216_ATU_FULL_VIO BIT(12)
  85. #define AR8216_ATU_ADDR5 BITS(16, 8)
  86. #define AR8216_ATU_ADDR5_S 16
  87. #define AR8216_ATU_ADDR4 BITS(24, 8)
  88. #define AR8216_ATU_ADDR4_S 24
  89. #define AR8216_REG_ATU_FUNC1 0x0054
  90. #define AR8216_ATU_ADDR3 BITS(0, 8)
  91. #define AR8216_ATU_ADDR3_S 0
  92. #define AR8216_ATU_ADDR2 BITS(8, 8)
  93. #define AR8216_ATU_ADDR2_S 8
  94. #define AR8216_ATU_ADDR1 BITS(16, 8)
  95. #define AR8216_ATU_ADDR1_S 16
  96. #define AR8216_ATU_ADDR0 BITS(24, 8)
  97. #define AR8216_ATU_ADDR0_S 24
  98. #define AR8216_REG_ATU_FUNC2 0x0058
  99. #define AR8216_ATU_PORTS BITS(0, 6)
  100. #define AR8216_ATU_PORT0 BIT(0)
  101. #define AR8216_ATU_PORT1 BIT(1)
  102. #define AR8216_ATU_PORT2 BIT(2)
  103. #define AR8216_ATU_PORT3 BIT(3)
  104. #define AR8216_ATU_PORT4 BIT(4)
  105. #define AR8216_ATU_PORT5 BIT(5)
  106. #define AR8216_ATU_STATUS BITS(16, 4)
  107. #define AR8216_ATU_STATUS_S 16
  108. #define AR8216_REG_ATU_CTRL 0x005C
  109. #define AR8216_ATU_CTRL_AGE_EN BIT(17)
  110. #define AR8216_ATU_CTRL_AGE_TIME BITS(0, 16)
  111. #define AR8216_ATU_CTRL_AGE_TIME_S 0
  112. #define AR8236_ATU_CTRL_RES BIT(20)
  113. #define AR8216_REG_MIB_FUNC 0x0080
  114. #define AR8216_MIB_TIMER BITS(0, 16)
  115. #define AR8216_MIB_AT_HALF_EN BIT(16)
  116. #define AR8216_MIB_BUSY BIT(17)
  117. #define AR8216_MIB_FUNC BITS(24, 3)
  118. #define AR8216_MIB_FUNC_S 24
  119. #define AR8216_MIB_FUNC_NO_OP 0x0
  120. #define AR8216_MIB_FUNC_FLUSH 0x1
  121. #define AR8216_MIB_FUNC_CAPTURE 0x3
  122. #define AR8236_MIB_EN BIT(30)
  123. #define AR8216_REG_GLOBAL_CPUPORT 0x0078
  124. #define AR8216_GLOBAL_CPUPORT_MIRROR_PORT BITS(4, 4)
  125. #define AR8216_GLOBAL_CPUPORT_MIRROR_PORT_S 4
  126. #define AR8216_PORT_OFFSET(_i) (0x0100 * (_i + 1))
  127. #define AR8216_REG_PORT_STATUS(_i) (AR8216_PORT_OFFSET(_i) + 0x0000)
  128. #define AR8216_PORT_STATUS_SPEED BITS(0,2)
  129. #define AR8216_PORT_STATUS_SPEED_S 0
  130. #define AR8216_PORT_STATUS_TXMAC BIT(2)
  131. #define AR8216_PORT_STATUS_RXMAC BIT(3)
  132. #define AR8216_PORT_STATUS_TXFLOW BIT(4)
  133. #define AR8216_PORT_STATUS_RXFLOW BIT(5)
  134. #define AR8216_PORT_STATUS_DUPLEX BIT(6)
  135. #define AR8216_PORT_STATUS_LINK_UP BIT(8)
  136. #define AR8216_PORT_STATUS_LINK_AUTO BIT(9)
  137. #define AR8216_PORT_STATUS_LINK_PAUSE BIT(10)
  138. #define AR8216_REG_PORT_CTRL(_i) (AR8216_PORT_OFFSET(_i) + 0x0004)
  139. /* port forwarding state */
  140. #define AR8216_PORT_CTRL_STATE BITS(0, 3)
  141. #define AR8216_PORT_CTRL_STATE_S 0
  142. #define AR8216_PORT_CTRL_LEARN_LOCK BIT(7)
  143. /* egress 802.1q mode */
  144. #define AR8216_PORT_CTRL_VLAN_MODE BITS(8, 2)
  145. #define AR8216_PORT_CTRL_VLAN_MODE_S 8
  146. #define AR8216_PORT_CTRL_IGMP_SNOOP BIT(10)
  147. #define AR8216_PORT_CTRL_HEADER BIT(11)
  148. #define AR8216_PORT_CTRL_MAC_LOOP BIT(12)
  149. #define AR8216_PORT_CTRL_SINGLE_VLAN BIT(13)
  150. #define AR8216_PORT_CTRL_LEARN BIT(14)
  151. #define AR8216_PORT_CTRL_MIRROR_TX BIT(16)
  152. #define AR8216_PORT_CTRL_MIRROR_RX BIT(17)
  153. #define AR8216_REG_PORT_VLAN(_i) (AR8216_PORT_OFFSET(_i) + 0x0008)
  154. #define AR8216_PORT_VLAN_DEFAULT_ID BITS(0, 12)
  155. #define AR8216_PORT_VLAN_DEFAULT_ID_S 0
  156. #define AR8216_PORT_VLAN_DEST_PORTS BITS(16, 9)
  157. #define AR8216_PORT_VLAN_DEST_PORTS_S 16
  158. /* bit0 added to the priority field of egress frames */
  159. #define AR8216_PORT_VLAN_TX_PRIO BIT(27)
  160. /* port default priority */
  161. #define AR8216_PORT_VLAN_PRIORITY BITS(28, 2)
  162. #define AR8216_PORT_VLAN_PRIORITY_S 28
  163. /* ingress 802.1q mode */
  164. #define AR8216_PORT_VLAN_MODE BITS(30, 2)
  165. #define AR8216_PORT_VLAN_MODE_S 30
  166. #define AR8216_REG_PORT_RATE(_i) (AR8216_PORT_OFFSET(_i) + 0x000c)
  167. #define AR8216_REG_PORT_PRIO(_i) (AR8216_PORT_OFFSET(_i) + 0x0010)
  168. #define AR8216_STATS_RXBROAD 0x00
  169. #define AR8216_STATS_RXPAUSE 0x04
  170. #define AR8216_STATS_RXMULTI 0x08
  171. #define AR8216_STATS_RXFCSERR 0x0c
  172. #define AR8216_STATS_RXALIGNERR 0x10
  173. #define AR8216_STATS_RXRUNT 0x14
  174. #define AR8216_STATS_RXFRAGMENT 0x18
  175. #define AR8216_STATS_RX64BYTE 0x1c
  176. #define AR8216_STATS_RX128BYTE 0x20
  177. #define AR8216_STATS_RX256BYTE 0x24
  178. #define AR8216_STATS_RX512BYTE 0x28
  179. #define AR8216_STATS_RX1024BYTE 0x2c
  180. #define AR8216_STATS_RXMAXBYTE 0x30
  181. #define AR8216_STATS_RXTOOLONG 0x34
  182. #define AR8216_STATS_RXGOODBYTE 0x38
  183. #define AR8216_STATS_RXBADBYTE 0x40
  184. #define AR8216_STATS_RXOVERFLOW 0x48
  185. #define AR8216_STATS_FILTERED 0x4c
  186. #define AR8216_STATS_TXBROAD 0x50
  187. #define AR8216_STATS_TXPAUSE 0x54
  188. #define AR8216_STATS_TXMULTI 0x58
  189. #define AR8216_STATS_TXUNDERRUN 0x5c
  190. #define AR8216_STATS_TX64BYTE 0x60
  191. #define AR8216_STATS_TX128BYTE 0x64
  192. #define AR8216_STATS_TX256BYTE 0x68
  193. #define AR8216_STATS_TX512BYTE 0x6c
  194. #define AR8216_STATS_TX1024BYTE 0x70
  195. #define AR8216_STATS_TXMAXBYTE 0x74
  196. #define AR8216_STATS_TXOVERSIZE 0x78
  197. #define AR8216_STATS_TXBYTE 0x7c
  198. #define AR8216_STATS_TXCOLLISION 0x84
  199. #define AR8216_STATS_TXABORTCOL 0x88
  200. #define AR8216_STATS_TXMULTICOL 0x8c
  201. #define AR8216_STATS_TXSINGLECOL 0x90
  202. #define AR8216_STATS_TXEXCDEFER 0x94
  203. #define AR8216_STATS_TXDEFER 0x98
  204. #define AR8216_STATS_TXLATECOL 0x9c
  205. #define AR8236_REG_PORT_VLAN(_i) (AR8216_PORT_OFFSET((_i)) + 0x0008)
  206. #define AR8236_PORT_VLAN_DEFAULT_ID BITS(16, 12)
  207. #define AR8236_PORT_VLAN_DEFAULT_ID_S 16
  208. #define AR8236_PORT_VLAN_PRIORITY BITS(29, 3)
  209. #define AR8236_PORT_VLAN_PRIORITY_S 28
  210. #define AR8236_REG_PORT_VLAN2(_i) (AR8216_PORT_OFFSET((_i)) + 0x000c)
  211. #define AR8236_PORT_VLAN2_MEMBER BITS(16, 7)
  212. #define AR8236_PORT_VLAN2_MEMBER_S 16
  213. #define AR8236_PORT_VLAN2_TX_PRIO BIT(23)
  214. #define AR8236_PORT_VLAN2_VLAN_MODE BITS(30, 2)
  215. #define AR8236_PORT_VLAN2_VLAN_MODE_S 30
  216. #define AR8236_STATS_RXBROAD 0x00
  217. #define AR8236_STATS_RXPAUSE 0x04
  218. #define AR8236_STATS_RXMULTI 0x08
  219. #define AR8236_STATS_RXFCSERR 0x0c
  220. #define AR8236_STATS_RXALIGNERR 0x10
  221. #define AR8236_STATS_RXRUNT 0x14
  222. #define AR8236_STATS_RXFRAGMENT 0x18
  223. #define AR8236_STATS_RX64BYTE 0x1c
  224. #define AR8236_STATS_RX128BYTE 0x20
  225. #define AR8236_STATS_RX256BYTE 0x24
  226. #define AR8236_STATS_RX512BYTE 0x28
  227. #define AR8236_STATS_RX1024BYTE 0x2c
  228. #define AR8236_STATS_RX1518BYTE 0x30
  229. #define AR8236_STATS_RXMAXBYTE 0x34
  230. #define AR8236_STATS_RXTOOLONG 0x38
  231. #define AR8236_STATS_RXGOODBYTE 0x3c
  232. #define AR8236_STATS_RXBADBYTE 0x44
  233. #define AR8236_STATS_RXOVERFLOW 0x4c
  234. #define AR8236_STATS_FILTERED 0x50
  235. #define AR8236_STATS_TXBROAD 0x54
  236. #define AR8236_STATS_TXPAUSE 0x58
  237. #define AR8236_STATS_TXMULTI 0x5c
  238. #define AR8236_STATS_TXUNDERRUN 0x60
  239. #define AR8236_STATS_TX64BYTE 0x64
  240. #define AR8236_STATS_TX128BYTE 0x68
  241. #define AR8236_STATS_TX256BYTE 0x6c
  242. #define AR8236_STATS_TX512BYTE 0x70
  243. #define AR8236_STATS_TX1024BYTE 0x74
  244. #define AR8236_STATS_TX1518BYTE 0x78
  245. #define AR8236_STATS_TXMAXBYTE 0x7c
  246. #define AR8236_STATS_TXOVERSIZE 0x80
  247. #define AR8236_STATS_TXBYTE 0x84
  248. #define AR8236_STATS_TXCOLLISION 0x8c
  249. #define AR8236_STATS_TXABORTCOL 0x90
  250. #define AR8236_STATS_TXMULTICOL 0x94
  251. #define AR8236_STATS_TXSINGLECOL 0x98
  252. #define AR8236_STATS_TXEXCDEFER 0x9c
  253. #define AR8236_STATS_TXDEFER 0xa0
  254. #define AR8236_STATS_TXLATECOL 0xa4
  255. #define AR8316_REG_POSTRIP 0x0008
  256. #define AR8316_POSTRIP_MAC0_GMII_EN BIT(0)
  257. #define AR8316_POSTRIP_MAC0_RGMII_EN BIT(1)
  258. #define AR8316_POSTRIP_PHY4_GMII_EN BIT(2)
  259. #define AR8316_POSTRIP_PHY4_RGMII_EN BIT(3)
  260. #define AR8316_POSTRIP_MAC0_MAC_MODE BIT(4)
  261. #define AR8316_POSTRIP_RTL_MODE BIT(5)
  262. #define AR8316_POSTRIP_RGMII_RXCLK_DELAY_EN BIT(6)
  263. #define AR8316_POSTRIP_RGMII_TXCLK_DELAY_EN BIT(7)
  264. #define AR8316_POSTRIP_SERDES_EN BIT(8)
  265. #define AR8316_POSTRIP_SEL_ANA_RST BIT(9)
  266. #define AR8316_POSTRIP_GATE_25M_EN BIT(10)
  267. #define AR8316_POSTRIP_SEL_CLK25M BIT(11)
  268. #define AR8316_POSTRIP_HIB_PULSE_HW BIT(12)
  269. #define AR8316_POSTRIP_DBG_MODE_I BIT(13)
  270. #define AR8316_POSTRIP_MAC5_MAC_MODE BIT(14)
  271. #define AR8316_POSTRIP_MAC5_PHY_MODE BIT(15)
  272. #define AR8316_POSTRIP_POWER_DOWN_HW BIT(16)
  273. #define AR8316_POSTRIP_LPW_STATE_EN BIT(17)
  274. #define AR8316_POSTRIP_MAN_EN BIT(18)
  275. #define AR8316_POSTRIP_PHY_PLL_ON BIT(19)
  276. #define AR8316_POSTRIP_LPW_EXIT BIT(20)
  277. #define AR8316_POSTRIP_TXDELAY_S0 BIT(21)
  278. #define AR8316_POSTRIP_TXDELAY_S1 BIT(22)
  279. #define AR8316_POSTRIP_RXDELAY_S0 BIT(23)
  280. #define AR8316_POSTRIP_LED_OPEN_EN BIT(24)
  281. #define AR8316_POSTRIP_SPI_EN BIT(25)
  282. #define AR8316_POSTRIP_RXDELAY_S1 BIT(26)
  283. #define AR8316_POSTRIP_POWER_ON_SEL BIT(31)
  284. /* port speed */
  285. enum {
  286. AR8216_PORT_SPEED_10M = 0,
  287. AR8216_PORT_SPEED_100M = 1,
  288. AR8216_PORT_SPEED_1000M = 2,
  289. AR8216_PORT_SPEED_ERR = 3,
  290. };
  291. /* ingress 802.1q mode */
  292. enum {
  293. AR8216_IN_PORT_ONLY = 0,
  294. AR8216_IN_PORT_FALLBACK = 1,
  295. AR8216_IN_VLAN_ONLY = 2,
  296. AR8216_IN_SECURE = 3
  297. };
  298. /* egress 802.1q mode */
  299. enum {
  300. AR8216_OUT_KEEP = 0,
  301. AR8216_OUT_STRIP_VLAN = 1,
  302. AR8216_OUT_ADD_VLAN = 2
  303. };
  304. /* port forwarding state */
  305. enum {
  306. AR8216_PORT_STATE_DISABLED = 0,
  307. AR8216_PORT_STATE_BLOCK = 1,
  308. AR8216_PORT_STATE_LISTEN = 2,
  309. AR8216_PORT_STATE_LEARN = 3,
  310. AR8216_PORT_STATE_FORWARD = 4
  311. };
  312. enum {
  313. AR8XXX_VER_AR8216 = 0x01,
  314. AR8XXX_VER_AR8236 = 0x03,
  315. AR8XXX_VER_AR8316 = 0x10,
  316. AR8XXX_VER_AR8327 = 0x12,
  317. AR8XXX_VER_AR8337 = 0x13,
  318. };
  319. #define AR8XXX_NUM_ARL_RECORDS 100
  320. enum arl_op {
  321. AR8XXX_ARL_INITIALIZE,
  322. AR8XXX_ARL_GET_NEXT
  323. };
  324. struct arl_entry {
  325. u8 port;
  326. u8 mac[6];
  327. };
  328. struct ar8xxx_priv;
  329. struct ar8xxx_mib_desc {
  330. unsigned int size;
  331. unsigned int offset;
  332. const char *name;
  333. };
  334. struct ar8xxx_chip {
  335. unsigned long caps;
  336. bool config_at_probe;
  337. bool mii_lo_first;
  338. /* parameters to calculate REG_PORT_STATS_BASE */
  339. unsigned reg_port_stats_start;
  340. unsigned reg_port_stats_length;
  341. unsigned reg_arl_ctrl;
  342. int (*hw_init)(struct ar8xxx_priv *priv);
  343. void (*cleanup)(struct ar8xxx_priv *priv);
  344. const char *name;
  345. int vlans;
  346. int ports;
  347. const struct switch_dev_ops *swops;
  348. void (*init_globals)(struct ar8xxx_priv *priv);
  349. void (*init_port)(struct ar8xxx_priv *priv, int port);
  350. void (*setup_port)(struct ar8xxx_priv *priv, int port, u32 members);
  351. u32 (*read_port_status)(struct ar8xxx_priv *priv, int port);
  352. u32 (*read_port_eee_status)(struct ar8xxx_priv *priv, int port);
  353. int (*atu_flush)(struct ar8xxx_priv *priv);
  354. int (*atu_flush_port)(struct ar8xxx_priv *priv, int port);
  355. void (*vtu_flush)(struct ar8xxx_priv *priv);
  356. void (*vtu_load_vlan)(struct ar8xxx_priv *priv, u32 vid, u32 port_mask);
  357. void (*phy_fixup)(struct ar8xxx_priv *priv, int phy);
  358. void (*set_mirror_regs)(struct ar8xxx_priv *priv);
  359. void (*get_arl_entry)(struct ar8xxx_priv *priv, struct arl_entry *a,
  360. u32 *status, enum arl_op op);
  361. int (*sw_hw_apply)(struct switch_dev *dev);
  362. const struct ar8xxx_mib_desc *mib_decs;
  363. unsigned num_mibs;
  364. unsigned mib_func;
  365. };
  366. struct ar8xxx_priv {
  367. struct switch_dev dev;
  368. struct mii_bus *mii_bus;
  369. struct phy_device *phy;
  370. int (*get_port_link)(unsigned port);
  371. const struct net_device_ops *ndo_old;
  372. struct net_device_ops ndo;
  373. struct mutex reg_mutex;
  374. u8 chip_ver;
  375. u8 chip_rev;
  376. const struct ar8xxx_chip *chip;
  377. void *chip_data;
  378. bool initialized;
  379. bool port4_phy;
  380. char buf[2048];
  381. struct arl_entry arl_table[AR8XXX_NUM_ARL_RECORDS];
  382. char arl_buf[AR8XXX_NUM_ARL_RECORDS * 32 + 256];
  383. bool link_up[AR8X16_MAX_PORTS];
  384. bool init;
  385. struct mutex mib_lock;
  386. struct delayed_work mib_work;
  387. int mib_next_port;
  388. u64 *mib_stats;
  389. struct list_head list;
  390. unsigned int use_count;
  391. /* all fields below are cleared on reset */
  392. bool vlan;
  393. u16 vlan_id[AR8X16_MAX_VLANS];
  394. u8 vlan_table[AR8X16_MAX_VLANS];
  395. u8 vlan_tagged;
  396. u16 pvid[AR8X16_MAX_PORTS];
  397. int arl_age_time;
  398. /* mirroring */
  399. bool mirror_rx;
  400. bool mirror_tx;
  401. int source_port;
  402. int monitor_port;
  403. };
  404. u32
  405. ar8xxx_mii_read32(struct ar8xxx_priv *priv, int phy_id, int regnum);
  406. void
  407. ar8xxx_mii_write32(struct ar8xxx_priv *priv, int phy_id, int regnum, u32 val);
  408. u32
  409. ar8xxx_read(struct ar8xxx_priv *priv, int reg);
  410. void
  411. ar8xxx_write(struct ar8xxx_priv *priv, int reg, u32 val);
  412. u32
  413. ar8xxx_rmw(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val);
  414. void
  415. ar8xxx_phy_dbg_write(struct ar8xxx_priv *priv, int phy_addr,
  416. u16 dbg_addr, u16 dbg_data);
  417. void
  418. ar8xxx_phy_mmd_write(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg, u16 data);
  419. u16
  420. ar8xxx_phy_mmd_read(struct ar8xxx_priv *priv, int phy_addr, u16 addr, u16 reg);
  421. void
  422. ar8xxx_phy_init(struct ar8xxx_priv *priv);
  423. int
  424. ar8xxx_sw_set_vlan(struct switch_dev *dev, const struct switch_attr *attr,
  425. struct switch_val *val);
  426. int
  427. ar8xxx_sw_get_vlan(struct switch_dev *dev, const struct switch_attr *attr,
  428. struct switch_val *val);
  429. int
  430. ar8xxx_sw_set_reset_mibs(struct switch_dev *dev,
  431. const struct switch_attr *attr,
  432. struct switch_val *val);
  433. int
  434. ar8xxx_sw_set_mirror_rx_enable(struct switch_dev *dev,
  435. const struct switch_attr *attr,
  436. struct switch_val *val);
  437. int
  438. ar8xxx_sw_get_mirror_rx_enable(struct switch_dev *dev,
  439. const struct switch_attr *attr,
  440. struct switch_val *val);
  441. int
  442. ar8xxx_sw_set_mirror_tx_enable(struct switch_dev *dev,
  443. const struct switch_attr *attr,
  444. struct switch_val *val);
  445. int
  446. ar8xxx_sw_get_mirror_tx_enable(struct switch_dev *dev,
  447. const struct switch_attr *attr,
  448. struct switch_val *val);
  449. int
  450. ar8xxx_sw_set_mirror_monitor_port(struct switch_dev *dev,
  451. const struct switch_attr *attr,
  452. struct switch_val *val);
  453. int
  454. ar8xxx_sw_get_mirror_monitor_port(struct switch_dev *dev,
  455. const struct switch_attr *attr,
  456. struct switch_val *val);
  457. int
  458. ar8xxx_sw_set_mirror_source_port(struct switch_dev *dev,
  459. const struct switch_attr *attr,
  460. struct switch_val *val);
  461. int
  462. ar8xxx_sw_get_mirror_source_port(struct switch_dev *dev,
  463. const struct switch_attr *attr,
  464. struct switch_val *val);
  465. int
  466. ar8xxx_sw_set_pvid(struct switch_dev *dev, int port, int vlan);
  467. int
  468. ar8xxx_sw_get_pvid(struct switch_dev *dev, int port, int *vlan);
  469. int
  470. ar8xxx_sw_hw_apply(struct switch_dev *dev);
  471. int
  472. ar8xxx_sw_reset_switch(struct switch_dev *dev);
  473. int
  474. ar8xxx_sw_get_port_link(struct switch_dev *dev, int port,
  475. struct switch_port_link *link);
  476. int
  477. ar8xxx_sw_set_port_reset_mib(struct switch_dev *dev,
  478. const struct switch_attr *attr,
  479. struct switch_val *val);
  480. int
  481. ar8xxx_sw_get_port_mib(struct switch_dev *dev,
  482. const struct switch_attr *attr,
  483. struct switch_val *val);
  484. int
  485. ar8xxx_sw_get_arl_age_time(struct switch_dev *dev,
  486. const struct switch_attr *attr,
  487. struct switch_val *val);
  488. int
  489. ar8xxx_sw_set_arl_age_time(struct switch_dev *dev,
  490. const struct switch_attr *attr,
  491. struct switch_val *val);
  492. int
  493. ar8xxx_sw_get_arl_table(struct switch_dev *dev,
  494. const struct switch_attr *attr,
  495. struct switch_val *val);
  496. int
  497. ar8xxx_sw_set_flush_arl_table(struct switch_dev *dev,
  498. const struct switch_attr *attr,
  499. struct switch_val *val);
  500. int
  501. ar8xxx_sw_set_flush_port_arl_table(struct switch_dev *dev,
  502. const struct switch_attr *attr,
  503. struct switch_val *val);
  504. int
  505. ar8216_wait_bit(struct ar8xxx_priv *priv, int reg, u32 mask, u32 val);
  506. static inline struct ar8xxx_priv *
  507. swdev_to_ar8xxx(struct switch_dev *swdev)
  508. {
  509. return container_of(swdev, struct ar8xxx_priv, dev);
  510. }
  511. static inline bool ar8xxx_has_gige(struct ar8xxx_priv *priv)
  512. {
  513. return priv->chip->caps & AR8XXX_CAP_GIGE;
  514. }
  515. static inline bool ar8xxx_has_mib_counters(struct ar8xxx_priv *priv)
  516. {
  517. return priv->chip->caps & AR8XXX_CAP_MIB_COUNTERS;
  518. }
  519. static inline bool chip_is_ar8216(struct ar8xxx_priv *priv)
  520. {
  521. return priv->chip_ver == AR8XXX_VER_AR8216;
  522. }
  523. static inline bool chip_is_ar8236(struct ar8xxx_priv *priv)
  524. {
  525. return priv->chip_ver == AR8XXX_VER_AR8236;
  526. }
  527. static inline bool chip_is_ar8316(struct ar8xxx_priv *priv)
  528. {
  529. return priv->chip_ver == AR8XXX_VER_AR8316;
  530. }
  531. static inline bool chip_is_ar8327(struct ar8xxx_priv *priv)
  532. {
  533. return priv->chip_ver == AR8XXX_VER_AR8327;
  534. }
  535. static inline bool chip_is_ar8337(struct ar8xxx_priv *priv)
  536. {
  537. return priv->chip_ver == AR8XXX_VER_AR8337;
  538. }
  539. static inline void
  540. ar8xxx_reg_set(struct ar8xxx_priv *priv, int reg, u32 val)
  541. {
  542. ar8xxx_rmw(priv, reg, 0, val);
  543. }
  544. static inline void
  545. ar8xxx_reg_clear(struct ar8xxx_priv *priv, int reg, u32 val)
  546. {
  547. ar8xxx_rmw(priv, reg, val, 0);
  548. }
  549. static inline void
  550. split_addr(u32 regaddr, u16 *r1, u16 *r2, u16 *page)
  551. {
  552. regaddr >>= 1;
  553. *r1 = regaddr & 0x1e;
  554. regaddr >>= 5;
  555. *r2 = regaddr & 0x7;
  556. regaddr >>= 3;
  557. *page = regaddr & 0x1ff;
  558. }
  559. static inline void
  560. wait_for_page_switch(void)
  561. {
  562. udelay(5);
  563. }
  564. #endif