PERFORCE change 120296 for review

Marcel Moolenaar marcel at FreeBSD.org
Thu May 24 04:26:24 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=120296

Change 120296 by marcel at marcel_macbsd on 2007/05/24 04:25:21

	Port to -CURRENT.

Affected files ...

.. //depot/projects/e500/sys/dev/uart/uart.h#2 edit
.. //depot/projects/e500/sys/dev/uart/uart_dev_quicc.c#2 edit

Differences ...

==== //depot/projects/e500/sys/dev/uart/uart.h#2 (text+ko) ====

@@ -65,6 +65,7 @@
 struct uart_class;
 
 extern struct uart_class uart_ns8250_class __attribute__((weak));
+extern struct uart_class uart_quicc_class __attribute__((weak));
 extern struct uart_class uart_sab82532_class __attribute__((weak));
 extern struct uart_class uart_z8530_class __attribute__((weak));
 

==== //depot/projects/e500/sys/dev/uart/uart_dev_quicc.c#2 (text+ko) ====

@@ -146,7 +146,7 @@
 static void quicc_init(struct uart_bas *bas, int, int, int, int);
 static void quicc_term(struct uart_bas *bas);
 static void quicc_putc(struct uart_bas *bas, int);
-static int quicc_poll(struct uart_bas *bas);
+static int quicc_rxready(struct uart_bas *bas);
 static int quicc_getc(struct uart_bas *bas, struct mtx *);
 
 static struct uart_ops uart_quicc_ops = {
@@ -154,7 +154,7 @@
 	.init = quicc_init,
 	.term = quicc_term,
 	.putc = quicc_putc,
-	.poll = quicc_poll,
+	.rxready = quicc_rxready,
 	.getc = quicc_getc,
 };
 
@@ -195,30 +195,35 @@
 static int
 quicc_poll(struct uart_bas *bas)
 {
-	volatile char *buf;
-	int c;
-	uint16_t sc, rb;
+	uint16_t rb;
 
 	rb = quicc_read2(bas, QUICC_PRAM_SCC_RBASE(bas->chan - 1));
-	if ((sc = quicc_read2(bas, rb)) & 0x8000)
-		return (-1);
-
-	buf = (void *)quicc_read4(bas, rb + 4);
-	c = *buf;
-	quicc_write2(bas, rb, sc | 0x8000);
-	return (c);
+	return ((quicc_read2(bas, rb) & 0x8000) ? 0 : 1);
 }
 
 static int
 quicc_getc(struct uart_bas *bas, struct mtx *hwmtx)
 {
+	volatile char *buf;
 	int c;
+	uint16_t rb, sc;
 
-	do {
+	uart_lock(hwmtx);
+
+	rb = quicc_read2(bas, QUICC_PRAM_SCC_RBASE(bas->chan - 1));
+
+	while ((sc = quicc_read2(bas, rb)) & 0x8000) {
+		uart_unlock(hwmtx);
+		DELAY(4);
 		uart_lock(hwmtx);
-		c = quicc_poll(bas);
-		uart_unlock(hwmtx);
-	} while (c == -1);
+	}
+
+	buf = (void *)quicc_read4(bas, rb + 4);
+	c = *buf;
+	quicc_write(bas, rb, sc | 0x8000);
+
+	uart_unlock(hwmtx);
+
 	return (c);
 }
 


More information about the p4-projects mailing list