[Qemu-devel] [PATCH 07/17] lm32: juart model

2011-02-17 Thread Michael Walle
This patch adds the JTAG UART model. It is accessed through special control
registers and opcodes. Therefore the translation uses callbacks to this
model.

Signed-off-by: Michael Walle mich...@walle.cc
---
 Makefile.target |1 +
 hw/lm32_juart.c |  150 +++
 hw/lm32_juart.h |   11 
 trace-events|6 ++
 4 files changed, 168 insertions(+), 0 deletions(-)
 create mode 100644 hw/lm32_juart.c
 create mode 100644 hw/lm32_juart.h

diff --git a/Makefile.target b/Makefile.target
index d9b1cc7..11531e2 100644
--- a/Makefile.target
+++ b/Makefile.target
@@ -249,6 +249,7 @@ obj-ppc-y += xilinx_ethlite.o
 
 # LM32 peripherals
 obj-lm32-y += lm32_pic.o
+obj-lm32-y += lm32_juart.o
 
 obj-mips-y = mips_r4k.o mips_jazz.o mips_malta.o mips_mipssim.o
 obj-mips-y += mips_addr.o mips_timer.o mips_int.o
diff --git a/hw/lm32_juart.c b/hw/lm32_juart.c
new file mode 100644
index 000..fddcf7e
--- /dev/null
+++ b/hw/lm32_juart.c
@@ -0,0 +1,150 @@
+/*
+ *  LatticeMico32 JTAG UART model.
+ *
+ *  Copyright (c) 2010 Michael Walle mich...@walle.cc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see http://www.gnu.org/licenses/.
+ */
+
+#include hw.h
+#include sysbus.h
+#include trace.h
+#include qemu-char.h
+
+#include lm32_juart.h
+
+enum {
+LM32_JUART_MIN_SAVE_VERSION = 0,
+LM32_JUART_CURRENT_SAVE_VERSION = 0,
+LM32_JUART_MAX_SAVE_VERSION = 0,
+};
+
+enum {
+JTX_FULL = (18),
+};
+
+enum {
+JRX_FULL = (18),
+};
+
+struct LM32JuartState {
+SysBusDevice busdev;
+CharDriverState *chr;
+
+uint32_t jtx;
+uint32_t jrx;
+};
+typedef struct LM32JuartState LM32JuartState;
+
+uint32_t lm32_juart_get_jtx(DeviceState *d)
+{
+LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
+
+trace_lm32_juart_get_jtx(s-jtx);
+return s-jtx;
+}
+
+uint32_t lm32_juart_get_jrx(DeviceState *d)
+{
+LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
+
+trace_lm32_juart_get_jrx(s-jrx);
+return s-jrx;
+}
+
+void lm32_juart_set_jtx(DeviceState *d, uint32_t jtx)
+{
+LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
+unsigned char ch = jtx  0xff;
+
+trace_lm32_juart_set_jtx(s-jtx);
+
+s-jtx = jtx;
+if (s-chr) {
+qemu_chr_write(s-chr, ch, 1);
+}
+}
+
+void lm32_juart_set_jrx(DeviceState *d, uint32_t jtx)
+{
+LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
+
+trace_lm32_juart_set_jrx(s-jrx);
+s-jrx = ~JRX_FULL;
+}
+
+static void juart_rx(void *opaque, const uint8_t *buf, int size)
+{
+LM32JuartState *s = opaque;
+
+s-jrx = *buf | JRX_FULL;
+}
+
+static int juart_can_rx(void *opaque)
+{
+LM32JuartState *s = opaque;
+
+return !(s-jrx  JRX_FULL);
+}
+
+static void juart_event(void *opaque, int event)
+{
+}
+
+static void juart_reset(DeviceState *d)
+{
+LM32JuartState *s = container_of(d, LM32JuartState, busdev.qdev);
+
+s-jtx = 0;
+s-jrx = 0;
+}
+
+static int lm32_juart_init(SysBusDevice *dev)
+{
+LM32JuartState *s = FROM_SYSBUS(typeof(*s), dev);
+
+s-chr = qdev_init_chardev(dev-qdev);
+if (s-chr) {
+qemu_chr_add_handlers(s-chr, juart_can_rx, juart_rx, juart_event, s);
+}
+
+return 0;
+}
+
+static const VMStateDescription vmstate_lm32_juart = {
+.name = lm32-juart,
+.version_id = 1,
+.minimum_version_id = 1,
+.minimum_version_id_old = 1,
+.fields  = (VMStateField[]) {
+VMSTATE_UINT32(jtx, LM32JuartState),
+VMSTATE_UINT32(jrx, LM32JuartState),
+VMSTATE_END_OF_LIST()
+}
+};
+
+static SysBusDeviceInfo lm32_juart_info = {
+.init = lm32_juart_init,
+.qdev.name  = lm32-juart,
+.qdev.size  = sizeof(LM32JuartState),
+.qdev.vmsd  = vmstate_lm32_juart,
+.qdev.reset = juart_reset,
+};
+
+static void lm32_juart_register(void)
+{
+sysbus_register_withprop(lm32_juart_info);
+}
+
+device_init(lm32_juart_register)
diff --git a/hw/lm32_juart.h b/hw/lm32_juart.h
new file mode 100644
index 000..67fc586
--- /dev/null
+++ b/hw/lm32_juart.h
@@ -0,0 +1,11 @@
+#ifndef QEMU_HW_LM32_JUART_H
+#define QEMU_HW_LM32_JUART_H
+
+#include qemu-common.h
+
+uint32_t lm32_juart_get_jtx(DeviceState *d);
+uint32_t lm32_juart_get_jrx(DeviceState *d);
+void lm32_juart_set_jtx(DeviceState *d, uint32_t jtx);
+void lm32_juart_set_jrx(DeviceState *d, uint32_t jrx);
+

