[PARISC] Convert parisc_device to use struct resource for hpa
Matthew Wilcox [Sat, 22 Oct 2005 02:36:40 +0000 (22:36 -0400)]
Convert pa_dev->hpa from an unsigned long to a struct resource.

Signed-off-by: Matthew Wilcox <willy@parisc-linux.org>

Fix up users of ->hpa to use ->hpa.start instead.

Signed-off-by: Matthew Wilcox <willy@parisc-linux.org>

Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>

23 files changed:
arch/parisc/kernel/perf.c
arch/parisc/kernel/processor.c
drivers/input/keyboard/hilkbd.c
drivers/input/serio/gscps2.c
drivers/input/serio/hp_sdc.c
drivers/net/lasi_82596.c
drivers/parisc/asp.c
drivers/parisc/ccio-dma.c
drivers/parisc/ccio-rm-dma.c
drivers/parisc/dino.c
drivers/parisc/eisa.c
drivers/parisc/hppb.c
drivers/parisc/lasi.c
drivers/parisc/lba_pci.c
drivers/parisc/sba_iommu.c
drivers/parisc/wax.c
drivers/parport/parport_gsc.c
drivers/scsi/lasi700.c
drivers/scsi/zalon.c
drivers/serial/8250_gsc.c
drivers/serial/mux.c
include/asm-parisc/parisc-device.h
sound/parisc/harmony.c

index b3ad0a5..44670d6 100644 (file)
@@ -746,7 +746,8 @@ static int perf_write_image(uint64_t *memaddr)
        uint64_t *bptr;
        uint32_t dwords;
        uint32_t *intrigue_rdr;
-       uint64_t *intrigue_bitmask, tmp64, proc_hpa;
+       uint64_t *intrigue_bitmask, tmp64;
+       void __iomem *runway;
        struct rdr_tbl_ent *tentry;
        int i;
 
@@ -798,15 +799,16 @@ static int perf_write_image(uint64_t *memaddr)
                return -1;
        }
 
-       proc_hpa = cpu_device->hpa;
+       runway = ioremap(cpu_device->hpa.start, 4096);
 
        /* Merge intrigue bits into Runway STATUS 0 */
-       tmp64 = __raw_readq(proc_hpa + RUNWAY_STATUS) & 0xffecfffffffffffful;
-       __raw_writeq(tmp64 | (*memaddr++ & 0x0013000000000000ul), proc_hpa + RUNWAY_STATUS);
+       tmp64 = __raw_readq(runway + RUNWAY_STATUS) & 0xffecfffffffffffful;
+       __raw_writeq(tmp64 | (*memaddr++ & 0x0013000000000000ul), 
+                    runway + RUNWAY_STATUS);
        
        /* Write RUNWAY DEBUG registers */
        for (i = 0; i < 8; i++) {
-               __raw_writeq(*memaddr++, proc_hpa + RUNWAY_DEBUG + i);
+               __raw_writeq(*memaddr++, runway + RUNWAY_DEBUG);
        }
 
        return 0; 
index 13b721c..4f5bbcf 100644 (file)
@@ -92,7 +92,7 @@ static int __init processor_probe(struct parisc_device *dev)
         * May get overwritten by PAT code.
         */
        cpuid = boot_cpu_data.cpu_count;
-       txn_addr = dev->hpa;    /* for legacy PDC */
+       txn_addr = dev->hpa.start;      /* for legacy PDC */
 
 #ifdef __LP64__
        if (is_pdc_pat()) {
@@ -122,7 +122,7 @@ static int __init processor_probe(struct parisc_device *dev)
  * boot time (ie shutdown a CPU from an OS perspective).
  */
                /* get the cpu number */
-               status = pdc_pat_cpu_get_number(&cpu_info, dev->hpa);
+               status = pdc_pat_cpu_get_number(&cpu_info, dev->hpa.start);
 
                BUG_ON(PDC_OK != status);
 
@@ -130,7 +130,7 @@ static int __init processor_probe(struct parisc_device *dev)
                        printk(KERN_WARNING "IGNORING CPU at 0x%x,"
                                " cpu_slot_id > NR_CPUS"
                                " (%ld > %d)\n",
-                               dev->hpa, cpu_info.cpu_num, NR_CPUS);
+                               dev->hpa.start, cpu_info.cpu_num, NR_CPUS);
                        /* Ignore CPU since it will only crash */
                        boot_cpu_data.cpu_count--;
                        return 1;
