Shuffle code to avoid NetBSD gcc 3.4.6 inlining bug (Rumko)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3924 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
e42c20b41a
commit
80637a6afd
@ -215,7 +215,6 @@ struct SerialState {
|
||||
static void handle_kbd_command(ChannelState *s, int val);
|
||||
static int serial_can_receive(void *opaque);
|
||||
static void serial_receive_byte(ChannelState *s, int ch);
|
||||
static inline void set_txint(ChannelState *s);
|
||||
|
||||
static void clear_queue(void *opaque)
|
||||
{
|
||||
@ -321,28 +320,6 @@ static void slavio_serial_reset(void *opaque)
|
||||
slavio_serial_reset_chn(&s->chn[1]);
|
||||
}
|
||||
|
||||
static inline void clr_rxint(ChannelState *s)
|
||||
{
|
||||
s->rxint = 0;
|
||||
s->rxint_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_RXINTA;
|
||||
} 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_RXINTB;
|
||||
}
|
||||
if (s->txint)
|
||||
set_txint(s);
|
||||
slavio_serial_update_irq(s);
|
||||
}
|
||||
|
||||
static inline void set_rxint(ChannelState *s)
|
||||
{
|
||||
s->rxint = 1;
|
||||
@ -367,6 +344,49 @@ static inline void set_rxint(ChannelState *s)
|
||||
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_rxint(ChannelState *s)
|
||||
{
|
||||
s->rxint = 0;
|
||||
s->rxint_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_RXINTA;
|
||||
} 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_RXINTB;
|
||||
}
|
||||
if (s->txint)
|
||||
set_txint(s);
|
||||
slavio_serial_update_irq(s);
|
||||
}
|
||||
|
||||
static inline void clr_txint(ChannelState *s)
|
||||
{
|
||||
s->txint = 0;
|
||||
@ -389,27 +409,6 @@ static inline void clr_txint(ChannelState *s)
|
||||
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 void slavio_serial_update_parameters(ChannelState *s)
|
||||
{
|
||||
int speed, parity, data_bits, stop_bits;
|
||||
|
Loading…
Reference in New Issue
Block a user