#include <net/pkt_cls.h>
#include <net/tc_act/tc_gact.h>
#include "common.h"
#include "dwmac4.h"
#include "dwmac5.h"
#include "stmmac.h"
static void tc_fill_all_pass_entry(struct stmmac_tc_entry *entry)
{ … }
static struct stmmac_tc_entry *tc_find_entry(struct stmmac_priv *priv,
struct tc_cls_u32_offload *cls,
bool free)
{ … }
static int tc_fill_actions(struct stmmac_tc_entry *entry,
struct stmmac_tc_entry *frag,
struct tc_cls_u32_offload *cls)
{ … }
static int tc_fill_entry(struct stmmac_priv *priv,
struct tc_cls_u32_offload *cls)
{ … }
static void tc_unfill_entry(struct stmmac_priv *priv,
struct tc_cls_u32_offload *cls)
{ … }
static int tc_config_knode(struct stmmac_priv *priv,
struct tc_cls_u32_offload *cls)
{ … }
static int tc_delete_knode(struct stmmac_priv *priv,
struct tc_cls_u32_offload *cls)
{ … }
static int tc_setup_cls_u32(struct stmmac_priv *priv,
struct tc_cls_u32_offload *cls)
{ … }
static int tc_rfs_init(struct stmmac_priv *priv)
{ … }
static int tc_init(struct stmmac_priv *priv)
{ … }
static int tc_setup_cbs(struct stmmac_priv *priv,
struct tc_cbs_qopt_offload *qopt)
{ … }
static int tc_parse_flow_actions(struct stmmac_priv *priv,
struct flow_action *action,
struct stmmac_flow_entry *entry,
struct netlink_ext_ack *extack)
{ … }
#define ETHER_TYPE_FULL_MASK …
static int tc_add_basic_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls,
struct stmmac_flow_entry *entry)
{ … }
static int tc_add_ip4_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls,
struct stmmac_flow_entry *entry)
{ … }
static int tc_add_ports_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls,
struct stmmac_flow_entry *entry)
{ … }
static struct stmmac_flow_entry *tc_find_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls,
bool get_free)
{ … }
static struct { … } tc_flow_parsers[] = …;
static int tc_add_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls)
{ … }
static int tc_del_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls)
{ … }
static struct stmmac_rfs_entry *tc_find_rfs(struct stmmac_priv *priv,
struct flow_cls_offload *cls,
bool get_free)
{ … }
#define VLAN_PRIO_FULL_MASK …
static int tc_add_vlan_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls)
{ … }
static int tc_del_vlan_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls)
{ … }
static int tc_add_ethtype_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls)
{ … }
static int tc_del_ethtype_flow(struct stmmac_priv *priv,
struct flow_cls_offload *cls)
{ … }
static int tc_add_flow_cls(struct stmmac_priv *priv,
struct flow_cls_offload *cls)
{ … }
static int tc_del_flow_cls(struct stmmac_priv *priv,
struct flow_cls_offload *cls)
{ … }
static int tc_setup_cls(struct stmmac_priv *priv,
struct flow_cls_offload *cls)
{ … }
struct timespec64 stmmac_calc_tas_basetime(ktime_t old_base_time,
ktime_t current_time,
u64 cycle_time)
{ … }
static void tc_taprio_map_maxsdu_txq(struct stmmac_priv *priv,
struct tc_taprio_qopt_offload *qopt)
{ … }
static int tc_taprio_configure(struct stmmac_priv *priv,
struct tc_taprio_qopt_offload *qopt)
{ … }
static void tc_taprio_stats(struct stmmac_priv *priv,
struct tc_taprio_qopt_offload *qopt)
{ … }
static void tc_taprio_queue_stats(struct stmmac_priv *priv,
struct tc_taprio_qopt_offload *qopt)
{ … }
static int tc_setup_taprio(struct stmmac_priv *priv,
struct tc_taprio_qopt_offload *qopt)
{ … }
static int tc_setup_etf(struct stmmac_priv *priv,
struct tc_etf_qopt_offload *qopt)
{ … }
static int tc_query_caps(struct stmmac_priv *priv,
struct tc_query_caps_base *base)
{ … }
const struct stmmac_tc_ops dwmac510_tc_ops = …;