mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 08:19:28 +00:00
![Paul Gortmaker](/assets/img/avatar_default.png)
The <linux/module.h> pretty much brings in the kitchen sink along with it, so it should be avoided wherever reasonably possible in terms of being included from other commonly used <linux/something.h> files, as it results in a measureable increase on compile times. The worst culprit was probably device.h since it is used everywhere. This file also had an implicit dependency/usage of mutex.h which was masked by module.h, and is also fixed here at the same time. There are over a dozen other headers that simply declare the struct instead of pulling in the whole file, so follow their lead and simply make it a few more. Most of the implicit dependencies on module.h being present by these headers pulling it in have been now weeded out, so we can finally make this change with hopefully minimal breakage. Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
128 lines
3.5 KiB
C
128 lines
3.5 KiB
C
/*
|
|
* include/linux/uio_driver.h
|
|
*
|
|
* Copyright(C) 2005, Benedikt Spranger <b.spranger@linutronix.de>
|
|
* Copyright(C) 2005, Thomas Gleixner <tglx@linutronix.de>
|
|
* Copyright(C) 2006, Hans J. Koch <hjk@hansjkoch.de>
|
|
* Copyright(C) 2006, Greg Kroah-Hartman <greg@kroah.com>
|
|
*
|
|
* Userspace IO driver.
|
|
*
|
|
* Licensed under the GPLv2 only.
|
|
*/
|
|
|
|
#ifndef _UIO_DRIVER_H_
|
|
#define _UIO_DRIVER_H_
|
|
|
|
#include <linux/fs.h>
|
|
#include <linux/interrupt.h>
|
|
|
|
struct module;
|
|
struct uio_map;
|
|
|
|
/**
|
|
* struct uio_mem - description of a UIO memory region
|
|
* @name: name of the memory region for identification
|
|
* @addr: address of the device's memory (phys_addr is used since
|
|
* addr can be logical, virtual, or physical & phys_addr_t
|
|
* should always be large enough to handle any of the
|
|
* address types)
|
|
* @size: size of IO
|
|
* @memtype: type of memory addr points to
|
|
* @internal_addr: ioremap-ped version of addr, for driver internal use
|
|
* @map: for use by the UIO core only.
|
|
*/
|
|
struct uio_mem {
|
|
const char *name;
|
|
phys_addr_t addr;
|
|
unsigned long size;
|
|
int memtype;
|
|
void __iomem *internal_addr;
|
|
struct uio_map *map;
|
|
};
|
|
|
|
#define MAX_UIO_MAPS 5
|
|
|
|
struct uio_portio;
|
|
|
|
/**
|
|
* struct uio_port - description of a UIO port region
|
|
* @name: name of the port region for identification
|
|
* @start: start of port region
|
|
* @size: size of port region
|
|
* @porttype: type of port (see UIO_PORT_* below)
|
|
* @portio: for use by the UIO core only.
|
|
*/
|
|
struct uio_port {
|
|
const char *name;
|
|
unsigned long start;
|
|
unsigned long size;
|
|
int porttype;
|
|
struct uio_portio *portio;
|
|
};
|
|
|
|
#define MAX_UIO_PORT_REGIONS 5
|
|
|
|
struct uio_device;
|
|
|
|
/**
|
|
* struct uio_info - UIO device capabilities
|
|
* @uio_dev: the UIO device this info belongs to
|
|
* @name: device name
|
|
* @version: device driver version
|
|
* @mem: list of mappable memory regions, size==0 for end of list
|
|
* @port: list of port regions, size==0 for end of list
|
|
* @irq: interrupt number or UIO_IRQ_CUSTOM
|
|
* @irq_flags: flags for request_irq()
|
|
* @priv: optional private data
|
|
* @handler: the device's irq handler
|
|
* @mmap: mmap operation for this uio device
|
|
* @open: open operation for this uio device
|
|
* @release: release operation for this uio device
|
|
* @irqcontrol: disable/enable irqs when 0/1 is written to /dev/uioX
|
|
*/
|
|
struct uio_info {
|
|
struct uio_device *uio_dev;
|
|
const char *name;
|
|
const char *version;
|
|
struct uio_mem mem[MAX_UIO_MAPS];
|
|
struct uio_port port[MAX_UIO_PORT_REGIONS];
|
|
long irq;
|
|
unsigned long irq_flags;
|
|
void *priv;
|
|
irqreturn_t (*handler)(int irq, struct uio_info *dev_info);
|
|
int (*mmap)(struct uio_info *info, struct vm_area_struct *vma);
|
|
int (*open)(struct uio_info *info, struct inode *inode);
|
|
int (*release)(struct uio_info *info, struct inode *inode);
|
|
int (*irqcontrol)(struct uio_info *info, s32 irq_on);
|
|
};
|
|
|
|
extern int __must_check
|
|
__uio_register_device(struct module *owner,
|
|
struct device *parent,
|
|
struct uio_info *info);
|
|
|
|
/* use a define to avoid include chaining to get THIS_MODULE */
|
|
#define uio_register_device(parent, info) \
|
|
__uio_register_device(THIS_MODULE, parent, info)
|
|
|
|
extern void uio_unregister_device(struct uio_info *info);
|
|
extern void uio_event_notify(struct uio_info *info);
|
|
|
|
/* defines for uio_info->irq */
|
|
#define UIO_IRQ_CUSTOM -1
|
|
#define UIO_IRQ_NONE 0
|
|
|
|
/* defines for uio_mem->memtype */
|
|
#define UIO_MEM_NONE 0
|
|
#define UIO_MEM_PHYS 1
|
|
#define UIO_MEM_LOGICAL 2
|
|
#define UIO_MEM_VIRTUAL 3
|
|
|
|
/* defines for uio_port->porttype */
|
|
#define UIO_PORT_NONE 0
|
|
#define UIO_PORT_X86 1
|
|
#define UIO_PORT_GPIO 2
|
|
#define UIO_PORT_OTHER 3
|
|
|
|
#endif /* _LINUX_UIO_DRIVER_H_ */
|