Signed-off-by: Bogdan Pricope <bogdan.pric...@linaro.org>
---
 example/Makefile.am                     |  4 +-
 example/ddf_app/Makefile.am             | 10 ++++
 example/ddf_app/odp_ddf_app.c           | 49 +++++++++++++++++++
 example/ddf_ifs/Makefile.am             | 26 ++++++++++
 example/ddf_ifs/ddf_ifs.c               | 28 +++++++++++
 example/ddf_ifs/ddf_ifs.h               | 18 +++++++
 example/ddf_ifs/ddf_ifs_api.h           | 25 ++++++++++
 example/ddf_ifs/ddf_ifs_dev_dpdk.c      | 25 ++++++++++
 example/ddf_ifs/ddf_ifs_dev_dpdk.h      | 24 +++++++++
 example/ddf_ifs/ddf_ifs_devio_direct.c  | 51 +++++++++++++++++++
 example/ddf_ifs/ddf_ifs_devio_direct.h  | 20 ++++++++
 example/ddf_ifs/ddf_ifs_driver.c        | 69 ++++++++++++++++++++++++++
 example/ddf_ifs/ddf_ifs_driver.h        | 20 ++++++++
 example/ddf_ifs/ddf_ifs_enumr_class.c   | 47 ++++++++++++++++++
 example/ddf_ifs/ddf_ifs_enumr_class.h   | 20 ++++++++
 example/ddf_ifs/ddf_ifs_enumr_dpdk.c    | 86 +++++++++++++++++++++++++++++++++
 example/ddf_ifs/ddf_ifs_enumr_dpdk.h    | 20 ++++++++
 example/ddf_ifs/ddf_ifs_enumr_generic.c | 57 ++++++++++++++++++++++
 example/ddf_ifs/ddf_ifs_enumr_generic.h | 20 ++++++++
 example/ddf_ifs/odp.conf                |  4 ++
 example/m4/configure.m4                 |  2 +
 21 files changed, 624 insertions(+), 1 deletion(-)
 create mode 100644 example/ddf_app/Makefile.am
 create mode 100644 example/ddf_app/odp_ddf_app.c
 create mode 100644 example/ddf_ifs/Makefile.am
 create mode 100644 example/ddf_ifs/ddf_ifs.c
 create mode 100644 example/ddf_ifs/ddf_ifs.h
 create mode 100644 example/ddf_ifs/ddf_ifs_api.h
 create mode 100644 example/ddf_ifs/ddf_ifs_dev_dpdk.c
 create mode 100644 example/ddf_ifs/ddf_ifs_dev_dpdk.h
 create mode 100644 example/ddf_ifs/ddf_ifs_devio_direct.c
 create mode 100644 example/ddf_ifs/ddf_ifs_devio_direct.h
 create mode 100644 example/ddf_ifs/ddf_ifs_driver.c
 create mode 100644 example/ddf_ifs/ddf_ifs_driver.h
 create mode 100644 example/ddf_ifs/ddf_ifs_enumr_class.c
 create mode 100644 example/ddf_ifs/ddf_ifs_enumr_class.h
 create mode 100644 example/ddf_ifs/ddf_ifs_enumr_dpdk.c
 create mode 100644 example/ddf_ifs/ddf_ifs_enumr_dpdk.h
 create mode 100644 example/ddf_ifs/ddf_ifs_enumr_generic.c
 create mode 100644 example/ddf_ifs/ddf_ifs_enumr_generic.h
 create mode 100644 example/ddf_ifs/odp.conf

diff --git a/example/Makefile.am b/example/Makefile.am
index dfc07b6..b209585 100644
--- a/example/Makefile.am
+++ b/example/Makefile.am
@@ -8,4 +8,6 @@ SUBDIRS = classifier \
          switch \
          time \
          timer \
