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

嵌入式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. #ifndef _ASM_SN_MODULE_H
  11. #define _ASM_SN_MODULE_H
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #include <linux/config.h>
  16. #include <asm/sn/systeminfo.h>
  17. #include <asm/sn/klconfig.h>
  18. #include <asm/sn/ksys/elsc.h>
  19. #if defined(CONFIG_SGI_IP35) || defined(CONFIG_IA64_SGI_SN1) || defined(CONFIG_IA64_GENERIC)
  20. #ifdef BRINGUP /* max. number of modules?  Should be about 300.*/
  21. #define MODULE_MAX 56
  22. #endif /* BRINGUP */
  23. #define MODULE_MAX_NODES 1
  24. #endif /* CONFIG_SGI_IP35 */
  25. #define MODULE_HIST_CNT 16
  26. #define MAX_MODULE_LEN 16
  27. /* Well-known module IDs */
  28. #define MODULE_UNKNOWN (-2) /* initial value of klconfig brd_module */
  29. /* #define INVALID_MODULE (-1) ** generic invalid moduleid_t (arch.h) */
  30. #define MODULE_NOT_SET 0    /* module ID not set in sys ctlrs. */
  31. /* parameter for format_module_id() */
  32. #define MODULE_FORMAT_BRIEF 1
  33. #define MODULE_FORMAT_LONG 2
  34. #if defined(CONFIG_SGI_IP35) || defined(CONFIG_IA64_SGI_SN1) || defined(CONFIG_IA64_GENERIC)
  35. /*
  36.  * Module id format
  37.  *
  38.  *   15-12 Brick type (enumerated)
  39.  *    11-6 Rack ID (encoded class, group, number)
  40.  *     5-0 Brick position in rack (0-63)
  41.  */
  42. /*
  43.  * Macros for getting the brick type
  44.  */
  45. #define MODULE_BTYPE_MASK 0xf000
  46. #define MODULE_BTYPE_SHFT 12
  47. #define MODULE_GET_BTYPE(_m) (((_m) & MODULE_BTYPE_MASK) >> MODULE_BTYPE_SHFT)
  48. #define MODULE_BT_TO_CHAR(_b) (brick_types[(_b)])
  49. #define MODULE_GET_BTCHAR(_m) (MODULE_BT_TO_CHAR(MODULE_GET_BTYPE(_m)))
  50. /*
  51.  * Macros for getting the rack ID.
  52.  */
  53. #define MODULE_RACK_MASK 0x0fc0
  54. #define MODULE_RACK_SHFT 6
  55. #define MODULE_GET_RACK(_m) (((_m) & MODULE_RACK_MASK) >> MODULE_RACK_SHFT)
  56. /*
  57.  * Macros for getting the brick position
  58.  */
  59. #define MODULE_BPOS_MASK 0x003f
  60. #define MODULE_BPOS_SHFT 0
  61. #define MODULE_GET_BPOS(_m) (((_m) & MODULE_BPOS_MASK) >> MODULE_BPOS_SHFT)
  62. /*
  63.  * Macros for constructing moduleid_t's
  64.  */
  65. #define RBT_TO_MODULE(_r, _b, _t) ((_r) << MODULE_RACK_SHFT | 
  66.    (_b) << MODULE_BPOS_SHFT | 
  67.    (_t) << MODULE_BTYPE_SHFT)
  68. /*
  69.  * Macros for encoding and decoding rack IDs
  70.  * A rack number consists of three parts:
  71.  *   class 1 bit, 0==CPU/mixed, 1==I/O
  72.  *   group 2 bits for CPU/mixed, 3 bits for I/O
  73.  *   number 3 bits for CPU/mixed, 2 bits for I/O (1 based)
  74.  */
  75. #define RACK_GROUP_BITS(_r) (RACK_GET_CLASS(_r) ? 3 : 2)
  76. #define RACK_NUM_BITS(_r) (RACK_GET_CLASS(_r) ? 2 : 3)
  77. #define RACK_CLASS_MASK(_r) 0x20
  78. #define RACK_CLASS_SHFT(_r) 5
  79. #define RACK_GET_CLASS(_r)
  80. (((_r) & RACK_CLASS_MASK(_r)) >> RACK_CLASS_SHFT(_r))
  81. #define RACK_ADD_CLASS(_r, _c)
  82. ((_r) |= (_c) << RACK_CLASS_SHFT(_r) & RACK_CLASS_MASK(_r))
  83. #define RACK_GROUP_SHFT(_r) RACK_NUM_BITS(_r)
  84. #define RACK_GROUP_MASK(_r)
  85. ( (((unsigned)1<<RACK_GROUP_BITS(_r)) - 1) << RACK_GROUP_SHFT(_r) )
  86. #define RACK_GET_GROUP(_r)
  87. (((_r) & RACK_GROUP_MASK(_r)) >> RACK_GROUP_SHFT(_r))
  88. #define RACK_ADD_GROUP(_r, _g)
  89. ((_r) |= (_g) << RACK_GROUP_SHFT(_r) & RACK_GROUP_MASK(_r))
  90. #define RACK_NUM_SHFT(_r) 0
  91. #define RACK_NUM_MASK(_r)
  92. ( (((unsigned)1<<RACK_NUM_BITS(_r)) - 1) << RACK_NUM_SHFT(_r) )
  93. #define RACK_GET_NUM(_r)
  94. ( (((_r) & RACK_NUM_MASK(_r)) >> RACK_NUM_SHFT(_r)) + 1 )
  95. #define RACK_ADD_NUM(_r, _n)
  96. ((_r) |= ((_n) - 1) << RACK_NUM_SHFT(_r) & RACK_NUM_MASK(_r))
  97. /*
  98.  * Brick type definitions
  99.  */
  100. #define MAX_BRICK_TYPES 16 /* 1 << (MODULE_RACK_SHFT - MODULE_BTYPE_SHFT */
  101. extern char brick_types[];
  102. #define MODULE_CBRICK 0
  103. #define MODULE_RBRICK 1
  104. #define MODULE_IBRICK 2
  105. #define MODULE_KBRICK 3
  106. #define MODULE_XBRICK 4
  107. #define MODULE_DBRICK 5
  108. #define MODULE_PBRICK 6
  109. /*
  110.  * Moduleid_t comparison macros
  111.  */
  112. /* Don't compare the brick type:  only the position is significant */
  113. #define MODULE_CMP(_m1, _m2) (((_m1)&(MODULE_RACK_MASK|MODULE_BPOS_MASK)) -
  114.  ((_m2)&(MODULE_RACK_MASK|MODULE_BPOS_MASK)))
  115. #define MODULE_MATCH(_m1, _m2) (MODULE_CMP((_m1),(_m2)) == 0)
  116. #else
  117. /*
  118.  * Some code that uses this macro will not be conditionally compiled.
  119.  */
  120. #define MODULE_GET_BTCHAR(_m) ('?')
  121. #define MODULE_CMP(_m1, _m2) ((_m1) - (_m2))
  122. #define MODULE_MATCH(_m1, _m2) (MODULE_CMP((_m1),(_m2)) == 0)
  123. #endif /* CONFIG_SGI_IP35 || CONFIG_IA64_SGI_SN1 */
  124. typedef struct module_s module_t;
  125. struct module_s {
  126.     moduleid_t id; /* Module ID of this module        */
  127.     spinlock_t lock; /* Lock for this structure    */
  128.     /* List of nodes in this module */
  129.     cnodeid_t nodes[MODULE_MAX_NODES];
  130.     int nodecnt; /* Number of nodes in array        */
  131.     /* Fields for Module System Controller */
  132.     int mesgpend; /* Message pending                 */
  133.     int shutdown; /* Shutdown in progress            */
  134.     struct semaphore thdcnt; /* Threads finished counter        */
  135.     elsc_t elsc;
  136.     spinlock_t elsclock;
  137.     time_t intrhist[MODULE_HIST_CNT];
  138.     int histptr;
  139.     int hbt_active; /* MSC heartbeat monitor active    */
  140.     uint64_t hbt_last; /* RTC when last heartbeat sent    */
  141.     /* Module serial number info */
  142.     union {
  143. char snum_str[MAX_SERIAL_NUM_SIZE];  /* used by CONFIG_SGI_IP27    */
  144. uint64_t snum_int;  /* used by speedo */
  145.     } snum;
  146.     int snum_valid;
  147.     int disable_alert;
  148.     int count_down;
  149.     /* System serial number info (used by SN1) */
  150.     char sys_snum[MAX_SERIAL_NUM_SIZE];
  151.     int sys_snum_valid;
  152. };
  153. /* module.c */
  154. extern module_t        *modules[MODULE_MAX]; /* Indexed by cmoduleid_t   */
  155. extern int nummodules;
  156. extern module_t        *module_lookup(moduleid_t id);
  157. extern elsc_t        *get_elsc(void);
  158. extern int get_kmod_info(cmoduleid_t cmod,
  159.       module_info_t *mod_info);
  160. extern int get_kmod_sys_snum(cmoduleid_t cmod,
  161.   char *snum);
  162. extern void format_module_id(char *buffer, moduleid_t m, int fmt);
  163. extern int parse_module_id(char *buffer);
  164. #ifdef __cplusplus
  165. }
  166. #endif
  167. #endif /* _ASM_SN_MODULE_H */