@@ -149,7 +149,7 @@ static int __init processor_probe(struct parisc_device *dev)
 
        p->loops_per_jiffy = loops_per_jiffy;
        p->dev = dev;           /* Save IODC data in case we need it */
-       p->hpa = dev->hpa;      /* save CPU hpa */
+       p->hpa = dev->hpa.start;        /* save CPU hpa */
        p->cpuid = cpuid;       /* save CPU id */
        p->txn_addr = txn_addr; /* save CPU IRQ address */
 #ifdef CONFIG_SMP
index 8aa81c9..e7a1e14 100644 (file)
@@ -278,11 +278,11 @@ static int __init
 hil_init_chip(struct parisc_device *dev)
 {
        if (!dev->irq) {
-               printk(KERN_WARNING "HIL: IRQ not found for HIL bus at 0x%08lx\n", dev->hpa);
+               printk(KERN_WARNING "HIL: IRQ not found for HIL bus at 0x%08lx\n", dev->hpa.start);
                return -ENODEV;
        }
 
-       hil_base = dev->hpa;
+       hil_base = dev->hpa.start;
        hil_irq  = dev->irq;
        hil_dev.dev_id = dev;
        
index 4bad281..9790d71 100644 (file)
@@ -331,7 +331,7 @@ static int __init gscps2_probe(struct parisc_device *dev)
 {
        struct gscps2port *ps2port;
        struct serio *serio;
-       unsigned long hpa = dev->hpa;
+       unsigned long hpa = dev->hpa.start;
        int ret;
 
        if (!dev->irq)
index 045b9a7..a10348b 100644 (file)
@@ -875,9 +875,9 @@ static int __init hp_sdc_init_hppa(struct parisc_device *d)
        hp_sdc.dev              = d;
        hp_sdc.irq              = d->irq;
        hp_sdc.nmi              = d->aux_irq;
-       hp_sdc.base_io          = d->hpa;
-       hp_sdc.data_io          = d->hpa + 0x800;
-       hp_sdc.status_io        = d->hpa + 0x801;
+       hp_sdc.base_io          = d->hpa.start;
+       hp_sdc.data_io          = d->hpa.start + 0x800;
+       hp_sdc.status_io        = d->hpa.start + 0x801;
 
        return hp_sdc_init();
 }
index 180e526..a63d8a3 100644 (file)
@@ -1528,17 +1528,18 @@ lan_init_chip(struct parisc_device *dev)
        
        if (!dev->irq) {
                printk(KERN_ERR "%s: IRQ not found for i82596 at 0x%lx\n",
-                       __FILE__, dev->hpa);
+                       __FILE__, dev->hpa.start);
                return -ENODEV;
        }
 
-       printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa, dev->irq);
+       printk(KERN_INFO "Found i82596 at 0x%lx, IRQ %d\n", dev->hpa.start,
+                       dev->irq);
 
        netdevice = alloc_etherdev(0);
        if (!netdevice)
                return -ENOMEM;
 
-       netdevice->base_addr = dev->hpa;
+       netdevice->base_addr = dev->hpa.start;
        netdevice->irq = dev->irq;
 
        retval = i82596_probe(netdevice, &dev->dev);
index 52f37b4..558420b 100644 (file)
@@ -77,12 +77,12 @@ asp_init_chip(struct parisc_device *dev)
        struct gsc_irq gsc_irq;
        int ret;
 
-       asp.version = gsc_readb(dev->hpa + ASP_VER_OFFSET) & 0xf;
+       asp.version = gsc_readb(dev->hpa.start + ASP_VER_OFFSET) & 0xf;
        asp.name = (asp.version == 1) ? "Asp" : "Cutoff";
        asp.hpa = ASP_INTERRUPT_ADDR;
 
        printk(KERN_INFO "%s version %d at 0x%lx found.\n", 
-               asp.name, asp.version, dev->hpa);
+               asp.name, asp.version, dev->hpa.start);
 
        /* the IRQ ASP should use */
        ret = -EBUSY;
index 2bb1889..80d0927 100644 (file)
@@ -1546,7 +1546,7 @@ static int ccio_probe(struct parisc_device *dev)
 
        ioc->name = dev->id.hversion == U2_IOA_RUNWAY ? "U2" : "UTurn";
 
