lkml.org 
[lkml]   [2020]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v2 4/4] fpga: dfl: move dfl bus related APIs to include/linux/fpga/dfl.h
On Tue, Sep 15, 2020 at 11:27:53AM +0800, Xu Yilun wrote:
> The patch moves dfl-bus related APIs to include/linux/fpga/dfl.h
>
> Now the DFL device drivers could be made as independent modules and put
> in different folders according to their functionality. In order for
> scattered DFL device drivers to include dfl bus APIs, move the dfl bus
> APIs to a new header file in the public folder.
>
> Signed-off-by: Xu Yilun <yilun.xu@intel.com>
> Reviewed-by: Tom Rix <trix@redhat.com>
> Acked-by: Wu Hao <hao.wu@intel.com>
> ---
> v2: updated the MAINTAINERS under FPGA DFL DRIVERS
> improve the comments
> rename the dfl-bus.h to dfl.h
> ---
> MAINTAINERS | 1 +
> drivers/fpga/dfl-n3000-nios.c | 3 +-
> drivers/fpga/dfl.c | 1 +
> drivers/fpga/dfl.h | 72 ------------------------------------
> include/linux/fpga/dfl.h | 86 +++++++++++++++++++++++++++++++++++++++++++
> 5 files changed, 89 insertions(+), 74 deletions(-)
> create mode 100644 include/linux/fpga/dfl.h
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 31c5165..fa46592 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -6883,6 +6883,7 @@ S: Maintained
> F: Documentation/ABI/testing/sysfs-bus-dfl
> F: Documentation/fpga/dfl.rst
> F: drivers/fpga/dfl*
> +F: include/linux/fpga/dfl.h
> F: include/uapi/linux/fpga-dfl.h
>
> FPGA MANAGER FRAMEWORK
> diff --git a/drivers/fpga/dfl-n3000-nios.c b/drivers/fpga/dfl-n3000-nios.c
> index 70b44c3..5088f8f 100644
> --- a/drivers/fpga/dfl-n3000-nios.c
> +++ b/drivers/fpga/dfl-n3000-nios.c
> @@ -11,6 +11,7 @@
> */
> #include <linux/bitfield.h>
> #include <linux/errno.h>
> +#include <linux/fpga/dfl.h>
> #include <linux/io.h>
> #include <linux/io-64-nonatomic-lo-hi.h>
> #include <linux/kernel.h>
> @@ -22,8 +23,6 @@
> #include <linux/spi/spi.h>
> #include <linux/types.h>
>
> -#include "dfl.h"
> -
> static char *fec_mode = "rs";
> module_param(fec_mode, charp, 0444);
> MODULE_PARM_DESC(fec_mode, "FEC mode of the ethernet retimer on Intel PAC N3000");
> diff --git a/drivers/fpga/dfl.c b/drivers/fpga/dfl.c
> index b450870..8bf6e99 100644
> --- a/drivers/fpga/dfl.c
> +++ b/drivers/fpga/dfl.c
> @@ -11,6 +11,7 @@
> * Xiao Guangrong <guangrong.xiao@linux.intel.com>
> */
> #include <linux/fpga-dfl.h>
> +#include <linux/fpga/dfl.h>
> #include <linux/module.h>
> #include <linux/uaccess.h>
>
> diff --git a/drivers/fpga/dfl.h b/drivers/fpga/dfl.h
> index d5e050a..2b82c96 100644
> --- a/drivers/fpga/dfl.h
> +++ b/drivers/fpga/dfl.h
> @@ -517,76 +517,4 @@ long dfl_feature_ioctl_set_irq(struct platform_device *pdev,
> struct dfl_feature *feature,
> unsigned long arg);
>
> -/**
> - * enum dfl_id_type - define the DFL FIU types
> - */
> -enum dfl_id_type {
> - FME_ID,
> - PORT_ID,
> - DFL_ID_MAX,
> -};
> -
> -/**
> - * struct dfl_device - represent an dfl device on dfl bus
> - *
> - * @dev: generic device interface.
> - * @id: id of the dfl device.
> - * @type: contains 4 bits DFL FIU type of the device. See enum dfl_id_type.
> - * @feature_id: contains 12 bits feature identifier local to its DFL FIU type.
> - * @mmio_res: mmio resource of this dfl device.
> - * @irqs: list of Linux IRQ numbers of this dfl device.
> - * @num_irqs: number of IRQs supported by this dfl device.
> - * @cdev: pointer to DFL FPGA container device this dfl device belongs to.
> - * @id_entry: matched id entry in dfl driver's id table.
> - */
> -struct dfl_device {
> - struct device dev;
> - int id;
> - u8 type;
> - u16 feature_id;
> - struct resource mmio_res;
> - int *irqs;
> - unsigned int num_irqs;
> - struct dfl_fpga_cdev *cdev;
> - const struct dfl_device_id *id_entry;
> -};
> -
> -/**
> - * struct dfl_driver - represent an dfl device driver
> - *
> - * @drv: driver model structure.
> - * @id_table: pointer to table of device IDs the driver is interested in.
> - * { } member terminated.
> - * @probe: mandatory callback for device binding.
> - * @remove: callback for device unbinding.
> - */
> -struct dfl_driver {
> - struct device_driver drv;
> - const struct dfl_device_id *id_table;
> -
> - int (*probe)(struct dfl_device *dfl_dev);
> - void (*remove)(struct dfl_device *dfl_dev);
> -};
> -
> -#define to_dfl_dev(d) container_of(d, struct dfl_device, dev)
> -#define to_dfl_drv(d) container_of(d, struct dfl_driver, drv)
> -
> -/*
> - * use a macro to avoid include chaining to get THIS_MODULE.
> - */
> -#define dfl_driver_register(drv) \
> - __dfl_driver_register(drv, THIS_MODULE)
> -int __dfl_driver_register(struct dfl_driver *dfl_drv, struct module *owner);
> -void dfl_driver_unregister(struct dfl_driver *dfl_drv);
> -
> -/*
> - * module_dfl_driver() - Helper macro for drivers that don't do
> - * anything special in module init/exit. This eliminates a lot of
> - * boilerplate. Each module may only use this macro once, and
> - * calling it replaces module_init() and module_exit().
> - */
> -#define module_dfl_driver(__dfl_driver) \
> - module_driver(__dfl_driver, dfl_driver_register, \
> - dfl_driver_unregister)
> -
> #endif /* __FPGA_DFL_H */
> diff --git a/include/linux/fpga/dfl.h b/include/linux/fpga/dfl.h
> new file mode 100644
> index 0000000..0d7806f
> --- /dev/null
> +++ b/include/linux/fpga/dfl.h
> @@ -0,0 +1,86 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Header file for DFL driver and device API
> + *
> + * Copyright (C) 2020 Intel Corporation, Inc.
> + */
> +
> +#ifndef __LINUX_FPGA_DFL_H
> +#define __LINUX_FPGA_DFL_H
> +
> +#include <linux/device.h>
> +#include <linux/mod_devicetable.h>
> +
> +/**
> + * enum dfl_id_type - define the DFL FIU types
> + */
> +enum dfl_id_type {
> + FME_ID,
> + PORT_ID,
> + DFL_ID_MAX,
> +};
> +
> +/**
> + * struct dfl_device - represent an dfl device on dfl bus
> + *
> + * @dev: generic device interface.
> + * @id: id of the dfl device.
> + * @type: contains 4 bits DFL FIU type of the device. See enum dfl_id_type.
> + * @feature_id: contains 12 bits feature identifier local to its DFL FIU type.
> + * @mmio_res: mmio resource of this dfl device.
> + * @irqs: list of Linux IRQ numbers of this dfl device.
> + * @num_irqs: number of IRQs supported by this dfl device.
> + * @cdev: pointer to DFL FPGA container device this dfl device belongs to.
> + * @id_entry: matched id entry in dfl driver's id table.
> + */
> +struct dfl_device {
> + struct device dev;
> + int id;
> + u8 type;
> + u16 feature_id;
> + struct resource mmio_res;
> + int *irqs;
> + unsigned int num_irqs;
> + struct dfl_fpga_cdev *cdev;
> + const struct dfl_device_id *id_entry;
> +};
> +
> +/**
> + * struct dfl_driver - represent an dfl device driver
> + *
> + * @drv: driver model structure.
> + * @id_table: pointer to table of device IDs the driver is interested in.
> + * { } member terminated.
> + * @probe: mandatory callback for device binding.
> + * @remove: callback for device unbinding.
> + */
> +struct dfl_driver {
> + struct device_driver drv;
> + const struct dfl_device_id *id_table;
> +
> + int (*probe)(struct dfl_device *dfl_dev);
> + void (*remove)(struct dfl_device *dfl_dev);
> +};
> +
> +#define to_dfl_dev(d) container_of(d, struct dfl_device, dev)
> +#define to_dfl_drv(d) container_of(d, struct dfl_driver, drv)
> +
> +/*
> + * use a macro to avoid include chaining to get THIS_MODULE.
> + */
> +#define dfl_driver_register(drv) \
> + __dfl_driver_register(drv, THIS_MODULE)
> +int __dfl_driver_register(struct dfl_driver *dfl_drv, struct module *owner);
> +void dfl_driver_unregister(struct dfl_driver *dfl_drv);
> +
> +/*
> + * module_dfl_driver() - Helper macro for drivers that don't do
> + * anything special in module init/exit. This eliminates a lot of
> + * boilerplate. Each module may only use this macro once, and
> + * calling it replaces module_init() and module_exit().
> + */
> +#define module_dfl_driver(__dfl_driver) \
> + module_driver(__dfl_driver, dfl_driver_register, \
> + dfl_driver_unregister)
> +
> +#endif /* __LINUX_FPGA_DFL_H */
> --
> 2.7.4
>

Applied to for-next,

Thanks

\
 
 \ /
  Last update: 2020-09-16 00:57    [W:0.084 / U:18.032 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site