[OpenBIOS] r323 - openbios-devel/drivers

svn at openbios.org svn at openbios.org
Wed Dec 24 08:12:14 CET 2008


Author: blueswirl
Date: 2008-12-24 08:12:14 +0100 (Wed, 24 Dec 2008)
New Revision: 323

Modified:
   openbios-devel/drivers/obio.c
Log:
Fix serial console broken by r317

Modified: openbios-devel/drivers/obio.c
===================================================================
--- openbios-devel/drivers/obio.c	2008-12-23 20:36:45 UTC (rev 322)
+++ openbios-devel/drivers/obio.c	2008-12-24 07:12:14 UTC (rev 323)
@@ -119,8 +119,8 @@
 
 static volatile unsigned char *kbd_dev, *serial_dev;
 
-#define CTRL(port) serial_dev[(port) * 2 + 0]
-#define DATA(port) serial_dev[(port) * 2 + 2]
+#define CTRL(addr) (*(volatile unsigned char *)(addr))
+#define DATA(addr) (*(volatile unsigned char *)(addr + 2))
 
 /* Conversion routines to/from brg time constants from/to bits
  * per second.
@@ -177,7 +177,7 @@
     DATA(port) = c;
 }
 
-static void uart_init_line(int port, unsigned long baud)
+static void uart_init_line(volatile unsigned char *port, unsigned long baud)
 {
     CTRL(port) = 4; // reg 4
     CTRL(port) = SB1 | X16CLK; // no parity, async, 1 stop bit, 16x
@@ -203,19 +203,17 @@
 
 int uart_init(uint64_t port, unsigned long speed)
 {
-    int line;
-
     serial_dev = map_io(port & ~7ULL, 2 * 4);
     serial_dev += port & 7ULL;
-    line = port & 3ULL;
-    uart_init_line(line, speed);
+    uart_init_line(serial_dev, speed);
 
     return -1;
 }
 
 void serial_putchar(int c)
 {
-    uart_putchar(CONFIG_SERIAL_PORT, (unsigned char) (c & 0xff));
+    uart_putchar((int)(serial_dev + CONFIG_SERIAL_PORT),
+                 (unsigned char) (c & 0xff));
 }
 
 void serial_cls(void)




More information about the OpenBIOS mailing list