For the moment, this macro shrinks repeating definitions of structures by reducing boilerplate. Later, we will enhance the macro when we add the uart flags.
Signed-off-by: Ralf Ramsauer <[email protected]> --- inmates/lib/arm-common/include/uart.h | 15 ++++++++++++++- inmates/lib/arm-common/uart-8250-8.c | 12 ++++-------- inmates/lib/arm-common/uart-8250.c | 12 ++++-------- inmates/lib/arm-common/uart-hscif.c | 12 ++++-------- inmates/lib/arm-common/uart-imx.c | 12 ++++-------- inmates/lib/arm-common/uart-jailhouse.c | 12 ++++-------- inmates/lib/arm-common/uart-mvebu.c | 12 ++++-------- inmates/lib/arm-common/uart-pl011.c | 12 ++++-------- inmates/lib/arm-common/uart-scifa.c | 12 ++++-------- inmates/lib/arm-common/uart-xuartps.c | 12 ++++-------- 10 files changed, 50 insertions(+), 73 deletions(-) diff --git a/inmates/lib/arm-common/include/uart.h b/inmates/lib/arm-common/include/uart.h index abe211e2..bf0b6dba 100644 --- a/inmates/lib/arm-common/include/uart.h +++ b/inmates/lib/arm-common/include/uart.h @@ -1,7 +1,7 @@ /* * Jailhouse, a Linux-based partitioning hypervisor * - * Copyright (c) OTH Regensburg, 2016 + * Copyright (c) OTH Regensburg, 2016-2018 * * Authors: * Ralf Ramsauer <[email protected]> @@ -37,6 +37,8 @@ */ struct uart_chip { + const char *name; + void *base; void *clock_reg; @@ -49,6 +51,17 @@ struct uart_chip { void (*write)(struct uart_chip*, char c); }; +#define UART_OPS_NAME(__name) \ + uart_##__name##_ops + +#define DEFINE_UART(__name, __description) \ + struct uart_chip UART_OPS_NAME(__name) = { \ + .name = __description, \ + .init = uart_##__name##_init, \ + .is_busy = uart_##__name##_is_busy, \ + .write = uart_##__name##_write, \ + } + extern struct uart_chip uart_jailhouse_ops; extern struct uart_chip uart_8250_ops; extern struct uart_chip uart_8250_8_ops; diff --git a/inmates/lib/arm-common/uart-8250-8.c b/inmates/lib/arm-common/uart-8250-8.c index 2d13d369..a109848d 100644 --- a/inmates/lib/arm-common/uart-8250-8.c +++ b/inmates/lib/arm-common/uart-8250-8.c @@ -50,7 +50,7 @@ #define UART_LSR 0x5 #define UART_LSR_THRE 0x20 -static void uart_init(struct uart_chip *chip) +static void uart_8250_8_init(struct uart_chip *chip) { if (chip->clock_reg) mmio_write32(chip->clock_reg, @@ -65,18 +65,14 @@ static void uart_init(struct uart_chip *chip) } } -static bool uart_is_busy(struct uart_chip *chip) +static bool uart_8250_8_is_busy(struct uart_chip *chip) { return !(mmio_read8(chip->base + UART_LSR) & UART_LSR_THRE); } -static void uart_write(struct uart_chip *chip, char c) +static void uart_8250_8_write(struct uart_chip *chip, char c) { mmio_write8(chip->base + UART_TX, c); } -struct uart_chip uart_8250_8_ops = { - .init = uart_init, - .is_busy = uart_is_busy, - .write = uart_write, -}; +DEFINE_UART(8250_8, "8250-8"); diff --git a/inmates/lib/arm-common/uart-8250.c b/inmates/lib/arm-common/uart-8250.c index 4cfaed2f..a0d97281 100644 --- a/inmates/lib/arm-common/uart-8250.c +++ b/inmates/lib/arm-common/uart-8250.c @@ -50,7 +50,7 @@ #define UART_LSR 0x14 #define UART_LSR_THRE 0x20 -static void uart_init(struct uart_chip *chip) +static void uart_8250_init(struct uart_chip *chip) { if (chip->clock_reg) mmio_write32(chip->clock_reg, @@ -65,18 +65,14 @@ static void uart_init(struct uart_chip *chip) } } -static bool uart_is_busy(struct uart_chip *chip) +static bool uart_8250_is_busy(struct uart_chip *chip) { return !(mmio_read32(chip->base + UART_LSR) & UART_LSR_THRE); } -static void uart_write(struct uart_chip *chip, char c) +static void uart_8250_write(struct uart_chip *chip, char c) { mmio_write32(chip->base + UART_TX, c); } -struct uart_chip uart_8250_ops = { - .init = uart_init, - .is_busy = uart_is_busy, - .write = uart_write, -}; +DEFINE_UART(8250, "8250"); diff --git a/inmates/lib/arm-common/uart-hscif.c b/inmates/lib/arm-common/uart-hscif.c index 4f73a0a2..c3c9aadb 100644 --- a/inmates/lib/arm-common/uart-hscif.c +++ b/inmates/lib/arm-common/uart-hscif.c @@ -53,7 +53,7 @@ #define HSCIF_FIFO_SIZE 128 -static void uart_init(struct uart_chip *chip) +static void uart_hscif_init(struct uart_chip *chip) { u16 hsscr; @@ -67,12 +67,12 @@ static void uart_init(struct uart_chip *chip) } } -static bool uart_is_busy(struct uart_chip *chip) +static bool uart_hscif_is_busy(struct uart_chip *chip) { return !(mmio_read16(chip->base + HSCIF_HSFSR) & HSCIF_HSFSR_TDFE); } -static void uart_write(struct uart_chip *chip, char c) +static void uart_hscif_write(struct uart_chip *chip, char c) { mmio_write8(chip->base + HSCIF_HSFTDR, c); mmio_write16(chip->base + HSCIF_HSFSR, @@ -80,8 +80,4 @@ static void uart_write(struct uart_chip *chip, char c) ~(HSCIF_HSFSR_TDFE | HSCIF_HSFSR_TEND)); } -struct uart_chip uart_hscif_ops = { - .init = uart_init, - .is_busy = uart_is_busy, - .write = uart_write, -}; +DEFINE_UART(hscif, "HSCIF"); diff --git a/inmates/lib/arm-common/uart-imx.c b/inmates/lib/arm-common/uart-imx.c index 830a9cd2..88db0813 100644 --- a/inmates/lib/arm-common/uart-imx.c +++ b/inmates/lib/arm-common/uart-imx.c @@ -41,23 +41,19 @@ #define UTXD 0x40 #define UTS_TXEMPTY (1 << 6) -static void uart_init(struct uart_chip *chip) +static void uart_imx_init(struct uart_chip *chip) { /* Initialization currently done by Linux. */ } -static bool uart_is_busy(struct uart_chip *chip) +static bool uart_imx_is_busy(struct uart_chip *chip) { return !(mmio_read32(chip->base + UTS) & UTS_TXEMPTY); } -static void uart_write(struct uart_chip *chip, char c) +static void uart_imx_write(struct uart_chip *chip, char c) { mmio_write32(chip->base + UTXD, c); } -struct uart_chip uart_imx_ops = { - .init = uart_init, - .is_busy = uart_is_busy, - .write = uart_write, -}; +DEFINE_UART(imx, "IMX"); diff --git a/inmates/lib/arm-common/uart-jailhouse.c b/inmates/lib/arm-common/uart-jailhouse.c index 28d12284..096ae85b 100644 --- a/inmates/lib/arm-common/uart-jailhouse.c +++ b/inmates/lib/arm-common/uart-jailhouse.c @@ -39,22 +39,18 @@ #include <inmate.h> #include <uart.h> -static void jailhouse_init(struct uart_chip *chip) +static void uart_jailhouse_init(struct uart_chip *chip) { } -static bool jailhouse_is_busy(struct uart_chip *chip) +static bool uart_jailhouse_is_busy(struct uart_chip *chip) { return false; } -static void jailhouse_write(struct uart_chip *chip, char c) +static void uart_jailhouse_write(struct uart_chip *chip, char c) { jailhouse_call_arg1(JAILHOUSE_HC_DEBUG_CONSOLE_PUTC, c); } -struct uart_chip uart_jailhouse_ops = { - .init = jailhouse_init, - .is_busy = jailhouse_is_busy, - .write = jailhouse_write, -}; +DEFINE_UART(jailhouse, "JAILHOUSE"); diff --git a/inmates/lib/arm-common/uart-mvebu.c b/inmates/lib/arm-common/uart-mvebu.c index c762f7f0..c40b42eb 100644 --- a/inmates/lib/arm-common/uart-mvebu.c +++ b/inmates/lib/arm-common/uart-mvebu.c @@ -43,22 +43,18 @@ #define UART_STAT 0xc #define UART_STAT_TX_FULL (1 << 11) -static void uart_init(struct uart_chip *chip) +static void uart_mvebu_init(struct uart_chip *chip) { } -static bool uart_is_busy(struct uart_chip *chip) +static bool uart_mvebu_is_busy(struct uart_chip *chip) { return !!(mmio_read32(chip->base + UART_STAT) & UART_STAT_TX_FULL); } -static void uart_write(struct uart_chip *chip, char c) +static void uart_mvebu_write(struct uart_chip *chip, char c) { mmio_write32(chip->base + UART_TSH, c); } -struct uart_chip uart_mvebu_ops = { - .init = uart_init, - .is_busy = uart_is_busy, - .write = uart_write, -}; +DEFINE_UART(mvebu, "MVEBU"); diff --git a/inmates/lib/arm-common/uart-pl011.c b/inmates/lib/arm-common/uart-pl011.c index 12cb2e52..3bbf0f94 100644 --- a/inmates/lib/arm-common/uart-pl011.c +++ b/inmates/lib/arm-common/uart-pl011.c @@ -58,7 +58,7 @@ #define UARTLCR_H_WLEN (3 << 5) -static void uart_init(struct uart_chip *chip) +static void uart_pl011_init(struct uart_chip *chip) { #ifdef CONFIG_MACH_VEXPRESS /* 115200 8N1 */ @@ -76,20 +76,16 @@ static void uart_init(struct uart_chip *chip) #endif } -static bool uart_is_busy(struct uart_chip *chip) +static bool uart_pl011_is_busy(struct uart_chip *chip) { /* FIFO full or busy */ return (mmio_read32(chip->base + UARTFR) & (UARTFR_TXFF | UARTFR_BUSY)) != 0; } -static void uart_write(struct uart_chip *chip, char c) +static void uart_pl011_write(struct uart_chip *chip, char c) { mmio_write32(chip->base + UARTDR, c); } -struct uart_chip uart_pl011_ops = { - .init = uart_init, - .is_busy = uart_is_busy, - .write = uart_write, -}; +DEFINE_UART(pl011, "PL011"); diff --git a/inmates/lib/arm-common/uart-scifa.c b/inmates/lib/arm-common/uart-scifa.c index 92357d37..9d7939c4 100644 --- a/inmates/lib/arm-common/uart-scifa.c +++ b/inmates/lib/arm-common/uart-scifa.c @@ -54,7 +54,7 @@ #define SCIFA_FIFO_SIZE 64 #define SCIFA_TTRG_32BYTES 0 -static void uart_init(struct uart_chip *chip) +static void uart_scifa_init(struct uart_chip *chip) { u16 scascr; @@ -68,12 +68,12 @@ static void uart_init(struct uart_chip *chip) } } -static bool uart_is_busy(struct uart_chip *chip) +static bool uart_scifa_is_busy(struct uart_chip *chip) { return !(mmio_read16(chip->base + SCIFA_SCASSR) & SCIFA_SCASSR_TDFE); } -static void uart_write(struct uart_chip *chip, char c) +static void uart_scifa_write(struct uart_chip *chip, char c) { mmio_write8(chip->base + SCIFA_SCAFTDR, c); mmio_write16(chip->base + SCIFA_SCASSR, @@ -81,8 +81,4 @@ static void uart_write(struct uart_chip *chip, char c) ~(SCIFA_SCASSR_TDFE | SCIFA_SCASSR_TEND)); } -struct uart_chip uart_scifa_ops = { - .init = uart_init, - .is_busy = uart_is_busy, - .write = uart_write, -}; +DEFINE_UART(scifa, "SCIFA"); diff --git a/inmates/lib/arm-common/uart-xuartps.c b/inmates/lib/arm-common/uart-xuartps.c index 6b04e491..92de9ddd 100644 --- a/inmates/lib/arm-common/uart-xuartps.c +++ b/inmates/lib/arm-common/uart-xuartps.c @@ -43,22 +43,18 @@ #define UART_SR_TXEMPTY 0x8 #define UART_FIFO 0x30 -static void uart_init(struct uart_chip *chip) +static void uart_xuartps_init(struct uart_chip *chip) { } -static bool uart_is_busy(struct uart_chip *chip) +static bool uart_xuartps_is_busy(struct uart_chip *chip) { return !(mmio_read32(chip->base + UART_SR) & UART_SR_TXEMPTY); } -static void uart_write(struct uart_chip *chip, char c) +static void uart_xuartps_write(struct uart_chip *chip, char c) { mmio_write32(chip->base + UART_FIFO, c); } -struct uart_chip uart_xuartps_ops = { - .init = uart_init, - .is_busy = uart_is_busy, - .write = uart_write, -}; +DEFINE_UART(xuartps, "XUARTPS"); -- 2.17.0 -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
