/* * Polled input char. */ int zs_getc(void *arg) { struct zs_chanstate *cs = arg; int s, c; uint8_t rr0, stat; s = splhigh(); top: /* Wait for a character to arrive. */ do { rr0 = *cs->cs_reg_csr; ZS_DELAY(); } while ((rr0 & ZSRR0_RX_READY) == 0); /* Read error register. */ stat = zs_read_reg(cs, 1) & (ZSRR1_FE | ZSRR1_DO | ZSRR1_PE); if (stat) { zs_write_csr(cs, ZSM_RESET_ERR); goto top; } /* Read character. */ c = *cs->cs_reg_data; ZS_DELAY(); splx(s); return (c); }
void zs_write_reg(struct zs_chanstate *cs, uint8_t reg, uint8_t val) { *cs->cs_reg_csr = reg; ZS_DELAY(); *cs->cs_reg_csr = val; ZS_DELAY(); }
void zs_write_reg(struct zs_chanstate *cs, uint8_t reg, uint8_t val) { struct zs_channel *zsc = (struct zs_channel *)cs; bus_space_write_1(zsc->cs_bustag, zsc->cs_regs, ZS_REG_CSR, reg); ZS_DELAY(); bus_space_write_1(zsc->cs_bustag, zsc->cs_regs, ZS_REG_CSR, val); ZS_DELAY(); }
uint8_t zs_read_reg(struct zs_chanstate *cs, uint8_t reg) { uint8_t val; *cs->cs_reg_csr = reg; ZS_DELAY(); val = *cs->cs_reg_csr; ZS_DELAY(); return val; }
uint8_t zs_read_reg(struct zs_chanstate *cs, uint8_t reg) { uint8_t val; struct zs_channel *zsc = (struct zs_channel *)cs; bus_space_write_1(zsc->cs_bustag, zsc->cs_regs, ZS_REG_CSR, reg); ZS_DELAY(); val = bus_space_read_1(zsc->cs_bustag, zsc->cs_regs, ZS_REG_CSR); ZS_DELAY(); return val; }
void zs_write_data(struct zs_chanstate *cs, uint8_t val) { *cs->cs_reg_data = val; ZS_DELAY(); }
/* * Polled output char. */ void zs_putc(void *arg, int c) { volatile struct zschan *zc = arg; int s, rr0; s = splhigh(); /* Wait for transmitter to become ready. */ do { rr0 = zc->zc_csr; ZS_DELAY(); } while ((rr0 & ZSRR0_TX_READY) == 0); zc->zc_data = c; ZS_DELAY(); splx(s); }
/* * Polled output char. */ void zs_putc(void *arg, int c) { struct zs_chanstate *cs = arg; int s, rr0; s = splhigh(); /* Wait for transmitter to become ready. */ do { rr0 = *cs->cs_reg_csr; ZS_DELAY(); } while ((rr0 & ZSRR0_TX_READY) == 0); *cs->cs_reg_data = c; ZS_DELAY(); splx(s); }
void zs_write_data(struct zs_chanstate *cs, uint8_t val) { struct zs_channel *zsc = (struct zs_channel *)cs; bus_space_write_1(zsc->cs_bustag, zsc->cs_regs, ZS_REG_DATA, val); ZS_DELAY(); }
uint8_t zs_read_data(struct zs_chanstate *cs) { uint8_t val; val = *cs->cs_reg_data; ZS_DELAY(); return val; }
void zs_write_csr(struct zs_chanstate *cs, uint8_t val) { struct zs_channel *zsc = (struct zs_channel *)cs; bus_space_write_1(zsc->cs_bustag, zsc->cs_regs, (ZS_REG_CSR << 2) + 3, val); ZS_DELAY(); }
uint8_t zs_read_data(struct zs_chanstate *cs) { struct zs_channel *zsc = (struct zs_channel *)cs; uint8_t val; val = bus_space_read_1(zsc->cs_bustag, zsc->cs_regs, ZS_REG_DATA); ZS_DELAY(); return val; }
/* * Polled input char. */ int zs_getc(void *arg) { struct zs_chanstate *cs = arg; int s, c, rr0; s = splhigh(); /* Wait for a character to arrive. */ do { rr0 = *cs->cs_reg_csr; ZS_DELAY(); } while ((rr0 & ZSRR0_RX_READY) == 0); c = *cs->cs_reg_data; ZS_DELAY(); splx(s); return c; }
int zs_getc(void *arg) { register volatile struct zschan *zc = arg; register int s, c, rr0; s = splzs(); /* Wait for a character to arrive. */ do { rr0 = zc->zc_csr; ZS_DELAY(); } while ((rr0 & ZSRR0_RX_READY) == 0); c = zc->zc_data; ZS_DELAY(); splx(s); return (c); }
uint8_t zs_read_csr(struct zs_chanstate *cs) { struct zs_channel *zsc = (struct zs_channel *)cs; uint8_t val; val = bus_space_read_1(zsc->cs_bustag, zsc->cs_regs, (ZS_REG_CSR << 2) + 3); ZS_DELAY(); return val; }
/* * Polled input char. */ int zs_getc(void *arg) { volatile struct zschan *zc = arg; int s, c, rr0; s = splhigh(); /* Wait for a character to arrive. */ do { rr0 = zc->zc_csr; ZS_DELAY(); } while ((rr0 & ZSRR0_RX_READY) == 0); c = zc->zc_data; ZS_DELAY(); splx(s); /* * This is used by the kd driver to read scan codes, * so don't translate '\r' ==> '\n' here... */ return (c); }
/* * Polled input char. */ int zs_getc(void *arg) { struct zs_chanstate *cs = arg; int s, c; uint8_t rr0; s = splhigh(); /* Wait for a character to arrive. */ do { rr0 = *cs->cs_reg_csr; ZS_DELAY(); } while ((rr0 & ZSRR0_RX_READY) == 0); c = *cs->cs_reg_data; ZS_DELAY(); splx(s); /* * This could be used by the kd driver to read scan codes, * so don't translate '\r' ==> '\n' here... */ return c; }
/* * Handle user request to enter kernel debugger. */ void zs_abort(struct zs_chanstate *cs) { int rr0; /* Wait for end of break to avoid PROM abort. */ /* XXX - Limit the wait? */ do { rr0 = *cs->cs_reg_csr; ZS_DELAY(); } while (rr0 & ZSRR0_BREAK); #ifdef DDB console_debugger(); #endif }
/* * Handle user request to enter kernel debugger. */ void zs_abort(struct zs_chanstate *cs) { volatile struct zschan *zc = zs_conschan; int rr0; /* Wait for end of break to avoid PROM abort. */ /* XXX - Limit the wait? */ do { rr0 = zc->zc_csr; ZS_DELAY(); } while (rr0 & ZSRR0_BREAK); /* This is always available on the Sun3. */ Debugger(); }
void zs_ap_delay(void) { ZS_DELAY(); }