summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2014-03-02 23:09:36 +0000
committerimp <imp@FreeBSD.org>2014-03-02 23:09:36 +0000
commit1719e3beff3a830dd8b8ffec78fb6b7812c63a16 (patch)
tree54ddb6f82e558745d8947bbd2637e1e906622759
parentee7a8407e1a8f9666ede2bfd3eaefecff7cc0d90 (diff)
downloadFreeBSD-src-1719e3beff3a830dd8b8ffec78fb6b7812c63a16.zip
FreeBSD-src-1719e3beff3a830dd8b8ffec78fb6b7812c63a16.tar.gz
MRC: r260886
Merge only the uart_dev_at91usart.c part of this revision, since it has nothing to do with the commit log and was included by mistake there. This connects the new grab/ungrab upcalls that were revised in uart to fix mountroot>.
-rw-r--r--sys/arm/at91/uart_dev_at91usart.c39
1 files changed, 23 insertions, 16 deletions
diff --git a/sys/arm/at91/uart_dev_at91usart.c b/sys/arm/at91/uart_dev_at91usart.c
index 43655b6..6ba7736 100644
--- a/sys/arm/at91/uart_dev_at91usart.c
+++ b/sys/arm/at91/uart_dev_at91usart.c
@@ -219,20 +219,6 @@ at91_usart_param(struct uart_bas *bas, int baudrate, int databits,
return (0);
}
-static void
-at91_usart_grab(struct uart_bas *bas)
-{
-
- WR4(bas, USART_IDR, USART_CSR_RXRDY);
-}
-
-static void
-at91_usart_ungrab(struct uart_bas *bas)
-{
-
- WR4(bas, USART_IER, USART_CSR_RXRDY);
-}
-
static struct uart_ops at91_usart_ops = {
.probe = at91_usart_probe,
.init = at91_usart_init,
@@ -240,8 +226,6 @@ static struct uart_ops at91_usart_ops = {
.putc = at91_usart_putc,
.rxready = at91_usart_rxready,
.getc = at91_usart_getc,
- .grab = at91_usart_grab,
- .ungrab = at91_usart_ungrab,
};
static int
@@ -331,6 +315,8 @@ static int at91_usart_bus_param(struct uart_softc *, int, int, int, int);
static int at91_usart_bus_receive(struct uart_softc *);
static int at91_usart_bus_setsig(struct uart_softc *, int);
static int at91_usart_bus_transmit(struct uart_softc *);
+static void at91_usart_bus_grab(struct uart_softc *);
+static void at91_usart_bus_ungrab(struct uart_softc *);
static kobj_method_t at91_usart_methods[] = {
KOBJMETHOD(uart_probe, at91_usart_bus_probe),
@@ -343,6 +329,8 @@ static kobj_method_t at91_usart_methods[] = {
KOBJMETHOD(uart_receive, at91_usart_bus_receive),
KOBJMETHOD(uart_setsig, at91_usart_bus_setsig),
KOBJMETHOD(uart_transmit, at91_usart_bus_transmit),
+ KOBJMETHOD(uart_grab, at91_usart_bus_grab),
+ KOBJMETHOD(uart_ungrab, at91_usart_bus_ungrab),
KOBJMETHOD_END
};
@@ -815,6 +803,25 @@ at91_usart_bus_ioctl(struct uart_softc *sc, int request, intptr_t data)
return (EINVAL);
}
+
+static void
+at91_usart_bus_grab(struct uart_softc *sc)
+{
+
+ uart_lock(sc->sc_hwmtx);
+ WR4(&sc->sc_bas, USART_IDR, USART_CSR_RXRDY);
+ uart_unlock(sc->sc_hwmtx);
+}
+
+static void
+at91_usart_bus_ungrab(struct uart_softc *sc)
+{
+
+ uart_lock(sc->sc_hwmtx);
+ WR4(&sc->sc_bas, USART_IER, USART_CSR_RXRDY);
+ uart_unlock(sc->sc_hwmtx);
+}
+
struct uart_class at91_usart_class = {
"at91_usart",
at91_usart_methods,
OpenPOWER on IntegriCloud