bus/fslmc: support scanned device count
authorShreyansh Jain <shreyansh.jain@nxp.com>
Tue, 2 Jan 2018 13:08:38 +0000 (18:38 +0530)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 16 Jan 2018 17:47:49 +0000 (18:47 +0100)
FSLMC bus detects a multiple type of logical objects representing
components of the datapath.

Using the type of device, a newly introduced API
rte_fslmc_get_device_count can return the count of devices
scanned of that device type.

Signed-off-by: Shreyansh Jain <shreyansh.jain@nxp.com>
Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>
drivers/bus/fslmc/fslmc_bus.c
drivers/bus/fslmc/rte_bus_fslmc_version.map
drivers/bus/fslmc/rte_fslmc.h

index f0d3a6e..acc275a 100644 (file)
 struct rte_fslmc_bus rte_fslmc_bus;
 uint8_t dpaa2_virt_mode;
 
+uint32_t
+rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type)
+{
+       if (device_type > DPAA2_DEVTYPE_MAX)
+               return 0;
+       return rte_fslmc_bus.device_count[device_type];
+}
+
 static void
 cleanup_fslmc_device_list(void)
 {
@@ -138,6 +146,9 @@ scan_one_fslmc_device(char *dev_name)
        else
                dev->dev_type = DPAA2_UNKNOWN;
 
+       /* Update the device found into the device_count table */
+       rte_fslmc_bus.device_count[dev->dev_type]++;
+
        t_ptr = strtok(NULL, ".");
        if (!t_ptr) {
                FSLMC_BUS_LOG(ERR, "Incorrect device string observed (%s).",
@@ -382,6 +393,7 @@ struct rte_fslmc_bus rte_fslmc_bus = {
        },
        .device_list = TAILQ_HEAD_INITIALIZER(rte_fslmc_bus.device_list),
        .driver_list = TAILQ_HEAD_INITIALIZER(rte_fslmc_bus.driver_list),
+       .device_count = {0},
 };
 
 RTE_REGISTER_BUS(fslmc, rte_fslmc_bus.bus);
index f59fc67..16b759d 100644 (file)
@@ -97,5 +97,6 @@ DPDK_18.02 {
        dpaa2_virt_mode;
        qbman_fq_query_state;
        qbman_fq_state_frame_count;
+       rte_fslmc_get_device_count;
 
 } DPDK_17.11;
index 1524df8..c447b06 100644 (file)
@@ -62,7 +62,8 @@ enum rte_dpaa2_dev_type {
        DPAA2_CI,       /**< DPCI type device */
        DPAA2_MPORTAL,  /**< DPMCP type device */
        /* Unknown device placeholder */
-       DPAA2_UNKNOWN
+       DPAA2_UNKNOWN,
+       DPAA2_DEVTYPE_MAX,
 };
 
 TAILQ_HEAD(rte_dpaa2_object_list, rte_dpaa2_object);
@@ -124,8 +125,8 @@ struct rte_fslmc_bus {
                                /**< FSLMC DPAA2 Device list */
        struct rte_fslmc_driver_list driver_list;
                                /**< FSLMC DPAA2 Driver list */
-       int device_count;
-                               /**< Optional: Count of devices on bus */
+       int device_count[DPAA2_DEVTYPE_MAX];
+                               /**< Count of all devices scanned */
 };
 
 /**
@@ -165,6 +166,17 @@ RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
  */
 void rte_fslmc_object_register(struct rte_dpaa2_object *object);
 
+/**
+ * Count of a particular type of DPAA2 device scanned on the bus.
+ *
+ * @param dev_type
+ *   Type of device as rte_dpaa2_dev_type enumerator
+ * @return
+ *   >=0 for count; 0 indicates either no device of the said type scanned or
+ *   invalid device type.
+ */
+uint32_t rte_fslmc_get_device_count(enum rte_dpaa2_dev_type device_type);
+
 /** Helper for DPAA2 object registration */
 #define RTE_PMD_REGISTER_DPAA2_OBJECT(nm, dpaa2_obj) \
 RTE_INIT(dpaa2objinitfn_ ##nm); \