Lines Matching defs:scp
182 msci_write_1(sca_port_t *scp, u_int reg, u_int8_t val)
184 sca_write_1(scp->sca, scp->msci_off + reg, val);
188 msci_read_1(sca_port_t *scp, u_int reg)
190 return sca_read_1(scp->sca, scp->msci_off + reg);
194 dmac_write_1(sca_port_t *scp, u_int reg, u_int8_t val)
196 sca_write_1(scp->sca, scp->dmac_off + reg, val);
200 dmac_write_2(sca_port_t *scp, u_int reg, u_int16_t val)
202 sca_write_2(scp->sca, scp->dmac_off + reg, val);
206 dmac_read_1(sca_port_t *scp, u_int reg)
208 return sca_read_1(scp->sca, scp->dmac_off + reg);
212 dmac_read_2(sca_port_t *scp, u_int reg)
214 return sca_read_2(scp->sca, scp->dmac_off + reg);
410 sca_port_t *scp = &sc->sc_ports[port];
414 scp->sca = sc; /* point back to the parent */
416 scp->sp_port = port;
419 scp->msci_off = SCA_MSCI_OFF_0;
420 scp->dmac_off = SCA_DMAC_OFF_0;
426 scp->msci_off = SCA_MSCI_OFF_1;
427 scp->dmac_off = SCA_DMAC_OFF_1;
434 sca_msci_init(sc, scp);
435 sca_dmac_init(sc, scp);
440 ifp = &scp->sp_if;
442 ifp->if_softc = scp;
451 scp->linkq.ifq_maxlen = 5; /* if we exceed this we are hosed already */
453 scp->fastq.ifq_maxlen = IFQ_MAXLEN;
472 scp->cka_lasttx = now.tv_usec;
473 scp->cka_lastrx = 0;
534 sca_msci_init(struct sca_softc *sc, sca_port_t *scp)
537 msci_write_1(scp, SCA_CMD0, SCA_CMD_RESET);
539 msci_write_1(scp, SCA_MD00,
546 msci_write_1(scp, SCA_CMD0, SCA_CMD_RXRESET);
549 msci_write_1(scp, SCA_MD10, SCA_MD1_NOADDRCHK);
550 msci_write_1(scp, SCA_MD20,
554 msci_write_1(scp, SCA_CMD0, SCA_CMD_RXRESET);
557 msci_write_1(scp, SCA_CTL0,
563 msci_write_1(scp, SCA_CMD0, SCA_CMD_TXRESET);
568 msci_write_1(scp, SCA_RXS0, scp->sp_rxs);
569 msci_write_1(scp, SCA_TXS0, scp->sp_txs);
570 msci_write_1(scp, SCA_TMC0, scp->sp_tmc);
573 sc->sc_clock_callback(sc->sc_aux, scp->sp_port, scp->sp_eclock);
581 msci_write_1(scp, SCA_IE00, 0);
582 msci_write_1(scp, SCA_IE10, 0); /* 0x0c == CD and CTS changes only */
585 msci_write_1(scp, SCA_IE10, SCA_ST1_UDRN);
586 msci_write_1(scp, SCA_IE00, SCA_ST0_TXINT);
588 msci_write_1(scp, SCA_IE20, 0);
590 msci_write_1(scp, SCA_FIE0, 0);
592 msci_write_1(scp, SCA_SA00, 0);
593 msci_write_1(scp, SCA_SA10, 0);
595 msci_write_1(scp, SCA_IDL0, 0x7e);
597 msci_write_1(scp, SCA_RRC0, 0x0e);
598 /* msci_write_1(scp, SCA_TRC00, 0x10); */
613 msci_write_1(scp, SCA_TRC00, 0x00);
614 msci_write_1(scp, SCA_TRC10, 0x1f);
623 sca_dmac_init(struct sca_softc *sc, sca_port_t *scp)
638 sc->scu_set_page(sc, scp->sp_txdesc_p);
641 desc = scp->sp_txdesc;
642 desc_p = scp->sp_txdesc_p;
643 buf_p = scp->sp_txbuf_p;
644 scp->sp_txcur = 0;
645 scp->sp_txinuse = 0;
650 ((desc_p + sizeof(*desc) * scp->sp_ntxdesc) & 0xffff0000))
653 ((buf_p + SCA_BSIZE * scp->sp_ntxdesc) & 0xff000000))
657 for (i = 0 ; i < scp->sp_ntxdesc ; i++) {
676 sca_desc_write_chainp(sc, desc - 1, scp->sp_txdesc_p & 0x0000ffff);
683 dmac_write_1(scp, SCA_DSR1, 0);
684 dmac_write_1(scp, SCA_DCR1, SCA_DCR_ABRT);
685 dmac_write_1(scp, SCA_DMR1, SCA_DMR_TMOD | SCA_DMR_NF);
687 dmac_write_1(scp, SCA_DIR1,
690 dmac_write_1(scp, SCA_DIR1,
692 dmac_write_1(scp, SCA_CPB1,
693 (u_int8_t)((scp->sp_txdesc_p & 0x00ff0000) >> 16));
701 sc->scu_set_page(sc, scp->sp_rxdesc_p);
703 desc = scp->sp_rxdesc;
704 desc_p = scp->sp_rxdesc_p;
705 buf_p = scp->sp_rxbuf_p;
710 ((desc_p + sizeof(*desc) * scp->sp_nrxdesc) & 0xffff0000))
713 ((buf_p + SCA_BSIZE * scp->sp_nrxdesc) & 0xff000000))
717 for (i = 0 ; i < scp->sp_nrxdesc; i++) {
737 sca_desc_write_chainp(sc, desc - 1, scp->sp_rxdesc_p & 0x0000ffff);
739 sca_dmac_rxinit(scp);
752 sca_dmac_rxinit(sca_port_t *scp)
757 dmac_write_1(scp, SCA_DSR0, 0); /* disable DMA */
758 dmac_write_1(scp, SCA_DCR0, SCA_DCR_ABRT);
760 dmac_write_1(scp, SCA_DMR0, SCA_DMR_TMOD | SCA_DMR_NF);
761 dmac_write_2(scp, SCA_BFLL0, SCA_BSIZE);
764 scp->sp_rxstart = 0;
765 scp->sp_rxend = scp->sp_nrxdesc - 1;
774 dmac_write_1(scp, SCA_CPB0,
775 (u_int8_t)((scp->sp_rxdesc_p & 0x00ff0000) >> 16));
776 dmac_write_2(scp, SCA_CDAL0, (u_int16_t)(scp->sp_rxdesc_p & 0xffff));
777 dmac_write_2(scp, SCA_EDAL0, (u_int16_t)
778 (scp->sp_rxdesc_p + (sizeof(sca_desc_t) * scp->sp_rxend)));
783 dmac_write_1(scp, SCA_DIR0,
785 dmac_write_1(scp, SCA_DSR0, SCA_DSR_DE);
1000 sca_port_t *scp = ifp->if_softc;
1001 struct sca_softc *sc = scp->sca;
1016 if ((scp->sp_txinuse >= (scp->sp_ntxdesc - 1))
1020 if (scp->sp_txinuse
1024 SCA_DPRINTF(SCA_DEBUG_TX, ("TX: txinuse %d\n", scp->sp_txinuse));
1035 sc->scu_set_page(sc, scp->sp_txdesc_p);
1041 IF_DEQUEUE(&scp->linkq, mb_head);
1044 IF_DEQUEUE(&scp->fastq, mb_head);
1053 if (scp->txinuse != 0) {
1055 desc = &scp->sp_txdesc[scp->txcur];
1060 nexttx = (scp->sp_txcur + 1) % scp->sp_ntxdesc;
1065 if (scp->sp_txinuse)
1066 nexttx = (scp->sp_txcur + 1) % scp->sp_ntxdesc;
1072 buf = scp->sp_txbuf + SCA_BSIZE * nexttx;
1073 buf_p = scp->sp_txbuf_p + SCA_BSIZE * nexttx;
1076 desc = &scp->sp_txdesc[nexttx];
1126 scp->sp_txcur = nexttx;
1127 scp->sp_txinuse++;
1131 ("TX: inuse %d index %d\n", scp->sp_txinuse, scp->sp_txcur));
1139 if (scp->sp_txinuse < (scp->sp_ntxdesc - 1))
1141 if (scp->sp_txinuse < scp->sp_ntxdesc)
1149 desc = &scp->sp_txdesc[scp->sp_txcur];
1160 sca_port_starttx(scp);
1227 sca_dmac_intr(sca_port_t *scp, u_int8_t isr)
1239 ("TX INTERRUPT port %d\n", scp->sp_port));
1247 dsr = dmac_read_1(scp, SCA_DSR1);
1248 dmac_write_1(scp, SCA_DSR1,
1263 scp->sp_if.if_xname);
1265 scp->sp_if.if_flags &= ~IFF_OACTIVE;
1266 scp->sp_txcur = 0;
1267 scp->sp_txinuse = 0;
1275 scp->sp_if.if_xname,
1276 dmac_read_2(scp, SCA_CDAL1),
1277 dmac_read_2(scp, SCA_EDAL1),
1278 dmac_read_1(scp, SCA_CPB1));
1284 scp->sp_if.if_flags &= ~IFF_OACTIVE;
1285 scp->sp_txcur = 0;
1286 scp->sp_txinuse = 0;
1298 dmac_read_2(scp, SCA_CDAL1),
1299 dmac_read_2(scp, SCA_EDAL1),
1302 scp->sp_if.if_flags &= ~IFF_OACTIVE;
1303 scp->sp_txcur = 0;
1304 scp->sp_txinuse = 0;
1309 if_schedule_deferred_start(&scp->sp_if);
1318 (scp == &scp->sca->sc_ports[0] ? 0 : 1)));
1324 dsr = dmac_read_1(scp, SCA_DSR0);
1325 dmac_write_1(scp, SCA_DSR0, dsr | SCA_DSR_DEWD);
1341 sca_get_packets(scp);
1349 scp->sp_if.if_xname);
1351 sca_dmac_rxinit(scp);
1362 scp->sp_if.if_xname);
1364 sca_dmac_rxinit(scp);
1373 sca_msci_intr(sca_port_t *scp, u_int8_t isr)
1378 if ((st1 = msci_read_1(scp, SCA_ST10))) {
1380 msci_write_1(scp, SCA_ST10, st1);
1384 trc0 = msci_read_1(scp, SCA_TRC00);
1392 msci_write_1(scp, SCA_TRC00, trc0);
1400 sca_get_packets(sca_port_t *scp)
1406 sc = scp->sca;
1417 sc->scu_set_page(sc, scp->sp_rxdesc_p);
1421 while (sca_frame_avail(scp)) {
1422 sca_frame_process(scp);
1423 sca_frame_read_done(scp);
1441 sca_frame_avail(sca_port_t *scp)
1452 cda = dmac_read_2(scp, SCA_CDAL0);
1457 desc_p = (scp->sp_rxdesc_p & 0xFFFF);
1463 cda, desc_p, cdaidx, scp->sp_nrxdesc, scp->sp_rxstart));
1466 if (cdaidx >= scp->sp_nrxdesc)
1471 for (; scp->sp_rxstart != cdaidx; sca_frame_read_done(scp)) {
1477 desc = &scp->sp_rxdesc[scp->sp_rxstart];
1478 rxstat = sca_desc_read_stat(scp->sca, desc);
1481 scp->sp_port, scp->sp_rxstart, rxstat));
1484 scp->sp_port, sca_desc_read_buflen(scp->sca, desc)));
1494 if_statinc(&scp->sp_if, if_ierrors);
1513 if_statinc(&scp->sp_if, if_ierrors);
1517 scp->sp_rxstart));
1531 sca_frame_process(sca_port_t *scp)
1543 desc = &scp->sp_rxdesc[scp->sp_rxstart];
1544 bufp = scp->sp_rxbuf + SCA_BSIZE * scp->sp_rxstart;
1545 len = sca_desc_read_buflen(scp->sca, desc);
1553 sca_frame_print(scp, desc, bufp);
1559 if_statinc(&scp->sp_if, if_ierrors);
1563 m = sca_mbuf_alloc(scp->sca, bufp, len);
1578 bpf_mtap_softint(&scp->sp_if, m);
1580 if_statinc(&scp->sp_if, if_ipackets);
1587 m_set_rcvif(m, &scp->sp_if);
1597 m_set_rcvif(m, &scp->sp_if);
1612 if_statinc(&scp->sp_if, if_ierrors);
1624 m_set_rcvif(m, &scp->sp_if);
1629 if_statinc(&scp->sp_if, if_ierrors);
1634 if_statinc(&scp->sp_if, if_ierrors);
1647 scp->cka_lastrx = ntohl(cisco->par1);
1648 scp->cka_lasttx++;
1654 cisco->par1 = htonl(scp->cka_lasttx);
1658 if (IF_QFULL(&scp->linkq)) {
1659 IF_DROP(&scp->linkq);
1662 IF_ENQUEUE(&scp->linkq, m);
1664 sca_start(&scp->sp_if);
1667 if (!scp->sca->sc_usedma) {
1668 scp->sca->scu_set_page(scp->sca,
1669 scp->sp_rxdesc_p);
1670 scp->sca->scu_page_on(scp->sca);
1678 if_statinc(&scp->sp_if, if_noproto);
1686 if_statinc(&scp->sp_if, if_noproto);
1693 if_statinc(&scp->sp_if, if_iqdrops);
1708 sca_frame_print(sca_port_t *scp, sca_desc_t *desc, u_int8_t *p)
1715 sc = scp->sca;
1753 sca_frame_read_done(sca_port_t *scp)
1758 scp->sp_rxend = scp->sp_rxstart;
1759 scp->sp_rxstart = (scp->sp_rxstart + 1) % scp->sp_nrxdesc;
1762 edesc_p = (u_int16_t)scp->sp_rxdesc_p +
1763 (sizeof(sca_desc_t) * scp->sp_rxend);
1764 dmac_write_2(scp, SCA_EDAL0, edesc_p);
1771 sca_port_up(sca_port_t *scp)
1773 struct sca_softc *sc = scp->sca;
1783 msci_write_1(scp, SCA_CMD0, SCA_CMD_TXRESET);
1784 msci_write_1(scp, SCA_CMD0, SCA_CMD_RXRESET);
1789 scp->sp_if.if_flags &= ~IFF_OACTIVE;
1790 scp->sp_if.if_flags |= IFF_RUNNING;
1795 sc->sc_dtr_callback(sc->sc_aux, scp->sp_port, 1);
1800 msci_write_1(scp, SCA_CTL0,
1801 (msci_read_1(scp, SCA_CTL0) & ~SCA_CTL_RTS_MASK)
1812 if (scp->sp_port == 1) {
1819 if (scp->sp_port == 0) {
1831 msci_write_1(scp, SCA_CMD0, SCA_CMD_TXENABLE);
1832 msci_write_1(scp, SCA_CMD0, SCA_CMD_RXENABLE);
1837 scp->sp_txinuse = 0;
1838 scp->sp_txcur = 0;
1840 scp->cka_lasttx = now.tv_usec;
1841 scp->cka_lastrx = 0;
1848 sca_port_down(sca_port_t *scp)
1850 struct sca_softc *sc = scp->sca;
1858 sc->sc_dtr_callback(sc->sc_aux, scp->sp_port, 0);
1863 msci_write_1(scp, SCA_CTL0,
1864 (msci_read_1(scp, SCA_CTL0) & ~SCA_CTL_RTS_MASK)
1875 if (scp->sp_port == 1) {
1882 if (scp->sp_port == 0) {
1894 msci_write_1(scp, SCA_CMD0, SCA_CMD_RXDISABLE);
1895 msci_write_1(scp, SCA_CMD0, SCA_CMD_TXDISABLE);
1900 scp->sp_if.if_flags &= ~(IFF_OACTIVE|IFF_RUNNING);
1921 sca_port_starttx(sca_port_t *scp)
1928 if (((scp->sp_if.if_flags & IFF_OACTIVE) == IFF_OACTIVE)
1929 || scp->sp_txinuse == 0)
1934 scp->sp_if.if_flags |= IFF_OACTIVE;
1940 enddesc = (scp->sp_txcur + 1) % scp->sp_ntxdesc;
1941 startdesc_p = scp->sp_txdesc_p;
1942 enddesc_p = scp->sp_txdesc_p + sizeof(sca_desc_t) * enddesc;
1947 dmac_write_2(scp, SCA_EDAL1, (u_int16_t)(enddesc_p & 0x0000ffff));
1948 dmac_write_2(scp, SCA_CDAL1,
1954 dmac_write_1(scp, SCA_DSR1, SCA_DSR_DE);
2075 struct sca_port *scp;
2084 scp = &sc->sc_ports[i];
2085 mhz = sc->sc_baseclock / (scp->sp_tmc ? scp->sp_tmc : 256);
2086 div = scp->sp_rxs & SCA_RXS_DIV_MASK;
2088 printf("%s: rx clock: ", scp->sp_if.if_xname);
2089 switch (scp->sp_rxs & SCA_RXS_CLK_MASK) {
2107 div = scp->sp_txs & SCA_TXS_DIV_MASK;
2108 switch (scp->sp_txs & SCA_TXS_CLK_MASK) {
2119 if (scp->sp_eclock)
2121 scp->sp_if.if_xname);