Subject: NetBSD-current doesn't compile on VAX
To: None <gnats-bugs@NetBSD.ORG>
From: Arne H. Juul <arnej@pvv.unit.no>
List: port-vax
Date: 05/06/1996 19:23:07
>Submitter-Id:	net
>Originator:	Arne H. J.
>Organization:
	Norwegian University of Technology and Science
>Confidential:	no
>Synopsis:	NetBSD-current doesn't compile on VAX
>Severity:	serious
>Priority:	high
>Category:	port-vax
>Class:		sw-bug
>Release:	NetBSD-current as of Mon May  6 19:13:06 MET DST 1996
>Environment:
	
System: NetBSD dvask.pvv.unit.no 1.1B NetBSD 1.1B (DVSK) #1: Sun May 5 20:41:15 MET DST 1996 arnej@dvask.pvv.unit.no:/usr/src/sys/arch/vax/compile/DVSK vax


>Description:
	NetBSD-current doesn't compile on VAX.  Mostly it seems to
	be rather trivial prototyping fixups and so on that is now
	needed, and I've attempted to fix these myself.  Some has
	been fixed by #include'ing rather indiscriminately; this
	could probably be done a bit prettier. There still remains
	some warnings about volatile pointers in uda.c, so I did
	that one without -Werror for now - somebody who knows more
	about what actually *is* volatile needs to look at this.
	I'm pretty sure that the type and prototype changes I've
	done goes in the right direction, though.
>How-To-Repeat:
	Sup -current code to your NetBSD/vax machine, and try to compile
	the GENERIC kernel.
>Fix:
	Here's a patch to fix or workaround most of the current problems.
	I hope this is useful, with the speed of our uvaxII it's certainly
	a couple of days' work :-)

diff -ru vax/include/cpu.h vax.ok/include/cpu.h
--- vax/include/cpu.h	Wed Apr 10 13:36:05 1996
+++ vax.ok/include/cpu.h	Mon May  6 14:32:21 1996
@@ -30,9 +30,13 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#ifndef _VAX_CPU_H_
+#define _VAX_CPU_H_
+
  /* All bugs are subject to removal without further notice */
 
 #include <sys/cdefs.h>
+#include <sys/device.h>
 #include <machine/mtpr.h>
 #include <machine/pcb.h>
 
@@ -49,7 +53,7 @@
 	int	(*cpu_clock) __P((void)); /* CPU dependent clock handling */
 	int	(*cpu_mchk) __P((caddr_t));   /* Machine check handling */
 	void	(*cpu_memerr) __P((void)); /* Memory subsystem errors */
