diff options
Diffstat (limited to 'drivers/scsi/aacraid/rx.c')
-rw-r--r-- | drivers/scsi/aacraid/rx.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/scsi/aacraid/rx.c b/drivers/scsi/aacraid/rx.c index 1ff25f49fada..a8459faf87ca 100644 --- a/drivers/scsi/aacraid/rx.c +++ b/drivers/scsi/aacraid/rx.c | |||
@@ -88,6 +88,16 @@ static irqreturn_t aac_rx_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
88 | } | 88 | } |
89 | 89 | ||
90 | /** | 90 | /** |
91 | * aac_rx_disable_interrupt - Disable interrupts | ||
92 | * @dev: Adapter | ||
93 | */ | ||
94 | |||
95 | static void aac_rx_disable_interrupt(struct aac_dev *dev) | ||
96 | { | ||
97 | rx_writeb(dev, MUnit.OIMR, dev->OIMR = 0xff); | ||
98 | } | ||
99 | |||
100 | /** | ||
91 | * rx_sync_cmd - send a command and wait | 101 | * rx_sync_cmd - send a command and wait |
92 | * @dev: Adapter | 102 | * @dev: Adapter |
93 | * @command: Command to execute | 103 | * @command: Command to execute |
@@ -412,10 +422,19 @@ int aac_rx_init(struct aac_dev *dev) | |||
412 | * Fill in the function dispatch table. | 422 | * Fill in the function dispatch table. |
413 | */ | 423 | */ |
414 | dev->a_ops.adapter_interrupt = aac_rx_interrupt_adapter; | 424 | dev->a_ops.adapter_interrupt = aac_rx_interrupt_adapter; |
425 | dev->a_ops.adapter_disable_int = aac_rx_disable_interrupt; | ||
415 | dev->a_ops.adapter_notify = aac_rx_notify_adapter; | 426 | dev->a_ops.adapter_notify = aac_rx_notify_adapter; |
416 | dev->a_ops.adapter_sync_cmd = rx_sync_cmd; | 427 | dev->a_ops.adapter_sync_cmd = rx_sync_cmd; |
417 | dev->a_ops.adapter_check_health = aac_rx_check_health; | 428 | dev->a_ops.adapter_check_health = aac_rx_check_health; |
418 | 429 | ||
430 | /* | ||
431 | * First clear out all interrupts. Then enable the one's that we | ||
432 | * can handle. | ||
433 | */ | ||
434 | rx_writeb(dev, MUnit.OIMR, 0xff); | ||
435 | rx_writel(dev, MUnit.ODR, 0xffffffff); | ||
436 | rx_writeb(dev, MUnit.OIMR, dev->OIMR = 0xfb); | ||
437 | |||
419 | if (aac_init_adapter(dev) == NULL) | 438 | if (aac_init_adapter(dev) == NULL) |
420 | goto error_irq; | 439 | goto error_irq; |
421 | /* | 440 | /* |
@@ -438,6 +457,7 @@ error_kfree: | |||
438 | kfree(dev->queues); | 457 | kfree(dev->queues); |
439 | 458 | ||
440 | error_irq: | 459 | error_irq: |
460 | rx_writeb(dev, MUnit.OIMR, dev->OIMR = 0xff); | ||
441 | free_irq(dev->scsi_host_ptr->irq, (void *)dev); | 461 | free_irq(dev->scsi_host_ptr->irq, (void *)dev); |
442 | 462 | ||
443 | error_iounmap: | 463 | error_iounmap: |