Re: [Qemu-devel] [PATCH 07/17] lm32: juart model

2011-02-11 Thread Blue Swirl
On Fri, Feb 11, 2011 at 1:12 AM, Michael Walle mich...@walle.cc wrote:
 This patch adds the JTAG UART model. It is accessed through special control
 registers and opcodes. Therefore the translation uses callbacks to this
 model.

 Signed-off-by: Michael Walle mich...@walle.cc
 ---
  hw/lm32_juart.c |  151 
 +++
  hw/lm32_juart.h |   10 
  trace-events    |    6 ++
  3 files changed, 167 insertions(+), 0 deletions(-)
  create mode 100644 hw/lm32_juart.c
  create mode 100644 hw/lm32_juart.h

 diff --git a/hw/lm32_juart.c b/hw/lm32_juart.c
 new file mode 100644
 index 000..fdeeefd
 --- /dev/null
 +++ b/hw/lm32_juart.c
 @@ -0,0 +1,151 @@
 +/*
 + *  LatticeMico32 JTAG UART model.
 + *
 + *  Copyright (c) 2010 Michael Walle mich...@walle.cc
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation; either
 + * version 2 of the License, or (at your option) any later version.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, see 
 http://www.gnu.org/licenses/.
 + */
 +
 +#include hw.h
 +#include sysbus.h
 +#include trace.h
 +#include qemu-char.h
 +
 +#include lm32_juart.h
 +
 +enum {
 +    LM32_JUART_MIN_SAVE_VERSION = 0,
 +    LM32_JUART_CURRENT_SAVE_VERSION = 0,
 +    LM32_JUART_MAX_SAVE_VERSION = 0,
 +};
 +
 +enum {
 +    JTX_FULL = (18),
 +};
 +
 +enum {
 +    JRX_FULL = (18),
 +};
 +
 +struct LM32JuartState {
 +    SysBusDevice busdev;
 +    CharDriverState *chr;
 +
 +    uint32_t jtx;
 +    uint32_t jrx;
 +};
 +typedef struct LM32JuartState LM32JuartState;
 +
 +uint32_t lm32_juart_get_jtx(CPUState *env)
 +{
 +    LM32JuartState *s = env-juart_env;

Please change the function signatures so that CPUState is not passed
but instead DeviceState.

 +
 +    trace_lm32_juart_get_jtx(s-jtx);
 +    return s-jtx;
 +}
 +
 +uint32_t lm32_juart_get_jrx(CPUState *env)
 +{
 +    LM32JuartState *s = env-juart_env;
 +
 +    trace_lm32_juart_get_jrx(s-jrx);
 +    return s-jrx;
 +}
 +
 +void lm32_juart_set_jtx(CPUState *env, uint32_t jtx)
 +{
 +    LM32JuartState *s = env-juart_env;
 +    unsigned char ch = jtx  0xff;
 +
 +    trace_lm32_juart_set_jtx(s-jtx);
 +
 +    s-jtx = jtx;
 +    if (s-chr) {
 +        qemu_chr_write(s-chr, ch, 1);
 +    }
 +}
 +
 +void lm32_juart_set_jrx(CPUState *env, uint32_t jtx)
 +{
 +    LM32JuartState *s = env-juart_env;
 +
 +    trace_lm32_juart_set_jrx(s-jrx);
 +    env-juart_env-jrx = ~JRX_FULL;
 +}
 +
 +static void juart_rx(void *opaque, const uint8_t *buf, int size)
 +{
 +    LM32JuartState *s = opaque;
 +
 +    s-jrx = *buf | JRX_FULL;
 +}
 +
 +static int juart_can_rx(void *opaque)
 +{
 +    LM32JuartState *s = opaque;
 +
 +    return !(s-jrx  JRX_FULL);
 +}
 +
 +static void juart_event(void *opaque, int event)
 +{
 +}
 +
 +static void juart_reset(void *opaque)
 +{
 +    LM32JuartState *s = opaque;
 +
 +    s-jtx = 0;
 +    s-jrx = 0;
 +}
 +
 +static int lm32_juart_init(SysBusDevice *dev)
 +{
 +    LM32JuartState *s = FROM_SYSBUS(typeof(*s), dev);
 +
 +    s-chr = qdev_init_chardev(dev-qdev);
 +    if (s-chr) {
 +        qemu_chr_add_handlers(s-chr, juart_can_rx, juart_rx, juart_event, 
 s);
 +    }
 +
 +    qemu_register_reset(juart_reset, s);

qdev reset field...

 +
 +    return 0;
 +}
 +
 +static const VMStateDescription vmstate_lm32_juart = {
 +    .name = lm32-juart,
 +    .version_id = 1,
 +    .minimum_version_id = 1,
 +    .minimum_version_id_old = 1,
 +    .fields      = (VMStateField[]) {
 +        VMSTATE_UINT32(jtx, LM32JuartState),
 +        VMSTATE_UINT32(jrx, LM32JuartState),
 +        VMSTATE_END_OF_LIST()
 +    }
 +};
 +
 +static SysBusDeviceInfo lm32_juart_info = {
 +    .init = lm32_juart_init,
 +    .qdev.name = lm32-juart,
 +    .qdev.size = sizeof(LM32JuartState),
 +    .qdev.vmsd  = vmstate_lm32_juart,

... here.

 +};
 +
 +static void lm32_juart_register(void)
 +{
 +    sysbus_register_withprop(lm32_juart_info);
 +}
 +
 +device_init(lm32_juart_register)
 diff --git a/hw/lm32_juart.h b/hw/lm32_juart.h
 new file mode 100644
 index 000..5dc0338
 --- /dev/null
 +++ b/hw/lm32_juart.h
 @@ -0,0 +1,10 @@
 +#ifndef __LM32_JUART
 +#define __LM32_JUART

