git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net/txgbe: support VF promiscuous and allmulticast
[dpdk.git]
/
drivers
/
net
/
hinic
/
hinic_pmd_ethdev.c
diff --git
a/drivers/net/hinic/hinic_pmd_ethdev.c
b/drivers/net/hinic/hinic_pmd_ethdev.c
index
7e0e6d8
..
1d6b710
100644
(file)
--- a/
drivers/net/hinic/hinic_pmd_ethdev.c
+++ b/
drivers/net/hinic/hinic_pmd_ethdev.c
@@
-4,7
+4,7
@@
#include <rte_pci.h>
#include <rte_bus_pci.h>
#include <rte_pci.h>
#include <rte_bus_pci.h>
-#include <
rte_
ethdev_pci.h>
+#include <ethdev_pci.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
#include <rte_memcpy.h>
#include <rte_mbuf.h>
#include <rte_malloc.h>
#include <rte_memcpy.h>
@@
-75,6
+75,9
@@
#define HINIC_PKTLEN_TO_MTU(pktlen) \
((pktlen) - (ETH_HLEN + ETH_CRC_LEN))
#define HINIC_PKTLEN_TO_MTU(pktlen) \
((pktlen) - (ETH_HLEN + ETH_CRC_LEN))
+/* The max frame size with default MTU */
+#define HINIC_ETH_MAX_LEN (RTE_ETHER_MTU + ETH_HLEN + ETH_CRC_LEN)
+
/* lro numer limit for one packet */
#define HINIC_LRO_WQE_NUM_DEFAULT 8
/* lro numer limit for one packet */
#define HINIC_LRO_WQE_NUM_DEFAULT 8
@@
-939,13
+942,6
@@
static int hinic_dev_set_link_up(struct rte_eth_dev *dev)
struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
int ret;
struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
int ret;
- ret = hinic_set_xsfp_tx_status(nic_dev->hwdev, true);
- if (ret) {
- PMD_DRV_LOG(ERR, "Enable port tx xsfp failed, dev_name: %s, port_id: %d",
- nic_dev->proc_dev_name, dev->data->port_id);
- return ret;
- }
-
/* link status follow phy port status, up will open pma */
ret = hinic_set_port_enable(nic_dev->hwdev, true);
if (ret)
/* link status follow phy port status, up will open pma */
ret = hinic_set_port_enable(nic_dev->hwdev, true);
if (ret)
@@
-969,13
+965,6
@@
static int hinic_dev_set_link_down(struct rte_eth_dev *dev)
struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
int ret;
struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
int ret;
- ret = hinic_set_xsfp_tx_status(nic_dev->hwdev, false);
- if (ret) {
- PMD_DRV_LOG(ERR, "Disable port tx xsfp failed, dev_name: %s, port_id: %d",
- nic_dev->proc_dev_name, dev->data->port_id);
- return ret;
- }
-
/* link status follow phy port status, up will close pma */
ret = hinic_set_port_enable(nic_dev->hwdev, false);
if (ret)
/* link status follow phy port status, up will close pma */
ret = hinic_set_port_enable(nic_dev->hwdev, false);
if (ret)
@@
-1177,7
+1166,7
@@
static void hinic_free_all_sq(struct hinic_nic_dev *nic_dev)
* @param dev
* Pointer to Ethernet device structure.
*/
* @param dev
* Pointer to Ethernet device structure.
*/
-static
void
hinic_dev_stop(struct rte_eth_dev *dev)
+static
int
hinic_dev_stop(struct rte_eth_dev *dev)
{
int rc;
char *name;
{
int rc;
char *name;
@@
-1189,10
+1178,12
@@
static void hinic_dev_stop(struct rte_eth_dev *dev)
name = dev->data->name;
port_id = dev->data->port_id;
name = dev->data->name;
port_id = dev->data->port_id;
+ dev->data->dev_started = 0;
+
if (!rte_bit_relaxed_test_and_clear32(HINIC_DEV_START,
&nic_dev->dev_status)) {
PMD_DRV_LOG(INFO, "Device %s already stopped", name);
if (!rte_bit_relaxed_test_and_clear32(HINIC_DEV_START,
&nic_dev->dev_status)) {
PMD_DRV_LOG(INFO, "Device %s already stopped", name);
- return;
+ return
0
;
}
/* just stop phy port and vport */
}
/* just stop phy port and vport */
@@
-1227,6
+1218,8
@@
static void hinic_dev_stop(struct rte_eth_dev *dev)
/* free mbuf */
hinic_free_all_rx_mbuf(dev);
hinic_free_all_tx_mbuf(dev);
/* free mbuf */
hinic_free_all_rx_mbuf(dev);
hinic_free_all_tx_mbuf(dev);
+
+ return 0;
}
static void hinic_disable_interrupt(struct rte_eth_dev *dev)
}
static void hinic_disable_interrupt(struct rte_eth_dev *dev)
@@
-1264,6
+1257,8
@@
static void hinic_disable_interrupt(struct rte_eth_dev *dev)
if (retries == HINIC_INTR_CB_UNREG_MAX_RETRIES)
PMD_DRV_LOG(ERR, "Unregister intr callback failed after %d retries",
retries);
if (retries == HINIC_INTR_CB_UNREG_MAX_RETRIES)
PMD_DRV_LOG(ERR, "Unregister intr callback failed after %d retries",
retries);
+
+ rte_bit_relaxed_clear32(HINIC_DEV_INIT, &nic_dev->dev_status);
}
static int hinic_set_dev_promiscuous(struct hinic_nic_dev *nic_dev, bool enable)
}
static int hinic_set_dev_promiscuous(struct hinic_nic_dev *nic_dev, bool enable)
@@
-1536,6
+1531,9
@@
static void hinic_deinit_mac_addr(struct rte_eth_dev *eth_dev)
/* delete multicast mac addrs */
hinic_delete_mc_addr_list(nic_dev);
/* delete multicast mac addrs */
hinic_delete_mc_addr_list(nic_dev);
+
+ rte_free(nic_dev->mc_list);
+
}
static int hinic_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
}
static int hinic_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
@@
-1561,7
+1559,7
@@
static int hinic_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
/* update max frame size */
frame_size = HINIC_MTU_TO_PKTLEN(mtu);
/* update max frame size */
frame_size = HINIC_MTU_TO_PKTLEN(mtu);
- if (frame_size >
RTE_ETHER
_MAX_LEN)
+ if (frame_size >
HINIC_ETH
_MAX_LEN)
dev->data->dev_conf.rxmode.offloads |=
DEV_RX_OFFLOAD_JUMBO_FRAME;
else
dev->data->dev_conf.rxmode.offloads |=
DEV_RX_OFFLOAD_JUMBO_FRAME;
else
@@
-2968,6
+2966,10
@@
static void hinic_nic_dev_destroy(struct rte_eth_dev *eth_dev)
static int hinic_dev_close(struct rte_eth_dev *dev)
{
struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
static int hinic_dev_close(struct rte_eth_dev *dev)
{
struct hinic_nic_dev *nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
+ int ret;
+
+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+ return 0;
if (rte_bit_relaxed_test_and_set32(HINIC_DEV_CLOSE,
&nic_dev->dev_status)) {
if (rte_bit_relaxed_test_and_set32(HINIC_DEV_CLOSE,
&nic_dev->dev_status)) {
@@
-2977,7
+2979,7
@@
static int hinic_dev_close(struct rte_eth_dev *dev)
}
/* stop device first */
}
/* stop device first */
- hinic_dev_stop(dev);
+
ret =
hinic_dev_stop(dev);
/* rx_cqe, rx_info */
hinic_free_all_rx_resources(dev);
/* rx_cqe, rx_info */
hinic_free_all_rx_resources(dev);
@@
-2998,10
+3000,13
@@
static int hinic_dev_close(struct rte_eth_dev *dev)
/* disable hardware and uio interrupt */
hinic_disable_interrupt(dev);
/* disable hardware and uio interrupt */
hinic_disable_interrupt(dev);
+ /* destroy rx mode mutex */
+ hinic_mutex_destroy(&nic_dev->rx_mode_mutex);
+
/* deinit nic hardware device */
hinic_nic_dev_destroy(dev);
/* deinit nic hardware device */
hinic_nic_dev_destroy(dev);
- return
0
;
+ return
ret
;
}
static const struct eth_dev_ops hinic_pmd_ops = {
}
static const struct eth_dev_ops hinic_pmd_ops = {
@@
-3100,6
+3105,8
@@
static int hinic_func_init(struct rte_eth_dev *eth_dev)
return 0;
}
return 0;
}
+ eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
+
nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
memset(nic_dev, 0, sizeof(*nic_dev));
nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(eth_dev);
memset(nic_dev, 0, sizeof(*nic_dev));
@@
-3236,27
+3243,11
@@
static int hinic_dev_init(struct rte_eth_dev *eth_dev)
static int hinic_dev_uninit(struct rte_eth_dev *dev)
{
static int hinic_dev_uninit(struct rte_eth_dev *dev)
{
- struct hinic_nic_dev *nic_dev;
-
- nic_dev = HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev);
- rte_bit_relaxed_clear32(HINIC_DEV_INIT, &nic_dev->dev_status);
-
if (rte_eal_process_type() != RTE_PROC_PRIMARY)
return 0;
if (rte_eal_process_type() != RTE_PROC_PRIMARY)
return 0;
- hinic_mutex_destroy(&nic_dev->rx_mode_mutex);
-
hinic_dev_close(dev);
hinic_dev_close(dev);
- dev->dev_ops = NULL;
- dev->rx_pkt_burst = NULL;
- dev->tx_pkt_burst = NULL;
-
- rte_free(nic_dev->mc_list);
-
- rte_free(dev->data->mac_addrs);
- dev->data->mac_addrs = NULL;
-
return HINIC_OK;
}
return HINIC_OK;
}