mxl862xx-api.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. #ifndef __MXL862XX_API_H
  3. #define __MXL862XX_API_H
  4. #include <linux/if_ether.h>
  5. /**
  6. * struct mdio_relay_data - relayed access to the switch internal MDIO bus
  7. * @data: data to be read or written
  8. * @phy: PHY index
  9. * @mmd: MMD device
  10. * @reg: register index
  11. */
  12. struct mdio_relay_data {
  13. __le16 data;
  14. u8 phy;
  15. u8 mmd;
  16. __le16 reg;
  17. } __packed;
  18. /**
  19. * struct mxl862xx_register_mod - Register access parameter to directly
  20. * modify internal registers
  21. * @addr: Register address offset for modification
  22. * @data: Value to write to the register address
  23. * @mask: Mask of bits to be modified (1 to modify, 0 to ignore)
  24. *
  25. * Used for direct register modification operations.
  26. */
  27. struct mxl862xx_register_mod {
  28. __le16 addr;
  29. __le16 data;
  30. __le16 mask;
  31. } __packed;
  32. /**
  33. * enum mxl862xx_mac_clear_type - MAC table clear type
  34. * @MXL862XX_MAC_CLEAR_PHY_PORT: clear dynamic entries based on port_id
  35. * @MXL862XX_MAC_CLEAR_DYNAMIC: clear all dynamic entries
  36. */
  37. enum mxl862xx_mac_clear_type {
  38. MXL862XX_MAC_CLEAR_PHY_PORT = 0,
  39. MXL862XX_MAC_CLEAR_DYNAMIC,
  40. };
  41. /**
  42. * struct mxl862xx_mac_table_clear - MAC table clear
  43. * @type: see &enum mxl862xx_mac_clear_type
  44. * @port_id: physical port id
  45. */
  46. struct mxl862xx_mac_table_clear {
  47. u8 type;
  48. u8 port_id;
  49. } __packed;
  50. /**
  51. * enum mxl862xx_age_timer - Aging Timer Value.
  52. * @MXL862XX_AGETIMER_1_SEC: 1 second aging time
  53. * @MXL862XX_AGETIMER_10_SEC: 10 seconds aging time
  54. * @MXL862XX_AGETIMER_300_SEC: 300 seconds aging time
  55. * @MXL862XX_AGETIMER_1_HOUR: 1 hour aging time
  56. * @MXL862XX_AGETIMER_1_DAY: 24 hours aging time
  57. * @MXL862XX_AGETIMER_CUSTOM: Custom aging time in seconds
  58. */
  59. enum mxl862xx_age_timer {
  60. MXL862XX_AGETIMER_1_SEC = 1,
  61. MXL862XX_AGETIMER_10_SEC,
  62. MXL862XX_AGETIMER_300_SEC,
  63. MXL862XX_AGETIMER_1_HOUR,
  64. MXL862XX_AGETIMER_1_DAY,
  65. MXL862XX_AGETIMER_CUSTOM,
  66. };
  67. /**
  68. * struct mxl862xx_bridge_alloc - Bridge Allocation
  69. * @bridge_id: If the bridge allocation is successful, a valid ID will be
  70. * returned in this field. Otherwise, INVALID_HANDLE is
  71. * returned. For bridge free, this field should contain a
  72. * valid ID returned by the bridge allocation. ID 0 is not
  73. * used for historic reasons.
  74. *
  75. * Used by MXL862XX_BRIDGE_ALLOC and MXL862XX_BRIDGE_FREE.
  76. */
  77. struct mxl862xx_bridge_alloc {
  78. __le16 bridge_id;
  79. };
  80. /**
  81. * enum mxl862xx_bridge_config_mask - Bridge configuration mask
  82. * @MXL862XX_BRIDGE_CONFIG_MASK_MAC_LEARNING_LIMIT:
  83. * Mask for mac_learning_limit_enable and mac_learning_limit.
  84. * @MXL862XX_BRIDGE_CONFIG_MASK_MAC_LEARNED_COUNT:
  85. * Mask for mac_learning_count
  86. * @MXL862XX_BRIDGE_CONFIG_MASK_MAC_DISCARD_COUNT:
  87. * Mask for learning_discard_event
  88. * @MXL862XX_BRIDGE_CONFIG_MASK_SUB_METER:
  89. * Mask for sub_metering_enable and traffic_sub_meter_id
  90. * @MXL862XX_BRIDGE_CONFIG_MASK_FORWARDING_MODE:
  91. * Mask for forward_broadcast, forward_unknown_multicast_ip,
  92. * forward_unknown_multicast_non_ip and forward_unknown_unicast.
  93. * @MXL862XX_BRIDGE_CONFIG_MASK_ALL: Enable all
  94. * @MXL862XX_BRIDGE_CONFIG_MASK_FORCE: Bypass any check for debug purpose
  95. */
  96. enum mxl862xx_bridge_config_mask {
  97. MXL862XX_BRIDGE_CONFIG_MASK_MAC_LEARNING_LIMIT = BIT(0),
  98. MXL862XX_BRIDGE_CONFIG_MASK_MAC_LEARNED_COUNT = BIT(1),
  99. MXL862XX_BRIDGE_CONFIG_MASK_MAC_DISCARD_COUNT = BIT(2),
  100. MXL862XX_BRIDGE_CONFIG_MASK_SUB_METER = BIT(3),
  101. MXL862XX_BRIDGE_CONFIG_MASK_FORWARDING_MODE = BIT(4),
  102. MXL862XX_BRIDGE_CONFIG_MASK_ALL = 0x7FFFFFFF,
  103. MXL862XX_BRIDGE_CONFIG_MASK_FORCE = BIT(31)
  104. };
  105. /**
  106. * enum mxl862xx_bridge_port_egress_meter - Meters for egress traffic type
  107. * @MXL862XX_BRIDGE_PORT_EGRESS_METER_BROADCAST:
  108. * Index of broadcast traffic meter
  109. * @MXL862XX_BRIDGE_PORT_EGRESS_METER_MULTICAST:
  110. * Index of known multicast traffic meter
  111. * @MXL862XX_BRIDGE_PORT_EGRESS_METER_UNKNOWN_MC_IP:
  112. * Index of unknown multicast IP traffic meter
  113. * @MXL862XX_BRIDGE_PORT_EGRESS_METER_UNKNOWN_MC_NON_IP:
  114. * Index of unknown multicast non-IP traffic meter
  115. * @MXL862XX_BRIDGE_PORT_EGRESS_METER_UNKNOWN_UC:
  116. * Index of unknown unicast traffic meter
  117. * @MXL862XX_BRIDGE_PORT_EGRESS_METER_OTHERS:
  118. * Index of traffic meter for other types
  119. * @MXL862XX_BRIDGE_PORT_EGRESS_METER_MAX: Number of index
  120. */
  121. enum mxl862xx_bridge_port_egress_meter {
  122. MXL862XX_BRIDGE_PORT_EGRESS_METER_BROADCAST = 0,
  123. MXL862XX_BRIDGE_PORT_EGRESS_METER_MULTICAST,
  124. MXL862XX_BRIDGE_PORT_EGRESS_METER_UNKNOWN_MC_IP,
  125. MXL862XX_BRIDGE_PORT_EGRESS_METER_UNKNOWN_MC_NON_IP,
  126. MXL862XX_BRIDGE_PORT_EGRESS_METER_UNKNOWN_UC,
  127. MXL862XX_BRIDGE_PORT_EGRESS_METER_OTHERS,
  128. MXL862XX_BRIDGE_PORT_EGRESS_METER_MAX,
  129. };
  130. /**
  131. * enum mxl862xx_bridge_forward_mode - Bridge forwarding type of packet
  132. * @MXL862XX_BRIDGE_FORWARD_FLOOD: Packet is flooded to port members of
  133. * ingress bridge port
  134. * @MXL862XX_BRIDGE_FORWARD_DISCARD: Packet is discarded
  135. */
  136. enum mxl862xx_bridge_forward_mode {
  137. MXL862XX_BRIDGE_FORWARD_FLOOD = 0,
  138. MXL862XX_BRIDGE_FORWARD_DISCARD,
  139. };
  140. /**
  141. * struct mxl862xx_bridge_config - Bridge Configuration
  142. * @bridge_id: Bridge ID (FID)
  143. * @mask: See &enum mxl862xx_bridge_config_mask
  144. * @mac_learning_limit_enable: Enable MAC learning limitation
  145. * @mac_learning_limit: Max number of MAC addresses that can be learned in
  146. * this bridge (all bridge ports)
  147. * @mac_learning_count: Number of MAC addresses learned from this bridge
  148. * @learning_discard_event: Number of learning discard events due to
  149. * hardware resource not available
  150. * @sub_metering_enable: Traffic metering on type of traffic (such as
  151. * broadcast, multicast, unknown unicast, etc) applies
  152. * @traffic_sub_meter_id: Meter for bridge process with specific type (such
  153. * as broadcast, multicast, unknown unicast, etc)
  154. * @forward_broadcast: Forwarding mode of broadcast traffic. See
  155. * &enum mxl862xx_bridge_forward_mode
  156. * @forward_unknown_multicast_ip: Forwarding mode of unknown multicast IP
  157. * traffic.
  158. * See &enum mxl862xx_bridge_forward_mode
  159. * @forward_unknown_multicast_non_ip: Forwarding mode of unknown multicast
  160. * non-IP traffic.
  161. * See &enum mxl862xx_bridge_forward_mode
  162. * @forward_unknown_unicast: Forwarding mode of unknown unicast traffic. See
  163. * &enum mxl862xx_bridge_forward_mode
  164. */
  165. struct mxl862xx_bridge_config {
  166. __le16 bridge_id;
  167. __le32 mask; /* enum mxl862xx_bridge_config_mask */
  168. u8 mac_learning_limit_enable;
  169. __le16 mac_learning_limit;
  170. __le16 mac_learning_count;
  171. __le32 learning_discard_event;
  172. u8 sub_metering_enable[MXL862XX_BRIDGE_PORT_EGRESS_METER_MAX];
  173. __le16 traffic_sub_meter_id[MXL862XX_BRIDGE_PORT_EGRESS_METER_MAX];
  174. __le32 forward_broadcast; /* enum mxl862xx_bridge_forward_mode */
  175. __le32 forward_unknown_multicast_ip; /* enum mxl862xx_bridge_forward_mode */
  176. __le32 forward_unknown_multicast_non_ip; /* enum mxl862xx_bridge_forward_mode */
  177. __le32 forward_unknown_unicast; /* enum mxl862xx_bridge_forward_mode */
  178. } __packed;
  179. /**
  180. * struct mxl862xx_bridge_port_alloc - Bridge Port Allocation
  181. * @bridge_port_id: If the bridge port allocation is successful, a valid ID
  182. * will be returned in this field. Otherwise, INVALID_HANDLE
  183. * is returned. For bridge port free, this field should
  184. * contain a valid ID returned by the bridge port allocation.
  185. *
  186. * Used by MXL862XX_BRIDGE_PORT_ALLOC and MXL862XX_BRIDGE_PORT_FREE.
  187. */
  188. struct mxl862xx_bridge_port_alloc {
  189. __le16 bridge_port_id;
  190. };
  191. /**
  192. * enum mxl862xx_bridge_port_config_mask - Bridge Port configuration mask
  193. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_BRIDGE_ID:
  194. * Mask for bridge_id
  195. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_INGRESS_VLAN:
  196. * Mask for ingress_extended_vlan_enable,
  197. * ingress_extended_vlan_block_id and ingress_extended_vlan_block_size
  198. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_VLAN:
  199. * Mask for egress_extended_vlan_enable, egress_extended_vlan_block_id
  200. * and egress_extended_vlan_block_size
  201. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_INGRESS_MARKING:
  202. * Mask for ingress_marking_mode
  203. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_REMARKING:
  204. * Mask for egress_remarking_mode
  205. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_INGRESS_METER:
  206. * Mask for ingress_metering_enable and ingress_traffic_meter_id
  207. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_SUB_METER:
  208. * Mask for egress_sub_metering_enable and egress_traffic_sub_meter_id
  209. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_CTP_MAPPING:
  210. * Mask for dest_logical_port_id, pmapper_enable, dest_sub_if_id_group,
  211. * pmapper_mapping_mode, pmapper_id_valid and pmapper
  212. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_BRIDGE_PORT_MAP:
  213. * Mask for bridge_port_map
  214. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_MC_DEST_IP_LOOKUP:
  215. * Mask for mc_dest_ip_lookup_disable
  216. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_MC_SRC_IP_LOOKUP:
  217. * Mask for mc_src_ip_lookup_enable
  218. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_MC_DEST_MAC_LOOKUP:
  219. * Mask for dest_mac_lookup_disable
  220. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_MC_SRC_MAC_LEARNING:
  221. * Mask for src_mac_learning_disable
  222. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_MAC_SPOOFING:
  223. * Mask for mac_spoofing_detect_enable
  224. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_PORT_LOCK:
  225. * Mask for port_lock_enable
  226. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_MAC_LEARNING_LIMIT:
  227. * Mask for mac_learning_limit_enable and mac_learning_limit
  228. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_MAC_LEARNED_COUNT:
  229. * Mask for mac_learning_count
  230. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_INGRESS_VLAN_FILTER:
  231. * Mask for ingress_vlan_filter_enable, ingress_vlan_filter_block_id
  232. * and ingress_vlan_filter_block_size
  233. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_VLAN_FILTER1:
  234. * Mask for bypass_egress_vlan_filter1, egress_vlan_filter1enable,
  235. * egress_vlan_filter1block_id and egress_vlan_filter1block_size
  236. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_VLAN_FILTER2:
  237. * Mask for egress_vlan_filter2enable, egress_vlan_filter2block_id and
  238. * egress_vlan_filter2block_size
  239. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_VLAN_BASED_MAC_LEARNING:
  240. * Mask for vlan_tag_selection, vlan_src_mac_priority_enable,
  241. * vlan_src_mac_dei_enable, vlan_src_mac_vid_enable,
  242. * vlan_dst_mac_priority_enable, vlan_dst_mac_dei_enable and
  243. * vlan_dst_mac_vid_enable
  244. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_VLAN_BASED_MULTICAST_LOOKUP:
  245. * Mask for vlan_multicast_priority_enable,
  246. * vlan_multicast_dei_enable and vlan_multicast_vid_enable
  247. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_LOOP_VIOLATION_COUNTER:
  248. * Mask for loop_violation_count
  249. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_ALL: Enable all
  250. * @MXL862XX_BRIDGE_PORT_CONFIG_MASK_FORCE: Bypass any check for debug purpose
  251. */
  252. enum mxl862xx_bridge_port_config_mask {
  253. MXL862XX_BRIDGE_PORT_CONFIG_MASK_BRIDGE_ID = BIT(0),
  254. MXL862XX_BRIDGE_PORT_CONFIG_MASK_INGRESS_VLAN = BIT(1),
  255. MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_VLAN = BIT(2),
  256. MXL862XX_BRIDGE_PORT_CONFIG_MASK_INGRESS_MARKING = BIT(3),
  257. MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_REMARKING = BIT(4),
  258. MXL862XX_BRIDGE_PORT_CONFIG_MASK_INGRESS_METER = BIT(5),
  259. MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_SUB_METER = BIT(6),
  260. MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_CTP_MAPPING = BIT(7),
  261. MXL862XX_BRIDGE_PORT_CONFIG_MASK_BRIDGE_PORT_MAP = BIT(8),
  262. MXL862XX_BRIDGE_PORT_CONFIG_MASK_MC_DEST_IP_LOOKUP = BIT(9),
  263. MXL862XX_BRIDGE_PORT_CONFIG_MASK_MC_SRC_IP_LOOKUP = BIT(10),
  264. MXL862XX_BRIDGE_PORT_CONFIG_MASK_MC_DEST_MAC_LOOKUP = BIT(11),
  265. MXL862XX_BRIDGE_PORT_CONFIG_MASK_MC_SRC_MAC_LEARNING = BIT(12),
  266. MXL862XX_BRIDGE_PORT_CONFIG_MASK_MAC_SPOOFING = BIT(13),
  267. MXL862XX_BRIDGE_PORT_CONFIG_MASK_PORT_LOCK = BIT(14),
  268. MXL862XX_BRIDGE_PORT_CONFIG_MASK_MAC_LEARNING_LIMIT = BIT(15),
  269. MXL862XX_BRIDGE_PORT_CONFIG_MASK_MAC_LEARNED_COUNT = BIT(16),
  270. MXL862XX_BRIDGE_PORT_CONFIG_MASK_INGRESS_VLAN_FILTER = BIT(17),
  271. MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_VLAN_FILTER1 = BIT(18),
  272. MXL862XX_BRIDGE_PORT_CONFIG_MASK_EGRESS_VLAN_FILTER2 = BIT(19),
  273. MXL862XX_BRIDGE_PORT_CONFIG_MASK_VLAN_BASED_MAC_LEARNING = BIT(20),
  274. MXL862XX_BRIDGE_PORT_CONFIG_MASK_VLAN_BASED_MULTICAST_LOOKUP = BIT(21),
  275. MXL862XX_BRIDGE_PORT_CONFIG_MASK_LOOP_VIOLATION_COUNTER = BIT(22),
  276. MXL862XX_BRIDGE_PORT_CONFIG_MASK_ALL = 0x7FFFFFFF,
  277. MXL862XX_BRIDGE_PORT_CONFIG_MASK_FORCE = BIT(31)
  278. };
  279. /**
  280. * enum mxl862xx_color_marking_mode - Color Marking Mode
  281. * @MXL862XX_MARKING_ALL_GREEN: mark packets (except critical) to green
  282. * @MXL862XX_MARKING_INTERNAL_MARKING: do not change color and priority
  283. * @MXL862XX_MARKING_DEI: DEI mark mode
  284. * @MXL862XX_MARKING_PCP_8P0D: PCP 8P0D mark mode
  285. * @MXL862XX_MARKING_PCP_7P1D: PCP 7P1D mark mode
  286. * @MXL862XX_MARKING_PCP_6P2D: PCP 6P2D mark mode
  287. * @MXL862XX_MARKING_PCP_5P3D: PCP 5P3D mark mode
  288. * @MXL862XX_MARKING_DSCP_AF: DSCP AF class
  289. */
  290. enum mxl862xx_color_marking_mode {
  291. MXL862XX_MARKING_ALL_GREEN = 0,
  292. MXL862XX_MARKING_INTERNAL_MARKING,
  293. MXL862XX_MARKING_DEI,
  294. MXL862XX_MARKING_PCP_8P0D,
  295. MXL862XX_MARKING_PCP_7P1D,
  296. MXL862XX_MARKING_PCP_6P2D,
  297. MXL862XX_MARKING_PCP_5P3D,
  298. MXL862XX_MARKING_DSCP_AF,
  299. };
  300. /**
  301. * enum mxl862xx_color_remarking_mode - Color Remarking Mode
  302. * @MXL862XX_REMARKING_NONE: values from last process stage
  303. * @MXL862XX_REMARKING_DEI: DEI mark mode
  304. * @MXL862XX_REMARKING_PCP_8P0D: PCP 8P0D mark mode
  305. * @MXL862XX_REMARKING_PCP_7P1D: PCP 7P1D mark mode
  306. * @MXL862XX_REMARKING_PCP_6P2D: PCP 6P2D mark mode
  307. * @MXL862XX_REMARKING_PCP_5P3D: PCP 5P3D mark mode
  308. * @MXL862XX_REMARKING_DSCP_AF: DSCP AF class
  309. */
  310. enum mxl862xx_color_remarking_mode {
  311. MXL862XX_REMARKING_NONE = 0,
  312. MXL862XX_REMARKING_DEI = 2,
  313. MXL862XX_REMARKING_PCP_8P0D,
  314. MXL862XX_REMARKING_PCP_7P1D,
  315. MXL862XX_REMARKING_PCP_6P2D,
  316. MXL862XX_REMARKING_PCP_5P3D,
  317. MXL862XX_REMARKING_DSCP_AF,
  318. };
  319. /**
  320. * enum mxl862xx_pmapper_mapping_mode - P-mapper Mapping Mode
  321. * @MXL862XX_PMAPPER_MAPPING_PCP: Use PCP for VLAN tagged packets to derive
  322. * sub interface ID group
  323. * @MXL862XX_PMAPPER_MAPPING_LAG: Use LAG Index for Pmapper access
  324. * regardless of IP and VLAN packet
  325. * @MXL862XX_PMAPPER_MAPPING_DSCP: Use DSCP for VLAN tagged IP packets to
  326. * derive sub interface ID group
  327. */
  328. enum mxl862xx_pmapper_mapping_mode {
  329. MXL862XX_PMAPPER_MAPPING_PCP = 0,
  330. MXL862XX_PMAPPER_MAPPING_LAG,
  331. MXL862XX_PMAPPER_MAPPING_DSCP,
  332. };
  333. /**
  334. * struct mxl862xx_pmapper - P-mapper Configuration
  335. * @pmapper_id: Index of P-mapper (0-31)
  336. * @dest_sub_if_id_group: Sub interface ID group. Entry 0 is for non-IP and
  337. * non-VLAN tagged packets.
  338. * Entries 1-8 are PCP mapping entries for VLAN tagged
  339. * packets.
  340. * Entries 9-72 are DSCP or LAG mapping entries.
  341. *
  342. * Used by CTP port config and bridge port config. In case of LAG, it is
  343. * user's responsibility to provide the mapped entries in given P-mapper
  344. * table. In other modes the entries are auto mapped from input packet.
  345. */
  346. struct mxl862xx_pmapper {
  347. __le16 pmapper_id;
  348. u8 dest_sub_if_id_group[73];
  349. } __packed;
  350. /**
  351. * struct mxl862xx_bridge_port_config - Bridge Port Configuration
  352. * @bridge_port_id: Bridge Port ID allocated by bridge port allocation
  353. * @mask: See &enum mxl862xx_bridge_port_config_mask
  354. * @bridge_id: Bridge ID (FID) to which this bridge port is associated
  355. * @ingress_extended_vlan_enable: Enable extended VLAN processing for
  356. * ingress traffic
  357. * @ingress_extended_vlan_block_id: Extended VLAN block allocated for
  358. * ingress traffic
  359. * @ingress_extended_vlan_block_size: Extended VLAN block size for ingress
  360. * traffic
  361. * @egress_extended_vlan_enable: Enable extended VLAN processing for egress
  362. * traffic
  363. * @egress_extended_vlan_block_id: Extended VLAN block allocated for egress
  364. * traffic
  365. * @egress_extended_vlan_block_size: Extended VLAN block size for egress
  366. * traffic
  367. * @ingress_marking_mode: Ingress color marking mode. See
  368. * &enum mxl862xx_color_marking_mode
  369. * @egress_remarking_mode: Color remarking for egress traffic. See
  370. * &enum mxl862xx_color_remarking_mode
  371. * @ingress_metering_enable: Traffic metering on ingress traffic applies
  372. * @ingress_traffic_meter_id: Meter for ingress Bridge Port process
  373. * @egress_sub_metering_enable: Traffic metering on various types of egress
  374. * traffic
  375. * @egress_traffic_sub_meter_id: Meter for egress Bridge Port process with
  376. * specific type
  377. * @dest_logical_port_id: Destination logical port
  378. * @pmapper_enable: Enable P-mapper
  379. * @dest_sub_if_id_group: Destination sub interface ID group when
  380. * pmapper_enable is false
  381. * @pmapper_mapping_mode: P-mapper mapping mode. See
  382. * &enum mxl862xx_pmapper_mapping_mode
  383. * @pmapper_id_valid: When true, P-mapper is re-used; when false,
  384. * allocation is handled by API
  385. * @pmapper: P-mapper configuration used when pmapper_enable is true
  386. * @bridge_port_map: Port map defining broadcast domain. Each bit
  387. * represents one bridge port. Bridge port ID is
  388. * index * 16 + bit offset.
  389. * @mc_dest_ip_lookup_disable: Disable multicast IP destination table
  390. * lookup
  391. * @mc_src_ip_lookup_enable: Enable multicast IP source table lookup
  392. * @dest_mac_lookup_disable: Disable destination MAC lookup; packet treated
  393. * as unknown
  394. * @src_mac_learning_disable: Disable source MAC address learning
  395. * @mac_spoofing_detect_enable: Enable MAC spoofing detection
  396. * @port_lock_enable: Enable port locking
  397. * @mac_learning_limit_enable: Enable MAC learning limitation
  398. * @mac_learning_limit: Maximum number of MAC addresses that can be learned
  399. * from this bridge port
  400. * @loop_violation_count: Number of loop violation events from this bridge
  401. * port
  402. * @mac_learning_count: Number of MAC addresses learned from this bridge
  403. * port
  404. * @ingress_vlan_filter_enable: Enable ingress VLAN filter
  405. * @ingress_vlan_filter_block_id: VLAN filter block of ingress traffic
  406. * @ingress_vlan_filter_block_size: VLAN filter block size for ingress
  407. * traffic
  408. * @bypass_egress_vlan_filter1: For ingress traffic, bypass VLAN filter 1
  409. * at egress bridge port processing
  410. * @egress_vlan_filter1enable: Enable egress VLAN filter 1
  411. * @egress_vlan_filter1block_id: VLAN filter block 1 of egress traffic
  412. * @egress_vlan_filter1block_size: VLAN filter block 1 size
  413. * @egress_vlan_filter2enable: Enable egress VLAN filter 2
  414. * @egress_vlan_filter2block_id: VLAN filter block 2 of egress traffic
  415. * @egress_vlan_filter2block_size: VLAN filter block 2 size
  416. * @vlan_tag_selection: VLAN tag selection for MAC address/multicast
  417. * learning, lookup and filtering.
  418. * 0 - Intermediate outer VLAN tag is used.
  419. * 1 - Original outer VLAN tag is used.
  420. * @vlan_src_mac_priority_enable: Enable VLAN Priority field for source MAC
  421. * learning and filtering
  422. * @vlan_src_mac_dei_enable: Enable VLAN DEI/CFI field for source MAC
  423. * learning and filtering
  424. * @vlan_src_mac_vid_enable: Enable VLAN ID field for source MAC learning
  425. * and filtering
  426. * @vlan_dst_mac_priority_enable: Enable VLAN Priority field for destination
  427. * MAC lookup and filtering
  428. * @vlan_dst_mac_dei_enable: Enable VLAN CFI/DEI field for destination MAC
  429. * lookup and filtering
  430. * @vlan_dst_mac_vid_enable: Enable VLAN ID field for destination MAC lookup
  431. * and filtering
  432. * @vlan_multicast_priority_enable: Enable VLAN Priority field for IP
  433. * multicast lookup
  434. * @vlan_multicast_dei_enable: Enable VLAN CFI/DEI field for IP multicast
  435. * lookup
  436. * @vlan_multicast_vid_enable: Enable VLAN ID field for IP multicast lookup
  437. */
  438. struct mxl862xx_bridge_port_config {
  439. __le16 bridge_port_id;
  440. __le32 mask; /* enum mxl862xx_bridge_port_config_mask */
  441. __le16 bridge_id;
  442. u8 ingress_extended_vlan_enable;
  443. __le16 ingress_extended_vlan_block_id;
  444. __le16 ingress_extended_vlan_block_size;
  445. u8 egress_extended_vlan_enable;
  446. __le16 egress_extended_vlan_block_id;
  447. __le16 egress_extended_vlan_block_size;
  448. __le32 ingress_marking_mode; /* enum mxl862xx_color_marking_mode */
  449. __le32 egress_remarking_mode; /* enum mxl862xx_color_remarking_mode */
  450. u8 ingress_metering_enable;
  451. __le16 ingress_traffic_meter_id;
  452. u8 egress_sub_metering_enable[MXL862XX_BRIDGE_PORT_EGRESS_METER_MAX];
  453. __le16 egress_traffic_sub_meter_id[MXL862XX_BRIDGE_PORT_EGRESS_METER_MAX];
  454. u8 dest_logical_port_id;
  455. u8 pmapper_enable;
  456. __le16 dest_sub_if_id_group;
  457. __le32 pmapper_mapping_mode; /* enum mxl862xx_pmapper_mapping_mode */
  458. u8 pmapper_id_valid;
  459. struct mxl862xx_pmapper pmapper;
  460. __le16 bridge_port_map[8];
  461. u8 mc_dest_ip_lookup_disable;
  462. u8 mc_src_ip_lookup_enable;
  463. u8 dest_mac_lookup_disable;
  464. u8 src_mac_learning_disable;
  465. u8 mac_spoofing_detect_enable;
  466. u8 port_lock_enable;
  467. u8 mac_learning_limit_enable;
  468. __le16 mac_learning_limit;
  469. __le16 loop_violation_count;
  470. __le16 mac_learning_count;
  471. u8 ingress_vlan_filter_enable;
  472. __le16 ingress_vlan_filter_block_id;
  473. __le16 ingress_vlan_filter_block_size;
  474. u8 bypass_egress_vlan_filter1;
  475. u8 egress_vlan_filter1enable;
  476. __le16 egress_vlan_filter1block_id;
  477. __le16 egress_vlan_filter1block_size;
  478. u8 egress_vlan_filter2enable;
  479. __le16 egress_vlan_filter2block_id;
  480. __le16 egress_vlan_filter2block_size;
  481. u8 vlan_tag_selection;
  482. u8 vlan_src_mac_priority_enable;
  483. u8 vlan_src_mac_dei_enable;
  484. u8 vlan_src_mac_vid_enable;
  485. u8 vlan_dst_mac_priority_enable;
  486. u8 vlan_dst_mac_dei_enable;
  487. u8 vlan_dst_mac_vid_enable;
  488. u8 vlan_multicast_priority_enable;
  489. u8 vlan_multicast_dei_enable;
  490. u8 vlan_multicast_vid_enable;
  491. } __packed;
  492. /**
  493. * struct mxl862xx_cfg - Global Switch configuration Attributes
  494. * @mac_table_age_timer: See &enum mxl862xx_age_timer
  495. * @age_timer: Custom MAC table aging timer in seconds
  496. * @max_packet_len: Maximum Ethernet packet length
  497. * @learning_limit_action: Automatic MAC address table learning limitation
  498. * consecutive action
  499. * @mac_locking_action: Accept or discard MAC port locking violation
  500. * packets
  501. * @mac_spoofing_action: Accept or discard MAC spoofing and port MAC locking
  502. * violation packets
  503. * @pause_mac_mode_src: Pause frame MAC source address mode
  504. * @pause_mac_src: Pause frame MAC source address
  505. */
  506. struct mxl862xx_cfg {
  507. __le32 mac_table_age_timer; /* enum mxl862xx_age_timer */
  508. __le32 age_timer;
  509. __le16 max_packet_len;
  510. u8 learning_limit_action;
  511. u8 mac_locking_action;
  512. u8 mac_spoofing_action;
  513. u8 pause_mac_mode_src;
  514. u8 pause_mac_src[ETH_ALEN];
  515. } __packed;
  516. /**
  517. * enum mxl862xx_ss_sp_tag_mask - Special tag valid field indicator bits
  518. * @MXL862XX_SS_SP_TAG_MASK_RX: valid RX special tag mode
  519. * @MXL862XX_SS_SP_TAG_MASK_TX: valid TX special tag mode
  520. * @MXL862XX_SS_SP_TAG_MASK_RX_PEN: valid RX special tag info over preamble
  521. * @MXL862XX_SS_SP_TAG_MASK_TX_PEN: valid TX special tag info over preamble
  522. */
  523. enum mxl862xx_ss_sp_tag_mask {
  524. MXL862XX_SS_SP_TAG_MASK_RX = BIT(0),
  525. MXL862XX_SS_SP_TAG_MASK_TX = BIT(1),
  526. MXL862XX_SS_SP_TAG_MASK_RX_PEN = BIT(2),
  527. MXL862XX_SS_SP_TAG_MASK_TX_PEN = BIT(3),
  528. };
  529. /**
  530. * enum mxl862xx_ss_sp_tag_rx - RX special tag mode
  531. * @MXL862XX_SS_SP_TAG_RX_NO_TAG_NO_INSERT: packet does NOT have special
  532. * tag and special tag is NOT inserted
  533. * @MXL862XX_SS_SP_TAG_RX_NO_TAG_INSERT: packet does NOT have special tag
  534. * and special tag is inserted
  535. * @MXL862XX_SS_SP_TAG_RX_TAG_NO_INSERT: packet has special tag and special
  536. * tag is NOT inserted
  537. */
  538. enum mxl862xx_ss_sp_tag_rx {
  539. MXL862XX_SS_SP_TAG_RX_NO_TAG_NO_INSERT = 0,
  540. MXL862XX_SS_SP_TAG_RX_NO_TAG_INSERT = 1,
  541. MXL862XX_SS_SP_TAG_RX_TAG_NO_INSERT = 2,
  542. };
  543. /**
  544. * enum mxl862xx_ss_sp_tag_tx - TX special tag mode
  545. * @MXL862XX_SS_SP_TAG_TX_NO_TAG_NO_REMOVE: packet does NOT have special
  546. * tag and special tag is NOT removed
  547. * @MXL862XX_SS_SP_TAG_TX_TAG_REPLACE: packet has special tag and special
  548. * tag is replaced
  549. * @MXL862XX_SS_SP_TAG_TX_TAG_NO_REMOVE: packet has special tag and special
  550. * tag is NOT removed
  551. * @MXL862XX_SS_SP_TAG_TX_TAG_REMOVE: packet has special tag and special
  552. * tag is removed
  553. */
  554. enum mxl862xx_ss_sp_tag_tx {
  555. MXL862XX_SS_SP_TAG_TX_NO_TAG_NO_REMOVE = 0,
  556. MXL862XX_SS_SP_TAG_TX_TAG_REPLACE = 1,
  557. MXL862XX_SS_SP_TAG_TX_TAG_NO_REMOVE = 2,
  558. MXL862XX_SS_SP_TAG_TX_TAG_REMOVE = 3,
  559. };
  560. /**
  561. * enum mxl862xx_ss_sp_tag_rx_pen - RX special tag info over preamble
  562. * @MXL862XX_SS_SP_TAG_RX_PEN_ALL_0: special tag info inserted from byte 2
  563. * to 7 are all 0
  564. * @MXL862XX_SS_SP_TAG_RX_PEN_BYTE_5_IS_16: special tag byte 5 is 16, other
  565. * bytes from 2 to 7 are 0
  566. * @MXL862XX_SS_SP_TAG_RX_PEN_BYTE_5_FROM_PREAMBLE: special tag byte 5 is
  567. * from preamble field, others
  568. * are 0
  569. * @MXL862XX_SS_SP_TAG_RX_PEN_BYTE_2_TO_7_FROM_PREAMBLE: special tag byte 2
  570. * to 7 are from preamble
  571. * field
  572. */
  573. enum mxl862xx_ss_sp_tag_rx_pen {
  574. MXL862XX_SS_SP_TAG_RX_PEN_ALL_0 = 0,
  575. MXL862XX_SS_SP_TAG_RX_PEN_BYTE_5_IS_16 = 1,
  576. MXL862XX_SS_SP_TAG_RX_PEN_BYTE_5_FROM_PREAMBLE = 2,
  577. MXL862XX_SS_SP_TAG_RX_PEN_BYTE_2_TO_7_FROM_PREAMBLE = 3,
  578. };
  579. /**
  580. * struct mxl862xx_ss_sp_tag - Special tag port settings
  581. * @pid: port ID (1~16)
  582. * @mask: See &enum mxl862xx_ss_sp_tag_mask
  583. * @rx: See &enum mxl862xx_ss_sp_tag_rx
  584. * @tx: See &enum mxl862xx_ss_sp_tag_tx
  585. * @rx_pen: See &enum mxl862xx_ss_sp_tag_rx_pen
  586. * @tx_pen: TX special tag info over preamble
  587. * 0 - disabled
  588. * 1 - enabled
  589. */
  590. struct mxl862xx_ss_sp_tag {
  591. u8 pid;
  592. u8 mask; /* enum mxl862xx_ss_sp_tag_mask */
  593. u8 rx; /* enum mxl862xx_ss_sp_tag_rx */
  594. u8 tx; /* enum mxl862xx_ss_sp_tag_tx */
  595. u8 rx_pen; /* enum mxl862xx_ss_sp_tag_rx_pen */
  596. u8 tx_pen; /* boolean */
  597. } __packed;
  598. /**
  599. * enum mxl862xx_logical_port_mode - Logical port mode
  600. * @MXL862XX_LOGICAL_PORT_8BIT_WLAN: WLAN with 8-bit station ID
  601. * @MXL862XX_LOGICAL_PORT_9BIT_WLAN: WLAN with 9-bit station ID
  602. * @MXL862XX_LOGICAL_PORT_ETHERNET: Ethernet port
  603. * @MXL862XX_LOGICAL_PORT_OTHER: Others
  604. */
  605. enum mxl862xx_logical_port_mode {
  606. MXL862XX_LOGICAL_PORT_8BIT_WLAN = 0,
  607. MXL862XX_LOGICAL_PORT_9BIT_WLAN,
  608. MXL862XX_LOGICAL_PORT_ETHERNET,
  609. MXL862XX_LOGICAL_PORT_OTHER = 0xFF,
  610. };
  611. /**
  612. * struct mxl862xx_ctp_port_assignment - CTP Port Assignment/association
  613. * with logical port
  614. * @logical_port_id: Logical Port Id. The valid range is hardware dependent
  615. * @first_ctp_port_id: First CTP (Connectivity Termination Port) ID mapped
  616. * to above logical port ID
  617. * @number_of_ctp_port: Total number of CTP Ports mapped above logical port
  618. * ID
  619. * @mode: Logical port mode to define sub interface ID format. See
  620. * &enum mxl862xx_logical_port_mode
  621. * @bridge_port_id: Bridge Port ID (not FID). For allocation, each CTP
  622. * allocated is mapped to the Bridge Port given by this field.
  623. * The Bridge Port will be configured to use first CTP as
  624. * egress CTP.
  625. */
  626. struct mxl862xx_ctp_port_assignment {
  627. u8 logical_port_id;
  628. __le16 first_ctp_port_id;
  629. __le16 number_of_ctp_port;
  630. __le32 mode; /* enum mxl862xx_logical_port_mode */
  631. __le16 bridge_port_id;
  632. } __packed;
  633. /**
  634. * struct mxl862xx_sys_fw_image_version - Firmware version information
  635. * @iv_major: firmware major version
  636. * @iv_minor: firmware minor version
  637. * @iv_revision: firmware revision
  638. * @iv_build_num: firmware build number
  639. */
  640. struct mxl862xx_sys_fw_image_version {
  641. u8 iv_major;
  642. u8 iv_minor;
  643. __le16 iv_revision;
  644. __le32 iv_build_num;
  645. } __packed;
  646. #endif /* __MXL862XX_API_H */