1
0
Fork 0

net: mscc: ocelot: tsn configuration support

Support TSN configuration for ocelot switch. The TSN configuration
fucntions are based on tsn netlink interface, it can support Qbv,
Qbu, Qci, 802.1CB, and Qav configuration now.

Signed-off-by: Xiaoliang Yang <xiaoliang.yang_1@nxp.com>
5.4-rM2-2.2.x-imx-squashed
Xiaoliang Yang 2019-11-29 11:02:43 +08:00 committed by Dong Aisheng
parent e867508ce9
commit b5c05e3404
8 changed files with 1857 additions and 10 deletions

View File

@ -2,4 +2,5 @@
obj-$(CONFIG_MSCC_OCELOT_SWITCH) += mscc_ocelot_common.o
mscc_ocelot_common-y := ocelot.o ocelot_io.o
mscc_ocelot_common-y += ocelot_regs.o ocelot_tc.o ocelot_police.o ocelot_ace.o ocelot_flower.o
mscc_ocelot_common-y += ocelot_tsn.o
obj-$(CONFIG_MSCC_OCELOT_SWITCH_OCELOT) += ocelot_board.o

View File

@ -780,7 +780,7 @@ static void ocelot_set_rx_mode(struct net_device *dev)
* forwarded to the CPU port.
*/
val = GENMASK(ocelot->num_phys_ports - 1, 0);
for (i = ocelot->num_phys_ports + 1; i < PGID_CPU; i++)
for (i = ocelot->num_phys_ports + 1; i < PGID_MCRED; i++)
ocelot_write_rix(ocelot, val, ANA_PGID_PGID, i);
__dev_mc_sync(dev, ocelot_mc_sync, ocelot_mc_unsync);
@ -2408,10 +2408,11 @@ int ocelot_init(struct ocelot *ocelot)
SYS_FRM_AGING_MAX_AGE(307692), SYS_FRM_AGING);
/* Setup flooding PGIDs */
ocelot_write_rix(ocelot, ANA_FLOODING_FLD_MULTICAST(PGID_MC) |
ANA_FLOODING_FLD_BROADCAST(PGID_MC) |
ANA_FLOODING_FLD_UNICAST(PGID_UC),
ANA_FLOODING, 0);
for (i = 0; i < 8; i++)
ocelot_write_rix(ocelot, ANA_FLOODING_FLD_MULTICAST(PGID_MC) |
ANA_FLOODING_FLD_BROADCAST(PGID_MC) |
ANA_FLOODING_FLD_UNICAST(PGID_UC),
ANA_FLOODING, i);
ocelot_write(ocelot, ANA_FLOODING_IPMC_FLD_MC6_DATA(PGID_MCIPV6) |
ANA_FLOODING_IPMC_FLD_MC6_CTRL(PGID_MC) |
ANA_FLOODING_IPMC_FLD_MC4_DATA(PGID_MCIPV4) |

View File

@ -27,11 +27,13 @@
#include "ocelot_qs.h"
#include "ocelot_tc.h"
#include "ocelot_ptp.h"
#include "ocelot_dev_gmii.h"
#define PGID_AGGR 64
#define PGID_SRC 80
/* Reserved PGIDs */
#define PGID_MCRED (PGID_AGGR - 25)
#define PGID_CPU (PGID_AGGR - 5)
#define PGID_UC (PGID_AGGR - 4)
#define PGID_MC (PGID_AGGR - 3)

View File

@ -227,6 +227,11 @@
#define ANA_TABLES_SFIDACCESS_SFID_TBL_CMD(x) ((x) & GENMASK(1, 0))
#define ANA_TABLES_SFIDACCESS_SFID_TBL_CMD_M GENMASK(1, 0)
#define SFIDACCESS_CMD_IDLE 0
#define SFIDACCESS_CMD_READ 1
#define SFIDACCESS_CMD_WRITE 2
#define SFIDACCESS_CMD_INIT 3
#define ANA_TABLES_SFIDTIDX_SGID_VALID BIT(26)
#define ANA_TABLES_SFIDTIDX_SGID(x) (((x) << 18) & GENMASK(25, 18))
#define ANA_TABLES_SFIDTIDX_SGID_M GENMASK(25, 18)
@ -252,15 +257,23 @@
#define ANA_SG_CONFIG_REG_3_LIST_LENGTH_M GENMASK(18, 16)
#define ANA_SG_CONFIG_REG_3_LIST_LENGTH_X(x) (((x) & GENMASK(18, 16)) >> 16)
#define ANA_SG_CONFIG_REG_3_GATE_ENABLE BIT(20)
#define ANA_SG_CONFIG_REG_3_INIT_IPS(x) (((x) << 24) & GENMASK(27, 24))
#define ANA_SG_CONFIG_REG_3_INIT_IPS_M GENMASK(27, 24)
#define ANA_SG_CONFIG_REG_3_INIT_IPS_X(x) (((x) & GENMASK(27, 24)) >> 24)
#define ANA_SG_CONFIG_REG_3_INIT_GATE_STATE BIT(28)
#define ANA_SG_CONFIG_REG_3_INIT_IPS(x) (((x) << 21) & GENMASK(24, 21))
#define ANA_SG_CONFIG_REG_3_INIT_IPS_M GENMASK(24, 21)
#define ANA_SG_CONFIG_REG_3_INIT_IPS_X(x) (((x) & GENMASK(24, 21)) >> 21)
#define ANA_SG_CONFIG_REG_3_IPV_VALID BIT(24)
#define ANA_SG_CONFIG_REG_3_IPV_INVALID(x) (((x) << 24) & GENMASK(24, 24))
#define ANA_SG_CONFIG_REG_3_INIT_IPV(x) (((x) << 21) & GENMASK(23, 21))
#define ANA_SG_CONFIG_REG_3_INIT_IPV_M GENMASK(23, 21)
#define ANA_SG_CONFIG_REG_3_INIT_IPV_X(x) (((x) & GENMASK(23, 21)) >> 21)
#define ANA_SG_CONFIG_REG_3_INIT_GATE_STATE BIT(25)
#define ANA_SG_GCL_GS_CONFIG_RSZ 0x4
#define ANA_SG_GCL_GS_CONFIG_IPS(x) ((x) & GENMASK(3, 0))
#define ANA_SG_GCL_GS_CONFIG_IPS_M GENMASK(3, 0)
#define ANA_SG_GCL_GS_CONFIG_IPV_VALID BIT(3)
#define ANA_SG_GCL_GS_CONFIG_IPV(x) ((x) & GENMASK(2, 0))
#define ANA_SG_GCL_GS_CONFIG_IPV_M GENMASK(2, 0)
#define ANA_SG_GCL_GS_CONFIG_GATE_STATE BIT(4)
#define ANA_SG_GCL_TI_CONFIG_RSZ 0x4
@ -271,6 +284,10 @@
#define ANA_SG_STATUS_REG_3_IPS(x) (((x) << 20) & GENMASK(23, 20))
#define ANA_SG_STATUS_REG_3_IPS_M GENMASK(23, 20)
#define ANA_SG_STATUS_REG_3_IPS_X(x) (((x) & GENMASK(23, 20)) >> 20)
#define ANA_SG_STATUS_REG_3_IPV_VALID BIT(23)
#define ANA_SG_STATUS_REG_3_IPV(x) (((x) << 20) & GENMASK(22, 20))
#define ANA_SG_STATUS_REG_3_IPV_M GENMASK(22, 20)
#define ANA_SG_STATUS_REG_3_IPV_X(x) (((x) & GENMASK(22, 20)) >> 20)
#define ANA_SG_STATUS_REG_3_CONFIG_PENDING BIT(24)
#define ANA_PORT_VLAN_CFG_GSZ 0x100

View File

@ -0,0 +1,153 @@
/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
/* Microsemi Ocelot Switch driver
*
* Copyright (c) 2017 Microsemi Corporation
*/
#ifndef _MSCC_OCELOT_DEV_GMII_H_
#define _MSCC_OCELOT_DEV_GMII_H_
#define DEV_GMII_PORT_MODE_CLOCK_CFG 0x0
#define DEV_GMII_PORT_MODE_CLOCK_CFG_MAC_TX_RST BIT(5)
#define DEV_GMII_PORT_MODE_CLOCK_CFG_MAC_RX_RST BIT(4)
#define DEV_GMII_PORT_MODE_CLOCK_CFG_PORT_RST BIT(3)
#define DEV_GMII_PORT_MODE_CLOCK_CFG_PHY_RST BIT(2)
#define DEV_GMII_PORT_MODE_CLOCK_CFG_LINK_SPEED(x) ((x) & GENMASK(1, 0))
#define DEV_GMII_PORT_MODE_CLOCK_CFG_LINK_SPEED_M GENMASK(1, 0)
#define DEV_GMII_PORT_MODE_PORT_MISC 0x4
#define DEV_GMII_PORT_MODE_PORT_MISC_MPLS_RX_ENA BIT(5)
#define DEV_GMII_PORT_MODE_PORT_MISC_FWD_ERROR_ENA BIT(4)
#define DEV_GMII_PORT_MODE_PORT_MISC_FWD_PAUSE_ENA BIT(3)
#define DEV_GMII_PORT_MODE_PORT_MISC_FWD_CTRL_ENA BIT(2)
#define DEV_GMII_PORT_MODE_PORT_MISC_GMII_LOOP_ENA BIT(1)
#define DEV_GMII_PORT_MODE_PORT_MISC_DEV_LOOP_ENA BIT(0)
#define DEV_GMII_PORT_MODE_EVENTS 0x8
#define DEV_GMII_PORT_MODE_EEE_CFG 0xc
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_ENA BIT(22)
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_TIMER_AGE(x) (((x) << 15) & GENMASK(21, 15))
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_TIMER_AGE_M GENMASK(21, 15)
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_TIMER_AGE_X(x) (((x) & GENMASK(21, 15)) >> 15)
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_TIMER_WAKEUP(x) (((x) << 8) & GENMASK(14, 8))
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_TIMER_WAKEUP_M GENMASK(14, 8)
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_TIMER_WAKEUP_X(x) (((x) & GENMASK(14, 8)) >> 8)
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_TIMER_HOLDOFF(x) (((x) << 1) & GENMASK(7, 1))
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_TIMER_HOLDOFF_M GENMASK(7, 1)
#define DEV_GMII_PORT_MODE_EEE_CFG_EEE_TIMER_HOLDOFF_X(x) (((x) & GENMASK(7, 1)) >> 1)
#define DEV_GMII_PORT_MODE_EEE_CFG_PORT_LPI BIT(0)
#define DEV_GMII_PORT_MODE_RX_PATH_DELAY 0x10
#define DEV_GMII_PORT_MODE_TX_PATH_DELAY 0x14
#define DEV_GMII_PORT_MODE_PTP_PREDICT_CFG 0x18
#define DEV_GMII_MAC_CFG_STATUS_MAC_ENA_CFG 0x1c
#define DEV_GMII_MAC_CFG_STATUS_MAC_ENA_CFG_RX_ENA BIT(4)
#define DEV_GMII_MAC_CFG_STATUS_MAC_ENA_CFG_TX_ENA BIT(0)
#define DEV_GMII_MAC_CFG_STATUS_MAC_MODE_CFG 0x20
#define DEV_GMII_MAC_CFG_STATUS_MAC_MODE_CFG_FC_WORD_SYNC_ENA BIT(8)
#define DEV_GMII_MAC_CFG_STATUS_MAC_MODE_CFG_GIGA_MODE_ENA BIT(4)
#define DEV_GMII_MAC_CFG_STATUS_MAC_MODE_CFG_FDX_ENA BIT(0)
#define DEV_GMII_MAC_CFG_STATUS_MAC_MAXLEN_CFG 0x24
#define DEV_GMII_MAC_CFG_STATUS_MAC_TAGS_CFG 0x28
#define DEV_GMII_MAC_CFG_STATUS_MAC_TAGS_CFG_TAG_ID(x) (((x) << 16) & GENMASK(31, 16))
#define DEV_GMII_MAC_CFG_STATUS_MAC_TAGS_CFG_TAG_ID_M GENMASK(31, 16)
#define DEV_GMII_MAC_CFG_STATUS_MAC_TAGS_CFG_TAG_ID_X(x) (((x) & GENMASK(31, 16)) >> 16)
#define DEV_GMII_MAC_CFG_STATUS_MAC_TAGS_CFG_PB_ENA BIT(1)
#define DEV_GMII_MAC_CFG_STATUS_MAC_TAGS_CFG_VLAN_AWR_ENA BIT(0)
#define DEV_GMII_MAC_CFG_STATUS_MAC_TAGS_CFG_VLAN_LEN_AWR_ENA BIT(2)
#define DEV_GMII_MAC_CFG_STATUS_MAC_ADV_CHK_CFG 0x2c
#define DEV_GMII_MAC_CFG_STATUS_MAC_ADV_CHK_CFG_LEN_DROP_ENA BIT(0)
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG 0x30
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_RESTORE_OLD_IPG_CHECK BIT(17)
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_REDUCED_TX_IFG BIT(16)
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_TX_IFG(x) (((x) << 8) & GENMASK(12, 8))
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_TX_IFG_M GENMASK(12, 8)
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_TX_IFG_X(x) (((x) & GENMASK(12, 8)) >> 8)
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_RX_IFG2(x) (((x) << 4) & GENMASK(7, 4))
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_RX_IFG2_M GENMASK(7, 4)
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_RX_IFG2_X(x) (((x) & GENMASK(7, 4)) >> 4)
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_RX_IFG1(x) ((x) & GENMASK(3, 0))
#define DEV_GMII_MAC_CFG_STATUS_MAC_IFG_CFG_RX_IFG1_M GENMASK(3, 0)
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG 0x34
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_BYPASS_COL_SYNC BIT(26)
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_OB_ENA BIT(25)
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_WEXC_DIS BIT(24)
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_SEED(x) (((x) << 16) & GENMASK(23, 16))
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_SEED_M GENMASK(23, 16)
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_SEED_X(x) (((x) & GENMASK(23, 16)) >> 16)
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_SEED_LOAD BIT(12)
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_RETRY_AFTER_EXC_COL_ENA BIT(8)
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_LATE_COL_POS(x) ((x) & GENMASK(6, 0))
#define DEV_GMII_MAC_CFG_STATUS_MAC_HDX_CFG_LATE_COL_POS_M GENMASK(6, 0)
#define DEV_GMII_MAC_CFG_STATUS_MAC_DBG_CFG 0x38
#define DEV_GMII_MAC_CFG_STATUS_MAC_DBG_CFG_TBI_MODE BIT(4)
#define DEV_GMII_MAC_CFG_STATUS_MAC_DBG_CFG_IFG_CRS_EXT_CHK_ENA BIT(0)
#define DEV_GMII_MAC_CFG_STATUS_MAC_FC_MAC_LOW_CFG 0x3c
#define DEV_GMII_MAC_CFG_STATUS_MAC_FC_MAC_HIGH_CFG 0x40
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY 0x44
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_RX_IPG_SHRINK_STICKY BIT(9)
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_RX_PREAM_SHRINK_STICKY BIT(8)
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_RX_CARRIER_EXT_STICKY BIT(7)
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_RX_CARRIER_EXT_ERR_STICKY BIT(6)
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_RX_JUNK_STICKY BIT(5)
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_TX_RETRANSMIT_STICKY BIT(4)
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_TX_JAM_STICKY BIT(3)
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_TX_FIFO_OFLW_STICKY BIT(2)
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_TX_FRM_LEN_OVR_STICKY BIT(1)
#define DEV_GMII_MAC_CFG_STATUS_MAC_STICKY_TX_ABORT_STICKY BIT(0)
#define DEV_GMII_MM_CONFIG_ENABLE_CONFIG 0x48
#define DEV_GMII_MM_CONFIG_ENABLE_CONFIG_MM_RX_ENA BIT(0)
#define DEV_GMII_MM_CONFIG_ENABLE_CONFIG_MM_TX_ENA BIT(4)
#define DEV_GMII_MM_CONFIG_ENABLE_CONFIG_KEEP_S_AFTER_D BIT(8)
#define DEV_GMII_MM_CONFIG_VERIF_CONFIG 0x4c
#define DEV_GMII_MM_CONFIG_VERIF_CONFIG_PRM_VERIFY_DIS BIT(0)
#define DEV_GMII_MM_CONFIG_VERIF_CONFIG_PRM_VERIFY_TIME(x) (((x) << 4) & GENMASK(11, 4))
#define DEV_GMII_MM_CONFIG_VERIF_CONFIG_PRM_VERIFY_TIME_M GENMASK(11, 4)
#define DEV_GMII_MM_CONFIG_VERIF_CONFIG_PRM_VERIFY_TIME_X(x) (((x) & GENMASK(11, 4)) >> 4)
#define DEV_GMII_MM_CONFIG_VERIF_CONFIG_VERIF_TIMER_UNITS(x) (((x) << 12) & GENMASK(13, 12))
#define DEV_GMII_MM_CONFIG_VERIF_CONFIG_VERIF_TIMER_UNITS_M GENMASK(13, 12)
#define DEV_GMII_MM_CONFIG_VERIF_CONFIG_VERIF_TIMER_UNITS_X(x) (((x) & GENMASK(13, 12)) >> 12)
#define DEV_GMII_MM_STATISTICS_MM_STATUS 0x50
#define DEV_GMII_MM_STATISTICS_MM_STATUS_PRMPT_ACTIVE_STATUS BIT(0)
#define DEV_GMII_MM_STATISTICS_MM_STATUS_PRMPT_ACTIVE_STICKY BIT(4)
#define DEV_GMII_MM_STATISTICS_MM_STATUS_PRMPT_VERIFY_STATE(x) (((x) << 8) & GENMASK(10, 8))
#define DEV_GMII_MM_STATISTICS_MM_STATUS_PRMPT_VERIFY_STATE_M GENMASK(10, 8)
#define DEV_GMII_MM_STATISTICS_MM_STATUS_PRMPT_VERIFY_STATE_X(x) (((x) & GENMASK(10, 8)) >> 8)
#define DEV_GMII_MM_STATISTICS_MM_STATUS_UNEXP_RX_PFRM_STICKY BIT(12)
#define DEV_GMII_MM_STATISTICS_MM_STATUS_UNEXP_TX_PFRM_STICKY BIT(16)
#define DEV_GMII_MM_STATISTICS_MM_STATUS_MM_RX_FRAME_STATUS BIT(20)
#define DEV_GMII_MM_STATISTICS_MM_STATUS_MM_TX_FRAME_STATUS BIT(24)
#define DEV_GMII_MM_STATISTICS_MM_STATUS_MM_TX_PRMPT_STATUS BIT(28)
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,51 @@
/* SPDX-License-Identifier: (GPL-2.0 OR MIT)
*
* TSN_SWITCH driver
*
* Copyright 2018-2019 NXP
*/
#ifndef _MSCC_OCELOT_SWITCH_TSN_H_
#define _MSCC_OCELOT_SWITCH_TSN_H_
#define TRUE 1
#define FALSE 0
struct mscc_switch_capa {
u8 num_tas_gcl; /* Number of TAS Gate Control Lists */
u32 tas_ct_min; /* Minimum supported TAS CycleTime in nS */
u32 tas_ct_max; /* Maximum supported TAS CycleTime in nS */
u32 tas_cte_max; /* Maximum supported TAS CycleTimeExtension in nS
*/
u32 tas_it_max;
u32 tas_it_min;
u8 num_hsch;
u8 num_psfp_sfid;
u8 num_frer_ssid;
u8 num_psfp_sgid;
u16 psfp_fmi_max;
u16 psfp_fmi_min;
u8 num_sgi_gcl;
u32 sgi_ct_min;
u32 sgi_ct_max;
u32 sgi_cte_max;
u16 qos_pol_max;
u8 pol_cbs_max;
u8 pol_pbs_max;
u8 frer_seq_len_min;
u8 frer_seq_len_max;
u8 frer_his_len_min;
u8 frer_his_len_max;
u8 qos_dscp_max;
u8 qos_cos_max;
u8 qos_dp_max;
};
static inline void ocelot_port_rmwl(struct ocelot_port *port, u32 val,
u32 mask, u32 reg)
{
u32 cur = ocelot_port_readl(port, reg);
ocelot_port_writel(port, (cur & (~mask)) | val, reg);
}
#endif

View File

@ -10,6 +10,7 @@
#include <linux/if_vlan.h>
#include <linux/regmap.h>
#include <net/dsa.h>
#include <net/tsn.h>
#define IFH_INJ_BYPASS BIT(31)
#define IFH_INJ_POP_CNT_DISABLE (3 << 28)
@ -328,6 +329,10 @@ enum ocelot_reg {
PTP_CFG_MISC,
PTP_CLK_CFG_ADJ_CFG,
PTP_CLK_CFG_ADJ_FREQ,
PTP_CUR_NSF,
PTP_CUR_NSEC,
PTP_CUR_SEC_LSB,
PTP_CUR_SEC_MSB,
GCB_SOFT_RST = GCB << TARGET_OFFSET,
};
@ -539,5 +544,50 @@ int ocelot_ptp_gettime64(struct ptp_clock_info *ptp, struct timespec64 *ts);
int ocelot_port_add_txtstamp_skb(struct ocelot_port *ocelot_port,
struct sk_buff *skb);
void ocelot_get_txtstamp(struct ocelot *ocelot);
int ocelot_qbv_set(struct ocelot *ocelot, int port_id,
struct tsn_qbv_conf *shaper_config);
int ocelot_qbv_get(struct ocelot *ocelot, int port_id,
struct tsn_qbv_conf *shaper_config);
int ocelot_qbv_get_status(struct ocelot *ocelot, int port_id,
struct tsn_qbv_status *qbvstatus);
int ocelot_cut_thru_set(struct ocelot *ocelot, int port_id, u8 cut_thru);
int ocelot_cbs_set(struct ocelot *ocelot, int port, u8 tc, u8 bw);
int ocelot_cbs_get(struct ocelot *ocelot, int port, u8 tc);
int ocelot_qbu_set(struct ocelot *ocelot, int port, u8 preemptible);
int ocelot_qbu_get(struct ocelot *ocelot, int port,
struct tsn_preempt_status *c);
int ocelot_cb_streamid_get(struct ocelot *ocelot, int port, u32 index,
struct tsn_cb_streamid *streamid);
int ocelot_cb_streamid_set(struct ocelot *ocelot, int port, u32 index,
bool enable, struct tsn_cb_streamid *streamid);
int ocelot_qci_sfi_get(struct ocelot *ocelot, int port, u32 index,
struct tsn_qci_psfp_sfi_conf *sfi);
int ocelot_qci_sfi_set(struct ocelot *ocelot, int port, u32 index,
bool enable, struct tsn_qci_psfp_sfi_conf *sfi);
int ocelot_qci_sfi_counters_get(struct ocelot *ocelot, int port, u32 index,
struct tsn_qci_psfp_sfi_counters *sfi_counters);
int ocelot_qci_max_cap_get(struct ocelot *ocelot,
struct tsn_qci_psfp_stream_param *stream_para);
int ocelot_qci_sgi_set(struct ocelot *ocelot, int port, u32 index,
struct tsn_qci_psfp_sgi_conf *sgi_conf);
int ocelot_qci_sgi_get(struct ocelot *ocelot, int port, u32 index,
struct tsn_qci_psfp_sgi_conf *sgi_conf);
int ocelot_qci_sgi_status_get(struct ocelot *ocelot, int port, u32 index,
struct tsn_psfp_sgi_status *sgi_status);
int ocelot_qci_fmi_set(struct ocelot *ocelot, int port, u32 index,
bool enable, struct tsn_qci_psfp_fmi *fmi);
int ocelot_qci_fmi_get(struct ocelot *ocelot, int port, u32 index,
struct tsn_qci_psfp_fmi *fmi,
struct tsn_qci_psfp_fmi_counters *counters);
int ocelot_seq_gen_set(struct ocelot *ocelot, int port, u32 index,
struct tsn_seq_gen_conf *sg_conf);
int ocelot_seq_rec_set(struct ocelot *ocelot, int port, u32 index,
struct tsn_seq_rec_conf *sr_conf);
int ocelot_cb_get(struct ocelot *ocelot, int port, u32 index,
struct tsn_cb_status *c);
int ocelot_pcp_map_enable(struct ocelot *ocelot, u8 port);
int ocelot_rtag_parse_enable(struct ocelot *ocelot, u8 port);
int ocelot_dscp_set(struct ocelot *ocelot, int port,
bool enable, const u8 dscp_ix,
struct tsn_qos_switch_dscp_conf *c);
#endif