59 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/* Copyright (c) 2024, Intel Corporation. */3 4#ifndef _DEVLINK_PORT_H_5#define _DEVLINK_PORT_H_6 7#include "../ice.h"8#include "../ice_sf_eth.h"9 10/**11 * struct ice_dynamic_port - Track dynamically added devlink port instance12 * @hw_addr: the HW address for this port13 * @active: true if the port has been activated14 * @attached: true it the prot is attached15 * @devlink_port: the associated devlink port structure16 * @pf: pointer to the PF private structure17 * @vsi: the VSI associated with this port18 * @repr_id: the representor ID19 * @sfnum: the subfunction ID20 * @sf_dev: pointer to the subfunction device21 *22 * An instance of a dynamically added devlink port. Each port flavour23 */24struct ice_dynamic_port {25 u8 hw_addr[ETH_ALEN];26 u8 active: 1;27 u8 attached: 1;28 struct devlink_port devlink_port;29 struct ice_pf *pf;30 struct ice_vsi *vsi;31 unsigned long repr_id;32 u32 sfnum;33 /* Flavour-specific implementation data */34 union {35 struct ice_sf_dev *sf_dev;36 };37};38 39void ice_dealloc_all_dynamic_ports(struct ice_pf *pf);40 41int ice_devlink_create_pf_port(struct ice_pf *pf);42void ice_devlink_destroy_pf_port(struct ice_pf *pf);43int ice_devlink_create_vf_port(struct ice_vf *vf);44void ice_devlink_destroy_vf_port(struct ice_vf *vf);45int ice_devlink_create_sf_port(struct ice_dynamic_port *dyn_port);46void ice_devlink_destroy_sf_port(struct ice_dynamic_port *dyn_port);47int ice_devlink_create_sf_dev_port(struct ice_sf_dev *sf_dev);48void ice_devlink_destroy_sf_dev_port(struct ice_sf_dev *sf_dev);49 50#define ice_devlink_port_to_dyn(port) \51 container_of(port, struct ice_dynamic_port, devlink_port)52 53int54ice_devlink_port_new(struct devlink *devlink,55 const struct devlink_port_new_attrs *new_attr,56 struct netlink_ext_ack *extack,57 struct devlink_port **devlink_port);58#endif /* _DEVLINK_PORT_H_ */59