Double underscores shouldn't be used (CODING_STYLE), please use
something like QEMU_HW_LM32_JUART_H.



[Qemu-devel] [PATCH 07/17] lm32: juart model

2011-02-10 Thread Michael Walle
This patch adds the JTAG UART model. It is accessed through special control
registers and opcodes. Therefore the translation uses callbacks to this
model.

Signed-off-by: Michael Walle mich...@walle.cc
---
 hw/lm32_juart.c |  151 +++
 hw/lm32_juart.h |   10 
 trace-events|6 ++
 3 files changed, 167 insertions(+), 0 deletions(-)
 create mode 100644 hw/lm32_juart.c
 create mode 100644 hw/lm32_juart.h

diff --git a/hw/lm32_juart.c b/hw/lm32_juart.c
new file mode 100644
index 000..fdeeefd
--- /dev/null
+++ b/hw/lm32_juart.c
@@ -0,0 +1,151 @@
+/*
+ *  LatticeMico32 JTAG UART model.
+ *
+ *  Copyright (c) 2010 Michael Walle mich...@walle.cc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see http://www.gnu.org/licenses/.
+ */
+
+#include hw.h
+#include sysbus.h
+#include trace.h
+#include qemu-char.h
+
+#include lm32_juart.h
+
+enum {
+LM32_JUART_MIN_SAVE_VERSION = 0,
+LM32_JUART_CURRENT_SAVE_VERSION = 0,
+LM32_JUART_MAX_SAVE_VERSION = 0,
+};
+
+enum {
+JTX_FULL = (18),
+};
+
+enum {
+JRX_FULL = (18),
+};
+
+struct LM32JuartState {
+SysBusDevice busdev;
+CharDriverState *chr;
+
+uint32_t jtx;
+uint32_t jrx;
+};
+typedef struct LM32JuartState LM32JuartState;
+
+uint32_t lm32_juart_get_jtx(CPUState *env)
+{
+LM32JuartState *s = env-juart_env;
+
+trace_lm32_juart_get_jtx(s-jtx);
+return s-jtx;
+}
+
+uint32_t lm32_juart_get_jrx(CPUState *env)
+{
+LM32JuartState *s = env-juart_env;
+
+trace_lm32_juart_get_jrx(s-jrx);
+return s-jrx;
+}
+
+void lm32_juart_set_jtx(CPUState *env, uint32_t jtx)
+{
+LM32JuartState *s = env-juart_env;
+unsigned char ch = jtx  0xff;
+
+trace_lm32_juart_set_jtx(s-jtx);
+
+s-jtx = jtx;
+if (s-chr) {
+qemu_chr_write(s-chr, ch, 1);
+}
+}
+
+void lm32_juart_set_jrx(CPUState *env, uint32_t jtx)
+{
+LM32JuartState *s = env-juart_env;
+
+trace_lm32_juart_set_jrx(s-jrx);
+env-juart_env-jrx = ~JRX_FULL;
+}
+
+static void juart_rx(void *opaque, const uint8_t *buf, int size)
+{
+LM32JuartState *s = opaque;
+
+s-jrx = *buf | JRX_FULL;
+}
+
+static int juart_can_rx(void *opaque)
+{
+LM32JuartState *s = opaque;
+
+return !(s-jrx  JRX_FULL);
+}
+
+static void juart_event(void *opaque, int event)
+{
+}
+
+static void juart_reset(void *opaque)
+{
+LM32JuartState *s = opaque;
+
+s-jtx = 0;
+s-jrx = 0;
+}
+
+static int lm32_juart_init(SysBusDevice *dev)
+{
+LM32JuartState *s = FROM_SYSBUS(typeof(*s), dev);
+
+s-chr = qdev_init_chardev(dev-qdev);
+if (s-chr) {
+qemu_chr_add_handlers(s-chr, juart_can_rx, juart_rx, juart_event, s);
+}
+
+qemu_register_reset(juart_reset, s);
+
+return 0;
+}
+
+static const VMStateDescription vmstate_lm32_juart = {
+.name = lm32-juart,
+.version_id = 1,
+.minimum_version_id = 1,
+.minimum_version_id_old = 1,
+.fields  = (VMStateField[]) {
+VMSTATE_UINT32(jtx, LM32JuartState),
+VMSTATE_UINT32(jrx, LM32JuartState),
+VMSTATE_END_OF_LIST()
+}
+};
+
+static SysBusDeviceInfo lm32_juart_info = {
+.init = lm32_juart_init,
+.qdev.name = lm32-juart,
+.qdev.size = sizeof(LM32JuartState),
+.qdev.vmsd  = vmstate_lm32_juart,
+};
+
+static void lm32_juart_register(void)
+{
+sysbus_register_withprop(lm32_juart_info);
+}
+
+device_init(lm32_juart_register)
diff --git a/hw/lm32_juart.h b/hw/lm32_juart.h
new file mode 100644
index 000..5dc0338
--- /dev/null
+++ b/hw/lm32_juart.h
@@ -0,0 +1,10 @@
+#ifndef __LM32_JUART
+#define __LM32_JUART
+
+#include qemu-common.h
+
+uint32_t lm32_juart_get_jtx(CPUState *env);
+uint32_t lm32_juart_get_jrx(CPUState *env);
+void lm32_juart_set_jtx(CPUState *env, uint32_t jtx);
+void lm32_juart_set_jrx(CPUState *env, uint32_t jrx);
+#endif
diff --git a/trace-events b/trace-events
index 557375e..966099f 100644
--- a/trace-events
+++ b/trace-events
@@ -263,3 +263,9 @@ disable lm32_pic_set_im(uint32_t im) im 0x%08x
 disable lm32_pic_set_ip(uint32_t ip) ip 0x%08x
 disable lm32_pic_get_im(uint32_t im) im 0x%08x
 disable lm32_pic_get_ip(uint32_t ip) ip 0x%08x
