home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / KERNEL-S / V1.0 / LINUX-1.0 / LINUX-1 / linux / net / ddi.c next >
Encoding:
C/C++ Source or Header  |  1993-12-01  |  2.1 KB  |  92 lines

  1. /*
  2.  * ddi.c    Implement the Device Driver Interface (DDI) routines.
  3.  *        Currently, this is only used by the NET layer of LINUX,
  4.  *        but it eventually might move to an upper directory of
  5.  *        the system.
  6.  *
  7.  * Version:    @(#)ddi.c    1.0.5    04/22/93
  8.  *
  9.  * Author:    Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
  10.  */
  11. #include <asm/segment.h>
  12. #include <asm/system.h>
  13. #include <linux/types.h>
  14. #include <linux/config.h>
  15. #include <linux/kernel.h>
  16. #include <linux/sched.h>
  17. #include <linux/string.h>
  18. #include <linux/mm.h>
  19. #include <linux/socket.h>
  20. #include <linux/ddi.h>
  21.  
  22.  
  23. #undef    DDI_DEBUG
  24. #ifdef    DDI_DEBUG
  25. #   define PRINTK(x)    printk x
  26. #else
  27. #   define PRINTK(x)    /**/
  28. #endif
  29.  
  30.  
  31. extern struct ddi_device    devices[];    /* device driver map    */
  32. extern struct ddi_proto        protocols[];    /* network protocols    */
  33.  
  34.  
  35. /*
  36.  * This function gets called with an ASCII string representing the
  37.  * ID of some DDI driver.  We loop through the DDI Devices table
  38.  * and return the address of the control block that has a matching
  39.  * "name" field.  It is used by upper-level layers that want to
  40.  * dynamically bind some UNIX-domain "/dev/XXXX" file name to a
  41.  * DDI device driver.  The "iflink(8)" program is an example of
  42.  * this behaviour.
  43.  */
  44. struct ddi_device *
  45. ddi_map(const char *id)
  46. {
  47.   register struct ddi_device *dev;
  48.  
  49.   PRINTK (("DDI: MAP: looking for \"%s\": ", id));
  50.   dev = devices;
  51.   while (dev->title != NULL) {
  52.     if (strncmp(dev->name, id, DDI_MAXNAME) == 0) {
  53.         PRINTK (("OK at 0x%X\n", dev));
  54.         return(dev);
  55.     }
  56.     dev++;
  57.   }
  58.   PRINTK (("NOT FOUND\n"));
  59.   return(NULL);
  60. }
  61.  
  62.  
  63. /*
  64.  * This is the function that is called by a kernel routine during
  65.  * system startup.  Its purpose is to walk trough the "devices"
  66.  * table (defined above), and to call all moduled defined in it.
  67.  */
  68. void
  69. ddi_init(void)
  70. {
  71.   struct ddi_proto *pro;
  72.   struct ddi_device *dev;
  73.  
  74.   PRINTK (("DDI: Starting up!\n"));
  75.  
  76.   /* First off, kick all configured protocols. */
  77.   pro = protocols;
  78.   while (pro->name != NULL) {
  79.     (*pro->init)(pro);
  80.     pro++;
  81.   }
  82.   
  83.   /* Done.  Now kick all configured device drivers. */
  84.   dev = devices;
  85.   while (dev->title != NULL) {
  86.     (*dev->init)(dev);
  87.     dev++;
  88.   }
  89.  
  90.   /* We're all done... */
  91. }
  92.