[SCSI] aacraid: driver shutdown method
Add in pci shutdown method so that the adapter shuts down correctly and flushes its cache. Shutdown should also disable the adapter's interrupt when shutdown (in particularly if the driver is rmmod'd) to prevent spurious hardware activities. Signed-off-by: Mark Haverkamp <markh@osdl.org> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:

committed by
James Bottomley

parent
c7f476023f
commit
bd1aac809d
@@ -87,6 +87,16 @@ static irqreturn_t aac_rkt_intr(int irq, void *dev_id, struct pt_regs *regs)
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* aac_rkt_disable_interrupt - Disable interrupts
|
||||
* @dev: Adapter
|
||||
*/
|
||||
|
||||
static void aac_rkt_disable_interrupt(struct aac_dev *dev)
|
||||
{
|
||||
rkt_writeb(dev, MUnit.OIMR, dev->OIMR = 0xff);
|
||||
}
|
||||
|
||||
/**
|
||||
* rkt_sync_cmd - send a command and wait
|
||||
* @dev: Adapter
|
||||
@@ -412,10 +422,19 @@ int aac_rkt_init(struct aac_dev *dev)
|
||||
* Fill in the function dispatch table.
|
||||
*/
|
||||
dev->a_ops.adapter_interrupt = aac_rkt_interrupt_adapter;
|
||||
dev->a_ops.adapter_disable_int = aac_rkt_disable_interrupt;
|
||||
dev->a_ops.adapter_notify = aac_rkt_notify_adapter;
|
||||
dev->a_ops.adapter_sync_cmd = rkt_sync_cmd;
|
||||
dev->a_ops.adapter_check_health = aac_rkt_check_health;
|
||||
|
||||
/*
|
||||
* First clear out all interrupts. Then enable the one's that we
|
||||
* can handle.
|
||||
*/
|
||||
rkt_writeb(dev, MUnit.OIMR, 0xff);
|
||||
rkt_writel(dev, MUnit.ODR, 0xffffffff);
|
||||
rkt_writeb(dev, MUnit.OIMR, dev->OIMR = 0xfb);
|
||||
|
||||
if (aac_init_adapter(dev) == NULL)
|
||||
goto error_irq;
|
||||
/*
|
||||
@@ -438,6 +457,7 @@ error_kfree:
|
||||
kfree(dev->queues);
|
||||
|
||||
error_irq:
|
||||
rkt_writeb(dev, MUnit.OIMR, dev->OIMR = 0xff);
|
||||
free_irq(dev->scsi_host_ptr->irq, (void *)dev);
|
||||
|
||||
error_iounmap:
|
||||
|
Reference in New Issue
Block a user