#include <linux/netdevice.h>
#include <linux/etherdevice.h>
#include <linux/inetdevice.h>
#include <linux/bitfield.h>
#include "otx2_common.h"
#include "cn10k.h"
#include "qos.h"
#define OTX2_QOS_QID_INNER …
#define OTX2_QOS_QID_NONE …
#define OTX2_QOS_ROOT_CLASSID …
#define OTX2_QOS_CLASS_NONE …
#define OTX2_QOS_DEFAULT_PRIO …
#define OTX2_QOS_INVALID_SQ …
#define OTX2_QOS_INVALID_TXSCHQ_IDX …
#define CN10K_MAX_RR_WEIGHT …
#define OTX2_MAX_RR_QUANTUM …
static void otx2_qos_update_tx_netdev_queues(struct otx2_nic *pfvf)
{ … }
static void otx2_qos_get_regaddr(struct otx2_qos_node *node,
struct nix_txschq_config *cfg,
int index)
{ … }
static int otx2_qos_quantum_to_dwrr_weight(struct otx2_nic *pfvf, u32 quantum)
{ … }
static void otx2_config_sched_shaping(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct nix_txschq_config *cfg,
int *num_regs)
{ … }
static void __otx2_qos_txschq_cfg(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct nix_txschq_config *cfg)
{ … }
static int otx2_qos_txschq_set_parent_topology(struct otx2_nic *pfvf,
struct otx2_qos_node *parent)
{ … }
static void otx2_qos_free_hw_node_schq(struct otx2_nic *pfvf,
struct otx2_qos_node *parent)
{ … }
static void otx2_qos_free_hw_node(struct otx2_nic *pfvf,
struct otx2_qos_node *parent)
{ … }
static void otx2_qos_free_hw_cfg(struct otx2_nic *pfvf,
struct otx2_qos_node *node)
{ … }
static void otx2_qos_sw_node_delete(struct otx2_nic *pfvf,
struct otx2_qos_node *node)
{ … }
static void otx2_qos_free_sw_node_schq(struct otx2_nic *pfvf,
struct otx2_qos_node *parent)
{ … }
static void __otx2_qos_free_sw_node(struct otx2_nic *pfvf,
struct otx2_qos_node *parent)
{ … }
static void otx2_qos_free_sw_node(struct otx2_nic *pfvf,
struct otx2_qos_node *node)
{ … }
static void otx2_qos_destroy_node(struct otx2_nic *pfvf,
struct otx2_qos_node *node)
{ … }
static void otx2_qos_fill_cfg_schq(struct otx2_qos_node *parent,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_fill_cfg_tl(struct otx2_qos_node *parent,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_prepare_txschq_cfg(struct otx2_nic *pfvf,
struct otx2_qos_node *parent,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_read_txschq_cfg_schq(struct otx2_qos_node *parent,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_read_txschq_cfg_tl(struct otx2_qos_node *parent,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_read_txschq_cfg(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static struct otx2_qos_node *
otx2_qos_alloc_root(struct otx2_nic *pfvf)
{ … }
static int otx2_qos_add_child_node(struct otx2_qos_node *parent,
struct otx2_qos_node *node)
{ … }
static int otx2_qos_alloc_txschq_node(struct otx2_nic *pfvf,
struct otx2_qos_node *node)
{ … }
static struct otx2_qos_node *
otx2_qos_sw_create_leaf_node(struct otx2_nic *pfvf,
struct otx2_qos_node *parent,
u16 classid, u32 prio, u64 rate, u64 ceil,
u32 quantum, u16 qid, bool static_cfg)
{ … }
static struct otx2_qos_node
*otx2_sw_node_find_by_qid(struct otx2_nic *pfvf, u16 qid)
{ … }
static struct otx2_qos_node *
otx2_sw_node_find(struct otx2_nic *pfvf, u32 classid)
{ … }
static struct otx2_qos_node *
otx2_sw_node_find_rcu(struct otx2_nic *pfvf, u32 classid)
{ … }
int otx2_get_txq_by_classid(struct otx2_nic *pfvf, u16 classid)
{ … }
static int
otx2_qos_txschq_config(struct otx2_nic *pfvf, struct otx2_qos_node *node)
{ … }
static int otx2_qos_txschq_alloc(struct otx2_nic *pfvf,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_free_unused_txschq(struct otx2_nic *pfvf,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_txschq_fill_cfg_schq(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_txschq_fill_cfg_tl(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_txschq_fill_cfg(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static void __otx2_qos_assign_base_idx_tl(struct otx2_nic *pfvf,
struct otx2_qos_node *tmp,
unsigned long *child_idx_bmap,
int child_cnt)
{ … }
static int otx2_qos_assign_base_idx_tl(struct otx2_nic *pfvf,
struct otx2_qos_node *node)
{ … }
static int otx2_qos_assign_base_idx(struct otx2_nic *pfvf,
struct otx2_qos_node *node)
{ … }
static int otx2_qos_txschq_push_cfg_schq(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static int otx2_qos_txschq_push_cfg_tl(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static int otx2_qos_txschq_push_cfg(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static int otx2_qos_txschq_update_config(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static int otx2_qos_txschq_update_root_cfg(struct otx2_nic *pfvf,
struct otx2_qos_node *root,
struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_free_cfg(struct otx2_nic *pfvf, struct otx2_qos_cfg *cfg)
{ … }
static void otx2_qos_enadis_sq(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
u16 qid)
{ … }
static void otx2_qos_update_smq_schq(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
bool action)
{ … }
static void __otx2_qos_update_smq(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
bool action)
{ … }
static void otx2_qos_update_smq(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
bool action)
{ … }
static int otx2_qos_push_txschq_cfg(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static int otx2_qos_update_tree(struct otx2_nic *pfvf,
struct otx2_qos_node *node,
struct otx2_qos_cfg *cfg)
{ … }
static int otx2_qos_root_add(struct otx2_nic *pfvf, u16 htb_maj_id, u16 htb_defcls,
struct netlink_ext_ack *extack)
{ … }
static int otx2_qos_root_destroy(struct otx2_nic *pfvf)
{ … }
static int otx2_qos_validate_quantum(struct otx2_nic *pfvf, u32 quantum)
{ … }
static int otx2_qos_validate_dwrr_cfg(struct otx2_qos_node *parent,
struct netlink_ext_ack *extack,
struct otx2_nic *pfvf,
u64 prio, u64 quantum)
{ … }
static int otx2_qos_validate_configuration(struct otx2_qos_node *parent,
struct netlink_ext_ack *extack,
struct otx2_nic *pfvf,
u64 prio, bool static_cfg)
{ … }
static void otx2_reset_dwrr_prio(struct otx2_qos_node *parent, u64 prio)
{ … }
static bool is_qos_node_dwrr(struct otx2_qos_node *parent,
struct otx2_nic *pfvf,
u64 prio)
{ … }
static int otx2_qos_leaf_alloc_queue(struct otx2_nic *pfvf, u16 classid,
u32 parent_classid, u64 rate, u64 ceil,
u64 prio, u32 quantum,
struct netlink_ext_ack *extack)
{ … }
static int otx2_qos_leaf_to_inner(struct otx2_nic *pfvf, u16 classid,
u16 child_classid, u64 rate, u64 ceil, u64 prio,
u32 quantum, struct netlink_ext_ack *extack)
{ … }
static int otx2_qos_cur_leaf_nodes(struct otx2_nic *pfvf)
{ … }
static void otx2_reset_qdisc(struct net_device *dev, u16 qid)
{ … }
static void otx2_cfg_smq(struct otx2_nic *pfvf, struct otx2_qos_node *node,
int qid)
{ … }
static int otx2_qos_leaf_del(struct otx2_nic *pfvf, u16 *classid,
struct netlink_ext_ack *extack)
{ … }
static int otx2_qos_leaf_del_last(struct otx2_nic *pfvf, u16 classid, bool force,
struct netlink_ext_ack *extack)
{ … }
void otx2_clean_qos_queues(struct otx2_nic *pfvf)
{ … }
void otx2_qos_config_txschq(struct otx2_nic *pfvf)
{ … }
int otx2_setup_tc_htb(struct net_device *ndev, struct tc_htb_qopt_offload *htb)
{ … }