[PATCH] uart: make *_UART_NR platform independent

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/baseband-devel@lists.osmocom.org/.

Wolfram Sang wolfram at the-dreams.de
Fri May 6 21:57:01 UTC 2011


* convert *_UART_NR to enum uart_type in uart.h
* make uart-functions use uart_type consistently
  (was uint8_t and int)
* map uart_type to correct uart for mtk
* (remove forgotten calypso-include for mtk while we are here)

Binaries have been successfully tested with a Sciphone G2 and a Motorola C155.

Signed-off-by: Wolfram Sang <wolfram at the-dreams.de>
---

And I just wanted to get rid of some build warnings ;)

 src/target/firmware/board/mediatek/uart.c  |   31 ++++++++++++---------------
 src/target/firmware/calypso/uart.c         |   26 +++++++++++-----------
 src/target/firmware/include/comm/sercomm.h |    4 ---
 src/target/firmware/include/console.h      |    3 --
 src/target/firmware/include/uart.h         |   21 +++++++++++-------
 5 files changed, 40 insertions(+), 45 deletions(-)

diff --git a/src/target/firmware/board/mediatek/uart.c b/src/target/firmware/board/mediatek/uart.c
index ff82245..6a87473 100644
--- a/src/target/firmware/board/mediatek/uart.c
+++ b/src/target/firmware/board/mediatek/uart.c
@@ -36,8 +36,6 @@
 
 #include <comm/sercomm.h>
 
-#include <calypso/irq.h>
-
 /* MT622x */
 #if 0
 #define BASE_ADDR_UART1	0x80130000
@@ -48,8 +46,7 @@
 /* MT 6235 */
 #define BASE_ADDR_UART1	0x81030000
 
-//TODO make UART2 and 3 work
-#define UART_REG(n,m)	(BASE_ADDR_UART1 + (m))
+#define UART_REG(n,m)	(BASE_ADDR_UART1 + (!n) * 0x10000 + (m))
 
 #define LCR7BIT		0x80
 #define LCRBFBIT	0x40
