summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsimokawa <simokawa@FreeBSD.org>2003-01-29 15:32:35 +0000
committersimokawa <simokawa@FreeBSD.org>2003-01-29 15:32:35 +0000
commit7a73a2b78e37acf45b1fc1c873c6de17890b3f21 (patch)
tree07ab66f03ac7f1aef6d1069d6523e1db73012070
parent03d7b34fa46c206231debdc3e7b92f51a6dc1e04 (diff)
downloadFreeBSD-src-7a73a2b78e37acf45b1fc1c873c6de17890b3f21.zip
FreeBSD-src-7a73a2b78e37acf45b1fc1c873c6de17890b3f21.tar.gz
- Probe number of IT/IR DMA contexts as specified in OHCI spec.
-rw-r--r--sys/dev/firewire/fwohci.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/sys/dev/firewire/fwohci.c b/sys/dev/firewire/fwohci.c
index c651622..a05becf 100644
--- a/sys/dev/firewire/fwohci.c
+++ b/sys/dev/firewire/fwohci.c
@@ -586,15 +586,15 @@ fwohci_init(struct fwohci_softc *sc, device_t dev)
device_printf(dev, "OHCI version %x.%x (ROM=%d)\n",
(reg>>16) & 0xff, reg & 0xff, (reg>>24) & 1);
-/* XXX: Available Isochrounous DMA channel probe */
- for( i = 0 ; i < 0x20 ; i ++ ){
- OWRITE(sc, OHCI_IRCTL(i), OHCI_CNTL_DMA_RUN);
- reg = OREAD(sc, OHCI_IRCTL(i));
- if(!(reg & OHCI_CNTL_DMA_RUN)) break;
- OWRITE(sc, OHCI_ITCTL(i), OHCI_CNTL_DMA_RUN);
- reg = OREAD(sc, OHCI_ITCTL(i));
- if(!(reg & OHCI_CNTL_DMA_RUN)) break;
- }
+/* Available Isochrounous DMA channel probe */
+ OWRITE(sc, OHCI_IT_MASK, 0xffffffff);
+ OWRITE(sc, OHCI_IR_MASK, 0xffffffff);
+ reg = OREAD(sc, OHCI_IT_MASK) & OREAD(sc, OHCI_IR_MASK);
+ OWRITE(sc, OHCI_IT_MASKCLR, 0xffffffff);
+ OWRITE(sc, OHCI_IR_MASKCLR, 0xffffffff);
+ for (i = 0; i < 0x20; i++)
+ if ((reg & (1 << i)) == 0)
+ break;
sc->fc.nisodma = i;
device_printf(dev, "No. of Isochronous channel is %d.\n", i);
OpenPOWER on IntegriCloud