aboutsummaryrefslogtreecommitdiff
path: root/hw/escc.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/escc.c')
-rw-r--r--hw/escc.c69
1 files changed, 19 insertions, 50 deletions
diff --git a/hw/escc.c b/hw/escc.c
index bea5873a02..76d94f30fe 100644
--- a/hw/escc.c
+++ b/hw/escc.c
@@ -27,15 +27,7 @@
#include "escc.h"
#include "qemu-char.h"
#include "console.h"
-
-/* debug serial */
-//#define DEBUG_SERIAL
-
-/* debug keyboard */
-//#define DEBUG_KBD
-
-/* debug mouse */
-//#define DEBUG_MOUSE
+#include "trace.h"
/*
* Chipset docs:
@@ -69,25 +61,6 @@
* 2010-May-23 Artyom Tarasenko: Reworked IUS logic
*/
-#ifdef DEBUG_SERIAL
-#define SER_DPRINTF(fmt, ...) \
- do { printf("SER: " fmt , ## __VA_ARGS__); } while (0)
-#else
-#define SER_DPRINTF(fmt, ...)
-#endif
-#ifdef DEBUG_KBD
-#define KBD_DPRINTF(fmt, ...) \
- do { printf("KBD: " fmt , ## __VA_ARGS__); } while (0)
-#else
-#define KBD_DPRINTF(fmt, ...)
-#endif
-#ifdef DEBUG_MOUSE
-#define MS_DPRINTF(fmt, ...) \
- do { printf("MSC: " fmt , ## __VA_ARGS__); } while (0)
-#else
-#define MS_DPRINTF(fmt, ...)
-#endif
-
typedef enum {
chn_a, chn_b,
} ChnID;
@@ -108,18 +81,19 @@ typedef struct {
#define SERIAL_REGS 16
typedef struct ChannelState {
qemu_irq irq;
- uint32_t reg;
uint32_t rxint, txint, rxint_under_svc, txint_under_svc;
- ChnID chn; // this channel, A (base+4) or B (base+0)
- ChnType type;
struct ChannelState *otherchn;
- uint8_t rx, tx, wregs[SERIAL_REGS], rregs[SERIAL_REGS];
+ uint32_t reg;
+ uint8_t wregs[SERIAL_REGS], rregs[SERIAL_REGS];
SERIOQueue queue;
CharDriverState *chr;
int e0_mode, led_mode, caps_lock_mode, num_lock_mode;
int disabled;
int clock;
uint32_t vmstate_dummy;
+ ChnID chn; // this channel, A (base+4) or B (base+0)
+ ChnType type;
+ uint8_t rx, tx;
} ChannelState;
struct SerialState {
@@ -249,7 +223,7 @@ static void put_queue(void *opaque, int b)
ChannelState *s = opaque;
SERIOQueue *q = &s->queue;
- SER_DPRINTF("channel %c put: 0x%02x\n", CHN_C(s), b);
+ trace_escc_put_queue(CHN_C(s), b);
if (q->count >= SERIO_QUEUE_SIZE)
return;
q->data[q->wptr] = b;
@@ -273,7 +247,7 @@ static uint32_t get_queue(void *opaque)
q->rptr = 0;
q->count--;
}
- SER_DPRINTF("channel %c get 0x%02x\n", CHN_C(s), val);
+ trace_escc_get_queue(CHN_C(s), val);
if (q->count > 0)
serial_receive_byte(s, 0);
return val;
@@ -300,7 +274,7 @@ static void escc_update_irq(ChannelState *s)
irq = escc_update_irq_chn(s);
irq |= escc_update_irq_chn(s->otherchn);
- SER_DPRINTF("IRQ = %d\n", irq);
+ trace_escc_update_irq(irq);
qemu_set_irq(s->irq, irq);
}
@@ -485,8 +459,7 @@ static void escc_update_parameters(ChannelState *s)
ssp.parity = parity;
ssp.data_bits = data_bits;
ssp.stop_bits = stop_bits;
- SER_DPRINTF("channel %c: speed=%d parity=%c data=%d stop=%d\n", CHN_C(s),
- speed, parity, data_bits, stop_bits);
+ trace_escc_update_parameters(CHN_C(s), speed, parity, data_bits, stop_bits);
qemu_chr_ioctl(s->chr, CHR_IOCTL_SERIAL_SET_PARAMS, &ssp);
}
@@ -504,8 +477,7 @@ static void escc_mem_write(void *opaque, target_phys_addr_t addr,
s = &serial->chn[channel];
switch (saddr) {
case SERIAL_CTRL:
- SER_DPRINTF("Write channel %c, reg[%d] = %2.2x\n", CHN_C(s), s->reg,
- val & 0xff);
+ trace_escc_mem_writeb_ctrl(CHN_C(s), s->reg, val & 0xff);
newreg = 0;
switch (s->reg) {
case W_CMD:
@@ -575,7 +547,7 @@ static void escc_mem_write(void *opaque, target_phys_addr_t addr,
s->reg = 0;
break;
case SERIAL_DATA:
- SER_DPRINTF("Write channel %c, ch %d\n", CHN_C(s), val);
+ trace_escc_mem_writeb_data(CHN_C(s), val);
s->tx = val;
if (s->wregs[W_TXCTRL2] & TXCTRL2_TXEN) { // tx enabled
if (s->chr)
@@ -607,8 +579,7 @@ static uint64_t escc_mem_read(void *opaque, target_phys_addr_t addr,
s = &serial->chn[channel];
switch (saddr) {
case SERIAL_CTRL:
- SER_DPRINTF("Read channel %c, reg[%d] = %2.2x\n", CHN_C(s), s->reg,
- s->rregs[s->reg]);
+ trace_escc_mem_readb_ctrl(CHN_C(s), s->reg, s->rregs[s->reg]);
ret = s->rregs[s->reg];
s->reg = 0;
return ret;
@@ -619,7 +590,7 @@ static uint64_t escc_mem_read(void *opaque, target_phys_addr_t addr,
ret = get_queue(s);
else
ret = s->rx;
- SER_DPRINTF("Read channel %c, ch %d\n", CHN_C(s), ret);
+ trace_escc_mem_readb_data(CHN_C(s), ret);
if (s->chr)
qemu_chr_accept_input(s->chr);
return ret;
@@ -655,7 +626,7 @@ static int serial_can_receive(void *opaque)
static void serial_receive_byte(ChannelState *s, int ch)
{
- SER_DPRINTF("channel %c put ch %d\n", CHN_C(s), ch);
+ trace_escc_serial_receive_byte(CHN_C(s), ch);
s->rregs[R_STATUS] |= STATUS_RXAV;
s->rx = ch;
set_rxint(s);
@@ -767,8 +738,7 @@ static void sunkbd_event(void *opaque, int ch)
ChannelState *s = opaque;
int release = ch & 0x80;
- KBD_DPRINTF("Untranslated keycode %2.2x (%s)\n", ch, release? "release" :
- "press");
+ trace_escc_sunkbd_event_in(ch);
switch (ch) {
case 58: // Caps lock press
s->caps_lock_mode ^= 1;
@@ -802,13 +772,13 @@ static void sunkbd_event(void *opaque, int ch)
} else {
ch = keycodes[ch & 0x7f];
}
- KBD_DPRINTF("Translated keycode %2.2x\n", ch);
+ trace_escc_sunkbd_event_out(ch);
put_queue(s, ch | release);
}
static void handle_kbd_command(ChannelState *s, int val)
{
- KBD_DPRINTF("Command %d\n", val);
+ trace_escc_kbd_command(val);
if (s->led_mode) { // Ignore led byte
s->led_mode = 0;
return;
@@ -840,8 +810,7 @@ static void sunmouse_event(void *opaque,
ChannelState *s = opaque;
int ch;
- MS_DPRINTF("dx=%d dy=%d buttons=%01x\n", dx, dy, buttons_state);
-
+ trace_escc_sunmouse_event(dx, dy, buttons_state);
ch = 0x80 | 0x7; /* protocol start byte, no buttons pressed */
if (buttons_state & MOUSE_EVENT_LBUTTON)