aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/pnp.h145
1 files changed, 105 insertions, 40 deletions
diff --git a/include/linux/pnp.h b/include/linux/pnp.h
index b5fd03854fa4..1640562f3ebc 100644
--- a/include/linux/pnp.h
+++ b/include/linux/pnp.h
@@ -27,46 +27,111 @@ struct pnp_dev;
27 */ 27 */
28struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int); 28struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int);
29 29
30/* Use these instead of directly reading pnp_dev to get resource information */ 30static inline int pnp_resource_valid(struct resource *res)
31#define pnp_port_start(dev,bar) ((dev)->res.port_resource[(bar)].start) 31{
32#define pnp_port_end(dev,bar) ((dev)->res.port_resource[(bar)].end) 32 if (res && !(res->flags & IORESOURCE_UNSET))
33#define pnp_port_flags(dev,bar) ((dev)->res.port_resource[(bar)].flags) 33 return 1;
34#define pnp_port_valid(dev,bar) \ 34 return 0;
35 ((pnp_port_flags((dev),(bar)) & (IORESOURCE_IO | IORESOURCE_UNSET)) \ 35}
36 == IORESOURCE_IO) 36
37#define pnp_port_len(dev,bar) \ 37static inline resource_size_t pnp_resource_len(struct resource *res)
38 ((pnp_port_start((dev),(bar)) == 0 && \ 38{
39 pnp_port_end((dev),(bar)) == \ 39 if (res->start == 0 && res->end == 0)
40 pnp_port_start((dev),(bar))) ? 0 : \ 40 return 0;
41 \ 41 return res->end - res->start + 1;
42 (pnp_port_end((dev),(bar)) - \ 42}
43 pnp_port_start((dev),(bar)) + 1)) 43
44 44
45#define pnp_mem_start(dev,bar) ((dev)->res.mem_resource[(bar)].start) 45static inline resource_size_t pnp_port_start(struct pnp_dev *dev,
46#define pnp_mem_end(dev,bar) ((dev)->res.mem_resource[(bar)].end) 46 unsigned int bar)
47#define pnp_mem_flags(dev,bar) ((dev)->res.mem_resource[(bar)].flags) 47{
48#define pnp_mem_valid(dev,bar) \ 48 return pnp_get_resource(dev, IORESOURCE_IO, bar)->start;
49 ((pnp_mem_flags((dev),(bar)) & (IORESOURCE_MEM | IORESOURCE_UNSET)) \ 49}
50 == IORESOURCE_MEM) 50
51#define pnp_mem_len(dev,bar) \ 51static inline resource_size_t pnp_port_end(struct pnp_dev *dev,
52 ((pnp_mem_start((dev),(bar)) == 0 && \ 52 unsigned int bar)
53 pnp_mem_end((dev),(bar)) == \ 53{
54 pnp_mem_start((dev),(bar))) ? 0 : \ 54 return pnp_get_resource(dev, IORESOURCE_IO, bar)->end;
55 \ 55}
56 (pnp_mem_end((dev),(bar)) - \ 56
57 pnp_mem_start((dev),(bar)) + 1)) 57static inline unsigned long pnp_port_flags(struct pnp_dev *dev,
58 58 unsigned int bar)
59#define pnp_irq(dev,bar) ((dev)->res.irq_resource[(bar)].start) 59{
60#define pnp_irq_flags(dev,bar) ((dev)->res.irq_resource[(bar)].flags) 60 return pnp_get_resource(dev, IORESOURCE_IO, bar)->flags;
61#define pnp_irq_valid(dev,bar) \ 61}
62 ((pnp_irq_flags((dev),(bar)) & (IORESOURCE_IRQ | IORESOURCE_UNSET)) \ 62
63 == IORESOURCE_IRQ) 63static inline int pnp_port_valid(struct pnp_dev *dev, unsigned int bar)
64 64{
65#define pnp_dma(dev,bar) ((dev)->res.dma_resource[(bar)].start) 65 return pnp_resource_valid(pnp_get_resource(dev, IORESOURCE_IO, bar));
66#define pnp_dma_flags(dev,bar) ((dev)->res.dma_resource[(bar)].flags) 66}
67#define pnp_dma_valid(dev,bar) \ 67
68 ((pnp_dma_flags((dev),(bar)) & (IORESOURCE_DMA | IORESOURCE_UNSET)) \ 68static inline resource_size_t pnp_port_len(struct pnp_dev *dev,
69 == IORESOURCE_DMA) 69 unsigned int bar)
70{
71 return pnp_resource_len(pnp_get_resource(dev, IORESOURCE_IO, bar));
72}
73
74
75static inline resource_size_t pnp_mem_start(struct pnp_dev *dev,
76 unsigned int bar)
77{
78 return pnp_get_resource(dev, IORESOURCE_MEM, bar)->start;
79}
80
81static inline resource_size_t pnp_mem_end(struct pnp_dev *dev,
82 unsigned int bar)
83{
84 return pnp_get_resource(dev, IORESOURCE_MEM, bar)->end;
85}
86
87static inline unsigned long pnp_mem_flags(struct pnp_dev *dev, unsigned int bar)
88{
89 return pnp_get_resource(dev, IORESOURCE_MEM, bar)->flags;
90}
91
92static inline int pnp_mem_valid(struct pnp_dev *dev, unsigned int bar)
93{
94 return pnp_resource_valid(pnp_get_resource(dev, IORESOURCE_MEM, bar));
95}
96
97static inline resource_size_t pnp_mem_len(struct pnp_dev *dev,
98 unsigned int bar)
99{
100 return pnp_resource_len(pnp_get_resource(dev, IORESOURCE_MEM, bar));
101}
102
103
104static inline resource_size_t pnp_irq(struct pnp_dev *dev, unsigned int bar)
105{
106 return pnp_get_resource(dev, IORESOURCE_IRQ, bar)->start;
107}
108
109static inline unsigned long pnp_irq_flags(struct pnp_dev *dev, unsigned int bar)
110{
111 return pnp_get_resource(dev, IORESOURCE_IRQ, bar)->flags;
112}
113
114static inline int pnp_irq_valid(struct pnp_dev *dev, unsigned int bar)
115{
116 return pnp_resource_valid(pnp_get_resource(dev, IORESOURCE_IRQ, bar));
117}
118
119
120static inline resource_size_t pnp_dma(struct pnp_dev *dev, unsigned int bar)
121{
122 return pnp_get_resource(dev, IORESOURCE_DMA, bar)->start;
123}
124
125static inline unsigned long pnp_dma_flags(struct pnp_dev *dev, unsigned int bar)
126{
127 return pnp_get_resource(dev, IORESOURCE_DMA, bar)->flags;
128}
129
130static inline int pnp_dma_valid(struct pnp_dev *dev, unsigned int bar)
131{
132 return pnp_resource_valid(pnp_get_resource(dev, IORESOURCE_DMA, bar));
133}
134
70 135
71#define PNP_PORT_FLAG_16BITADDR (1<<0) 136#define PNP_PORT_FLAG_16BITADDR (1<<0)
72#define PNP_PORT_FLAG_FIXED (1<<1) 137#define PNP_PORT_FLAG_FIXED (1<<1)