static inline void set_txint(ChannelState *s) { s->txint = 1; if (!s->rxint_under_svc) { s->txint_under_svc = 1; if (s->chn == chn_a) s->rregs[3] |= 0x10; else s->otherchn->rregs[3] |= 2; s->rregs[2] = 0; slavio_serial_update_irq(s); } }
static inline void clr_txint(ChannelState *s) { s->txint = 0; s->txint_under_svc = 0; if (s->chn == chn_a) s->rregs[3] &= ~0x10; else s->otherchn->rregs[3] &= ~2; if (s->rxint) set_rxint(s); else s->rregs[2] = 6; slavio_serial_update_irq(s); }
static inline void set_txint(ChannelState *s) { s->txint = 1; if (!s->rxint_under_svc) { s->txint_under_svc = 1; if (s->chn == chn_a) { if (s->wregs[W_MINTR] & MINTR_STATUSHI) s->otherchn->rregs[R_IVEC] = IVEC_HITXINTA; else s->otherchn->rregs[R_IVEC] = IVEC_LOTXINTA; } else { s->rregs[R_IVEC] = IVEC_TXINTB; } } if (s->chn == chn_a) s->rregs[R_INTR] |= INTR_TXINTA; else s->otherchn->rregs[R_INTR] |= INTR_TXINTB; slavio_serial_update_irq(s); }
static inline void clr_txint(ChannelState *s) { s->txint = 0; s->txint_under_svc = 0; if (s->chn == chn_a) { if (s->wregs[W_MINTR] & MINTR_STATUSHI) s->otherchn->rregs[R_IVEC] = IVEC_HINOINT; else s->otherchn->rregs[R_IVEC] = IVEC_LONOINT; s->rregs[R_INTR] &= ~INTR_TXINTA; } else { if (s->wregs[W_MINTR] & MINTR_STATUSHI) s->rregs[R_IVEC] = IVEC_HINOINT; else s->rregs[R_IVEC] = IVEC_LONOINT; s->otherchn->rregs[R_INTR] &= ~INTR_TXINTB; } if (s->rxint) set_rxint(s); slavio_serial_update_irq(s); }
static void serial_receive_break(ChannelState *s) { s->rregs[0] |= 0x80; slavio_serial_update_irq(s); }
static void serial_receive_break(ChannelState *s) { s->rregs[R_STATUS] |= STATUS_BRK; slavio_serial_update_irq(s); }