fwohci.c (108527) | fwohci.c (108530) |
---|---|
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 108527 2003-01-01 04:23:54Z simokawa $ | 33 * $FreeBSD: head/sys/dev/firewire/fwohci.c 108530 2003-01-01 08:25:32Z 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 --- 350 unchanged lines hidden (view full) --- 392 } 393 break; 394 default: 395 break; 396 } 397 return err; 398} 399 | 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 --- 350 unchanged lines hidden (view full) --- 392 } 393 break; 394 default: 395 break; 396 } 397 return err; 398} 399 |
400int 401fwohci_init(struct fwohci_softc *sc, device_t dev) | 400static int 401fwohci_probe_phy(struct fwohci_softc *sc, device_t dev) |
402{ | 402{ |
403 int err = 0; | 403 u_int32_t reg, reg2; 404 int e1394a = 1; 405/* 406 * probe PHY parameters 407 * 0. to prove PHY version, whether compliance of 1394a. 408 * 1. to probe maximum speed supported by the PHY and 409 * number of port supported by core-logic. 410 * It is not actually available port on your PC . 411 */ 412 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LPS); 413#if 0 414 /* XXX wait for SCLK. */ 415 DELAY(100000); 416#endif 417 reg = fwphy_rddata(sc, FW_PHY_SPD_REG); 418 419 if((reg >> 5) != 7 ){ 420 sc->fc.mode &= ~FWPHYASYST; 421 sc->fc.nport = reg & FW_PHY_NP; 422 sc->fc.speed = reg & FW_PHY_SPD >> 6; 423 if (sc->fc.speed > MAX_SPEED) { 424 device_printf(dev, "invalid speed %d (fixed to %d).\n", 425 sc->fc.speed, MAX_SPEED); 426 sc->fc.speed = MAX_SPEED; 427 } 428 sc->fc.maxrec = maxrec[sc->fc.speed]; 429 device_printf(dev, 430 "Link 1394 only %s, %d ports, maxrec %d bytes.\n", 431 linkspeed[sc->fc.speed], sc->fc.nport, sc->fc.maxrec); 432 }else{ 433 reg2 = fwphy_rddata(sc, FW_PHY_ESPD_REG); 434 sc->fc.mode |= FWPHYASYST; 435 sc->fc.nport = reg & FW_PHY_NP; 436 sc->fc.speed = (reg2 & FW_PHY_ESPD) >> 5; 437 if (sc->fc.speed > MAX_SPEED) { 438 device_printf(dev, "invalid speed %d (fixed to %d).\n", 439 sc->fc.speed, MAX_SPEED); 440 sc->fc.speed = MAX_SPEED; 441 } 442 sc->fc.maxrec = maxrec[sc->fc.speed]; 443 device_printf(dev, 444 "Link 1394a available %s, %d ports, maxrec %d bytes.\n", 445 linkspeed[sc->fc.speed], sc->fc.nport, sc->fc.maxrec); 446 447 /* check programPhyEnable */ 448 reg2 = fwphy_rddata(sc, 5); 449#if 0 450 if (e1394a && (OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_PRPHY)) { 451#else /* XXX force to enable 1394a */ 452 if (e1394a) { 453#endif 454 if (bootverbose) 455 device_printf(dev, 456 "Enable 1394a Enhancements\n"); 457 /* enable EAA EMC */ 458 reg2 |= 0x03; 459 /* set aPhyEnhanceEnable */ 460 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_PHYEN); 461 OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_PRPHY); 462 } else { 463 /* for safe */ 464 reg2 &= ~0x83; 465 } 466 reg2 = fwphy_wrdata(sc, 5, reg2); 467 } 468 469 reg = fwphy_rddata(sc, FW_PHY_SPD_REG); 470 if((reg >> 5) == 7 ){ 471 reg = fwphy_rddata(sc, 4); 472 reg |= 1 << 6; 473 fwphy_wrdata(sc, 4, reg); 474 reg = fwphy_rddata(sc, 4); 475 } 476 return 0; 477} 478 479 480void 481fwohci_reset(struct fwohci_softc *sc, device_t dev) 482{ |
404 int i; 405 u_int32_t reg, reg2; 406 struct fwohcidb_tr *db_tr; | 483 int i; 484 u_int32_t reg, reg2; 485 struct fwohcidb_tr *db_tr; |
407 int e1394a = 1; | |
408 | 486 |
487/* Disable interrupt */ 488 OWRITE(sc, FWOHCI_INTMASKCLR, ~0); 489 490/* Now stopping all DMA channel */ 491 OWRITE(sc, OHCI_ARQCTLCLR, OHCI_CNTL_DMA_RUN); 492 OWRITE(sc, OHCI_ARSCTLCLR, OHCI_CNTL_DMA_RUN); 493 OWRITE(sc, OHCI_ATQCTLCLR, OHCI_CNTL_DMA_RUN); 494 OWRITE(sc, OHCI_ATSCTLCLR, OHCI_CNTL_DMA_RUN); 495 496 OWRITE(sc, OHCI_IR_MASKCLR, ~0); 497 for( i = 0 ; i < sc->fc.nisodma ; i ++ ){ 498 OWRITE(sc, OHCI_IRCTLCLR(i), OHCI_CNTL_DMA_RUN); 499 OWRITE(sc, OHCI_ITCTLCLR(i), OHCI_CNTL_DMA_RUN); 500 } 501 502/* FLUSH FIFO and reset Transmitter/Reciever */ 503 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_RESET); 504 if (bootverbose) 505 device_printf(dev, "resetting OHCI..."); 506 i = 0; 507 while(OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_RESET) { 508 if (i++ > 100) break; 509 DELAY(1000); 510 } 511 if (bootverbose) 512 printf("done (loop=%d)\n", i); 513 514 reg = OREAD(sc, OHCI_BUS_OPT); 515 reg2 = reg | OHCI_BUSFNC; 516 /* XXX */ 517 if (((reg & 0x0000f000) >> 12) < 10) 518 reg2 = (reg2 & 0xffff0fff) | (10 << 12); 519 if (bootverbose) 520 device_printf(dev, "BUS_OPT 0x%x -> 0x%x\n", reg, reg2); 521 OWRITE(sc, OHCI_BUS_OPT, reg2); 522 523 OWRITE(sc, OHCI_CROMHDR, sc->fc.config_rom[0]); 524 OWRITE(sc, OHCI_CROMPTR, vtophys(&sc->fc.config_rom[0])); 525 OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_BIGEND); 526 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_POSTWR); 527 528 fwohci_probe_phy(sc, dev); 529 530 OWRITE(sc, OHCI_SID_BUF, vtophys(sc->fc.sid_buf)); 531 OWRITE(sc, OHCI_LNKCTL, OHCI_CNTL_SID); 532 533 /* enable link */ 534 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LINKEN); 535 fw_busreset(&sc->fc); 536 fwohci_rx_enable(sc, &sc->arrq); 537 fwohci_rx_enable(sc, &sc->arrs); 538 539 for( i = 0, db_tr = sc->atrq.top; i < sc->atrq.ndb ; 540 i ++, db_tr = STAILQ_NEXT(db_tr, link)){ 541 db_tr->xfer = NULL; 542 } 543 for( i = 0, db_tr = sc->atrs.top; i < sc->atrs.ndb ; 544 i ++, db_tr = STAILQ_NEXT(db_tr, link)){ 545 db_tr->xfer = NULL; 546 } 547 548 OWRITE(sc, FWOHCI_RETRY, 549 (0xffff << 16 )| (0x0f << 8) | (0x0f << 4) | 0x0f) ; 550 OWRITE(sc, FWOHCI_INTMASK, 551 OHCI_INT_ERR | OHCI_INT_PHY_SID 552 | OHCI_INT_DMA_ATRQ | OHCI_INT_DMA_ATRS 553 | OHCI_INT_DMA_PRRQ | OHCI_INT_DMA_PRRS 554 | OHCI_INT_PHY_BUS_R | OHCI_INT_PW_ERR); 555 fwohci_set_intr(&sc->fc, 1); 556 557 OWRITE(sc, OHCI_ATQCTLCLR, OHCI_CNTL_DMA_RUN | OHCI_CNTL_DMA_DEAD); 558 OWRITE(sc, OHCI_ATSCTLCLR, OHCI_CNTL_DMA_RUN | OHCI_CNTL_DMA_DEAD); 559} 560 561int 562fwohci_init(struct fwohci_softc *sc, device_t dev) 563{ 564 int i; 565 u_int32_t reg; 566 |
|
409 reg = OREAD(sc, OHCI_VERSION); 410 device_printf(dev, "OHCI version %x.%x (ROM=%d)\n", 411 (reg>>16) & 0xff, reg & 0xff, (reg>>24) & 1); 412 413/* XXX: Available Isochrounous DMA channel probe */ 414 for( i = 0 ; i < 0x20 ; i ++ ){ 415 OWRITE(sc, OHCI_IRCTL(i), OHCI_CNTL_DMA_RUN); 416 reg = OREAD(sc, OHCI_IRCTL(i)); --- 57 unchanged lines hidden (view full) --- 474 sc->fc.config_rom[2] = 0xf000a002; 475 sc->fc.config_rom[3] = OREAD(sc, OHCI_EUID_HI); 476 sc->fc.config_rom[4] = OREAD(sc, OHCI_EUID_LO); 477 sc->fc.config_rom[5] = 0; 478 sc->fc.config_rom[0] = (4 << 24) | (5 << 16); 479 480 sc->fc.config_rom[0] |= fw_crc16(&sc->fc.config_rom[1], 5*4); 481 | 567 reg = OREAD(sc, OHCI_VERSION); 568 device_printf(dev, "OHCI version %x.%x (ROM=%d)\n", 569 (reg>>16) & 0xff, reg & 0xff, (reg>>24) & 1); 570 571/* XXX: Available Isochrounous DMA channel probe */ 572 for( i = 0 ; i < 0x20 ; i ++ ){ 573 OWRITE(sc, OHCI_IRCTL(i), OHCI_CNTL_DMA_RUN); 574 reg = OREAD(sc, OHCI_IRCTL(i)); --- 57 unchanged lines hidden (view full) --- 632 sc->fc.config_rom[2] = 0xf000a002; 633 sc->fc.config_rom[3] = OREAD(sc, OHCI_EUID_HI); 634 sc->fc.config_rom[4] = OREAD(sc, OHCI_EUID_LO); 635 sc->fc.config_rom[5] = 0; 636 sc->fc.config_rom[0] = (4 << 24) | (5 << 16); 637 638 sc->fc.config_rom[0] |= fw_crc16(&sc->fc.config_rom[1], 5*4); 639 |
482 483 fw_init(&sc->fc); | |
484 | 640 |
485/* Disable interrupt */ 486 OWRITE(sc, FWOHCI_INTMASKCLR, ~0); 487 488/* Now stopping all DMA channel */ 489 OWRITE(sc, OHCI_ARQCTLCLR, OHCI_CNTL_DMA_RUN); 490 OWRITE(sc, OHCI_ARSCTLCLR, OHCI_CNTL_DMA_RUN); 491 OWRITE(sc, OHCI_ATQCTLCLR, OHCI_CNTL_DMA_RUN); 492 OWRITE(sc, OHCI_ATSCTLCLR, OHCI_CNTL_DMA_RUN); 493 494 OWRITE(sc, OHCI_IR_MASKCLR, ~0); 495 for( i = 0 ; i < sc->fc.nisodma ; i ++ ){ 496 OWRITE(sc, OHCI_IRCTLCLR(i), OHCI_CNTL_DMA_RUN); 497 OWRITE(sc, OHCI_ITCTLCLR(i), OHCI_CNTL_DMA_RUN); 498 } 499 500/* FLUSH FIFO and reset Transmitter/Reciever */ 501 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_RESET); 502 if (bootverbose) 503 device_printf(dev, "resetting OHCI..."); 504 i = 0; 505 while(OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_RESET) { 506 if (i++ > 100) break; 507 DELAY(1000); 508 } 509 if (bootverbose) 510 printf("done (loop=%d)\n", i); 511 512 reg = OREAD(sc, OHCI_BUS_OPT); 513 reg2 = reg | OHCI_BUSFNC; 514 /* XXX */ 515 if (((reg & 0x0000f000) >> 12) < 10) 516 reg2 = (reg2 & 0xffff0fff) | (10 << 12); 517 if (bootverbose) 518 device_printf(dev, "BUS_OPT 0x%x -> 0x%x\n", reg, reg2); 519 OWRITE(sc, OHCI_BUS_OPT, reg2); 520 521 OWRITE(sc, OHCI_CROMHDR, sc->fc.config_rom[0]); 522 OWRITE(sc, OHCI_CROMPTR, vtophys(&sc->fc.config_rom[0])); 523 OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_BIGEND); 524 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_POSTWR); 525 526/* 527 * probe PHY parameters 528 * 0. to prove PHY version, whether compliance of 1394a. 529 * 1. to probe maximum speed supported by the PHY and 530 * number of port supported by core-logic. 531 * It is not actually available port on your PC . 532 */ 533 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LPS); 534#if 0 535 /* XXX wait for SCLK. */ 536 DELAY(100000); 537#endif 538 reg = fwphy_rddata(sc, FW_PHY_SPD_REG); 539 540 if((reg >> 5) != 7 ){ 541 sc->fc.mode &= ~FWPHYASYST; 542 sc->fc.nport = reg & FW_PHY_NP; 543 sc->fc.speed = reg & FW_PHY_SPD >> 6; 544 if (sc->fc.speed > MAX_SPEED) { 545 device_printf(dev, "invalid speed %d (fixed to %d).\n", 546 sc->fc.speed, MAX_SPEED); 547 sc->fc.speed = MAX_SPEED; 548 } 549 sc->fc.maxrec = maxrec[sc->fc.speed]; 550 device_printf(dev, 551 "Link 1394 only %s, %d ports, maxrec %d bytes.\n", 552 linkspeed[sc->fc.speed], sc->fc.nport, sc->fc.maxrec); 553 }else{ 554 reg2 = fwphy_rddata(sc, FW_PHY_ESPD_REG); 555 sc->fc.mode |= FWPHYASYST; 556 sc->fc.nport = reg & FW_PHY_NP; 557 sc->fc.speed = (reg2 & FW_PHY_ESPD) >> 5; 558 if (sc->fc.speed > MAX_SPEED) { 559 device_printf(dev, "invalid speed %d (fixed to %d).\n", 560 sc->fc.speed, MAX_SPEED); 561 sc->fc.speed = MAX_SPEED; 562 } 563 sc->fc.maxrec = maxrec[sc->fc.speed]; 564 device_printf(dev, 565 "Link 1394a available %s, %d ports, maxrec %d bytes.\n", 566 linkspeed[sc->fc.speed], sc->fc.nport, sc->fc.maxrec); 567 568 /* check programPhyEnable */ 569 reg2 = fwphy_rddata(sc, 5); 570#if 0 571 if (e1394a && (OREAD(sc, OHCI_HCCCTL) & OHCI_HCC_PRPHY)) { 572#else /* XXX force to enable 1394a */ 573 if (e1394a) { 574#endif 575 if (bootverbose) 576 device_printf(dev, 577 "Enable 1394a Enhancements\n"); 578 /* enable EAA EMC */ 579 reg2 |= 0x03; 580 /* set aPhyEnhanceEnable */ 581 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_PHYEN); 582 OWRITE(sc, OHCI_HCCCTLCLR, OHCI_HCC_PRPHY); 583 } else { 584 /* for safe */ 585 reg2 &= ~0x83; 586 } 587 reg2 = fwphy_wrdata(sc, 5, reg2); 588 } 589 590 reg = fwphy_rddata(sc, FW_PHY_SPD_REG); 591 if((reg >> 5) == 7 ){ 592 reg = fwphy_rddata(sc, 4); 593 reg |= 1 << 6; 594 fwphy_wrdata(sc, 4, reg); 595 reg = fwphy_rddata(sc, 4); 596 } 597 | |
598/* SID recieve buffer must allign 2^11 */ 599#define OHCI_SIDSIZE (1 << 11) 600 sc->fc.sid_buf = (u_int32_t *) vm_page_alloc_contig( OHCI_SIDSIZE, 601 0x10000, 0xffffffff, OHCI_SIDSIZE); 602 if (sc->fc.sid_buf == NULL) { 603 device_printf(dev, "sid_buf alloc failed.\n"); 604 return ENOMEM; 605 } 606 | 641/* SID recieve buffer must allign 2^11 */ 642#define OHCI_SIDSIZE (1 << 11) 643 sc->fc.sid_buf = (u_int32_t *) vm_page_alloc_contig( OHCI_SIDSIZE, 644 0x10000, 0xffffffff, OHCI_SIDSIZE); 645 if (sc->fc.sid_buf == NULL) { 646 device_printf(dev, "sid_buf alloc failed.\n"); 647 return ENOMEM; 648 } 649 |
607 OWRITE(sc, OHCI_SID_BUF, vtophys(sc->fc.sid_buf)); 608 sc->fc.sid_buf++; 609 OWRITE(sc, OHCI_LNKCTL, OHCI_CNTL_SID); 610 | 650 |
611 fwohci_db_init(&sc->arrq); 612 if ((sc->arrq.flags & FWOHCI_DBCH_INIT) == 0) 613 return ENOMEM; 614 615 fwohci_db_init(&sc->arrs); 616 if ((sc->arrs.flags & FWOHCI_DBCH_INIT) == 0) 617 return ENOMEM; 618 --- 28 unchanged lines hidden (view full) --- 647 sc->fc.itx_enable = fwohci_itxbuf_enable; 648 sc->fc.itx_disable = fwohci_itx_disable; 649 sc->fc.irx_post = fwohci_irx_post; 650 sc->fc.itx_post = NULL; 651 sc->fc.timeout = fwohci_timeout; 652 sc->fc.poll = fwohci_poll; 653 sc->fc.set_intr = fwohci_set_intr; 654 | 651 fwohci_db_init(&sc->arrq); 652 if ((sc->arrq.flags & FWOHCI_DBCH_INIT) == 0) 653 return ENOMEM; 654 655 fwohci_db_init(&sc->arrs); 656 if ((sc->arrs.flags & FWOHCI_DBCH_INIT) == 0) 657 return ENOMEM; 658 --- 28 unchanged lines hidden (view full) --- 687 sc->fc.itx_enable = fwohci_itxbuf_enable; 688 sc->fc.itx_disable = fwohci_itx_disable; 689 sc->fc.irx_post = fwohci_irx_post; 690 sc->fc.itx_post = NULL; 691 sc->fc.timeout = fwohci_timeout; 692 sc->fc.poll = fwohci_poll; 693 sc->fc.set_intr = fwohci_set_intr; 694 |
655 /* enable link */ 656 OWRITE(sc, OHCI_HCCCTL, OHCI_HCC_LINKEN); 657 fw_busreset(&sc->fc); 658 fwohci_rx_enable(sc, &sc->arrq); 659 fwohci_rx_enable(sc, &sc->arrs); | 695 fw_init(&sc->fc); 696 fwohci_reset(sc, dev); |
660 | 697 |
661 for( i = 0, db_tr = sc->atrq.top; i < sc->atrq.ndb ; 662 i ++, db_tr = STAILQ_NEXT(db_tr, link)){ 663 db_tr->xfer = NULL; 664 } 665 for( i = 0, db_tr = sc->atrs.top; i < sc->atrs.ndb ; 666 i ++, db_tr = STAILQ_NEXT(db_tr, link)){ 667 db_tr->xfer = NULL; 668 } 669 670 OWRITE(sc, FWOHCI_RETRY, 671 (0xffff << 16 )| (0x0f << 8) | (0x0f << 4) | 0x0f) ; 672 OWRITE(sc, FWOHCI_INTMASK, 673 OHCI_INT_ERR | OHCI_INT_PHY_SID 674 | OHCI_INT_DMA_ATRQ | OHCI_INT_DMA_ATRS 675 | OHCI_INT_DMA_PRRQ | OHCI_INT_DMA_PRRS 676 | OHCI_INT_PHY_BUS_R | OHCI_INT_PW_ERR); 677 fwohci_set_intr(&sc->fc, 1); 678 679 OWRITE(sc, OHCI_ATQCTLCLR, OHCI_CNTL_DMA_RUN | OHCI_CNTL_DMA_DEAD); 680 OWRITE(sc, OHCI_ATSCTLCLR, OHCI_CNTL_DMA_RUN | OHCI_CNTL_DMA_DEAD); 681 682 return err; | 698 return 0; |
683} 684 685void 686fwohci_timeout(void *arg) 687{ 688 struct fwohci_softc *sc; 689 690 sc = (struct fwohci_softc *)arg; --- 424 unchanged lines hidden (view full) --- 1115 return; 1116 } 1117 bzero(db, sizeof (struct fwohcidb) * dbch->ndesc * dbch->ndb); 1118 /* Attach DB to DMA ch. */ 1119 for(idb = 0 ; idb < dbch->ndb ; idb++){ 1120 db_tr->dbcnt = 0; 1121 db_tr->db = &db[idb * dbch->ndesc]; 1122 STAILQ_INSERT_TAIL(&dbch->db_trq, db_tr, link); | 699} 700 701void 702fwohci_timeout(void *arg) 703{ 704 struct fwohci_softc *sc; 705 706 sc = (struct fwohci_softc *)arg; --- 424 unchanged lines hidden (view full) --- 1131 return; 1132 } 1133 bzero(db, sizeof (struct fwohcidb) * dbch->ndesc * dbch->ndb); 1134 /* Attach DB to DMA ch. */ 1135 for(idb = 0 ; idb < dbch->ndb ; idb++){ 1136 db_tr->dbcnt = 0; 1137 db_tr->db = &db[idb * dbch->ndesc]; 1138 STAILQ_INSERT_TAIL(&dbch->db_trq, db_tr, link); |
1123 if(!(dbch->xferq.flag & FWXFERQ_PACKET) && 1124 (idb % dbch->xferq.bnpacket == 0)){ 1125 dbch->xferq.bulkxfer[idb/dbch->xferq.bnpacket].start 1126 = (caddr_t)db_tr; | 1139 if (!(dbch->xferq.flag & FWXFERQ_PACKET) && 1140 dbch->xferq.bnpacket != 0) { 1141 /* XXX what thoes for? */ 1142 if (idb % dbch->xferq.bnpacket == 0) 1143 dbch->xferq.bulkxfer[idb / dbch->xferq.bnpacket 1144 ].start = (caddr_t)db_tr; 1145 if ((idb + 1) % dbch->xferq.bnpacket == 0) 1146 dbch->xferq.bulkxfer[idb / dbch->xferq.bnpacket 1147 ].end = (caddr_t)db_tr; |
1127 } | 1148 } |
1128 if((!(dbch->xferq.flag & FWXFERQ_PACKET)) && 1129 ((idb + 1)% dbch->xferq.bnpacket == 0)){ 1130 dbch->xferq.bulkxfer[idb/dbch->xferq.bnpacket].end 1131 = (caddr_t)db_tr; 1132 } | |
1133 db_tr++; 1134 } 1135 STAILQ_LAST(&dbch->db_trq, fwohcidb_tr,link)->link.stqe_next 1136 = STAILQ_FIRST(&dbch->db_trq); 1137 dbch->top = STAILQ_FIRST(&dbch->db_trq); 1138 dbch->bottom = dbch->top; 1139 dbch->flags = FWOHCI_DBCH_INIT; 1140} --- 548 unchanged lines hidden (view full) --- 1689 OWRITE(sc, OHCI_LNKCTL, OHCI_CNTL_CYCTIMER); 1690 } 1691 fc->nodeid = OREAD(sc, FWOHCI_NODEID) & 0x3f; 1692 1693 plen = OREAD(sc, OHCI_SID_CNT) & OHCI_SID_CNT_MASK; 1694 plen -= 4; /* chop control info */ 1695 buf = malloc( FWPMAX_S400, M_DEVBUF, M_NOWAIT); 1696 if(buf == NULL) goto sidout; | 1149 db_tr++; 1150 } 1151 STAILQ_LAST(&dbch->db_trq, fwohcidb_tr,link)->link.stqe_next 1152 = STAILQ_FIRST(&dbch->db_trq); 1153 dbch->top = STAILQ_FIRST(&dbch->db_trq); 1154 dbch->bottom = dbch->top; 1155 dbch->flags = FWOHCI_DBCH_INIT; 1156} --- 548 unchanged lines hidden (view full) --- 1705 OWRITE(sc, OHCI_LNKCTL, OHCI_CNTL_CYCTIMER); 1706 } 1707 fc->nodeid = OREAD(sc, FWOHCI_NODEID) & 0x3f; 1708 1709 plen = OREAD(sc, OHCI_SID_CNT) & OHCI_SID_CNT_MASK; 1710 plen -= 4; /* chop control info */ 1711 buf = malloc( FWPMAX_S400, M_DEVBUF, M_NOWAIT); 1712 if(buf == NULL) goto sidout; |
1697 bcopy((void *)(uintptr_t)(volatile void *)fc->sid_buf, | 1713 bcopy((void *)(uintptr_t)(volatile void *)(fc->sid_buf + 1), |
1698 buf, plen); 1699 fw_sidrcv(fc, buf, plen, 0); 1700 } 1701sidout: 1702 if((stat & OHCI_INT_DMA_ATRQ )){ 1703#ifndef ACK_ALL 1704 OWRITE(sc, FWOHCI_INTSTATCLR, OHCI_INT_DMA_ATRQ); 1705#endif --- 866 unchanged lines hidden --- | 1714 buf, plen); 1715 fw_sidrcv(fc, buf, plen, 0); 1716 } 1717sidout: 1718 if((stat & OHCI_INT_DMA_ATRQ )){ 1719#ifndef ACK_ALL 1720 OWRITE(sc, FWOHCI_INTSTATCLR, OHCI_INT_DMA_ATRQ); 1721#endif --- 866 unchanged lines hidden --- |