Module Name:    src
Committed By:   jdolecek
Date:           Wed Jun 24 19:24:44 UTC 2020

Modified Files:
        src/sys/dev/ic: ug.c ugvar.h
        src/sys/dev/isa: ug_isa.c

Log Message:
rearrange to avoid allocating softc on stack in ug_isa_match()


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/ic/ug.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/ic/ugvar.h
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/isa/ug_isa.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/dev/ic/ug.c
diff -u src/sys/dev/ic/ug.c:1.13 src/sys/dev/ic/ug.c:1.14
--- src/sys/dev/ic/ug.c:1.13	Sun Jun  3 10:04:40 2018
+++ src/sys/dev/ic/ug.c	Wed Jun 24 19:24:44 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ug.c,v 1.13 2018/06/03 10:04:40 maxv Exp $ */
+/* $NetBSD: ug.c,v 1.14 2020/06/24 19:24:44 jdolecek Exp $ */
 
 /*
  * Copyright (c) 2007 Mihai Chelaru <kef...@netbsd.ro>
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ug.c,v 1.13 2018/06/03 10:04:40 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ug.c,v 1.14 2020/06/24 19:24:44 jdolecek Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -580,13 +580,13 @@ ug2_refresh(struct sysmon_envsys *sme, e
 #undef SENSOR_VALUE
 }
 
-int
-ug2_wait_ready(struct ug_softc *sc)
+static int
+ug2_wait_ready(bus_space_tag_t iot, bus_space_handle_t ioh)
 {
 	int cnt = 0;
 
-	bus_space_write_1(sc->sc_iot, sc->sc_ioh, UG_DATA, 0x1a);
-	while (bus_space_read_1(sc->sc_iot, sc->sc_ioh, UG_DATA) &
+	bus_space_write_1(iot, ioh, UG_DATA, 0x1a);
+	while (bus_space_read_1(iot, ioh, UG_DATA) &
 	    UG2_STATUS_BUSY) {
 		if (cnt++ > UG_DELAY_CYCLES)
 			return 0;
@@ -594,12 +594,12 @@ ug2_wait_ready(struct ug_softc *sc)
 	return 1;
 }
 
-int
-ug2_wait_readable(struct ug_softc *sc)
+static int
+ug2_wait_readable(bus_space_tag_t iot, bus_space_handle_t ioh)
 {
 	int cnt = 0;
 
-	while (!(bus_space_read_1(sc->sc_iot, sc->sc_ioh, UG_DATA) &
+	while (!(bus_space_read_1(iot, ioh, UG_DATA) &
 		UG2_STATUS_READY_FOR_READ)) {
 		if (cnt++ > UG_DELAY_CYCLES)
 			return 0;
@@ -608,28 +608,28 @@ ug2_wait_readable(struct ug_softc *sc)
 }
 
 int
-ug2_sync(struct ug_softc *sc)
+ug2_sync(bus_space_tag_t iot, bus_space_handle_t ioh)
 {
 	int cnt = 0;
 
-#define UG2_WAIT_READY if(ug2_wait_ready(sc) == 0) return 0;
+#define UG2_WAIT_READY if(ug2_wait_ready(iot, ioh) == 0) return 0;
 
 	/* Don't sync two times in a row */
