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