X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fscsi%2Faacraid%2Frx.c;h=df12f5301b6a1c9a0cc69643545fae701a93b213;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=e111087c06b6ae8f79c56762c98d6de799b6bf69;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/scsi/aacraid/rx.c b/drivers/scsi/aacraid/rx.c index e111087c0..df12f5301 100644 --- a/drivers/scsi/aacraid/rx.c +++ b/drivers/scsi/aacraid/rx.c @@ -87,66 +87,6 @@ static irqreturn_t aac_rx_intr(int irq, void *dev_id, struct pt_regs *regs) return IRQ_NONE; } -/** - * aac_rx_enable_interrupt - Enable event reporting - * @dev: Adapter - * @event: Event to enable - * - * Enable event reporting from the i960 for a given event. - */ - -static void aac_rx_enable_interrupt(struct aac_dev * dev, u32 event) -{ - switch (event) { - - case HostNormCmdQue: - dev->irq_mask &= ~(OUTBOUNDDOORBELL_1); - break; - - case HostNormRespQue: - dev->irq_mask &= ~(OUTBOUNDDOORBELL_2); - break; - - case AdapNormCmdNotFull: - dev->irq_mask &= ~(OUTBOUNDDOORBELL_3); - break; - - case AdapNormRespNotFull: - dev->irq_mask &= ~(OUTBOUNDDOORBELL_4); - break; - } -} - -/** - * aac_rx_disable_interrupt - Disable event reporting - * @dev: Adapter - * @event: Event to enable - * - * Disable event reporting from the i960 for a given event. - */ - -static void aac_rx_disable_interrupt(struct aac_dev *dev, u32 event) -{ - switch (event) { - - case HostNormCmdQue: - dev->irq_mask |= (OUTBOUNDDOORBELL_1); - break; - - case HostNormRespQue: - dev->irq_mask |= (OUTBOUNDDOORBELL_2); - break; - - case AdapNormCmdNotFull: - dev->irq_mask |= (OUTBOUNDDOORBELL_3); - break; - - case AdapNormRespNotFull: - dev->irq_mask |= (OUTBOUNDDOORBELL_4); - break; - } -} - /** * rx_sync_cmd - send a command and wait * @dev: Adapter @@ -334,7 +274,7 @@ static void aac_rx_start_adapter(struct aac_dev *dev) */ static int aac_rx_check_health(struct aac_dev *dev) { - long status = rx_readl(dev, IndexRegs.Mailbox[7]); + u32 status = le32_to_cpu(rx_readl(dev, MUnit.OMRx[0])); /* * Check to see if the board failed any self tests. @@ -345,29 +285,39 @@ static int aac_rx_check_health(struct aac_dev *dev) * Check to see if the board panic'd. */ if (status & KERNEL_PANIC) { - char * buffer = kmalloc(512, GFP_KERNEL); + char * buffer; struct POSTSTATUS { u32 Post_Command; u32 Post_Address; - } * post = kmalloc(sizeof(struct POSTSTATUS), GFP_KERNEL); - dma_addr_t paddr = pci_map_single(dev->pdev, post, sizeof(struct POSTSTATUS), 2); - dma_addr_t baddr = pci_map_single(dev->pdev, buffer, 512, 1); - u32 status = -1; - int ret = -2; + } * post; + dma_addr_t paddr, baddr; + int ret; + + if ((status & 0xFF000000L) == 0xBC000000L) + return (status >> 16) & 0xFF; + buffer = pci_alloc_consistent(dev->pdev, 512, &baddr); + ret = -2; + if (buffer == NULL) + return ret; + post = pci_alloc_consistent(dev->pdev, + sizeof(struct POSTSTATUS), &paddr); + if (post == NULL) { + pci_free_consistent(dev->pdev, 512, buffer, baddr); + return ret; + } memset(buffer, 0, 512); post->Post_Command = cpu_to_le32(COMMAND_POST_RESULTS); post->Post_Address = cpu_to_le32(baddr); rx_writel(dev, MUnit.IMRx[0], cpu_to_le32(paddr)); rx_sync_cmd(dev, COMMAND_POST_RESULTS, baddr, &status); - pci_unmap_single(dev->pdev, paddr, sizeof(struct POSTSTATUS), 2); - kfree(post); + pci_free_consistent(dev->pdev, sizeof(struct POSTSTATUS), + post, paddr); if ((buffer[0] == '0') && (buffer[1] == 'x')) { ret = (buffer[2] <= '9') ? (buffer[2] - '0') : (buffer[2] - 'A' + 10); ret <<= 4; ret += (buffer[3] <= '9') ? (buffer[3] - '0') : (buffer[3] - 'A' + 10); } - pci_unmap_single(dev->pdev, baddr, 512, 1); - kfree(buffer); + pci_free_consistent(dev->pdev, 512, buffer, baddr); return ret; } /* @@ -379,7 +329,7 @@ static int aac_rx_check_health(struct aac_dev *dev) * Everything is OK */ return 0; -} /* aac_rx_check_health */ +} /** * aac_rx_init - initialize an i960 based AAC card @@ -403,7 +353,7 @@ int aac_rx_init(struct aac_dev *dev) /* * Map in the registers from the adapter. */ - if((dev->regs.rx = (struct rx_registers *)ioremap((unsigned long)dev->scsi_host_ptr->base, 8192))==NULL) + if((dev->regs.rx = ioremap((unsigned long)dev->scsi_host_ptr->base, 8192))==NULL) { printk(KERN_WARNING "aacraid: unable to map i960.\n" ); return -1; @@ -454,8 +404,6 @@ int aac_rx_init(struct aac_dev *dev) * Fill in the function dispatch table. */ dev->a_ops.adapter_interrupt = aac_rx_interrupt_adapter; - dev->a_ops.adapter_enable_int = aac_rx_enable_interrupt; - dev->a_ops.adapter_disable_int = aac_rx_disable_interrupt; dev->a_ops.adapter_notify = aac_rx_notify_adapter; dev->a_ops.adapter_sync_cmd = rx_sync_cmd; dev->a_ops.adapter_check_health = aac_rx_check_health;