-       printk(KERN_INFO "Found %s at 0x%lx\n", ioc->name, dev->hpa);
+       printk(KERN_INFO "Found %s at 0x%lx\n", ioc->name, dev->hpa.start);
 
        for (i = 0; i < ioc_count; i++) {
                ioc_p = &(*ioc_p)->next;
@@ -1554,7 +1554,7 @@ static int ccio_probe(struct parisc_device *dev)
        *ioc_p = ioc;
 
        ioc->hw_path = dev->hw_path;
-       ioc->ioc_hpa = (struct ioa_registers *)dev->hpa;
+       ioc->ioc_regs = ioremap(dev->hpa.start, 4096);
        ccio_ioc_init(ioc);
        ccio_init_resources(ioc);
        hppa_dma_ops = &ccio_ops;
index 57e6385..356b835 100644 (file)
@@ -167,7 +167,7 @@ ccio_probe(struct parisc_device *dev)
 {
        printk(KERN_INFO "%s found %s at 0x%lx\n", MODULE_NAME,
                        dev->id.hversion == U2_BC_GSC ? "U2" : "UTurn",
-                       dev->hpa);
+                       dev->hpa.start);
 
 /*
 ** FIXME - should check U2 registers to verify it's really running
index 8c61705..37820b0 100644 (file)
@@ -902,15 +902,15 @@ void ccio_cujo20_fixup(struct parisc_device *dev, u32 iovp);
 ** If so, initialize the chip appropriately (card-mode vs bridge mode).
 ** Much of the initialization is common though.
 */
-static int __init
-dino_driver_callback(struct parisc_device *dev)
+static int __init dino_probe(struct parisc_device *dev)
 {
        struct dino_device *dino_dev;   // Dino specific control struct
        const char *version = "unknown";
        char *name;
        int is_cujo = 0;
        struct pci_bus *bus;
-       
+       unsigned long hpa = dev->hpa.start;
+
        name = "Dino";
        if (is_card_dino(&dev->id)) {
                version = "3.x (card mode)";
index 0afeedd..6362bf9 100644 (file)
@@ -315,7 +315,7 @@ static int __devinit eisa_probe(struct parisc_device *dev)
        char *name = is_mongoose(dev) ? "Mongoose" : "Wax";
 
        printk(KERN_INFO "%s EISA Adapter found at 0x%08lx\n", 
-               name, dev->hpa);
+               name, dev->hpa.start);
 
        eisa_dev.hba.dev = dev;
        eisa_dev.hba.iommu = ccio_get_iommu(dev);
index a6eae3e..5edf93f 100644 (file)
@@ -68,14 +68,14 @@ static int hppb_probe(struct parisc_device *dev)
                memset(card->next, '\0', sizeof(struct hppb_card));
                card = card->next;
        }
-        printk(KERN_INFO "Found GeckoBoa at 0x%lx\n", dev->hpa);
+        printk(KERN_INFO "Found GeckoBoa at 0x%lx\n", dev->hpa.start);
 
-       card->hpa = dev->hpa;
+       card->hpa = dev->hpa.start;
        card->mmio_region.name = "HP-PB Bus";
        card->mmio_region.flags = IORESOURCE_MEM;
 
-       card->mmio_region.start = __raw_readl(dev->hpa + IO_IO_LOW);
-       card->mmio_region.end = __raw_readl(dev->hpa + IO_IO_HIGH) - 1;
+       card->mmio_region.start = gsc_readl(dev->hpa.start + IO_IO_LOW);
+       card->mmio_region.end = gsc_readl(dev->hpa.start + IO_IO_HIGH) - 1;
 
        status = ccio_request_resource(dev, &card->mmio_region);
        if(status < 0) {
index c776c37..a8c2039 100644 (file)
@@ -175,7 +175,7 @@ lasi_init_chip(struct parisc_device *dev)
                return -ENOMEM;
 
        lasi->name = "Lasi";
-       lasi->hpa = dev->hpa;
+       lasi->hpa = dev->hpa.start;
 
        /* Check the 4-bit (yes, only 4) version register */
        lasi->version = gsc_readl(lasi->hpa + LASI_VER) & 0xf;
index 7fdd80b..5e495dc 100644 (file)
@@ -1288,7 +1288,7 @@ lba_legacy_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
                ** Adjust "window" for this rope.
                */
                rsize /= ROPES_PER_IOC;
-               r->start += (rsize + 1) * LBA_NUM(pa_dev->hpa);
+               r->start += (rsize + 1) * LBA_NUM(pa_dev->hpa.start);
                r->end = r->start + rsize;
        } else {
                r->end = r->start = 0;  /* Not enabled. */
@@ -1458,7 +1458,7 @@ lba_driver_probe(struct parisc_device *dev)
        u32 func_class;
        void *tmp_obj;
        char *version;
-       void __iomem *addr = ioremap(dev->hpa, 4096);
+       void __iomem *addr = ioremap(dev->hpa.start, 4096);
 
        /* Read HW Rev First */
        func_class = READ_REG32(addr + LBA_FCLASS);
@@ -1476,7 +1476,7 @@ lba_driver_probe(struct parisc_device *dev)
                }
 
                printk(KERN_INFO "%s version %s (0x%x) found at 0x%lx\n",
-                       MODULE_NAME, version, func_class & 0xf, dev->hpa);
+                       MODULE_NAME, version, func_class & 0xf, dev->hpa.start);
 
                if (func_class < 2) {
                        printk(KERN_WARNING "Can't support LBA older than "
@@ -1503,17 +1503,17 @@ lba_driver_probe(struct parisc_device *dev)
                  * but for the mask for func_class.
                  */ 
                printk(KERN_INFO "%s version %s (0x%x) found at 0x%lx\n",
-                       MODULE_NAME, version, func_class & 0xff, dev->hpa);
+                      MODULE_NAME, version, func_class & 0xff, dev->hpa.start);
                cfg_ops = &mercury_cfg_ops;
        } else {
-               printk(KERN_ERR "Unknown LBA found at 0x%lx\n", dev->hpa);
+               printk(KERN_ERR "Unknown LBA found at 0x%lx\n", dev->hpa.start);
                return -ENODEV;
        }
 
        /*
        ** Tell I/O SAPIC driver we have a IRQ handler/region.
        */
