nfp: move rtsym helpers to pf code
[sfrench/cifs-2.6.git] / drivers / net / ethernet / netronome / nfp / nfp_net_main.c
index 15fa47f622aa5e160027c7f188c6641ecbead4d9..f8abb4cd9cef35574da5c8e88663684437ae4dd6 100644 (file)
 /**
  * nfp_net_get_mac_addr() - Get the MAC address.
  * @pf:       NFP PF handle
+ * @netdev:   net_device to set MAC address on
  * @port:     NFP port structure
  *
  * First try to get the MAC address from NSP ETH table. If that
  * fails generate a random address.
  */
-void nfp_net_get_mac_addr(struct nfp_pf *pf, struct nfp_port *port)
+void
+nfp_net_get_mac_addr(struct nfp_pf *pf, struct net_device *netdev,
+                    struct nfp_port *port)
 {
        struct nfp_eth_table_port *eth_port;
 
        eth_port = __nfp_port_get_eth_port(port);
        if (!eth_port) {
-               eth_hw_addr_random(port->netdev);
+               eth_hw_addr_random(netdev);
                return;
        }
 
-       ether_addr_copy(port->netdev->dev_addr, eth_port->mac_addr);
-       ether_addr_copy(port->netdev->perm_addr, eth_port->mac_addr);
+       ether_addr_copy(netdev->dev_addr, eth_port->mac_addr);
+       ether_addr_copy(netdev->perm_addr, eth_port->mac_addr);
 }
 
 static struct nfp_eth_table_port *
@@ -98,48 +101,15 @@ nfp_net_find_port(struct nfp_eth_table *eth_tbl, unsigned int index)
        return NULL;
 }
 
-static int
-nfp_net_pf_rtsym_read_optional(struct nfp_pf *pf, const char *format,
-                              unsigned int default_val)
-{
-       char name[256];
-       int err = 0;
-       u64 val;
-
-       snprintf(name, sizeof(name), format, nfp_cppcore_pcie_unit(pf->cpp));
-
-       val = nfp_rtsym_read_le(pf->rtbl, name, &err);
-       if (err) {
-               if (err == -ENOENT)
-                       return default_val;
-               nfp_err(pf->cpp, "Unable to read symbol %s\n", name);
-               return err;
-       }
-
-       return val;
-}
-
 static int nfp_net_pf_get_num_ports(struct nfp_pf *pf)
 {
-       return nfp_net_pf_rtsym_read_optional(pf, "nfd_cfg_pf%u_num_ports", 1);
+       return nfp_pf_rtsym_read_optional(pf, "nfd_cfg_pf%u_num_ports", 1);
 }
 
 static int nfp_net_pf_get_app_id(struct nfp_pf *pf)
 {
-       return nfp_net_pf_rtsym_read_optional(pf, "_pf%u_net_app_id",
-                                             NFP_APP_CORE_NIC);
-}
-
-static u8 __iomem *
-nfp_net_pf_map_rtsym(struct nfp_pf *pf, const char *name, const char *sym_fmt,
-                    unsigned int min_size, struct nfp_cpp_area **area)
-{
-       char pf_symbol[256];
-
-       snprintf(pf_symbol, sizeof(pf_symbol), sym_fmt,
-                nfp_cppcore_pcie_unit(pf->cpp));
-
-       return nfp_rtsym_map(pf->rtbl, pf_symbol, name, min_size, area);
+       return nfp_pf_rtsym_read_optional(pf, "_pf%u_net_app_id",
+                                         NFP_APP_CORE_NIC);
 }
 
 static void nfp_net_pf_free_vnic(struct nfp_pf *pf, struct nfp_net *nn)
@@ -376,9 +346,8 @@ nfp_net_pf_app_init(struct nfp_pf *pf, u8 __iomem *qc_bar, unsigned int stride)
        if (!nfp_app_needs_ctrl_vnic(pf->app))
                return 0;
 
