[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [OpenBSD 2.9] HP NetRAID 4M (aac driver) Undetected
Ok, here's a patch to src/sys that might make the HP NetRAID 4M work.
Furthermore I discovered that all the StrongARM-based aac device
were probably wrongly probed for. So if you have an Adaptec 364,
Adaptec 3642, Dell PERC 2/QC or Dell PERC 3/QC Raid controller
this patch might make them attach correctly. Yet one more thing
which I believe also hits ami, cac and puc; they don't do endian
conversion of their sub-ids, which ought to make them unusable
on powerpc. mickey@ should be able to test that suspicion, at least
for ami and cac.
Niklas
Index: dev/pci/pcidevs
===================================================================
RCS file: /cvs/src/sys/dev/pci/pcidevs,v
retrieving revision 1.413
diff -u -r1.413 pcidevs
--- dev/pci/pcidevs 2001/07/06 17:06:48 1.413
+++ dev/pci/pcidevs 2001/07/07 10:44:37
@@ -722,6 +722,7 @@
product ADP2 AAC364 0x0364 AAC-364
product ADP2 AAC3642 0x0365 AAC-3642
product ADP2 PERC_2QC 0x1364 Dell PERC 2/QC
+/* XXX guess */
product ADP2 PERC_3QC 0x1365 Dell PERC 3/QC
/* Advanced System Products */
@@ -1013,6 +1014,13 @@
product DELL PERC_2SI 0x0001 PERC 2/Si
product DELL PERC_3DI 0x0002 PERC 3/Di
product DELL PERC_3SI 0x0003 PERC 3/Si
+product DELL PERC_3SI_2 0x0004 PERC 3/Si
+product DELL PERC_3DI_2 0x0008 PERC 3/Di
+product DELL PERC_3SI 0x0003 PERC 3/Si
+product DELL PERC_3DI_2_SUB 0x00cf PERC 3/Di
+product DELL PERC_3SI_2_SUB 0x00d0 PERC 3/Si
+product DELL PERC_3DI_SUB2 0x00d1 PERC 3/Di
+product DELL PERC_3DI_SUB3 0x00d9 PERC 3/Di
/* D-Link products */
product DLINK 550TX 0x1002 550TX
@@ -1110,7 +1118,6 @@
/* Hewlett-Packard products */
product HP J2585A 0x1030 J2585A
product HP J2585B 0x1031 J2585B
-/* XXX guess */
product HP NETRAID_4M 0x10c2 NetRaid-4M
/* Hi/Fn products */
Index: dev/pci/pcidevs.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/pcidevs.h,v
retrieving revision 1.417
diff -u -r1.417 pcidevs.h
--- dev/pci/pcidevs.h 2001/07/06 17:07:30 1.417
+++ dev/pci/pcidevs.h 2001/07/07 10:44:45
@@ -727,6 +727,7 @@
#define PCI_PRODUCT_ADP2_AAC364 0x0364 /* AAC-364 */
#define PCI_PRODUCT_ADP2_AAC3642 0x0365 /* AAC-3642 */
#define PCI_PRODUCT_ADP2_PERC_2QC 0x1364 /* Dell PERC 2/QC */
+/* XXX guess */
#define PCI_PRODUCT_ADP2_PERC_3QC 0x1365 /* Dell PERC 3/QC */
/* Advanced System Products */
@@ -1018,6 +1019,13 @@
#define PCI_PRODUCT_DELL_PERC_2SI 0x0001 /* PERC 2/Si */
#define PCI_PRODUCT_DELL_PERC_3DI 0x0002 /* PERC 3/Di */
#define PCI_PRODUCT_DELL_PERC_3SI 0x0003 /* PERC 3/Si */
+#define PCI_PRODUCT_DELL_PERC_3SI_2 0x0004 /* PERC 3/Si */
+#define PCI_PRODUCT_DELL_PERC_3DI_2 0x0008 /* PERC 3/Di */
+#define PCI_PRODUCT_DELL_PERC_3SI 0x0003 /* PERC 3/Si */
+#define PCI_PRODUCT_DELL_PERC_3DI_2_SUB 0x00cf /* PERC 3/Di */
+#define PCI_PRODUCT_DELL_PERC_3SI_2_SUB 0x00d0 /* PERC 3/Si */
+#define PCI_PRODUCT_DELL_PERC_3DI_SUB2 0x00d1 /* PERC 3/Di */
+#define PCI_PRODUCT_DELL_PERC_3DI_SUB3 0x00d9 /* PERC 3/Di */
/* D-Link products */
#define PCI_PRODUCT_DLINK_550TX 0x1002 /* 550TX */
@@ -1115,7 +1123,6 @@
/* Hewlett-Packard products */
#define PCI_PRODUCT_HP_J2585A 0x1030 /* J2585A */
#define PCI_PRODUCT_HP_J2585B 0x1031 /* J2585B */
-/* XXX guess */
#define PCI_PRODUCT_HP_NETRAID_4M 0x10c2 /* NetRaid-4M */
/* Hi/Fn products */
Index: dev/pci/pcidevs_data.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/pcidevs_data.h,v
retrieving revision 1.417
diff -u -r1.417 pcidevs_data.h
--- dev/pci/pcidevs_data.h 2001/07/06 17:07:31 1.417
+++ dev/pci/pcidevs_data.h 2001/07/07 10:44:45
@@ -1423,6 +1423,34 @@
"PERC 3/Si",
},
{
+ PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3SI_2,
+ "PERC 3/Si",
+ },
+ {
+ PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3DI_2,
+ "PERC 3/Di",
+ },
+ {
+ PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3SI,
+ "PERC 3/Si",
+ },
+ {
+ PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3DI_2_SUB,
+ "PERC 3/Di",
+ },
+ {
+ PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3SI_2_SUB,
+ "PERC 3/Si",
+ },
+ {
+ PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3DI_SUB2,
+ "PERC 3/Di",
+ },
+ {
+ PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3DI_SUB3,
+ "PERC 3/Di",
+ },
+ {
PCI_VENDOR_DLINK, PCI_PRODUCT_DLINK_550TX,
"550TX",
},
Index: dev/pci/aac_pci.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/aac_pci.c,v
retrieving revision 1.2
diff -u -r1.2 aac_pci.c
--- dev/pci/aac_pci.c 2001/06/12 15:40:29 1.2
+++ dev/pci/aac_pci.c 2001/07/07 10:57:48
@@ -65,18 +65,46 @@
struct aac_ident {
u_int16_t vendor;
u_int16_t device;
+ u_int16_t subvendor;
+ u_int16_t subdevice;
int hwif;
} aac_identifiers[] = {
- { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_2SI, AAC_HWIF_I960RX },
- { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3DI, AAC_HWIF_I960RX },
- { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3SI, AAC_HWIF_I960RX },
- { PCI_VENDOR_ADP2, PCI_PRODUCT_ADP2_AAC2622, AAC_HWIF_I960RX },
- { PCI_VENDOR_ADP2, PCI_PRODUCT_ADP2_AAC364, AAC_HWIF_STRONGARM },
- { PCI_VENDOR_ADP2, PCI_PRODUCT_ADP2_AAC3642, AAC_HWIF_STRONGARM },
- { PCI_VENDOR_ADP2, PCI_PRODUCT_ADP2_PERC_2QC, AAC_HWIF_STRONGARM },
- { PCI_VENDOR_ADP2, PCI_PRODUCT_ADP2_PERC_3QC, AAC_HWIF_STRONGARM },
- { PCI_VENDOR_HP, PCI_PRODUCT_HP_NETRAID_4M, AAC_HWIF_STRONGARM },
- { 0, 0, 0 }
+ /* Dell PERC 2/Si models */
+ { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_2SI, PCI_VENDOR_DELL,
+ PCI_PRODUCT_DELL_PERC_2SI, AAC_HWIF_I960RX },
+ /* Dell PERC 3/Di models */
+ { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3DI, PCI_VENDOR_DELL,
+ PCI_PRODUCT_DELL_PERC_3DI, AAC_HWIF_I960RX },
+ { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3DI, PCI_VENDOR_DELL,
+ PCI_PRODUCT_DELL_PERC_3DI_SUB2, AAC_HWIF_I960RX },
+ { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3DI, PCI_VENDOR_DELL,
+ PCI_PRODUCT_DELL_PERC_3DI_SUB3, AAC_HWIF_I960RX },
+ { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3DI_2, PCI_VENDOR_DELL,
+ PCI_PRODUCT_DELL_PERC_3DI_2_SUB, AAC_HWIF_I960RX },
+ /* Dell PERC 3/Si models */
+ { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3SI, PCI_VENDOR_DELL,
+ PCI_PRODUCT_DELL_PERC_3SI, AAC_HWIF_I960RX },
+ { PCI_VENDOR_DELL, PCI_PRODUCT_DELL_PERC_3SI_2, PCI_VENDOR_DELL,
+ PCI_PRODUCT_DELL_PERC_3SI_2_SUB, AAC_HWIF_I960RX },
+ /* Adaptec ADP-2622 */
+ { PCI_VENDOR_ADP2, PCI_PRODUCT_ADP2_AAC2622, PCI_VENDOR_ADP2,
+ PCI_PRODUCT_ADP2_AAC2622, AAC_HWIF_I960RX },
+ /* Adaptec ADP-364 */
+ { PCI_VENDOR_DEC, PCI_PRODUCT_DEC_CPQ42XX, PCI_VENDOR_ADP2,
+ PCI_PRODUCT_ADP2_AAC364, AAC_HWIF_STRONGARM },
+ /* Adaptec ADP-3642 */
+ { PCI_VENDOR_DEC, PCI_PRODUCT_DEC_CPQ42XX, PCI_VENDOR_ADP2,
+ PCI_PRODUCT_ADP2_AAC3642, AAC_HWIF_STRONGARM },
+ /* Dell PERC 2/QC */
+ { PCI_VENDOR_DEC, PCI_PRODUCT_DEC_CPQ42XX, PCI_VENDOR_ADP2,
+ PCI_PRODUCT_ADP2_PERC_2QC, AAC_HWIF_STRONGARM },
+ /* Dell PERC 3/QC */
+ { PCI_VENDOR_DEC, PCI_PRODUCT_DEC_CPQ42XX, PCI_VENDOR_ADP2,
+ PCI_PRODUCT_ADP2_PERC_3QC, AAC_HWIF_STRONGARM },
+ /* HP NetRAID-4M */
+ { PCI_VENDOR_DEC, PCI_PRODUCT_DEC_CPQ42XX, PCI_VENDOR_HP,
+ PCI_PRODUCT_HP_NETRAID_4M, AAC_HWIF_STRONGARM },
+ { 0, 0, 0, 0 }
};
struct cfattach aac_pci_ca = {
@@ -94,11 +122,17 @@
{
struct pci_attach_args *pa = aux;
struct aac_ident *m;
+ u_int32_t subsysid;
for (m = aac_identifiers; m->vendor != 0; m++)
if (m->vendor == PCI_VENDOR(pa->pa_id) &&
- m->device == PCI_PRODUCT(pa->pa_id))
- return (1);
+ m->device == PCI_PRODUCT(pa->pa_id)) {
+ subsysid = letoh32(pci_conf_read(pa->pa_pc, pa->pa_tag,
+ PCI_SUBSYS_ID_REG));
+ if (m->subvendor == PCI_VENDOR(subsysid) &&
+ m->subdevice == PCI_PRODUCT(subsysid))
+ return (1);
+ }
return (0);
}
@@ -117,6 +151,7 @@
const char *intrstr;
int state = 0;
struct aac_ident *m;
+ u_int32_t subsysid;
printf(": ");
@@ -172,21 +207,26 @@
for (m = aac_identifiers; m->vendor != 0; m++)
if (m->vendor == PCI_VENDOR(pa->pa_id) &&
m->device == PCI_PRODUCT(pa->pa_id)) {
- sc->sc_hwif = m->hwif;
- switch(sc->sc_hwif) {
- case AAC_HWIF_I960RX:
- AAC_DPRINTF(AAC_D_MISC,
- ("set hardware up for i960Rx"));
- sc->sc_if = aac_rx_interface;
- break;
-
- case AAC_HWIF_STRONGARM:
- AAC_DPRINTF(AAC_D_MISC,
- ("set hardware up for StrongARM"));
- sc->sc_if = aac_sa_interface;
+ subsysid = letoh32(pci_conf_read(pa->pa_pc, pa->pa_tag,
+ PCI_SUBSYS_ID_REG));
+ if (m->subvendor == PCI_VENDOR(subsysid) &&
+ m->subdevice == PCI_PRODUCT(subsysid)) {
+ sc->sc_hwif = m->hwif;
+ switch(sc->sc_hwif) {
+ case AAC_HWIF_I960RX:
+ AAC_DPRINTF(AAC_D_MISC,
+ ("set hardware up for i960Rx"));
+ sc->sc_if = aac_rx_interface;
+ break;
+
+ case AAC_HWIF_STRONGARM:
+ AAC_DPRINTF(AAC_D_MISC,
+ ("set hardware up for StrongARM"));
+ sc->sc_if = aac_sa_interface;
+ break;
+ }
break;
}
- break;
}
if (aac_attach(sc))