-	void	(*cpu_conf) __P((void *, void *, void *)); /* Autoconfiguration */
+	void	(*cpu_conf) __P((struct device *, struct device *, void *)); /* Autoconfiguration */
 };
 
 struct clockframe {
@@ -100,3 +104,5 @@
 #ifdef DDB
 int	kdbrint __P((int));
 #endif
+
+#endif /* _VAX_CPU_H_ */
diff -ru vax/include/ka650.h vax.ok/include/ka650.h
--- vax/include/ka650.h	Wed Apr 10 13:36:07 1996
+++ vax.ok/include/ka650.h	Mon May  6 02:07:22 1996
@@ -237,7 +237,7 @@
 /* prototypes */
 struct sbi_attach_args;
 
-void	uvaxIII_conf __P((void *, void *, void *));
+void	uvaxIII_conf __P((struct device *, struct device *, void *));
 int	uvaxIII_clock __P((void));
 void	uvaxIII_memenable __P((struct sbi_attach_args *, struct device *));
 void	uvaxIII_memerr __P((void));
diff -ru vax/include/ka750.h vax.ok/include/ka750.h
--- vax/include/ka750.h	Wed Apr 10 13:36:07 1996
+++ vax.ok/include/ka750.h	Mon May  6 02:07:22 1996
@@ -43,7 +43,7 @@
 #define	V750PGS	4
 
 /* 11/750 specific prototypes */
-void	ka750_conf __P((void *, void *, void *));
+void	ka750_conf __P((struct device *, struct device *, void *));
 int	ka750_clock __P((void));
 void	ka750_memenable __P((struct sbi_attach_args *, struct device *));
 void	ka750_memerr __P((void));
diff -ru vax/include/uvaxII.h vax.ok/include/uvaxII.h
--- vax/include/uvaxII.h	Wed Apr 10 13:36:08 1996
+++ vax.ok/include/uvaxII.h	Mon May  6 17:44:53 1996
@@ -35,6 +35,9 @@
  */
 
 #if VAX630 || VAX410
+
+#include <sys/device.h>
+
 #define UVAXIISID	((u_long *)0x20040004)
 #define UVAXIICPU	((struct uvaxIIcpu *)0x20080000)
 
@@ -125,7 +128,7 @@
 struct	sbi_attach_args;
 
 /* Prototypes */
-void	uvaxII_conf __P((void *, void *, void *));
+void	uvaxII_conf __P((struct device *, struct device *, void *));
 int	uvaxII_clock __P((void));
 void	uvaxII_memenable __P((struct sbi_attach_args *, struct device *));
 void	uvaxII_memerr __P((void));
diff -ru vax/mba/hp.c vax.ok/mba/hp.c
--- vax/mba/hp.c	Wed Apr 10 13:36:08 1996
+++ vax.ok/mba/hp.c	Mon May  6 18:13:32 1996
@@ -51,7 +51,6 @@
 #include <sys/ioccom.h>
 #include <sys/fcntl.h>
 #include <sys/syslog.h>
-#include <sys/cpu.h>
 
 #include <machine/trap.h>
 #include <machine/pte.h>
diff -ru vax/uba/uda.c vax.ok/uba/uda.c
--- vax/uba/uda.c	Mon Mar 18 13:29:16 1996
+++ vax.ok/uba/uda.c	Mon May  6 02:07:28 1996
@@ -252,7 +252,13 @@
 /*
  * Definition of the driver for autoconf.
  */
-int	udaprobe(), udaslave(), udaattach(), udadgo(), udaintr();
+int	udaprobe(caddr_t, int, struct uba_ctlr *, struct uba_softc *);
+int	udaslave(struct uba_device *, caddr_t);
+void	udaattach(struct uba_device *);
+void	udadgo(struct uba_ctlr *);
+
+void	udaintr();
+
 struct	uba_ctlr *udaminfo[NUDA];
 struct	uba_device *udadinfo[NRA];
 struct	disklabel udalabel[NRA];
@@ -265,8 +271,15 @@
 /*
  * More driver definitions, for generic MSCP code.
  */
-int	udadgram(), udactlrdone(), udaunconf(), udaiodone();
-int	udaonline(), udagotstatus(), udaioerror(), udareplace(), udabb();
+void	udadgram(struct mscp_info *, struct mscp *);
+void	udactlrdone(struct mscp_info *, struct mscp *);
+int	udaunconf(struct mscp_info *, struct mscp *);
+void	udaiodone(struct mscp_info *, struct buf *, int);
+int	udaonline(struct uba_device *, struct mscp *);
+int	udagotstatus(struct uba_device *, struct mscp *);
+int	udaioerror(struct uba_device *, struct mscp *, struct buf *);
+void	udareplace(struct uba_device *, struct mscp *);
+void	udabb(struct uba_device *, struct mscp *, struct buf *);
 
 struct	buf udautab[NRA];	/* per drive transfer queue */
 
@@ -277,6 +290,15 @@
    "uda", "ra" };
 
 /*
+ * Miscalleneous prototypes
+ */
+void udastart(struct uba_ctlr *);
+void udastrat1(struct buf *);
+void uda_rasave(int, struct mscp *, int);
+
+ 
+
+/*
  * Miscellaneous private variables.
  */
 char	udasr_bits[] = UDASR_BITS;
@@ -324,6 +346,7 @@
 {
 }
 
+int
 udaprobe(reg, ctlr, um, uhp)
 	caddr_t reg;
 	int ctlr;
@@ -460,6 +483,7 @@
  * Note that by the time udaslave is called, the interrupt vector
  * for the UDA50 has been set up (so that udaunconf() will be called).
  */
+int
 udaslave(ui, reg)
 	register struct uba_device *ui;
 	caddr_t reg;
@@ -630,6 +654,7 @@
  * what?).  Set up the inverting pointer, and attempt to bring the
  * drive on line and read its label.
  */
