]> git.droids-corp.org - dpdk.git/commitdiff
bus/fslmc: generic framework for mc object creation
authorHemant Agrawal <hemant.agrawal@nxp.com>
Fri, 30 Jun 2017 08:54:17 +0000 (14:24 +0530)
committerJerin Jacob <jerin.jacob@caviumnetworks.com>
Fri, 7 Jul 2017 07:24:51 +0000 (09:24 +0200)
There are muliple help mc object, which are not an independent
device, but they are required for dpaa2 based devices.
This framework allows registration and handling of all such
mc devices.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Signed-off-by: Nipun Gupta <nipun.gupta@nxp.com>
drivers/bus/fslmc/fslmc_vfio.c
drivers/bus/fslmc/fslmc_vfio.h
drivers/bus/fslmc/rte_bus_fslmc_version.map

index 49bb670c815a11ee410271aa7d61b7cabd2e7281..e7a1ca9e87376405607f86bb3d8d8d2582808c4d 100644 (file)
@@ -80,6 +80,17 @@ static uint32_t *msi_intr_vaddr;
 void *(*rte_mcp_ptr_list);
 static uint32_t mcp_id;
 static int is_dma_done;
+static struct rte_fslmc_object_list fslmc_obj_list =
+       TAILQ_HEAD_INITIALIZER(fslmc_obj_list);
+
+/*register a fslmc bus based dpaa2 driver */
+void
+rte_fslmc_object_register(struct rte_dpaa2_object *object)
+{
+       RTE_VERIFY(object);
+
+       TAILQ_INSERT_TAIL(&fslmc_obj_list, object, next);
+}
 
 static int vfio_connect_container(struct fslmc_vfio_group *vfio_group)
 {
index 53dd0b74d0d4596b78fbc596b65778b7efb48a97..58b3acde5b379e4d8676ba3131a0733f047050b2 100644 (file)
@@ -63,6 +63,24 @@ typedef struct fslmc_vfio_container {
        struct fslmc_vfio_group *group_list[VFIO_MAX_GRP];
 } fslmc_vfio_container;
 
+struct rte_dpaa2_object;
+
+TAILQ_HEAD(rte_fslmc_object_list, rte_dpaa2_object);
+
+typedef int (*rte_fslmc_obj_create_t)(struct fslmc_vfio_device *vdev,
+                                        struct vfio_device_info *obj_info,
+                                        int object_id);
+
+/**
+ * A structure describing a DPAA2 driver.
+ */
+struct rte_dpaa2_object {
+       TAILQ_ENTRY(rte_dpaa2_object) next; /**< Next in list. */
+       const char *name;            /**< Name of Object. */
+       uint16_t object_id;             /**< DPAA2 Object ID */
+       rte_fslmc_obj_create_t create;
+};
+
 int vfio_dmamap_mem_region(
        uint64_t vaddr,
        uint64_t iova,
@@ -79,4 +97,23 @@ int dpaa2_create_dpio_device(struct fslmc_vfio_device *vdev,
 
 int dpaa2_create_dpbp_device(int dpbp_id);
 
+/**
+ * Register a DPAA2 MC Object driver.
+ *
+ * @param mc_object
+ *   A pointer to a rte_dpaa_object structure describing the mc object
+ *   to be registered.
+ */
+void rte_fslmc_object_register(struct rte_dpaa2_object *object);
+
+/** Helper for DPAA2 object registration */
+#define RTE_PMD_REGISTER_DPAA2_OBJECT(nm, dpaa2_obj) \
+RTE_INIT(dpaa2objinitfn_ ##nm); \
+static void dpaa2objinitfn_ ##nm(void) \
+{\
+       (dpaa2_obj).name = RTE_STR(nm);\
+       rte_fslmc_object_register(&dpaa2_obj); \
+} \
+RTE_PMD_EXPORT_NAME(nm, __COUNTER__)
+
 #endif /* _FSLMC_VFIO_H_ */
index 43f335422223170f13688f6fd93f4bc351e63a0c..90db78c2380991fa0124bf6f5a991d62f2e8cf7b 100644 (file)
@@ -56,6 +56,7 @@ DPDK_17.08 {
        mc_get_soc_version;
        mc_get_version;
        qbman_result_SCN_state_in_mem;
+       rte_fslmc_object_register;
        rte_global_active_dqs_list;
 
 } DPDK_17.05;