home *** CD-ROM | disk | FTP | other *** search
- /*
- * ddi.c Implement the Device Driver Interface (DDI) routines.
- * Currently, this is only used by the NET layer of LINUX,
- * but it eventually might move to an upper directory of
- * the system.
- *
- * Version: @(#)ddi.c 1.0.5 04/22/93
- *
- * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
- */
- #include <asm/segment.h>
- #include <asm/system.h>
- #include <linux/types.h>
- #include <linux/config.h>
- #include <linux/kernel.h>
- #include <linux/sched.h>
- #include <linux/string.h>
- #include <linux/mm.h>
- #include <linux/socket.h>
- #include <linux/ddi.h>
-
-
- #undef DDI_DEBUG
- #ifdef DDI_DEBUG
- # define PRINTK(x) printk x
- #else
- # define PRINTK(x) /**/
- #endif
-
-
- extern struct ddi_device devices[]; /* device driver map */
- extern struct ddi_proto protocols[]; /* network protocols */
-
-
- /*
- * This function gets called with an ASCII string representing the
- * ID of some DDI driver. We loop through the DDI Devices table
- * and return the address of the control block that has a matching
- * "name" field. It is used by upper-level layers that want to
- * dynamically bind some UNIX-domain "/dev/XXXX" file name to a
- * DDI device driver. The "iflink(8)" program is an example of
- * this behaviour.
- */
- struct ddi_device *
- ddi_map(const char *id)
- {
- register struct ddi_device *dev;
-
- PRINTK (("DDI: MAP: looking for \"%s\": ", id));
- dev = devices;
- while (dev->title != NULL) {
- if (strncmp(dev->name, id, DDI_MAXNAME) == 0) {
- PRINTK (("OK at 0x%X\n", dev));
- return(dev);
- }
- dev++;
- }
- PRINTK (("NOT FOUND\n"));
- return(NULL);
- }
-
-
- /*
- * This is the function that is called by a kernel routine during
- * system startup. Its purpose is to walk trough the "devices"
- * table (defined above), and to call all moduled defined in it.
- */
- void
- ddi_init(void)
- {
- struct ddi_proto *pro;
- struct ddi_device *dev;
-
- PRINTK (("DDI: Starting up!\n"));
-
- /* First off, kick all configured protocols. */
- pro = protocols;
- while (pro->name != NULL) {
- (*pro->init)(pro);
- pro++;
- }
-
- /* Done. Now kick all configured device drivers. */
- dev = devices;
- while (dev->title != NULL) {
- (*dev->init)(dev);
- dev++;
- }
-
- /* We're all done... */
- }
-