1/*-
2 * Copyright (c) 1998,1999 S�ren Schmidt
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
--- 11 unchanged lines hidden (view full) ---
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $FreeBSD: head/sys/dev/ata/ata-all.c 54594 1999-12-14 10:25:28Z sos $
29 */
30
31#include "ata.h"
32#include "apm.h"
33#include "isa.h"
34#include "pci.h"
35#include "atadisk.h"
36#include "atapicd.h"
--- 154 unchanged lines hidden (view full) ---
191 return "Intel PIIX ATA controller";
192 case 0x70108086:
193 return "Intel PIIX3 ATA controller";
194 case 0x71118086:
195 return "Intel PIIX4 ATA controller";
196 case 0x522910b9:
197 return "AcerLabs Aladdin ATA controller";
198 case 0x05711106: /* 82c586 & 82c686 */
199 if (ata_find_dev(dev, 0x05861106))
200 return "VIA 82C586 ATA controller";
201 if (ata_find_dev(dev, 0x06861106))
202 return "VIA 82C686 ATA controller";
203 return "VIA Apollo ATA controller";
204 case 0x55131039:
205 return "SiS 5591 ATA controller";
206 case 0x4d33105a:
207 return "Promise Ultra/33 ATA controller";
208 case 0x4d38105a:
209 return "Promise Ultra/66 ATA controller";
210 case 0x00041103:
--- 58 unchanged lines hidden (view full) ---
269 if (pci_get_progif(dev) & PCIP_STORAGE_IDE_MASTERDEV) {
270 iobase_1 = IO_WD1;
271 altiobase_1 = iobase_1 + ATA_ALTPORT;
272 irq1 = 14;
273 }
274 else {
275 iobase_1 = pci_read_config(dev, 0x10, 4) & IOMASK;
276 altiobase_1 = pci_read_config(dev, 0x14, 4) & IOMASK;
277 irq1 = pci_read_config(dev, PCI_INTERRUPT_REG, 4) & 0xff;
278 }
279
280 if (pci_get_progif(dev) & PCIP_STORAGE_IDE_MASTERDEV) {
281 iobase_2 = IO_WD2;
282 altiobase_2 = iobase_2 + ATA_ALTPORT;
283 irq2 = 15;
284 }
285 else {
286 iobase_2 = pci_read_config(dev, 0x18, 4) & IOMASK;
287 altiobase_2 = pci_read_config(dev, 0x1c, 4) & IOMASK;
288 irq2 = pci_read_config(dev, PCI_INTERRUPT_REG, 4) & 0xff;
289 }
290
291 /* is this controller busmaster DMA capable ? */
292 if (pci_get_progif(dev) & PCIP_STORAGE_IDE_MASTERDEV) {
293 /* is busmastering support turned on ? */
294 if ((pci_read_config(dev, PCI_COMMAND_STATUS_REG, 4) & 5) == 5) {
295 /* is there a valid port range to connect to ? */
--- 5 unchanged lines hidden (view full) ---
301 printf("ata-pci%d: Busmastering DMA not configured\n", unit);
302 }
303 else
304 printf("ata-pci%d: Busmastering DMA not enabled\n", unit);
305 }
306 else {
307 if (type == 0x4d33105a || type == 0x4d38105a || type == 0x00041103) {
308 /* Promise and HPT366 controllers support busmastering DMA */
309 bmaddr_1 = pci_read_config(dev, 0x20, 4) & IOMASK;
310 bmaddr_2 = (pci_read_config(dev, 0x20, 4) & IOMASK)+ATA_BM_OFFSET1;
311 printf("ata-pci%d: Busmastering DMA supported\n", unit);
312 }
313 else {
314 /* we dont know this controller, no busmastering DMA */
315 printf("ata-pci%d: Busmastering DMA not supported\n", unit);
316 }
317 }
318
319 /* do extra chipset specific setups */
320 switch (type) {
321 case 0x522910b9:
322 /* on the Aladdin activate the ATAPI FIFO */
--- 617 unchanged lines hidden (view full) ---
940 blank = 1;
941 if (i == 0)
942 continue;
943 }
944 dst[j++] = src[i];
945 }
946 dst[j] = 0x00;
947}
948
949int32_t
950ata_find_dev(device_t dev, int32_t type)
951{
952 device_t *children, child;
953 int nchildren, i;
954
955 if (device_get_children(device_get_parent(dev), &children, &nchildren))
956 return 0;
957
958 for (i = 0; i < nchildren; i++) {
959 child = children[i];
960
961 /* check that it's on the same silicon and the device we want */
962 if (pci_get_slot(dev) == pci_get_slot(child) &&
963 pci_get_vendor(child) == (type & 0xffff) &&
964 pci_get_device(child) == ((type & 0xffff0000)>>16)) {
965 free(children, M_TEMP);
966 return 1;
967 }
968 }
969 free(children, M_TEMP);
970 return 0;
971}
2 * Copyright (c) 1998,1999 S�ren Schmidt
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
--- 11 unchanged lines hidden (view full) ---
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $FreeBSD: head/sys/dev/ata/ata-all.c 54594 1999-12-14 10:25:28Z sos $
29 */
30
31#include "ata.h"
32#include "apm.h"
33#include "isa.h"
34#include "pci.h"
35#include "atadisk.h"
36#include "atapicd.h"
--- 154 unchanged lines hidden (view full) ---
191 return "Intel PIIX ATA controller";
192 case 0x70108086:
193 return "Intel PIIX3 ATA controller";
194 case 0x71118086:
195 return "Intel PIIX4 ATA controller";
196 case 0x522910b9:
197 return "AcerLabs Aladdin ATA controller";
198 case 0x05711106: /* 82c586 & 82c686 */
199 if (ata_find_dev(dev, 0x05861106))
200 return "VIA 82C586 ATA controller";
201 if (ata_find_dev(dev, 0x06861106))
202 return "VIA 82C686 ATA controller";
203 return "VIA Apollo ATA controller";
204 case 0x55131039:
205 return "SiS 5591 ATA controller";
206 case 0x4d33105a:
207 return "Promise Ultra/33 ATA controller";
208 case 0x4d38105a:
209 return "Promise Ultra/66 ATA controller";
210 case 0x00041103:
--- 58 unchanged lines hidden (view full) ---
269 if (pci_get_progif(dev) & PCIP_STORAGE_IDE_MASTERDEV) {
270 iobase_1 = IO_WD1;
271 altiobase_1 = iobase_1 + ATA_ALTPORT;
272 irq1 = 14;
273 }
274 else {
275 iobase_1 = pci_read_config(dev, 0x10, 4) & IOMASK;
276 altiobase_1 = pci_read_config(dev, 0x14, 4) & IOMASK;
277 irq1 = pci_read_config(dev, PCI_INTERRUPT_REG, 4) & 0xff;
278 }
279
280 if (pci_get_progif(dev) & PCIP_STORAGE_IDE_MASTERDEV) {
281 iobase_2 = IO_WD2;
282 altiobase_2 = iobase_2 + ATA_ALTPORT;
283 irq2 = 15;
284 }
285 else {
286 iobase_2 = pci_read_config(dev, 0x18, 4) & IOMASK;
287 altiobase_2 = pci_read_config(dev, 0x1c, 4) & IOMASK;
288 irq2 = pci_read_config(dev, PCI_INTERRUPT_REG, 4) & 0xff;
289 }
290
291 /* is this controller busmaster DMA capable ? */
292 if (pci_get_progif(dev) & PCIP_STORAGE_IDE_MASTERDEV) {
293 /* is busmastering support turned on ? */
294 if ((pci_read_config(dev, PCI_COMMAND_STATUS_REG, 4) & 5) == 5) {
295 /* is there a valid port range to connect to ? */
--- 5 unchanged lines hidden (view full) ---
301 printf("ata-pci%d: Busmastering DMA not configured\n", unit);
302 }
303 else
304 printf("ata-pci%d: Busmastering DMA not enabled\n", unit);
305 }
306 else {
307 if (type == 0x4d33105a || type == 0x4d38105a || type == 0x00041103) {
308 /* Promise and HPT366 controllers support busmastering DMA */
309 bmaddr_1 = pci_read_config(dev, 0x20, 4) & IOMASK;
310 bmaddr_2 = (pci_read_config(dev, 0x20, 4) & IOMASK)+ATA_BM_OFFSET1;
311 printf("ata-pci%d: Busmastering DMA supported\n", unit);
312 }
313 else {
314 /* we dont know this controller, no busmastering DMA */
315 printf("ata-pci%d: Busmastering DMA not supported\n", unit);
316 }
317 }
318
319 /* do extra chipset specific setups */
320 switch (type) {
321 case 0x522910b9:
322 /* on the Aladdin activate the ATAPI FIFO */
--- 617 unchanged lines hidden (view full) ---
940 blank = 1;
941 if (i == 0)
942 continue;
943 }
944 dst[j++] = src[i];
945 }
946 dst[j] = 0x00;
947}
948
949int32_t
950ata_find_dev(device_t dev, int32_t type)
951{
952 device_t *children, child;
953 int nchildren, i;
954
955 if (device_get_children(device_get_parent(dev), &children, &nchildren))
956 return 0;
957
958 for (i = 0; i < nchildren; i++) {
959 child = children[i];
960
961 /* check that it's on the same silicon and the device we want */
962 if (pci_get_slot(dev) == pci_get_slot(child) &&
963 pci_get_vendor(child) == (type & 0xffff) &&
964 pci_get_device(child) == ((type & 0xffff0000)>>16)) {
965 free(children, M_TEMP);
966 return 1;
967 }
968 }
969 free(children, M_TEMP);
970 return 0;
971}