Blame view

include/linux/ioport.h 8.73 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
  /*
   * ioport.h	Definitions of routines for detecting, reserving and
   *		allocating system resources.
   *
   * Authors:	Linus Torvalds
   */
  
  #ifndef _LINUX_IOPORT_H
  #define _LINUX_IOPORT_H
c9cce83dd   Bernhard Walle   x86: remove exter...
10
  #ifndef __ASSEMBLY__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
  #include <linux/compiler.h>
cf7c712c1   Greg Kroah-Hartman   [PATCH] 64bit res...
12
  #include <linux/types.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
13
14
15
16
17
  /*
   * Resources are tree-like, allowing
   * nesting etc..
   */
  struct resource {
cf7c712c1   Greg Kroah-Hartman   [PATCH] 64bit res...
18
19
  	resource_size_t start;
  	resource_size_t end;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
20
  	const char *name;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  	unsigned long flags;
  	struct resource *parent, *sibling, *child;
  };
  
  struct resource_list {
  	struct resource_list *next;
  	struct resource *res;
  	struct pci_dev *dev;
  };
  
  /*
   * IO resources have these defined flags.
   */
  #define IORESOURCE_BITS		0x000000ff	/* Bus-specific bits */
cd7e9fcd1   Bjorn Helgaas   resource: expand ...
35
  #define IORESOURCE_TYPE_BITS	0x00001f00	/* Resource type */
c9f66169f   Magnus Damm   resource: add res...
36
  #define IORESOURCE_IO		0x00000100
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
37
38
39
  #define IORESOURCE_MEM		0x00000200
  #define IORESOURCE_IRQ		0x00000400
  #define IORESOURCE_DMA		0x00000800
0f4050c7d   Bjorn Helgaas   resource: add bus...
40
  #define IORESOURCE_BUS		0x00001000
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
41

cd7e9fcd1   Bjorn Helgaas   resource: expand ...
42
43
44
45
46
  #define IORESOURCE_PREFETCH	0x00002000	/* No side effects */
  #define IORESOURCE_READONLY	0x00004000
  #define IORESOURCE_CACHEABLE	0x00008000
  #define IORESOURCE_RANGELENGTH	0x00010000
  #define IORESOURCE_SHADOWABLE	0x00020000
884525655   Ivan Kokshaysky   PCI: clean up res...
47

cd7e9fcd1   Bjorn Helgaas   resource: expand ...
48
49
  #define IORESOURCE_SIZEALIGN	0x00040000	/* size indicates alignment */
  #define IORESOURCE_STARTALIGN	0x00080000	/* start field is alignment */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
50

1f82de10d   Yinghai Lu   PCI/x86: don't as...
51
  #define IORESOURCE_MEM_64	0x00100000
9d7cca042   Bjorn Helgaas   resource: add win...
52
  #define IORESOURCE_WINDOW	0x00200000	/* forwarded by bridge */
8b6d043b7   Alan Cox   resource: shared ...
53
  #define IORESOURCE_MUXED	0x00400000	/* Resource is software muxed */
1f82de10d   Yinghai Lu   PCI/x86: don't as...
54

e8de1481f   Arjan van de Ven   resource: allow M...
55
  #define IORESOURCE_EXCLUSIVE	0x08000000	/* Userland may not map this resource */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
56
57
58
59
  #define IORESOURCE_DISABLED	0x10000000
  #define IORESOURCE_UNSET	0x20000000
  #define IORESOURCE_AUTO		0x40000000
  #define IORESOURCE_BUSY		0x80000000	/* Driver has marked this resource busy */
