Commit 336af956e8 for qemu.org
commit 336af956e8fd56b4db9e8f431ca3e1b13f846f0a
Author: Bernhard Beschow <shentey@gmail.com>
Date: Thu Mar 5 23:09:06 2026 +0100
hw/char/serial: Add constants for Line Control Register
Substitute some magic numbers by named constants for slightly improved
readability.
Signed-off-by: Bernhard Beschow <shentey@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-ID: <20260305220911.131508-10-shentey@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
diff --git a/hw/char/serial.c b/hw/char/serial.c
index f73de1ae4f..485b98f03f 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -39,6 +39,11 @@
#include "hw/core/qdev-properties-system.h"
#define UART_LCR_DLAB 0x80 /* Divisor latch access bit */
+#define UART_LCR_SB 0x40 /* Set break */
+#define UART_LCR_EPS 0x10 /* Even parity select */
+#define UART_LCR_PEN 0x08 /* Parity enable */
+#define UART_LCR_NSTB 0x04 /* Number of stop bits */
+#define UART_LCR_WLS 0x03 /* Word length select */
#define UART_IER_MSI 0x08 /* Enable Modem status interrupt */
#define UART_IER_RLSI 0x04 /* Enable receiver line status interrupt */
@@ -153,23 +158,23 @@ static void serial_update_parameters(SerialState *s)
/* Start bit. */
frame_size = 1;
- if (s->lcr & 0x08) {
+ if (s->lcr & UART_LCR_PEN) {
/* Parity bit. */
frame_size++;
- if (s->lcr & 0x10)
+ if (s->lcr & UART_LCR_EPS)
parity = 'E';
else
parity = 'O';
} else {
parity = 'N';
}
- if (s->lcr & 0x04) {
+ if (s->lcr & UART_LCR_NSTB) {
stop_bits = 2;
} else {
stop_bits = 1;
}
- data_bits = (s->lcr & 0x03) + 5;
+ data_bits = (s->lcr & UART_LCR_WLS) + 5;
frame_size += data_bits + stop_bits;
/* Zero divisor should give about 3500 baud */
speed = (s->divider == 0) ? 3500 : (float) s->baudbase / s->divider;
@@ -430,7 +435,7 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val,
int break_enable;
s->lcr = val;
serial_update_parameters(s);
- break_enable = (val >> 6) & 1;
+ break_enable = !!(val & UART_LCR_SB);
if (break_enable != s->last_break_enable) {
s->last_break_enable = break_enable;
qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_BREAK,
@@ -676,7 +681,7 @@ static int serial_post_load(void *opaque, int version_id)
}
}
- s->last_break_enable = (s->lcr >> 6) & 1;
+ s->last_break_enable = !!(s->lcr & UART_LCR_SB);
/* Initialize fcr via setter to perform essential side-effects */
serial_write_fcr(s, s->fcr_vmstate);
serial_update_parameters(s);