cdl.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:4k
源码类别:

嵌入式Linux

开发平台:

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