Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * include/linux/uio_driver.h
  3  *
  4  * Copyright(C) 2005, Benedikt Spranger <b.spranger@linutronix.de>
  5  * Copyright(C) 2005, Thomas Gleixner <tglx@linutronix.de>
  6  * Copyright(C) 2006, Hans J. Koch <hjk@linutronix.de>
  7  * Copyright(C) 2006, Greg Kroah-Hartman <greg@kroah.com>
  8  *
  9  * Userspace IO driver.
 10  *
 11  * Licensed under the GPLv2 only.
 12  */
 13 
 14 #ifndef _UIO_DRIVER_H_
 15 #define _UIO_DRIVER_H_
 16 
 17 #include <linux/module.h>
 18 #include <linux/fs.h>
 19 #include <linux/interrupt.h>
 20 
 21 struct uio_map;
 22 
 23 /**
 24  * struct uio_mem - description of a UIO memory region
 25  * @addr:               address of the device's memory
 26  * @size:               size of IO
 27  * @memtype:            type of memory addr points to
 28  * @internal_addr:      ioremap-ped version of addr, for driver internal use
 29  * @map:                for use by the UIO core only.
 30  */
 31 struct uio_mem {
 32         unsigned long           addr;
 33         unsigned long           size;
 34         int                     memtype;
 35         void __iomem            *internal_addr;
 36         struct uio_map          *map;
 37 };
 38 
 39 #define MAX_UIO_MAPS    5
 40 
 41 struct uio_device;
 42 
 43 /**
 44  * struct uio_info - UIO device capabilities
 45  * @uio_dev:            the UIO device this info belongs to
 46  * @name:               device name
 47  * @version:            device driver version
 48  * @mem:                list of mappable memory regions, size==0 for end of list
 49  * @irq:                interrupt number or UIO_IRQ_CUSTOM
 50  * @irq_flags:          flags for request_irq()
 51  * @priv:               optional private data
 52  * @handler:            the device's irq handler
 53  * @mmap:               mmap operation for this uio device
 54  * @open:               open operation for this uio device
 55  * @release:            release operation for this uio device
 56  */
 57 struct uio_info {
 58         struct uio_device       *uio_dev;
 59         char                    *name;
 60         char                    *version;
 61         struct uio_mem          mem[MAX_UIO_MAPS];
 62         long                    irq;
 63         unsigned long           irq_flags;
 64         void                    *priv;
 65         irqreturn_t (*handler)(int irq, struct uio_info *dev_info);
 66         int (*mmap)(struct uio_info *info, struct vm_area_struct *vma);
 67         int (*open)(struct uio_info *info, struct inode *inode);
 68         int (*release)(struct uio_info *info, struct inode *inode);
 69 };
 70 
 71 extern int __must_check
 72         __uio_register_device(struct module *owner,
 73                               struct device *parent,
 74                               struct uio_info *info);
 75 static inline int __must_check
 76         uio_register_device(struct device *parent, struct uio_info *info)
 77 {
 78         return __uio_register_device(THIS_MODULE, parent, info);
 79 }
 80 extern void uio_unregister_device(struct uio_info *info);
 81 extern void uio_event_notify(struct uio_info *info);
 82 
 83 /* defines for uio_device->irq */
 84 #define UIO_IRQ_CUSTOM  -1
 85 #define UIO_IRQ_NONE    -2
 86 
 87 /* defines for uio_device->memtype */
 88 #define UIO_MEM_NONE    0
 89 #define UIO_MEM_PHYS    1
 90 #define UIO_MEM_LOGICAL 2
 91 #define UIO_MEM_VIRTUAL 3
 92 
 93 #endif /* _LINUX_UIO_DRIVER_H_ */
 94 
  This page was automatically generated by the LXR engine.