vserver 1.9.5.x5
[linux-2.6.git] / drivers / scsi / aic7xxx / aic79xx_pci.c
index 7cc83da..4c3bb7b 100644 (file)
@@ -51,6 +51,8 @@
 #include <dev/aic7xxx/aic79xx_inline.h>
 #endif
 
+#include "aic79xx_pci.h"
+
 static __inline uint64_t
 ahd_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor)
 {
@@ -64,34 +66,12 @@ ahd_compose_id(u_int device, u_int vendor, u_int subdevice, u_int subvendor)
        return (id);
 }
 
-#define ID_ALL_MASK                    0xFFFFFFFFFFFFFFFFull
-#define ID_ALL_IROC_MASK               0xFFFFFF7FFFFFFFFFull
-#define ID_DEV_VENDOR_MASK             0xFFFFFFFF00000000ull
-#define ID_9005_GENERIC_MASK           0xFFF0FFFF00000000ull
-#define ID_9005_GENERIC_IROC_MASK      0xFFF0FF7F00000000ull
-
-#define ID_AIC7901                     0x800F9005FFFF9005ull
-#define ID_AHA_29320A                  0x8000900500609005ull
-#define ID_AHA_29320ALP                        0x8017900500449005ull
-
-#define ID_AIC7901A                    0x801E9005FFFF9005ull
-#define ID_AHA_29320                   0x8012900500429005ull
-#define ID_AHA_29320B                  0x8013900500439005ull
-#define ID_AHA_29320LP                 0x8014900500449005ull
-
-#define ID_AIC7902                     0x801F9005FFFF9005ull
-#define ID_AIC7902_B                   0x801D9005FFFF9005ull
-#define ID_AHA_39320                   0x8010900500409005ull
-#define ID_AHA_39320_B                 0x8015900500409005ull
-#define ID_AHA_39320A                  0x8016900500409005ull
-#define ID_AHA_39320D                  0x8011900500419005ull
-#define ID_AHA_39320D_B                        0x801C900500419005ull
-#define ID_AHA_39320D_HP               0x8011900500AC0E11ull
-#define ID_AHA_39320D_B_HP             0x801C900500AC0E11ull
 #define ID_AIC7902_PCI_REV_A4          0x3
 #define ID_AIC7902_PCI_REV_B0          0x10
 #define SUBID_HP                       0x0E11
 
+#define DEVID_9005_HOSTRAID(id) ((id) & 0x80)
+
 #define DEVID_9005_TYPE(id) ((id) & 0xF)
 #define                DEVID_9005_TYPE_HBA             0x0     /* Standard Card */
 #define                DEVID_9005_TYPE_HBA_2EXT        0x1     /* 2 External Ports */
@@ -134,18 +114,18 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
                "Adaptec 29320ALP Ultra320 SCSI adapter",
                ahd_aic7901_setup
        },
-       /* aic7901A based controllers */
+       /* aic7902 based controllers */ 
        {
                ID_AHA_29320,
                ID_ALL_MASK,
                "Adaptec 29320 Ultra320 SCSI adapter",
-               ahd_aic7901A_setup
+               ahd_aic7902_setup
        },
        {
                ID_AHA_29320B,
                ID_ALL_MASK,
                "Adaptec 29320B Ultra320 SCSI adapter",
-               ahd_aic7901A_setup
+               ahd_aic7902_setup
        },
        {
                ID_AHA_29320LP,
@@ -153,7 +133,6 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
                "Adaptec 29320LP Ultra320 SCSI adapter",
                ahd_aic7901A_setup
        },
-       /* aic7902 based controllers */ 
        {
                ID_AHA_39320,
                ID_ALL_MASK,
@@ -196,22 +175,10 @@ struct ahd_pci_identity ahd_pci_ident_table [] =
                "Adaptec (HP OEM) 39320D Ultra320 SCSI adapter",
                ahd_aic7902_setup
        },
-       {
-               ID_AHA_29320,
-               ID_ALL_MASK,
-               "Adaptec 29320 Ultra320 SCSI adapter",
-               ahd_aic7902_setup
-       },
-       {
-               ID_AHA_29320B,
-               ID_ALL_MASK,
-               "Adaptec 29320B Ultra320 SCSI adapter",
-               ahd_aic7902_setup
-       },
        /* Generic chip probes for devices we don't know 'exactly' */
        {
-               ID_AIC7901 & ID_DEV_VENDOR_MASK,
-               ID_DEV_VENDOR_MASK,
+               ID_AIC7901 & ID_9005_GENERIC_MASK,
+               ID_9005_GENERIC_MASK,
                "Adaptec AIC7901 Ultra320 SCSI adapter",
                ahd_aic7901_setup
        },
@@ -294,6 +261,12 @@ ahd_find_pci_device(ahd_dev_softc_t pci)
                                 subdevice,
                                 subvendor);
 
+       /*
+        * Controllers, mask out the IROC/HostRAID bit
+        */
+       
+       full_id &= ID_ALL_IROC_MASK;
+
        for (i = 0; i < ahd_num_pci_devs; i++) {
                entry = &ahd_pci_ident_table[i];
                if (entry->full_id == (full_id & entry->id_mask)) {