X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=examples%2Fethtool%2Flib%2Frte_ethtool.c;h=43cacc05795ab630f1d3a7e332fa8df608b3036c;hb=089e5ed727a15da2729cfee9b63533dd120bd04c;hp=7e4652063c888a486cff777ab20a40b6da1beb21;hpb=077d223e25c340a660fbf64d547cdeff6f3e7ef6;p=dpdk.git diff --git a/examples/ethtool/lib/rte_ethtool.c b/examples/ethtool/lib/rte_ethtool.c index 7e4652063c..43cacc0579 100644 --- a/examples/ethtool/lib/rte_ethtool.c +++ b/examples/ethtool/lib/rte_ethtool.c @@ -1,41 +1,14 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2016 Intel Corporation. All rights reserved. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2016 Intel Corporation */ #include #include #include +#include #include #include #include +#include #ifdef RTE_LIBRTE_IXGBE_PMD #include #endif @@ -46,10 +19,12 @@ int -rte_ethtool_get_drvinfo(uint8_t port_id, struct ethtool_drvinfo *drvinfo) +rte_ethtool_get_drvinfo(uint16_t port_id, struct ethtool_drvinfo *drvinfo) { struct rte_eth_dev_info dev_info; struct rte_dev_reg_info reg_info; + const struct rte_pci_device *pci_dev; + const struct rte_bus *bus = NULL; int n; int ret; @@ -64,24 +39,31 @@ rte_ethtool_get_drvinfo(uint8_t port_id, struct ethtool_drvinfo *drvinfo) printf("firmware version get error: (%s)\n", strerror(-ret)); else if (ret > 0) printf("Insufficient fw version buffer size, " - "the minimun size should be %d\n", ret); + "the minimum size should be %d\n", ret); - memset(&dev_info, 0, sizeof(dev_info)); - rte_eth_dev_info_get(port_id, &dev_info); + ret = rte_eth_dev_info_get(port_id, &dev_info); + if (ret != 0) { + printf("Error during getting device (port %u) info: %s\n", + port_id, strerror(-ret)); - snprintf(drvinfo->driver, sizeof(drvinfo->driver), "%s", - dev_info.driver_name); - snprintf(drvinfo->version, sizeof(drvinfo->version), "%s", - rte_version()); - if (dev_info.pci_dev) + return ret; + } + + strlcpy(drvinfo->driver, dev_info.driver_name, + sizeof(drvinfo->driver)); + strlcpy(drvinfo->version, rte_version(), sizeof(drvinfo->version)); + /* TODO: replace bus_info by rte_devargs.name */ + if (dev_info.device) + bus = rte_bus_find_by_device(dev_info.device); + if (bus && !strcmp(bus->name, "pci")) { + pci_dev = RTE_DEV_TO_PCI(dev_info.device); snprintf(drvinfo->bus_info, sizeof(drvinfo->bus_info), "%04x:%02x:%02x.%x", - dev_info.pci_dev->addr.domain, - dev_info.pci_dev->addr.bus, - dev_info.pci_dev->addr.devid, - dev_info.pci_dev->addr.function); - else + pci_dev->addr.domain, pci_dev->addr.bus, + pci_dev->addr.devid, pci_dev->addr.function); + } else { snprintf(drvinfo->bus_info, sizeof(drvinfo->bus_info), "N/A"); + } memset(®_info, 0, sizeof(reg_info)); rte_eth_dev_get_reg_info(port_id, ®_info); @@ -104,7 +86,7 @@ rte_ethtool_get_drvinfo(uint8_t port_id, struct ethtool_drvinfo *drvinfo) } int -rte_ethtool_get_regs_len(uint8_t port_id) +rte_ethtool_get_regs_len(uint16_t port_id) { struct rte_dev_reg_info reg_info; int ret; @@ -119,7 +101,7 @@ rte_ethtool_get_regs_len(uint8_t port_id) } int -rte_ethtool_get_regs(uint8_t port_id, struct ethtool_regs *regs, void *data) +rte_ethtool_get_regs(uint16_t port_id, struct ethtool_regs *regs, void *data) { struct rte_dev_reg_info reg_info; int status; @@ -139,7 +121,7 @@ rte_ethtool_get_regs(uint8_t port_id, struct ethtool_regs *regs, void *data) } int -rte_ethtool_get_link(uint8_t port_id) +rte_ethtool_get_link(uint16_t port_id) { struct rte_eth_link link; @@ -149,13 +131,13 @@ rte_ethtool_get_link(uint8_t port_id) } int -rte_ethtool_get_eeprom_len(uint8_t port_id) +rte_ethtool_get_eeprom_len(uint16_t port_id) { return rte_eth_dev_get_eeprom_length(port_id); } int -rte_ethtool_get_eeprom(uint8_t port_id, struct ethtool_eeprom *eeprom, +rte_ethtool_get_eeprom(uint16_t port_id, struct ethtool_eeprom *eeprom, void *words) { struct rte_dev_eeprom_info eeprom_info; @@ -178,7 +160,7 @@ rte_ethtool_get_eeprom(uint8_t port_id, struct ethtool_eeprom *eeprom, } int -rte_ethtool_set_eeprom(uint8_t port_id, struct ethtool_eeprom *eeprom, +rte_ethtool_set_eeprom(uint16_t port_id, struct ethtool_eeprom *eeprom, void *words) { struct rte_dev_eeprom_info eeprom_info; @@ -201,7 +183,37 @@ rte_ethtool_set_eeprom(uint8_t port_id, struct ethtool_eeprom *eeprom, } int -rte_ethtool_get_pauseparam(uint8_t port_id, +rte_ethtool_get_module_info(uint16_t port_id, uint32_t *modinfo) +{ + struct rte_eth_dev_module_info *info; + + info = (struct rte_eth_dev_module_info *)modinfo; + return rte_eth_dev_get_module_info(port_id, info); +} + +int +rte_ethtool_get_module_eeprom(uint16_t port_id, struct ethtool_eeprom *eeprom, + void *words) +{ + struct rte_dev_eeprom_info eeprom_info; + int status; + + if (eeprom == NULL || words == NULL) + return -EINVAL; + + eeprom_info.offset = eeprom->offset; + eeprom_info.length = eeprom->len; + eeprom_info.data = words; + + status = rte_eth_dev_get_module_eeprom(port_id, &eeprom_info); + if (status) + return status; + + return 0; +} + +int +rte_ethtool_get_pauseparam(uint16_t port_id, struct ethtool_pauseparam *pause_param) { struct rte_eth_fc_conf fc_conf; @@ -236,7 +248,7 @@ rte_ethtool_get_pauseparam(uint8_t port_id, } int -rte_ethtool_set_pauseparam(uint8_t port_id, +rte_ethtool_set_pauseparam(uint16_t port_id, struct ethtool_pauseparam *pause_param) { struct rte_eth_fc_conf fc_conf; @@ -279,7 +291,7 @@ rte_ethtool_set_pauseparam(uint8_t port_id, } int -rte_ethtool_net_open(uint8_t port_id) +rte_ethtool_net_open(uint16_t port_id) { rte_eth_dev_stop(port_id); @@ -287,7 +299,7 @@ rte_ethtool_net_open(uint8_t port_id) } int -rte_ethtool_net_stop(uint8_t port_id) +rte_ethtool_net_stop(uint16_t port_id) { RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); rte_eth_dev_stop(port_id); @@ -296,7 +308,7 @@ rte_ethtool_net_stop(uint8_t port_id) } int -rte_ethtool_net_get_mac_addr(uint8_t port_id, struct ether_addr *addr) +rte_ethtool_net_get_mac_addr(uint16_t port_id, struct rte_ether_addr *addr) { RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); if (addr == NULL) @@ -307,7 +319,7 @@ rte_ethtool_net_get_mac_addr(uint8_t port_id, struct ether_addr *addr) } int -rte_ethtool_net_set_mac_addr(uint8_t port_id, struct ether_addr *addr) +rte_ethtool_net_set_mac_addr(uint16_t port_id, struct rte_ether_addr *addr) { if (addr == NULL) return -EINVAL; @@ -315,16 +327,16 @@ rte_ethtool_net_set_mac_addr(uint8_t port_id, struct ether_addr *addr) } int -rte_ethtool_net_validate_addr(uint8_t port_id __rte_unused, - struct ether_addr *addr) +rte_ethtool_net_validate_addr(uint16_t port_id __rte_unused, + struct rte_ether_addr *addr) { if (addr == NULL) return -EINVAL; - return is_valid_assigned_ether_addr(addr); + return rte_is_valid_assigned_ether_addr(addr); } int -rte_ethtool_net_change_mtu(uint8_t port_id, int mtu) +rte_ethtool_net_change_mtu(uint16_t port_id, int mtu) { if (mtu < 0 || mtu > UINT16_MAX) return -EINVAL; @@ -332,7 +344,7 @@ rte_ethtool_net_change_mtu(uint8_t port_id, int mtu) } int -rte_ethtool_net_get_stats64(uint8_t port_id, struct rte_eth_stats *stats) +rte_ethtool_net_get_stats64(uint16_t port_id, struct rte_eth_stats *stats) { if (stats == NULL) return -EINVAL; @@ -340,13 +352,13 @@ rte_ethtool_net_get_stats64(uint8_t port_id, struct rte_eth_stats *stats) } int -rte_ethtool_net_vlan_rx_add_vid(uint8_t port_id, uint16_t vid) +rte_ethtool_net_vlan_rx_add_vid(uint16_t port_id, uint16_t vid) { return rte_eth_dev_vlan_filter(port_id, vid, 1); } int -rte_ethtool_net_vlan_rx_kill_vid(uint8_t port_id, uint16_t vid) +rte_ethtool_net_vlan_rx_kill_vid(uint16_t port_id, uint16_t vid) { return rte_eth_dev_vlan_filter(port_id, vid, 0); } @@ -359,14 +371,17 @@ rte_ethtool_net_vlan_rx_kill_vid(uint8_t port_id, uint16_t vid) * driver can register device-specific implementation */ int -rte_ethtool_net_set_rx_mode(uint8_t port_id) +rte_ethtool_net_set_rx_mode(uint16_t port_id) { uint16_t num_vfs; struct rte_eth_dev_info dev_info; uint16_t vf; + int ret; + + ret = rte_eth_dev_info_get(port_id, &dev_info); + if (ret != 0) + return ret; - memset(&dev_info, 0, sizeof(dev_info)); - rte_eth_dev_info_get(port_id, &dev_info); num_vfs = dev_info.max_vfs; /* Set VF vf_rx_mode, VF unsupport status is discard */ @@ -385,18 +400,21 @@ rte_ethtool_net_set_rx_mode(uint8_t port_id) int -rte_ethtool_get_ringparam(uint8_t port_id, +rte_ethtool_get_ringparam(uint16_t port_id, struct ethtool_ringparam *ring_param) { struct rte_eth_dev_info dev_info; struct rte_eth_rxq_info rx_qinfo; struct rte_eth_txq_info tx_qinfo; int stat; + int ret; if (ring_param == NULL) return -EINVAL; - rte_eth_dev_info_get(port_id, &dev_info); + ret = rte_eth_dev_info_get(port_id, &dev_info); + if (ret != 0) + return ret; stat = rte_eth_rx_queue_info_get(port_id, 0, &rx_qinfo); if (stat != 0) @@ -417,7 +435,7 @@ rte_ethtool_get_ringparam(uint8_t port_id, int -rte_ethtool_set_ringparam(uint8_t port_id, +rte_ethtool_set_ringparam(uint16_t port_id, struct ethtool_ringparam *ring_param) { struct rte_eth_rxq_info rx_qinfo;