ar8216.h 18 KB

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