1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef _UIO_DRIVER_H_
15#define _UIO_DRIVER_H_
16
17#include <linux/fs.h>
18#include <linux/interrupt.h>
19
20struct module;
21struct uio_map;
22
23
24
25
26
27
28
29
30
31
32
33
34
35struct uio_mem {
36 const char *name;
37 phys_addr_t addr;
38 resource_size_t size;
39 int memtype;
40 void __iomem *internal_addr;
41 struct uio_map *map;
42};
43
44#define MAX_UIO_MAPS 5
45
46struct uio_portio;
47
48
49
50
51
52
53
54
55
56struct uio_port {
57 const char *name;
58 unsigned long start;
59 unsigned long size;
60 int porttype;
61 struct uio_portio *portio;
62};
63
64#define MAX_UIO_PORT_REGIONS 5
65
66struct uio_device {
67 struct module *owner;
68 struct device *dev;
69 int minor;
70 atomic_t event;
71 struct fasync_struct *async_queue;
72 wait_queue_head_t wait;
73 struct uio_info *info;
74 struct kobject *map_dir;
75 struct kobject *portio_dir;
76};
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94struct uio_info {
95 struct uio_device *uio_dev;
96 const char *name;
97 const char *version;
98 struct uio_mem mem[MAX_UIO_MAPS];
99 struct uio_port port[MAX_UIO_PORT_REGIONS];
100 long irq;
101 unsigned long irq_flags;
102 void *priv;
103 irqreturn_t (*handler)(int irq, struct uio_info *dev_info);
104 int (*mmap)(struct uio_info *info, struct vm_area_struct *vma);
105 int (*open)(struct uio_info *info, struct inode *inode);
106 int (*release)(struct uio_info *info, struct inode *inode);
107 int (*irqcontrol)(struct uio_info *info, s32 irq_on);
108};
109
110extern int __must_check
111 __uio_register_device(struct module *owner,
112 struct device *parent,
113 struct uio_info *info);
114
115
116#define uio_register_device(parent, info) \
117 __uio_register_device(THIS_MODULE, parent, info)
118
119extern void uio_unregister_device(struct uio_info *info);
120extern void uio_event_notify(struct uio_info *info);
121
122
123#define UIO_IRQ_CUSTOM -1
124#define UIO_IRQ_NONE 0
125
126
127#define UIO_MEM_NONE 0
128#define UIO_MEM_PHYS 1
129#define UIO_MEM_LOGICAL 2
130#define UIO_MEM_VIRTUAL 3
131
132
133#define UIO_PORT_NONE 0
134#define UIO_PORT_X86 1
135#define UIO_PORT_GPIO 2
136#define UIO_PORT_OTHER 3
137
138#endif
139