aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/uart/uart_dev_z8530.c
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2014-01-19 19:39:13 +0000
committerWarner Losh <imp@FreeBSD.org>2014-01-19 19:39:13 +0000
commitd76a1ef4e1adf1729f970e3787bd89276e2ee9db (patch)
tree90f500f8dae436ffff7d1b262113646a73f06e4a /sys/dev/uart/uart_dev_z8530.c
parent294ef64a179a325470350e10e150130bd3dfb895 (diff)
Notes
Diffstat (limited to 'sys/dev/uart/uart_dev_z8530.c')
-rw-r--r--sys/dev/uart/uart_dev_z8530.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/sys/dev/uart/uart_dev_z8530.c b/sys/dev/uart/uart_dev_z8530.c
index f948b26fa2fa..5cc24a80bd62 100644
--- a/sys/dev/uart/uart_dev_z8530.c
+++ b/sys/dev/uart/uart_dev_z8530.c
@@ -281,6 +281,8 @@ static int z8530_bus_probe(struct uart_softc *);
static int z8530_bus_receive(struct uart_softc *);
static int z8530_bus_setsig(struct uart_softc *, int);
static int z8530_bus_transmit(struct uart_softc *);
+static void z8530_bus_grab(struct uart_softc *);
+static void z8530_bus_ungrab(struct uart_softc *);
static kobj_method_t z8530_methods[] = {
KOBJMETHOD(uart_attach, z8530_bus_attach),
@@ -294,6 +296,8 @@ static kobj_method_t z8530_methods[] = {
KOBJMETHOD(uart_receive, z8530_bus_receive),
KOBJMETHOD(uart_setsig, z8530_bus_setsig),
KOBJMETHOD(uart_transmit, z8530_bus_transmit),
+ KOBJMETHOD(uart_grab, z8530_bus_grab),
+ KOBJMETHOD(uart_ungrab, z8530_bus_ungrab),
{ 0, 0 }
};
@@ -621,3 +625,27 @@ z8530_bus_transmit(struct uart_softc *sc)
uart_unlock(sc->sc_hwmtx);
return (0);
}
+
+static void
+z8530_bus_grab(struct uart_softc *sc)
+{
+ struct uart_bas *bas;
+
+ bas = &sc->sc_bas;
+ uart_lock(sc->sc_hwmtx);
+ uart_setmreg(bas, WR_IDT, IDT_XIE | IDT_TIE);
+ uart_barrier(bas);
+ uart_unlock(sc->sc_hwmtx);
+}
+
+static void
+z8530_bus_ungrab(struct uart_softc *sc)
+{
+ struct uart_bas *bas;
+
+ bas = &sc->sc_bas;
+ uart_lock(sc->sc_hwmtx);
+ uart_setmreg(bas, WR_IDT, IDT_XIE | IDT_TIE | IDT_RIA);
+ uart_barrier(bas);
+ uart_unlock(sc->sc_hwmtx);
+}