-       tmp_obj = iosapic_register(dev->hpa + LBA_IOSAPIC_BASE);
+       tmp_obj = iosapic_register(dev->hpa.start + LBA_IOSAPIC_BASE);
 
        /* NOTE: PCI devices (e.g. 103c:1005 graphics card) which don't
        **      have an IRT entry will get NULL back from iosapic code.
@@ -1635,7 +1635,7 @@ void __init lba_init(void)
 */
 void lba_set_iregs(struct parisc_device *lba, u32 ibase, u32 imask)
 {
-       void __iomem * base_addr = ioremap(lba->hpa, 4096);
+       void __iomem * base_addr = ioremap(lba->hpa.start, 4096);
 
        imask <<= 2;    /* adjust for hints - 2 more bits */
 
index a8405f0..6256ad3 100644 (file)
@@ -1600,7 +1600,7 @@ sba_ioc_init(struct parisc_device *sba, struct ioc *ioc, int ioc_num)
 
 static void __iomem *ioc_remap(struct sba_device *sba_dev, int offset)
 {
-       return ioremap(sba_dev->dev->hpa + offset, SBA_FUNC_SIZE);
+       return ioremap(sba_dev->dev->hpa.start + offset, SBA_FUNC_SIZE);
 }
 
 static void sba_hw_init(struct sba_device *sba_dev)
@@ -1978,7 +1978,7 @@ sba_driver_callback(struct parisc_device *dev)
        u32 func_class;
        int i;
        char *version;
-       void __iomem *sba_addr = ioremap(dev->hpa, SBA_FUNC_SIZE);
+       void __iomem *sba_addr = ioremap(dev->hpa.start, SBA_FUNC_SIZE);
 
        sba_dump_ranges(sba_addr);
 
@@ -2020,7 +2020,7 @@ sba_driver_callback(struct parisc_device *dev)
        }
 
        printk(KERN_INFO "%s found %s at 0x%lx\n",
-               MODULE_NAME, version, dev->hpa);
+               MODULE_NAME, version, dev->hpa.start);
 
        sba_dev = kmalloc(sizeof(struct sba_device), GFP_KERNEL);
        if (!sba_dev) {
index e547d7d..17dce2a 100644 (file)
@@ -81,7 +81,7 @@ wax_init_chip(struct parisc_device *dev)
                return -ENOMEM;
 
        wax->name = "wax";
-       wax->hpa = dev->hpa;
+       wax->hpa = dev->hpa.start;
 
        wax->version = 0;   /* gsc_readb(wax->hpa+WAX_VER); */
        printk(KERN_INFO "%s at 0x%lx found.\n", wax->name, wax->hpa);
index 02d72ac..fde29a7 100644 (file)
@@ -359,11 +359,12 @@ static int __devinit parport_init_chip(struct parisc_device *dev)
        unsigned long port;
 
        if (!dev->irq) {
-               printk("IRQ not found for parallel device at 0x%lx\n", dev->hpa);
+               printk(KERN_WARNING "IRQ not found for parallel device at 0x%lx\n",
+                       dev->hpa.start);
                return -ENODEV;
        }
 
-       port = dev->hpa + PARPORT_GSC_OFFSET;
+       port = dev->hpa.start + PARPORT_GSC_OFFSET;
        
        /* some older machines with ASP-chip don't support
         * the enhanced parport modes.
index 123f493..8028418 100644 (file)
@@ -98,7 +98,7 @@ MODULE_DEVICE_TABLE(parisc, lasi700_ids);
 static int __init
 lasi700_probe(struct parisc_device *dev)
 {
-       unsigned long base = dev->hpa + LASI_SCSI_CORE_OFFSET;
+       unsigned long base = dev->hpa.start + LASI_SCSI_CORE_OFFSET;
        struct NCR_700_Host_Parameters *hostdata;
        struct Scsi_Host *host;
 
index 5a51051..b131432 100644 (file)
@@ -88,7 +88,7 @@ zalon_probe(struct parisc_device *dev)
        struct gsc_irq gsc_irq;
        u32 zalon_vers;
        int error = -ENODEV;
-       void __iomem *zalon = ioremap(dev->hpa, 4096);
+       void __iomem *zalon = ioremap(dev->hpa.start, 4096);
        void __iomem *io_port = zalon + GSC_SCSI_ZALON_OFFSET;
        static int unit = 0;
        struct Scsi_Host *host;
@@ -127,7 +127,7 @@ zalon_probe(struct parisc_device *dev)
        device.chip             = zalon720_chip;
        device.host_id          = 7;
        device.dev              = &dev->dev;
-       device.slot.base        = dev->hpa + GSC_SCSI_ZALON_OFFSET;
+       device.slot.base        = dev->hpa.start + GSC_SCSI_ZALON_OFFSET;
        device.slot.base_v      = io_port;
        device.slot.irq         = dev->irq;
        device.differential     = 2;
index 431aa57..abc5a0c 100644 (file)
@@ -42,12 +42,13 @@ serial_init_chip(struct parisc_device *dev)
                 */
                if (parisc_parent(dev)->id.hw_type != HPHW_IOA) {
                        printk(KERN_INFO "Serial: device 0x%lx not configured.\n"
-                               "Enable support for Wax, Lasi, Asp or Dino.\n", dev->hpa);
+                               "Enable support for Wax, Lasi, Asp or Dino.\n",
+                               dev->hpa.start);
                }
                return -ENODEV;
        }
 
