Port-ofppc archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Pegasos dmesg
I wrote:
> I'm afraid most PCI audio device drivers lack for
> byteswap ops against DMA descriptors for big endian machines.
How about this patch?
(though this driver still lacks bus_dmamap_sync(9) calls)
---
Izumi Tsutsui
Index: auich.c
===================================================================
RCS file: /cvsroot/src/sys/dev/pci/auich.c,v
retrieving revision 1.123
diff -u -r1.123 auich.c
--- auich.c 6 Jan 2008 12:56:20 -0000 1.123
+++ auich.c 14 Jan 2008 05:57:28 -0000
@@ -1351,8 +1351,9 @@
for (qptr = 0; qptr < ICH_DMALIST_MAX; qptr++) {
q = &ring->dmalist[qptr];
- q->base = ring->p;
- q->len = (blksize >> sc->sc_sample_shift) | ICH_DMAF_IOC;
+ q->base = htole32(ring->p);
+ q->len =
+ htole32((blksize >> sc->sc_sample_shift) | ICH_DMAF_IOC);
ring->p += blksize;
if (ring->p >= ring->end)
@@ -1378,12 +1379,14 @@
while (qptr != nqptr) {
q = &ring->dmalist[qptr];
- q->base = ring->p;
- q->len = (blksize >> sc->sc_sample_shift) | ICH_DMAF_IOC;
+ q->base = htole32(ring->p);
+ q->len =
+ htole32((blksize >> sc->sc_sample_shift) | ICH_DMAF_IOC);
DPRINTF(ICH_DEBUG_INTR,
("auich_intr: %p, %p = %x @ 0x%x\n",
- &ring->dmalist[qptr], q, q->len, q->base));
+ &ring->dmalist[qptr], q,
+ le32toh(q->len), le32toh(q->base)));
ring->p += blksize;
if (ring->p >= ring->end)
@@ -1642,8 +1645,8 @@
printf("auich_calibrate: bad address %p\n", temp_buffer);
return;
}
- sc->pcmi.dmalist[0].base = DMAADDR(p);
- sc->pcmi.dmalist[0].len = (bytes >> sc->sc_sample_shift);
+ sc->pcmi.dmalist[0].base = htole32(DMAADDR(p));
+ sc->pcmi.dmalist[0].len = htole32(bytes >> sc->sc_sample_shift);
/*
* our data format is stereo, 16 bit so each sample is 4 bytes.
---
Home |
Main Index |
Thread Index |
Old Index