@@ -112,7 +109,7 @@ enum iir_bits {
 
 
 /* enable or disable the divisor latch for access to DLL, DLH */
-static void uart_set_lcr7bit(int uart, int on)
+static void uart_set_lcr7bit(enum uart_type uart, int on)
 {
 	uint8_t reg;
 
@@ -125,7 +122,7 @@ static void uart_set_lcr7bit(int uart, int on)
 }
 
 static uint8_t old_lcr;
-static void uart_set_lcr_bf(int uart, int on)
+static void uart_set_lcr_bf(enum uart_type uart, int on)
 {
 	if (on) {
 		old_lcr = readb(UART_REG(uart, LCR));
@@ -136,7 +133,7 @@ static void uart_set_lcr_bf(int uart, int on)
 }
 
 /* Enable or disable the TCR_TLR latch bit in MCR[6] */
-static void uart_set_mcr6bit(int uart, int on)
+static void uart_set_mcr6bit(enum uart_type uart, int on)
 {
 	uint8_t mcr;
 	/* we assume EFR[4] is always set to 1 */
@@ -148,7 +145,7 @@ static void uart_set_mcr6bit(int uart, int on)
 	writeb(mcr, UART_REG(uart, MCR));
 }
 
-static void uart_reg_write(int uart, enum uart_reg reg, uint8_t val)
+static void uart_reg_write(enum uart_type uart, enum uart_reg reg, uint8_t val)
 {
 	if (reg & LCRBFBIT)
 		uart_set_lcr_bf(uart, 1);
@@ -168,7 +165,7 @@ static void uart_reg_write(int uart, enum uart_reg reg, uint8_t val)
 }
 
 /* read from a UART register, applying any required latch bits */
-static uint8_t uart_reg_read(int uart, enum uart_reg reg)
+static uint8_t uart_reg_read(enum uart_type uart, enum uart_reg reg)
 {
 	uint8_t ret;
 
@@ -271,7 +268,7 @@ static void uart_irq_handler_sercomm(__unused int irqnr)
 	}
 }
 
-void uart_init(uint8_t uart, __unused uint8_t interrupts)
+void uart_init(enum uart_type uart, __unused uint8_t interrupts)
 {
 	/* no interrupts, only polling so far */
 
@@ -302,7 +299,7 @@ void uart_init(uint8_t uart, __unused uint8_t interrupts)
 	uart_set_lcr7bit(uart, 0);
 }
 
-void uart_poll(uint8_t uart) {
+void uart_poll(enum uart_type uart) {
 	if(uart == CONS_UART_NR) {
 		uart_irq_handler_cons(0);
 	} else {
@@ -310,7 +307,7 @@ void uart_poll(uint8_t uart) {
 	}
 }
 
-void uart_irq_enable(uint8_t uart, enum uart_irq irq, int on)
+void uart_irq_enable(enum uart_type uart, enum uart_irq irq, int on)
 {
 	uint8_t ier = uart_reg_read(uart, IER);
 	uint8_t mask = 0;
@@ -333,7 +330,7 @@ void uart_irq_enable(uint8_t uart, enum uart_irq irq, int on)
 }
 
 
-void uart_putchar_wait(uint8_t uart, int c)
+void uart_putchar_wait(enum uart_type uart, int c)
 {
 	/* wait while TX FIFO indicates full */
 	while (~readb(UART_REG(uart, LSR)) & 0x20) { }
@@ -342,7 +339,7 @@ void uart_putchar_wait(uint8_t uart, int c)
 	writeb(c, UART_REG(uart, RBR));
 }
 
-int uart_putchar_nb(uint8_t uart, int c)
+int uart_putchar_nb(enum uart_type uart, int c)
 {
 	/* if TX FIFO indicates full, abort */
 	if (~readb(UART_REG(uart, LSR)) & 0x20)
@@ -352,7 +349,7 @@ int uart_putchar_nb(uint8_t uart, int c)
 	return 1;
 }
 
-int uart_getchar_nb(uint8_t uart, uint8_t *ch)
+int uart_getchar_nb(enum uart_type uart, uint8_t *ch)
 {
 	uint8_t lsr;
 
@@ -379,7 +376,7 @@ int uart_getchar_nb(uint8_t uart, uint8_t *ch)
 	return 1;
 }
 
-int uart_tx_busy(uint8_t uart)
+int uart_tx_busy(enum uart_type uart)
 {
 	/* Check THRE bit (LSR[5]) to see if FIFO is full */
 	if (~readb(UART_REG(uart, LSR)) & 0x20)
@@ -409,7 +406,7 @@ static const uint16_t divider[] = {
 	[UART_921600]	= 7,	/* would need UART_REG(HIGHSPEED) = 1 */
 };
 
-int uart_baudrate(uint8_t uart, enum uart_baudrate bdrt)
+int uart_baudrate(enum uart_type uart, enum uart_baudrate bdrt)
 {
 	uint16_t div;
 
diff --git a/src/target/firmware/calypso/uart.c b/src/target/firmware/calypso/uart.c
index d3ede4d..0355ee2 100644
--- a/src/target/firmware/calypso/uart.c
+++ b/src/target/firmware/calypso/uart.c
@@ -112,7 +112,7 @@ enum iir_bits {
 #define UART_REG_UIR	0xffff6000
 
 /* enable or disable the divisor latch for access to DLL, DLH */
-static void uart_set_lcr7bit(int uart, int on)
+static void uart_set_lcr7bit(enum uart_type uart, int on)
 {
 	uint8_t reg;
 
@@ -125,7 +125,7 @@ static void uart_set_lcr7bit(int uart, int on)
 }
 
 static uint8_t old_lcr;
-static void uart_set_lcr_bf(int uart, int on)
+static void uart_set_lcr_bf(enum uart_type uart, int on)
 {
 	if (on) {
 		old_lcr = readb(UART_REG(uart, LCR));
@@ -136,7 +136,7 @@ static void uart_set_lcr_bf(int uart, int on)
 }
 
 /* Enable or disable the TCR_TLR latch bit in MCR[6] */
-static void uart_set_mcr6bit(int uart, int on)
+static void uart_set_mcr6bit(enum uart_type uart, int on)
 {
 	uint8_t mcr;
 	/* we assume EFR[4] is always set to 1 */
@@ -148,7 +148,7 @@ static void uart_set_mcr6bit(int uart, int on)
 	writeb(mcr, UART_REG(uart, MCR));
 }
 
-static void uart_reg_write(int uart, enum uart_reg reg, uint8_t val)
+static void uart_reg_write(enum uart_type uart, enum uart_reg reg, uint8_t val)
 {
 	if (reg & LCRBFBIT)
 		uart_set_lcr_bf(uart, 1);
@@ -168,7 +168,7 @@ static void uart_reg_write(int uart, enum uart_reg reg, uint8_t val)
 }
 
 /* read from a UART register, applying any required latch bits */
-static uint8_t uart_reg_read(int uart, enum uart_reg reg)
+static uint8_t uart_reg_read(enum uart_type uart, enum uart_reg reg)
 {
 	uint8_t ret;
 
@@ -276,7 +276,7 @@ static const uint8_t uart2irq[] = {
 	[1]	= IRQ_UART_MODEM,
 };
 
-void uart_init(uint8_t uart, uint8_t interrupts)
+void uart_init(enum uart_type uart, uint8_t interrupts)
 {
 	uint8_t irq = uart2irq[uart];
 
@@ -330,7 +330,7 @@ void uart_init(uint8_t uart, uint8_t interrupts)
 	uart_set_lcr7bit(uart, 0);
 }
 
-void uart_poll(uint8_t uart) {
+void uart_poll(enum uart_type uart) {
 	if(uart == CONS_UART_NR) {
 		uart_irq_handler_cons(0);
 	} else {
@@ -338,7 +338,7 @@ void uart_poll(uint8_t uart) {
 	}
 }
 
-void uart_irq_enable(uint8_t uart, enum uart_irq irq, int on)
+void uart_irq_enable(enum uart_type uart, enum uart_irq irq, int on)
 {
 	uint8_t ier = uart_reg_read(uart, IER);
 	uint8_t mask = 0;
@@ -361,7 +361,7 @@ void uart_irq_enable(uint8_t uart, enum uart_irq irq, int on)
 }
 
 
-void uart_putchar_wait(uint8_t uart, int c)
+void uart_putchar_wait(enum uart_type uart, int c)
 {
 	/* wait while TX FIFO indicates full */
 	while (readb(UART_REG(uart, SSR)) & 0x01) { }
@@ -370,7 +370,7 @@ void uart_putchar_wait(uint8_t uart, int c)
 	writeb(c, UART_REG(uart, THR));
 }
 
-int uart_putchar_nb(uint8_t uart, int c)
+int uart_putchar_nb(enum uart_type uart, int c)
 {
 	/* if TX FIFO indicates full, abort */
 	if (readb(UART_REG(uart, SSR)) & 0x01)
@@ -380,7 +380,7 @@ int uart_putchar_nb(uint8_t uart, int c)
 	return 1;
 }
 
-int uart_getchar_nb(uint8_t uart, uint8_t *ch)
+int uart_getchar_nb(enum uart_type uart, uint8_t *ch)
 {
 	uint8_t lsr;
 
@@ -407,7 +407,7 @@ int uart_getchar_nb(uint8_t uart, uint8_t *ch)
 	return 1;
 }
 
-int uart_tx_busy(uint8_t uart)
+int uart_tx_busy(enum uart_type uart)
 {
 	if (readb(UART_REG(uart, SSR)) & 0x01)
 		return 1;
@@ -423,7 +423,7 @@ static const uint16_t divider[] = {
 	[UART_921600]	= 1,	/*  812,500! (-3% would be 893,952) */
 };
 
-int uart_baudrate(uint8_t uart, enum uart_baudrate bdrt)
+int uart_baudrate(enum uart_type uart, enum uart_baudrate bdrt)
 {
 	uint16_t div;
 
diff --git a/src/target/firmware/include/comm/sercomm.h b/src/target/firmware/include/comm/sercomm.h
index 54256b5..4c23b31 100644
--- a/src/target/firmware/include/comm/sercomm.h
+++ b/src/target/firmware/include/comm/sercomm.h
@@ -1,12 +1,8 @@
 #ifndef _SERCOMM_H
 #define _SERCOMM_H
 
-/* SERCOMM layer on UART1 (modem UART) */
-
 #include <osmocom/core/msgb.h>
 
-#define SERCOMM_UART_NR	1
-
 #define HDLC_FLAG	0x7E
 #define HDLC_ESCAPE	0x7D
 
diff --git a/src/target/firmware/include/console.h b/src/target/firmware/include/console.h
index 7146e99..b5a83f5 100644
--- a/src/target/firmware/include/console.h
+++ b/src/target/firmware/include/console.h
@@ -11,9 +11,6 @@ int cons_putchar(char c);
 int cons_rb_flush(void);
 void cons_init(void);
 
-/* We want the console on UART 0 (IRDA UART) */
-#define CONS_UART_NR	0
-
 /* Size of the static ring-buffer that we keep for console print messages */
 #define CONS_RB_SIZE	4096
 
diff --git a/src/target/firmware/include/uart.h b/src/target/firmware/include/uart.h
index 81d7a15..eedb006 100644
--- a/src/target/firmware/include/uart.h
+++ b/src/target/firmware/include/uart.h
@@ -3,6 +3,11 @@
 
 #include <stdint.h>
 
+enum uart_type {
+	CONS_UART_NR,
+	SERCOMM_UART_NR,
+};
+
 enum uart_baudrate {
 	UART_38400,
 	UART_57600,
@@ -13,20 +18,20 @@ enum uart_baudrate {
 	UART_921600,
 };
 
-void uart_init(uint8_t uart, uint8_t interrupts);
-void uart_putchar_wait(uint8_t uart, int c);
-int uart_putchar_nb(uint8_t uart, int c);
-int uart_getchar_nb(uint8_t uart, uint8_t *ch);
-int uart_tx_busy(uint8_t uart);
-int uart_baudrate(uint8_t uart, enum uart_baudrate bdrt);
+void uart_init(enum uart_type uart, uint8_t interrupts);
+void uart_putchar_wait(enum uart_type uart, int c);
+int uart_putchar_nb(enum uart_type uart, int c);
+int uart_getchar_nb(enum uart_type uart, uint8_t *ch);
+int uart_tx_busy(enum uart_type uart);
+int uart_baudrate(enum uart_type uart, enum uart_baudrate bdrt);
 
 enum uart_irq {
 	UART_IRQ_TX_EMPTY,
 	UART_IRQ_RX_CHAR,
 };
 
-void uart_irq_enable(uint8_t uart, enum uart_irq irq, int on);
+void uart_irq_enable(enum uart_type uart, enum uart_irq irq, int on);
 
-void uart_poll(uint8_t uart);
+void uart_poll(enum uart_type uart);
 
 #endif /* _UART_H */
-- 
1.7.2.5





More information about the baseband-devel mailing list