Subject: NFS partitions mounted on Ultrix root
To: None <port-pmax@sun-lamp.cs.berkeley.edu>
From: Jonathan Stone <jonathan@DSG.Stanford.EDU>
List: port-pmax
Date: 08/17/1994 02:42:55
Ultrix mount(2nfs) takes five arguments, not four. (I _knew_ that :().
sys/compat/ultrix_syscalls.master needs to be changed to reflect that.
The patches below repeat or replace all those I posted yesterday --
please throw the old ones away! -- and also patch the Ultrix
syscalls.master, rename the Ultrix-compatible mount from sun_mount()
to ultrix_mount(), since they're not really the same at all; and
cleans the code up just slightly.
An "ls -l" doesn't seem to work on an NFS-mounted filesystem. It says
"bad system call". I'd guess it was getdirentries() not doing the
right thing. Similarly, "mount" and "df" and "df /somefilesys" fail
with a bad system call. I guess there's no emulation of Ultrix
getmnt().
The resulting kernel sort-of goes multi-user with Ultrix binaries, but
the Ultrix getty doesn't work (it seems to just exit and reprint a
login banner on each keystroke), making it impossible to login. Yet.
*** sys/compat/ultrix/ultrix_misc.c.DIST Mon Aug 1 13:22:03 1994
--- sys/compat/ultrix/ultrix_misc.c Wed Aug 17 01:59:24 1994
***************
*** 260,274 ****
return (unmount(p, uap, retval));
}
- #define SUNM_RDONLY 0x01 /* mount fs read-only */
- #define SUNM_NOSUID 0x02 /* mount fs with setuid disallowed */
- #define SUNM_NEWTYPE 0x04 /* type is string (char *), not int */
- #define SUNM_GRPID 0x08 /* (bsd semantics; ignored) */
- #define SUNM_REMOUNT 0x10 /* update existing mount */
- #define SUNM_NOSUB 0x20 /* prevent submounts (rejected) */
- #define SUNM_MULTI 0x40 /* (ignored) */
- #define SUNM_SYS5 0x80 /* Sys 5-specific semantics (rejected) */
struct sun_nfs_args {
struct sockaddr_in *addr; /* file server address */
caddr_t fh; /* file handle to be mounted */
--- 260,281 ----
return (unmount(p, uap, retval));
}
+ #define ULT_NM_RONLY 0x0001 /* mount read-only */
+ #define ULT_NM_SOFT 0x0002 /* soft mount (hard is default) */
+ #define ULT_NM_WSIZE 0x0004 /* set write size */
+ #define ULT_NM_RSIZE 0x0008 /* set read size */
+ #define ULT_NM_TIMEO 0x0010 /* set initial timeout */
+ #define ULT_NM_RETRANS 0x0020 /* set number of request retrys */
+ #define ULT_NM_HOSTNAME 0x0040 /* set hostname for error printf */
+ #define ULT_NM_PGTHRESH 0x0080 /* set page threshold for exec */
+ #define ULT_NM_INT 0x0100 /* allow hard mount keyboard interrupts */
+ #define ULT_NM_NOAC 0x0200 /* don't cache attributes */
+
+
+ #define ULT_FSTYPE_UFS 1
+ #define ULT_FSTYPE_NFS 5
+
struct sun_nfs_args {
struct sockaddr_in *addr; /* file server address */
caddr_t fh; /* file handle to be mounted */
***************
*** 292,357 ****
int flags;
caddr_t data;
};
! sun_mount(p, uap, retval)
struct proc *p;
! struct sun_mount_args *uap;
int *retval;
{
! int oflags = uap->flags, nflags, error;
extern char sigcode[], esigcode[];
char fsname[MFSNAMELEN];
#define szsigcode (esigcode - sigcode)
! if (oflags & (SUNM_NOSUB | SUNM_SYS5))
return (EINVAL);
! if ((oflags & SUNM_NEWTYPE) == 0)
! return (EINVAL);
! nflags = 0;
! if (oflags & SUNM_RDONLY)
! nflags |= MNT_RDONLY;
! if (oflags & SUNM_NOSUID)
! nflags |= MNT_NOSUID;
! if (oflags & SUNM_REMOUNT)
! nflags |= MNT_UPDATE;
! uap->flags = nflags;
! if (error = copyinstr((caddr_t)uap->type, fsname, sizeof fsname, (u_int *)0))
return (error);
! if (strcmp(fsname, "4.2") == 0) {
! uap->type = (caddr_t)ALIGN(PS_STRINGS - szsigcode - STACKGAPLEN);
! if (error = copyout("ufs", uap->type, sizeof("ufs")))
! return (error);
! } else if (strcmp(fsname, "nfs") == 0) {
! struct sun_nfs_args sna;
! struct sockaddr_in sain;
struct nfs_args na;
! struct sockaddr sa;
! if (error = copyin(uap->data, &sna, sizeof sna))
! return (error);
! if (error = copyin(sna.addr, &sain, sizeof sain))
! return (error);
! bcopy(&sain, &sa, sizeof sa);
! sa.sa_len = sizeof(sain);
! uap->data = (caddr_t)ALIGN(PS_STRINGS - szsigcode - STACKGAPLEN);
! na.addr = (struct sockaddr *)((int)uap->data + sizeof na);
na.sotype = SOCK_DGRAM;
na.proto = IPPROTO_UDP;
! na.fh = (nfsv2fh_t *)sna.fh;
! na.flags = sna.flags;
! na.wsize = sna.wsize;
! na.rsize = sna.rsize;
! na.timeo = sna.timeo;
! na.retrans = sna.retrans;
! na.hostname = sna.hostname;
! if (error = copyout(&sa, na.addr, sizeof sa))
return (error);
! if (error = copyout(&na, uap->data, sizeof na))
return (error);
}
return (mount(p, uap, retval));
}
--- 299,485 ----
int flags;
caddr_t data;
};
! /*XXX* Ultrix mount(2) not the same as SunOS*/
!
! struct ult_mount_args {
! char *special;
! char *dir;
! int rdonly, type;
! caddr_t data;
! };
!
! struct osockaddr_in {
! short sin_family;
! u_short sin_port;
! struct in_addr sin_addr;
! char sin_zero[8];
! };
!
! struct ult_nfs_args {
! struct osockaddr_in *addr; /* file server address */
! nfsv2fh_t *fh; /* file handle to be mounted */
! int flags; /* flags */
! int wsize; /* write size in bytes */
! int rsize; /* read size in bytes */
! int timeo; /* initial timeout in .1 secs */
! int retrans; /* times to retry send */
! char *hostname; /* server's hostname */
! char *optstr; /* string of nfs mount options*/
! int gfs_flags; /* gnode flags (ugh) */
! int pg_thresh; /* paging threshold ? */
! };
!
! struct ult_ufs_args {
! u_long ufs_flags; /* mount flags?*/
! u_long ufs_pgthresh; /* minimum file size to page */
! };
!
! int
! ultrix_mount(p, uap, retval)
struct proc *p;
! struct ult_mount_args *uap;
int *retval;
{
! int error;
! int otype = uap->type;
extern char sigcode[], esigcode[];
char fsname[MFSNAMELEN];
+ char * fstype;
+ struct sun_mount_args fixed;
#define szsigcode (esigcode - sigcode)
+ caddr_t usp = (caddr_t)ALIGN(PS_STRINGS - szsigcode - STACKGAPLEN);
! fixed.flags = 0;
! /*
! * fix up Ultrix mount codes for UFS and NFS.
! * Other filesystem types (msdos, DEC ods-2) not yet done */
! if (otype == ULT_FSTYPE_UFS)
! fstype = "ufs";
! else if (otype == ULT_FSTYPE_NFS)
! fstype = "nfs";
! else
return (EINVAL);
!
! if (uap->rdonly)
! fixed.flags |= MNT_RDONLY;
! /* copy string-ified version of mount type in user space */
! fixed.type = (char *)usp;
! if (error = copyout(fstype, fixed.type, strlen(fstype)+1)) {
return (error);
+
+ }
+ usp += strlen(fstype)+1;
! #ifdef later
! parse ultrix mount option string and set flags
! #endif
! fixed.dir = uap->dir;
!
! if (otype == ULT_FSTYPE_UFS) {
! struct ufs_args ua;
!
! ua.fspec = uap->special;
! bzero(&ua.export, sizeof(ua.export));
! fixed.data = usp;
!
! if (error = copyout(&ua, fixed.data, sizeof ua)) {
! return(error);
! }
! } else if (otype == ULT_FSTYPE_NFS) {
! struct ult_nfs_args una;
struct nfs_args na;
! struct osockaddr_in osa;
! struct sockaddr_in *sap = (struct sockaddr_in *)& osa;
! bzero(&osa, sizeof(osa));
! bzero(&una, sizeof(una));
!
! if (error = copyin(uap->data, &una, sizeof una)) {
! printf("ult_mount: nfs, copyin una\n");
! /*return (error);*/
! }
! #ifdef COMPAT_DEBUG
! /*XXX*/ printf("ultrix mount: ipa %x, fh ptr 0x%x, h 0x%x\n",
! una.addr, una.fh, una.hostname);
! /*XXX*/ printf("ultrix mount: flags %x gfl rsize %d w %d to %d retr %d\n",
! una.flags, una.gfs_flags, una.rsize, una.wsize, una.timeo, una.retrans);
! #endif
!
! if (error = copyin(una.addr, &osa, sizeof osa)) {
! printf("ult_mount: nfs copyin osa\n");
! /*return (error);*/
! }
!
! #ifdef COMPAT_DEBUG
! /*XXX*/ printf("ultrix mount: host %x\n", una.hostname);
! printf(" IP %x fam %d\n", ntohl(osa.sin_addr.s_addr),
! osa.sin_family);
! #endif
! sap->sin_family = (u_char)osa.sin_family;
! sap->sin_len = sizeof(*sap);
! fixed.data = usp;
! usp += sizeof (na);
! na.addr = (struct sockaddr *)usp;
! usp += sizeof(*sap);
! na.addrlen = sap->sin_len;
na.sotype = SOCK_DGRAM;
na.proto = IPPROTO_UDP;
! na.fh = una.fh;
! na.flags = /*una.flags;*/ NFSMNT_NOCONN | NFSMNT_RESVPORT;
! na.wsize = una.wsize;
! na.rsize = una.rsize;
! na.timeo = una.timeo;
! na.retrans = una.retrans;
! na.hostname = una.hostname;
! if (error = copyout(sap, na.addr, sizeof (*sap) )) {
return (error);
! }
! if (error = copyout(&na, fixed.data, sizeof na)) {
return (error);
+ }
+ }
+
+ /* juggle fields */
+ bcopy(&fixed, uap, sizeof(fixed));
+
+ #ifdef DEBUG
+ fsname[0] = 0;
+ copyinstr(fixed.type, fsname, sizeof fsname, (u_int*)0);
+ printf("mount: type \"%s\" ", fsname);
+
+ fsname[0] = 0;
+ error = copyinstr((caddr_t)fixed.dir, fsname, sizeof fsname,
+ (u_int*)0);
+ printf("on path \"%s\", flags 0x%x", fsname, fixed.flags);
+ if (error) printf("WARNING: copyinstr() failed\n");
+
+ if (otype == ULT_FSTYPE_UFS) {
+ struct ufs_args tem;
+ error = copyin(fixed.data, &tem, sizeof(tem));
+ if (error) printf("WARNING: copyin() ufs_args failed\n");
+ error = copyinstr((caddr_t)tem.fspec, fsname, sizeof fsname,
+ (u_int*)0);
+ if (error) printf("WARNING: copyinstr() fspec failed\n");
+ printf("special \"%s\"\n", fsname);
+ } else {
+ struct nfs_args na;
+ struct sockaddr_in sin;
+ if (error = copyin(fixed.data, &na, sizeof na)) {
+ printf("WARNING: nfs copyin na\n");
+ }
+ if (error = copyin(na.addr, &sin, sizeof sin)) {
+ printf("WARNING: nfs copyin sin\n");
+ }
+ fsname[0] = 0;
+ if (error = copyinstr(na.hostname, fsname, sizeof fsname,
+ (u_int*)0))
+ printf("WARNING: nfs hostname at 0x%x\n", na.hostname);
+ printf("host %s\n", fsname);
}
+ #endif
return (mount(p, uap, retval));
}
*** sys/compat/ultrix/syscalls.master.DIST Mon Aug 1 13:22:00 1994
--- sys/compat/ultrix/syscalls.master Tue Aug 16 23:51:24 1994
***************
*** 41,47 ****
18 COMPAT 2 sun_stat
19 STD 3 olseek lseek
20 STD 0 getpid
! 21 STD 4 sun_mount
22 STD 2 sun_unmount
23 COMPAT 1 setuid
24 STD 0 getuid
--- 41,47 ----
18 COMPAT 2 sun_stat
19 STD 3 olseek lseek
20 STD 0 getpid
! 21 STD 5 ultrix_mount
22 STD 2 sun_unmount
23 COMPAT 1 setuid
24 STD 0 getuid
***************
*** 190,196 ****
167 UNIMPL 0 nosys
168 STD 4 sun_quotactl
169 STD 2 sun_exportfs
! 170 STD 4 sun_mount
171 UNIMPL 4 hdwconf
#ifdef SYSVMSG
172 UNIMPL 0 msgctl
--- 190,196 ----
167 UNIMPL 0 nosys
168 STD 4 sun_quotactl
169 STD 2 sun_exportfs
! 170 STD 5 ultrix_mount
171 UNIMPL 4 hdwconf
#ifdef SYSVMSG
172 UNIMPL 0 msgctl
*** sys/ufs/ffs/ffs_vfsops.c.DIST Wed Jun 29 03:33:30 1994
--- sys/ufs/ffs/ffs_vfsops.c Tue Aug 16 03:11:08 1994
***************
*** 391,396 ****
--- 391,397 ----
}
/* XXX updating 4.2 FFS superblocks trashes rotational layout tables */
if (fs->fs_postblformat == FS_42POSTBLFMT && !ronly) {
+ /*DSG*/ printf("ffs_mountfs, ROFS, err %d... \n", error);
error = EROFS; /* XXX what should be returned? */
goto out;
}
*** sys/arch/pmax/dev/rz.c.DIST Tue Jun 14 03:27:45 1994
--- sys/arch/pmax/dev/rz.c Tue Aug 16 03:15:30 1994
***************
*** 89,94 ****
--- 89,104 ----
* (including the boot area).
*/
static struct size rzdefaultpart[MAXPARTITIONS] = {
+ #ifdef GENERIC /* greedy machines have 64 meg of swap */
+ 0, 32768, /* A */
+ 32768, 131072, /* B */
+ 0, 0, /* C */
+ 17408, 0, /* D */
+ 115712, 0, /* E */
+ 218112, 0, /* F */
+ 163840, 0, /* G */
+ 115712, 0, /* H */
+ #else
0, 16384, /* A */
16384, 65536, /* B */
0, 0, /* C */
***************
*** 97,102 ****
--- 107,113 ----
218112, 0, /* F */
81920, 0, /* G */
115712, 0, /* H */
+ #endif
};
#define RAWPART 2 /* 'c' partition */ /* XXX */
***************
*** 695,702 ****
msg = readdisklabel(dev, rzstrategy, lp, &cd);
if (msg == NULL)
return;
! #if 0
printf("rz%d: WARNING: %s\n", unit, msg);
sc->sc_label.d_magic = DISKMAGIC;
sc->sc_label.d_magic2 = DISKMAGIC;
sc->sc_label.d_type = DTYPE_SCSI;
--- 706,715 ----
msg = readdisklabel(dev, rzstrategy, lp, &cd);
if (msg == NULL)
return;
!
printf("rz%d: WARNING: %s\n", unit, msg);
+ #if 1
+ bzero(lp, sizeof (*lp));
sc->sc_label.d_magic = DISKMAGIC;
sc->sc_label.d_magic2 = DISKMAGIC;
sc->sc_label.d_type = DTYPE_SCSI;
***************
*** 709,717 ****
sc->sc_label.d_sbsize = SBSIZE;
for (i = 0; i < MAXPARTITIONS; i++) {
sc->sc_label.d_partitions[i].p_size =
! rzdefaultpart[i].nblocks;
sc->sc_label.d_partitions[i].p_offset =
rzdefaultpart[i].strtblk;
}
sc->sc_label.d_partitions[RAWPART].p_size = sc->sc_blks;
#endif
--- 722,734 ----
sc->sc_label.d_sbsize = SBSIZE;
for (i = 0; i < MAXPARTITIONS; i++) {
sc->sc_label.d_partitions[i].p_size =
! (rzdefaultpart[i].nblocks) ?
! rzdefaultpart[i].nblocks: sc->sc_blks;
sc->sc_label.d_partitions[i].p_offset =
rzdefaultpart[i].strtblk;
+ printf(" default rz%d%c: start %d len %d\n",
+ unit, "abcdefgh"[i],
+ rzdefaultpart[i].strtblk, rzdefaultpart[i].nblocks);
}
sc->sc_label.d_partitions[RAWPART].p_size = sc->sc_blks;
#endif
***************
*** 740,746 ****
--- 757,770 ----
lp = &sc->sc_label;
if (part >= lp->d_npartitions || lp->d_partitions[part].p_size == 0)
+ {
+ printf("rzopen: ENXIO on rz%d%c unit %d part %d\n",
+ unit, "abcdefg"[part], unit, part);
+ printf("# partions %d, size of %d = %d\n",
+ lp->d_npartitions, lp->d_partitions[part].p_size);
return (ENXIO);
+ }
+
/*
* Warn if a partition is opened that overlaps another
* already open, unless either is the `raw' partition
*** sys/arch/pmax/dev/if_le.c.DIST Mon Jul 25 04:31:59 1994
--- sys/arch/pmax/dev/if_le.c Wed Aug 17 02:01:48 1994
***************
*** 784,790 ****
}
#endif
m->m_flags |= flags;
- et.ether_type = eth_type;
ether_input(&le->sc_if, &et, m);
}
--- 784,789 ----
*** sys/arch/pmax/pmax/conf.c.DIST Mon May 30 04:08:16 1994
--- sys/arch/pmax/pmax/conf.c Mon Aug 15 23:43:46 1994
***************
*** 98,106 ****
struct bdevsw bdevsw[] =
{
! bdev_disk_init(NRZ,rz), /* 0: SCSI disk */
! bdev_swap_init(), /* 1: swap pseudo-device */
bdev_disk_init(NVN,vn), /* 2: vnode disk driver (swap to files) */
};
int nblkdev = sizeof (bdevsw) / sizeof (bdevsw[0]);
--- 98,127 ----
struct bdevsw bdevsw[] =
{
! bdev_notdef(), /* 0: SCSI disk */
! bdev_notdef(), /* 1: vax ht */
bdev_disk_init(NVN,vn), /* 2: vnode disk driver (swap to files) */
+ bdev_notdef(), /* 3: vax rk*/
+ bdev_swap_init(), /* 4: swap pseudo-device*/
+ bdev_notdef(), /* 5: vax tm */
+ bdev_notdef(), /* 6: vax ts */
+ bdev_notdef(), /* 7: vax mt */
+ bdev_notdef(), /* 8: vax tu */
+ bdev_notdef(), /* 9: ?? */
+ bdev_notdef(), /*10: ut */
+ bdev_notdef(), /*11: 11/730 idc */
+ bdev_notdef(), /*12: rx */
+ bdev_notdef(), /*13: uu */
+ bdev_notdef(), /*14: rl */
+ bdev_notdef(), /*15: tmscp */
+ bdev_notdef(), /*16: cs */
+ bdev_notdef(), /*17: md */
+ bdev_notdef(), /*18: st */
+ bdev_notdef(), /*19: sd */
+ bdev_notdef(), /*20: tz */
+ bdev_disk_init(NRZ,rz), /*21: SCSI disk */
+ bdev_notdef(), /*22: ?? */
+ bdev_notdef(), /*23: mscp */
};
int nblkdev = sizeof (bdevsw) / sizeof (bdevsw[0]);
***************
*** 269,280 ****
cdev_ctty_init(1,ctty), /* 1: controlling terminal */
cdev_mm_init(1,mm), /* 2: /dev/{null,mem,kmem,...} */
cdev_swap_init(1,sw), /* 3: /dev/drum (swap pseudo-device) */
! cdev_tty_init(NPTY,pts), /* 4: pseudo-tty slave */
! cdev_ptc_init(NPTY,ptc), /* 5: pseudo-tty master */
cdev_log_init(1,log), /* 6: /dev/klog */
cdev_fd_init(1,fd), /* 7: file descriptor pseudo-dev */
cdev_pm_init(NPM,pm), /* 8: frame buffer */
! cdev_disk_init(NRZ,rz), /* 9: SCSI disk */
cdev_tape_init(NTZ,tz), /* 10: SCSI tape */
cdev_vn_init(NVN,vn), /* 11: vnode disk */
cdev_bpf_init(NBPFILTER,bpf), /* 12: berkeley packet filter */
--- 290,301 ----
cdev_ctty_init(1,ctty), /* 1: controlling terminal */
cdev_mm_init(1,mm), /* 2: /dev/{null,mem,kmem,...} */
cdev_swap_init(1,sw), /* 3: /dev/drum (swap pseudo-device) */
! cdev_tty_init(NPTY,pts), /* 4: pseudo-tty slave */
! cdev_ptc_init(NPTY,ptc), /* 5: pseudo-tty master */
cdev_log_init(1,log), /* 6: /dev/klog */
cdev_fd_init(1,fd), /* 7: file descriptor pseudo-dev */
cdev_pm_init(NPM,pm), /* 8: frame buffer */
! cdev_notdef(), /* 9: old slot for SCSI disk */
cdev_tape_init(NTZ,tz), /* 10: SCSI tape */
cdev_vn_init(NVN,vn), /* 11: vnode disk */
cdev_bpf_init(NBPFILTER,bpf), /* 12: berkeley packet filter */
***************
*** 284,289 ****
--- 305,378 ----
cdev_tty_init(NDC,dc), /* 16: dc7085 serial interface */
cdev_tty_init(NSCC,scc), /* 17: scc 82530 serial interface */
cdev_pm_init(NMFB,mfb), /* 18: mono frame buffer */
+ cdev_notdef(), /* 19: mt */
+ cdev_ptc_init(NPTY,ptc), /* 20: pty master */
+ cdev_tty_init(NPTY,pts), /* 21: pty slave */
+ cdev_notdef(), /* 22: dmf */
+ cdev_notdef(), /* 23: vax 730 idc */
+ cdev_notdef(), /* 24: dn-11 */
+
+ /* 25-28 CSRG reserved to local sites, DEC sez: */
+ cdev_notdef(), /* 25: gpib */
+ cdev_notdef(), /* 26: lpa */
+ cdev_notdef(), /* 27: psi */
+ cdev_notdef(), /* 28: ib */
+ cdev_notdef(), /* 29: ad */
+ cdev_notdef(), /* 30: rx */
+ cdev_notdef(), /* 31: ik */
+ cdev_notdef(), /* 32: rl-11 */
+ cdev_notdef(), /* 33: dhu/dhv */
+ cdev_notdef(), /* 34: Vax Able dmz, mips dc */
+ cdev_notdef(), /* 35: qv */
+ cdev_notdef(), /* 36: tmscp */
+ cdev_notdef(), /* 37: vs */
+ cdev_notdef(), /* 38: vax cn console */
+ cdev_notdef(), /* 39: lta */
+ cdev_notdef(), /* 40: crl (Venus, aka 8600 aka 11/790 console RL02) */
+ cdev_notdef(), /* 41: cs */
+ cdev_notdef(), /* 42: qd, Qdss, vcb02 */
+ cdev_notdef(), /* 43: errlog (VMS-lookalike puke) */
+ cdev_notdef(), /* 44: dmb */
+ cdev_notdef(), /* 45: vax ss, mips scc */
+ cdev_notdef(), /* 46: st */
+ cdev_notdef(), /* 47: sd */
+ cdev_notdef(), /* 48: Ultrix /dev/trace */
+ cdev_notdef(), /* 49: sm (sysV shm?) */
+ cdev_notdef(), /* 50 sg */
+ cdev_notdef(), /* 51: sh tty */
+ cdev_notdef(), /* 52: its */
+ cdev_notdef(), /* 53: nodev */
+ cdev_notdef(), /* 54: nodev */
+ cdev_notdef(), /* 55: tz */
+ cdev_disk_init(NRZ,rz), /* 56: rz scsi, Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 57: nodev */
+ cdev_notdef(), /* 58: fc */
+ cdev_notdef(), /* 59: mscp, again Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 60: mscp, again Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 61: mscp, again Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 62: mscp, again Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 63: mscp, again Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 64: mscp, again Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 65: mscp, again Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 66: mscp, again Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 67: mscp, again Ultrix gross coupling to PrestoServe driver */
+ cdev_notdef(), /* 68: ld */
+ cdev_notdef(), /* 69: /dev/audit */
+ cdev_notdef(), /* 70: Mogul (nee' CMU) packetfilter */
+ cdev_notdef(), /* 71: xcons, mips Ultrix /dev/xcons virtual console nightmare */
+ cdev_notdef(), /* 72: xa */
+ cdev_notdef(), /* 73: utx */
+ cdev_notdef(), /* 74: sp */
+ cdev_notdef(), /* 75: pr Ultrix PrestoServe NVRAM pseudo-device control device */
+ cdev_notdef(), /* 76: ultrix disk shadowing */
+ cdev_notdef(), /* 77: ek */
+ cdev_notdef(), /* 78: msdup ? */
+ cdev_notdef(), /* 79: so-called multimedia audio A */
+ cdev_notdef(), /* 80: so-called multimedia audio B */
+ cdev_notdef(), /* 81: so-called multimedia video in */
+ cdev_notdef(), /* 82: so-called multimedia video out */
+ cdev_notdef(), /* 83: fd */
+ cdev_notdef(), /* 84: DTi */
};
int nchrdev = sizeof (cdevsw) / sizeof (cdevsw[0]);
***************
*** 348,354 ****
/* NOTREACHED */
}
! #define MAXDEV 19
static int chrtoblktbl[MAXDEV] = {
/* VCHR */ /* VBLK */
/* 0 */ NODEV,
--- 437,443 ----
/* NOTREACHED */
}
! #define MAXDEV 60
static int chrtoblktbl[MAXDEV] = {
/* VCHR */ /* VBLK */
/* 0 */ NODEV,
***************
*** 362,368 ****
/* 8 */ NODEV,
/* 9 */ 0,
/* 10 */ NODEV,
! /* 11 */ 2,
/* 12 */ NODEV,
/* 13 */ NODEV,
/* 14 */ NODEV,
--- 451,457 ----
/* 8 */ NODEV,
/* 9 */ 0,
/* 10 */ NODEV,
! /* 11 */ NODEV,
/* 12 */ NODEV,
/* 13 */ NODEV,
/* 14 */ NODEV,
***************
*** 370,375 ****
--- 459,505 ----
/* 16 */ NODEV,
/* 17 */ NODEV,
/* 18 */ NODEV,
+ /* 19 */ NODEV,
+ /* 20 */ NODEV,
+ /* 21 */ NODEV,
+ /* 22 */ NODEV,
+ /* 23 */ NODEV,
+ /* 24 */ NODEV,
+ /* 25 */ NODEV,
+ /* 26 */ NODEV,
+ /* 27 */ NODEV,
+ /* 28 */ NODEV,
+ /* 29 */ NODEV,
+ /* 30 */ NODEV,
+ /* 31 */ NODEV,
+ /* 32 */ NODEV,
+ /* 33 */ NODEV,
+ /* 34 */ NODEV,
+ /* 35 */ NODEV,
+ /* 36 */ NODEV,
+ /* 37 */ NODEV,
+ /* 38 */ NODEV,
+ /* 39 */ NODEV,
+ /* 40 */ NODEV,
+ /* 41 */ NODEV,
+ /* 42 */ NODEV,
+ /* 43 */ NODEV,
+ /* 44 */ NODEV,
+ /* 45 */ NODEV,
+ /* 46 */ NODEV,
+ /* 47 */ NODEV,
+ /* 48 */ NODEV,
+ /* 49 */ NODEV,
+ /* 50 */ NODEV,
+ /* 51 */ NODEV,
+ /* 52 */ NODEV,
+ /* 53 */ NODEV,
+ /* 54 */ NODEV,
+ /* 55 */ NODEV,
+ /* 56 */ 21,
+ /* 57 */ NODEV,
+ /* 58 */ NODEV,
+ /* 59 */ NODEV,
};
/*
* Routine to convert from character to block device number.
*** sys/arch/pmax/pmax/swapgeneric.c.DIST Thu Jun 16 03:22:16 1994
--- sys/arch/pmax/pmax/swapgeneric.c Mon Aug 15 20:15:50 1994
***************
*** 68,74 ****
char *gc_name;
dev_t gc_root;
} genericconf[] = {
! { (caddr_t)&rzdriver, "rz", makedev(0, 0), },
{ 0 },
};
--- 68,74 ----
char *gc_name;
dev_t gc_root;
} genericconf[] = {
! { (caddr_t)&rzdriver, "rz", makedev(21, 0), },
{ 0 },
};
------------------------------------------------------------------------------