summaryrefslogtreecommitdiff
path: root/share/examples/drivers/make_pseudo_driver.sh
diff options
context:
space:
mode:
Diffstat (limited to 'share/examples/drivers/make_pseudo_driver.sh')
-rw-r--r--share/examples/drivers/make_pseudo_driver.sh321
1 files changed, 0 insertions, 321 deletions
diff --git a/share/examples/drivers/make_pseudo_driver.sh b/share/examples/drivers/make_pseudo_driver.sh
deleted file mode 100644
index 72f9fc2f5fefc..0000000000000
--- a/share/examples/drivers/make_pseudo_driver.sh
+++ /dev/null
@@ -1,321 +0,0 @@
-#!/bin/sh
-# This writes a skeleton driver and puts it into the kernel tree for you
-#arg1 is lowercase "foo"
-#
-# Trust me, RUN THIS SCRIPT :)
-#
-#-------cut here------------------
-cd /sys/i386/conf
-
-if [ "${1}X" = "X" ]
-then
- echo "Hey , how about some help here.. give me a device name!"
- exit 1
-fi
-
-UPPER=`echo ${1} |tr "[:lower:]" "[:upper:]"`
-cat >files.${UPPER} <<DONE
-dev/${1}.c optional ${1} device-driver
-DONE
-
-cat >${UPPER} <<DONE
-# Configuration file for kernel type: ${UPPER}
-ident ${UPPER}
-# \$Id:\$"
-DONE
-
-grep -v GENERIC < GENERIC >>${UPPER}
-
-cat >>${UPPER} <<DONE
-# trust me, you'll need this
-options DDB
-pseudo-device ${1} 4 # might as well allow 4 of them
-DONE
-
-cat >../../dev/${1}.c <<DONE
-/*
- * Copyright ME
- *
- * ${1} driver
- * \$Id:\$
- */
-
-
-#include "${1}.h" /* generated file.. defines N${UPPER} */
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h> /* SYSINIT stuff */
-#include <sys/conf.h> /* cdevsw stuff */
-#include <sys/malloc.h> /* malloc region definitions */
-#include <machine/clock.h> /* DELAY() */
-#include <sys/${1}io.h> /* ${1} IOCTL definitions */
-#ifdef DEVFS
-#include <sys/devfsext.h> /* DEVFS defintitions */
-#endif /* DEVFS */
-
-
-
-/* Function prototypes (these should all be static except for ${1}intr()) */
-static d_open_t ${1}open;
-static d_close_t ${1}close;
-static d_read_t ${1}read;
-static d_write_t ${1}write;
-static d_ioctl_t ${1}ioctl;
-static d_mmap_t ${1}mmap;
-static d_select_t ${1}select;
-
-#define CDEV_MAJOR 20
-static struct cdevsw ${1}_cdevsw = {
- ${1}open,
- ${1}close,
- ${1}read,
- ${1}write,
- ${1}ioctl,
- nullstop,
- nullreset,
- nodevtotty,
- ${1}select,
- ${1}mmap,
- NULL,
- "${1}",
- NULL,
- -1 };
-
-/*
- * device specific Misc defines
- */
-#define BUFFERSIZE 1024
-#define UNIT(dev) minor(dev) /* assume one minor number per unit */
-
-/*
- * One of these per allocated device
- */
-struct ${1}_softc {
- struct isa_device *dev;
- char buffer[BUFFERSIZE];
-#ifdef DEVFS
- static void *devfs_token;
-#endif
-} ;
-
-typedef struct ${1}_softc *sc_p;
-
-static sc_p sca[N${UPPER}];
-
-/*
- * Macro to check that the unit number is valid
- * Often this isn't needed as once the open() is performed,
- * the unit number is pretty much safe.. The exception would be if we
- * implemented devices that could "go away". in which case all these routines
- * would be wise to check the number, DIAGNOSTIC or not.
- */
-#define CHECKUNIT(RETVAL) \
-do { /* the do-while is a safe way to do this grouping */ \
- if (unit > N${UPPER}) { \
- printf(__FUNCTION__ ":bad unit $d\n", unit); \
- return (RETVAL); \
- } \
- if (scp == NULL) { \
- printf( __FUNCTION__ ": unit $d not attached\n", unit);\
- return (RETVAL); \
- } \
-} while (0)
-#ifdef DIAGNOSTIC
-#define CHECKUNIT_DIAG(RETVAL) CHECKUNIT(RETVAL)
-#else /* DIAGNOSTIC */
-#define CHECKUNIT_DIAG(RETVAL)
-#endif /* DIAGNOSTIC */
-
-int ${1}ioctl (dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
-{
- int unit = UNIT (dev);
- sc_p scp = sca[unit];
-
- CHECKUNIT_DIAG(ENXIO);
-
- switch (cmd) {
- case DHIOCRESET:
- /* whatever resets it */
- outb(scp->dev->id_iobase, 0xff);
- break;
- default:
- return ENXIO;
- }
- return (0);
-}
-/*
- * You also need read, write, open, close routines.
- * This should get you started
- */
-static int
-${1}open(dev_t dev, int oflags, int devtype, struct proc *p)
-{
- int unit = UNIT (dev);
- sc_p scp = sca[unit];
-
- CHECKUNIT(ENXIO);
-
- /*
- * Do processing
- */
- return (0);
-}
-
-static int
-${1}close(dev_t dev, int fflag, int devtype, struct proc *p)
-{
- int unit = UNIT (dev);
- sc_p scp = sca[unit];
-
- CHECKUNIT_DIAG(ENXIO);
-
- /*
- * Do processing
- */
- return (0);
-}
-
-static int
-${1}read(dev_t dev, struct uio *uio, int ioflag)
-{
- int unit = UNIT (dev);
- sc_p scp = sca[unit];
- int toread;
-
-
- CHECKUNIT_DIAG(ENXIO);
-
- /*
- * Do processing
- * read from buffer
- */
- toread = (min(uio->uio_resid, sizeof(scp->buffer)));
- return(uiomove(scp->buffer, toread, uio));
-}
-
-static int
-${1}write(dev_t dev, struct uio *uio, int ioflag)
-{
- int unit = UNIT (dev);
- sc_p scp = sca[unit];
- int towrite;
-
- CHECKUNIT_DIAG(ENXIO);
-
- /*
- * Do processing
- * write to buffer
- */
- towrite = (min(uio->uio_resid, sizeof(scp->buffer)));
- return(uiomove(scp->buffer, towrite, uio));
-}
-
-static int
-${1}mmap(dev_t dev, int offset, int nprot)
-{
- int unit = UNIT (dev);
- sc_p scp = sca[unit];
-
- CHECKUNIT_DIAG(-1);
-
- /*
- * Do processing
- */
-#if 0 /* if we had a frame buffer or whatever.. do this */
- if (offset > FRAMEBUFFERSIZE - PAGE_SIZE) {
- return (-1);
- }
- return i386_btop((FRAMEBASE + offset));
-#else
- return (-1);
-#endif
-}
-
-static int
-${1}select(dev_t dev, int which, struct proc *p)
-{
- int unit = UNIT (dev);
- sc_p scp = sca[unit];
-
- CHECKUNIT_DIAG(ENXIO);
-
- /*
- * Do processing
- */
- return (0); /* this is the wrong value I'm sure */
-}
-
-/*
- * Now for some driver initialisation.
- * Occurs ONCE during boot (very early).
- */
-static void
-${1}_drvinit(void *unused)
-{
- dev_t dev;
- int unit;
- sc_p scp = sca[unit];
-
- dev = makedev(CDEV_MAJOR, 0);
- cdevsw_add(&dev, &${1}_cdevsw, NULL);
- for (unit = 0; unit < N${UPPER}; unit++) {
- /*
- * Allocate storage for this instance .
- */
- scp = malloc(sizeof(*scp), M_DEVBUF, M_NOWAIT);
- if( scp == NULL) {
- printf("${1}%d failed to allocate strorage\n", unit);
- return ;
- }
- bzero(scp, sizeof(*scp));
- sca[unit] = scp;
-#if DEVFS
- scp->devfs_token = devfs_add_devswf(&${1}_cdevsw, unit, DV_CHR,
- UID_ROOT, GID_KMEM, 0640, "${1}%d", unit);
-#endif
- }
-}
-
-SYSINIT(${1}dev, SI_SUB_DRIVERS, SI_ORDER_MIDDLE+CDEV_MAJOR,
- ${1}_drvinit, NULL)
-
-
-DONE
-
-cat >../../sys/${1}io.h <<DONE
-/*
- * Definitions needed to access the ${1} device (ioctls etc)
- * see mtio.h , ioctl.h as examples
- */
-#ifndef SYS_DHIO_H
-#define SYS_DHIO_H
-
-#ifndef KERNEL
-#include <sys/types.h>
-#endif
-#include <sys/ioccom.h>
-
-/*
- * define an ioctl here
- */
-#define DHIOCRESET _IO('D', 0) /* reset the ${1} device */
-#endif
-DONE
-
-config ${UPPER}
-cd ../../compile/${UPPER}
-make depend
-make ${1}.o
-make
-exit
-
-#--------------end of script---------------
-#
-#you also need to add an entry into the cdevsw[]
-#array in conf.c, but it's too hard to do in a script..
-#
-#edit to your taste..
-#
-#
-
-