Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/evbarm/dev evbarm/plcom(4): Sync some recent change...
details: https://anonhg.NetBSD.org/src/rev/5c80980d92b5
branches: trunk
changeset: 374221:5c80980d92b5
user: riastradh <riastradh%NetBSD.org@localhost>
date: Tue Apr 11 12:56:07 2023 +0000
description:
evbarm/plcom(4): Sync some recent changes from com(4).
- Nix quirky `integrate' macro.
- Omit needless spltty in plcomstart.
- Comment on lock order.
- Update confusing comment about hangup delay.
- Add include guards.
diffstat:
sys/arch/evbarm/dev/plcom.c | 43 ++++++++++++++++++++---------------------
sys/arch/evbarm/dev/plcomreg.h | 6 ++++-
sys/arch/evbarm/dev/plcomvar.h | 6 ++++-
3 files changed, 31 insertions(+), 24 deletions(-)
diffs (173 lines):
diff -r 342f4a356fcb -r 5c80980d92b5 sys/arch/evbarm/dev/plcom.c
--- a/sys/arch/evbarm/dev/plcom.c Tue Apr 11 12:55:59 2023 +0000
+++ b/sys/arch/evbarm/dev/plcom.c Tue Apr 11 12:56:07 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: plcom.c,v 1.67 2023/01/24 06:56:40 mlelstv Exp $ */
+/* $NetBSD: plcom.c,v 1.68 2023/04/11 12:56:07 riastradh Exp $ */
/*-
* Copyright (c) 2001 ARM Ltd
@@ -91,10 +91,15 @@
* COM driver for the Prime Cell PL010 and PL011 UARTs. Both are is similar to
* the 16C550, but have a completely different programmer's model.
* Derived from the NS16550AF com driver.
+ *
+ * Lock order:
+ * tty_lock (IPL_VM)
+ * -> sc->sc_lock (IPL_HIGH)
+ * -> timecounter_lock (IPL_HIGH)
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: plcom.c,v 1.67 2023/01/24 06:56:40 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: plcom.c,v 1.68 2023/04/11 12:56:07 riastradh Exp $");
#include "opt_plcom.h"
#include "opt_kgdb.h"
@@ -181,12 +186,11 @@ void plcomcnputc (dev_t, int);
void plcomcnpollc (dev_t, int);
void plcomcnhalt (dev_t);
-#define integrate static inline
void plcomsoft (void *);
-integrate void plcom_rxsoft (struct plcom_softc *, struct tty *);
-integrate void plcom_txsoft (struct plcom_softc *, struct tty *);
-integrate void plcom_stsoft (struct plcom_softc *, struct tty *);
-integrate void plcom_schedrx (struct plcom_softc *);
+static inline void plcom_rxsoft (struct plcom_softc *, struct tty *);
+static inline void plcom_txsoft (struct plcom_softc *, struct tty *);
+static inline void plcom_stsoft (struct plcom_softc *, struct tty *);
+static inline void plcom_schedrx (struct plcom_softc *);
void plcomdiag (void *);
bool plcom_intstatus(struct plcom_instance *, u_int *);
@@ -745,9 +749,9 @@ plcom_shutdown(struct plcom_softc *sc)
mutex_spin_exit(&timecounter_lock);
/*
- * Hang up if necessary. Wait a bit, so the other side has time to
- * notice even if we immediately open the port again.
- * Avoid tsleeping above splhigh().
+ * Hang up if necessary. Record when we hung up, so if we
+ * immediately open the port again, we will wait a bit until
+ * the other side has had time to notice that we hung up.
*/
if (ISSET(tp->t_cflag, HUPCL)) {
plcom_modem(sc, 0);
@@ -1249,7 +1253,7 @@ plcomioctl(dev_t dev, u_long cmd, void *
return error;
}
-integrate void
+static inline void
plcom_schedrx(struct plcom_softc *sc)
{
@@ -1765,19 +1769,17 @@ plcomstart(struct tty *tp)
struct plcom_softc *sc =
device_lookup_private(&plcom_cd, PLCOMUNIT(tp->t_dev));
struct plcom_instance *pi = &sc->sc_pi;
- int s;
if (PLCOM_ISALIVE(sc) == 0)
return;
- s = spltty();
if (ISSET(tp->t_state, TS_BUSY | TS_TIMEOUT | TS_TTSTOP))
- goto out;
+ return;
if (sc->sc_tx_stopped)
- goto out;
+ return;
if (!ttypull(tp))
- goto out;
+ return;
/* Grab the first contiguous region of buffer space. */
{
@@ -1825,9 +1827,6 @@ plcomstart(struct tty *tp)
sc->sc_tba += n;
}
mutex_spin_exit(&sc->sc_lock);
-out:
- splx(s);
- return;
}
/*
@@ -1870,7 +1869,7 @@ plcomdiag(void *arg)
floods, floods == 1 ? "" : "s");
}
-integrate void
+static inline void
plcom_rxsoft(struct plcom_softc *sc, struct tty *tp)
{
int (*rint) (int, struct tty *) = tp->t_linesw->l_rint;
@@ -1971,7 +1970,7 @@ plcom_rxsoft(struct plcom_softc *sc, str
}
}
-integrate void
+static inline void
plcom_txsoft(struct plcom_softc *sc, struct tty *tp)
{
@@ -1983,7 +1982,7 @@ plcom_txsoft(struct plcom_softc *sc, str
(*tp->t_linesw->l_start)(tp);
}
-integrate void
+static inline void
plcom_stsoft(struct plcom_softc *sc, struct tty *tp)
{
u_char msr, delta;
diff -r 342f4a356fcb -r 5c80980d92b5 sys/arch/evbarm/dev/plcomreg.h
--- a/sys/arch/evbarm/dev/plcomreg.h Tue Apr 11 12:55:59 2023 +0000
+++ b/sys/arch/evbarm/dev/plcomreg.h Tue Apr 11 12:56:07 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: plcomreg.h,v 1.7 2023/01/24 06:56:40 mlelstv Exp $ */
+/* $NetBSD: plcomreg.h,v 1.8 2023/04/11 12:56:07 riastradh Exp $ */
/*-
* Copyright (c) 2001 ARM Ltd
@@ -29,6 +29,8 @@
* SUCH DAMAGE.
*/
+#ifndef _SYS_ARCH_EVBARM_DEV_PLCOMREG_H_
+#define _SYS_ARCH_EVBARM_DEV_PLCOMREG_H_
#define PLCOM_FREQ 1843200 /* 16-bit baud rate divisor */
#define PLCOM_TOLERANCE 30 /* baud rate tolerance, in 0.1% units */
@@ -173,3 +175,5 @@
#define PL010COM_UART_SIZE 0x100
#define PL011COM_UART_SIZE 0x1000
+
+#endif /* _SYS_ARCH_EVBARM_DEV_PLCOMREG_H_ */
diff -r 342f4a356fcb -r 5c80980d92b5 sys/arch/evbarm/dev/plcomvar.h
--- a/sys/arch/evbarm/dev/plcomvar.h Tue Apr 11 12:55:59 2023 +0000
+++ b/sys/arch/evbarm/dev/plcomvar.h Tue Apr 11 12:56:07 2023 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: plcomvar.h,v 1.19 2023/01/24 06:56:40 mlelstv Exp $ */
+/* $NetBSD: plcomvar.h,v 1.20 2023/04/11 12:56:07 riastradh Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
@@ -30,6 +30,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#ifndef _SYS_ARCH_EVBARM_DEV_PLCOMVAR_H_
+#define _SYS_ARCH_EVBARM_DEV_PLCOMVAR_H_
+
#include "opt_multiprocessor.h"
#include "opt_lockdebug.h"
#include "opt_plcom.h"
@@ -171,3 +174,4 @@ void plcom_attach_subr (struct plcom_sof
int plcom_detach (device_t, int);
int plcom_activate (device_t, enum devact);
+#endif /* _SYS_ARCH_EVBARM_DEV_PLCOMVAR_H_ */
Home |
Main Index |
Thread Index |
Old Index