net/bnxt: fix PCI write check
[dpdk.git] / drivers / net / bonding / rte_eth_bond_args.c
index 27d3101..8c5f90d 100644 (file)
@@ -7,11 +7,8 @@
 #include <rte_bus_pci.h>
 #include <rte_kvargs.h>
 
-#include <cmdline_parse.h>
-#include <cmdline_parse_etheraddr.h>
-
 #include "rte_eth_bond.h"
-#include "rte_eth_bond_private.h"
+#include "eth_bond_private.h"
 
 const char *pmd_bond_init_valid_arguments[] = {
        PMD_BOND_SLAVE_PORT_KVARG,
@@ -25,23 +22,37 @@ const char *pmd_bond_init_valid_arguments[] = {
        NULL
 };
 
+static inline int
+bond_pci_addr_cmp(const struct rte_device *dev, const void *_pci_addr)
+{
+       const struct rte_pci_device *pdev = RTE_DEV_TO_PCI_CONST(dev);
+       const struct rte_pci_addr *paddr = _pci_addr;
+
+       return rte_pci_addr_cmp(&pdev->addr, paddr);
+}
+
 static inline int
 find_port_id_by_pci_addr(const struct rte_pci_addr *pci_addr)
 {
-       struct rte_pci_device *pci_dev;
-       struct rte_pci_addr *eth_pci_addr;
+       struct rte_bus *pci_bus;
+       struct rte_device *dev;
        unsigned i;
 
-       for (i = 0; i < rte_eth_dev_count(); i++) {
-               pci_dev = RTE_ETH_DEV_TO_PCI(&rte_eth_devices[i]);
-               eth_pci_addr = &pci_dev->addr;
+       pci_bus = rte_bus_find_by_name("pci");
+       if (pci_bus == NULL) {
+               RTE_BOND_LOG(ERR, "No PCI bus found");
+               return -1;
+       }
 
-               if (pci_addr->bus == eth_pci_addr->bus &&
-                       pci_addr->devid == eth_pci_addr->devid &&
-                       pci_addr->domain == eth_pci_addr->domain &&
-                       pci_addr->function == eth_pci_addr->function)
-                       return i;
+       dev = pci_bus->find_device(NULL, bond_pci_addr_cmp, pci_addr);
+       if (dev == NULL) {
+               RTE_BOND_LOG(ERR, "unable to find PCI device");
+               return -1;
        }
+
+       RTE_ETH_FOREACH_DEV(i)
+               if (rte_eth_devices[i].device == dev)
+                       return i;
        return -1;
 }
 
@@ -50,7 +61,7 @@ find_port_id_by_dev_name(const char *name)
 {
        unsigned i;
 
-       for (i = 0; i < rte_eth_dev_count(); i++) {
+       RTE_ETH_FOREACH_DEV(i) {
                if (rte_eth_devices[i].data == NULL)
                        continue;
 
@@ -60,16 +71,6 @@ find_port_id_by_dev_name(const char *name)
        return -1;
 }
 
-static inline int
-bond_pci_addr_cmp(const struct rte_device *dev, const void *_pci_addr)
-{
-       struct rte_pci_device *pdev;
-       const struct rte_pci_addr *paddr = _pci_addr;
-
-       pdev = RTE_DEV_TO_PCI(*(struct rte_device **)(void *)&dev);
-       return rte_eal_compare_pci_addr(&pdev->addr, paddr);
-}
-
 /**
  * Parses a port identifier string to a port id by pci address, then by name,
  * and finally port id.
@@ -78,23 +79,10 @@ static inline int
 parse_port_id(const char *port_str)
 {
        struct rte_pci_addr dev_addr;
-       struct rte_bus *pci_bus;
-       struct rte_device *dev;
        int port_id;
 
-       pci_bus = rte_bus_find_by_name("pci");
-       if (pci_bus == NULL) {
-               RTE_LOG(ERR, PMD, "unable to find PCI bus\n");
-               return -1;
-       }
-
        /* try parsing as pci address, physical devices */
-       if (pci_bus->parse(port_str, &dev_addr) == 0) {
-               dev = pci_bus->find_device(NULL, bond_pci_addr_cmp, &dev_addr);
-               if (dev == NULL) {
-                       RTE_LOG(ERR, PMD, "unable to find PCI device\n");
-                       return -1;
-               }
+       if (rte_pci_addr_parse(port_str, &dev_addr) == 0) {
                port_id = find_port_id_by_pci_addr(&dev_addr);
                if (port_id < 0)
                        return -1;
@@ -112,9 +100,8 @@ parse_port_id(const char *port_str)
                }
        }
 
-       if (port_id < 0 || port_id > RTE_MAX_ETHPORTS) {
-               RTE_BOND_LOG(ERR, "Slave port specified (%s) outside expected range",
-                               port_str);
+       if (!rte_eth_dev_is_valid_port(port_id)) {
+               RTE_BOND_LOG(ERR, "Specified port (%s) is invalid", port_str);
                return -1;
        }
        return port_id;
@@ -134,7 +121,8 @@ bond_ethdev_parse_slave_port_kvarg(const char *key,
        if (strcmp(key, PMD_BOND_SLAVE_PORT_KVARG) == 0) {
                int port_id = parse_port_id(value);
                if (port_id < 0) {
-                       RTE_BOND_LOG(ERR, "Invalid slave port value (%s) specified", value);
+                       RTE_BOND_LOG(ERR, "Invalid slave port value (%s) specified",
+                                    value);
                        return -1;
                } else
                        slave_ports->slaves[slave_ports->slave_count++] =
@@ -244,7 +232,7 @@ bond_ethdev_parse_primary_slave_port_id_kvarg(const char *key __rte_unused,
        if (primary_slave_port_id < 0)
                return -1;
 
-       *(uint8_t *)extra_args = (uint8_t)primary_slave_port_id;
+       *(uint16_t *)extra_args = (uint16_t)primary_slave_port_id;
 
        return 0;
 }
@@ -280,8 +268,7 @@ bond_ethdev_parse_bond_mac_addr_kvarg(const char *key __rte_unused,
                return -1;
 
        /* Parse MAC */
-       return cmdline_parse_etheraddr(NULL, value, extra_args,
-               sizeof(struct ether_addr));
+       return rte_ether_unformat_addr(value, extra_args);
 }
 
 int