]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/net/ethernet/netronome/nfp/nfpcore/nfp_nsp_eth.c
nfp: report port type in ethtool
[mirror_ubuntu-artful-kernel.git] / drivers / net / ethernet / netronome / nfp / nfpcore / nfp_nsp_eth.c
index dcb1bc81e5541e0a8f67f481894e1ce0a740dd68..07b4ded0151459541e113a3b48c2134d1bbbf26e 100644 (file)
@@ -62,6 +62,8 @@
 #define NSP_ETH_STATE_TX_ENABLED       BIT_ULL(2)
 #define NSP_ETH_STATE_RX_ENABLED       BIT_ULL(3)
 #define NSP_ETH_STATE_RATE             GENMASK_ULL(11, 8)
+#define NSP_ETH_STATE_INTERFACE                GENMASK_ULL(19, 12)
+#define NSP_ETH_STATE_MEDIA            GENMASK_ULL(21, 20)
 #define NSP_ETH_STATE_OVRD_CHNG                BIT_ULL(22)
 #define NSP_ETH_STATE_ANEG             GENMASK_ULL(25, 23)
 
@@ -134,6 +136,9 @@ nfp_eth_port_translate(struct nfp_nsp *nsp, const struct eth_table_entry *src,
        rate = nfp_eth_rate(FIELD_GET(NSP_ETH_STATE_RATE, state));
        dst->speed = dst->lanes * rate;
 
+       dst->interface = FIELD_GET(NSP_ETH_STATE_INTERFACE, state);
+       dst->media = FIELD_GET(NSP_ETH_STATE_MEDIA, state);
+
        nfp_eth_copy_mac_reverse(dst->mac_addr, src->mac_addr);
 
        dst->label_port = FIELD_GET(NSP_ETH_PORT_PHYLABEL, port);
@@ -170,6 +175,20 @@ nfp_eth_mark_split_ports(struct nfp_cpp *cpp, struct nfp_eth_table *table)
                }
 }
 
+static void
+nfp_eth_calc_port_type(struct nfp_cpp *cpp, struct nfp_eth_table_port *entry)
+{
+       if (entry->interface == NFP_INTERFACE_NONE) {
+               entry->port_type = PORT_NONE;
+               return;
+       }
+
+       if (entry->media == NFP_MEDIA_FIBRE)
+               entry->port_type = PORT_FIBRE;
+       else
+               entry->port_type = PORT_DA;
+}
+
 /**
  * nfp_eth_read_ports() - retrieve port information
  * @cpp:       NFP CPP handle
@@ -237,6 +256,8 @@ __nfp_eth_read_ports(struct nfp_cpp *cpp, struct nfp_nsp *nsp)
                                               &table->ports[j++]);
 
        nfp_eth_mark_split_ports(cpp, table);
+       for (i = 0; i < table->count; i++)
+               nfp_eth_calc_port_type(cpp, &table->ports[i]);
 
        kfree(entries);