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.

Reply via email to