Deleted Added
full compact
28c28
< * $FreeBSD: head/sys/dev/ata/ata-dma.c 50477 1999-08-28 01:08:13Z peter $
---
> * $FreeBSD: head/sys/dev/ata/ata-dma.c 51520 1999-09-21 19:50:40Z sos $
32a33,34
> #include "apm.h"
>
33a36
>
40c43
< #include <vm/vm.h>
---
> #include <vm/vm.h>
45a49,51
> #if NAPM > 0
> #include <machine/apm_bios.h>
> #endif
50c56
< #define vtophys(va) alpha_XXX_dmamap((vm_offset_t)va)
---
> #define vtophys(va) alpha_XXX_dmamap((vm_offset_t)va)
67c73
< #ifdef ATA_DEBUGDMA
---
> #ifdef ATA_DMADEBUG
73c79
< return -1;
---
> return -1;
77,79c83,85
< printf("ata_dmainit: dmatab crosses page boundary, no DMA\n");
< free(dmatab, M_DEVBUF);
< return -1;
---
> printf("ata_dmainit: dmatab crosses page boundary, no DMA\n");
> free(dmatab, M_DEVBUF);
> return -1;
81c87
< scp->dmatab[device ? 1 : 0] = dmatab;
---
> scp->dmatab[(device == ATA_MASTER) ? 0 : 1] = dmatab;
83c89
< type = pci_get_devid(scp->dev);
---
> switch (type = pci_get_devid(scp->dev)) {
85,86d90
< switch(type) {
<
89c93
< int32_t mask48, new48;
---
> int32_t mask48, new48;
91,92d94
< printf("ata%d: %s: setting up UDMA2 mode on PIIX4 chip ",
< scp->lun, (device) ? "slave" : "master");
94,96c96,101
< ATA_UDMA2, ATA_C_FEA_SETXFER, ATA_WAIT_INTR);
< if (error) {
< printf("failed\n");
---
> ATA_UDMA2, ATA_C_FEA_SETXFER, ATA_IGNORE_INTR);
> if (bootverbose)
> printf("ata%d: %s: %s setting up UDMA2 mode on PIIX4 chip\n",
> scp->lun, (device == ATA_MASTER) ? "master" : "slave",
> (error) ? "failed" : "success");
> if (error)
98,100c103
< }
< printf("OK\n");
< devno = (scp->unit << 1) + (device ? 1 : 0);
---
> devno = (scp->unit << 1) + ((device == ATA_MASTER) ? 0 : 1);
103c106
< pci_write_config(scp->dev, 0x48,
---
> pci_write_config(scp->dev, 0x48,
105a109
> scp->mode[(device == ATA_MASTER) ? 0 : 1] = ATA_MODE_UDMA33;
116,128c120,132
< new40 = pci_read_config(scp->dev, 0x40, 4);
< new44 = pci_read_config(scp->dev, 0x44, 4);
< if (!(new40 & 0x00004000)) {
< new44 &= ~0x0000000f;
< new44 |= ((new40&0x00003000)>>10)|((new40&0x00000300)>>8);
< }
< if (!(new40 & 0x40000000)) {
< new44 &= ~0x000000f0;
< new44 |= ((new40&0x30000000)>>22)|((new40&0x03000000)>>20);
< }
< new40 |= 0x40004000;
< pci_write_config(scp->dev, 0x40, new40, 4);
< pci_write_config(scp->dev, 0x44, new44, 4);
---
> new40 = pci_read_config(scp->dev, 0x40, 4);
> new44 = pci_read_config(scp->dev, 0x44, 4);
> if (!(new40 & 0x00004000)) {
> new44 &= ~0x0000000f;
> new44 |= ((new40&0x00003000)>>10)|((new40&0x00000300)>>8);
> }
> if (!(new40 & 0x40000000)) {
> new44 &= ~0x000000f0;
> new44 |= ((new40&0x30000000)>>22)|((new40&0x03000000)>>20);
> }
> new40 |= 0x40004000;
> pci_write_config(scp->dev, 0x40, new40, 4);
> pci_write_config(scp->dev, 0x44, new44, 4);
130,131d133
< printf("ata%d: %s: setting up WDMA2 mode on PIIX3/4 chip ",
< scp->lun, (device) ? "slave" : "master");
133,135c135,140
< ATA_WDMA2, ATA_C_FEA_SETXFER, ATA_WAIT_INTR);
< if (error) {
< printf("failed\n");
---
> ATA_WDMA2, ATA_C_FEA_SETXFER, ATA_IGNORE_INTR);
> if (bootverbose)
> printf("ata%d: %s: %s setting up WDMA2 mode on PIIX4 chip\n",
> scp->lun, (device == ATA_MASTER) ? "master" : "slave",
> (error) ? "failed" : "success");
> if (error)
136a142,151
> if (device == ATA_MASTER) {
> mask40 = 0x0000330f;
> new40 = 0x00002307;
> mask44 = 0;
> new44 = 0;
> } else {
> mask40 = 0x000000f0;
> new40 = 0x00000070;
> mask44 = 0x0000000f;
> new44 = 0x0000000b;
138,161c153,165
< printf("OK\n");
< if (device == ATA_MASTER) {
< mask40 = 0x0000330f;
< new40 = 0x00002307;
< mask44 = 0;
< new44 = 0;
< } else {
< mask40 = 0x000000f0;
< new40 = 0x00000070;
< mask44 = 0x0000000f;
< new44 = 0x0000000b;
< }
< if (scp->unit) {
< mask40 <<= 16;
< new40 <<= 16;
< mask44 <<= 4;
< new44 <<= 4;
< }
< pci_write_config(scp->dev, 0x40,
< (pci_read_config(scp->dev, 0x40, 4) &
< ~mask40) | new40, 4);
< pci_write_config(scp->dev, 0x44,
< (pci_read_config(scp->dev, 0x44, 4) &
< ~mask44) | new44, 4);
---
> if (scp->unit) {
> mask40 <<= 16;
> new40 <<= 16;
> mask44 <<= 4;
> new44 <<= 4;
> }
> pci_write_config(scp->dev, 0x40,
> (pci_read_config(scp->dev, 0x40, 4) & ~mask40) |
> new40, 4);
> pci_write_config(scp->dev, 0x44,
> (pci_read_config(scp->dev, 0x44, 4) & ~mask44) |
> new44, 4);
> scp->mode[(device == ATA_MASTER) ? 0 : 1] = ATA_MODE_DMA;
163c167
< }
---
> }
172c176
< /* the promise seems to have trouble with DMA on ATAPI devices */
---
> /* the Promise can only do DMA on ATA disks not on ATAPI devices */
177c181,195
< devno = (scp->unit << 1) + (device ? 1 : 0);
---
> devno = (scp->unit << 1) + ((device == ATA_MASTER) ? 0 : 1);
> if (udmamode >=4 && type == 0x4d38105a) {
> error = ata_command(scp, device, ATA_C_SETFEATURES, 0, 0, 0,
> ATA_UDMA4, ATA_C_FEA_SETXFER, ATA_IGNORE_INTR);
> if (bootverbose)
> printf("ata%d: %s: %s setting up UDMA4 mode on Promise chip\n",
> scp->lun, (device == ATA_MASTER) ? "master" : "slave",
> (error) ? "failed" : "success");
> if (error)
> break;
> pci_write_config(scp->dev, 0x60 + (devno << 2), 0x004117f3, 4);
> scp->mode[(device == ATA_MASTER) ? 0 : 1] = ATA_MODE_UDMA66;
> return 0;
> }
>
179,180d196
< printf("ata%d: %s: setting up UDMA2 mode on Promise chip ",
< scp->lun, (device) ? "slave" : "master");
182,184c198,203
< ATA_UDMA2, ATA_C_FEA_SETXFER, ATA_WAIT_INTR);
< if (error) {
< printf("failed\n");
---
> ATA_UDMA2, ATA_C_FEA_SETXFER, ATA_IGNORE_INTR);
> if (bootverbose)
> printf("ata%d: %s: %s setting up UDMA2 mode on Promise chip\n",
> scp->lun, (device == ATA_MASTER) ? "master" : "slave",
> (error) ? "failed" : "success");
> if (error)
186,187d204
< }
< printf("OK\n");
188a206
> scp->mode[(device == ATA_MASTER) ? 0 : 1] = ATA_MODE_UDMA33;
192,193d209
< printf("ata%d: %s: setting up WDMA2 mode on Promise chip ",
< scp->lun, (device) ? "slave" : "master");
195,197c211,216
< ATA_WDMA2, ATA_C_FEA_SETXFER, ATA_WAIT_INTR);
< if (error) {
< printf("failed\n");
---
> ATA_WDMA2, ATA_C_FEA_SETXFER, ATA_IGNORE_INTR);
> if (bootverbose)
> printf("ata%d: %s: %s setting up WDMA2 mode on Promise chip\n",
> scp->lun, (device == ATA_MASTER) ? "master" : "slave",
> (error) ? "failed" : "success");
> if (error)
199,200d217
< }
< printf("OK\n");
201a219
> scp->mode[(device == ATA_MASTER) ? 0 : 1] = ATA_MODE_DMA;
203c221
< }
---
> }
205,206c223,225
< printf("ata%d: %s: setting up PIO mode on Promise chip OK\n",
< scp->lun, (device) ? "slave" : "master");
---
> if (bootverbose)
> printf("ata%d: %s: setting PIO mode on Promise chip\n",
> scp->lun, (device == ATA_MASTER) ? "master" : "slave");
211a231,252
> /* the Aladdin has to be setup specially for ATAPI devices */
> if ((device == ATA_MASTER && scp->devices & ATA_ATAPI_MASTER) ||
> (device == ATA_SLAVE && scp->devices & ATA_ATAPI_SLAVE)) {
> int8_t word53 = pci_read_config(scp->dev, 0x53, 1);
>
> /* if needed set atapi fifo & dma */
> if ((udmamode >=2) || (wdmamode >= 2 && apiomode >= 4)) {
> pci_write_config(scp->dev, 0x53, word53 | 0x03, 1);
> scp->flags |= ATA_ATAPI_DMA_RO;
> if (device == ATA_MASTER)
> outb(scp->bmaddr + ATA_BMSTAT_PORT,
> inb(scp->bmaddr + ATA_BMSTAT_PORT) |
> ATA_BMSTAT_DMA_MASTER);
> else
> outb(scp->bmaddr + ATA_BMSTAT_PORT,
> inb(scp->bmaddr + ATA_BMSTAT_PORT) |
> ATA_BMSTAT_DMA_SLAVE);
> }
> else {
> pci_write_config(scp->dev, 0x53, (word53 & ~0x01) | 0x02, 1);
> }
> }
215,216d255
< printf("ata%d: %s: setting up UDMA2 mode on Aladdin chip ",
< scp->lun, (device) ? "slave" : "master");
218,220c257,262
< ATA_UDMA2, ATA_C_FEA_SETXFER, ATA_WAIT_INTR);
< if (error) {
< printf("failed\n");
---
> ATA_UDMA2, ATA_C_FEA_SETXFER, ATA_IGNORE_INTR);
> if (bootverbose)
> printf("ata%d: %s: %s setting up UDMA2 mode on Aladdin chip\n",
> scp->lun, (device == ATA_MASTER) ? "master" : "slave",
> (error) ? "failed" : "success");
> if (error)
222,223d263
< }
< printf("OK\n");
225c265
< word54 |= (0x0000000A << (16 + (scp->unit << 3) + (device << 2)));
---
> word54 |= (0x0a << (16 + (scp->unit << 3) + (device << 2)));
226a267
> scp->mode[(device == ATA_MASTER) ? 0 : 1] = ATA_MODE_UDMA33;
231,232d271
< printf("ata%d: %s: setting up WDMA2 mode on Aladdin chip ",
< scp->lun, (device) ? "slave" : "master");
234,236c273,278
< ATA_WDMA2, ATA_C_FEA_SETXFER, ATA_WAIT_INTR);
< if (error) {
< printf("failed\n");
---
> ATA_WDMA2, ATA_C_FEA_SETXFER, ATA_IGNORE_INTR);
> if (bootverbose)
> printf("ata%d: %s: %s setting up WDMA2 mode on Aladdin chip\n",
> scp->lun, (device == ATA_MASTER) ? "master" : "slave",
> (error) ? "failed" : "success");
> if (error)
238,239c280
< }
< printf("OK\n");
---
> scp->mode[(device == ATA_MASTER) ? 0 : 1] = ATA_MODE_DMA;
245,247c286,289
< if ((wdmamode >= 2 && apiomode >= 4) || udmamode >= 2) {
< printf("ata%d: %s: setting up generic WDMA2 mode ",
< scp->lun, (device) ? "slave" : "master");
---
> if (((wdmamode >= 2 && apiomode >= 4) || udmamode >= 2) &&
> (inb(scp->bmaddr + ATA_BMSTAT_PORT) &
> ((device == ATA_MASTER) ?
> ATA_BMSTAT_DMA_SLAVE : ATA_BMSTAT_DMA_MASTER))) {
249,251c291,296
< ATA_WDMA2, ATA_C_FEA_SETXFER, ATA_WAIT_INTR);
< if (error) {
< printf("failed\n");
---
> ATA_WDMA2, ATA_C_FEA_SETXFER, ATA_IGNORE_INTR);
> if (bootverbose)
> printf("ata%d: %s: %s setting up WDMA2 mode on generic chip\n",
> scp->lun, (device == ATA_MASTER) ? "master" : "slave",
> (error) ? "failed" : "success");
> if (error)
253,254c298
< }
< printf("OK\n");
---
> scp->mode[(device == ATA_MASTER) ? 0 : 1] = ATA_MODE_DMA;
270c314
< #ifdef ATA_DEBUGDMA
---
> #ifdef ATA_DMADEBUG
276a321
> #ifdef ATA_DMADEBUG
278c323,324
< scp->lun, (device ? "slave" : "master"));
---
> scp->lun, ((device == ATA_MASTER) ? "master" : "slave"));
> #endif
282c328
< dmatab = scp->dmatab[device ? 1 : 0];
---
> dmatab = scp->dmatab[(device == ATA_MASTER) ? 0 : 1];
302,304c348,349
< #ifdef ATA_DEBUGDMA
< printf("ata_dmasetup: base=%08x count%08x\n",
< dma_base, dma_count);
---
> #ifdef ATA_DMADEBUG
> printf("ata_dmasetup: base=%08x count%08x\n", dma_base, dma_count);
310,311c355,357
< #ifdef ATA_DEBUGDMA
< printf("dmatab=%08x %08x\n", vtophys(dmatab), inl(scp->bmaddr+ATA_BMDTP_PORT));
---
> #ifdef ATA_DMADEBUG
> printf("dmatab=%08x %08x\n",
> vtophys(dmatab), inl(scp->bmaddr+ATA_BMDTP_PORT));
322c368
< #ifdef ATA_DEBUGDMA
---
> #ifdef ATA_DMADEBUG
332c378
< #ifdef ATA_DEBUGDMA
---
> #ifdef ATA_DMADEBUG
343c389
< #ifdef ATA_DEBUGDMA
---
> #ifdef ATA_DMADEBUG
353c399
< int32_t piomode, int32_t wdmamode, int32_t udmamode)
---
> int32_t piomode, int32_t wdmamode, int32_t udmamode)
360c406
< int8_t *data, int32_t count, int32_t flags)
---
> int8_t *data, int32_t count, int32_t flags)