e9fe9e188   Bjorn Helgaas   pnpacpi: fix IRQ ...
60
  /* PnP IRQ specific bits (IORESOURCE_BITS) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
61
62
63
64
  #define IORESOURCE_IRQ_HIGHEDGE		(1<<0)
  #define IORESOURCE_IRQ_LOWEDGE		(1<<1)
  #define IORESOURCE_IRQ_HIGHLEVEL	(1<<2)
  #define IORESOURCE_IRQ_LOWLEVEL		(1<<3)
c32928c57   Bjorn Helgaas   [PATCH] PNPACPI: ...
65
  #define IORESOURCE_IRQ_SHAREABLE	(1<<4)
d5ebde6ef   Bjorn Helgaas   PNP: support opti...
66
  #define IORESOURCE_IRQ_OPTIONAL 	(1<<5)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67

e9fe9e188   Bjorn Helgaas   pnpacpi: fix IRQ ...
68
  /* PnP DMA specific bits (IORESOURCE_BITS) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  #define IORESOURCE_DMA_TYPE_MASK	(3<<0)
  #define IORESOURCE_DMA_8BIT		(0<<0)
  #define IORESOURCE_DMA_8AND16BIT	(1<<0)
  #define IORESOURCE_DMA_16BIT		(2<<0)
  
  #define IORESOURCE_DMA_MASTER		(1<<2)
  #define IORESOURCE_DMA_BYTE		(1<<3)
  #define IORESOURCE_DMA_WORD		(1<<4)
  
  #define IORESOURCE_DMA_SPEED_MASK	(3<<6)
  #define IORESOURCE_DMA_COMPATIBLE	(0<<6)
  #define IORESOURCE_DMA_TYPEA		(1<<6)
  #define IORESOURCE_DMA_TYPEB		(2<<6)
  #define IORESOURCE_DMA_TYPEF		(3<<6)
e9fe9e188   Bjorn Helgaas   pnpacpi: fix IRQ ...
83
  /* PnP memory I/O specific bits (IORESOURCE_BITS) */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
84
85
86
87
88
89
90
91
92
93
  #define IORESOURCE_MEM_WRITEABLE	(1<<0)	/* dup: IORESOURCE_READONLY */
  #define IORESOURCE_MEM_CACHEABLE	(1<<1)	/* dup: IORESOURCE_CACHEABLE */
  #define IORESOURCE_MEM_RANGELENGTH	(1<<2)	/* dup: IORESOURCE_RANGELENGTH */
  #define IORESOURCE_MEM_TYPE_MASK	(3<<3)
  #define IORESOURCE_MEM_8BIT		(0<<3)
  #define IORESOURCE_MEM_16BIT		(1<<3)
  #define IORESOURCE_MEM_8AND16BIT	(2<<3)
  #define IORESOURCE_MEM_32BIT		(3<<3)
  #define IORESOURCE_MEM_SHADOWABLE	(1<<5)	/* dup: IORESOURCE_SHADOWABLE */
  #define IORESOURCE_MEM_EXPANSIONROM	(1<<6)
08c9f262f   Bjorn Helgaas   PNP: define PNP-s...
94
95
96
  /* PnP I/O specific bits (IORESOURCE_BITS) */
  #define IORESOURCE_IO_16BIT_ADDR	(1<<0)
  #define IORESOURCE_IO_FIXED		(1<<1)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
97
98
99
100
  /* PCI ROM control bits (IORESOURCE_BITS) */
  #define IORESOURCE_ROM_ENABLE		(1<<0)	/* ROM is enabled, same as PCI_ROM_ADDRESS_ENABLE */
  #define IORESOURCE_ROM_SHADOW		(1<<1)	/* ROM is copy at C000:0 */
  #define IORESOURCE_ROM_COPY		(1<<2)	/* ROM is alloc'd copy, resource field overlaid */
a2302c68d   John Keller   Altix: Initial AC...
101
  #define IORESOURCE_ROM_BIOS_COPY	(1<<3)	/* ROM is BIOS copy, resource field overlaid */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
102

fb0f2b40f   Ralf Baechle   PCI legacy resour...
103
104
  /* PCI control bits.  Shares IORESOURCE_BITS with above PCI ROM.  */
  #define IORESOURCE_PCI_FIXED		(1<<4)	/* Do not move resource */
