Deleted Added
full compact
fwohci.c (106802) fwohci.c (107653)
1/*
2 * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa
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

--- 16 unchanged lines hidden (view full) ---

25 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 *
1/*
2 * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa
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

--- 16 unchanged lines hidden (view full) ---

25 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
29 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 *
33 * $FreeBSD: head/sys/dev/firewire/fwohci.c 106802 2002-11-12 10:02:50Z simokawa $
33 * $FreeBSD: head/sys/dev/firewire/fwohci.c 107653 2002-12-06 02:17:30Z simokawa $
34 *
35 */
36
37#define ATRQ_CH 0
38#define ATRS_CH 1
39#define ARRQ_CH 2
40#define ARRS_CH 3
41#define ITX_CH 4

--- 245 unchanged lines hidden (view full) ---

287#define OHCI_BUS_MANAGER_ID 0
288
289 OWRITE(sc, OHCI_CSR_DATA, node);
290 OWRITE(sc, OHCI_CSR_COMP, 0x3f);
291 OWRITE(sc, OHCI_CSR_CONT, OHCI_BUS_MANAGER_ID);
292 for (i = 0; !(OREAD(sc, OHCI_CSR_CONT) & (1<<31)) && (i < 1000); i++)
293 DELAY(100);
294 bm = OREAD(sc, OHCI_CSR_DATA);
34 *
35 */
36
37#define ATRQ_CH 0
38#define ATRS_CH 1
39#define ARRQ_CH 2
40#define ARRS_CH 3
41#define ITX_CH 4

--- 245 unchanged lines hidden (view full) ---

