Blame view

include/linux/ioport.h 5.7 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
  /*
   * ioport.h	Definitions of routines for detecting, reserving and
   *		allocating system resources.
   *
   * Authors:	Linus Torvalds
   */
  
  #ifndef _LINUX_IOPORT_H
  #define _LINUX_IOPORT_H
  
  #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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  	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 */
  
  #define IORESOURCE_IO		0x00000100	/* Resource type */
  #define IORESOURCE_MEM		0x00000200
  #define IORESOURCE_IRQ		0x00000400
  #define IORESOURCE_DMA		0x00000800
  
  #define IORESOURCE_PREFETCH	0x00001000	/* No side effects */
  #define IORESOURCE_READONLY	0x00002000
  #define IORESOURCE_CACHEABLE	0x00004000
  #define IORESOURCE_RANGELENGTH	0x00008000
  #define IORESOURCE_SHADOWABLE	0x00010000
  #define IORESOURCE_BUS_HAS_VGA	0x00080000
  
  #define IORESOURCE_DISABLED	0x10000000
  #define IORESOURCE_UNSET	0x20000000
  #define IORESOURCE_AUTO		0x40000000
  #define IORESOURCE_BUSY		0x80000000	/* Driver has marked this resource busy */
  
  /* ISA PnP IRQ specific bits (IORESOURCE_BITS) */
  #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: ...
58
  #define IORESOURCE_IRQ_SHAREABLE	(1<<4)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  
  /* ISA PnP DMA specific bits (IORESOURCE_BITS) */
  #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)
  
  /* ISA PnP memory I/O specific bits (IORESOURCE_BITS) */
  #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)
  
  /* 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...
92
  #define IORESOURCE_ROM_BIOS_COPY	(1<<3)	/* ROM is BIOS copy, resource field overlaid */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
93

fb0f2b40f   Ralf Baechle   PCI legacy resour...
94
95
  /* 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
96
97
98
99
100
  /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
  extern struct resource ioport_resource;
  extern struct resource iomem_resource;
  
  extern int request_resource(struct resource *root, struct resource *new);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
101
  extern int release_resource(struct resource *new);
cd6ef2ada   Adrian Bunk   [PATCH] The sched...
102
  extern int insert_resource(struct resource *parent, struct resource *new);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
  extern int allocate_resource(struct resource *root, struct resource *new,
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
104
105
  			     resource_size_t size, resource_size_t min,
  			     resource_size_t max, resource_size_t align,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
106
  			     void (*alignf)(void *, struct resource *,
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
107
  					    resource_size_t, resource_size_t),
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
108
  			     void *alignf_data);
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
109
110
  int adjust_resource(struct resource *res, resource_size_t start,
  		    resource_size_t size);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
111

2842f1141   KAMEZAWA Hiroyuki   [PATCH] catch val...
112
113
  /* get registered SYSTEM_RAM resources in specified area */
  extern int find_next_system_ram(struct resource *res);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
114
115
116
117
  /* Convenience shorthand with allocation */
  #define request_region(start,n,name)	__request_region(&ioport_resource, (start), (n), (name))
  #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
  #define rename_region(region, newname) do { (region)->name = (newname); } while (0)
d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
118
119
120
  extern struct resource * __request_region(struct resource *,
  					resource_size_t start,
  					resource_size_t n, const char *name);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
121
122
123
124
125
  
  /* 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...
126
127
128
  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
129

d75fc8bbc   Greg Kroah-Hartman   [PATCH] 64bit res...
130
131
  static inline int __deprecated check_region(resource_size_t s,
  						resource_size_t n)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
132
133
134
  {
  	return __check_region(&ioport_resource, s, n);
  }
9ac7849e3   Tejun Heo   devres: device re...
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
  
  /* 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);
  
  #define devm_release_region(start,n) \
  	__devm_release_region(dev, &ioport_resource, (start), (n))
  #define devm_release_mem_region(start,n) \
  	__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);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
154
  #endif	/* _LINUX_IOPORT_H */