1/*- 2 * Copyright (c) 2000 Michael Smith 3 * Copyright (c) 2001 Scott Long 4 * Copyright (c) 2000 BSDi 5 * Copyright (c) 2001 Adaptec, Inc. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 12 unchanged lines hidden (view full) --- 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 * |
29 * $FreeBSD: head/sys/dev/aac/aac_pci.c 95536 2002-04-27 01:31:17Z scottl $ |
30 */ 31 32/* 33 * PCI bus interface and resource allocation. 34 */ 35 36#include "opt_aac.h" 37 --- 47 unchanged lines hidden (view full) --- 85 86struct aac_ident 87{ 88 u_int16_t vendor; 89 u_int16_t device; 90 u_int16_t subvendor; 91 u_int16_t subdevice; 92 int hwif; |
93 int quirks; |
94 char *desc; 95} aac_identifiers[] = { |
96 {0x1028, 0x0001, 0x1028, 0x0001, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 97 "Dell PERC 2/Si"}, 98 {0x1028, 0x0002, 0x1028, 0x0002, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 99 "Dell PERC 3/Di"}, 100 {0x1028, 0x0003, 0x1028, 0x0003, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 101 "Dell PERC 3/Si"}, 102 {0x1028, 0x0004, 0x1028, 0x00d0, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 103 "Dell PERC 3/Si"}, 104 {0x1028, 0x0002, 0x1028, 0x00d1, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 105 "Dell PERC 3/Di"}, 106 {0x1028, 0x0002, 0x1028, 0x00d9, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 107 "Dell PERC 3/Di"}, 108 {0x1028, 0x0008, 0x1028, 0x00cf, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 109 "Dell PERC 3/Di"}, 110 {0x1028, 0x000a, 0x1028, 0x0106, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 111 "Dell PERC 3/Di"}, 112 {0x1028, 0x000a, 0x1028, 0x011b, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 113 "Dell PERC 3/Di"}, 114 {0x1028, 0x000a, 0x1028, 0x0121, AAC_HWIF_I960RX, AAC_QUIRK_NOCAM, 115 "Dell PERC 3/Di"}, 116 {0x1011, 0x0046, 0x9005, 0x0364, AAC_HWIF_STRONGARM, AAC_QUIRK_NOCAM, 117 "Adaptec AAC-364"}, 118 {0x1011, 0x0046, 0x9005, 0x0365, AAC_HWIF_STRONGARM, 0, 119 "Adaptec SCSI RAID 5400S"}, 120 {0x1011, 0x0046, 0x9005, 0x1364, AAC_HWIF_STRONGARM, AAC_QUIRK_NOCAM | 121 AAC_QUIRK_PERC2QC, "Dell PERC 2/QC"}, 122 {0x1011, 0x0046, 0x103c, 0x10c2, AAC_HWIF_STRONGARM, 123 AAC_QUIRK_CAM_NORESET, "HP NetRaid-4M"}, 124 {0x9005, 0x0285, 0x9005, 0x0285, AAC_HWIF_I960RX, 0, |
125 "Adaptec SCSI RAID 2200S"}, |
126 {0x9005, 0x0285, 0x9005, 0x0287, AAC_HWIF_I960RX, 0, |
127 "Adaptec SCSI RAID 2200S"}, |
128 {0x9005, 0x0285, 0x9005, 0x0286, AAC_HWIF_I960RX, 0, |
129 "Adaptec SCSI RAID 2120S"}, |
130 {0, 0, 0, 0, 0, 0, 0} |
131}; 132 133/* 134 * Determine whether this is one of our supported adapters. 135 */ 136static int 137aac_pci_probe(device_t dev) 138{ --- 136 unchanged lines hidden (view full) --- 275 BUS_SPACE_MAXADDR, /* lowaddr */ 276 BUS_SPACE_MAXADDR, /* highaddr */ 277 NULL, NULL, /* filter, filterarg */ 278 AAC_FIB_COUNT * 279 sizeof(struct aac_fib), 1, /* maxsize, nsegments */ 280 BUS_SPACE_MAXSIZE_32BIT, /* maxsegsize */ 281 0, /* flags */ 282 &sc->aac_fib_dmat)) { |
283 device_printf(sc->aac_dev, "can't allocate FIB DMA tag\n");; |
284 goto out; 285 } 286 287 /* 288 * Detect the hardware interface version, set up the bus interface 289 * indirection. 290 */ 291 sc->aac_hwif = AAC_HWIF_UNKNOWN; 292 for (i = 0; aac_identifiers[i].vendor != 0; i++) { 293 if ((aac_identifiers[i].vendor == pci_get_vendor(dev)) && |
294 (aac_identifiers[i].device == pci_get_device(dev)) && 295 (aac_identifiers[i].subvendor == pci_get_subvendor(dev)) && 296 (aac_identifiers[i].subdevice == pci_get_subdevice(dev))) { |
297 sc->aac_hwif = aac_identifiers[i].hwif; 298 switch(sc->aac_hwif) { 299 case AAC_HWIF_I960RX: 300 debug(2, "set hardware up for i960Rx"); 301 sc->aac_if = aac_rx_interface; 302 break; 303 304 case AAC_HWIF_STRONGARM: 305 debug(2, "set hardware up for StrongARM"); 306 sc->aac_if = aac_sa_interface; 307 break; 308 case AAC_HWIF_FALCON: 309 debug(2, "set hardware up for Falcon/PPC"); 310 sc->aac_if = aac_fa_interface; 311 break; 312 } |
313 314 /* Set up quirks */ 315 sc->quirks = aac_identifiers[i].quirks; 316 |
317 break; 318 } 319 } 320 if (sc->aac_hwif == AAC_HWIF_UNKNOWN) { 321 device_printf(sc->aac_dev, "unknown hardware type\n"); 322 error = ENXIO; 323 goto out; 324 } 325 326 327 /* |
328 * Do bus-independent initialisation. 329 */ 330 error = aac_attach(sc); 331 332out: 333 if (error) 334 aac_free(sc); 335 return(error); 336} |