diff options
| author | Poul-Henning Kamp <phk@FreeBSD.org> | 2000-11-01 22:04:15 +0000 |
|---|---|---|
| committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2000-11-01 22:04:15 +0000 |
| commit | 62e12bb630a3696cfd707e193be8d292e8f92eee (patch) | |
| tree | bad73589cd0e12149340348d43cc799f1d18f7eb /sys/dev/musycc | |
| parent | a9bda22cd698374f61b1705da211d68ead9d98ab (diff) | |
Notes
Diffstat (limited to 'sys/dev/musycc')
| -rw-r--r-- | sys/dev/musycc/musycc.c | 55 |
1 files changed, 38 insertions, 17 deletions
diff --git a/sys/dev/musycc/musycc.c b/sys/dev/musycc/musycc.c index 7370def72749..2184965b4b63 100644 --- a/sys/dev/musycc/musycc.c +++ b/sys/dev/musycc/musycc.c @@ -395,7 +395,9 @@ init_ctrl(struct softc *sc) else sc->ram->grcd |= 0x00000000; /* !OOFABT */ +#if 0 sc->ram->grcd |= 0x00000010; /* MSKOOF */ +#endif sc->ram->grcd |= 0x00000020; /* MSKCOFA */ sc->ram->grcd |= 0x00000400; /* POLLTH=1 */ @@ -500,7 +502,10 @@ init_8370(struct softc *sc) DELAY(20); p[0x001] = 0x00; /* CR0 - E1, RFRAME: FAS only */ DELAY(20); - p[0x002] = 0x00; /* JAT_CR - XXX */ + if (sc->clocksource == INT) + p[0x002] = 0x40; /* JAT_CR - XXX */ + else + p[0x002] = 0x00; /* JAT_CR - XXX */ p[0x00D] = 0x01; /* IER6 - ONESEC */ p[0x014] = 0x00; /* LOOP - */ p[0x015] = 0x00; /* DL3_TS - */ @@ -557,10 +562,11 @@ init_8370(struct softc *sc) p[0x090] = 0x05; /* CLAD_CR - XXX */ p[0x091] = 0x01; /* CSEL - 2048kHz */ - if (sc->framing == E1U || sc->framing == T1U) + if (sc->framing == E1U || sc->framing == T1U) { p[0x0a0] = 0x00; - if (sc->framing == E1U || sc->framing == T1U) p[0x0a6] = 0x00; + p[0x0b1] = 0x00; + } p[0x0d0] = 0x46; /* SBI_CR - SBI=6 */ p[0x0d1] = 0x70; /* RSB_CR - XXX */ @@ -569,7 +575,10 @@ init_8370(struct softc *sc) p[0x0d4] = 0x30; /* TSB_CR - XXX */ p[0x0d5] = 0x00; /* TSYNC_BIT - 0 */ p[0x0d6] = 0x00; /* TSYNC_TS - 0 */ - p[0x0d7] = 0x01; /* RSIG_CR - 0 */ + if (sc->framing == E1U || sc->framing == T1U) + p[0x0d7] = 0x05; /* RSIG_CR - 0 | FRZ_OFF*/ + else + p[0x0d7] = 0x01; /* RSIG_CR - 0 */ p[0x0d8] = 0x00; /* RSIG_FRM - 0 */ for (i = 0; i < 32; i ++) { p[0x0e0 + i] = 0x0d; /* SBC$i - RINDO|TINDO|ASSIGN */ @@ -594,7 +603,6 @@ musycc_intr0_tx_eom(struct softc *sc, int ch) if (sch == NULL || sch->state != UP) { /* XXX: this should not happen once the driver is done */ printf("Xmit packet on uninitialized channel %d\n", ch); - return; } if (sc->mdt[ch] == NULL) return; /* XXX: can this happen ? */ @@ -649,8 +657,10 @@ musycc_intr0_rx_eom(struct softc *sc, int ch) m = md->m; m->m_len = m->m_pkthdr.len = status & 0x3fff; error = (status >> 16) & 0xf; +#if 0 if (error == 8 && (sc->framing == E1U || sc->framing == T1U)) error = 0; +#endif if (error == 0) { MGETHDR(m2, M_DONTWAIT, MT_DATA); if (m2 != NULL) { @@ -678,6 +688,10 @@ musycc_intr0_rx_eom(struct softc *sc, int ch) */ sch->rx_drop++; } + } else if (error == 9) { + printf("FCS\n"); + } else if (error == 10) { + printf("ALIGN\n"); } else { /* Receive error, print some useful info */ printf("%s %s: RX 0x%08x ", sch->sc->nodename, @@ -686,6 +700,7 @@ musycc_intr0_rx_eom(struct softc *sc, int ch) if (m->m_len > 16) m->m_len = m->m_pkthdr.len = 16; m_print(m); + printf("\n"); } md->status = 1600; /* XXX: MTU */ /* Check next mdesc in the ring */ @@ -747,12 +762,18 @@ musycc_intr0(void *arg) musycc_intr0_rx_eom(sc, ch); break; case 0: - if (er == 2) /* COFA */ +#if 1 + if (er == 2) { /* COFA */ break; - else if (er == 3) { /* ONR */ + } else if (er == 3) { /* ONR */ musycc_intr0_tx_eom(sc, ch); musycc_intr0_rx_eom(sc, ch); + } else if (er == 13) { /* SHT */ + musycc_intr0_tx_eom(sc, ch); + musycc_intr0_rx_eom(sc, ch); + break; } +#endif default: #if 1 printf("huh ? %08x %d", u1, g); @@ -867,10 +888,10 @@ musycc_config(node_p node, char *set, char *ret) init_ctrl(sc); return; } - if (!strcmp(set, "clock int")) { + if (!strcmp(set, "clock source internal")) { sc->clocksource = INT; init_ctrl(sc); - } else if (!strcmp(set, "clock ext")) { + } else if (!strcmp(set, "clock source line")) { sc->clocksource = EXT; init_ctrl(sc); } else if (!strcmp(set, "show 8370 0")) { @@ -900,9 +921,9 @@ musycc_config(node_p node, char *set, char *ret) else if (sc->framing == E1U) strcat(ret, "line e1u\n"); if (sc->clocksource == INT) - strcat(ret, "clock int\n"); + strcat(ret, "clock source internal\n"); else - strcat(ret, "clock ext\n"); + strcat(ret, "clock source line\n"); return; barf: strcpy(ret, "Syntax Error\n"); @@ -1212,6 +1233,12 @@ musycc_disconnect(hook_p hook) while (csc->state != C_RUNNING) tsleep(&csc->state, PZERO + PCATCH, "crun", hz/10); + /* Deactivate the channel */ + sc->reg->srd = sc->last = 0x0900 + sch->chan; + tsleep(&sc->last, PZERO + PCATCH, "con3", hz); + sc->reg->srd = sc->last = 0x0920 + sch->chan; + tsleep(&sc->last, PZERO + PCATCH, "con4", hz); + if (sch->state == DOWN) return (0); sch->state = DOWN; @@ -1231,12 +1258,6 @@ musycc_disconnect(hook_p hook) FREE(sc->mdr[ch], M_MUSYCC); sc->mdr[ch] = NULL; - /* Deactivate the channel */ - sc->reg->srd = sc->last = 0x0900 + sch->chan; - tsleep(&sc->last, PZERO + PCATCH, "con3", hz); - sc->reg->srd = sc->last = 0x0920 + sch->chan; - tsleep(&sc->last, PZERO + PCATCH, "con4", hz); - for (i = 0; i < 32; i++) { if (sch->ts & (1 << i)) { sc->ram->rtsm[i] = 0; |