-       address = dev->hpa;
+       address = dev->hpa.start;
        if (dev->id.sversion != 0x8d) {
                address += 0x800;
        }
index a12005b..009ce83 100644 (file)
@@ -444,7 +444,7 @@ static int __init mux_probe(struct parisc_device *dev)
        unsigned long bytecnt;
        struct uart_port *port;
 
-       status = pdc_iodc_read(&bytecnt, dev->hpa, 0, iodc_data, 32);
+       status = pdc_iodc_read(&bytecnt, dev->hpa.start, 0, iodc_data, 32);
        if(status != PDC_OK) {
                printk(KERN_ERR "Serial mux: Unable to read IODC.\n");
                return 1;
index cbde8b4..1d247e3 100644 (file)
@@ -1,7 +1,7 @@
 #include <linux/device.h>
 
 struct parisc_device {
-       unsigned long   hpa;            /* Hard Physical Address */
+       struct resource hpa;            /* Hard Physical Address */
        struct parisc_device_id id;
        struct parisc_driver *driver;   /* Driver for this device */
        char            name[80];       /* The hardware description */
index f560dd8..8b3ea26 100644 (file)
@@ -852,14 +852,14 @@ snd_harmony_create(snd_card_t *card,
        memset(&h->pbuf, 0, sizeof(h->pbuf));
        memset(&h->cbuf, 0, sizeof(h->cbuf));
 
-       h->hpa = padev->hpa;
+       h->hpa = padev->hpa.start;
        h->card = card;
        h->dev = padev;
        h->irq = padev->irq;
-       h->iobase = ioremap_nocache(padev->hpa, HARMONY_SIZE);
+       h->iobase = ioremap_nocache(padev->hpa.start, HARMONY_SIZE);
        if (h->iobase == NULL) {
                printk(KERN_ERR PFX "unable to remap hpa 0x%lx\n",
-                      padev->hpa);
+                      padev->hpa.start);
                err = -EBUSY;
                goto free_and_ret;
        }