svn commit: r40051 - head/en_US.ISO8859-1/books/arch-handbook/driverbasics
Eitan Adler
eadler at FreeBSD.org
Sat Nov 17 06:02:42 UTC 2012
Author: eadler
Date: Sat Nov 17 06:02:41 2012
New Revision: 40051
URL: http://svnweb.freebsd.org/changeset/doc/40051
Log:
Remove ancient example code from the architecture handbook.
Approved by: bcr (mentor)
Modified:
head/en_US.ISO8859-1/books/arch-handbook/driverbasics/chapter.xml
Modified: head/en_US.ISO8859-1/books/arch-handbook/driverbasics/chapter.xml
==============================================================================
--- head/en_US.ISO8859-1/books/arch-handbook/driverbasics/chapter.xml Sat Nov 17 05:26:13 2012 (r40050)
+++ head/en_US.ISO8859-1/books/arch-handbook/driverbasics/chapter.xml Sat Nov 17 06:02:41 2012 (r40051)
@@ -208,171 +208,7 @@ KMOD=skeleton
<para>This simple example pseudo-device remembers whatever values
you write to it and can then supply them back to you when you
- read from it. Two versions are shown, one for &os; 4.X and
- one for &os; 5.X.</para>
-
- <example>
- <title>Example of a Sample Echo Pseudo-Device Driver for
- &os; 4.X</title>
-
- <programlisting>/*
- * Simple `echo' pseudo-device KLD
- *
- * Murray Stokely
- */
-
-#define MIN(a,b) (((a) < (b)) ? (a) : (b))
-
-#include <sys/types.h>
-#include <sys/module.h>
-#include <sys/systm.h> /* uprintf */
-#include <sys/errno.h>
-#include <sys/param.h> /* defines used in kernel.h */
-#include <sys/kernel.h> /* types used in module initialization */
-#include <sys/conf.h> /* cdevsw struct */
-#include <sys/uio.h> /* uio struct */
-#include <sys/malloc.h>
-
-#define BUFFERSIZE 256
-
-/* Function prototypes */
-d_open_t echo_open;
-d_close_t echo_close;
-d_read_t echo_read;
-d_write_t echo_write;
-
-/* Character device entry points */
-static struct cdevsw echo_cdevsw = {
- echo_open,
- echo_close,
- echo_read,
- echo_write,
- noioctl,
- nopoll,
- nommap,
- nostrategy,
- "echo",
- 33, /* reserved for lkms - /usr/src/sys/conf/majors */
- nodump,
- nopsize,
- D_TTY,
- -1
-};
-
-typedef struct s_echo {
- char msg[BUFFERSIZE];
- int len;
-} t_echo;
-
-/* vars */
-static dev_t sdev;
-static int count;
-static t_echo *echomsg;
-
-MALLOC_DECLARE(M_ECHOBUF);
-MALLOC_DEFINE(M_ECHOBUF, "echobuffer", "buffer for echo module");
-
-/*
- * This function is called by the kld[un]load(2) system calls to
- * determine what actions to take when a module is loaded or unloaded.
- */
-
-static int
-echo_loader(struct module *m, int what, void *arg)
-{
- int err = 0;
-
- switch (what) {
- case MOD_LOAD: /* kldload */
- sdev = make_dev(<literal>&</literal>echo_cdevsw,
- 0,
- UID_ROOT,
- GID_WHEEL,
- 0600,
- "echo");
- /* kmalloc memory for use by this driver */
- MALLOC(echomsg, t_echo *, sizeof(t_echo), M_ECHOBUF, M_WAITOK);
- printf("Echo device loaded.\n");
- break;
- case MOD_UNLOAD:
- destroy_dev(sdev);
- FREE(echomsg,M_ECHOBUF);
- printf("Echo device unloaded.\n");
- break;
- default:
- err = EOPNOTSUPP;
- break;
- }
- return(err);
-}
-
-int
-echo_open(dev_t dev, int oflags, int devtype, struct proc *p)
-{
- int err = 0;
-
- uprintf("Opened device \"echo\" successfully.\n");
- return(err);
-}
-
-int
-echo_close(dev_t dev, int fflag, int devtype, struct proc *p)
-{
- uprintf("Closing device \"echo.\"\n");
- return(0);
-}
-
-/*
- * The read function just takes the buf that was saved via
- * echo_write() and returns it to userland for accessing.
- * uio(9)
- */
-
-int
-echo_read(dev_t dev, struct uio *uio, int ioflag)
-{
- int err = 0;
- int amt;
-
- /*
- * How big is this read operation? Either as big as the user wants,
- * or as big as the remaining data
- */
- amt = MIN(uio->uio_resid, (echomsg->len - uio->uio_offset > 0) ?
- echomsg->len - uio->uio_offset : 0);
- if ((err = uiomove(echomsg->msg + uio->uio_offset,amt,uio)) != 0) {
- uprintf("uiomove failed!\n");
- }
- return(err);
-}
-
-/*
- * echo_write takes in a character string and saves it
- * to buf for later accessing.
- */
-
-int
-echo_write(dev_t dev, struct uio *uio, int ioflag)
-{
- int err = 0;
-
- /* Copy the string in from user memory to kernel memory */
- err = copyin(uio->uio_iov->iov_base, echomsg->msg,
- MIN(uio->uio_iov->iov_len, BUFFERSIZE - 1));
-
- /* Now we need to null terminate, then record the length */
- *(echomsg->msg + MIN(uio->uio_iov->iov_len, BUFFERSIZE - 1)) = 0;
- echomsg->len = MIN(uio->uio_iov->iov_len, BUFFERSIZE);
-
- if (err != 0) {
- uprintf("Write failed: bad address!\n");
- }
- count++;
- return(err);
-}
-
-DEV_MODULE(echo,echo_loader,NULL);</programlisting>
- </example>
+ read from it.</para>
<example>
<title>Example of a Sample Echo Pseudo-Device Driver for
More information about the svn-doc-all
mailing list