Commit ff08784b authored by Ben Collins's avatar Ben Collins Committed by James Bottomley

[SCSI] aacraid: Use resource_size_t for IO mem pointers and offsets

This also stops using the "legacy crap" in Scsi_Host (shost->base is an
unsigned long).

This affected 32-bit systems that have 64-bit resource sizes, causing the
IO address to be truncated.
Signed-off-by: default avatarBen Collins <bcollins@ubuntu.com>
Acked-by: default avatarAchim Leubner <Achim_Leubner@pmc-sierra.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 7e8a74b1
...@@ -1052,10 +1052,11 @@ struct aac_dev ...@@ -1052,10 +1052,11 @@ struct aac_dev
struct adapter_ops a_ops; struct adapter_ops a_ops;
unsigned long fsrev; /* Main driver's revision number */ unsigned long fsrev; /* Main driver's revision number */
unsigned long dbg_base; /* address of UART resource_size_t base_start; /* main IO base */
resource_size_t dbg_base; /* address of UART
* debug buffer */ * debug buffer */
unsigned base_size, dbg_size; /* Size of resource_size_t base_size, dbg_size; /* Size of
* mapped in region */ * mapped in region */
struct aac_init *init; /* Holds initialization info to communicate with adapter */ struct aac_init *init; /* Holds initialization info to communicate with adapter */
......
...@@ -1145,11 +1145,11 @@ static int __devinit aac_probe_one(struct pci_dev *pdev, ...@@ -1145,11 +1145,11 @@ static int __devinit aac_probe_one(struct pci_dev *pdev,
goto out_disable_pdev; goto out_disable_pdev;
shost->irq = pdev->irq; shost->irq = pdev->irq;
shost->base = pci_resource_start(pdev, 0);
shost->unique_id = unique_id; shost->unique_id = unique_id;
shost->max_cmd_len = 16; shost->max_cmd_len = 16;
aac = (struct aac_dev *)shost->hostdata; aac = (struct aac_dev *)shost->hostdata;
aac->base_start = pci_resource_start(pdev, 0);
aac->scsi_host_ptr = shost; aac->scsi_host_ptr = shost;
aac->pdev = pdev; aac->pdev = pdev;
aac->name = aac_driver_template.name; aac->name = aac_driver_template.name;
......
...@@ -49,14 +49,14 @@ static int aac_nark_ioremap(struct aac_dev * dev, u32 size) ...@@ -49,14 +49,14 @@ static int aac_nark_ioremap(struct aac_dev * dev, u32 size)
dev->base = NULL; dev->base = NULL;
return 0; return 0;
} }
dev->scsi_host_ptr->base = pci_resource_start(dev->pdev, 2); dev->base_start = pci_resource_start(dev->pdev, 2);
dev->regs.rx = ioremap((u64)pci_resource_start(dev->pdev, 0) | dev->regs.rx = ioremap((u64)pci_resource_start(dev->pdev, 0) |
((u64)pci_resource_start(dev->pdev, 1) << 32), ((u64)pci_resource_start(dev->pdev, 1) << 32),
sizeof(struct rx_registers) - sizeof(struct rx_inbound)); sizeof(struct rx_registers) - sizeof(struct rx_inbound));
dev->base = NULL; dev->base = NULL;
if (dev->regs.rx == NULL) if (dev->regs.rx == NULL)
return -1; return -1;
dev->base = ioremap(dev->scsi_host_ptr->base, size); dev->base = ioremap(dev->base_start, size);
if (dev->base == NULL) { if (dev->base == NULL) {
iounmap(dev->regs.rx); iounmap(dev->regs.rx);
dev->regs.rx = NULL; dev->regs.rx = NULL;
......
...@@ -79,7 +79,7 @@ static int aac_rkt_ioremap(struct aac_dev * dev, u32 size) ...@@ -79,7 +79,7 @@ static int aac_rkt_ioremap(struct aac_dev * dev, u32 size)
iounmap(dev->regs.rkt); iounmap(dev->regs.rkt);
return 0; return 0;
} }
dev->base = dev->regs.rkt = ioremap(dev->scsi_host_ptr->base, size); dev->base = dev->regs.rkt = ioremap(dev->base_start, size);
if (dev->base == NULL) if (dev->base == NULL)
return -1; return -1;
dev->IndexRegs = &dev->regs.rkt->IndexRegs; dev->IndexRegs = &dev->regs.rkt->IndexRegs;
......
...@@ -471,7 +471,7 @@ static int aac_rx_ioremap(struct aac_dev * dev, u32 size) ...@@ -471,7 +471,7 @@ static int aac_rx_ioremap(struct aac_dev * dev, u32 size)
iounmap(dev->regs.rx); iounmap(dev->regs.rx);
return 0; return 0;
} }
dev->base = dev->regs.rx = ioremap(dev->scsi_host_ptr->base, size); dev->base = dev->regs.rx = ioremap(dev->base_start, size);
if (dev->base == NULL) if (dev->base == NULL)
return -1; return -1;
dev->IndexRegs = &dev->regs.rx->IndexRegs; dev->IndexRegs = &dev->regs.rx->IndexRegs;
...@@ -653,7 +653,7 @@ int _aac_rx_init(struct aac_dev *dev) ...@@ -653,7 +653,7 @@ int _aac_rx_init(struct aac_dev *dev)
name, instance); name, instance);
goto error_iounmap; goto error_iounmap;
} }
dev->dbg_base = dev->scsi_host_ptr->base; dev->dbg_base = dev->base_start;
dev->dbg_base_mapped = dev->base; dev->dbg_base_mapped = dev->base;
dev->dbg_size = dev->base_size; dev->dbg_size = dev->base_size;
......
...@@ -305,7 +305,7 @@ static int aac_sa_ioremap(struct aac_dev * dev, u32 size) ...@@ -305,7 +305,7 @@ static int aac_sa_ioremap(struct aac_dev * dev, u32 size)
iounmap(dev->regs.sa); iounmap(dev->regs.sa);
return 0; return 0;
} }
dev->base = dev->regs.sa = ioremap(dev->scsi_host_ptr->base, size); dev->base = dev->regs.sa = ioremap(dev->base_start, size);
return (dev->base == NULL) ? -1 : 0; return (dev->base == NULL) ? -1 : 0;
} }
...@@ -393,7 +393,7 @@ int aac_sa_init(struct aac_dev *dev) ...@@ -393,7 +393,7 @@ int aac_sa_init(struct aac_dev *dev)
name, instance); name, instance);
goto error_iounmap; goto error_iounmap;
} }
dev->dbg_base = dev->scsi_host_ptr->base; dev->dbg_base = dev->base_start;
dev->dbg_base_mapped = dev->base; dev->dbg_base_mapped = dev->base;
dev->dbg_size = dev->base_size; dev->dbg_size = dev->base_size;
......
...@@ -435,8 +435,7 @@ static int aac_src_ioremap(struct aac_dev *dev, u32 size) ...@@ -435,8 +435,7 @@ static int aac_src_ioremap(struct aac_dev *dev, u32 size)
dev->base = NULL; dev->base = NULL;
if (dev->regs.src.bar1 == NULL) if (dev->regs.src.bar1 == NULL)
return -1; return -1;
dev->base = dev->regs.src.bar0 = ioremap(dev->scsi_host_ptr->base, dev->base = dev->regs.src.bar0 = ioremap(dev->base_start, size);
size);
if (dev->base == NULL) { if (dev->base == NULL) {
iounmap(dev->regs.src.bar1); iounmap(dev->regs.src.bar1);
dev->regs.src.bar1 = NULL; dev->regs.src.bar1 = NULL;
...@@ -459,7 +458,7 @@ static int aac_srcv_ioremap(struct aac_dev *dev, u32 size) ...@@ -459,7 +458,7 @@ static int aac_srcv_ioremap(struct aac_dev *dev, u32 size)
dev->base = dev->regs.src.bar0 = NULL; dev->base = dev->regs.src.bar0 = NULL;
return 0; return 0;
} }
dev->base = dev->regs.src.bar0 = ioremap(dev->scsi_host_ptr->base, size); dev->base = dev->regs.src.bar0 = ioremap(dev->base_start, size);
if (dev->base == NULL) if (dev->base == NULL)
return -1; return -1;
dev->IndexRegs = &((struct src_registers __iomem *) dev->IndexRegs = &((struct src_registers __iomem *)
...@@ -764,7 +763,7 @@ int aac_srcv_init(struct aac_dev *dev) ...@@ -764,7 +763,7 @@ int aac_srcv_init(struct aac_dev *dev)
name, instance); name, instance);
goto error_iounmap; goto error_iounmap;
} }
dev->dbg_base = dev->scsi_host_ptr->base; dev->dbg_base = dev->base_start;
dev->dbg_base_mapped = dev->base; dev->dbg_base_mapped = dev->base;
dev->dbg_size = dev->base_size; dev->dbg_size = dev->base_size;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment