Commit e1479556 authored by Edward Cree's avatar Edward Cree Committed by David S. Miller

sfc: phys port/switch identification for ef100 reps

Requires storing VF index in struct efx_rep.
Signed-off-by: default avatarEdward Cree <ecree.xilinx@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5687eb34
...@@ -14,9 +14,11 @@ ...@@ -14,9 +14,11 @@
#define EFX_EF100_REP_DRIVER "efx_ef100_rep" #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->parent = efx;
efv->idx = i;
INIT_LIST_HEAD(&efv->list); INIT_LIST_HEAD(&efv->list);
efv->msg_enable = NETIF_MSG_DRV | NETIF_MSG_PROBE | efv->msg_enable = NETIF_MSG_DRV | NETIF_MSG_PROBE |
NETIF_MSG_LINK | NETIF_MSG_IFDOWN | 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) ...@@ -25,7 +27,40 @@ static int efx_ef100_rep_init_struct(struct efx_nic *efx, struct efx_rep *efv)
return 0; 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 = { 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, 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, ...@@ -67,7 +102,7 @@ static struct efx_rep *efx_ef100_rep_create_netdev(struct efx_nic *efx,
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
efv = netdev_priv(net_dev); efv = netdev_priv(net_dev);
rc = efx_ef100_rep_init_struct(efx, efv); rc = efx_ef100_rep_init_struct(efx, efv, i);
if (rc) if (rc)
goto fail1; goto fail1;
efv->net_dev = net_dev; efv->net_dev = net_dev;
......
...@@ -21,12 +21,14 @@ ...@@ -21,12 +21,14 @@
* @parent: the efx PF which manages this representor * @parent: the efx PF which manages this representor
* @net_dev: representor netdevice * @net_dev: representor netdevice
* @msg_enable: log message enable flags * @msg_enable: log message enable flags
* @idx: VF index
* @list: entry on efx->vf_reps * @list: entry on efx->vf_reps
*/ */
struct efx_rep { struct efx_rep {
struct efx_nic *parent; struct efx_nic *parent;
struct net_device *net_dev; struct net_device *net_dev;
u32 msg_enable; u32 msg_enable;
unsigned int idx;
struct list_head list; struct list_head list;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment