[Intel-gfx] [PATCH 07/16] drm: Extract drm_ioctl.h

Daniel Vetter daniel at ffwll.ch
Wed Mar 22 20:15:23 UTC 2017


On Wed, Mar 22, 2017 at 03:47:31PM +0200, Ville Syrjälä wrote:
> On Wed, Mar 22, 2017 at 09:36:08AM +0100, Daniel Vetter wrote:
> > To match the drm_ioctl.c we already have.
> > 
> > Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
> > ---
> >  drivers/gpu/drm/drm_ioctl.c |   1 +
> >  include/drm/drmP.h          |  61 +-------------------------
> >  include/drm/drm_ioctl.h     | 102 ++++++++++++++++++++++++++++++++++++++++++++
> >  3 files changed, 104 insertions(+), 60 deletions(-)
> >  create mode 100644 include/drm/drm_ioctl.h
> > 
> > diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
> > index 601bb0ded9d2..7f4f4f48e390 100644
> > --- a/drivers/gpu/drm/drm_ioctl.c
> > +++ b/drivers/gpu/drm/drm_ioctl.c
> > @@ -28,6 +28,7 @@
> >   * OTHER DEALINGS IN THE SOFTWARE.
> >   */
> >  
> > +#include <drm/drm_ioctl.h>
> >  #include <drm/drmP.h>
> >  #include <drm/drm_auth.h>
> >  #include "drm_legacy.h"
> > diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> > index fc2a0744413d..248d2408e56b 100644
> > --- a/include/drm/drmP.h
> > +++ b/include/drm/drmP.h
> > @@ -80,6 +80,7 @@
> >  #include <drm/drm_file.h>
> >  #include <drm/drm_debugfs.h>
> >  #include <drm/drm_sysfs.h>
> > +#include <drm/drm_ioctl.h>
> 
> Same question as for the debugfs thing. Why do we need this?

I forgot to scroll down, oops :(

> >  struct module;
> >  
> > @@ -318,49 +319,6 @@ struct pci_controller;
> >  
> >  #define DRM_IF_VERSION(maj, min) (maj << 16 | min)
> >  
> > -/**
> > - * Ioctl function type.
> > - *
> > - * \param inode device inode.
> > - * \param file_priv DRM file private pointer.
> > - * \param cmd command.
> > - * \param arg argument.
> > - */
> > -typedef int drm_ioctl_t(struct drm_device *dev, void *data,
> > -			struct drm_file *file_priv);
> > -
> > -typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
> > -			       unsigned long arg);
> > -
> > -#define DRM_IOCTL_NR(n)                _IOC_NR(n)
> > -#define DRM_MAJOR       226
> > -
> > -#define DRM_AUTH	0x1
> > -#define	DRM_MASTER	0x2
> > -#define DRM_ROOT_ONLY	0x4
> > -#define DRM_CONTROL_ALLOW 0x8
> > -#define DRM_UNLOCKED	0x10
> > -#define DRM_RENDER_ALLOW 0x20
> > -
> > -struct drm_ioctl_desc {
> > -	unsigned int cmd;
> > -	int flags;
> > -	drm_ioctl_t *func;
> > -	const char *name;
> > -};
> > -
> > -/**
> > - * Creates a driver or general drm_ioctl_desc array entry for the given
> > - * ioctl, for use by drm_ioctl().
> > - */
> > -
> > -#define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags)				\
> > -	[DRM_IOCTL_NR(DRM_IOCTL_##ioctl) - DRM_COMMAND_BASE] = {	\
> > -		.cmd = DRM_IOCTL_##ioctl,				\
> > -		.func = _func,						\
> > -		.flags = _flags,					\
> > -		.name = #ioctl						\
> > -	 }
> >  
> >  /* Flags and return codes for get_vblank_timestamp() driver function. */
> >  #define DRM_CALLED_FROM_VBLIRQ 1
> > @@ -550,23 +508,6 @@ static inline int drm_device_is_unplugged(struct drm_device *dev)
> >  /*@{*/
> >  
> >  				/* Driver support (drm_drv.h) */
> > -extern int drm_ioctl_permit(u32 flags, struct drm_file *file_priv);
> > -extern long drm_ioctl(struct file *filp,
> > -		      unsigned int cmd, unsigned long arg);
> > -#ifdef CONFIG_COMPAT
> > -extern long drm_compat_ioctl(struct file *filp,
> > -			     unsigned int cmd, unsigned long arg);
> > -#else
> > -/* Let drm_compat_ioctl be assigned to .compat_ioctl unconditionally */
> > -#define drm_compat_ioctl NULL
> > -#endif
> > -extern bool drm_ioctl_flags(unsigned int nr, unsigned int *flags);
> > -
> > -/* Misc. IOCTL support (drm_ioctl.c) */
> > -int drm_noop(struct drm_device *dev, void *data,
> > -	     struct drm_file *file_priv);
> > -int drm_invalid_op(struct drm_device *dev, void *data,
> > -		   struct drm_file *file_priv);
> >  
> >  /*
> >   * These are exported to drivers so that they can implement fencing using
> > diff --git a/include/drm/drm_ioctl.h b/include/drm/drm_ioctl.h
> > new file mode 100644
> > index 000000000000..3c3677b5bdb2
> > --- /dev/null
> > +++ b/include/drm/drm_ioctl.h
> > @@ -0,0 +1,102 @@
> > +/*
> > + * Internal Header for the Direct Rendering Manager
> > + *
> > + * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
> > + * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
> > + * Copyright (c) 2009-2010, Code Aurora Forum.
> > + * All rights reserved.
> > + *
> > + * Author: Rickard E. (Rik) Faith <faith at valinux.com>
> > + * Author: Gareth Hughes <gareth at valinux.com>
> > + *
> > + * Permission is hereby granted, free of charge, to any person obtaining a
> > + * copy of this software and associated documentation files (the "Software"),
> > + * to deal in the Software without restriction, including without limitation
> > + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> > + * and/or sell copies of the Software, and to permit persons to whom the
> > + * Software is furnished to do so, subject to the following conditions:
> > + *
> > + * The above copyright notice and this permission notice (including the next
> > + * paragraph) shall be included in all copies or substantial portions of the
> > + * Software.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> > + * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> > + * OTHER DEALINGS IN THE SOFTWARE.
> > + */
> > +
> > +#ifndef _DRM_IOCTL_H_
> > +#define _DRM_IOCTL_H_
> > +
> > +#include <linux/types.h>
> > +
> > +#include <asm/ioctl.h>
> > +
> > +struct drm_device;
> > +struct drm_file;
> > +struct file;
> > +
> > +/**
> > + * Ioctl function type.
> > + *
> > + * \param inode device inode.
> > + * \param file_priv DRM file private pointer.
> > + * \param cmd command.
> > + * \param arg argument.
> > + */
> > +typedef int drm_ioctl_t(struct drm_device *dev, void *data,
> > +			struct drm_file *file_priv);
> > +
> > +typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
> > +			       unsigned long arg);
> > +
> > +#define DRM_IOCTL_NR(n)                _IOC_NR(n)
> 
> I wonder what's the point of this wrapper. Maybe leftovers from the
> out-of-tree days? Maybe nuke it while you're touching this stuff?