287#define OHCI_BUS_MANAGER_ID 0
288
289 OWRITE(sc, OHCI_CSR_DATA, node);
290 OWRITE(sc, OHCI_CSR_COMP, 0x3f);
291 OWRITE(sc, OHCI_CSR_CONT, OHCI_BUS_MANAGER_ID);
292 for (i = 0; !(OREAD(sc, OHCI_CSR_CONT) & (1<<31)) && (i < 1000); i++)
293 DELAY(100);
294 bm = OREAD(sc, OHCI_CSR_DATA);
295 if((bm & 0x3f) == 0x3f){
296 printf("fw_set_bus_manager: %d->%d (loop=%d)\n", bm, node, i);
295 if((bm & 0x3f) == 0x3f)
297 bm = node;
296 bm = node;
298 }else{
299 printf("fw_set_bus_manager: %d-X%d (loop=%d)\n", bm, node, i);
300 }
297 if (bootverbose)
298 device_printf(sc->fc.dev,
299 "fw_set_bus_manager: %d->%d (loop=%d)\n", bm, node, i);
301
302 return(bm);
303}
304
305static u_int32_t
306fwphy_rddata(struct fwohci_softc *sc, u_int addr)
307{
308 u_int32_t fun;

--- 157 unchanged lines hidden (view full) ---

466 OWRITE(sc, OHCI_IR_MASKCLR, ~0);
467 for( i = 0 ; i < sc->fc.nisodma ; i ++ ){
468 OWRITE(sc, OHCI_IRCTLCLR(i), OHCI_CNTL_DMA_RUN);
469 OWRITE(sc, OHCI_ITCTLCLR(i), OHCI_CNTL_DMA_RUN);
470 }
471
472/* FLUSH FIFO and reset Transmitter/Reciever */
473 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_RESET);
300
301 return(bm);
302}
303
304static u_int32_t
305fwphy_rddata(struct fwohci_softc *sc, u_int addr)
306{
307 u_int32_t fun;

--- 157 unchanged lines hidden (view full) ---

465 OWRITE(sc, OHCI_IR_MASKCLR, ~0);
466 for( i = 0 ; i < sc->fc.nisodma ; i ++ ){
467 OWRITE(sc, OHCI_IRCTLCLR(i), OHCI_CNTL_DMA_RUN);
468 OWRITE(sc, OHCI_ITCTLCLR(i), OHCI_CNTL_DMA_RUN);
469 }
470
471/* FLUSH FIFO and reset Transmitter/Reciever */
472 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_RESET);
474 device_printf(dev, "resetting OHCI...");
473 if (bootverbose)
474 device_printf(dev, "resetting OHCI...");
475 i = 0;
476 while(OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_RESET) {
477 if (i++ > 100) break;
478 DELAY(1000);
479 }
475 i = 0;
476 while(OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_RESET) {
477 if (i++ > 100) break;
478 DELAY(1000);
479 }
480 printf("done (%d)\n", i);
480 if (bootverbose)
481 printf("done (%d)\n", i);
481 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LPS);
482 /* XXX wait for SCLK. */
483 DELAY(100000);
484
485 reg = OREAD(sc, OHCI_BUS_OPT);
486 reg2 = reg | OHCI_BUSFNC;
487 /* XXX */
488 if (((reg & 0x0000f000) >> 12) < 10)
489 reg2 = (reg2 & 0xffff0fff) | (10 << 12);
482 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LPS);
483 /* XXX wait for SCLK. */
484 DELAY(100000);
485
486 reg = OREAD(sc, OHCI_BUS_OPT);
487 reg2 = reg | OHCI_BUSFNC;
488 /* XXX */
489 if (((reg & 0x0000f000) >> 12) < 10)
490 reg2 = (reg2 & 0xffff0fff) | (10 << 12);
490 device_printf(dev, "BUS_OPT 0x%x -> 0x%x\n", reg, reg2);
491 if (bootverbose)
492 device_printf(dev, "BUS_OPT 0x%x -> 0x%x\n", reg, reg2);
491 OWRITE(sc, OHCI_BUS_OPT, reg2);
492
493 OWRITE(sc, OHCI_CROMHDR, sc->fc.config_rom[0]);
494 OWRITE(sc, OHCI_CROMPTR, vtophys(&sc->fc.config_rom[0]));
495 OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_BIGEND);
496 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_POSTWR);
497
498/*

--- 40 unchanged lines hidden (view full) ---

539
540 /* check programPhyEnable */
541 reg2 = fwphy_rddata(sc, 5);
542#if 0
543 if (e1394a && (OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_PRPHY)) {
544#else /* XXX force to enable 1394a */
545 if (e1394a) {
546#endif
493 OWRITE(sc, OHCI_BUS_OPT, reg2);
494
495 OWRITE(sc, OHCI_CROMHDR, sc->fc.config_rom[0]);
496 OWRITE(sc, OHCI_CROMPTR, vtophys(&sc->fc.config_rom[0]));
497 OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_BIGEND);
498 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_POSTWR);
499
500/*

--- 40 unchanged lines hidden (view full) ---

541
542 /* check programPhyEnable */
543 reg2 = fwphy_rddata(sc, 5);
544#if 0
545 if (e1394a && (OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_PRPHY)) {
546#else /* XXX force to enable 1394a */
547 if (e1394a) {
548#endif
547 device_printf(dev, "Enable 1394a Enhancements\n");
549 if (bootverbose)
550 device_printf(dev,
551 "Enable 1394a Enhancements\n");
548 /* enable EAA EMC */
549 reg2 |= 0x03;
550 /* set aPhyEnhanceEnable */
551 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_PHYEN);
552 OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_PRPHY);
553 } else {
554 /* for safe */
555 reg2 &= ~0x83;

--- 220 unchanged lines hidden (view full) ---

776 LAST_DB(dbch->pdb_tr, db);
777 db->db.desc.depend |= db_tr->dbcnt;
778 }
779 dbch->pdb_tr = db_tr;
780 db_tr = STAILQ_NEXT(db_tr, link);
781 if(db_tr != dbch->bottom){
782 goto txloop;
783 } else {
552 /* enable EAA EMC */
553 reg2 |= 0x03;
554 /* set aPhyEnhanceEnable */
555 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_PHYEN);
556 OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_PRPHY);
557 } else {
558 /* for safe */
559 reg2 &= ~0x83;

--- 220 unchanged lines hidden (view full) ---

780 LAST_DB(dbch->pdb_tr, db);
781 db->db.desc.depend |= db_tr->dbcnt;
782 }
783 dbch->pdb_tr = db_tr;
784 db_tr = STAILQ_NEXT(db_tr, link);
785 if(db_tr != dbch->bottom){
786 goto txloop;
787 } else {
784 printf("fwohci_start: lack of db_trq\n");
788 device_printf(sc->fc.dev, "fwohci_start: lack of db_trq\n");
785 dbch->flags |= FWOHCI_DBCH_FULL;
786 }
787kick:
788 if (firewire_debug) printf("kick\n");
789 /* kick asy q */
790
791 if(dbch->xferq.flag & FWXFERQ_RUNNING) {
792 OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_WAKE);
793 } else {
789 dbch->flags |= FWOHCI_DBCH_FULL;
790 }
791kick:
792 if (firewire_debug) printf("kick\n");
793 /* kick asy q */
794
795 if(dbch->xferq.flag & FWXFERQ_RUNNING) {
796 OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_WAKE);
797 } else {
794 printf("start AT DMA status=%x\n",
798 if (bootverbose)
799 device_printf(sc->fc.dev, "start AT DMA status=%x\n",
795 OREAD(sc, OHCI_DMACTL(off)));
796 OWRITE(sc, OHCI_DMACMD(off), vtophys(dbch->top->db) | fsegment);
797 OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_RUN);
798 dbch->xferq.flag |= FWXFERQ_RUNNING;
799 }
800
801 dbch->top = db_tr;
802 splx(s);

