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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* $Id$
  2.  *
  3.  * This file is subject to the terms and conditions of the GNU General Public
  4.  * License.  See the file "COPYING" in the main directory of this archive
  5.  * for more details.
  6.  *
  7.  * Copyright (C) 1992 - 1997, 2000-2002 Silicon Graphics, Inc. All rights reserved.
  8.  */
  9. #include <linux/types.h>
  10. #include <asm/sn/sgi.h>
  11. #include <asm/io.h>
  12. #include <asm/sn/invent.h>
  13. #include <asm/sn/hcl.h>
  14. #include <asm/sn/pci/bridge.h>
  15. #include "asm/sn/ioerror_handling.h"
  16. #include <asm/sn/xtalk/xbow.h>
  17. /* these get called directly in cdl_add_connpt in fops bypass hack */
  18. extern int pcibr_attach(devfs_handle_t);
  19. extern int xbow_attach(devfs_handle_t);
  20. /*
  21.  *    cdl: Connection and Driver List
  22.  *
  23.  * We are not porting this to Linux.  Devices are registered via 
  24.  * the normal Linux PCI layer.  This is a very simplified version 
  25.  * of cdl that will allow us to register and call our very own 
  26.  * IO Infrastructure Drivers e.g. pcibr.
  27.  */
  28. struct cdl {
  29.     int part_num;
  30.     int mfg_num;
  31.     int (*attach) (devfs_handle_t);
  32. } dummy_reg;
  33. #define MAX_SGI_IO_INFRA_DRVR 4
  34. struct cdl sgi_infrastructure_drivers[MAX_SGI_IO_INFRA_DRVR] =
  35. {
  36. { XBRIDGE_WIDGET_PART_NUM, XBRIDGE_WIDGET_MFGR_NUM, pcibr_attach /* &pcibr_fops  */},
  37. { BRIDGE_WIDGET_PART_NUM,  BRIDGE_WIDGET_MFGR_NUM,  pcibr_attach /* &pcibr_fops */},
  38. { XXBOW_WIDGET_PART_NUM,   XXBOW_WIDGET_MFGR_NUM,   xbow_attach /* &xbow_fops */},
  39. { XBOW_WIDGET_PART_NUM,    XBOW_WIDGET_MFGR_NUM,    xbow_attach /* &xbow_fops */},
  40. };
  41. /*
  42.  * cdl_new:  Called by pciio and xtalk.
  43.  */
  44. cdl_p
  45. cdl_new(char *name, char *k1str, char *k2str)
  46. {
  47.     /*
  48.      * Just return a dummy pointer.
  49.      */
  50.     return((cdl_p)&dummy_reg);
  51. }
  52. /*
  53.  * cdl_del: Do nothing.
  54.  */
  55. void
  56. cdl_del(cdl_p reg)
  57. {
  58. return;
  59. }
  60. /*
  61.  * cdl_add_driver: The driver part number and manufacturers number 
  62.  * are statically initialized above.
  63.  * 
  64.   Do nothing.
  65.  */
  66. int
  67. cdl_add_driver(cdl_p reg, int key1, int key2, char *prefix, int flags, cdl_drv_f *func)
  68. {
  69.     return 0;
  70. }
  71. /*
  72.  * cdl_del_driver: Not supported.
  73.  */
  74. void
  75. cdl_del_driver(cdl_p reg, char *prefix, cdl_drv_f *func)
  76. {
  77. return;
  78. }
  79. /*
  80.  * cdl_add_connpt: We found a device and it's connect point.  Call the 
  81.  * attach routine of that driver.
  82.  *
  83.  * May need support for pciba registration here ...
  84.  *
  85.  * This routine use to create /hw/.id/pci/.../.. that links to 
  86.  * /hw/module/006c06/Pbrick/xtalk/15/pci/<slotnum> .. do we still need 
  87.  * it?  The specified driver attach routine does not reference these 
  88.  * vertices.
  89.  */
  90. int
  91. cdl_add_connpt(cdl_p reg, int part_num, int mfg_num, 
  92.        devfs_handle_t connpt, int drv_flags)
  93. {
  94. int i;
  95. /*
  96.  * Find the driver entry point and call the attach routine.
  97.  */
  98. for (i = 0; i < MAX_SGI_IO_INFRA_DRVR; i++) {
  99. if ( (part_num == sgi_infrastructure_drivers[i].part_num) &&
  100.    ( mfg_num == sgi_infrastructure_drivers[i].mfg_num) ) {
  101. /*
  102.  * Call the device attach routines.
  103.  */
  104. if (sgi_infrastructure_drivers[i].attach) {
  105.     return(sgi_infrastructure_drivers[i].attach(connpt));
  106. }
  107. } else {
  108. continue;
  109. }
  110. }
  111. /* printk("WARNING: cdl_add_connpt: Driver not found for part_num 0x%x mfg_num 0x%xn", part_num, mfg_num); */
  112. return (0);
  113. }
  114. /*
  115.  * cdl_del_connpt: Not implemented.
  116.  */
  117. int
  118. cdl_del_connpt(cdl_p reg, int key1, int key2, devfs_handle_t connpt, int drv_flags)
  119. {
  120. return(0);
  121. }
  122. /*
  123.  *    cdl_iterate: Not Implemented.
  124.  */
  125. void
  126. cdl_iterate(cdl_p reg,
  127.     char *prefix,
  128.     cdl_iter_f * func)
  129. {
  130. return;
  131. }
  132. async_attach_t 
  133. async_attach_new(void)
  134. {
  135. return(0);
  136. }
  137. void 
  138. async_attach_free(async_attach_t aa)
  139. {
  140. return;
  141. }
  142. async_attach_t 
  143. async_attach_get_info(devfs_handle_t vhdl)
  144. {
  145. return(0);
  146. }
  147. void            
  148. async_attach_add_info(devfs_handle_t vhdl, async_attach_t aa)
  149. {
  150. return;
  151. }
  152. void            
  153. async_attach_del_info(devfs_handle_t vhdl)
  154. {
  155. return;
  156. }
  157. void async_attach_signal_start(async_attach_t aa)
  158. {
  159. return;
  160. }
  161. void async_attach_signal_done(async_attach_t aa)
  162. {
  163. return;
  164. }
  165. void async_attach_waitall(async_attach_t aa)
  166. {
  167. return;
  168. }