summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/powermac
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2008-10-28 22:09:30 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2008-10-28 22:09:30 +0000
commita6fcdd69093dee4fed97095848ed5c1b083c09ab (patch)
tree8826653f9460a79ea425c30bf1ec9cb8df253a99 /sys/powerpc/powermac
parent6d1fb102aad6fcea826a67f736e81d23ba535fa9 (diff)
downloadFreeBSD-src-a6fcdd69093dee4fed97095848ed5c1b083c09ab.zip
FreeBSD-src-a6fcdd69093dee4fed97095848ed5c1b083c09ab.tar.gz
DBDMA can transfer a maximum of 64K - 1 bytes per descriptor, as the byte
count field is 16 bits. Inform ATA of this fact. Reported by: Marco Trillo
Diffstat (limited to 'sys/powerpc/powermac')
-rw-r--r--sys/powerpc/powermac/ata_dbdma.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/powerpc/powermac/ata_dbdma.c b/sys/powerpc/powermac/ata_dbdma.c
index fe53255..b08ade6 100644
--- a/sys/powerpc/powermac/ata_dbdma.c
+++ b/sys/powerpc/powermac/ata_dbdma.c
@@ -275,6 +275,12 @@ ata_dbdma_dmainit(device_t dev)
sc->sc_ch.dma.load = ata_dbdma_load;
sc->sc_ch.dma.reset = ata_dbdma_reset;
+ /*
+ * DBDMA's field for transfer size is 16 bits. This will overflow
+ * if we try to do a 64K transfer, so stop short of 64K.
+ */
+ sc->sc_ch.dma.segsize = 126 * DEV_BSIZE;
+
sc->sc_ch.hw.status = ata_dbdma_status;
mtx_init(&sc->dbdma_mtx, "ATA DBDMA", NULL, MTX_DEF);
OpenPOWER on IntegriCloud