On 12/4/2016 6:17 PM, Hemant Agrawal wrote: > The DPAA2 bus driver is a rte_bus driver which scans the fsl-mc bus. > > Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com> > --- > drivers/net/Makefile | 2 +- > drivers/net/dpaa2/Makefile | 60 ++++++++++++++ > drivers/net/dpaa2/dpaa2_bus.c | 99 +++++++++++++++++++++++ > drivers/net/dpaa2/rte_dpaa2.h | 121 > ++++++++++++++++++++++++++++ > drivers/net/dpaa2/rte_pmd_dpaa2_version.map | 4 + > mk/rte.app.mk | 1 + > 6 files changed, 286 insertions(+), 1 deletion(-) > create mode 100644 drivers/net/dpaa2/Makefile > create mode 100644 drivers/net/dpaa2/dpaa2_bus.c > create mode 100644 drivers/net/dpaa2/rte_dpaa2.h > create mode 100644 drivers/net/dpaa2/rte_pmd_dpaa2_version.map > > diff --git a/drivers/net/Makefile b/drivers/net/Makefile > index bc93230..2bcf67b 100644 > --- a/drivers/net/Makefile > +++ b/drivers/net/Makefile > @@ -55,7 +55,7 @@ DIRS-$(CONFIG_RTE_LIBRTE_THUNDERX_NICVF_PMD) += thunderx > DIRS-$(CONFIG_RTE_LIBRTE_VIRTIO_PMD) += virtio > DIRS-$(CONFIG_RTE_LIBRTE_VMXNET3_PMD) += vmxnet3 > DIRS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += xenvirt > - > +DIRS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += dpaa2
Add as alphabetically sorted manner please. > ifeq ($(CONFIG_RTE_LIBRTE_VHOST),y) > DIRS-$(CONFIG_RTE_LIBRTE_PMD_VHOST) += vhost > endif # $(CONFIG_RTE_LIBRTE_VHOST) > diff --git a/drivers/net/dpaa2/Makefile b/drivers/net/dpaa2/Makefile > new file mode 100644 > index 0000000..a99ce22 > --- /dev/null > +++ b/drivers/net/dpaa2/Makefile > @@ -0,0 +1,60 @@ > +# BSD LICENSE > +# > +# Copyright (c) 2016 NXP. All rights reserved. > +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions > +# are met: > +# > +# * Redistributions of source code must retain the above copyright > +# notice, this list of conditions and the following disclaimer. > +# * Redistributions in binary form must reproduce the above copyright > +# notice, this list of conditions and the following disclaimer in > +# the documentation and/or other materials provided with the > +# distribution. > +# * Neither the name of NXP nor the names of its > +# contributors may be used to endorse or promote products derived > +# from this software without specific prior written permission. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + > +include $(RTE_SDK)/mk/rte.vars.mk > + > +# > +# library name > +# > +LIB = librte_pmd_dpaa2.a > + > +CFLAGS += -O3 > +CFLAGS += $(WERROR_FLAGS) > + > +CFLAGS += -I$(RTE_SDK)/drivers/net/dpaa2 > +CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/ > +CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal Last two shouldn't be required. > + > +# versioning export map > +EXPORT_MAP := rte_pmd_dpaa2_version.map > + > +# library version > +LIBABIVER := 1 > + > + > +# Interfaces with DPDK > +SRCS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += dpaa2_bus.c > + > +# library dependencies > +DEPDIRS-y += lib/librte_eal > +DEPDIRS-y += drivers/common/dpaa/mc > +DEPDIRS-y += drivers/common/dpaa/qbman Again for consistency, DEPDIRS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += > + > +include $(RTE_SDK)/mk/rte.lib.mk > diff --git a/drivers/net/dpaa2/dpaa2_bus.c b/drivers/net/dpaa2/dpaa2_bus.c > new file mode 100644 > index 0000000..571066c > --- /dev/null > +++ b/drivers/net/dpaa2/dpaa2_bus.c > @@ -0,0 +1,99 @@ > +/*- > + * BSD LICENSE > + * > + * Copyright (c) 2016 NXP. All rights reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * > + * * Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * * Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in > + * the documentation and/or other materials provided with the > + * distribution. > + * * Neither the name of NXP nor the names of its > + * contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#include <string.h> > +#include <dirent.h> > + > +#include <rte_log.h> > +#include <rte_bus.h> > +#include <rte_dpaa2.h> > +#include <rte_eal_memconfig.h> > +#include <rte_malloc.h> > +#include <rte_devargs.h> > +#include <rte_memcpy.h> > +#include <rte_ethdev.h> > + > +#include "eal_filesystem.h" > +#include "eal_private.h" > + > +void > +rte_dpaa2_register(struct rte_dpaa2_driver *driver) > +{ > + struct rte_bus *bus; > + > + bus = rte_eal_get_bus("dpaa2"); > + if (!bus) { > + RTE_LOG(ERR, EAL, "DPAA2 bus not registered\n"); > + return; > + } > + > + rte_eal_bus_add_driver(bus, &driver->driver); > +} > + > +void > +rte_dpaa2_unregister(struct rte_dpaa2_driver *driver) > +{ > + struct rte_bus *bus; > + > + bus = driver->driver.bus; > + if (!bus) { > + RTE_LOG(ERR, EAL, "Unable to find bus for device\n"); > + return; > + } > + > + rte_eal_bus_remove_driver(&driver->driver); > +} > + > +int rte_dpaa2_probe(struct rte_driver *driver __rte_unused, > + struct rte_device *device __rte_unused) > +{ > + return 0; > +} > + > +int rte_dpaa2_scan(struct rte_bus *bus_d __rte_unused) > +{ > + return 0; > +} > + > +int rte_dpaa2_match(struct rte_driver *driver __rte_unused, > + struct rte_device *device __rte_unused) > +{ > + return 0; > +} > + > +struct rte_bus dpaa2_bus = { > + .scan = rte_dpaa2_scan, > + .match = rte_dpaa2_match, > + .probe = rte_dpaa2_probe, > +}; > + > +RTE_REGISTER_BUS(dpaa2, dpaa2_bus); > diff --git a/drivers/net/dpaa2/rte_dpaa2.h b/drivers/net/dpaa2/rte_dpaa2.h > new file mode 100644 > index 0000000..b36eed8 > --- /dev/null > +++ b/drivers/net/dpaa2/rte_dpaa2.h > @@ -0,0 +1,121 @@ > +/*- > + * BSD LICENSE > + * > + * Copyright (c) 2016 NXP. All rights reserved. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * > + * * Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * * Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in > + * the documentation and/or other materials provided with the > + * distribution. > + * * Neither the name of NXP nor the names of its > + * contributors may be used to endorse or promote products derived > + * from this software without specific prior written permission. > + * > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + */ > + > +#ifndef _RTE_DPAA2_H_ > +#define _RTE_DPAA2_H_ > + > +/** > + * @file > + * > + * RTE DPAA2 Interface > + */ > + > +#ifdef __cplusplus > +extern "C" { > +#endif > + > +#include <stdio.h> > +#include <stdlib.h> > +#include <limits.h> > +#include <errno.h> > +#include <sys/queue.h> > +#include <stdint.h> > +#include <inttypes.h> > + > +#include <rte_debug.h> > +#include <rte_interrupts.h> > +#include <rte_dev.h> > + > + > +struct rte_dpaa2_driver; > +/** > + * A structure describing a DPAA2 device. > + */ > +struct rte_dpaa2_device { > + TAILQ_ENTRY(rte_dpaa2_device) next; /**< Next probed DPAA2 device. */ > + struct rte_device device; /**< Inherit core device */ > + uint16_t dev_type; /**< Device Type */ > + uint16_t object_id; /**< DPAA2 Object ID */ > + struct rte_intr_handle intr_handle; /**< Interrupt handle */ > + struct rte_dpaa2_driver *driver; /**< Associated driver */ > +}; > + > +/** > + * A structure describing a DPAA2 driver. > + */ > +struct rte_dpaa2_driver { > + TAILQ_ENTRY(rte_dpaa2_driver) next; /**< Next in list. */ > + struct rte_driver driver; /**< Inherit core driver. */ > + uint32_t drv_flags; /**< Flags contolling handling of > device. */ > +}; > + > +/** > + * Register a DPAA2 driver. > + * > + * @param driver > + * A pointer to a rte_dpaa2_driver structure describing the driver > + * to be registered. > + */ > +void rte_dpaa2_register(struct rte_dpaa2_driver *driver); > + > +/** > + * Unregister a DPAA2 driver. > + * > + * @param driver > + * A pointer to a rte_dpaa2_driver structure describing the driver > + * to be unregistered. > + */ > +void rte_dpaa2_unregister(struct rte_dpaa2_driver *driver); > + > +/** > + * > + */ > +int rte_dpaa2_probe(struct rte_driver *driver, struct rte_device *device); > +int rte_dpaa2_match(struct rte_driver *driver, struct rte_device *device); > +int rte_dpaa2_scan(struct rte_bus *bus); Shouldn't these functions be static? > + > +/** Helper for DPAA2 device registration from driver (eth, crypto) instance > */ > +#define RTE_PMD_REGISTER_DPAA2(nm, dpaa2_drv) \ > +RTE_INIT(dpaa2initfn_ ##nm); \ > +static void dpaa2initfn_ ##nm(void) \ > +{\ > + (dpaa2_drv).driver.name = RTE_STR(nm);\ > + rte_dpaa2_register(&dpaa2_drv); \ > +} \ > +RTE_PMD_EXPORT_NAME(nm, __COUNTER__) > + > + > +#ifdef __cplusplus > +} > +#endif > + > +#endif /* _RTE_DPAA2_H_ */ > diff --git a/drivers/net/dpaa2/rte_pmd_dpaa2_version.map > b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map > new file mode 100644 > index 0000000..31eca32 > --- /dev/null > +++ b/drivers/net/dpaa2/rte_pmd_dpaa2_version.map > @@ -0,0 +1,4 @@ > +DPDK_17.02 { > + > + local: *; > +}; > diff --git a/mk/rte.app.mk b/mk/rte.app.mk > index f75f0e2..9e1c17c 100644 > --- a/mk/rte.app.mk > +++ b/mk/rte.app.mk > @@ -101,6 +101,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_CFGFILE) += > -lrte_cfgfile > > _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_BOND) += -lrte_pmd_bond > _LDLIBS-$(CONFIG_RTE_LIBRTE_PMD_XENVIRT) += -lrte_pmd_xenvirt -lxenstore > +_LDLIBS-$(CONFIG_RTE_LIBRTE_DPAA2_PMD) += -lrte_pmd_dpaa2 -ldpaa2_mc > -ldpaa2_qbman This should go within no shared library case (below), in a sorted manner please. btw, for shared compilation, PMDs loaded dynamically, as plugins. For dpaa case, there will be multiple libraries, not if it will work with multiple -d params for each lib, it worth testing. > > ifeq ($(CONFIG_RTE_BUILD_SHARED_LIB),n) > # plugins (link only if static libraries) >