1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright 2014-2016 Freescale Semiconductor Inc.
4 * Copyright 2017-2018 NXP
8 #ifndef __FSL_DPSW_CMD_H
9 #define __FSL_DPSW_CMD_H
12 #define DPSW_VER_MAJOR 8
13 #define DPSW_VER_MINOR 0
15 #define DPSW_CMD_BASE_VERSION 1
16 #define DPSW_CMD_ID_OFFSET 4
18 #define DPSW_CMD_ID(id) (((id) << DPSW_CMD_ID_OFFSET) | DPSW_CMD_BASE_VERSION)
21 #define DPSW_CMDID_CLOSE DPSW_CMD_ID(0x800)
22 #define DPSW_CMDID_OPEN DPSW_CMD_ID(0x802)
24 #define DPSW_CMDID_GET_API_VERSION DPSW_CMD_ID(0xa02)
26 #define DPSW_CMDID_ENABLE DPSW_CMD_ID(0x002)
27 #define DPSW_CMDID_DISABLE DPSW_CMD_ID(0x003)
28 #define DPSW_CMDID_GET_ATTR DPSW_CMD_ID(0x004)
29 #define DPSW_CMDID_RESET DPSW_CMD_ID(0x005)
31 #define DPSW_CMDID_SET_IRQ_ENABLE DPSW_CMD_ID(0x012)
33 #define DPSW_CMDID_SET_IRQ_MASK DPSW_CMD_ID(0x014)
35 #define DPSW_CMDID_GET_IRQ_STATUS DPSW_CMD_ID(0x016)
36 #define DPSW_CMDID_CLEAR_IRQ_STATUS DPSW_CMD_ID(0x017)
38 #define DPSW_CMDID_IF_SET_TCI DPSW_CMD_ID(0x030)
39 #define DPSW_CMDID_IF_SET_STP DPSW_CMD_ID(0x031)
41 #define DPSW_CMDID_IF_GET_COUNTER DPSW_CMD_ID(0x034)
43 #define DPSW_CMDID_IF_ENABLE DPSW_CMD_ID(0x03D)
44 #define DPSW_CMDID_IF_DISABLE DPSW_CMD_ID(0x03E)
46 #define DPSW_CMDID_IF_SET_MAX_FRAME_LENGTH DPSW_CMD_ID(0x044)
48 #define DPSW_CMDID_IF_GET_LINK_STATE DPSW_CMD_ID(0x046)
49 #define DPSW_CMDID_IF_SET_FLOODING DPSW_CMD_ID(0x047)
50 #define DPSW_CMDID_IF_SET_BROADCAST DPSW_CMD_ID(0x048)
52 #define DPSW_CMDID_IF_GET_TCI DPSW_CMD_ID(0x04A)
54 #define DPSW_CMDID_IF_SET_LINK_CFG DPSW_CMD_ID(0x04C)
56 #define DPSW_CMDID_VLAN_ADD DPSW_CMD_ID(0x060)
57 #define DPSW_CMDID_VLAN_ADD_IF DPSW_CMD_ID(0x061)
58 #define DPSW_CMDID_VLAN_ADD_IF_UNTAGGED DPSW_CMD_ID(0x062)
60 #define DPSW_CMDID_VLAN_REMOVE_IF DPSW_CMD_ID(0x064)
61 #define DPSW_CMDID_VLAN_REMOVE_IF_UNTAGGED DPSW_CMD_ID(0x065)
62 #define DPSW_CMDID_VLAN_REMOVE_IF_FLOODING DPSW_CMD_ID(0x066)
63 #define DPSW_CMDID_VLAN_REMOVE DPSW_CMD_ID(0x067)
65 #define DPSW_CMDID_FDB_ADD_UNICAST DPSW_CMD_ID(0x084)
66 #define DPSW_CMDID_FDB_REMOVE_UNICAST DPSW_CMD_ID(0x085)
67 #define DPSW_CMDID_FDB_ADD_MULTICAST DPSW_CMD_ID(0x086)
68 #define DPSW_CMDID_FDB_REMOVE_MULTICAST DPSW_CMD_ID(0x087)
69 #define DPSW_CMDID_FDB_SET_LEARNING_MODE DPSW_CMD_ID(0x088)
71 /* Macros for accessing command fields smaller than 1byte */
72 #define DPSW_MASK(field) \
73 GENMASK(DPSW_##field##_SHIFT + DPSW_##field##_SIZE - 1, \
75 #define dpsw_set_field(var, field, val) \
76 ((var) |= (((val) << DPSW_##field##_SHIFT) & DPSW_MASK(field)))
77 #define dpsw_get_field(var, field) \
78 (((var) & DPSW_MASK(field)) >> DPSW_##field##_SHIFT)
79 #define dpsw_get_bit(var, bit) \
80 (((var) >> (bit)) & GENMASK(0, 0))
82 struct dpsw_cmd_open {
86 #define DPSW_COMPONENT_TYPE_SHIFT 0
87 #define DPSW_COMPONENT_TYPE_SIZE 4
89 struct dpsw_cmd_create {
94 /* from LSB: only the first 4 bits */
99 __le16 max_fdb_entries;
100 __le16 fdb_aging_time;
101 __le16 max_fdb_mc_groups;
106 struct dpsw_cmd_destroy {
110 #define DPSW_ENABLE_SHIFT 0
111 #define DPSW_ENABLE_SIZE 1
113 struct dpsw_rsp_is_enabled {
114 /* from LSB: enable:1 */
118 struct dpsw_cmd_set_irq_enable {
124 struct dpsw_cmd_get_irq_enable {
129 struct dpsw_rsp_get_irq_enable {
133 struct dpsw_cmd_set_irq_mask {
138 struct dpsw_cmd_get_irq_mask {
143 struct dpsw_rsp_get_irq_mask {
147 struct dpsw_cmd_get_irq_status {
152 struct dpsw_rsp_get_irq_status {
156 struct dpsw_cmd_clear_irq_status {
161 #define DPSW_COMPONENT_TYPE_SHIFT 0
162 #define DPSW_COMPONENT_TYPE_SIZE 4
164 struct dpsw_rsp_get_attr {
172 __le16 max_fdb_entries;
173 __le16 fdb_aging_time;
177 __le16 max_fdb_mc_groups;
178 u8 max_meters_per_if;
179 /* from LSB only the first 4 bits */
186 struct dpsw_cmd_if_set_flooding {
188 /* from LSB: enable:1 */
192 struct dpsw_cmd_if_set_broadcast {
194 /* from LSB: enable:1 */
198 #define DPSW_VLAN_ID_SHIFT 0
199 #define DPSW_VLAN_ID_SIZE 12
200 #define DPSW_DEI_SHIFT 12
201 #define DPSW_DEI_SIZE 1
202 #define DPSW_PCP_SHIFT 13
203 #define DPSW_PCP_SIZE 3
205 struct dpsw_cmd_if_set_tci {
207 /* from LSB: VLAN_ID:12 DEI:1 PCP:3 */
211 struct dpsw_cmd_if_get_tci {
215 struct dpsw_rsp_if_get_tci {
222 #define DPSW_STATE_SHIFT 0
223 #define DPSW_STATE_SIZE 4
225 struct dpsw_cmd_if_set_stp {
228 /* only the first LSB 4 bits */
232 #define DPSW_COUNTER_TYPE_SHIFT 0
233 #define DPSW_COUNTER_TYPE_SIZE 5
235 struct dpsw_cmd_if_get_counter {
237 /* from LSB: type:5 */
241 struct dpsw_rsp_if_get_counter {
250 struct dpsw_cmd_if_set_max_frame_length {
255 struct dpsw_cmd_if_set_link_cfg {
266 struct dpsw_cmd_if_get_link_state {
270 #define DPSW_UP_SHIFT 0
271 #define DPSW_UP_SIZE 1
273 struct dpsw_rsp_if_get_link_state {
285 struct dpsw_vlan_add {
290 struct dpsw_cmd_vlan_manage_if {
299 struct dpsw_cmd_vlan_remove {
304 struct dpsw_cmd_fdb_add {
306 __le16 fdb_aging_time;
307 __le16 num_fdb_entries;
310 struct dpsw_rsp_fdb_add {
314 struct dpsw_cmd_fdb_remove {
318 #define DPSW_ENTRY_TYPE_SHIFT 0
319 #define DPSW_ENTRY_TYPE_SIZE 4
321 struct dpsw_cmd_fdb_unicast_op {
327 /* only the first 4 bits from LSB */
331 struct dpsw_cmd_fdb_multicast_op {
335 /* only the first 4 bits from LSB */
345 #define DPSW_LEARNING_MODE_SHIFT 0
346 #define DPSW_LEARNING_MODE_SIZE 4
348 struct dpsw_cmd_fdb_set_learning_mode {
350 /* only the first 4 bits from LSB */
354 struct dpsw_rsp_get_api_version {
355 __le16 version_major;
356 __le16 version_minor;
359 #endif /* __FSL_DPSW_CMD_H */