--- 912 unchanged lines hidden (view full) ---

1715}
1716
1717static void
1718fwohci_set_intr(struct firewire_comm *fc, int enable)
1719{
1720 struct fwohci_softc *sc;
1721
1722 sc = (struct fwohci_softc *)fc;
800 OREAD(sc, OHCI_DMACTL(off)));
801 OWRITE(sc, OHCI_DMACMD(off), vtophys(dbch->top->db) | fsegment);
802 OWRITE(sc, OHCI_DMACTL(off), OHCI_CNTL_DMA_RUN);
803 dbch->xferq.flag |= FWXFERQ_RUNNING;
804 }
805
806 dbch->top = db_tr;
807 splx(s);

--- 912 unchanged lines hidden (view full) ---

1720}
1721
1722static void
1723fwohci_set_intr(struct firewire_comm *fc, int enable)
1724{
1725 struct fwohci_softc *sc;
1726
1727 sc = (struct fwohci_softc *)fc;
1723 printf("fwochi_set_intr: %d\n", enable);
1728 if (bootverbose)
1729 device_printf(sc->fc.dev, "fwochi_set_intr: %d\n", enable);
1724 if (enable) {
1725 sc->intmask |= OHCI_INT_EN;
1726 OWRITE(sc, FWOHCI_INTMASK, OHCI_INT_EN);
1727 } else {
1728 sc->intmask &= ~OHCI_INT_EN;
1729 OWRITE(sc, FWOHCI_INTMASKCLR, OHCI_INT_EN);
1730 }
1731}

--- 754 unchanged lines hidden ---
1730 if (enable) {
1731 sc->intmask |= OHCI_INT_EN;
1732 OWRITE(sc, FWOHCI_INTMASK, OHCI_INT_EN);
1733 } else {
1734 sc->intmask &= ~OHCI_INT_EN;
1735 OWRITE(sc, FWOHCI_INTMASKCLR, OHCI_INT_EN);
1736 }
1737}

--- 754 unchanged lines hidden ---