-         traffic_mgmt
+         traffic_mgmt \
+         ddf_ifs \
+         ddf_app
diff --git a/example/ddf_app/Makefile.am b/example/ddf_app/Makefile.am
new file mode 100644
index 0000000..e654202
--- /dev/null
+++ b/example/ddf_app/Makefile.am
@@ -0,0 +1,10 @@
+include $(top_srcdir)/example/Makefile.inc
+
+bin_PROGRAMS = odp_ddf_app$(EXEEXT)
+odp_ddf_app_LDFLAGS = $(AM_LDFLAGS) -shared
+odp_ddf_app_CFLAGS = $(AM_CFLAGS) -I${top_srcdir}/example
+
+noinst_HEADERS = \
+                 $(top_srcdir)/example/example_debug.h
+
+dist_odp_ddf_app_SOURCES = odp_ddf_app.c
diff --git a/example/ddf_app/odp_ddf_app.c b/example/ddf_app/odp_ddf_app.c
new file mode 100644
index 0000000..c2d7abf
--- /dev/null
+++ b/example/ddf_app/odp_ddf_app.c
@@ -0,0 +1,49 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+/** enable strtok */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <example_debug.h>
+#include <odp_api.h>
+#include <odp_drv.h>
+#include <odp/helper/odph_api.h>
+
+int main(int argc, char *argv[])
+{
+       odp_instance_t instance;
+
+       (void)argc;
+       (void)argv;
+
+       EXAMPLE_DBG("Start DDF Application...\n");
+
+       /* Initialize ODP before calling anything else */
+       if (odp_init_global(&instance, NULL, NULL)) {
+               EXAMPLE_ERR("Error: ODP global init failed.\n");
+               exit(EXIT_FAILURE);
+       }
+
+       if (odp_init_local(instance, ODP_THREAD_CONTROL)) {
+               EXAMPLE_ERR("Error: ODP local init failed.\n");
+               exit(EXIT_FAILURE);
+       }
+
+       /* Print ddf objects*/
+       odpdrv_print_all();
+
+       /* Terminate ODP */
+       odp_term_local();
+       odp_term_global(instance);
+
+       EXAMPLE_DBG("Exit DDF Application.\n");
+       return 0;
+}
diff --git a/example/ddf_ifs/Makefile.am b/example/ddf_ifs/Makefile.am
new file mode 100644
index 0000000..b11cf3d
--- /dev/null
+++ b/example/ddf_ifs/Makefile.am
@@ -0,0 +1,26 @@
+LIB   = $(top_builddir)/lib
+
+AM_CPPFLAGS +=  -I$(srcdir) \
+               -I$(top_srcdir)/include \
+               -I$(top_srcdir)/platform/@with_platform@/include \
+               -I$(top_srcdir)/platform/@with_platform@/arch/@ARCH_DIR@
+
+lib_LTLIBRARIES = $(LIB)/libddf_ifs.la
+
+noinst_HEADERS = \
+                $(srcdir)/ddf_ifs.h \
+                $(srcdir)/ddf_ifs_enumr_class.h \
+                $(srcdir)/ddf_ifs_enumr_dpdk.h \
+                $(srcdir)/ddf_ifs_enumr_generic.h \
+                $(srcdir)/ddf_ifs_dev_dpdk.h \
+                $(srcdir)/ddf_ifs_devio_direct.h \
+                $(srcdir)/ddf_ifs_driver.h
+
+__LIB__libddf_ifs_la_SOURCES = \
+               ddf_ifs.c \
+               ddf_ifs_enumr_class.c \
+               ddf_ifs_enumr_dpdk.c \
+               ddf_ifs_enumr_generic.c \
+               ddf_ifs_dev_dpdk.c \
+               ddf_ifs_devio_direct.c \
+               ddf_ifs_driver.c
diff --git a/example/ddf_ifs/ddf_ifs.c b/example/ddf_ifs/ddf_ifs.c
new file mode 100644
index 0000000..cd4e48b
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs.c
@@ -0,0 +1,28 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs.h"
+#include "ddf_ifs_enumr_class.h"
+#include "ddf_ifs_devio_direct.h"
+#include "ddf_ifs_driver.h"
+
+static ODPDRV_CONSTRUCTOR void ddf_ifs_construct(void)
+{
+       printf("%s()\n", __func__);
+
+       register_enumerator_class();
+
+       register_devio_direct();
+
+       register_driver();
+}
+
+static __attribute__((destructor)) void ddf_ifs_destruct(void)
+{
+       printf("%s()\n", __func__);
+}
diff --git a/example/ddf_ifs/ddf_ifs.h b/example/ddf_ifs/ddf_ifs.h
new file mode 100644
index 0000000..980b520
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs.h
@@ -0,0 +1,18 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_H_
+#define _ODP_DDF_IFS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_api.h b/example/ddf_ifs/ddf_ifs_api.h
new file mode 100644
index 0000000..757658e
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_api.h
@@ -0,0 +1,25 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_API_H_
+#define _ODP_DDF_IFS_API_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DDF_IFS_DEV_API_NAME "ifs_api"
+#define DDF_IFS_DEV_API_VER 0
+#define DDF_IFS_DEVIO_API_NAME "devio_api"
+#define DDF_IFS_DEVIO_API_VER 0
+
+#define DDF_IFS_DRV_NAME "ddf_ifs_drv"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_API_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_dev_dpdk.c 
b/example/ddf_ifs/ddf_ifs_dev_dpdk.c
new file mode 100644
index 0000000..d66a15c
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_dev_dpdk.c
@@ -0,0 +1,25 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "odp_drv.h"
+#include "ddf_ifs_dev_dpdk.h"
+
+odpdrv_device_t dpdk_device_create(odpdrv_enumr_t enumr,
+                                  const char *dev_addr,
+                                  void *enum_data)
+{
+       odpdrv_device_param_t param;
+
+       printf("\t%s(%s)\n", __func__, dev_addr);
+
+       param.enumerator = enumr;
+       strcpy(param.address, dev_addr);
+       param.enum_dev = enum_data;
+
+       return odpdrv_device_create(&param);
+}
diff --git a/example/ddf_ifs/ddf_ifs_dev_dpdk.h 
b/example/ddf_ifs/ddf_ifs_dev_dpdk.h
new file mode 100644
index 0000000..2a81f6a
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_dev_dpdk.h
@@ -0,0 +1,24 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_DEV_DPDK_H_
+#define _ODP_DDF_IFS_DEV_DPDK_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "odp_drv.h"
+
+odpdrv_device_t dpdk_device_create(odpdrv_enumr_t enumr,
+                                  const char *dev_addr,
+                                  void *enum_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_DEV_DPDK_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_devio_direct.c 
b/example/ddf_ifs/ddf_ifs_devio_direct.c
new file mode 100644
index 0000000..ea508a0
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_devio_direct.c
@@ -0,0 +1,51 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs_api.h"
+#include "ddf_ifs_devio_direct.h"
+
+static odpdrv_devio_t devio_direct;
+
+static int devio_direct_probe(odpdrv_device_t dev)
+{
+       (void)dev;
+
+       printf("%s()\n", __func__);
+
+       return 0;
+}
+
+static int devio_direct_remove(void)
+{
+       printf("%s()\n", __func__);
+
+       return 0;
+}
+
+int register_devio_direct(void)
+{
+       odpdrv_devio_param_t param = {
+               .api_name = DDF_IFS_DEVIO_API_NAME,
+               .api_version = DDF_IFS_DEVIO_API_VER,
+               .enumr_api_name = DDF_IFS_DEV_API_NAME,
+               .enumr_api_version = DDF_IFS_DEV_API_VER,
+               .probe = devio_direct_probe,
+               .remove = devio_direct_remove,
+               .ops = NULL
+               };
+
+       printf("\t%s()\n", __func__);
+
+       devio_direct = odpdrv_devio_register(&param);
+       if (ODPDRV_DEVIO_INVALID == devio_direct) {
+               printf("\tError: failed to %s()\n", __func__);
+               return -1;
+       }
+
+       return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_devio_direct.h 
b/example/ddf_ifs/ddf_ifs_devio_direct.h
new file mode 100644
index 0000000..28c549d
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_devio_direct.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_DEVIO_DIRECT_H_
+#define _ODP_DDF_IFS_DEVIO_DIRECT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_devio_direct(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_DEVIO_DIRECT_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_driver.c b/example/ddf_ifs/ddf_ifs_driver.c
new file mode 100644
index 0000000..2dc5870
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_driver.c
@@ -0,0 +1,69 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "odp_drv.h"
+#include "ddf_ifs_api.h"
+#include "ddf_ifs_driver.h"
+
+static odpdrv_driver_t ddf_ifs_driver;
+static int drv_data = 12;
+
+static int ddf_ifs_driver_probe(odpdrv_device_t dev, odpdrv_devio_t devio,
+                               int devio_idx)
+{
+       printf("%s(dev, devio, devio_idx = %d)\n", __func__, devio_idx);
+
+       (void)devio;
+
+       odpdrv_device_set_data(dev, (void *)&drv_data);
+
+       return 0;
+}
+
+static int ddf_ifs_driver_unbind(odpdrv_device_t dev,
+                                void (*callback)(odpdrv_device_t dev),
+                                uint32_t flags)
+{
+       printf("%s()\n", __func__);
+
+       if (!(flags & ODPDRV_DRV_UNBIND_IMMEDIATE))
+               return -1; /* unsupported*/
+
+       callback(dev);
+
+       return 0;
+}
+
+static int ddf_ifs_driver_remove(void)
+{
+       printf("%s()\n", __func__);
+
+       return 0;
+}
+
+int register_driver(void)
+{
+       odpdrv_driver_param_t param = {
+               .name = DDF_IFS_DRV_NAME,
+               .devios = {{DDF_IFS_DEVIO_API_NAME, DDF_IFS_DEVIO_API_VER},
+                                  {"", 0}, {"", 0} },
+               .probe = ddf_ifs_driver_probe,
+               .unbind = ddf_ifs_driver_unbind,
+               .remove = ddf_ifs_driver_remove,
+               };
+
+       printf("\t%s()\n", __func__);
+
+       ddf_ifs_driver = odpdrv_driver_register(&param);
+       if (ODPDRV_DRIVER_INVALID == ddf_ifs_driver) {
+               printf("Error: Failed to %s()\n", __func__);
+               return -1;
+       }
+
+       return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_driver.h b/example/ddf_ifs/ddf_ifs_driver.h
new file mode 100644
index 0000000..4954c5a
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_driver.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_DRIVER_H_
+#define _ODP_DDF_IFS_DRIVER_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_driver(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_DRIVER_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_enumr_class.c 
b/example/ddf_ifs/ddf_ifs_enumr_class.c
new file mode 100644
index 0000000..a7b5d51
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_class.c
@@ -0,0 +1,47 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs_enumr_class.h"
+#include "ddf_ifs_enumr_dpdk.h"
+#include "ddf_ifs_enumr_generic.h"
+
+static odpdrv_enumr_class_t enumr_class;
+
+static int enumr_class_ifs_probe(void)
+{
+       printf("%s()\n", __func__);
+
+       if (register_enumerator_dpdk(enumr_class))
+               return -1;
+
+       if (register_enumerator_generic(enumr_class))
+               return -1;
+
+       return 0;
+}
+
+static int enumr_class_ifs_remove(void)
+{
+       printf("%s()\n", __func__);
+
+       return 0;
+}
+
+int register_enumerator_class(void)
+{
+       odpdrv_enumr_class_param_t param = {
+               .name = "enumr_class_ifs",
+               .probe = enumr_class_ifs_probe,
+               .remove = enumr_class_ifs_remove
+               };
+
+       printf("\t%s()\n", __func__);
+       enumr_class = odpdrv_enumr_class_register(&param);
+
+       return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_enumr_class.h 
b/example/ddf_ifs/ddf_ifs_enumr_class.h
new file mode 100644
index 0000000..42c02fc
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_class.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_ENUMR_CLASS_H_
+#define _ODP_DDF_IFS_ENUMR_CLASS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_enumerator_class(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_ENUMR_CLASS_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_enumr_dpdk.c 
b/example/ddf_ifs/ddf_ifs_enumr_dpdk.c
new file mode 100644
index 0000000..cc97e36
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_dpdk.c
@@ -0,0 +1,86 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs_api.h"
+#include "ddf_ifs_enumr_dpdk.h"
+#include "ddf_ifs_dev_dpdk.h"
+
+static odpdrv_enumr_t dpdk_enumr;
+
+#define TEST_DPDK_DEV_CNT 3
+#define DDF_DPDK_DEV_MAX 10
+
+static odpdrv_device_t dpdk_dev[DDF_DPDK_DEV_MAX];
+static int dpdk_dev_cnt;
+static int dpdk_enumr_probe(void)
+{
+       int dpdk_dev_cnt_detected = TEST_DPDK_DEV_CNT; /* detected with
+                                                         dpdk APIs*/
+       char dev_addr[ODPDRV_NAME_ADDR_SZ];
+       int i;
+
+       printf("%s() - %d devices found\n", __func__, dpdk_dev_cnt_detected);
+
+       if (dpdk_dev_cnt_detected > DDF_DPDK_DEV_MAX) {
+               dpdk_dev_cnt_detected = DDF_DPDK_DEV_MAX;
+               printf("\tWarning: dpdk device count scaled down to %d\n",
+                      dpdk_dev_cnt_detected);
+       }
+       for (i = 0; i < dpdk_dev_cnt_detected; i++) {
+               sprintf(dev_addr, "0000:01:00.%d", i);
+               dpdk_dev[dpdk_dev_cnt] = dpdk_device_create(dpdk_enumr,
+                                                           dev_addr,
+                                                           NULL);
+               if (dpdk_dev[dpdk_dev_cnt] == ODPDRV_DEVICE_INVALID)
+                       printf("\tError: unable to create device: %s\n",
+                              dev_addr);
+               else
+                       dpdk_dev_cnt++;
+       }
+
+       return 0;
+}
+
+static int dpdk_enumr_remove(void)
+{
+       printf("%s()\n", __func__);
+       return 0;
+}
+
+static int dpdk_enumr_register_notif(void (*event_handler) (uint64_t event),
+                                    int64_t event_mask)
+{
+       (void)event_handler;
+       (void)event_mask;
+
+       printf("%s()\n", __func__);
+
+       return 0;
+}
+
+int register_enumerator_dpdk(odpdrv_enumr_class_t enumr_class)
+{
+       struct odpdrv_enumr_param_t param = {
+               .enumr_class = enumr_class,
+               .api_name = DDF_IFS_DEV_API_NAME,
+               .api_version = DDF_IFS_DEV_API_VER,
+               .probe = dpdk_enumr_probe,
+               .remove = dpdk_enumr_remove,
+               .register_notifier = dpdk_enumr_register_notif
+       };
+
+       printf("\t%s()\n", __func__);
+
+       dpdk_enumr = odpdrv_enumr_register(&param);
+       if (ODPDRV_ENUMR_INVALID == dpdk_enumr) {
+               printf("\tError: failed to register_enumerator_dpdk()\n");
+               return -1;
+       }
+
+       return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_enumr_dpdk.h 
b/example/ddf_ifs/ddf_ifs_enumr_dpdk.h
new file mode 100644
index 0000000..516d9e3
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_dpdk.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_ENUMR_DPDK_H_
+#define _ODP_DDF_IFS_ENUMR_DPDK_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_enumerator_dpdk(odpdrv_enumr_class_t enumr_class);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_ENUMR_DPDK_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_enumr_generic.c 
b/example/ddf_ifs/ddf_ifs_enumr_generic.c
new file mode 100644
index 0000000..34a59a8
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_generic.c
@@ -0,0 +1,57 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs_api.h"
+#include "ddf_ifs_enumr_generic.h"
+
+static odpdrv_enumr_t gen_enumr;
+
+static int gen_enumr_probe(void)
+{
+       printf("%s() - no devices found\n", __func__);
+       return 0;
+}
+
+static int gen_enumr_remove(void)
+{
+       printf("%s()\n", __func__);
+       return 0;
+}
+
+static int gen_enumr_register_notif(void (*event_handler) (uint64_t event),
+                                   int64_t event_mask)
+{
+       (void)event_handler;
+       (void)event_mask;
+
+       printf("%s()\n", __func__);
+
+       return 0;
+}
+
+int register_enumerator_generic(odpdrv_enumr_class_t enumr_class)
+{
+       struct odpdrv_enumr_param_t param = {
+               .enumr_class = enumr_class,
+               .api_name = DDF_IFS_DEV_API_NAME,
+               .api_version = DDF_IFS_DEV_API_VER,
+               .probe = gen_enumr_probe,
+               .remove = gen_enumr_remove,
+               .register_notifier = gen_enumr_register_notif
+       };
+
+       printf("\t%s()\n", __func__);
+
+       gen_enumr = odpdrv_enumr_register(&param);
+       if (ODPDRV_ENUMR_INVALID == gen_enumr) {
+               printf("\tError:failed to %s()\n", __func__);
+               return -1;
+       }
+
+       return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_enumr_generic.h 
b/example/ddf_ifs/ddf_ifs_enumr_generic.h
new file mode 100644
index 0000000..2f0b8b8
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_generic.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier:     BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_ENUMR_GENERIC_H_
+#define _ODP_DDF_IFS_ENUMR_GENERIC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_enumerator_generic(odpdrv_enumr_class_t enumr_class);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_ENUMR_GENERIC_H_*/
diff --git a/example/ddf_ifs/odp.conf b/example/ddf_ifs/odp.conf
new file mode 100644
index 0000000..14968a7
--- /dev/null
+++ b/example/ddf_ifs/odp.conf
@@ -0,0 +1,4 @@
+module:
+{
+       modules = ("libddf_ifs.so.0");
+};
diff --git a/example/m4/configure.m4 b/example/m4/configure.m4
index 620db04..9e7973b 100644
--- a/example/m4/configure.m4
+++ b/example/m4/configure.m4
@@ -21,4 +21,6 @@ AC_CONFIG_FILES([example/classifier/Makefile
                 example/time/Makefile
                 example/timer/Makefile
                 example/traffic_mgmt/Makefile
+                example/ddf_ifs/Makefile
+                example/ddf_app/Makefile
                 example/Makefile])
-- 
1.9.1

Reply via email to