diff options
Diffstat (limited to 'drivers/pnp')
-rw-r--r-- | drivers/pnp/base.h | 4 | ||||
-rw-r--r-- | drivers/pnp/interface.c | 4 | ||||
-rw-r--r-- | drivers/pnp/isapnp/core.c | 2 | ||||
-rw-r--r-- | drivers/pnp/manager.c | 6 | ||||
-rw-r--r-- | drivers/pnp/pnpacpi/rsparser.c | 4 | ||||
-rw-r--r-- | drivers/pnp/pnpbios/rsparser.c | 2 | ||||
-rw-r--r-- | drivers/pnp/quirks.c | 11 | ||||
-rw-r--r-- | drivers/pnp/resource.c | 6 |
8 files changed, 22 insertions, 17 deletions
diff --git a/drivers/pnp/base.h b/drivers/pnp/base.h index 3126e4582008..a9ee0a9fec77 100644 --- a/drivers/pnp/base.h +++ b/drivers/pnp/base.h | |||
@@ -30,8 +30,10 @@ struct pnp_port { | |||
30 | }; | 30 | }; |
31 | 31 | ||
32 | #define PNP_IRQ_NR 256 | 32 | #define PNP_IRQ_NR 256 |
33 | typedef struct { DECLARE_BITMAP(bits, PNP_IRQ_NR); } pnp_irq_mask_t; | ||
34 | |||
33 | struct pnp_irq { | 35 | struct pnp_irq { |
34 | DECLARE_BITMAP(map, PNP_IRQ_NR); /* bitmask for IRQ lines */ | 36 | pnp_irq_mask_t map; /* bitmap for IRQ lines */ |
35 | unsigned char flags; /* IRQ flags */ | 37 | unsigned char flags; /* IRQ flags */ |
36 | unsigned char pad; /* pad */ | 38 | unsigned char pad; /* pad */ |
37 | struct pnp_irq *next; /* next IRQ */ | 39 | struct pnp_irq *next; /* next IRQ */ |
diff --git a/drivers/pnp/interface.c b/drivers/pnp/interface.c index c172b6de6b71..249b4078d1ec 100644 --- a/drivers/pnp/interface.c +++ b/drivers/pnp/interface.c | |||
@@ -67,7 +67,7 @@ static void pnp_print_irq(pnp_info_buffer_t * buffer, char *space, | |||
67 | 67 | ||
68 | pnp_printf(buffer, "%sirq ", space); | 68 | pnp_printf(buffer, "%sirq ", space); |
69 | for (i = 0; i < PNP_IRQ_NR; i++) | 69 | for (i = 0; i < PNP_IRQ_NR; i++) |
70 | if (test_bit(i, irq->map)) { | 70 | if (test_bit(i, irq->map.bits)) { |
71 | if (!first) { | 71 | if (!first) { |
72 | pnp_printf(buffer, ","); | 72 | pnp_printf(buffer, ","); |
73 | } else { | 73 | } else { |
@@ -78,7 +78,7 @@ static void pnp_print_irq(pnp_info_buffer_t * buffer, char *space, | |||
78 | else | 78 | else |
79 | pnp_printf(buffer, "%i", i); | 79 | pnp_printf(buffer, "%i", i); |
80 | } | 80 | } |
81 | if (bitmap_empty(irq->map, PNP_IRQ_NR)) | 81 | if (bitmap_empty(irq->map.bits, PNP_IRQ_NR)) |
82 | pnp_printf(buffer, "<none>"); | 82 | pnp_printf(buffer, "<none>"); |
83 | if (irq->flags & IORESOURCE_IRQ_HIGHEDGE) | 83 | if (irq->flags & IORESOURCE_IRQ_HIGHEDGE) |
84 | pnp_printf(buffer, " High-Edge"); | 84 | pnp_printf(buffer, " High-Edge"); |
diff --git a/drivers/pnp/isapnp/core.c b/drivers/pnp/isapnp/core.c index c5b92526963b..e0caa71b16c0 100644 --- a/drivers/pnp/isapnp/core.c +++ b/drivers/pnp/isapnp/core.c | |||
@@ -441,7 +441,7 @@ static void __init isapnp_parse_irq_resource(struct pnp_dev *dev, | |||
441 | if (!irq) | 441 | if (!irq) |
442 | return; | 442 | return; |
443 | bits = (tmp[1] << 8) | tmp[0]; | 443 | bits = (tmp[1] << 8) | tmp[0]; |
444 | bitmap_copy(irq->map, &bits, 16); | 444 | bitmap_copy(irq->map.bits, &bits, 16); |
445 | if (size > 2) | 445 | if (size > 2) |
446 | irq->flags = tmp[2]; | 446 | irq->flags = tmp[2]; |
447 | else | 447 | else |
diff --git a/drivers/pnp/manager.c b/drivers/pnp/manager.c index 165b624081ad..e758dd225576 100644 --- a/drivers/pnp/manager.c +++ b/drivers/pnp/manager.c | |||
@@ -128,20 +128,20 @@ static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx) | |||
128 | res->start = -1; | 128 | res->start = -1; |
129 | res->end = -1; | 129 | res->end = -1; |
130 | 130 | ||
131 | if (bitmap_empty(rule->map, PNP_IRQ_NR)) { | 131 | if (bitmap_empty(rule->map.bits, PNP_IRQ_NR)) { |
132 | res->flags |= IORESOURCE_DISABLED; | 132 | res->flags |= IORESOURCE_DISABLED; |
133 | dev_dbg(&dev->dev, " irq %d disabled\n", idx); | 133 | dev_dbg(&dev->dev, " irq %d disabled\n", idx); |
134 | goto __add; | 134 | goto __add; |
135 | } | 135 | } |
136 | 136 | ||
137 | /* TBD: need check for >16 IRQ */ | 137 | /* TBD: need check for >16 IRQ */ |
138 | res->start = find_next_bit(rule->map, PNP_IRQ_NR, 16); | 138 | res->start = find_next_bit(rule->map.bits, PNP_IRQ_NR, 16); |
139 | if (res->start < PNP_IRQ_NR) { | 139 | if (res->start < PNP_IRQ_NR) { |
140 | res->end = res->start; | 140 | res->end = res->start; |
141 | goto __add; | 141 | goto __add; |
142 | } | 142 | } |
143 | for (i = 0; i < 16; i++) { | 143 | for (i = 0; i < 16; i++) { |
144 | if (test_bit(xtab[i], rule->map)) { | 144 | if (test_bit(xtab[i], rule->map.bits)) { |
145 | res->start = res->end = xtab[i]; | 145 | res->start = res->end = xtab[i]; |
146 | if (pnp_check_irq(dev, res)) | 146 | if (pnp_check_irq(dev, res)) |
147 | goto __add; | 147 | goto __add; |
diff --git a/drivers/pnp/pnpacpi/rsparser.c b/drivers/pnp/pnpacpi/rsparser.c index 46069e64a6b2..ae65454a23bb 100644 --- a/drivers/pnp/pnpacpi/rsparser.c +++ b/drivers/pnp/pnpacpi/rsparser.c | |||
@@ -442,7 +442,7 @@ static __init void pnpacpi_parse_irq_option(struct pnp_dev *dev, | |||
442 | 442 | ||
443 | for (i = 0; i < p->interrupt_count; i++) | 443 | for (i = 0; i < p->interrupt_count; i++) |
444 | if (p->interrupts[i]) | 444 | if (p->interrupts[i]) |
445 | __set_bit(p->interrupts[i], irq->map); | 445 | __set_bit(p->interrupts[i], irq->map.bits); |
446 | irq->flags = irq_flags(p->triggering, p->polarity, p->sharable); | 446 | irq->flags = irq_flags(p->triggering, p->polarity, p->sharable); |
447 | 447 | ||
448 | pnp_register_irq_resource(dev, option, irq); | 448 | pnp_register_irq_resource(dev, option, irq); |
@@ -463,7 +463,7 @@ static __init void pnpacpi_parse_ext_irq_option(struct pnp_dev *dev, | |||
463 | 463 | ||
464 | for (i = 0; i < p->interrupt_count; i++) | 464 | for (i = 0; i < p->interrupt_count; i++) |
465 | if (p->interrupts[i]) | 465 | if (p->interrupts[i]) |
466 | __set_bit(p->interrupts[i], irq->map); | 466 | __set_bit(p->interrupts[i], irq->map.bits); |
467 | irq->flags = irq_flags(p->triggering, p->polarity, p->sharable); | 467 | irq->flags = irq_flags(p->triggering, p->polarity, p->sharable); |
468 | 468 | ||
469 | pnp_register_irq_resource(dev, option, irq); | 469 | pnp_register_irq_resource(dev, option, irq); |
diff --git a/drivers/pnp/pnpbios/rsparser.c b/drivers/pnp/pnpbios/rsparser.c index 489fec3b7974..dd2ea7b03605 100644 --- a/drivers/pnp/pnpbios/rsparser.c +++ b/drivers/pnp/pnpbios/rsparser.c | |||
@@ -275,7 +275,7 @@ static __init void pnpbios_parse_irq_option(struct pnp_dev *dev, | |||
275 | if (!irq) | 275 | if (!irq) |
276 | return; | 276 | return; |
277 | bits = (p[2] << 8) | p[1]; | 277 | bits = (p[2] << 8) | p[1]; |
278 | bitmap_copy(irq->map, &bits, 16); | 278 | bitmap_copy(irq->map.bits, &bits, 16); |
279 | if (size > 2) | 279 | if (size > 2) |
280 | irq->flags = p[3]; | 280 | irq->flags = p[3]; |
281 | else | 281 | else |
diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c index 21acb54eff6d..48e60171b3ba 100644 --- a/drivers/pnp/quirks.c +++ b/drivers/pnp/quirks.c | |||
@@ -66,15 +66,18 @@ static void quirk_cmi8330_resources(struct pnp_dev *dev) | |||
66 | struct pnp_irq *irq; | 66 | struct pnp_irq *irq; |
67 | struct pnp_dma *dma; | 67 | struct pnp_dma *dma; |
68 | 68 | ||
69 | for (irq = res->irq; irq; irq = irq->next) { // Valid irqs are 5, 7, 10 | 69 | for (irq = res->irq; irq; irq = irq->next) { |
70 | /* Valid irqs are 5, 7, 10 */ | ||
70 | tmp = 0x04A0; | 71 | tmp = 0x04A0; |
71 | bitmap_copy(irq->map, &tmp, 16); // 0000 0100 1010 0000 | 72 | bitmap_copy(irq->map.bits, &tmp, 16); |
72 | } | 73 | } |
73 | 74 | ||
74 | for (dma = res->dma; dma; dma = dma->next) // Valid 8bit dma channels are 1,3 | 75 | for (dma = res->dma; dma; dma = dma->next) { |
76 | /* Valid 8bit dma channels are 1,3 */ | ||
75 | if ((dma->flags & IORESOURCE_DMA_TYPE_MASK) == | 77 | if ((dma->flags & IORESOURCE_DMA_TYPE_MASK) == |
76 | IORESOURCE_DMA_8BIT) | 78 | IORESOURCE_DMA_8BIT) |
77 | dma->map = 0x000A; | 79 | dma->map = 0x000A; |
80 | } | ||
78 | } | 81 | } |
79 | dev_info(&dev->dev, "CMI8330 quirk - forced possible IRQs to 5, 7, 10 " | 82 | dev_info(&dev->dev, "CMI8330 quirk - forced possible IRQs to 5, 7, 10 " |
80 | "and DMA channels to 1, 3\n"); | 83 | "and DMA channels to 1, 3\n"); |
@@ -187,7 +190,7 @@ static void quirk_ad1815_mpu_resources(struct pnp_dev *dev) | |||
187 | if (!copy) | 190 | if (!copy) |
188 | break; | 191 | break; |
189 | 192 | ||
190 | memcpy(copy->map, irq->map, sizeof copy->map); | 193 | bitmap_copy(copy->map.bits, irq->map.bits, PNP_IRQ_NR); |
191 | copy->flags = irq->flags; | 194 | copy->flags = irq->flags; |
192 | 195 | ||
193 | copy->next = res->irq; /* Yes, this is NULL */ | 196 | copy->next = res->irq; /* Yes, this is NULL */ |
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c index 786fd356916d..55a57cded24a 100644 --- a/drivers/pnp/resource.c +++ b/drivers/pnp/resource.c | |||
@@ -98,13 +98,13 @@ int pnp_register_irq_resource(struct pnp_dev *dev, struct pnp_option *option, | |||
98 | int i; | 98 | int i; |
99 | 99 | ||
100 | for (i = 0; i < 16; i++) | 100 | for (i = 0; i < 16; i++) |
101 | if (test_bit(i, data->map)) | 101 | if (test_bit(i, data->map.bits)) |
102 | pcibios_penalize_isa_irq(i, 0); | 102 | pcibios_penalize_isa_irq(i, 0); |
103 | } | 103 | } |
104 | #endif | 104 | #endif |
105 | 105 | ||
106 | #ifdef DEBUG | 106 | #ifdef DEBUG |
107 | bitmap_scnprintf(buf, sizeof(buf), data->map, PNP_IRQ_NR); | 107 | bitmap_scnprintf(buf, sizeof(buf), data->map.bits, PNP_IRQ_NR); |
108 | dev_dbg(&dev->dev, " irq bitmask %s flags %#x\n", buf, | 108 | dev_dbg(&dev->dev, " irq bitmask %s flags %#x\n", buf, |
109 | data->flags); | 109 | data->flags); |
110 | #endif | 110 | #endif |
@@ -653,7 +653,7 @@ static int pnp_possible_option(struct pnp_option *option, int type, | |||
653 | case IORESOURCE_IRQ: | 653 | case IORESOURCE_IRQ: |
654 | for (irq = tmp->irq; irq; irq = irq->next) { | 654 | for (irq = tmp->irq; irq; irq = irq->next) { |
655 | if (start < PNP_IRQ_NR && | 655 | if (start < PNP_IRQ_NR && |
656 | test_bit(start, irq->map)) | 656 | test_bit(start, irq->map.bits)) |
657 | return 1; | 657 | return 1; |
658 | } | 658 | } |
659 | break; | 659 | break; |