]> err.no Git - linux-2.6/blobdiff - drivers/pnp/pnpbios/rsparser.c
Merge git://git.infradead.org/battery-2.6
[linux-2.6] / drivers / pnp / pnpbios / rsparser.c
index 845730c57edcec60a63dd5a23eed0198c9e3aee0..5ff9a4c0447ec8052e0de9a433255051826e1298 100644 (file)
@@ -4,7 +4,6 @@
 
 #include <linux/ctype.h>
 #include <linux/pnp.h>
-#include <linux/pnpbios.h>
 #include <linux/string.h>
 #include <linux/slab.h>
 
@@ -54,71 +53,28 @@ inline void pcibios_penalize_isa_irq(int irq, int active)
  * Allocated Resources
  */
 
-static void pnpbios_parse_allocated_dmaresource(struct pnp_dev *dev, int dma)
-{
-       struct resource *res;
-       int i;
-
-       for (i = 0; i < PNP_MAX_DMA; i++) {
-               res = pnp_get_resource(dev, IORESOURCE_DMA, i);
-               if (!pnp_resource_valid(res))
-                       break;
-       }
-
-       if (i < PNP_MAX_DMA) {
-               res->flags = IORESOURCE_DMA;    // Also clears _UNSET flag
-               if (dma == -1) {
-                       res->flags |= IORESOURCE_DISABLED;
-                       return;
-               }
-               res->start = res->end = (unsigned long)dma;
-       }
-}
-
 static void pnpbios_parse_allocated_ioresource(struct pnp_dev *dev,
-                                              int io, int len)
+                                              int start, int len)
 {
-       struct resource *res;
-       int i;
+       int flags = 0;
+       int end = start + len - 1;
 
-       for (i = 0; i < PNP_MAX_PORT; i++) {
-               res = pnp_get_resource(dev, IORESOURCE_IO, i);
-               if (!pnp_resource_valid(res))
-                       break;
-       }
+       if (len <= 0 || end >= 0x10003)
+               flags |= IORESOURCE_DISABLED;
 
-       if (i < PNP_MAX_PORT) {
-               res->flags = IORESOURCE_IO;     // Also clears _UNSET flag
-               if (len <= 0 || (io + len - 1) >= 0x10003) {
-                       res->flags |= IORESOURCE_DISABLED;
-                       return;
-               }
-               res->start = (unsigned long)io;
-               res->end = (unsigned long)(io + len - 1);
-       }
+       pnp_add_io_resource(dev, start, end, flags);
 }
 
 static void pnpbios_parse_allocated_memresource(struct pnp_dev *dev,
-                                               int mem, int len)
+                                               int start, int len)
 {
-       struct resource *res;
-       int i;
+       int flags = 0;
+       int end = start + len - 1;
 
-       for (i = 0; i < PNP_MAX_MEM; i++) {
-               res = pnp_get_resource(dev, IORESOURCE_MEM, i);
-               if (!pnp_resource_valid(res))
-                       break;
-       }
+       if (len <= 0)
+               flags |= IORESOURCE_DISABLED;
 
-       if (i < PNP_MAX_MEM) {
-               res->flags = IORESOURCE_MEM;    // Also clears _UNSET flag
-               if (len <= 0) {
-                       res->flags |= IORESOURCE_DISABLED;
-                       return;
-               }
-               res->start = (unsigned long)mem;
-               res->end = (unsigned long)(mem + len - 1);
-       }
+       pnp_add_mem_resource(dev, start, end, flags);
 }
 
 static unsigned char *pnpbios_parse_allocated_resource_data(struct pnp_dev *dev,
@@ -199,12 +155,15 @@ static unsigned char *pnpbios_parse_allocated_resource_data(struct pnp_dev *dev,
                case SMALL_TAG_DMA:
                        if (len != 2)
                                goto len_err;
+                       flags = 0;
                        io = -1;
                        mask = p[1];
                        for (i = 0; i < 8; i++, mask = mask >> 1)
                                if (mask & 0x01)
                                        io = i;
-                       pnpbios_parse_allocated_dmaresource(dev, io);
+                       if (io == -1)
+                               flags = IORESOURCE_DISABLED;
+                       pnp_add_dma_resource(dev, io, flags);
                        break;
 
                case SMALL_TAG_PORT:
@@ -632,7 +591,8 @@ static void pnpbios_encode_irq(struct pnp_dev *dev, unsigned char *p,
        p[1] = map & 0xff;
        p[2] = (map >> 8) & 0xff;
 
-       dev_dbg(&dev->dev, "  encode irq %d\n", res->start);
+       dev_dbg(&dev->dev, "  encode irq %llu\n",
+               (unsigned long long)res->start);
 }
 
 static void pnpbios_encode_dma(struct pnp_dev *dev, unsigned char *p,
@@ -643,7 +603,8 @@ static void pnpbios_encode_dma(struct pnp_dev *dev, unsigned char *p,
        map = 1 << res->start;
        p[1] = map & 0xff;
 
-       dev_dbg(&dev->dev, "  encode dma %d\n", res->start);
+       dev_dbg(&dev->dev, "  encode dma %llu\n",
+               (unsigned long long)res->start);
 }
 
 static void pnpbios_encode_port(struct pnp_dev *dev, unsigned char *p,