-       ctrl_bar = nfp_net_pf_map_rtsym(pf, "net.ctrl", "_pf%u_net_ctrl_bar",
-                                       NFP_PF_CSR_SLICE_SIZE,
-                                       &pf->ctrl_vnic_bar);
+       ctrl_bar = nfp_pf_map_rtsym(pf, "net.ctrl", "_pf%u_net_ctrl_bar",
+                                   NFP_PF_CSR_SLICE_SIZE, &pf->ctrl_vnic_bar);
        if (IS_ERR(ctrl_bar)) {
                nfp_err(pf->cpp, "Failed to find ctrl vNIC memory symbol\n");
                err = PTR_ERR(ctrl_bar);
@@ -504,29 +473,30 @@ static int nfp_net_pci_map_mem(struct nfp_pf *pf)
        int err;
 
        min_size = pf->max_data_vnics * NFP_PF_CSR_SLICE_SIZE;
-       mem = nfp_net_pf_map_rtsym(pf, "net.bar0", "_pf%d_net_bar0",
-                                  min_size, &pf->data_vnic_bar);
+       mem = nfp_pf_map_rtsym(pf, "net.bar0", "_pf%d_net_bar0",
+                              min_size, &pf->data_vnic_bar);
        if (IS_ERR(mem)) {
                nfp_err(pf->cpp, "Failed to find data vNIC memory symbol\n");
                return PTR_ERR(mem);
        }
 
-       min_size =  NFP_MAC_STATS_SIZE * (pf->eth_tbl->max_index + 1);
-       pf->mac_stats_mem = nfp_rtsym_map(pf->rtbl, "_mac_stats",
-                                         "net.macstats", min_size,
-                                         &pf->mac_stats_bar);
-       if (IS_ERR(pf->mac_stats_mem)) {
-               if (PTR_ERR(pf->mac_stats_mem) != -ENOENT) {
-                       err = PTR_ERR(pf->mac_stats_mem);
-                       goto err_unmap_ctrl;
+       if (pf->eth_tbl) {
+               min_size =  NFP_MAC_STATS_SIZE * (pf->eth_tbl->max_index + 1);
+               pf->mac_stats_mem = nfp_rtsym_map(pf->rtbl, "_mac_stats",
+                                                 "net.macstats", min_size,
+                                                 &pf->mac_stats_bar);
+               if (IS_ERR(pf->mac_stats_mem)) {
+                       if (PTR_ERR(pf->mac_stats_mem) != -ENOENT) {
+                               err = PTR_ERR(pf->mac_stats_mem);
+                               goto err_unmap_ctrl;
+                       }
+                       pf->mac_stats_mem = NULL;
                }
-               pf->mac_stats_mem = NULL;
        }
 
-       pf->vf_cfg_mem = nfp_net_pf_map_rtsym(pf, "net.vfcfg",
-                                             "_pf%d_net_vf_bar",
-                                             NFP_NET_CFG_BAR_SZ *
-                                             pf->limit_vfs, &pf->vf_cfg_bar);
+       pf->vf_cfg_mem = nfp_pf_map_rtsym(pf, "net.vfcfg", "_pf%d_net_vf_bar",
+                                         NFP_NET_CFG_BAR_SZ * pf->limit_vfs,
+                                         &pf->vf_cfg_bar);
        if (IS_ERR(pf->vf_cfg_mem)) {
                if (PTR_ERR(pf->vf_cfg_mem) != -ENOENT) {
                        err = PTR_ERR(pf->vf_cfg_mem);
@@ -536,9 +506,9 @@ static int nfp_net_pci_map_mem(struct nfp_pf *pf)
        }
 
        min_size = NFP_NET_VF_CFG_SZ * pf->limit_vfs + NFP_NET_VF_CFG_MB_SZ;
-       pf->vfcfg_tbl2 = nfp_net_pf_map_rtsym(pf, "net.vfcfg_tbl2",
-                                             "_pf%d_net_vf_cfg2",
-                                             min_size, &pf->vfcfg_tbl2_area);
+       pf->vfcfg_tbl2 = nfp_pf_map_rtsym(pf, "net.vfcfg_tbl2",
+                                         "_pf%d_net_vf_cfg2",
+                                         min_size, &pf->vfcfg_tbl2_area);
        if (IS_ERR(pf->vfcfg_tbl2)) {
                if (PTR_ERR(pf->vfcfg_tbl2) != -ENOENT) {
                        err = PTR_ERR(pf->vfcfg_tbl2);