a0e44d4a7   Uwe Kleine-König   include/linux/iop...
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
  
  /* helpers to define resources */
  #define DEFINE_RES_NAMED(_start, _size, _name, _flags)			\
  	{								\
  		.start = (_start),					\
  		.end = (_start) + (_size) - 1,				\
  		.name = (_name),					\
  		.flags = (_flags),					\
  	}
  
  #define DEFINE_RES_IO_NAMED(_start, _size, _name)			\
  	DEFINE_RES_NAMED((_start), (_size), (_name), IORESOURCE_IO)
  #define DEFINE_RES_IO(_start, _size)					\
  	DEFINE_RES_IO_NAMED((_start), (_size), NULL)
  
  #define DEFINE_RES_MEM_NAMED(_start, _size, _name)			\
  	DEFINE_RES_NAMED((_start), (_size), (_name), IORESOURCE_MEM)
  #define DEFINE_RES_MEM(_start, _size)					\
  	DEFINE_RES_MEM_NAMED((_start), (_size), NULL)
  
  #define DEFINE_RES_IRQ_NAMED(_irq, _name)				\
  	DEFINE_RES_NAMED((_irq), 1, (_name), IORESOURCE_IRQ)
  #define DEFINE_RES_IRQ(_irq)						\
  	DEFINE_RES_IRQ_NAMED((_irq), NULL)
  
  #define DEFINE_RES_DMA_NAMED(_dma, _name)				\
  	DEFINE_RES_NAMED((_dma), 1, (_name), IORESOURCE_DMA)
  #define DEFINE_RES_DMA(_dma)						\
  	DEFINE_RES_DMA_NAMED((_dma), NULL)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
134
135
136
  /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
  extern struct resource ioport_resource;
  extern struct resource iomem_resource;
66f1207bc   Bjorn Helgaas   resources: add in...
137
  extern struct resource *request_resource_conflict(struct resource *root, struct resource *new);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
138
  extern int request_resource(struct resource *root, struct resource *new);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
139
  extern int release_resource(struct resource *new);
5eeec0ec9   Yinghai Lu   resource: add rel...
140
  void release_child_resources(struct resource *new);
268364a0f   Yinghai Lu   IO resources: add...
141
142
143
  extern void reserve_region_with_split(struct resource *root,
  			     resource_size_t start, resource_size_t end,
  			     const char *name);
66f1207bc   Bjorn Helgaas   resources: add in...
144
  extern struct resource *insert_resource_conflict(struct resource *parent, struct resource *new);
cd6ef2ada   Adrian Bunk   [PATCH] The sched...
145
  extern int insert_resource(struct resource *parent, struct resource *new);
bef69ea0d   Linus Torvalds   Resource handling...
146
  extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new);
fcb119183   Bjorn Helgaas   resources: add ar...
147
  extern void arch_remove_reservations(struct resource *avail);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
148
  extern int allocate_resource(struct resource *root, struct resource *new,
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
149
150
  			     resource_size_t size, resource_size_t min,
  			     resource_size_t max, resource_size_t align,
b26b2d494   Dominik Brodowski   resource/PCI: ali...
151
  			     resource_size_t (*alignf)(void *,
3b7a17fcd   Dominik Brodowski   resource/PCI: mar...
152
  						       const struct resource *,
b26b2d494   Dominik Brodowski   resource/PCI: ali...
153
154
  						       resource_size_t,
  						       resource_size_t),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
155
  			     void *alignf_data);
1c388919d   Geert Uytterhoeven   resources: Add lo...
156
  struct resource *lookup_resource(struct resource *root, resource_size_t start);
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
157
158
  int adjust_resource(struct resource *res, resource_size_t start,
  		    resource_size_t size);
884525655   Ivan Kokshaysky   PCI: clean up res...
159
  resource_size_t resource_alignment(struct resource *res);
f65380c07   Jean Delvare   resource: constif...
160
  static inline resource_size_t resource_size(const struct resource *res)
1a4e564b7   Magnus Damm   resource: add res...
161
162
163
  {
  	return res->end - res->start + 1;
  }
