Hi, Bogdan

This looks good to me as an evaluation example of the DDF, two comments:

1, Copyright (c) 2014, Linaro Limited needs to be updated.
2, make distcheck failures:

Making all in ddf_ifs
make[3]: Entering directory
'/home/yihe01/workspace/odp-linux/opendataplane-1.14.0.0/_build/sub/example/ddf_ifs'

 CC       ddf_ifs.lo
 CC       ddf_ifs_enumr_class.lo
 CC       ddf_ifs_enumr_dpdk.lo
../../../../example/ddf_ifs/ddf_ifs_enumr_dpdk.c:9:25: fatal error:
ddf_ifs_api.h: No such file or directory
compilation terminated.

thanks and best regards, Yi

On 21 June 2017 at 16:10, Bogdan Pricope <[email protected]> wrote:

> Signed-off-by: Bogdan Pricope <[email protected]>
> ---
>  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