-	if(ug_ver != 0) {
+	if (ug_ver != 0) {
 		ug_ver = 0;
 		return 1;
 	}
 
 	UG2_WAIT_READY;
-	bus_space_write_1(sc->sc_iot, sc->sc_ioh, UG_DATA, 0x20);
+	bus_space_write_1(iot, ioh, UG_DATA, 0x20);
 	UG2_WAIT_READY;
-	bus_space_write_1(sc->sc_iot, sc->sc_ioh, UG_CMD, 0x10);
+	bus_space_write_1(iot, ioh, UG_CMD, 0x10);
 	UG2_WAIT_READY;
-	bus_space_write_1(sc->sc_iot, sc->sc_ioh, UG_CMD, 0x00);
+	bus_space_write_1(iot, ioh, UG_CMD, 0x00);
 	UG2_WAIT_READY;
-	if (ug2_wait_readable(sc) == 0)
+	if (ug2_wait_readable(iot, ioh) == 0)
 		return 0;
-	while (bus_space_read_1(sc->sc_iot, sc->sc_ioh, UG_CMD) != 0xAC)
+	while (bus_space_read_1(iot, ioh, UG_CMD) != 0xAC)
 		if (cnt++ > UG_DELAY_CYCLES)
 			return 0;
 	return 1;
@@ -640,24 +640,26 @@ ug2_read(struct ug_softc *sc, uint8_t ba
 	 uint8_t *ret)
 {
 	int i;
+	bus_space_tag_t iot = sc->sc_iot;
+	bus_space_handle_t ioh = sc->sc_ioh;
 
-	if (ug2_sync(sc) == 0)
+	if (ug2_sync(iot, ioh) == 0)
 		return 0;
 
-	bus_space_write_1(sc->sc_iot, sc->sc_ioh, UG_DATA, 0x1A);
+	bus_space_write_1(iot, ioh, UG_DATA, 0x1A);
 	UG2_WAIT_READY;
-	bus_space_write_1(sc->sc_iot, sc->sc_ioh, UG_CMD, bank);
+	bus_space_write_1(iot, ioh, UG_CMD, bank);
 	UG2_WAIT_READY;
-	bus_space_write_1(sc->sc_iot, sc->sc_ioh, UG_CMD, offset);
+	bus_space_write_1(iot, ioh, UG_CMD, offset);
 	UG2_WAIT_READY;
-	bus_space_write_1(sc->sc_iot, sc->sc_ioh, UG_CMD, count);
+	bus_space_write_1(iot, ioh, UG_CMD, count);
 	UG2_WAIT_READY;
 
 #undef UG2_WAIT_READY
 
 	/* Now wait for the results */
 	for (i = 0; i < count; i++) {
-		if (ug2_wait_readable(sc) == 0)
+		if (ug2_wait_readable(sc->sc_iot, sc->sc_ioh) == 0)
 			break;
 		ret[i] = bus_space_read_1(sc->sc_iot, sc->sc_ioh, UG_CMD);
 	}

Index: src/sys/dev/ic/ugvar.h
diff -u src/sys/dev/ic/ugvar.h:1.5 src/sys/dev/ic/ugvar.h:1.6
--- src/sys/dev/ic/ugvar.h:1.5	Sun Jun  3 10:04:40 2018
+++ src/sys/dev/ic/ugvar.h	Wed Jun 24 19:24:44 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ugvar.h,v 1.5 2018/06/03 10:04:40 maxv Exp $ */
+/* $NetBSD: ugvar.h,v 1.6 2020/06/24 19:24:44 jdolecek Exp $ */
 
 /*
  * Copyright (c) 2007 Mihai Chelaru <kef...@netbsd.ro>
@@ -59,9 +59,7 @@ uint8_t ug_read(struct ug_softc *, unsig
 int ug_waitfor(struct ug_softc *, uint16_t, uint8_t);
 void ug_setup_sensors(struct ug_softc *);
 void ug2_attach(device_t);
-int ug2_wait_ready(struct ug_softc *);
-int ug2_wait_readable(struct ug_softc *);
-int ug2_sync(struct ug_softc *);
+int ug2_sync(bus_space_tag_t, bus_space_handle_t);
 int ug2_read(struct ug_softc *, uint8_t, uint8_t, uint8_t, uint8_t*);
 
 /* Envsys */

Index: src/sys/dev/isa/ug_isa.c
diff -u src/sys/dev/isa/ug_isa.c:1.7 src/sys/dev/isa/ug_isa.c:1.8
--- src/sys/dev/isa/ug_isa.c:1.7	Fri Apr  4 09:30:55 2008
+++ src/sys/dev/isa/ug_isa.c	Wed Jun 24 19:24:44 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ug_isa.c,v 1.7 2008/04/04 09:30:55 xtraeme Exp $ */
+/* $NetBSD: ug_isa.c,v 1.8 2020/06/24 19:24:44 jdolecek Exp $ */
 
 /*
  * Copyright (c) 2007 Mihai Chelaru <kef...@netbsd.ro>
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ug_isa.c,v 1.7 2008/04/04 09:30:55 xtraeme Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ug_isa.c,v 1.8 2020/06/24 19:24:44 jdolecek Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -70,7 +70,6 @@ static int
 ug_isa_match(device_t parent, cfdata_t match, void *aux)
 {
 	struct isa_attach_args *ia = aux;
-	struct ug_softc wrap_sc;
 	bus_space_handle_t bsh;
 	uint8_t valc, vald;
 
@@ -97,11 +96,7 @@ ug_isa_match(device_t parent, cfdata_t m
 		ug_ver = 1;
 
 	/* Check for uGuru 2005 */
-
-	wrap_sc.sc_iot = ia->ia_iot;
-	wrap_sc.sc_ioh = bsh;
-
-	if (ug2_sync(&wrap_sc) == 1)
+	if (ug2_sync(ia->ia_iot, bsh) == 1)
 		ug_ver = 2;
 
 	/* unmap, prepare ia and bye */

Reply via email to