It's used in a lot of places (all the 32 bit compat code). I guess we
could nuke it (it does smell like *bsd compat cruft), but separate (big)
patch.

> > +#define DRM_MAJOR       226
> > +
> > +#define DRM_AUTH	0x1
> > +#define	DRM_MASTER	0x2
> > +#define DRM_ROOT_ONLY	0x4
> > +#define DRM_CONTROL_ALLOW 0x8
> > +#define DRM_UNLOCKED	0x10
> > +#define DRM_RENDER_ALLOW 0x20
> > +
> > +struct drm_ioctl_desc {
> > +	unsigned int cmd;
> > +	int flags;
> > +	drm_ioctl_t *func;
> > +	const char *name;
> > +};
> > +
> > +/**
> 
> s/**/*/ ?

It'll get addressed in the next patch, where I clean up the kernel-doc. I
assume I can still get your r-b for this patch here?

> > + * Creates a driver or general drm_ioctl_desc array entry for the given
> > + * ioctl, for use by drm_ioctl().
> > + */
> > +
> > +#define DRM_IOCTL_DEF_DRV(ioctl, _func, _flags)				\
> > +	[DRM_IOCTL_NR(DRM_IOCTL_##ioctl) - DRM_COMMAND_BASE] = {	\
> > +		.cmd = DRM_IOCTL_##ioctl,				\
> > +		.func = _func,						\
> > +		.flags = _flags,					\
> > +		.name = #ioctl						\
> > +	 }
>         ^
> 
> Spurious space

Will fix, thx a lot for reviewing.
-Daniel

> 
> Otherwise looks sane so
> Reviewed-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> 
> > +
> > +int drm_ioctl_permit(u32 flags, struct drm_file *file_priv);
> > +long drm_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
> > +#ifdef CONFIG_COMPAT
> > +long drm_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
> > +#else
> > +/* Let drm_compat_ioctl be assigned to .compat_ioctl unconditionally */
> > +#define drm_compat_ioctl NULL
> > +#endif
> > +bool drm_ioctl_flags(unsigned int nr, unsigned int *flags);
> > +
> > +int drm_noop(struct drm_device *dev, void *data,
> > +	     struct drm_file *file_priv);
> > +int drm_invalid_op(struct drm_device *dev, void *data,
> > +		   struct drm_file *file_priv);
> > +
> > +#endif /* _DRM_IOCTL_H_ */
> > -- 
> > 2.11.0
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> -- 
> Ville Syrjälä
> Intel OTC

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the Intel-gfx mailing list