svn commit: r269148 - head/sys/mips/atheros

Adrian Chadd adrian at FreeBSD.org
Sun Jul 27 05:44:43 UTC 2014


Author: adrian
Date: Sun Jul 27 05:44:42 2014
New Revision: 269148
URL: http://svnweb.freebsd.org/changeset/base/269148

Log:
  Commit some sins in the name of "oh god oh god I don't really want to
  be able to claim I know how the UART code works."
  
  * Just return 115200 as the current baud rate. I should cache it in the
    device struct and return that but I'm lazy right now.
  * don't error out on other ioctl settings for now, just silently ignore them.
  * remove some code that was copied from the 8250 driver that isn't needed
    any longer.
  
  Tested:
  
  * AR9331, Carambola-2 board.

Modified:
  head/sys/mips/atheros/uart_dev_ar933x.c

Modified: head/sys/mips/atheros/uart_dev_ar933x.c
==============================================================================
--- head/sys/mips/atheros/uart_dev_ar933x.c	Sat Jul 26 21:33:17 2014	(r269147)
+++ head/sys/mips/atheros/uart_dev_ar933x.c	Sun Jul 27 05:44:42 2014	(r269148)
@@ -428,8 +428,6 @@ ar933x_bus_getsig(struct uart_softc *sc)
 
 	/*
 	 * For now, let's just return that DSR/DCD/CTS is asserted.
-	 *
-	 * XXX TODO: actually verify whether this is correct!
 	 */
 	SIGCHG(1, sig, SER_DSR, SER_DDSR);
 	SIGCHG(1, sig, SER_CTS, SER_DCTS);
@@ -441,80 +439,31 @@ ar933x_bus_getsig(struct uart_softc *sc)
 	return (sig);
 }
 
+/*
+ * XXX TODO: actually implement the rest of this!
+ */
 static int
 ar933x_bus_ioctl(struct uart_softc *sc, int request, intptr_t data)
 {
-#if 0
-	struct uart_bas *bas;
-	int baudrate, divisor, error;
-	uint8_t efr, lcr;
+	int error = 0;
 
-	bas = &sc->sc_bas;
-	error = 0;
-	uart_lock(sc->sc_hwmtx);
+	/* XXX lock */
 	switch (request) {
 	case UART_IOCTL_BREAK:
-		lcr = uart_getreg(bas, REG_LCR);
-		if (data)
-			lcr |= LCR_SBREAK;
-		else
-			lcr &= ~LCR_SBREAK;
-		uart_setreg(bas, REG_LCR, lcr);
-		uart_barrier(bas);
-		break;
 	case UART_IOCTL_IFLOW:
-		lcr = uart_getreg(bas, REG_LCR);
-		uart_barrier(bas);
-		uart_setreg(bas, REG_LCR, 0xbf);
-		uart_barrier(bas);
-		efr = uart_getreg(bas, REG_EFR);
-		if (data)
-			efr |= EFR_RTS;
-		else
-			efr &= ~EFR_RTS;
-		uart_setreg(bas, REG_EFR, efr);
-		uart_barrier(bas);
-		uart_setreg(bas, REG_LCR, lcr);
-		uart_barrier(bas);
-		break;
 	case UART_IOCTL_OFLOW:
-		lcr = uart_getreg(bas, REG_LCR);
-		uart_barrier(bas);
-		uart_setreg(bas, REG_LCR, 0xbf);
-		uart_barrier(bas);
-		efr = uart_getreg(bas, REG_EFR);
-		if (data)
-			efr |= EFR_CTS;
-		else
-			efr &= ~EFR_CTS;
-		uart_setreg(bas, REG_EFR, efr);
-		uart_barrier(bas);
-		uart_setreg(bas, REG_LCR, lcr);
-		uart_barrier(bas);
 		break;
 	case UART_IOCTL_BAUD:
-		lcr = uart_getreg(bas, REG_LCR);
-		uart_setreg(bas, REG_LCR, lcr | LCR_DLAB);
-		uart_barrier(bas);
-		divisor = uart_getreg(bas, REG_DLL) |
-		    (uart_getreg(bas, REG_DLH) << 8);
-		uart_barrier(bas);
-		uart_setreg(bas, REG_LCR, lcr);
-		uart_barrier(bas);
-		baudrate = (divisor > 0) ? bas->rclk / divisor / 16 : 0;
-		if (baudrate > 0)
-			*(int*)data = baudrate;
-		else
-			error = ENXIO;
+		*(int*)data = 115200;
 		break;
 	default:
 		error = EINVAL;
 		break;
 	}
-	uart_unlock(sc->sc_hwmtx);
+
+	/* XXX unlock */
+
 	return (error);
-#endif
-	return (ENXIO);
 }
 
 /*
@@ -581,6 +530,8 @@ ar933x_bus_ipend(struct uart_softc *sc)
 
 	/*
 	 * Only signal TX idle if we're not busy transmitting.
+	 *
+	 * XXX I never get _out_ of txbusy? Debug that!
 	 */
 	if (sc->sc_txbusy) {
 		if (isr & AR933X_UART_INT_TX_EMPTY) {


More information about the svn-src-all mailing list