#include "devl_internal.h"
#define DEVLINK_PORT_FN_CAPS_VALID_MASK …
static const struct nla_policy devlink_function_nl_policy[DEVLINK_PORT_FUNCTION_ATTR_MAX + 1] = …;
#define ASSERT_DEVLINK_PORT_REGISTERED(devlink_port) …
#define ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port) …
struct devlink_port *devlink_port_get_by_index(struct devlink *devlink,
unsigned int port_index)
{ … }
struct devlink_port *devlink_port_get_from_attrs(struct devlink *devlink,
struct nlattr **attrs)
{ … }
struct devlink_port *devlink_port_get_from_info(struct devlink *devlink,
struct genl_info *info)
{ … }
static void devlink_port_fn_cap_fill(struct nla_bitfield32 *caps,
u32 cap, bool is_enable)
{ … }
static int devlink_port_fn_roce_fill(struct devlink_port *devlink_port,
struct nla_bitfield32 *caps,
struct netlink_ext_ack *extack)
{ … }
static int devlink_port_fn_migratable_fill(struct devlink_port *devlink_port,
struct nla_bitfield32 *caps,
struct netlink_ext_ack *extack)
{ … }
static int devlink_port_fn_ipsec_crypto_fill(struct devlink_port *devlink_port,
struct nla_bitfield32 *caps,
struct netlink_ext_ack *extack)
{ … }
static int devlink_port_fn_ipsec_packet_fill(struct devlink_port *devlink_port,
struct nla_bitfield32 *caps,
struct netlink_ext_ack *extack)
{ … }
static int devlink_port_fn_caps_fill(struct devlink_port *devlink_port,
struct sk_buff *msg,
struct netlink_ext_ack *extack,
bool *msg_updated)
{ … }
static int devlink_port_fn_max_io_eqs_fill(struct devlink_port *port,
struct sk_buff *msg,
struct netlink_ext_ack *extack,
bool *msg_updated)
{ … }
int devlink_nl_port_handle_fill(struct sk_buff *msg, struct devlink_port *devlink_port)
{ … }
size_t devlink_nl_port_handle_size(struct devlink_port *devlink_port)
{ … }
static int devlink_nl_port_attrs_put(struct sk_buff *msg,
struct devlink_port *devlink_port)
{ … }
static int devlink_port_fn_hw_addr_fill(struct devlink_port *port,
struct sk_buff *msg,
struct netlink_ext_ack *extack,
bool *msg_updated)
{ … }
static bool
devlink_port_fn_state_valid(enum devlink_port_fn_state state)
{ … }
static bool
devlink_port_fn_opstate_valid(enum devlink_port_fn_opstate opstate)
{ … }
static int devlink_port_fn_state_fill(struct devlink_port *port,
struct sk_buff *msg,
struct netlink_ext_ack *extack,
bool *msg_updated)
{ … }
static int
devlink_port_fn_mig_set(struct devlink_port *devlink_port, bool enable,
struct netlink_ext_ack *extack)
{ … }
static int
devlink_port_fn_roce_set(struct devlink_port *devlink_port, bool enable,
struct netlink_ext_ack *extack)
{ … }
static int
devlink_port_fn_ipsec_crypto_set(struct devlink_port *devlink_port, bool enable,
struct netlink_ext_ack *extack)
{ … }
static int
devlink_port_fn_ipsec_packet_set(struct devlink_port *devlink_port, bool enable,
struct netlink_ext_ack *extack)
{ … }
static int devlink_port_fn_caps_set(struct devlink_port *devlink_port,
const struct nlattr *attr,
struct netlink_ext_ack *extack)
{ … }
static int
devlink_port_fn_max_io_eqs_set(struct devlink_port *devlink_port,
const struct nlattr *attr,
struct netlink_ext_ack *extack)
{ … }
static int
devlink_nl_port_function_attrs_put(struct sk_buff *msg, struct devlink_port *port,
struct netlink_ext_ack *extack)
{ … }
static int devlink_nl_port_fill(struct sk_buff *msg,
struct devlink_port *devlink_port,
enum devlink_command cmd, u32 portid, u32 seq,
int flags, struct netlink_ext_ack *extack)
{ … }
static void devlink_port_notify(struct devlink_port *devlink_port,
enum devlink_command cmd)
{ … }
static void devlink_ports_notify(struct devlink *devlink,
enum devlink_command cmd)
{ … }
void devlink_ports_notify_register(struct devlink *devlink)
{ … }
void devlink_ports_notify_unregister(struct devlink *devlink)
{ … }
int devlink_nl_port_get_doit(struct sk_buff *skb, struct genl_info *info)
{ … }
static int
devlink_nl_port_get_dump_one(struct sk_buff *msg, struct devlink *devlink,
struct netlink_callback *cb, int flags)
{ … }
int devlink_nl_port_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
{ … }
static int devlink_port_type_set(struct devlink_port *devlink_port,
enum devlink_port_type port_type)
{ … }
static int devlink_port_function_hw_addr_set(struct devlink_port *port,
const struct nlattr *attr,
struct netlink_ext_ack *extack)
{ … }
static int devlink_port_fn_state_set(struct devlink_port *port,
const struct nlattr *attr,
struct netlink_ext_ack *extack)
{ … }
static int devlink_port_function_validate(struct devlink_port *devlink_port,
struct nlattr **tb,
struct netlink_ext_ack *extack)
{ … }
static int devlink_port_function_set(struct devlink_port *port,
const struct nlattr *attr,
struct netlink_ext_ack *extack)
{ … }
int devlink_nl_port_set_doit(struct sk_buff *skb, struct genl_info *info)
{ … }
int devlink_nl_port_split_doit(struct sk_buff *skb, struct genl_info *info)
{ … }
int devlink_nl_port_unsplit_doit(struct sk_buff *skb, struct genl_info *info)
{ … }
int devlink_nl_port_new_doit(struct sk_buff *skb, struct genl_info *info)
{ … }
int devlink_nl_port_del_doit(struct sk_buff *skb, struct genl_info *info)
{ … }
static void devlink_port_type_warn(struct work_struct *work)
{ … }
static bool devlink_port_type_should_warn(struct devlink_port *devlink_port)
{ … }
#define DEVLINK_PORT_TYPE_WARN_TIMEOUT …
static void devlink_port_type_warn_schedule(struct devlink_port *devlink_port)
{ … }
static void devlink_port_type_warn_cancel(struct devlink_port *devlink_port)
{ … }
void devlink_port_init(struct devlink *devlink,
struct devlink_port *devlink_port)
{ … }
EXPORT_SYMBOL_GPL(…);
void devlink_port_fini(struct devlink_port *devlink_port)
{ … }
EXPORT_SYMBOL_GPL(…);
static const struct devlink_port_ops devlink_port_dummy_ops = …;
int devl_port_register_with_ops(struct devlink *devlink,
struct devlink_port *devlink_port,
unsigned int port_index,
const struct devlink_port_ops *ops)
{ … }
EXPORT_SYMBOL_GPL(…);
int devlink_port_register_with_ops(struct devlink *devlink,
struct devlink_port *devlink_port,
unsigned int port_index,
const struct devlink_port_ops *ops)
{ … }
EXPORT_SYMBOL_GPL(…);
void devl_port_unregister(struct devlink_port *devlink_port)
{ … }
EXPORT_SYMBOL_GPL(…);
void devlink_port_unregister(struct devlink_port *devlink_port)
{ … }
EXPORT_SYMBOL_GPL(…);
static void devlink_port_type_netdev_checks(struct devlink_port *devlink_port,
struct net_device *netdev)
{ … }
static void __devlink_port_type_set(struct devlink_port *devlink_port,
enum devlink_port_type type,
void *type_dev)
{ … }
void devlink_port_type_eth_set(struct devlink_port *devlink_port)
{ … }
EXPORT_SYMBOL_GPL(…);
void devlink_port_type_ib_set(struct devlink_port *devlink_port,
struct ib_device *ibdev)
{ … }
EXPORT_SYMBOL_GPL(…);
void devlink_port_type_clear(struct devlink_port *devlink_port)
{ … }
EXPORT_SYMBOL_GPL(…);
int devlink_port_netdevice_event(struct notifier_block *nb,
unsigned long event, void *ptr)
{ … }
static int __devlink_port_attrs_set(struct devlink_port *devlink_port,
enum devlink_port_flavour flavour)
{ … }
void devlink_port_attrs_set(struct devlink_port *devlink_port,
struct devlink_port_attrs *attrs)
{ … }
EXPORT_SYMBOL_GPL(…);
void devlink_port_attrs_pci_pf_set(struct devlink_port *devlink_port, u32 controller,
u16 pf, bool external)
{ … }
EXPORT_SYMBOL_GPL(…);
void devlink_port_attrs_pci_vf_set(struct devlink_port *devlink_port, u32 controller,
u16 pf, u16 vf, bool external)
{ … }
EXPORT_SYMBOL_GPL(…);
void devlink_port_attrs_pci_sf_set(struct devlink_port *devlink_port, u32 controller,
u16 pf, u32 sf, bool external)
{ … }
EXPORT_SYMBOL_GPL(…);
static void devlink_port_rel_notify_cb(struct devlink *devlink, u32 port_index)
{ … }
static void devlink_port_rel_cleanup_cb(struct devlink *devlink, u32 port_index,
u32 rel_index)
{ … }
int devl_port_fn_devlink_set(struct devlink_port *devlink_port,
struct devlink *fn_devlink)
{ … }
EXPORT_SYMBOL_GPL(…);
void devlink_port_linecard_set(struct devlink_port *devlink_port,
struct devlink_linecard *linecard)
{ … }
EXPORT_SYMBOL_GPL(…);
static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port,
char *name, size_t len)
{ … }
int devlink_compat_phys_port_name_get(struct net_device *dev,
char *name, size_t len)
{ … }
int devlink_compat_switch_id_get(struct net_device *dev,
struct netdev_phys_item_id *ppid)
{ … }