+void
 udaattach(ui)
 	register struct uba_device *ui;
 {
@@ -671,6 +696,7 @@
 /*
  * Initialise a UDA50.  Return true iff something goes wrong.
  */
+int
 udainit(ctlr)
 	int ctlr;
 {
@@ -748,6 +774,7 @@
  * Open a drive.
  */
 /*ARGSUSED*/
+int
 udaopen(dev, flag, fmt)
 	dev_t dev;
 	int flag, fmt;
@@ -857,6 +884,7 @@
 }
 
 /* ARGSUSED */
+int
 udaclose(dev, flags, fmt)
 	dev_t dev;
 	int flags, fmt;
@@ -895,6 +923,7 @@
  * and set a timeout on it in case it fails to respond.
  * When on line, read in the pack label.
  */
+int
 uda_rainit(ui, flags)
 	volatile struct uba_device *ui;
 	int flags;
@@ -991,6 +1020,7 @@
  * Copy the geometry information for the given ra from a
  * GET UNIT STATUS response.  If check, see if it changed.
  */
+void
 uda_rasave(unit, mp, check)
 	int unit;
 	register struct mscp *mp;
@@ -1100,6 +1130,7 @@
 /*
  * Work routine for udastrategy.
  */
+void
 udastrat1(bp)
 	register struct buf *bp;
 {
@@ -1160,6 +1191,7 @@
  * Start up whatever transfers we can find.
  * Note that udastart() must be called at splbio().
  */
+void
 udastart(um)
 	register struct uba_ctlr *um;
 {
@@ -1307,6 +1339,7 @@
  * this calls us again immediately we will not recurse, because
  * that time we will be in udastart().  Clever....
  */
+void
 udadgo(um)
 	register struct uba_ctlr *um;
 {
@@ -1333,6 +1366,7 @@
 		udastart(um);
 }
 
+void
 udaiodone(mi, bp, info)
 	register struct mscp_info *mi;
 	struct buf *bp;
@@ -1425,6 +1459,7 @@
  * continue initialisation, or acknowledge command and response
  * interrupts, and process responses.
  */
+void
 udaintr(ctlr)
 {
 	struct uba_ctlr *um = udaminfo[ctlr];
@@ -1616,6 +1651,7 @@
 /*
  * Handle an error datagram.
  */
+void
 udadgram(mi, mp)
 	struct mscp_info *mi;
 	struct mscp *mp;
@@ -1637,6 +1673,7 @@
  * The Set Controller Characteristics command finished.
  * Record the new state of the controller.
  */
+void
 udactlrdone(mi, mp)
 	register struct mscp_info *mi;
 	struct mscp *mp;
@@ -1661,6 +1698,7 @@
  * Received a response from an as-yet unconfigured drive.  Configure it
  * in, if possible.
  */
+int
 udaunconf(mi, mp)
 	struct mscp_info *mi;
 	register struct mscp *mp;
@@ -1692,6 +1730,7 @@
  * we think the drive is truly on line.  In any case, awaken anyone
  * sleeping on the drive on-line-ness.
  */
+int
 udaonline(ui, mp)
 	register struct uba_device *ui;
 	struct mscp *mp;
@@ -1722,6 +1761,7 @@
 /*
  * We got some (configured) unit's status.  Return DONE if it succeeded.
  */
+int
 udagotstatus(ui, mp)
 	register struct uba_device *ui;
 	register struct mscp *mp;
@@ -1743,6 +1783,7 @@
  * Need to write the bad block forwaring code first....
  */
 /*ARGSUSED*/
+int
 udaioerror(ui, mp, bp)
 	register struct uba_device *ui;
 	register struct mscp *mp;
@@ -1775,6 +1816,7 @@
  * A replace operation finished.
  */
 /*ARGSUSED*/
+void
 udareplace(ui, mp)
 	struct uba_device *ui;
 	struct mscp *mp;
@@ -1787,6 +1829,7 @@
  * A bad block related operation finished.
  */
 /*ARGSUSED*/
+void
 udabb(ui, mp, bp)
 	struct uba_device *ui;
 	struct mscp *mp;
diff -ru vax/vax/autoconf.c vax.ok/vax/autoconf.c
--- vax/vax/autoconf.c	Wed Apr 10 13:36:15 1996
+++ vax.ok/vax/autoconf.c	Mon May  6 02:07:29 1996
@@ -66,7 +66,7 @@
 
 extern int cold;
 
-void    notsupp_conf __P((void *, void *, void *));
+void	notsupp_conf __P((struct device *, struct device *, void *));
 int     notsupp_clock __P((void));
 void    notsupp_memerr __P((void));
 int     notsupp_mchk __P((caddr_t));
@@ -74,7 +74,7 @@
 
 
 #ifdef VAX8600 /* XXX These are in ka860 also */
-void    ka86_conf __P((void *, void *, void *));
+void    ka86_conf __P((struct device *, struct device *, void *));
 int     ka86_clock __P((void));
 void    ka86_memenable __P((struct sbi_attach_args *, struct device *));
 void    ka86_memerr __P((void));
@@ -82,7 +82,7 @@
 void    ka86_steal_pages __P((void));
 #endif
 #ifdef VAX780 /* XXX These are in ka780 also */
-void    ka780_conf __P((void *, void *, void *));
+void    ka780_conf __P((struct device *, struct device *, void *));
 int     ka780_clock __P((void));
 void    ka780_memenable __P((struct sbi_attach_args *, void *));
 void    ka780_memerr __P((void));
@@ -180,7 +180,8 @@
 
 void
 notsupp_conf(dev, dev2, a)
-	void *dev, *dev2, *a;
+	struct device *dev, *dev2;
+	void *a;
 {
 }
 
diff -ru vax/vax/disksubr.c vax.ok/vax/disksubr.c
--- vax/vax/disksubr.c	Wed Apr 10 13:36:18 1996
+++ vax.ok/vax/disksubr.c	Mon May  6 18:13:06 1996
@@ -41,8 +41,8 @@
 #include <sys/dkbad.h>
 #include <sys/disklabel.h>
 #include <sys/syslog.h>
-#include <sys/cpu.h>
 
+#include <machine/cpu.h>
 #include <machine/macros.h>
 
 /* XXX encoding of disk minor numbers, should be elsewhere... */
diff -ru vax/vax/machdep.c vax.ok/vax/machdep.c
--- vax/vax/machdep.c	Wed Apr 10 13:36:25 1996
+++ vax.ok/vax/machdep.c	Mon May  6 18:12:46 1996
@@ -63,7 +63,6 @@
 #include <sys/device.h>
 #include <sys/exec.h>
 #include <sys/mount.h>
-#include <sys/cpu.h>
 #include <sys/syscallargs.h>
 #include <sys/ptrace.h>
 #ifdef SYSVMSG
@@ -112,7 +111,7 @@
 #endif
 
 void	netintr __P((void));
-void	machinecheck __P((u_int));
+void	machinecheck __P((caddr_t));
 void	cmrerr __P((void));
 
 extern int virtual_avail, virtual_end;
@@ -634,7 +633,7 @@
 
 void
 machinecheck(frame)
-	u_int           frame;
+	caddr_t		frame;
 {
 	if ((*cpu_calls[cpunumber].cpu_mchk) (frame) == 0)
 		return;
diff -ru vax/vax/trap.c vax.ok/vax/trap.c
--- vax/vax/trap.c	Wed Apr 10 13:36:31 1996
+++ vax.ok/vax/trap.c	Mon May  6 18:13:22 1996
@@ -42,12 +42,12 @@
 #include <sys/systm.h>
 #include <sys/signalvar.h>
 #include <sys/exec.h>
-#include <sys/cpu.h>
 
 #include <vm/vm.h>
 #include <vm/vm_kern.h>
 #include <vm/vm_page.h>
 
+#include <machine/cpu.h>
 #include <machine/mtpr.h>
 #include <machine/pte.h>
 #include <machine/pcb.h>
diff -ru vax/vax/vm_machdep.c vax.ok/vax/vm_machdep.c
--- vax/vax/vm_machdep.c	Wed Apr 10 13:36:32 1996
+++ vax.ok/vax/vm_machdep.c	Mon May  6 18:13:15 1996
@@ -41,7 +41,6 @@
 #include <sys/vnode.h>
 #include <sys/core.h>
 #include <sys/mount.h>
-#include <sys/cpu.h>
 
 #include <vm/vm.h>
 #include <vm/vm_kern.h>