[SCSI] aacraid: rework communication support code
Received from Mark Salyzyn, Replace all if/else communication transports with a platform function call. This is in recognition of the need to migrate to up-and-coming transports. Currently the Linux driver does not support two available communication transports provided by our products, these will be added in future patches, and will expand the platform function set. Signed-off-by Mark Haverkamp <markh@linux-foundation.org> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:

committed by
James Bottomley

parent
9cd065ab80
commit
28713324a0
@@ -91,6 +91,17 @@ static void aac_sa_disable_interrupt (struct aac_dev *dev)
|
||||
sa_writew(dev, SaDbCSR.PRISETIRQMASK, 0xffff);
|
||||
}
|
||||
|
||||
/**
|
||||
* aac_sa_enable_interrupt - enable interrupt
|
||||
* @dev: Which adapter to enable.
|
||||
*/
|
||||
|
||||
static void aac_sa_enable_interrupt (struct aac_dev *dev)
|
||||
{
|
||||
sa_writew(dev, SaDbCSR.PRICLEARIRQMASK, (PrintfReady | DOORBELL_1 |
|
||||
DOORBELL_2 | DOORBELL_3 | DOORBELL_4));
|
||||
}
|
||||
|
||||
/**
|
||||
* aac_sa_notify_adapter - handle adapter notification
|
||||
* @dev: Adapter that notification is for
|
||||
@@ -347,32 +358,36 @@ int aac_sa_init(struct aac_dev *dev)
|
||||
msleep(1);
|
||||
}
|
||||
|
||||
if (request_irq(dev->scsi_host_ptr->irq, aac_sa_intr, IRQF_SHARED|IRQF_DISABLED, "aacraid", (void *)dev ) < 0) {
|
||||
printk(KERN_WARNING "%s%d: Interrupt unavailable.\n", name, instance);
|
||||
goto error_iounmap;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fill in the function dispatch table.
|
||||
*/
|
||||
|
||||
dev->a_ops.adapter_interrupt = aac_sa_interrupt_adapter;
|
||||
dev->a_ops.adapter_disable_int = aac_sa_disable_interrupt;
|
||||
dev->a_ops.adapter_enable_int = aac_sa_enable_interrupt;
|
||||
dev->a_ops.adapter_notify = aac_sa_notify_adapter;
|
||||
dev->a_ops.adapter_sync_cmd = sa_sync_cmd;
|
||||
dev->a_ops.adapter_check_health = aac_sa_check_health;
|
||||
dev->a_ops.adapter_intr = aac_sa_intr;
|
||||
dev->a_ops.adapter_ioremap = aac_sa_ioremap;
|
||||
|
||||
/*
|
||||
* First clear out all interrupts. Then enable the one's that
|
||||
* we can handle.
|
||||
*/
|
||||
sa_writew(dev, SaDbCSR.PRISETIRQMASK, 0xffff);
|
||||
sa_writew(dev, SaDbCSR.PRICLEARIRQMASK, (PrintfReady | DOORBELL_1 |
|
||||
DOORBELL_2 | DOORBELL_3 | DOORBELL_4));
|
||||
aac_adapter_disable_int(dev);
|
||||
aac_adapter_enable_int(dev);
|
||||
|
||||
if(aac_init_adapter(dev) == NULL)
|
||||
goto error_irq;
|
||||
if (request_irq(dev->scsi_host_ptr->irq, dev->a_ops.adapter_intr,
|
||||
IRQF_SHARED|IRQF_DISABLED,
|
||||
"aacraid", (void *)dev ) < 0) {
|
||||
printk(KERN_WARNING "%s%d: Interrupt unavailable.\n",
|
||||
name, instance);
|
||||
goto error_iounmap;
|
||||
}
|
||||
aac_adapter_enable_int(dev);
|
||||
|
||||
/*
|
||||
* Tell the adapter that all is configure, and it can start
|
||||
@@ -382,7 +397,7 @@ int aac_sa_init(struct aac_dev *dev)
|
||||
return 0;
|
||||
|
||||
error_irq:
|
||||
sa_writew(dev, SaDbCSR.PRISETIRQMASK, 0xffff);
|
||||
aac_sa_disable_interrupt(dev);
|
||||
free_irq(dev->scsi_host_ptr->irq, (void *)dev);
|
||||
|
||||
error_iounmap:
|
||||
|
Reference in New Issue
Block a user