ethdev: move inline device operations
[dpdk.git] / drivers / net / axgbe / axgbe_ethdev.c
index 619250f..02ceb95 100644 (file)
@@ -83,6 +83,7 @@ static void axgbe_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
 static void axgbe_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
        struct rte_eth_txq_info *qinfo);
 const uint32_t *axgbe_dev_supported_ptypes_get(struct rte_eth_dev *dev);
+static int axgb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
 
 struct axgbe_xstats {
        char name[RTE_ETH_XSTATS_NAME_SIZE];
@@ -142,9 +143,6 @@ static const struct axgbe_xstats axgbe_xstats_strings[] = {
 #define AMD_PCI_AXGBE_DEVICE_V2A 0x1458
 #define AMD_PCI_AXGBE_DEVICE_V2B 0x1459
 
-int axgbe_logtype_init;
-int axgbe_logtype_driver;
-
 static const struct rte_pci_id pci_id_axgbe_map[] = {
        {RTE_PCI_DEVICE(AMD_PCI_VENDOR_ID, AMD_PCI_AXGBE_DEVICE_V2A)},
        {RTE_PCI_DEVICE(AMD_PCI_VENDOR_ID, AMD_PCI_AXGBE_DEVICE_V2B)},
@@ -226,8 +224,7 @@ static const struct eth_dev_ops axgbe_eth_dev_ops = {
        .rxq_info_get                 = axgbe_rxq_info_get,
        .txq_info_get                 = axgbe_txq_info_get,
        .dev_supported_ptypes_get     = axgbe_dev_supported_ptypes_get,
-       .rx_descriptor_status         = axgbe_dev_rx_descriptor_status,
-       .tx_descriptor_status         = axgbe_dev_tx_descriptor_status,
+       .mtu_set                = axgb_mtu_set,
 };
 
 static int axgbe_phy_reset(struct axgbe_port *pdata)
@@ -341,8 +338,8 @@ axgbe_dev_start(struct rte_eth_dev *dev)
        axgbe_dev_enable_tx(dev);
        axgbe_dev_enable_rx(dev);
 
-       axgbe_clear_bit(AXGBE_STOPPED, &pdata->dev_state);
-       axgbe_clear_bit(AXGBE_DOWN, &pdata->dev_state);
+       rte_bit_relaxed_clear32(AXGBE_STOPPED, &pdata->dev_state);
+       rte_bit_relaxed_clear32(AXGBE_DOWN, &pdata->dev_state);
        if ((dev_data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_SCATTER) ||
                                max_pkt_len > pdata->rx_buf_size)
                dev_data->scattered_rx = 1;
@@ -366,17 +363,17 @@ axgbe_dev_stop(struct rte_eth_dev *dev)
 
        rte_intr_disable(&pdata->pci_dev->intr_handle);
 
-       if (axgbe_test_bit(AXGBE_STOPPED, &pdata->dev_state))
+       if (rte_bit_relaxed_get32(AXGBE_STOPPED, &pdata->dev_state))
                return;
 
-       axgbe_set_bit(AXGBE_STOPPED, &pdata->dev_state);
+       rte_bit_relaxed_set32(AXGBE_STOPPED, &pdata->dev_state);
        axgbe_dev_disable_tx(dev);
        axgbe_dev_disable_rx(dev);
 
        pdata->phy_if.phy_stop(pdata);
        pdata->hw_if.exit(pdata);
        memset(&dev->data->dev_link, 0, sizeof(struct rte_eth_link));
-       axgbe_set_bit(AXGBE_DOWN, &pdata->dev_state);
+       rte_bit_relaxed_set32(AXGBE_DOWN, &pdata->dev_state);
 }
 
 /* Clear all resources like TX/RX queues. */
@@ -1398,7 +1395,35 @@ axgbe_dev_supported_ptypes_get(struct rte_eth_dev *dev)
                return ptypes;
        return NULL;
 }
-
+static int axgb_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
+{
+       struct rte_eth_dev_info dev_info;
+       struct axgbe_port *pdata = dev->data->dev_private;
+       uint32_t frame_size = mtu + RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN;
+       unsigned int val = 0;
+       axgbe_dev_info_get(dev, &dev_info);
+       /* check that mtu is within the allowed range */
+       if (mtu < RTE_ETHER_MIN_MTU || frame_size > dev_info.max_rx_pktlen)
+               return -EINVAL;
+       /* mtu setting is forbidden if port is start */
+       if (dev->data->dev_started) {
+               PMD_DRV_LOG(ERR, "port %d must be stopped before configuration",
+                               dev->data->port_id);
+               return -EBUSY;
+       }
+       if (frame_size > RTE_ETHER_MAX_LEN) {
+               dev->data->dev_conf.rxmode.offloads |=
+                       DEV_RX_OFFLOAD_JUMBO_FRAME;
+               val = 1;
+       } else {
+               dev->data->dev_conf.rxmode.offloads &=
+                       ~DEV_RX_OFFLOAD_JUMBO_FRAME;
+               val = 0;
+       }
+       AXGMAC_IOWRITE_BITS(pdata, MAC_RCR, JE, val);
+       dev->data->dev_conf.rxmode.max_rx_pkt_len = frame_size;
+       return 0;
+}
 static void axgbe_get_all_hw_features(struct axgbe_port *pdata)
 {
        unsigned int mac_hfr0, mac_hfr1, mac_hfr2;
@@ -1605,6 +1630,9 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev)
 
        eth_dev->dev_ops = &axgbe_eth_dev_ops;
 
+       eth_dev->rx_descriptor_status = axgbe_dev_rx_descriptor_status;
+       eth_dev->tx_descriptor_status = axgbe_dev_tx_descriptor_status;
+
        /*
         * For secondary processes, we don't initialise any further as primary
         * has already done this work.
@@ -1614,8 +1642,8 @@ eth_axgbe_dev_init(struct rte_eth_dev *eth_dev)
 
        pdata = eth_dev->data->dev_private;
        /* initial state */
-       axgbe_set_bit(AXGBE_DOWN, &pdata->dev_state);
-       axgbe_set_bit(AXGBE_STOPPED, &pdata->dev_state);
+       rte_bit_relaxed_set32(AXGBE_DOWN, &pdata->dev_state);
+       rte_bit_relaxed_set32(AXGBE_STOPPED, &pdata->dev_state);
        pdata->eth_dev = eth_dev;
 
        pci_dev = RTE_DEV_TO_PCI(eth_dev->device);
@@ -1812,13 +1840,5 @@ static struct rte_pci_driver rte_axgbe_pmd = {
 RTE_PMD_REGISTER_PCI(net_axgbe, rte_axgbe_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(net_axgbe, pci_id_axgbe_map);
 RTE_PMD_REGISTER_KMOD_DEP(net_axgbe, "* igb_uio | uio_pci_generic | vfio-pci");
-
-RTE_INIT(axgbe_init_log)
-{
-       axgbe_logtype_init = rte_log_register("pmd.net.axgbe.init");
-       if (axgbe_logtype_init >= 0)
-               rte_log_set_level(axgbe_logtype_init, RTE_LOG_NOTICE);
-       axgbe_logtype_driver = rte_log_register("pmd.net.axgbe.driver");
-       if (axgbe_logtype_driver >= 0)
-               rte_log_set_level(axgbe_logtype_driver, RTE_LOG_NOTICE);
-}
+RTE_LOG_REGISTER(axgbe_logtype_init, pmd.net.axgbe.init, NOTICE);
+RTE_LOG_REGISTER(axgbe_logtype_driver, pmd.net.axgbe.driver, NOTICE);