sfc_ef100: implement ndo_get_phys_port_{id,name}
authorEdward Cree <ecree@solarflare.com>
Mon, 27 Jul 2020 12:05:48 +0000 (13:05 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 27 Jul 2020 19:26:56 +0000 (12:26 -0700)
Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/ef100_netdev.c
drivers/net/ethernet/sfc/ef100_nic.c

index d1753ed..4c3caac 100644 (file)
@@ -208,6 +208,8 @@ static const struct net_device_ops ef100_netdev_ops = {
        .ndo_open               = ef100_net_open,
        .ndo_stop               = ef100_net_stop,
        .ndo_start_xmit         = ef100_hard_start_xmit,
+       .ndo_get_phys_port_id   = efx_get_phys_port_id,
+       .ndo_get_phys_port_name = efx_get_phys_port_name,
 };
 
 /*     Netdev registration
index 1161190..6a00f2a 100644 (file)
@@ -403,6 +403,20 @@ static int ef100_reset(struct efx_nic *efx, enum reset_type reset_type)
        return rc;
 }
 
+static int efx_ef100_get_phys_port_id(struct efx_nic *efx,
+                                     struct netdev_phys_item_id *ppid)
+{
+       struct ef100_nic_data *nic_data = efx->nic_data;
+
+       if (!is_valid_ether_addr(nic_data->port_id))
+               return -EOPNOTSUPP;
+
+       ppid->id_len = ETH_ALEN;
+       memcpy(ppid->id, nic_data->port_id, ppid->id_len);
+
+       return 0;
+}
+
 static unsigned int ef100_check_caps(const struct efx_nic *efx,
                                     u8 flag, u32 offset)
 {
@@ -459,6 +473,8 @@ const struct efx_nic_type ef100_pf_nic_type = {
        .rx_write = ef100_rx_write,
        .rx_packet = __ef100_rx_packet,
 
+       .get_phys_port_id = efx_ef100_get_phys_port_id,
+
        .reconfigure_mac = ef100_reconfigure_mac,
 
        /* Per-type bar/size configuration not used on ef100. Location of
@@ -541,6 +557,11 @@ static int ef100_probe_main(struct efx_nic *efx)
 
        efx->max_vis = EF100_MAX_VIS;
 
+       rc = efx_mcdi_port_get_number(efx);
+       if (rc < 0)
+               goto fail;
+       efx->port_num = rc;
+
        rc = ef100_phy_probe(efx);
        if (rc)
                goto fail;