raw/ioat: add flag to control copying handle parameters
[dpdk.git] / drivers / raw / ioat / ioat_rawdev.c
index d509b66..ea9f51f 100644 (file)
@@ -9,9 +9,6 @@
 
 #include "rte_ioat_rawdev.h"
 
-/* Dynamic log type identifier */
-int ioat_pmd_logtype;
-
 static struct rte_pci_driver ioat_pmd_drv;
 
 #define IOAT_VENDOR_ID         0x8086
@@ -26,6 +23,9 @@ static struct rte_pci_driver ioat_pmd_drv;
 #define IOAT_DEVICE_ID_BDX7    0x6f27
 #define IOAT_DEVICE_ID_BDXE    0x6f2E
 #define IOAT_DEVICE_ID_BDXF    0x6f2F
+#define IOAT_DEVICE_ID_ICX     0x0b00
+
+RTE_LOG_REGISTER(ioat_pmd_logtype, rawdev.ioat, INFO);
 
 #define IOAT_PMD_LOG(level, fmt, args...) rte_log(RTE_LOG_ ## level, \
        ioat_pmd_logtype, "%s(): " fmt "\n", __func__, ##args)
@@ -39,7 +39,8 @@ static struct rte_pci_driver ioat_pmd_drv;
 #define COMPLETION_SZ sizeof(__m128i)
 
 static int
-ioat_dev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config)
+ioat_dev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config,
+               size_t config_size)
 {
        struct rte_ioat_rawdev_config *params = config;
        struct rte_ioat_rawdev *ioat = dev->dev_private;
@@ -49,7 +50,7 @@ ioat_dev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config)
        if (dev->started)
                return -EBUSY;
 
-       if (params == NULL)
+       if (params == NULL || config_size != sizeof(*params))
                return -EINVAL;
 
        if (params->ring_size > 4096 || params->ring_size < 64 ||
@@ -57,6 +58,7 @@ ioat_dev_configure(const struct rte_rawdev *dev, rte_rawdev_obj_t config)
                return -EINVAL;
 
        ioat->ring_size = params->ring_size;
+       ioat->hdls_disable = params->hdls_disable;
        if (ioat->desc_ring != NULL) {
                rte_memzone_free(ioat->desc_mz);
                ioat->desc_ring = NULL;
@@ -110,14 +112,19 @@ ioat_dev_stop(struct rte_rawdev *dev)
        RTE_SET_USED(dev);
 }
 
-static void
-ioat_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info)
+static int
+ioat_dev_info_get(struct rte_rawdev *dev, rte_rawdev_obj_t dev_info,
+               size_t dev_info_size)
 {
        struct rte_ioat_rawdev_config *cfg = dev_info;
        struct rte_ioat_rawdev *ioat = dev->dev_private;
 
-       if (cfg != NULL)
-               cfg->ring_size = ioat->ring_size;
+       if (dev_info == NULL || dev_info_size != sizeof(*cfg))
+               return -EINVAL;
+
+       cfg->ring_size = ioat->ring_size;
+       cfg->hdls_disable = ioat->hdls_disable;
+       return 0;
 }
 
 static const char * const xstat_names[] = {
@@ -161,6 +168,49 @@ ioat_xstats_get_names(const struct rte_rawdev *dev,
        return RTE_DIM(xstat_names);
 }
 
+static int
+ioat_xstats_reset(struct rte_rawdev *dev, const uint32_t *ids, uint32_t nb_ids)
+{
+       struct rte_ioat_rawdev *ioat = dev->dev_private;
+       unsigned int i;
+
+       if (!ids) {
+               ioat->enqueue_failed = 0;
+               ioat->enqueued = 0;
+               ioat->started = 0;
+               ioat->completed = 0;
+               return 0;
+       }
+
+       for (i = 0; i < nb_ids; i++) {
+               switch (ids[i]) {
+               case 0:
+                       ioat->enqueue_failed = 0;
+                       break;
+               case 1:
+                       ioat->enqueued = 0;
+                       break;
+               case 2:
+                       ioat->started = 0;
+                       break;
+               case 3:
+                       ioat->completed = 0;
+                       break;
+               default:
+                       IOAT_PMD_WARN("Invalid xstat id - cannot reset value");
+                       break;
+               }
+       }
+
+       return 0;
+}
+
+static int
+ioat_dev_close(struct rte_rawdev *dev __rte_unused)
+{
+       return 0;
+}
+
 extern int ioat_rawdev_test(uint16_t dev_id);
 
 static int
@@ -170,9 +220,11 @@ ioat_rawdev_create(const char *name, struct rte_pci_device *dev)
                        .dev_configure = ioat_dev_configure,
                        .dev_start = ioat_dev_start,
                        .dev_stop = ioat_dev_stop,
+                       .dev_close = ioat_dev_close,
                        .dev_info_get = ioat_dev_info_get,
                        .xstats_get = ioat_xstats_get,
                        .xstats_get_names = ioat_xstats_get_names,
+                       .xstats_reset = ioat_xstats_reset,
                        .dev_selftest = ioat_rawdev_test,
        };
 
@@ -333,13 +385,13 @@ static const struct rte_pci_id pci_id_ioat_map[] = {
        { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDX7) },
        { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDXE) },
        { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_BDXF) },
+       { RTE_PCI_DEVICE(IOAT_VENDOR_ID, IOAT_DEVICE_ID_ICX) },
        { .vendor_id = 0, /* sentinel */ },
 };
 
 static struct rte_pci_driver ioat_pmd_drv = {
        .id_table = pci_id_ioat_map,
-       .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC |
-                    RTE_PCI_DRV_IOVA_AS_VA,
+       .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,
        .probe = ioat_rawdev_probe,
        .remove = ioat_rawdev_remove,
 };
@@ -347,10 +399,3 @@ static struct rte_pci_driver ioat_pmd_drv = {
 RTE_PMD_REGISTER_PCI(IOAT_PMD_RAWDEV_NAME, ioat_pmd_drv);
 RTE_PMD_REGISTER_PCI_TABLE(IOAT_PMD_RAWDEV_NAME, pci_id_ioat_map);
 RTE_PMD_REGISTER_KMOD_DEP(IOAT_PMD_RAWDEV_NAME, "* igb_uio | uio_pci_generic");
-
-RTE_INIT(ioat_pmd_init_log)
-{
-       ioat_pmd_logtype = rte_log_register(IOAT_PMD_LOG_NAME);
-       if (ioat_pmd_logtype >= 0)
-               rte_log_set_level(ioat_pmd_logtype, RTE_LOG_INFO);
-}