Blame view

include/linux/ioport.h 7.69 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 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
105
106
107
  /* 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...
108
  extern struct resource *request_resource_conflict(struct resource *root, struct resource *new);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
109
  extern int request_resource(struct resource *root, struct resource *new);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
110
  extern int release_resource(struct resource *new);
5eeec0ec9   Yinghai Lu   resource: add rel...
111
  void release_child_resources(struct resource *new);
268364a0f   Yinghai Lu   IO resources: add...
112
113
114
  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...
115
  extern struct resource *insert_resource_conflict(struct resource *parent, struct resource *new);
cd6ef2ada   Adrian Bunk   [PATCH] The sched...
116
  extern int insert_resource(struct resource *parent, struct resource *new);
bef69ea0d   Linus Torvalds   Resource handling...
117
  extern void insert_resource_expand_to_fit(struct resource *root, struct resource *new);
fcb119183   Bjorn Helgaas   resources: add ar...
118
  extern void arch_remove_reservations(struct resource *avail);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
119
  extern int allocate_resource(struct resource *root, struct resource *new,
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
120
121
  			     resource_size_t size, resource_size_t min,
  			     resource_size_t max, resource_size_t align,
b26b2d494   Dominik Brodowski   resource/PCI: ali...
122
  			     resource_size_t (*alignf)(void *,
3b7a17fcd   Dominik Brodowski   resource/PCI: mar...
123
  						       const struct resource *,
b26b2d494   Dominik Brodowski   resource/PCI: ali...
124
125
  						       resource_size_t,
  						       resource_size_t),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
126
  			     void *alignf_data);
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
127
128
  int adjust_resource(struct resource *res, resource_size_t start,
  		    resource_size_t size);
884525655   Ivan Kokshaysky   PCI: clean up res...
129
  resource_size_t resource_alignment(struct resource *res);
f65380c07   Jean Delvare   resource: constif...
130
  static inline resource_size_t resource_size(const struct resource *res)
1a4e564b7   Magnus Damm   resource: add res...
131
132
133
  {
  	return res->end - res->start + 1;
  }
f65380c07   Jean Delvare   resource: constif...
134
  static inline unsigned long resource_type(const struct resource *res)
c9f66169f   Magnus Damm   resource: add res...
135
136
137
  {
  	return res->flags & IORESOURCE_TYPE_BITS;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
138
139
  
  /* Convenience shorthand with allocation */
8b6d043b7   Alan Cox   resource: shared ...
140
141
  #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...
142
143
144
145
  #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
146
  #define rename_region(region, newname) do { (region)->name = (newname); } while (0)
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
147
148
  extern struct resource * __request_region(struct resource *,
  					resource_size_t start,
6ae301e85   Randy Dunlap   resources: fix pa...
149
150
  					resource_size_t n,
  					const char *name, int flags);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
151
152
153
154
155
  
  /* 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...
156
157
158
  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
159

d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
160
161
  static inline int __deprecated check_region(resource_size_t s,
  						resource_size_t n)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
162
163
164
  {
  	return __check_region(&ioport_resource, s, n);
  }
9ac7849e3   Tejun Heo   devres: device re...
165
166
167
168
169
170
171
172
173
174
175
  
  /* 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...
176
  #define devm_release_region(dev, start, n) \
9ac7849e3   Tejun Heo   devres: device re...
177
  	__devm_release_region(dev, &ioport_resource, (start), (n))
dea420ce0   Hiroshi DOYU   include/linux/iop...
178
  #define devm_release_mem_region(dev, start, n) \
9ac7849e3   Tejun Heo   devres: device re...
179
180
181
182
  	__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...
183
  extern int iomem_map_sanity_check(resource_size_t addr, unsigned long size);
e8de1481f   Arjan van de Ven   resource: allow M...
184
  extern int iomem_is_exclusive(u64 addr);
9ac7849e3   Tejun Heo   devres: device re...
185

908eedc61   KAMEZAWA Hiroyuki   walk system ram r...
186
187
188
  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...
189
  #endif /* __ASSEMBLY__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
190
  #endif	/* _LINUX_IOPORT_H */