source: GPL/trunk/include/linux/pnp.h@ 587

Last change on this file since 587 was 587, checked in by David Azarewicz, 9 years ago

Rearrange directory structure
rework makefiles
cleanup files

  • Property svn:eol-style set to native
File size: 7.4 KB
Line 
1/*
2 * Linux Plug and Play Support
3 * Copyright by Adam Belay <ambx1@neo.rr.com>
4 *
5 * Reduced and backported for compatibility reasons for 2.2 and
6 * 2.4 kernels by Jaroslav Kysela <perex@suse.cz>
7 *
8 */
9
10#ifndef _LINUX_PNP_H
11#define _LINUX_PNP_H
12
13#ifdef __KERNEL__
14
15#include <linux/isapnp.h>
16#include <linux/list.h>
17#include <linux/pm.h>
18
19#define PNP_MAX_PORT 8
20#define PNP_MAX_MEM 4
21#define PNP_MAX_IRQ 2
22#define PNP_MAX_DMA 2
23#define PNP_MAX_DEVICES 8
24#define PNP_ID_LEN 8
25
26#ifndef ISAPNP_ALSA_LOCAL
27#define isapnp_dev pci_dev
28#define isapnp_card pci_bus
29#endif
30
31struct pnp_card {
32 struct isapnp_card p;
33};
34
35struct pnp_dev {
36 struct isapnp_dev p;
37 void * driver_data;
38 struct pm_dev *pm;
39};
40
41static inline void *pnp_get_drvdata (struct pnp_dev *dev)
42{
43 return dev->driver_data;
44}
45
46static inline void pnp_set_drvdata (struct pnp_dev *dev, void *data)
47{
48 dev->driver_data = data;
49}
50
51/*
52 * Resource Management
53 */
54
55/* Use these instead of directly reading pnp_dev to get resource information */
56#define pnp_port_start(dev,bar) ((dev)->p.resource[(bar)].start)
57#define pnp_port_end(dev,bar) ((dev)->p.resource[(bar)].end)
58#define pnp_port_flags(dev,bar) ((dev)->p.resource[(bar)].flags)
59#define pnp_port_valid(dev,bar) (pnp_port_flags((dev),(bar)) & IORESOURCE_IO)
60#define pnp_port_len(dev,bar) \
61 ((pnp_port_start((dev),(bar)) == 0 && \
62 pnp_port_end((dev),(bar)) == \
63 pnp_port_start((dev),(bar))) ? 0 : \
64 \
65 (pnp_port_end((dev),(bar)) - \
66 pnp_port_start((dev),(bar)) + 1))
67
68#define pnp_mem_start(dev,bar) ((dev)->p.resource[(bar)+8].start)
69#define pnp_mem_end(dev,bar) ((dev)->p.resource[(bar)+8].end)
70#define pnp_mem_flags(dev,bar) ((dev)->p.resource[(bar)+8].flags)
71#define pnp_mem_valid(dev,bar) (pnp_mem_flags((dev),(bar)) & IORESOURCE_MEM)
72#define pnp_mem_len(dev,bar) \
73 ((pnp_mem_start((dev),(bar)) == 0 && \
74 pnp_mem_end((dev),(bar)) == \
75 pnp_mem_start((dev),(bar))) ? 0 : \
76 \
77 (pnp_mem_end((dev),(bar)) - \
78 pnp_mem_start((dev),(bar)) + 1))
79
80#define pnp_irq(dev,bar) ((dev)->p.irq_resource[(bar)].start)
81#define pnp_irq_flags(dev,bar) ((dev)->p.irq_resource[(bar)].flags)
82#define pnp_irq_valid(dev,bar) (pnp_irq_flags((dev),(bar)) & IORESOURCE_IRQ)
83
84#define pnp_dma(dev,bar) ((dev)->p.dma_resource[(bar)].start)
85#define pnp_dma_flags(dev,bar) ((dev)->p.dma_resource[(bar)].flags)
86#define pnp_dma_valid(dev,bar) (pnp_dma_flags((dev),(bar)) & IORESOURCE_DMA)
87
88#define PNP_PORT_FLAG_16BITADDR ISAPNP_PORT_FLAG_16BITADDR
89#define PNP_PORT_FLAG_FIXED ISAPNP_PORT_FLAG_FIXED
90
91#define PNP_RES_PRIORITY_PREFERRED ISAPNP_RES_PRIORITY_PREFERRED
92#define PNP_RES_PRIORITY_ACCEPTABLE ISAPNP_RES_PRIORITY_ACCEPTABLE
93#define PNP_RES_PRIORITY_FUNCTIONAL ISAPNP_RES_PRIORITY_FUNCTIONAL
94#define PNP_RES_PRIORITY_INVALID ISAPNP_RES_PRIORITY_INVALID
95
96struct pnp_resource_table {
97 struct resource port_resource[PNP_MAX_PORT];
98 struct resource mem_resource[PNP_MAX_MEM];
99 struct resource dma_resource[PNP_MAX_DMA];
100 struct resource irq_resource[PNP_MAX_IRQ];
101};
102
103
104/*
105 * Device Managemnt
106 */
107
108struct pnp_card_link {
109 struct pnp_card * card;
110 struct pnp_card_driver * driver;
111 void * driver_data;
112 struct pm_dev *pm;
113};
114
115static inline void *pnp_get_card_drvdata (struct pnp_card_link *pcard)
116{
117 return pcard->driver_data;
118}
119
120static inline void pnp_set_card_drvdata (struct pnp_card_link *pcard, void *data)
121{
122 pcard->driver_data = data;
123}
124
125struct pnp_fixup {
126 char id[7];
127 void (*quirk_function)(struct pnp_dev *dev); /* fixup function */
128};
129
130/* config modes */
131#define PNP_CONFIG_AUTO 0x0001 /* Use the Resource Configuration Engine to determine resource settings */
132#define PNP_CONFIG_MANUAL 0x0002 /* the config has been manually specified */
133#define PNP_CONFIG_FORCE 0x0004 /* disables validity checking */
134#define PNP_CONFIG_INVALID 0x0008 /* If this flag is set, the pnp layer will refuse to activate the device */
135
136/* capabilities */
137#define PNP_READ 0x0001
138#define PNP_WRITE 0x0002
139#define PNP_DISABLE 0x0004
140#define PNP_CONFIGURABLE 0x0008
141#define PNP_REMOVABLE 0x0010
142
143#define pnp_can_read(dev) 1
144#define pnp_can_write(dev) 1
145#define pnp_can_disable(dev) 0
146#define pnp_can_configure(dev) 1
147
148#define pnp_device_is_isapnp(dev) 1
149
150#define isapnp_card_number(dev) (dev->p.bus->number)
151#define isapnp_csn_number(dev) (dev->p.devfn)
152
153/*
154 * Driver Management
155 */
156
157struct pnp_id {
158 char id[PNP_ID_LEN];
159 struct pnp_id * next;
160};
161
162struct pnp_device_id {
163 char id[PNP_ID_LEN];
164 unsigned long driver_data; /* data private to the driver */
165};
166
167struct pnp_card_device_id {
168 char id[PNP_ID_LEN];
169 unsigned long driver_data; /* data private to the driver */
170 struct {
171 char id[PNP_ID_LEN];
172 } devs[PNP_MAX_DEVICES]; /* logical devices */
173};
174
175struct pnp_driver {
176 char * name;
177 const struct pnp_device_id *id_table;
178 unsigned int flags;
179 int (*probe) (struct pnp_dev *dev, const struct pnp_device_id *dev_id);
180 void (*remove) (struct pnp_dev *dev);
181 int (*suspend)(struct pnp_dev *dev, pm_message_t state);
182 int (*resume)(struct pnp_dev *dev);
183};
184
185#define to_pnp_driver(drv) container_of(drv, struct pnp_driver, driver)
186
187struct pnp_card_driver {
188 struct list_head global_list;
189 char * name;
190 const struct pnp_card_device_id *id_table;
191 unsigned int flags;
192 int (*probe) (struct pnp_card_link *card, const struct pnp_card_device_id *card_id);
193 void (*remove) (struct pnp_card_link *card);
194 int (*suspend)(struct pnp_card_link *card, pm_message_t state);
195 int (*resume)(struct pnp_card_link *card);
196 struct pnp_driver link;
197};
198
199#define to_pnp_card_driver(drv) container_of(drv, struct pnp_card_driver, link)
200
201/* pnp driver flags */
202#define PNP_DRIVER_RES_DO_NOT_CHANGE 0x0001 /* do not change the state of the device */
203#define PNP_DRIVER_RES_DISABLE 0x0003 /* ensure the device is disabled */
204
205#define pnp_resource_change(resource, start, size) isapnp_resource_change(resource, start, size)
206
207#if defined(CONFIG_PNP)
208
209struct pnp_dev * pnp_request_card_device(struct pnp_card_link *clink, const char * id, struct pnp_dev * from);
210void pnp_release_card_device(struct pnp_dev * dev);
211int pnp_register_card_driver(struct pnp_card_driver * drv);
212void pnp_unregister_card_driver(struct pnp_card_driver * drv);
213int pnp_register_driver(struct pnp_driver *drv);
214void pnp_unregister_driver(struct pnp_driver *drv);
215void pnp_init_resource_table(struct pnp_resource_table *table);
216int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode);
217int pnp_activate_dev(struct pnp_dev *dev);
218static inline int pnp_is_active(struct pnp_dev *dev) { return dev->p.active; }
219int pnp_disable_dev(struct pnp_dev *dev);
220
221#else
222
223static inline struct pnp_dev * pnp_request_card_device(struct pnp_card_link *clink, const char * id, struct pnp_dev * from) { return NULL; }
224static inline void pnp_release_card_device(struct pnp_dev * dev) { ; }
225static inline int pnp_register_card_driver(struct pnp_card_driver * drv) { return 0; }
226static inline void pnp_unregister_card_driver(struct pnp_card_driver * drv) { ; }
227static inline int pnp_register_driver(struct pnp_driver *drv) { return 0; }
228static inline void pnp_unregister_driver(struct pnp_driver *drv) { ; }
229static inline void pnp_init_resource_table(struct pnp_resource_table *table) { ; }
230static inline int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode) { return -ENODEV; }
231static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; }
232static inline int pnp_is_active(struct pnp_dev * dev) { return -ENODEV; }
233static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; }
234
235#endif
236
237
238#endif /* __KERNEL__ */
239
240#endif /* _LINUX_PNP_H */
Note: See TracBrowser for help on using the repository browser.