diff options
Diffstat (limited to 'drivers/net/ethernet/freescale/enetc/enetc.h')
-rw-r--r-- | drivers/net/ethernet/freescale/enetc/enetc.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/enetc/enetc.h b/drivers/net/ethernet/freescale/enetc/enetc.h index b8801a2b6a02..0187c49abab2 100644 --- a/drivers/net/ethernet/freescale/enetc/enetc.h +++ b/drivers/net/ethernet/freescale/enetc/enetc.h @@ -10,6 +10,7 @@ #include <linux/ethtool.h> #include <linux/if_vlan.h> #include <linux/phy.h> +#include <net/tsn.h> #include "enetc_hw.h" @@ -24,6 +25,7 @@ struct enetc_tx_swbd { u8 is_dma_page:1; u8 check_wb:1; u8 do_tstamp:1; + u8 qbv_en:1; }; #define ENETC_RX_MAXFRM_SIZE ENETC_MAC_MAXFRM_SIZE @@ -42,6 +44,7 @@ struct enetc_ring_stats { unsigned int packets; unsigned int bytes; unsigned int rx_alloc_errs; + unsigned int win_drop; }; #define ENETC_BDR_DEFAULT_SIZE 1024 @@ -111,6 +114,28 @@ struct enetc_msg_swbd { int size; }; +#ifdef CONFIG_ENETC_TSN +/* Credit-Based Shaper parameters */ +struct cbs { + u8 tc; + bool enable; + u8 bw; + u32 hi_credit; + u32 lo_credit; + u32 idle_slope; + u32 send_slope; + u32 tc_max_sized_frame; + u32 max_interfrence_size; +}; + +struct enetc_cbs { + u32 port_transmit_rate; + u32 port_max_size_frame; + u8 tc_nums; + struct cbs cbs[0]; +}; +#endif + #define ENETC_REV1 0x1 enum enetc_errata { ENETC_ERR_TXCSUM = BIT(0), @@ -118,6 +143,9 @@ enum enetc_errata { ENETC_ERR_UCMCSWP = BIT(2), }; +#define ENETC_SI_F_QBV BIT(0) +#define ENETC_SI_F_QBU BIT(1) + /* PCI IEP device data */ struct enetc_si { struct pci_dev *pdev; @@ -133,6 +161,11 @@ struct enetc_si { int num_fs_entries; int num_rss; /* number of RSS buckets */ unsigned short pad; + int hw_features; +#ifdef CONFIG_ENETC_TSN + struct enetc_cbs *ecbs; +#endif + }; #define ENETC_SI_ALIGN 32 @@ -173,6 +206,8 @@ struct enetc_cls_rule { enum enetc_active_offloads { ENETC_F_RX_TSTAMP = BIT(0), ENETC_F_TX_TSTAMP = BIT(1), + ENETC_F_QBV = BIT(2), + ENETC_F_QBU = BIT(3), }; struct enetc_ndev_priv { @@ -188,6 +223,8 @@ struct enetc_ndev_priv { u16 msg_enable; int active_offloads; + u32 speed; /* store speed for compare update pspeed */ + struct enetc_bdr *tx_ring[16]; struct enetc_bdr *rx_ring[16]; @@ -249,3 +286,21 @@ int enetc_set_fs_entry(struct enetc_si *si, struct enetc_cmd_rfse *rfse, void enetc_set_rss_key(struct enetc_hw *hw, const u8 *bytes); int enetc_get_rss_table(struct enetc_si *si, u32 *table, int count); int enetc_set_rss_table(struct enetc_si *si, const u32 *table, int count); +int enetc_send_cmd(struct enetc_si *si, struct enetc_cbd *cbd); + +#ifdef CONFIG_FSL_ENETC_QOS +int enetc_setup_tc_taprio(struct net_device *ndev, void *type_data); +void enetc_sched_speed_set(struct net_device *ndev); +int enetc_setup_tc_cbs(struct net_device *ndev, void *type_data); +#else +#define enetc_setup_tc_taprio(ndev, type_data) -EOPNOTSUPP +#define enetc_sched_speed_set(ndev) (void)0 +#define enetc_setup_tc_cbs(ndev, type_data) -EOPNOTSUPP +#endif +#ifdef CONFIG_ENETC_TSN +void enetc_tsn_pf_init(struct net_device *netdev, struct pci_dev *pdev); +void enetc_tsn_pf_deinit(struct net_device *netdev); +#else +#define enetc_tsn_pf_init(netdev, pdev) (void)0 +#define enetc_tsn_pf_deinit(netdev) (void)0 +#endif |