summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/init_main.c11
-rw-r--r--sys/kern/kern_conf.c31
-rw-r--r--sys/kern/kern_descrip.c27
-rw-r--r--sys/kern/subr_disk.c13
-rw-r--r--sys/kern/subr_diskslice.c10
-rw-r--r--sys/kern/tty_pty.c33
-rw-r--r--sys/kern/vfs_conf.c59
-rw-r--r--sys/kern/vfs_mount.c59
8 files changed, 47 insertions, 196 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c
index 0229c56..1a2644b 100644
--- a/sys/kern/init_main.c
+++ b/sys/kern/init_main.c
@@ -43,7 +43,6 @@
*/
#include "opt_init_path.h"
-#include "opt_devfs.h"
#include <sys/param.h>
#include <sys/file.h>
@@ -62,6 +61,7 @@
#include <sys/vmmeter.h>
#include <sys/unistd.h>
#include <sys/malloc.h>
+#include <sys/conf.h>
#include <machine/cpu.h>
@@ -499,10 +499,11 @@ start_init(void *dummy)
(void)subyte(--ucp, 'C');
options = 1;
#endif
-#ifdef DEVFS
- (void)subyte(--ucp, 'd');
- options = 1;
-#endif
+ if (devfs_present) {
+ (void)subyte(--ucp, 'd');
+ options = 1;
+ }
+
if (options == 0)
(void)subyte(--ucp, '-');
(void)subyte(--ucp, '-'); /* leading hyphen */
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index 1e344e3..fb15afd 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -42,6 +42,7 @@
#include <sys/conf.h>
#include <sys/vnode.h>
#include <sys/queue.h>
+#include <sys/ctype.h>
#include <machine/stdarg.h>
#define cdevsw_ALLOCSTART (NUMCDEVSW/2)
@@ -69,7 +70,8 @@ static LIST_HEAD(, specinfo) dev_hash[DEVT_HASH];
static LIST_HEAD(, specinfo) dev_free;
devfs_create_t *devfs_create_hook;
-devfs_remove_t *devfs_remove_hook;
+devfs_destroy_t *devfs_destroy_hook;
+int devfs_present;
static int free_devt;
SYSCTL_INT(_debug, OID_AUTO, free_devt, CTLFLAG_RW, &free_devt, 0, "");
@@ -352,8 +354,8 @@ make_dev_alias(dev_t pdev, char *fmt, ...)
void
destroy_dev(dev_t dev)
{
- if (devfs_remove_hook)
- devfs_remove_hook(dev);
+ if (devfs_destroy_hook)
+ devfs_destroy_hook(dev);
dev->si_drv1 = 0;
dev->si_drv2 = 0;
dev->si_devsw = 0;
@@ -381,3 +383,26 @@ devtoname(dev_t dev)
}
return (dev->si_name);
}
+
+int
+dev_stdclone(char *name, char **namep, char *stem, int *unit)
+{
+ int u, i;
+
+ if (bcmp(stem, name, strlen(stem)) != 0)
+ return (0);
+ i = strlen(stem);
+ if (!isdigit(name[i]))
+ return (0);
+ u = 0;
+ while (isdigit(name[i])) {
+ u *= 10;
+ u += name[i++] - '0';
+ }
+ *unit = u;
+ if (namep)
+ *namep = &name[i];
+ if (name[i])
+ return (2);
+ return (1);
+}
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index a7f917f..6648917 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -40,7 +40,6 @@
*/
#include "opt_compat.h"
-#include "opt_devfs.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/sysproto.h>
@@ -62,12 +61,6 @@
#include <vm/vm.h>
#include <vm/vm_extern.h>
-#ifdef DEVFS
-#include <sys/ctype.h>
-#include <sys/eventhandler.h>
-#include <fs/devfs/devfs.h>
-#endif
-
static MALLOC_DEFINE(M_FILEDESC, "file desc", "Open file descriptor table");
MALLOC_DEFINE(M_FILE, "file", "Open file structure");
static MALLOC_DEFINE(M_SIGIO, "sigio", "sigio structures");
@@ -1322,7 +1315,6 @@ SYSCTL_INT(_kern, KERN_MAXFILES, maxfiles, CTLFLAG_RW,
SYSCTL_INT(_kern, OID_AUTO, openfiles, CTLFLAG_RD,
&nfiles, 0, "System-wide number of open files");
-#ifdef DEVFS
static void
fildesc_clone(void *arg, char *name, int namelen, dev_t *dev)
{
@@ -1330,14 +1322,13 @@ fildesc_clone(void *arg, char *name, int namelen, dev_t *dev)
if (*dev != NODEV)
return;
- if (devfs_stdclone(name, NULL, "fd/", &u) != 1)
+ if (dev_stdclone(name, NULL, "fd/", &u) != 1)
return;
if (u <= 2)
return;
*dev = make_dev(&fildesc_cdevsw, u, UID_BIN, GID_BIN, 0666, name);
return;
}
-#endif
static void
fildesc_drvinit(void *unused)
@@ -1350,16 +1341,14 @@ fildesc_drvinit(void *unused)
make_dev_alias(dev, "stdout");
dev = make_dev(&fildesc_cdevsw, 2, UID_BIN, GID_BIN, 0666, "fd/2");
make_dev_alias(dev, "stderr");
-#ifdef DEVFS
- EVENTHANDLER_REGISTER(devfs_clone, fildesc_clone, 0, 1000);
-#else
- {
- int fd;
-
- for (fd = 3; fd < NUMFDESC; fd++)
- make_dev(&fildesc_cdevsw, fd, UID_BIN, GID_BIN, 0666, "fd/%d", fd);
+ EVENTHANDLER_REGISTER(dev_clone, fildesc_clone, 0, 1000);
+ if (!devfs_present) {
+ int fd;
+
+ for (fd = 3; fd < NUMFDESC; fd++)
+ make_dev(&fildesc_cdevsw, fd, UID_BIN, GID_BIN, 0666,
+ "fd/%d", fd);
}
-#endif
}
struct fileops badfileops = {
diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c
index 77fc4ee..325038c 100644
--- a/sys/kern/subr_disk.c
+++ b/sys/kern/subr_disk.c
@@ -10,8 +10,6 @@
*
*/
-#include "opt_devfs.h"
-
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
@@ -22,12 +20,7 @@
#include <sys/malloc.h>
#include <sys/sysctl.h>
#include <machine/md_var.h>
-
-#ifdef DEVFS
-#include <sys/eventhandler.h>
-#include <fs/devfs/devfs.h>
#include <sys/ctype.h>
-#endif
MALLOC_DEFINE(M_DISK, "disk", "disk data");
@@ -39,7 +32,6 @@ static d_psize_t diskpsize;
static LIST_HEAD(, disk) disklist = LIST_HEAD_INITIALIZER(&disklist);
-#ifdef DEVFS
static void
disk_clone(void *arg, char *name, int namelen, dev_t *dev)
{
@@ -95,7 +87,6 @@ disk_clone(void *arg, char *name, int namelen, dev_t *dev)
return;
}
}
-#endif
static void
inherit_raw(dev_t pdev, dev_t dev)
@@ -138,9 +129,7 @@ disk_create(int unit, struct disk *dp, int flags, struct cdevsw *cdevsw, struct
dp->d_devsw = cdevsw;
LIST_INSERT_HEAD(&disklist, dp, d_list);
if (!once) {
-#ifdef DEVFS
- EVENTHANDLER_REGISTER(devfs_clone, disk_clone, 0, 1000);
-#endif
+ EVENTHANDLER_REGISTER(dev_clone, disk_clone, 0, 1000);
once++;
}
return (dev);
diff --git a/sys/kern/subr_diskslice.c b/sys/kern/subr_diskslice.c
index 8d5d4ab..eed211c 100644
--- a/sys/kern/subr_diskslice.c
+++ b/sys/kern/subr_diskslice.c
@@ -46,8 +46,6 @@
* $FreeBSD$
*/
-#include "opt_devfs.h"
-
#include <stddef.h>
#include <sys/param.h>
@@ -465,16 +463,13 @@ dsioctl(dev, cmd, data, flags, sspp)
S_IFCHR, ssp->dss_oflags, sspp,
lp);
if (error != 0) {
- /* XXX should free devfs toks. */
free(lp, M_DEVBUF);
- /* XXX should restore devfs toks. */
*sspp = ssp;
return (EBUSY);
}
}
}
- /* XXX devfs tokens? */
free(lp, M_DEVBUF);
dsgone(&ssp);
return (0);
@@ -693,10 +688,7 @@ dsopen(dev, mode, flags, sspp, lp)
ssp->dss_slices[WHOLE_DISK_SLICE].ds_wlabel = TRUE;
}
- /*
- * Initialize secondary info for all slices. It is needed for more
- * than the current slice in the DEVFS case.
- */
+ /* Initialize secondary info for all slices. */
for (slice = 0; slice < ssp->dss_nslices; slice++) {
sp = &ssp->dss_slices[slice];
if (sp->ds_label != NULL
diff --git a/sys/kern/tty_pty.c b/sys/kern/tty_pty.c
index d4402cd..e8e7bbe 100644
--- a/sys/kern/tty_pty.c
+++ b/sys/kern/tty_pty.c
@@ -39,7 +39,6 @@
* (Actually two drivers, requiring two entries in 'cdevsw')
*/
#include "opt_compat.h"
-#include "opt_devfs.h"
#include <sys/param.h>
#include <sys/systm.h>
#if defined(COMPAT_43) || defined(COMPAT_SUNOS)
@@ -55,11 +54,6 @@
#include <sys/signalvar.h>
#include <sys/malloc.h>
-#ifdef DEVFS
-#include <sys/eventhandler.h>
-#include <fs/devfs/devfs.h>
-#endif
-
MALLOC_DEFINE(M_PTY, "ptys", "pty data structures");
static void ptsstart __P((struct tty *tp));
@@ -177,23 +171,8 @@ ptsopen(dev, flag, devtype, p)
int error;
struct pt_ioctl *pti;
-#ifndef DEVFS
- {
- int minr = lminor(dev);
- /*
- * If we openned this device, ensure we have the
- * next one too, so people can open it.
- */
- if (minr < 255) {
- dev_t nextdev = makedev(major(dev), minr + 1);
- if (!nextdev->si_drv1) {
- ptyinit(minr + 1);
- }
- }
if (!dev->si_drv1)
ptyinit(minor(dev));
- }
-#endif
if (!dev->si_drv1)
return(ENXIO);
pti = dev->si_drv1;
@@ -355,10 +334,8 @@ ptcopen(dev, flag, devtype, p)
register struct tty *tp;
struct pt_ioctl *pti;
-#ifndef DEVFS
if (!dev->si_drv1)
ptyinit(minor(dev));
-#endif
if (!dev->si_drv1)
return(ENXIO);
tp = dev->si_tty;
@@ -826,7 +803,6 @@ ptyioctl(dev, cmd, data, flag, p)
static void ptc_drvinit __P((void *unused));
-#ifdef DEVFS
static void pty_clone __P((void *arg, char *name, int namelen, dev_t *dev));
static void
@@ -865,20 +841,13 @@ pty_clone(arg, name, namelen, dev)
return;
}
-
-#endif
-
static void
ptc_drvinit(unused)
void *unused;
{
-#ifdef DEVFS
- EVENTHANDLER_REGISTER(devfs_clone, pty_clone, 0, 1000);
-#else
+ EVENTHANDLER_REGISTER(dev_clone, pty_clone, 0, 1000);
cdevsw_add(&pts_cdevsw);
cdevsw_add(&ptc_cdevsw);
- ptyinit(0);
-#endif
}
SYSINIT(ptcdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR_C,ptc_drvinit,NULL)
diff --git a/sys/kern/vfs_conf.c b/sys/kern/vfs_conf.c
index c75ba40..34d4afb 100644
--- a/sys/kern/vfs_conf.c
+++ b/sys/kern/vfs_conf.c
@@ -43,7 +43,6 @@
*/
#include "opt_rootdevname.h"
-#include "opt_devfs.h"
#include <sys/param.h>
#include <sys/kernel.h>
@@ -63,11 +62,6 @@
#include <ddb/ddb.h>
#endif
-#ifdef DEVFS
-#include <sys/eventhandler.h>
-#include <fs/devfs/devfs.h>
-#endif
-
MALLOC_DEFINE(M_MOUNT, "mount", "vfs mount structure");
#define ROOTNAME "root_device"
@@ -326,7 +320,6 @@ gets(char *cp)
*/
dev_t
getdiskbyname(char *name) {
-#ifdef DEVFS
char *cp;
dev_t dev;
@@ -335,58 +328,8 @@ getdiskbyname(char *name) {
cp += 5;
dev = NODEV;
- EVENTHANDLER_INVOKE(devfs_clone, cp, strlen(cp), &dev);
+ EVENTHANDLER_INVOKE(dev_clone, cp, strlen(cp), &dev);
return (dev);
-
-#else
- char *cp;
- int cd, unit, slice, part;
- dev_t dev;
-
- slice = 0;
- part = 0;
- cp = rindex(name, '/');
- if (cp != NULL) {
- name = cp + 1;
- }
- cp = name;
- while (cp != '\0' && (*cp < '0' || *cp > '9'))
- cp++;
- if (cp == name) {
- printf("missing device name\n");
- return (NODEV);
- }
- if (*cp == '\0') {
- printf("missing unit number\n");
- return (NODEV);
- }
- unit = *cp - '0';
- *cp++ = '\0';
- for (cd = 0; cd < NUMCDEVSW; cd++) {
- dev = makedev(cd, 0);
- if (devsw(dev) != NULL &&
- strcmp(devsw(dev)->d_name, name) == 0)
- goto gotit;
- }
- printf("no such device '%s'\n", name);
- return (NODEV);
-gotit:
- while (*cp >= '0' && *cp <= '9')
- unit += 10 * unit + *cp++ - '0';
- if (*cp == 's' && cp[1] >= '0' && cp[1] <= '9') {
- slice = cp[1] - '0' + 1;
- cp += 2;
- }
- if (*cp >= 'a' && *cp <= 'h') {
- part = *cp - 'a';
- cp++;
- }
- if (*cp != '\0') {
- printf("junk after name\n");
- return (NODEV);
- }
- return (makedev(cd, dkmakeminor(unit, slice, part)));
-#endif
}
/*
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index c75ba40..34d4afb 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -43,7 +43,6 @@
*/
#include "opt_rootdevname.h"
-#include "opt_devfs.h"
#include <sys/param.h>
#include <sys/kernel.h>
@@ -63,11 +62,6 @@
#include <ddb/ddb.h>
#endif
-#ifdef DEVFS
-#include <sys/eventhandler.h>
-#include <fs/devfs/devfs.h>
-#endif
-
MALLOC_DEFINE(M_MOUNT, "mount", "vfs mount structure");
#define ROOTNAME "root_device"
@@ -326,7 +320,6 @@ gets(char *cp)
*/
dev_t
getdiskbyname(char *name) {
-#ifdef DEVFS
char *cp;
dev_t dev;
@@ -335,58 +328,8 @@ getdiskbyname(char *name) {
cp += 5;
dev = NODEV;
- EVENTHANDLER_INVOKE(devfs_clone, cp, strlen(cp), &dev);
+ EVENTHANDLER_INVOKE(dev_clone, cp, strlen(cp), &dev);
return (dev);
-
-#else
- char *cp;
- int cd, unit, slice, part;
- dev_t dev;
-
- slice = 0;
- part = 0;
- cp = rindex(name, '/');
- if (cp != NULL) {
- name = cp + 1;
- }
- cp = name;
- while (cp != '\0' && (*cp < '0' || *cp > '9'))
- cp++;
- if (cp == name) {
- printf("missing device name\n");
- return (NODEV);
- }
- if (*cp == '\0') {
- printf("missing unit number\n");
- return (NODEV);
- }
- unit = *cp - '0';
- *cp++ = '\0';
- for (cd = 0; cd < NUMCDEVSW; cd++) {
- dev = makedev(cd, 0);
- if (devsw(dev) != NULL &&
- strcmp(devsw(dev)->d_name, name) == 0)
- goto gotit;
- }
- printf("no such device '%s'\n", name);
- return (NODEV);
-gotit:
- while (*cp >= '0' && *cp <= '9')
- unit += 10 * unit + *cp++ - '0';
- if (*cp == 's' && cp[1] >= '0' && cp[1] <= '9') {
- slice = cp[1] - '0' + 1;
- cp += 2;
- }
- if (*cp >= 'a' && *cp <= 'h') {
- part = *cp - 'a';
- cp++;
- }
- if (*cp != '\0') {
- printf("junk after name\n");
- return (NODEV);
- }
- return (makedev(cd, dkmakeminor(unit, slice, part)));
-#endif
}
/*
OpenPOWER on IntegriCloud