forked from Minki/linux
sfc: phys port/switch identification for ef100 reps
Requires storing VF index in struct efx_rep. Signed-off-by: Edward Cree <ecree.xilinx@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5687eb3466
commit
e1479556f8
@ -14,9 +14,11 @@
|
||||
|
||||
#define EFX_EF100_REP_DRIVER "efx_ef100_rep"
|
||||
|
||||
static int efx_ef100_rep_init_struct(struct efx_nic *efx, struct efx_rep *efv)
|
||||
static int efx_ef100_rep_init_struct(struct efx_nic *efx, struct efx_rep *efv,
|
||||
unsigned int i)
|
||||
{
|
||||
efv->parent = efx;
|
||||
efv->idx = i;
|
||||
INIT_LIST_HEAD(&efv->list);
|
||||
efv->msg_enable = NETIF_MSG_DRV | NETIF_MSG_PROBE |
|
||||
NETIF_MSG_LINK | NETIF_MSG_IFDOWN |
|
||||
@ -25,7 +27,40 @@ static int efx_ef100_rep_init_struct(struct efx_nic *efx, struct efx_rep *efv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int efx_ef100_rep_get_port_parent_id(struct net_device *dev,
|
||||
struct netdev_phys_item_id *ppid)
|
||||
{
|
||||
struct efx_rep *efv = netdev_priv(dev);
|
||||
struct efx_nic *efx = efv->parent;
|
||||
struct ef100_nic_data *nic_data;
|
||||
|
||||
nic_data = efx->nic_data;
|
||||
/* nic_data->port_id is a u8[] */
|
||||
ppid->id_len = sizeof(nic_data->port_id);
|
||||
memcpy(ppid->id, nic_data->port_id, sizeof(nic_data->port_id));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int efx_ef100_rep_get_phys_port_name(struct net_device *dev,
|
||||
char *buf, size_t len)
|
||||
{
|
||||
struct efx_rep *efv = netdev_priv(dev);
|
||||
struct efx_nic *efx = efv->parent;
|
||||
struct ef100_nic_data *nic_data;
|
||||
int ret;
|
||||
|
||||
nic_data = efx->nic_data;
|
||||
ret = snprintf(buf, len, "p%upf%uvf%u", efx->port_num,
|
||||
nic_data->pf_index, efv->idx);
|
||||
if (ret >= len)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct net_device_ops efx_ef100_rep_netdev_ops = {
|
||||
.ndo_get_port_parent_id = efx_ef100_rep_get_port_parent_id,
|
||||
.ndo_get_phys_port_name = efx_ef100_rep_get_phys_port_name,
|
||||
};
|
||||
|
||||
static void efx_ef100_rep_get_drvinfo(struct net_device *dev,
|
||||
@ -67,7 +102,7 @@ static struct efx_rep *efx_ef100_rep_create_netdev(struct efx_nic *efx,
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
efv = netdev_priv(net_dev);
|
||||
rc = efx_ef100_rep_init_struct(efx, efv);
|
||||
rc = efx_ef100_rep_init_struct(efx, efv, i);
|
||||
if (rc)
|
||||
goto fail1;
|
||||
efv->net_dev = net_dev;
|
||||
|
@ -21,12 +21,14 @@
|
||||
* @parent: the efx PF which manages this representor
|
||||
* @net_dev: representor netdevice
|
||||
* @msg_enable: log message enable flags
|
||||
* @idx: VF index
|
||||
* @list: entry on efx->vf_reps
|
||||
*/
|
||||
struct efx_rep {
|
||||
struct efx_nic *parent;
|
||||
struct net_device *net_dev;
|
||||
u32 msg_enable;
|
||||
unsigned int idx;
|
||||
struct list_head list;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user