File: /usr/src/linux/include/linux/ioport.h

1     /*
2      * ioport.h	Definitions of routines for detecting, reserving and
3      *		allocating system resources.
4      *
5      * Authors:	Linus Torvalds
6      */
7     
8     #ifndef _LINUX_IOPORT_H
9     #define _LINUX_IOPORT_H
10     
11     /*
12      * Resources are tree-like, allowing
13      * nesting etc..
14      */
15     struct resource {
16     	const char *name;
17     	unsigned long start, end;
18     	unsigned long flags;
19     	struct resource *parent, *sibling, *child;
20     };
21     
22     struct resource_list {
23     	struct resource_list *next;
24     	struct resource *res;
25     	struct pci_dev *dev;
26     };
27     
28     /*
29      * IO resources have these defined flags.
30      */
31     #define IORESOURCE_BITS		0x000000ff	/* Bus-specific bits */
32     
33     #define IORESOURCE_IO		0x00000100	/* Resource type */
34     #define IORESOURCE_MEM		0x00000200
35     #define IORESOURCE_IRQ		0x00000400
36     #define IORESOURCE_DMA		0x00000800
37     
38     #define IORESOURCE_PREFETCH	0x00001000	/* No side effects */
39     #define IORESOURCE_READONLY	0x00002000
40     #define IORESOURCE_CACHEABLE	0x00004000
41     #define IORESOURCE_RANGELENGTH	0x00008000
42     #define IORESOURCE_SHADOWABLE	0x00010000
43     #define IORESOURCE_BUS_HAS_VGA	0x00080000
44     
45     #define IORESOURCE_UNSET	0x20000000
46     #define IORESOURCE_AUTO		0x40000000
47     #define IORESOURCE_BUSY		0x80000000	/* Driver has marked this resource busy */
48     
49     /* ISA PnP IRQ specific bits (IORESOURCE_BITS) */
50     #define IORESOURCE_IRQ_HIGHEDGE		(1<<0)
51     #define IORESOURCE_IRQ_LOWEDGE		(1<<1)
52     #define IORESOURCE_IRQ_HIGHLEVEL	(1<<2)
53     #define IORESOURCE_IRQ_LOWLEVEL		(1<<3)
54     
55     /* ISA PnP DMA specific bits (IORESOURCE_BITS) */
56     #define IORESOURCE_DMA_TYPE_MASK	(3<<0)
57     #define IORESOURCE_DMA_8BIT		(0<<0)
58     #define IORESOURCE_DMA_8AND16BIT	(1<<0)
59     #define IORESOURCE_DMA_16BIT		(2<<0)
60     
61     #define IORESOURCE_DMA_MASTER		(1<<2)
62     #define IORESOURCE_DMA_BYTE		(1<<3)
63     #define IORESOURCE_DMA_WORD		(1<<4)
64     
65     #define IORESOURCE_DMA_SPEED_MASK	(3<<6)
66     #define IORESOURCE_DMA_COMPATIBLE	(0<<6)
67     #define IORESOURCE_DMA_TYPEA		(1<<6)
68     #define IORESOURCE_DMA_TYPEB		(2<<6)
69     #define IORESOURCE_DMA_TYPEF		(3<<6)
70     
71     /* ISA PnP memory I/O specific bits (IORESOURCE_BITS) */
72     #define IORESOURCE_MEM_WRITEABLE	(1<<0)	/* dup: IORESOURCE_READONLY */
73     #define IORESOURCE_MEM_CACHEABLE	(1<<1)	/* dup: IORESOURCE_CACHEABLE */
74     #define IORESOURCE_MEM_RANGELENGTH	(1<<2)	/* dup: IORESOURCE_RANGELENGTH */
75     #define IORESOURCE_MEM_TYPE_MASK	(3<<3)
76     #define IORESOURCE_MEM_8BIT		(0<<3)
77     #define IORESOURCE_MEM_16BIT		(1<<3)
78     #define IORESOURCE_MEM_8AND16BIT	(2<<3)
79     #define IORESOURCE_MEM_SHADOWABLE	(1<<5)	/* dup: IORESOURCE_SHADOWABLE */
80     #define IORESOURCE_MEM_EXPANSIONROM	(1<<6)
81     
82     /* PC/ISA/whatever - the normal PC address spaces: IO and memory */
83     extern struct resource ioport_resource;
84     extern struct resource iomem_resource;
85     
86     extern int get_resource_list(struct resource *, char *buf, int size);
87     
88     extern int check_resource(struct resource *root, unsigned long, unsigned long);
89     extern int request_resource(struct resource *root, struct resource *new);
90     extern int release_resource(struct resource *new);
91     extern int allocate_resource(struct resource *root, struct resource *new,
92     			     unsigned long size,
93     			     unsigned long min, unsigned long max,
94     			     unsigned long align,
95     			     void (*alignf)(void *, struct resource *, unsigned long),
96     			     void *alignf_data);
97     
98     /* Convenience shorthand with allocation */
99     #define request_region(start,n,name)	__request_region(&ioport_resource, (start), (n), (name))
100     #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
101     
102     extern struct resource * __request_region(struct resource *, unsigned long start, unsigned long n, const char *name);
103     
104     /* Compatibility cruft */
105     #define check_region(start,n)	__check_region(&ioport_resource, (start), (n))
106     #define release_region(start,n)	__release_region(&ioport_resource, (start), (n))
107     #define check_mem_region(start,n)	__check_region(&iomem_resource, (start), (n))
108     #define release_mem_region(start,n)	__release_region(&iomem_resource, (start), (n))
109     
110     extern int __check_region(struct resource *, unsigned long, unsigned long);
111     extern void __release_region(struct resource *, unsigned long, unsigned long);
112     
113     #define get_ioport_list(buf)	get_resource_list(&ioport_resource, buf, PAGE_SIZE)
114     #define get_mem_list(buf)	get_resource_list(&iomem_resource, buf, PAGE_SIZE)
115     
116     #define HAVE_AUTOIRQ
117     extern void autoirq_setup(int waittime);
118     extern int autoirq_report(int waittime);
119     
120     #endif	/* _LINUX_IOPORT_H */
121