// SPDX-License-Identifier: GPL-2.0
|
/*
|
* Copyright 2014-2016 Freescale Semiconductor Inc.
|
* Copyright 2017-2018 NXP
|
*
|
*/
|
|
#ifndef __FSL_DPSW_CMD_H
|
#define __FSL_DPSW_CMD_H
|
|
/* DPSW Version */
|
#define DPSW_VER_MAJOR 8
|
#define DPSW_VER_MINOR 0
|
|
#define DPSW_CMD_BASE_VERSION 1
|
#define DPSW_CMD_ID_OFFSET 4
|
|
#define DPSW_CMD_ID(id) (((id) << DPSW_CMD_ID_OFFSET) | DPSW_CMD_BASE_VERSION)
|
|
/* Command IDs */
|
#define DPSW_CMDID_CLOSE DPSW_CMD_ID(0x800)
|
#define DPSW_CMDID_OPEN DPSW_CMD_ID(0x802)
|
|
#define DPSW_CMDID_GET_API_VERSION DPSW_CMD_ID(0xa02)
|
|
#define DPSW_CMDID_ENABLE DPSW_CMD_ID(0x002)
|
#define DPSW_CMDID_DISABLE DPSW_CMD_ID(0x003)
|
#define DPSW_CMDID_GET_ATTR DPSW_CMD_ID(0x004)
|
#define DPSW_CMDID_RESET DPSW_CMD_ID(0x005)
|
|
#define DPSW_CMDID_SET_IRQ_ENABLE DPSW_CMD_ID(0x012)
|
|
#define DPSW_CMDID_SET_IRQ_MASK DPSW_CMD_ID(0x014)
|
|
#define DPSW_CMDID_GET_IRQ_STATUS DPSW_CMD_ID(0x016)
|
#define DPSW_CMDID_CLEAR_IRQ_STATUS DPSW_CMD_ID(0x017)
|
|
#define DPSW_CMDID_IF_SET_TCI DPSW_CMD_ID(0x030)
|
#define DPSW_CMDID_IF_SET_STP DPSW_CMD_ID(0x031)
|
|
#define DPSW_CMDID_IF_GET_COUNTER DPSW_CMD_ID(0x034)
|
|
#define DPSW_CMDID_IF_ENABLE DPSW_CMD_ID(0x03D)
|
#define DPSW_CMDID_IF_DISABLE DPSW_CMD_ID(0x03E)
|
|
#define DPSW_CMDID_IF_SET_MAX_FRAME_LENGTH DPSW_CMD_ID(0x044)
|
|
#define DPSW_CMDID_IF_GET_LINK_STATE DPSW_CMD_ID(0x046)
|
#define DPSW_CMDID_IF_SET_FLOODING DPSW_CMD_ID(0x047)
|
#define DPSW_CMDID_IF_SET_BROADCAST DPSW_CMD_ID(0x048)
|
|
#define DPSW_CMDID_IF_GET_TCI DPSW_CMD_ID(0x04A)
|
|
#define DPSW_CMDID_IF_SET_LINK_CFG DPSW_CMD_ID(0x04C)
|
|
#define DPSW_CMDID_VLAN_ADD DPSW_CMD_ID(0x060)
|
#define DPSW_CMDID_VLAN_ADD_IF DPSW_CMD_ID(0x061)
|
#define DPSW_CMDID_VLAN_ADD_IF_UNTAGGED DPSW_CMD_ID(0x062)
|
|
#define DPSW_CMDID_VLAN_REMOVE_IF DPSW_CMD_ID(0x064)
|
#define DPSW_CMDID_VLAN_REMOVE_IF_UNTAGGED DPSW_CMD_ID(0x065)
|
#define DPSW_CMDID_VLAN_REMOVE_IF_FLOODING DPSW_CMD_ID(0x066)
|
#define DPSW_CMDID_VLAN_REMOVE DPSW_CMD_ID(0x067)
|
|
#define DPSW_CMDID_FDB_ADD_UNICAST DPSW_CMD_ID(0x084)
|
#define DPSW_CMDID_FDB_REMOVE_UNICAST DPSW_CMD_ID(0x085)
|
#define DPSW_CMDID_FDB_ADD_MULTICAST DPSW_CMD_ID(0x086)
|
#define DPSW_CMDID_FDB_REMOVE_MULTICAST DPSW_CMD_ID(0x087)
|
#define DPSW_CMDID_FDB_SET_LEARNING_MODE DPSW_CMD_ID(0x088)
|
|
/* Macros for accessing command fields smaller than 1byte */
|
#define DPSW_MASK(field) \
|
GENMASK(DPSW_##field##_SHIFT + DPSW_##field##_SIZE - 1, \
|
DPSW_##field##_SHIFT)
|
#define dpsw_set_field(var, field, val) \
|
((var) |= (((val) << DPSW_##field##_SHIFT) & DPSW_MASK(field)))
|
#define dpsw_get_field(var, field) \
|
(((var) & DPSW_MASK(field)) >> DPSW_##field##_SHIFT)
|
#define dpsw_get_bit(var, bit) \
|
(((var) >> (bit)) & GENMASK(0, 0))
|
|
struct dpsw_cmd_open {
|
__le32 dpsw_id;
|
};
|
|
#define DPSW_COMPONENT_TYPE_SHIFT 0
|
#define DPSW_COMPONENT_TYPE_SIZE 4
|
|
struct dpsw_cmd_create {
|
/* cmd word 0 */
|
__le16 num_ifs;
|
u8 max_fdbs;
|
u8 max_meters_per_if;
|
/* from LSB: only the first 4 bits */
|
u8 component_type;
|
u8 pad[3];
|
/* cmd word 1 */
|
__le16 max_vlans;
|
__le16 max_fdb_entries;
|
__le16 fdb_aging_time;
|
__le16 max_fdb_mc_groups;
|
/* cmd word 2 */
|
__le64 options;
|
};
|
|
struct dpsw_cmd_destroy {
|
__le32 dpsw_id;
|
};
|
|
#define DPSW_ENABLE_SHIFT 0
|
#define DPSW_ENABLE_SIZE 1
|
|
struct dpsw_rsp_is_enabled {
|
/* from LSB: enable:1 */
|
u8 enabled;
|
};
|
|
struct dpsw_cmd_set_irq_enable {
|
u8 enable_state;
|
u8 pad[3];
|
u8 irq_index;
|
};
|
|
struct dpsw_cmd_get_irq_enable {
|
__le32 pad;
|
u8 irq_index;
|
};
|
|
struct dpsw_rsp_get_irq_enable {
|
u8 enable_state;
|
};
|
|
struct dpsw_cmd_set_irq_mask {
|
__le32 mask;
|
u8 irq_index;
|
};
|
|
struct dpsw_cmd_get_irq_mask {
|
__le32 pad;
|
u8 irq_index;
|
};
|
|
struct dpsw_rsp_get_irq_mask {
|
__le32 mask;
|
};
|
|
struct dpsw_cmd_get_irq_status {
|
__le32 status;
|
u8 irq_index;
|
};
|
|
struct dpsw_rsp_get_irq_status {
|
__le32 status;
|
};
|
|
struct dpsw_cmd_clear_irq_status {
|
__le32 status;
|
u8 irq_index;
|
};
|
|
#define DPSW_COMPONENT_TYPE_SHIFT 0
|
#define DPSW_COMPONENT_TYPE_SIZE 4
|
|
struct dpsw_rsp_get_attr {
|
/* cmd word 0 */
|
__le16 num_ifs;
|
u8 max_fdbs;
|
u8 num_fdbs;
|
__le16 max_vlans;
|
__le16 num_vlans;
|
/* cmd word 1 */
|
__le16 max_fdb_entries;
|
__le16 fdb_aging_time;
|
__le32 dpsw_id;
|
/* cmd word 2 */
|
__le16 mem_size;
|
__le16 max_fdb_mc_groups;
|
u8 max_meters_per_if;
|
/* from LSB only the first 4 bits */
|
u8 component_type;
|
__le16 pad;
|
/* cmd word 3 */
|
__le64 options;
|
};
|
|
struct dpsw_cmd_if_set_flooding {
|
__le16 if_id;
|
/* from LSB: enable:1 */
|
u8 enable;
|
};
|
|
struct dpsw_cmd_if_set_broadcast {
|
__le16 if_id;
|
/* from LSB: enable:1 */
|
u8 enable;
|
};
|
|
#define DPSW_VLAN_ID_SHIFT 0
|
#define DPSW_VLAN_ID_SIZE 12
|
#define DPSW_DEI_SHIFT 12
|
#define DPSW_DEI_SIZE 1
|
#define DPSW_PCP_SHIFT 13
|
#define DPSW_PCP_SIZE 3
|
|
struct dpsw_cmd_if_set_tci {
|
__le16 if_id;
|
/* from LSB: VLAN_ID:12 DEI:1 PCP:3 */
|
__le16 conf;
|
};
|
|
struct dpsw_cmd_if_get_tci {
|
__le16 if_id;
|
};
|
|
struct dpsw_rsp_if_get_tci {
|
__le16 pad;
|
__le16 vlan_id;
|
u8 dei;
|
u8 pcp;
|
};
|
|
#define DPSW_STATE_SHIFT 0
|
#define DPSW_STATE_SIZE 4
|
|
struct dpsw_cmd_if_set_stp {
|
__le16 if_id;
|
__le16 vlan_id;
|
/* only the first LSB 4 bits */
|
u8 state;
|
};
|
|
#define DPSW_COUNTER_TYPE_SHIFT 0
|
#define DPSW_COUNTER_TYPE_SIZE 5
|
|
struct dpsw_cmd_if_get_counter {
|
__le16 if_id;
|
/* from LSB: type:5 */
|
u8 type;
|
};
|
|
struct dpsw_rsp_if_get_counter {
|
__le64 pad;
|
__le64 counter;
|
};
|
|
struct dpsw_cmd_if {
|
__le16 if_id;
|
};
|
|
struct dpsw_cmd_if_set_max_frame_length {
|
__le16 if_id;
|
__le16 frame_length;
|
};
|
|
struct dpsw_cmd_if_set_link_cfg {
|
/* cmd word 0 */
|
__le16 if_id;
|
u8 pad[6];
|
/* cmd word 1 */
|
__le32 rate;
|
__le32 pad1;
|
/* cmd word 2 */
|
__le64 options;
|
};
|
|
struct dpsw_cmd_if_get_link_state {
|
__le16 if_id;
|
};
|
|
#define DPSW_UP_SHIFT 0
|
#define DPSW_UP_SIZE 1
|
|
struct dpsw_rsp_if_get_link_state {
|
/* cmd word 0 */
|
__le32 pad0;
|
u8 up;
|
u8 pad1[3];
|
/* cmd word 1 */
|
__le32 rate;
|
__le32 pad2;
|
/* cmd word 2 */
|
__le64 options;
|
};
|
|
struct dpsw_vlan_add {
|
__le16 fdb_id;
|
__le16 vlan_id;
|
};
|
|
struct dpsw_cmd_vlan_manage_if {
|
/* cmd word 0 */
|
__le16 pad0;
|
__le16 vlan_id;
|
__le32 pad1;
|
/* cmd word 1-4 */
|
__le64 if_id[4];
|
};
|
|
struct dpsw_cmd_vlan_remove {
|
__le16 pad;
|
__le16 vlan_id;
|
};
|
|
struct dpsw_cmd_fdb_add {
|
__le32 pad;
|
__le16 fdb_aging_time;
|
__le16 num_fdb_entries;
|
};
|
|
struct dpsw_rsp_fdb_add {
|
__le16 fdb_id;
|
};
|
|
struct dpsw_cmd_fdb_remove {
|
__le16 fdb_id;
|
};
|
|
#define DPSW_ENTRY_TYPE_SHIFT 0
|
#define DPSW_ENTRY_TYPE_SIZE 4
|
|
struct dpsw_cmd_fdb_unicast_op {
|
/* cmd word 0 */
|
__le16 fdb_id;
|
u8 mac_addr[6];
|
/* cmd word 1 */
|
__le16 if_egress;
|
/* only the first 4 bits from LSB */
|
u8 type;
|
};
|
|
struct dpsw_cmd_fdb_multicast_op {
|
/* cmd word 0 */
|
__le16 fdb_id;
|
__le16 num_ifs;
|
/* only the first 4 bits from LSB */
|
u8 type;
|
u8 pad[3];
|
/* cmd word 1 */
|
u8 mac_addr[6];
|
__le16 pad2;
|
/* cmd word 2-5 */
|
__le64 if_id[4];
|
};
|
|
#define DPSW_LEARNING_MODE_SHIFT 0
|
#define DPSW_LEARNING_MODE_SIZE 4
|
|
struct dpsw_cmd_fdb_set_learning_mode {
|
__le16 fdb_id;
|
/* only the first 4 bits from LSB */
|
u8 mode;
|
};
|
|
struct dpsw_rsp_get_api_version {
|
__le16 version_major;
|
__le16 version_minor;
|
};
|
|
#endif /* __FSL_DPSW_CMD_H */
|