numam-dpdk/drivers/net/sfc/sfc_switch.h
Ivan Malov 0fb3e8a910 net/sfc: support represented port flow item
Add support for item REPRESENTED_PORT to match on traffic entering
the embedded switch from the entity represented by the given
ethdev (network port or VF).

Signed-off-by: Ivan Malov <ivan.malov@oktetlabs.ru>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
2021-11-02 19:26:13 +01:00

125 lines
3.3 KiB
C

/* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright(c) 2019-2021 Xilinx, Inc.
* Copyright(c) 2019 Solarflare Communications Inc.
*
* This software was jointly developed between OKTET Labs (under contract
* for Solarflare) and Solarflare Communications, Inc.
*/
#ifndef _SFC_SWITCH_H
#define _SFC_SWITCH_H
#include <stdint.h>
#include "efx.h"
#include "sfc.h"
#ifdef __cplusplus
extern "C" {
#endif
/** Options for MAE switch port type */
enum sfc_mae_switch_port_type {
/**
* The switch port is operated by a self-sufficient RTE ethdev
* and thus refers to its underlying PCIe function
*/
SFC_MAE_SWITCH_PORT_INDEPENDENT = 0,
/**
* The switch port is operated by a representor RTE ethdev
* and thus refers to the represented PCIe function
*/
SFC_MAE_SWITCH_PORT_REPRESENTOR,
};
struct sfc_mae_switch_port_indep_data {
bool mae_admin;
};
struct sfc_mae_switch_port_repr_data {
efx_pcie_interface_t intf;
uint16_t pf;
uint16_t vf;
};
union sfc_mae_switch_port_data {
struct sfc_mae_switch_port_indep_data indep;
struct sfc_mae_switch_port_repr_data repr;
};
struct sfc_mae_switch_port_request {
enum sfc_mae_switch_port_type type;
const efx_mport_sel_t *entity_mportp;
const efx_mport_sel_t *ethdev_mportp;
uint16_t ethdev_port_id;
union sfc_mae_switch_port_data port_data;
};
typedef void (sfc_mae_switch_port_iterator_cb)(
enum sfc_mae_switch_port_type type,
const efx_mport_sel_t *ethdev_mportp,
uint16_t ethdev_port_id,
const efx_mport_sel_t *entity_mportp,
uint16_t switch_port_id,
union sfc_mae_switch_port_data *port_datap,
void *user_datap);
int sfc_mae_switch_ports_iterate(uint16_t switch_domain_id,
sfc_mae_switch_port_iterator_cb *cb,
void *data);
int sfc_mae_assign_switch_domain(struct sfc_adapter *sa,
uint16_t *switch_domain_id);
int sfc_mae_switch_domain_controllers(uint16_t switch_domain_id,
const efx_pcie_interface_t **controllers,
size_t *nb_controllers);
int sfc_mae_switch_domain_map_controllers(uint16_t switch_domain_id,
efx_pcie_interface_t *controllers,
size_t nb_controllers);
int sfc_mae_switch_controller_from_mapping(
const efx_pcie_interface_t *controllers,
size_t nb_controllers,
efx_pcie_interface_t intf,
int *controller);
int sfc_mae_switch_domain_get_controller(uint16_t switch_domain_id,
efx_pcie_interface_t intf,
int *controller);
int sfc_mae_switch_domain_get_intf(uint16_t switch_domain_id,
int controller,
efx_pcie_interface_t *intf);
int sfc_mae_assign_switch_port(uint16_t switch_domain_id,
const struct sfc_mae_switch_port_request *req,
uint16_t *switch_port_id);
int sfc_mae_clear_switch_port(uint16_t switch_domain_id,
uint16_t switch_port_id);
int sfc_mae_switch_get_ethdev_mport(uint16_t switch_domain_id,
uint16_t ethdev_port_id,
efx_mport_sel_t *mport_sel);
int sfc_mae_switch_get_entity_mport(uint16_t switch_domain_id,
uint16_t ethdev_port_id,
efx_mport_sel_t *mport_sel);
int sfc_mae_switch_port_id_by_entity(uint16_t switch_domain_id,
const efx_mport_sel_t *entity_mportp,
enum sfc_mae_switch_port_type type,
uint16_t *switch_port_id);
int sfc_mae_get_switch_domain_admin(uint16_t switch_domain_id,
uint16_t *port_id);
#ifdef __cplusplus
}
#endif
#endif /* _SFC_SWITCH_H */