[SCSI] hptiop: Add RR44xx adapter support
Most code changes were made to support RR44xx adapters. - add more PCI device ID. - using PCI BAR[2] to access RR44xx IOP. - using PCI BAR[0] to check and clear RR44xx IRQ. Signed-off-by: HighPoint Linux Team <linux@highpoint-tech.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
このコミットが含まれているのは:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* HighPoint RR3xxx/4xxx controller driver for Linux
|
||||
* Copyright (C) 2006-2007 HighPoint Technologies, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2006-2009 HighPoint Technologies, Inc. All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -41,7 +41,7 @@ MODULE_DESCRIPTION("HighPoint RocketRAID 3xxx/4xxx Controller Driver");
|
||||
|
||||
static char driver_name[] = "hptiop";
|
||||
static const char driver_name_long[] = "RocketRAID 3xxx/4xxx Controller driver";
|
||||
static const char driver_ver[] = "v1.3 (071203)";
|
||||
static const char driver_ver[] = "v1.6 (090910)";
|
||||
|
||||
static int iop_send_sync_msg(struct hptiop_hba *hba, u32 msg, u32 millisec);
|
||||
static void hptiop_finish_scsi_req(struct hptiop_hba *hba, u32 tag,
|
||||
@@ -115,9 +115,13 @@ static void hptiop_drain_outbound_queue_itl(struct hptiop_hba *hba)
|
||||
static int iop_intr_itl(struct hptiop_hba *hba)
|
||||
{
|
||||
struct hpt_iopmu_itl __iomem *iop = hba->u.itl.iop;
|
||||
void __iomem *plx = hba->u.itl.plx;
|
||||
u32 status;
|
||||
int ret = 0;
|
||||
|
||||
if (plx && readl(plx + 0x11C5C) & 0xf)
|
||||
writel(1, plx + 0x11C60);
|
||||
|
||||
status = readl(&iop->outbound_intstatus);
|
||||
|
||||
if (status & IOPMU_OUTBOUND_INT_MSG0) {
|
||||
@@ -460,15 +464,25 @@ static void __iomem *hptiop_map_pci_bar(struct hptiop_hba *hba, int index)
|
||||
|
||||
static int hptiop_map_pci_bar_itl(struct hptiop_hba *hba)
|
||||
{
|
||||
struct pci_dev *pcidev = hba->pcidev;
|
||||
hba->u.itl.iop = hptiop_map_pci_bar(hba, 0);
|
||||
if (hba->u.itl.iop)
|
||||
return 0;
|
||||
else
|
||||
if (hba->u.itl.iop == NULL)
|
||||
return -1;
|
||||
if ((pcidev->device & 0xff00) == 0x4400) {
|
||||
hba->u.itl.plx = hba->u.itl.iop;
|
||||
hba->u.itl.iop = hptiop_map_pci_bar(hba, 2);
|
||||
if (hba->u.itl.iop == NULL) {
|
||||
iounmap(hba->u.itl.plx);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void hptiop_unmap_pci_bar_itl(struct hptiop_hba *hba)
|
||||
{
|
||||
if (hba->u.itl.plx)
|
||||
iounmap(hba->u.itl.plx);
|
||||
iounmap(hba->u.itl.iop);
|
||||
}
|
||||
|
||||
@@ -1239,22 +1253,23 @@ static struct hptiop_adapter_ops hptiop_mv_ops = {
|
||||
static struct pci_device_id hptiop_id_table[] = {
|
||||
{ PCI_VDEVICE(TTI, 0x3220), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3320), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3520), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4320), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3410), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3510), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3511), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3520), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3521), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3522), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3410), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3540), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3530), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3540), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3560), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4322), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4321), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4210), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4211), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4310), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4311), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4320), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4321), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4322), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x4400), (kernel_ulong_t)&hptiop_itl_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3120), (kernel_ulong_t)&hptiop_mv_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3122), (kernel_ulong_t)&hptiop_mv_ops },
|
||||
{ PCI_VDEVICE(TTI, 0x3020), (kernel_ulong_t)&hptiop_mv_ops },
|
||||
|
新しいイシューから参照
ユーザーをブロックする