Module Name:    src
Committed By:   macallan
Date:           Wed Sep  6 08:14:42 UTC 2023

Modified Files:
        src/sys/arch/macppc/dev: cuda.c

Log Message:
yet another tsleep/wakeup -> cv_*


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/macppc/dev/cuda.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/macppc/dev/cuda.c
diff -u src/sys/arch/macppc/dev/cuda.c:1.29 src/sys/arch/macppc/dev/cuda.c:1.30
--- src/sys/arch/macppc/dev/cuda.c:1.29	Sat Aug  7 16:18:57 2021
+++ src/sys/arch/macppc/dev/cuda.c	Wed Sep  6 08:14:42 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: cuda.c,v 1.29 2021/08/07 16:18:57 thorpej Exp $ */
+/*	$NetBSD: cuda.c,v 1.30 2023/09/06 08:14:42 macallan Exp $ */
 
 /*-
  * Copyright (c) 2006 Michael Lorenz
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cuda.c,v 1.29 2021/08/07 16:18:57 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cuda.c,v 1.30 2023/09/06 08:14:42 macallan Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -93,7 +93,8 @@ struct cuda_softc {
 	/* time */
 	uint32_t sc_tod;
 	uint32_t sc_autopoll;
-	uint32_t sc_todev;
+	kcondvar_t sc_todev;
+	kmutex_t sc_todevmtx;
 	/* ADB */
 	void (*sc_adb_handler)(void *, int, uint8_t *);
 	void *sc_adb_cookie;
@@ -197,6 +198,9 @@ cuda_attach(device_t parent, device_t se
 	sc->sc_error = 0;
 	sc->sc_i2c_read_len = 0;
 
+	cv_init(&sc->sc_todev, "cuda_event");
+	mutex_init(&sc->sc_todevmtx, MUTEX_DEFAULT, IPL_NONE);
+
 	if (bus_space_map(sc->sc_memt, ca->ca_reg[0] + ca->ca_baseaddr,
 	    ca->ca_reg[1], 0, &sc->sc_memh) != 0) {
 
@@ -728,7 +732,8 @@ cuda_error_handler(void *cookie, int len
 	 * byte 3 seems to be the failed command
 	 */
 	sc->sc_error = 1;
-	wakeup(&sc->sc_todev);
+	DPRINTF("cuda error %02x %02x %02x %02x\n", data[0], data[1], data[2], data[3]);
+	cv_signal(&sc->sc_todev);
 	return 0;
 }
 
@@ -763,7 +768,7 @@ cuda_todr_handler(void *cookie, int len,
 			sc->sc_iic_done = len;
 			break;
 	}
-	wakeup(&sc->sc_todev);
+	cv_signal(&sc->sc_todev);
 	return 0;
 }
 
@@ -781,7 +786,10 @@ cuda_todr_get(todr_chip_handle_t tch, st
 		cuda_send(sc, 0, 2, cmd);
 
 		while ((sc->sc_tod == 0) && (cnt < 10)) {
-			tsleep(&sc->sc_todev, 0, "todr", 10);
+			mutex_enter(&sc->sc_todevmtx);
+			cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz);
+			mutex_exit(&sc->sc_todevmtx);
+
 			cnt++;
 		}
 
@@ -817,7 +825,9 @@ cuda_todr_set(todr_chip_handle_t tch, st
 	sc->sc_tod = 0;
 	if (cuda_send(sc, 0, 6, cmd) == 0) {
 		while (sc->sc_tod == 0) {
-			tsleep(&sc->sc_todev, 0, "todr", 10);
+			mutex_enter(&sc->sc_todevmtx);
+			cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz);
+			mutex_exit(&sc->sc_todevmtx);
 		}
 		return 0;
 	}
@@ -874,8 +884,11 @@ cuda_autopoll(void *cookie, int flag)
 	while(sc->sc_autopoll == -1) {
 		if (sc->sc_polling || cold) {
 			cuda_poll(sc);
-		} else
-			tsleep(&sc->sc_todev, 0, "autopoll", 100);
+		} else {
+			mutex_enter(&sc->sc_todevmtx);
+			cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz);
+			mutex_exit(&sc->sc_todevmtx);
+		}
 	}
 }
 	
@@ -962,8 +975,11 @@ cuda_i2c_exec(void *cookie, i2c_op_t op,
 	while ((sc->sc_iic_done == 0) && (sc->sc_error == 0)) {
 		if (sc->sc_polling || cold) {
 			cuda_poll(sc);
-		} else
-			tsleep(&sc->sc_todev, 0, "i2c", 1000);
+		} else {
+			mutex_enter(&sc->sc_todevmtx);
+			cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz);
+			mutex_exit(&sc->sc_todevmtx);
+		}
 	}
 
 	if (sc->sc_error) {
@@ -988,8 +1004,11 @@ cuda_i2c_exec(void *cookie, i2c_op_t op,
 		while ((sc->sc_iic_done == 0) && (sc->sc_error == 0)) {
 			if (sc->sc_polling || cold) {
 				cuda_poll(sc);
-			} else
-				tsleep(&sc->sc_todev, 0, "i2c", 1000);
+			} else {
+				mutex_enter(&sc->sc_todevmtx);
+				cv_timedwait(&sc->sc_todev, &sc->sc_todevmtx, hz);
+				mutex_exit(&sc->sc_todevmtx);
+			}
 		}
 
 		if (sc->sc_error) {

Reply via email to