Deleted Added
full compact
aac_pci.c (95350) aac_pci.c (95536)
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 *
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 95350 2002-04-24 05:12:50Z scottl $
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;
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;
93 char *desc;
94} aac_identifiers[] = {
94 char *desc;
95} aac_identifiers[] = {
95 {0x1028, 0x0001, 0x1028, 0x0001, AAC_HWIF_I960RX, "Dell PERC 2/Si"},
96 {0x1028, 0x0002, 0x1028, 0x0002, AAC_HWIF_I960RX, "Dell PERC 3/Di"},
97 {0x1028, 0x0003, 0x1028, 0x0003, AAC_HWIF_I960RX, "Dell PERC 3/Si"},
98 {0x1028, 0x0004, 0x1028, 0x00d0, AAC_HWIF_I960RX, "Dell PERC 3/Si"},
99 {0x1028, 0x0002, 0x1028, 0x00d1, AAC_HWIF_I960RX, "Dell PERC 3/Di"},
100 {0x1028, 0x0002, 0x1028, 0x00d9, AAC_HWIF_I960RX, "Dell PERC 3/Di"},
101 {0x1028, 0x0008, 0x1028, 0x00cf, AAC_HWIF_I960RX, "Dell PERC 3/Di"},
102 {0x1028, 0x000a, 0x1028, 0x0106, AAC_HWIF_I960RX, "Dell PERC 3/Di"},
103 {0x1028, 0x000a, 0x1028, 0x011b, AAC_HWIF_I960RX, "Dell PERC 3/Di"},
104 {0x1028, 0x000a, 0x1028, 0x0121, AAC_HWIF_I960RX, "Dell PERC 3/Di"},
105 {0x1011, 0x0046, 0x9005, 0x0364, AAC_HWIF_STRONGARM, "Adaptec AAC-364"},
106 {0x1011, 0x0046, 0x9005, 0x0365, AAC_HWIF_STRONGARM,
107 "Adaptec SCSI RAID 5400S"},
108 {0x1011, 0x0046, 0x9005, 0x1364, AAC_HWIF_STRONGARM, "Dell PERC 2/QC"},
109 {0x1011, 0x0046, 0x103c, 0x10c2, AAC_HWIF_STRONGARM, "HP NetRaid-4M"},
110 {0x9005, 0x0285, 0x9005, 0x0285, AAC_HWIF_I960RX,
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,
111 "Adaptec SCSI RAID 2200S"},
125 "Adaptec SCSI RAID 2200S"},
112 {0x9005, 0x0285, 0x9005, 0x0287, AAC_HWIF_I960RX,
126 {0x9005, 0x0285, 0x9005, 0x0287, AAC_HWIF_I960RX, 0,
113 "Adaptec SCSI RAID 2200S"},
127 "Adaptec SCSI RAID 2200S"},
114 {0x9005, 0x0285, 0x9005, 0x0286, AAC_HWIF_I960RX,
128 {0x9005, 0x0285, 0x9005, 0x0286, AAC_HWIF_I960RX, 0,
115 "Adaptec SCSI RAID 2120S"},
129 "Adaptec SCSI RAID 2120S"},
116 {0, 0, 0, 0, 0, 0}
130 {0, 0, 0, 0, 0, 0, 0}
117};
118
119/*
120 * Determine whether this is one of our supported adapters.
121 */
122static int
123aac_pci_probe(device_t dev)
124{

--- 136 unchanged lines hidden (view full) ---

261 BUS_SPACE_MAXADDR, /* lowaddr */
262 BUS_SPACE_MAXADDR, /* highaddr */
263 NULL, NULL, /* filter, filterarg */
264 AAC_FIB_COUNT *
265 sizeof(struct aac_fib), 1, /* maxsize, nsegments */
266 BUS_SPACE_MAXSIZE_32BIT, /* maxsegsize */
267 0, /* flags */
268 &sc->aac_fib_dmat)) {
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)) {
269 device_printf(sc->aac_dev, "can't allocate FIB DMA tag\n");
283 device_printf(sc->aac_dev, "can't allocate FIB DMA tag\n");;
270 goto out;
271 }
272
273 /*
274 * Detect the hardware interface version, set up the bus interface
275 * indirection.
276 */
277 sc->aac_hwif = AAC_HWIF_UNKNOWN;
278 for (i = 0; aac_identifiers[i].vendor != 0; i++) {
279 if ((aac_identifiers[i].vendor == pci_get_vendor(dev)) &&
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)) &&
280 (aac_identifiers[i].device == pci_get_device(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))) {
281 sc->aac_hwif = aac_identifiers[i].hwif;
282 switch(sc->aac_hwif) {
283 case AAC_HWIF_I960RX:
284 debug(2, "set hardware up for i960Rx");
285 sc->aac_if = aac_rx_interface;
286 break;
287
288 case AAC_HWIF_STRONGARM:
289 debug(2, "set hardware up for StrongARM");
290 sc->aac_if = aac_sa_interface;
291 break;
292 case AAC_HWIF_FALCON:
293 debug(2, "set hardware up for Falcon/PPC");
294 sc->aac_if = aac_fa_interface;
295 break;
296 }
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
297 break;
298 }
299 }
300 if (sc->aac_hwif == AAC_HWIF_UNKNOWN) {
301 device_printf(sc->aac_dev, "unknown hardware type\n");
302 error = ENXIO;
303 goto out;
304 }
305
306
307 /*
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 /*
308 * Check for quirky hardware
309 */
310 if (pci_get_subdevice(dev) == 0x1364 &&
311 pci_get_subvendor(dev) == 0x9005)
312 sc->quirks |= AAC_QUIRK_PERC2QC;
313
314 /*
315 * Do bus-independent initialisation.
316 */
317 error = aac_attach(sc);
318
319out:
320 if (error)
321 aac_free(sc);
322 return(error);
323}
328 * Do bus-independent initialisation.
329 */
330 error = aac_attach(sc);
331
332out:
333 if (error)
334 aac_free(sc);
335 return(error);
336}