+
+# hw/lm32_juart.c
+disable lm32_juart_get_jtx(uint32_t value) jtx 0x%08x
+disable lm32_juart_set_jtx(uint32_t value) jtx 0x%08x
+disable lm32_juart_get_jrx(uint32_t value) jrx 0x%08x
+disable lm32_juart_set_jrx(uint32_t value) 

[Qemu-devel] [PATCH 07/17] lm32: juart model

2011-01-30 Thread Michael Walle
This patch adds the JTAG UART model. It is accessed through special control
registers and opcodes. Therefore the translation uses callbacks to this
model.

Signed-off-by: Michael Walle mich...@walle.cc
---
 hw/lm32_juart.c |  151 +++
 hw/lm32_juart.h |   10 
 trace-events|6 ++
 3 files changed, 167 insertions(+), 0 deletions(-)
 create mode 100644 hw/lm32_juart.c
 create mode 100644 hw/lm32_juart.h

diff --git a/hw/lm32_juart.c b/hw/lm32_juart.c
new file mode 100644
index 000..fdeeefd
--- /dev/null
+++ b/hw/lm32_juart.c
@@ -0,0 +1,151 @@
+/*
+ *  LatticeMico32 JTAG UART model.
+ *
+ *  Copyright (c) 2010 Michael Walle mich...@walle.cc
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see http://www.gnu.org/licenses/.
+ */
+
+#include hw.h
+#include sysbus.h
+#include trace.h
+#include qemu-char.h
+
+#include lm32_juart.h
+
+enum {
+LM32_JUART_MIN_SAVE_VERSION = 0,
+LM32_JUART_CURRENT_SAVE_VERSION = 0,
+LM32_JUART_MAX_SAVE_VERSION = 0,
+};
+
+enum {
+JTX_FULL = (18),
+};
+
+enum {
+JRX_FULL = (18),
+};
+
+struct LM32JuartState {
+SysBusDevice busdev;
+CharDriverState *chr;
+
+uint32_t jtx;
+uint32_t jrx;
+};
+typedef struct LM32JuartState LM32JuartState;
+
+uint32_t lm32_juart_get_jtx(CPUState *env)
+{
+LM32JuartState *s = env-juart_env;
+
+trace_lm32_juart_get_jtx(s-jtx);
+return s-jtx;
+}
+
+uint32_t lm32_juart_get_jrx(CPUState *env)
+{
+LM32JuartState *s = env-juart_env;
+
+trace_lm32_juart_get_jrx(s-jrx);
+return s-jrx;
+}
+
+void lm32_juart_set_jtx(CPUState *env, uint32_t jtx)
+{
+LM32JuartState *s = env-juart_env;
+unsigned char ch = jtx  0xff;
+
+trace_lm32_juart_set_jtx(s-jtx);
+
+s-jtx = jtx;
+if (s-chr) {
+qemu_chr_write(s-chr, ch, 1);
+}
+}
+
+void lm32_juart_set_jrx(CPUState *env, uint32_t jtx)
+{
+LM32JuartState *s = env-juart_env;
+
+trace_lm32_juart_set_jrx(s-jrx);
+env-juart_env-jrx = ~JRX_FULL;
+}
+
+static void juart_rx(void *opaque, const uint8_t *buf, int size)
+{
+LM32JuartState *s = opaque;
+
+s-jrx = *buf | JRX_FULL;
+}
+
+static int juart_can_rx(void *opaque)
+{
+LM32JuartState *s = opaque;
+
+return !(s-jrx  JRX_FULL);
+}
+
+static void juart_event(void *opaque, int event)
+{
+}
+
+static void juart_reset(void *opaque)
+{
+LM32JuartState *s = opaque;
+
+s-jtx = 0;
+s-jrx = 0;
+}
+
+static int lm32_juart_init(SysBusDevice *dev)
+{
+LM32JuartState *s = FROM_SYSBUS(typeof(*s), dev);
+
+s-chr = qdev_init_chardev(dev-qdev);
+if (s-chr) {
+qemu_chr_add_handlers(s-chr, juart_can_rx, juart_rx, juart_event, s);
+}
+
+qemu_register_reset(juart_reset, s);
+
+return 0;
+}
+
+static const VMStateDescription vmstate_lm32_juart = {
+.name = lm32-juart,
+.version_id = 1,
+.minimum_version_id = 1,
+.minimum_version_id_old = 1,
+.fields  = (VMStateField[]) {
+VMSTATE_UINT32(jtx, LM32JuartState),
+VMSTATE_UINT32(jrx, LM32JuartState),
+VMSTATE_END_OF_LIST()
+}
+};
+
+static SysBusDeviceInfo lm32_juart_info = {
+.init = lm32_juart_init,
+.qdev.name = lm32-juart,
+.qdev.size = sizeof(LM32JuartState),
+.qdev.vmsd  = vmstate_lm32_juart,
+};
+
+static void lm32_juart_register(void)
+{
+sysbus_register_withprop(lm32_juart_info);
+}
+
+device_init(lm32_juart_register)
diff --git a/hw/lm32_juart.h b/hw/lm32_juart.h
new file mode 100644
index 000..5dc0338
--- /dev/null
+++ b/hw/lm32_juart.h
@@ -0,0 +1,10 @@
+#ifndef __LM32_JUART
+#define __LM32_JUART
+
+#include qemu-common.h
+
+uint32_t lm32_juart_get_jtx(CPUState *env);
+uint32_t lm32_juart_get_jrx(CPUState *env);
+void lm32_juart_set_jtx(CPUState *env, uint32_t jtx);
+void lm32_juart_set_jrx(CPUState *env, uint32_t jrx);
+#endif
diff --git a/trace-events b/trace-events
index 377bc25..c82588f 100644
--- a/trace-events
+++ b/trace-events
@@ -222,3 +222,9 @@ disable lm32_pic_set_im(uint32_t im) im=%08x
 disable lm32_pic_set_ip(uint32_t ip) ip=%08x
 disable lm32_pic_get_im(uint32_t im) im=%08x
 disable lm32_pic_get_ip(uint32_t ip) ip=%08x
+
+# hw/lm32_juart.c
+disable lm32_juart_get_jtx(uint32_t value) value=%08x
+disable lm32_juart_set_jtx(uint32_t value) value=%08x
+disable lm32_juart_get_jrx(uint32_t value) value=%08x
+disable lm32_juart_set_jrx(uint32_t value) value=%08x