aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>2008-01-17 21:07:04 +0000
committerblueswir1 <blueswir1@c046a42c-6fe2-441c-8c8c-71466251a162>2008-01-17 21:07:04 +0000
commit80637a6afd873791ba1766ba7b29b02aca7fd90c (patch)
tree09b92a02bac19e70541883344703aa915daa16d4 /hw
parente42c20b41a698ceb51f90afb25f1062b333b1913 (diff)
downloadqemu-80637a6afd873791ba1766ba7b29b02aca7fd90c.zip
qemu-80637a6afd873791ba1766ba7b29b02aca7fd90c.tar.gz
qemu-80637a6afd873791ba1766ba7b29b02aca7fd90c.tar.bz2
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
Diffstat (limited to 'hw')
-rw-r--r--hw/slavio_serial.c87
1 files changed, 43 insertions, 44 deletions
diff --git a/hw/slavio_serial.c b/hw/slavio_serial.c
index 0791911..bd572b0 100644
--- a/hw/slavio_serial.c
+++ b/hw/slavio_serial.c
@@ -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;