int rc;
ENTER;
- rc = pci_restore_state(ioa_cfg->pdev);
+ rc = pci_restore_state(ioa_cfg->pdev, ioa_cfg->pci_cfg_buf);
if (rc != PCIBIOS_SUCCESSFUL) {
ipr_cmd->ioasa.ioasc = cpu_to_be32(IPR_IOASC_PCI_ACCESS_ERROR);
ENTER;
free_irq(pdev->irq, ioa_cfg);
- iounmap(ioa_cfg->hdw_dma_regs);
+ iounmap((void *) ioa_cfg->hdw_dma_regs);
pci_release_regions(pdev);
ipr_free_mem(ioa_cfg);
scsi_host_put(ioa_cfg->host);
static void __devinit ipr_init_ioa_cfg(struct ipr_ioa_cfg *ioa_cfg,
struct Scsi_Host *host, struct pci_dev *pdev)
{
- const struct ipr_interrupt_offsets *p;
- struct ipr_interrupts *t;
- void __iomem *base;
-
ioa_cfg->host = host;
ioa_cfg->pdev = pdev;
ioa_cfg->log_level = ipr_log_level;
host->max_cmd_len = IPR_MAX_CDB_LEN;
pci_set_drvdata(pdev, ioa_cfg);
- p = &ioa_cfg->chip_cfg->regs;
- t = &ioa_cfg->regs;
- base = ioa_cfg->hdw_dma_regs;
+ memcpy(&ioa_cfg->regs, &ioa_cfg->chip_cfg->regs, sizeof(ioa_cfg->regs));
- t->set_interrupt_mask_reg = base + p->set_interrupt_mask_reg;
- t->clr_interrupt_mask_reg = base + p->clr_interrupt_mask_reg;
- t->sense_interrupt_mask_reg = base + p->sense_interrupt_mask_reg;
- t->clr_interrupt_reg = base + p->clr_interrupt_reg;
- t->sense_interrupt_reg = base + p->sense_interrupt_reg;
- t->ioarrin_reg = base + p->ioarrin_reg;
- t->sense_uproc_interrupt_reg = base + p->sense_uproc_interrupt_reg;
- t->set_uproc_interrupt_reg = base + p->set_uproc_interrupt_reg;
- t->clr_uproc_interrupt_reg = base + p->clr_uproc_interrupt_reg;
+ ioa_cfg->regs.set_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
+ ioa_cfg->regs.clr_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
+ ioa_cfg->regs.sense_interrupt_mask_reg += ioa_cfg->hdw_dma_regs;
+ ioa_cfg->regs.clr_interrupt_reg += ioa_cfg->hdw_dma_regs;
+ ioa_cfg->regs.sense_interrupt_reg += ioa_cfg->hdw_dma_regs;
+ ioa_cfg->regs.ioarrin_reg += ioa_cfg->hdw_dma_regs;
+ ioa_cfg->regs.sense_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
+ ioa_cfg->regs.set_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
+ ioa_cfg->regs.clr_uproc_interrupt_reg += ioa_cfg->hdw_dma_regs;
}
/**
{
struct ipr_ioa_cfg *ioa_cfg;
struct Scsi_Host *host;
- unsigned long ipr_regs_pci;
- void __iomem *ipr_regs;
+ unsigned long ipr_regs, ipr_regs_pci;
u32 rc = PCIBIOS_SUCCESSFUL;
ENTER;
goto out_scsi_host_put;
}
- ipr_regs = ioremap(ipr_regs_pci, pci_resource_len(pdev, 0));
+ ipr_regs = (unsigned long)ioremap(ipr_regs_pci,
+ pci_resource_len(pdev, 0));
if (!ipr_regs) {
dev_err(&pdev->dev,
}
/* Save away PCI config space for use following IOA reset */
- rc = pci_save_state(pdev);
+ rc = pci_save_state(pdev, ioa_cfg->pci_cfg_buf);
if (rc != PCIBIOS_SUCCESSFUL) {
dev_err(&pdev->dev, "Failed to save PCI config space\n");
cleanup_nolog:
ipr_free_mem(ioa_cfg);
cleanup_nomem:
- iounmap(ipr_regs);
+ iounmap((void *) ipr_regs);
out_release_regions:
pci_release_regions(pdev);
out_scsi_host_put: