setup.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * New style setup code for the network devices
  3.  */
  4.  
  5. #include <linux/config.h>
  6. #include <linux/netdevice.h>
  7. #include <linux/errno.h>
  8. #include <linux/init.h>
  9. #include <linux/netlink.h>
  10. extern int slip_init_ctrl_dev(void);
  11. extern int x25_asy_init_ctrl_dev(void);
  12.   
  13. extern int dmascc_init(void);
  14. extern int awc4500_pci_probe(void);
  15. extern int awc4500_isa_probe(void);
  16. extern int awc4500_pnp_probe(void);
  17. extern int awc4500_365_probe(void);
  18. extern int arcnet_init(void); 
  19. extern int scc_enet_init(void); 
  20. extern int fec_enet_init(void); 
  21. extern int dlci_setup(void); 
  22. extern int sdla_setup(void); 
  23. extern int sdla_c_setup(void); 
  24. extern int comx_init(void);
  25. extern int lmc_setup(void);
  26. extern int madgemc_probe(void);
  27. extern int uml_net_probe(void);
  28. /* Pad device name to IFNAMSIZ=16. F.e. __PAD6 is string of 9 zeros. */
  29. #define __PAD6 ""
  30. #define __PAD5 __PAD6 ""
  31. #define __PAD4 __PAD5 ""
  32. #define __PAD3 __PAD4 ""
  33. #define __PAD2 __PAD3 ""
  34. /*
  35.  * Devices in this list must do new style probing. That is they must
  36.  * allocate their own device objects and do their own bus scans.
  37.  */
  38. struct net_probe
  39. {
  40. int (*probe)(void);
  41. int status; /* non-zero if autoprobe has failed */
  42. };
  43.  
  44. static struct net_probe pci_probes[] __initdata = {
  45. /*
  46.  * Early setup devices
  47.  */
  48. #if defined(CONFIG_DMASCC)
  49. {dmascc_init, 0},
  50. #endif
  51. #if defined(CONFIG_DLCI)
  52. {dlci_setup, 0},
  53. #endif
  54. #if defined(CONFIG_SDLA)
  55. {sdla_c_setup, 0},
  56. #endif
  57. #if defined(CONFIG_ARCNET)
  58. {arcnet_init, 0},
  59. #endif
  60. #if defined(CONFIG_SCC_ENET)
  61.         {scc_enet_init, 0},
  62. #endif
  63. #if defined(CONFIG_FEC_ENET)
  64.         {fec_enet_init, 0},
  65. #endif
  66. #if defined(CONFIG_COMX)
  67. {comx_init, 0},
  68. #endif
  69.  
  70. #if defined(CONFIG_LANMEDIA)
  71. {lmc_setup, 0},
  72. #endif
  73.  
  74. /*
  75. *
  76. * Wireless non-HAM
  77. *
  78. */
  79. #ifdef CONFIG_AIRONET4500_NONCS
  80. #ifdef CONFIG_AIRONET4500_PCI
  81. {awc4500_pci_probe,0},
  82. #endif
  83. #ifdef CONFIG_AIRONET4500_PNP
  84. {awc4500_pnp_probe,0},
  85. #endif
  86. #endif
  87. /*
  88.  * Token Ring Drivers
  89.  */  
  90. #ifdef CONFIG_MADGEMC
  91. {madgemc_probe, 0},
  92. #endif
  93. #ifdef CONFIG_UML_NET
  94. {uml_net_probe, 0},
  95. #endif
  96.  
  97. {NULL, 0},
  98. };
  99. /*
  100.  * Run the updated device probes. These do not need a device passed
  101.  * into them.
  102.  */
  103.  
  104. static void __init network_probe(void)
  105. {
  106. struct net_probe *p = pci_probes;
  107. while (p->probe != NULL)
  108. {
  109. p->status = p->probe();
  110. p++;
  111. }
  112. }
  113. /*
  114.  * Initialise the line discipline drivers
  115.  */
  116.  
  117. static void __init network_ldisc_init(void)
  118. {
  119. #if defined(CONFIG_SLIP)
  120. slip_init_ctrl_dev();
  121. #endif
  122. #if defined(CONFIG_X25_ASY)
  123. x25_asy_init_ctrl_dev();
  124. #endif
  125. }
  126. static void __init special_device_init(void)
  127. {
  128. #ifdef CONFIG_NET_SB1000
  129. {
  130. extern int sb1000_probe(struct net_device *dev);
  131. static struct net_device sb1000_dev = 
  132. {
  133. "cm0" __PAD3, 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NULL, sb1000_probe 
  134. };
  135. register_netdev(&sb1000_dev);
  136. }
  137. #endif
  138. }
  139. /*
  140.  * Initialise network devices
  141.  */
  142.  
  143. void __init net_device_init(void)
  144. {
  145. /* Devices supporting the new probing API */
  146. network_probe();
  147. /* Line disciplines */
  148. network_ldisc_init();
  149. /* Special devices */
  150. special_device_init();
  151. /* That kicks off the legacy init functions */
  152. }