X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fatlantic%2Fatl_ethdev.c;h=3a028f4290027024867e4fea8ec1906f76880fdc;hb=85fc592a35d69bf6743158f6bef38b7fa40a5bc0;hp=540b106045ecfb1b5c511961b2fb8c3271b49d09;hpb=cbfc6111b55787356e06fb227959672bf93a16d9;p=dpdk.git diff --git a/drivers/net/atlantic/atl_ethdev.c b/drivers/net/atlantic/atl_ethdev.c index 540b106045..3a028f4290 100644 --- a/drivers/net/atlantic/atl_ethdev.c +++ b/drivers/net/atlantic/atl_ethdev.c @@ -3,7 +3,7 @@ */ #include -#include +#include #include #include "atl_ethdev.h" @@ -15,14 +15,12 @@ #include "hw_atl/hw_atl_b0_internal.h" static int eth_atl_dev_init(struct rte_eth_dev *eth_dev); -static int eth_atl_dev_uninit(struct rte_eth_dev *eth_dev); - static int atl_dev_configure(struct rte_eth_dev *dev); static int atl_dev_start(struct rte_eth_dev *dev); -static void atl_dev_stop(struct rte_eth_dev *dev); +static int atl_dev_stop(struct rte_eth_dev *dev); static int atl_dev_set_link_up(struct rte_eth_dev *dev); static int atl_dev_set_link_down(struct rte_eth_dev *dev); -static void atl_dev_close(struct rte_eth_dev *dev); +static int atl_dev_close(struct rte_eth_dev *dev); static int atl_dev_reset(struct rte_eth_dev *dev); static int atl_dev_promiscuous_enable(struct rte_eth_dev *dev); static int atl_dev_promiscuous_disable(struct rte_eth_dev *dev); @@ -156,21 +154,20 @@ static struct rte_pci_driver rte_atl_pmd = { .remove = eth_atl_pci_remove, }; -#define ATL_RX_OFFLOADS (DEV_RX_OFFLOAD_VLAN_STRIP \ - | DEV_RX_OFFLOAD_IPV4_CKSUM \ - | DEV_RX_OFFLOAD_UDP_CKSUM \ - | DEV_RX_OFFLOAD_TCP_CKSUM \ - | DEV_RX_OFFLOAD_JUMBO_FRAME \ - | DEV_RX_OFFLOAD_MACSEC_STRIP \ - | DEV_RX_OFFLOAD_VLAN_FILTER) - -#define ATL_TX_OFFLOADS (DEV_TX_OFFLOAD_VLAN_INSERT \ - | DEV_TX_OFFLOAD_IPV4_CKSUM \ - | DEV_TX_OFFLOAD_UDP_CKSUM \ - | DEV_TX_OFFLOAD_TCP_CKSUM \ - | DEV_TX_OFFLOAD_TCP_TSO \ - | DEV_TX_OFFLOAD_MACSEC_INSERT \ - | DEV_TX_OFFLOAD_MULTI_SEGS) +#define ATL_RX_OFFLOADS (RTE_ETH_RX_OFFLOAD_VLAN_STRIP \ + | RTE_ETH_RX_OFFLOAD_IPV4_CKSUM \ + | RTE_ETH_RX_OFFLOAD_UDP_CKSUM \ + | RTE_ETH_RX_OFFLOAD_TCP_CKSUM \ + | RTE_ETH_RX_OFFLOAD_MACSEC_STRIP \ + | RTE_ETH_RX_OFFLOAD_VLAN_FILTER) + +#define ATL_TX_OFFLOADS (RTE_ETH_TX_OFFLOAD_VLAN_INSERT \ + | RTE_ETH_TX_OFFLOAD_IPV4_CKSUM \ + | RTE_ETH_TX_OFFLOAD_UDP_CKSUM \ + | RTE_ETH_TX_OFFLOAD_TCP_CKSUM \ + | RTE_ETH_TX_OFFLOAD_TCP_TSO \ + | RTE_ETH_TX_OFFLOAD_MACSEC_INSERT \ + | RTE_ETH_TX_OFFLOAD_MULTI_SEGS) #define SFP_EEPROM_SIZE 0x100 @@ -362,7 +359,7 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev) { struct atl_adapter *adapter = eth_dev->data->dev_private; struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); - struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; + struct rte_intr_handle *intr_handle = pci_dev->intr_handle; struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); int err = 0; @@ -382,6 +379,8 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; + eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS; + /* Vendor and Device ID need to be set before init of shared code */ hw->device_id = pci_dev->id.device_id; hw->vendor_id = pci_dev->id.vendor_id; @@ -442,40 +441,6 @@ eth_atl_dev_init(struct rte_eth_dev *eth_dev) return err; } -static int -eth_atl_dev_uninit(struct rte_eth_dev *eth_dev) -{ - struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); - struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; - struct aq_hw_s *hw; - - PMD_INIT_FUNC_TRACE(); - - if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return -EPERM; - - hw = ATL_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); - - if (hw->adapter_stopped == 0) - atl_dev_close(eth_dev); - - eth_dev->dev_ops = NULL; - eth_dev->rx_pkt_burst = NULL; - eth_dev->tx_pkt_burst = NULL; - - /* disable uio intr before callback unregister */ - rte_intr_disable(intr_handle); - rte_intr_callback_unregister(intr_handle, - atl_dev_interrupt_handler, eth_dev); - - rte_free(eth_dev->data->mac_addrs); - eth_dev->data->mac_addrs = NULL; - - pthread_mutex_destroy(&hw->mbox_mutex); - - return 0; -} - static int eth_atl_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, struct rte_pci_device *pci_dev) @@ -487,7 +452,7 @@ eth_atl_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, static int eth_atl_pci_remove(struct rte_pci_device *pci_dev) { - return rte_eth_dev_pci_generic_remove(pci_dev, eth_atl_dev_uninit); + return rte_eth_dev_pci_generic_remove(pci_dev, atl_dev_close); } static int @@ -513,7 +478,7 @@ atl_dev_start(struct rte_eth_dev *dev) { struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); - struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; + struct rte_intr_handle *intr_handle = pci_dev->intr_handle; uint32_t intr_vector = 0; int status; int err; @@ -523,7 +488,7 @@ atl_dev_start(struct rte_eth_dev *dev) /* set adapter started */ hw->adapter_stopped = 0; - if (dev->data->dev_conf.link_speeds & ETH_LINK_SPEED_FIXED) { + if (dev->data->dev_conf.link_speeds & RTE_ETH_LINK_SPEED_FIXED) { PMD_INIT_LOG(ERR, "Invalid link_speeds for port %u, fix speed not supported", dev->data->port_id); @@ -559,10 +524,9 @@ atl_dev_start(struct rte_eth_dev *dev) } } - if (rte_intr_dp_is_en(intr_handle) && !intr_handle->intr_vec) { - intr_handle->intr_vec = rte_zmalloc("intr_vec", - dev->data->nb_rx_queues * sizeof(int), 0); - if (intr_handle->intr_vec == NULL) { + if (rte_intr_dp_is_en(intr_handle)) { + if (rte_intr_vec_list_alloc(intr_handle, "intr_vec", + dev->data->nb_rx_queues)) { PMD_INIT_LOG(ERR, "Failed to allocate %d rx_queues" " intr_vec", dev->data->nb_rx_queues); return -ENOMEM; @@ -635,16 +599,17 @@ error: /* * Stop device: disable rx and tx functions to allow for reconfiguring. */ -static void +static int atl_dev_stop(struct rte_eth_dev *dev) { struct rte_eth_link link; struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); - struct rte_intr_handle *intr_handle = &pci_dev->intr_handle; + struct rte_intr_handle *intr_handle = pci_dev->intr_handle; PMD_INIT_FUNC_TRACE(); + dev->data->dev_started = 0; /* disable interrupts */ atl_disable_intr(hw); @@ -671,10 +636,9 @@ atl_dev_stop(struct rte_eth_dev *dev) /* Clean datapath event and queue/vec mapping */ rte_intr_efd_disable(intr_handle); - if (intr_handle->intr_vec != NULL) { - rte_free(intr_handle->intr_vec); - intr_handle->intr_vec = NULL; - } + rte_intr_vec_list_free(intr_handle); + + return 0; } /* @@ -687,18 +651,18 @@ atl_dev_set_link_up(struct rte_eth_dev *dev) uint32_t link_speeds = dev->data->dev_conf.link_speeds; uint32_t speed_mask = 0; - if (link_speeds == ETH_LINK_SPEED_AUTONEG) { + if (link_speeds == RTE_ETH_LINK_SPEED_AUTONEG) { speed_mask = hw->aq_nic_cfg->link_speed_msk; } else { - if (link_speeds & ETH_LINK_SPEED_10G) + if (link_speeds & RTE_ETH_LINK_SPEED_10G) speed_mask |= AQ_NIC_RATE_10G; - if (link_speeds & ETH_LINK_SPEED_5G) + if (link_speeds & RTE_ETH_LINK_SPEED_5G) speed_mask |= AQ_NIC_RATE_5G; - if (link_speeds & ETH_LINK_SPEED_1G) + if (link_speeds & RTE_ETH_LINK_SPEED_1G) speed_mask |= AQ_NIC_RATE_1G; - if (link_speeds & ETH_LINK_SPEED_2_5G) + if (link_speeds & RTE_ETH_LINK_SPEED_2_5G) speed_mask |= AQ_NIC_RATE_2G5; - if (link_speeds & ETH_LINK_SPEED_100M) + if (link_speeds & RTE_ETH_LINK_SPEED_100M) speed_mask |= AQ_NIC_RATE_100M; } @@ -719,14 +683,33 @@ atl_dev_set_link_down(struct rte_eth_dev *dev) /* * Reset and stop device. */ -static void +static int atl_dev_close(struct rte_eth_dev *dev) { + struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev); + struct rte_intr_handle *intr_handle = pci_dev->intr_handle; + struct aq_hw_s *hw; + int ret; + PMD_INIT_FUNC_TRACE(); - atl_dev_stop(dev); + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); + + ret = atl_dev_stop(dev); atl_free_queues(dev); + + /* disable uio intr before callback unregister */ + rte_intr_disable(intr_handle); + rte_intr_callback_unregister(intr_handle, + atl_dev_interrupt_handler, dev); + + pthread_mutex_destroy(&hw->mbox_mutex); + + return ret; } static int @@ -734,7 +717,7 @@ atl_dev_reset(struct rte_eth_dev *dev) { int ret; - ret = eth_atl_dev_uninit(dev); + ret = atl_dev_close(dev); if (ret) return ret; @@ -1085,7 +1068,7 @@ atl_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size) { struct aq_hw_s *hw = ATL_DEV_PRIVATE_TO_HW(dev->data->dev_private); uint32_t fw_ver = 0; - unsigned int ret = 0; + int ret = 0; ret = hw_atl_utils_get_fw_version(hw, &fw_ver); if (ret) @@ -1093,10 +1076,11 @@ atl_fw_version_get(struct rte_eth_dev *dev, char *fw_version, size_t fw_size) ret = snprintf(fw_version, fw_size, "%u.%u.%u", fw_ver >> 24, (fw_ver >> 16) & 0xFFU, fw_ver & 0xFFFFU); + if (ret < 0) + return -EINVAL; ret += 1; /* add string null-terminator */ - - if (fw_size < ret) + if (fw_size < (size_t)ret) return ret; return 0; @@ -1139,10 +1123,10 @@ atl_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->reta_size = HW_ATL_B0_RSS_REDIRECTION_MAX; dev_info->flow_type_rss_offloads = ATL_RSS_OFFLOAD_ALL; - dev_info->speed_capa = ETH_LINK_SPEED_1G | ETH_LINK_SPEED_10G; - dev_info->speed_capa |= ETH_LINK_SPEED_100M; - dev_info->speed_capa |= ETH_LINK_SPEED_2_5G; - dev_info->speed_capa |= ETH_LINK_SPEED_5G; + dev_info->speed_capa = RTE_ETH_LINK_SPEED_1G | RTE_ETH_LINK_SPEED_10G; + dev_info->speed_capa |= RTE_ETH_LINK_SPEED_100M; + dev_info->speed_capa |= RTE_ETH_LINK_SPEED_2_5G; + dev_info->speed_capa |= RTE_ETH_LINK_SPEED_5G; return 0; } @@ -1187,10 +1171,10 @@ atl_dev_link_update(struct rte_eth_dev *dev, int wait __rte_unused) u32 fc = AQ_NIC_FC_OFF; int err = 0; - link.link_status = ETH_LINK_DOWN; + link.link_status = RTE_ETH_LINK_DOWN; link.link_speed = 0; - link.link_duplex = ETH_LINK_FULL_DUPLEX; - link.link_autoneg = hw->is_autoneg ? ETH_LINK_AUTONEG : ETH_LINK_FIXED; + link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX; + link.link_autoneg = hw->is_autoneg ? RTE_ETH_LINK_AUTONEG : RTE_ETH_LINK_FIXED; memset(&old, 0, sizeof(old)); /* load old link status */ @@ -1210,8 +1194,8 @@ atl_dev_link_update(struct rte_eth_dev *dev, int wait __rte_unused) return 0; } - link.link_status = ETH_LINK_UP; - link.link_duplex = ETH_LINK_FULL_DUPLEX; + link.link_status = RTE_ETH_LINK_UP; + link.link_duplex = RTE_ETH_LINK_FULL_DUPLEX; link.link_speed = hw->aq_link_status.mbps; rte_eth_linkstatus_set(dev, &link); @@ -1345,7 +1329,7 @@ atl_dev_link_status_print(struct rte_eth_dev *dev) PMD_DRV_LOG(INFO, "Port %d: Link Up - speed %u Mbps - %s", (int)(dev->data->port_id), (unsigned int)link.link_speed, - link.link_duplex == ETH_LINK_FULL_DUPLEX ? + link.link_duplex == RTE_ETH_LINK_FULL_DUPLEX ? "full-duplex" : "half-duplex"); } else { PMD_DRV_LOG(INFO, " Port %d: Link Down", @@ -1395,8 +1379,7 @@ atl_dev_interrupt_action(struct rte_eth_dev *dev, /* Notify userapp if link status changed */ if (!atl_dev_link_update(dev, 0)) { atl_dev_link_status_print(dev); - _rte_eth_dev_callback_process(dev, - RTE_ETH_EVENT_INTR_LSC, NULL); + rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_INTR_LSC, NULL); } else { if (hw->aq_fw_ops->send_macsec_req == NULL) goto done; @@ -1422,7 +1405,7 @@ atl_dev_interrupt_action(struct rte_eth_dev *dev, resp.stats.egress_expired || resp.stats.ingress_expired) { PMD_DRV_LOG(INFO, "RTE_ETH_EVENT_MACSEC"); - _rte_eth_dev_callback_process(dev, + rte_eth_dev_callback_process(dev, RTE_ETH_EVENT_MACSEC, NULL); } } @@ -1440,7 +1423,7 @@ done: * @param handle * Pointer to interrupt handle. * @param param - * The address of parameter (struct rte_eth_dev *) regsitered before. + * The address of parameter (struct rte_eth_dev *) registered before. * * @return * void @@ -1545,13 +1528,13 @@ atl_flow_ctrl_get(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) hw->aq_fw_ops->get_flow_control(hw, &fc); if (fc == AQ_NIC_FC_OFF) - fc_conf->mode = RTE_FC_NONE; + fc_conf->mode = RTE_ETH_FC_NONE; else if ((fc & AQ_NIC_FC_RX) && (fc & AQ_NIC_FC_TX)) - fc_conf->mode = RTE_FC_FULL; + fc_conf->mode = RTE_ETH_FC_FULL; else if (fc & AQ_NIC_FC_RX) - fc_conf->mode = RTE_FC_RX_PAUSE; + fc_conf->mode = RTE_ETH_FC_RX_PAUSE; else if (fc & AQ_NIC_FC_TX) - fc_conf->mode = RTE_FC_TX_PAUSE; + fc_conf->mode = RTE_ETH_FC_TX_PAUSE; return 0; } @@ -1566,13 +1549,13 @@ atl_flow_ctrl_set(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf) if (hw->aq_fw_ops->set_flow_control == NULL) return -ENOTSUP; - if (fc_conf->mode == RTE_FC_NONE) + if (fc_conf->mode == RTE_ETH_FC_NONE) hw->aq_nic_cfg->flow_control = AQ_NIC_FC_OFF; - else if (fc_conf->mode == RTE_FC_RX_PAUSE) + else if (fc_conf->mode == RTE_ETH_FC_RX_PAUSE) hw->aq_nic_cfg->flow_control = AQ_NIC_FC_RX; - else if (fc_conf->mode == RTE_FC_TX_PAUSE) + else if (fc_conf->mode == RTE_ETH_FC_TX_PAUSE) hw->aq_nic_cfg->flow_control = AQ_NIC_FC_TX; - else if (fc_conf->mode == RTE_FC_FULL) + else if (fc_conf->mode == RTE_ETH_FC_FULL) hw->aq_nic_cfg->flow_control = (AQ_NIC_FC_RX | AQ_NIC_FC_TX); if (old_flow_control != hw->aq_nic_cfg->flow_control) @@ -1648,9 +1631,6 @@ atl_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) if (mtu < RTE_ETHER_MIN_MTU || frame_size > dev_info.max_rx_pktlen) return -EINVAL; - /* update max frame size */ - dev->data->dev_conf.rxmode.max_rx_pkt_len = frame_size; - return 0; } @@ -1743,14 +1723,14 @@ atl_vlan_offload_set(struct rte_eth_dev *dev, int mask) PMD_INIT_FUNC_TRACE(); - ret = atl_enable_vlan_filter(dev, mask & ETH_VLAN_FILTER_MASK); + ret = atl_enable_vlan_filter(dev, mask & RTE_ETH_VLAN_FILTER_MASK); - cfg->vlan_strip = !!(mask & ETH_VLAN_STRIP_MASK); + cfg->vlan_strip = !!(mask & RTE_ETH_VLAN_STRIP_MASK); for (i = 0; i < dev->data->nb_rx_queues; i++) hw_atl_rpo_rx_desc_vlan_stripping_set(hw, cfg->vlan_strip, i); - if (mask & ETH_VLAN_EXTEND_MASK) + if (mask & RTE_ETH_VLAN_EXTEND_MASK) ret = -ENOTSUP; return ret; @@ -1766,10 +1746,10 @@ atl_vlan_tpid_set(struct rte_eth_dev *dev, enum rte_vlan_type vlan_type, PMD_INIT_FUNC_TRACE(); switch (vlan_type) { - case ETH_VLAN_TYPE_INNER: + case RTE_ETH_VLAN_TYPE_INNER: hw_atl_rpf_vlan_inner_etht_set(hw, tpid); break; - case ETH_VLAN_TYPE_OUTER: + case RTE_ETH_VLAN_TYPE_OUTER: hw_atl_rpf_vlan_outer_etht_set(hw, tpid); break; default: @@ -1927,5 +1907,5 @@ is_atlantic_supported(struct rte_eth_dev *dev) RTE_PMD_REGISTER_PCI(net_atlantic, rte_atl_pmd); RTE_PMD_REGISTER_PCI_TABLE(net_atlantic, pci_id_atl_map); RTE_PMD_REGISTER_KMOD_DEP(net_atlantic, "* igb_uio | uio_pci_generic"); -RTE_LOG_REGISTER(atl_logtype_init, pmd.net.atlantic.init, NOTICE); -RTE_LOG_REGISTER(atl_logtype_driver, pmd.net.atlantic.driver, NOTICE); +RTE_LOG_REGISTER_SUFFIX(atl_logtype_init, init, NOTICE); +RTE_LOG_REGISTER_SUFFIX(atl_logtype_driver, driver, NOTICE);