f65380c07   Jean Delvare   resource: constif...
164
  static inline unsigned long resource_type(const struct resource *res)
c9f66169f   Magnus Damm   resource: add res...
165
166
167
  {
  	return res->flags & IORESOURCE_TYPE_BITS;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
168
169
  
  /* Convenience shorthand with allocation */
8b6d043b7   Alan Cox   resource: shared ...
170
171
  #define request_region(start,n,name)		__request_region(&ioport_resource, (start), (n), (name), 0)
  #define request_muxed_region(start,n,name)	__request_region(&ioport_resource, (start), (n), (name), IORESOURCE_MUXED)
e8de1481f   Arjan van de Ven   resource: allow M...
172
173
174
175
  #define __request_mem_region(start,n,name, excl) __request_region(&iomem_resource, (start), (n), (name), excl)
  #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name), 0)
  #define request_mem_region_exclusive(start,n,name) \
  	__request_region(&iomem_resource, (start), (n), (name), IORESOURCE_EXCLUSIVE)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
176
  #define rename_region(region, newname) do { (region)->name = (newname); } while (0)
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
177
178
  extern struct resource * __request_region(struct resource *,
  					resource_size_t start,
6ae301e85   Randy Dunlap   resources: fix pa...
179
180
  					resource_size_t n,
  					const char *name, int flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
181
182
183
184
185
  
  /* Compatibility cruft */
  #define release_region(start,n)	__release_region(&ioport_resource, (start), (n))
  #define check_mem_region(start,n)	__check_region(&iomem_resource, (start), (n))
  #define release_mem_region(start,n)	__release_region(&iomem_resource, (start), (n))
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
186
187
188
  extern int __check_region(struct resource *, resource_size_t, resource_size_t);
  extern void __release_region(struct resource *, resource_size_t,
  				resource_size_t);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
189

d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
190
191
  static inline int __deprecated check_region(resource_size_t s,
  						resource_size_t n)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
192
193
194
  {
  	return __check_region(&ioport_resource, s, n);
  }
9ac7849e3   Tejun Heo   devres: device re...
195
196
197
198
199
200
201
202
203
204
205
  
  /* Wrappers for managed devices */
  struct device;
  #define devm_request_region(dev,start,n,name) \
  	__devm_request_region(dev, &ioport_resource, (start), (n), (name))
  #define devm_request_mem_region(dev,start,n,name) \
  	__devm_request_region(dev, &iomem_resource, (start), (n), (name))
  
  extern struct resource * __devm_request_region(struct device *dev,
  				struct resource *parent, resource_size_t start,
  				resource_size_t n, const char *name);
dea420ce0   Hiroshi DOYU   include/linux/iop...
206
  #define devm_release_region(dev, start, n) \
9ac7849e3   Tejun Heo   devres: device re...
207
  	__devm_release_region(dev, &ioport_resource, (start), (n))
dea420ce0   Hiroshi DOYU   include/linux/iop...
208
  #define devm_release_mem_region(dev, start, n) \
9ac7849e3   Tejun Heo   devres: device re...
209
210
211
212
  	__devm_release_region(dev, &iomem_resource, (start), (n))
  
  extern void __devm_release_region(struct device *dev, struct resource *parent,
  				  resource_size_t start, resource_size_t n);
379daf629   Suresh Siddha   IO resources, x86...
213
  extern int iomem_map_sanity_check(resource_size_t addr, unsigned long size);
e8de1481f   Arjan van de Ven   resource: allow M...
214
  extern int iomem_is_exclusive(u64 addr);
9ac7849e3   Tejun Heo   devres: device re...
215

908eedc61   KAMEZAWA Hiroyuki   walk system ram r...
216
217
218
  extern int
  walk_system_ram_range(unsigned long start_pfn, unsigned long nr_pages,
  		void *arg, int (*func)(unsigned long, unsigned long, void *));
c9cce83dd   Bernhard Walle   x86: remove exter...
219
  #endif /* __ASSEMBLY__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
220
  #endif	/* _LINUX_IOPORT_H */