patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / include / asm-ia64 / sn / module.h
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 1992 - 1997, 2000-2003 Silicon Graphics, Inc. All rights reserved.
7  */
8 #ifndef _ASM_IA64_SN_MODULE_H
9 #define _ASM_IA64_SN_MODULE_H
10
11 #include <asm/sn/klconfig.h>
12 #include <asm/sn/ksys/elsc.h>
13
14 #define MODULE_MAX                      128
15 #define MODULE_MAX_NODES                2
16 #define MODULE_HIST_CNT                 16
17 #define MAX_MODULE_LEN                  16
18
19 /* Well-known module IDs */
20 #define MODULE_UNKNOWN          (-2) /* initial value of klconfig brd_module */
21 /* #define INVALID_MODULE       (-1) ** generic invalid moduleid_t (arch.h) */
22 #define MODULE_NOT_SET          0    /* module ID not set in sys ctlrs. */
23
24 /* parameter for format_module_id() */
25 #define MODULE_FORMAT_BRIEF     1
26 #define MODULE_FORMAT_LONG      2
27 #define MODULE_FORMAT_LCD       3
28
29 /*
30  *      Module id format
31  *
32  *      31-16   Rack ID (encoded class, group, number - 16-bit unsigned int)
33  *       15-8   Brick type (8-bit ascii character)
34  *        7-0   Bay (brick position in rack (0-63) - 8-bit unsigned int)
35  *
36  */
37
38 /*
39  * Macros for getting the brick type
40  */
41 #define MODULE_BTYPE_MASK       0xff00
42 #define MODULE_BTYPE_SHFT       8
43 #define MODULE_GET_BTYPE(_m)    (((_m) & MODULE_BTYPE_MASK) >> MODULE_BTYPE_SHFT)
44 #define MODULE_BT_TO_CHAR(_b)   ((char)(_b))
45 #define MODULE_GET_BTCHAR(_m)   (MODULE_BT_TO_CHAR(MODULE_GET_BTYPE(_m)))
46
47 /*
48  * Macros for getting the rack ID.
49  */
50 #define MODULE_RACK_MASK        0xffff0000
51 #define MODULE_RACK_SHFT        16
52 #define MODULE_GET_RACK(_m)     (((_m) & MODULE_RACK_MASK) >> MODULE_RACK_SHFT)
53
54 /*
55  * Macros for getting the brick position
56  */
57 #define MODULE_BPOS_MASK        0x00ff
58 #define MODULE_BPOS_SHFT        0
59 #define MODULE_GET_BPOS(_m)     (((_m) & MODULE_BPOS_MASK) >> MODULE_BPOS_SHFT)
60
61 /*
62  * Macros for constructing moduleid_t's
63  */
64 #define RBT_TO_MODULE(_r, _b, _t) ((_r) << MODULE_RACK_SHFT | \
65                                    (_b) << MODULE_BPOS_SHFT | \
66                                    (_t) << MODULE_BTYPE_SHFT)
67
68 /*
69  * Macros for encoding and decoding rack IDs
70  * A rack number consists of three parts:
71  *   class (0==CPU/mixed, 1==I/O), group, number
72  *
73  * Rack number is stored just as it is displayed on the screen:
74  * a 3-decimal-digit number.
75  */
76 #define RACK_CLASS_DVDR         100
77 #define RACK_GROUP_DVDR         10
78 #define RACK_NUM_DVDR           1
79
80 #define RACK_CREATE_RACKID(_c, _g, _n)  ((_c) * RACK_CLASS_DVDR +       \
81         (_g) * RACK_GROUP_DVDR + (_n) * RACK_NUM_DVDR)
82
83 #define RACK_GET_CLASS(_r)              ((_r) / RACK_CLASS_DVDR)
84 #define RACK_GET_GROUP(_r)              (((_r) - RACK_GET_CLASS(_r) *   \
85             RACK_CLASS_DVDR) / RACK_GROUP_DVDR)
86 #define RACK_GET_NUM(_r)                (((_r) - RACK_GET_CLASS(_r) *   \
87             RACK_CLASS_DVDR - RACK_GET_GROUP(_r) *      \
88             RACK_GROUP_DVDR) / RACK_NUM_DVDR)
89
90 /*
91  * Macros for encoding and decoding rack IDs
92  * A rack number consists of three parts:
93  *   class      1 bit, 0==CPU/mixed, 1==I/O
94  *   group      2 bits for CPU/mixed, 3 bits for I/O
95  *   number     3 bits for CPU/mixed, 2 bits for I/O (1 based)
96  */
97 #define RACK_GROUP_BITS(_r)     (RACK_GET_CLASS(_r) ? 3 : 2)
98 #define RACK_NUM_BITS(_r)       (RACK_GET_CLASS(_r) ? 2 : 3)
99
100 #define RACK_CLASS_MASK(_r)     0x20
101 #define RACK_CLASS_SHFT(_r)     5
102 #define RACK_ADD_CLASS(_r, _c)  \
103         ((_r) |= (_c) << RACK_CLASS_SHFT(_r) & RACK_CLASS_MASK(_r))
104
105 #define RACK_GROUP_SHFT(_r)     RACK_NUM_BITS(_r)
106 #define RACK_GROUP_MASK(_r)     \
107         ( (((unsigned)1<<RACK_GROUP_BITS(_r)) - 1) << RACK_GROUP_SHFT(_r) )
108 #define RACK_ADD_GROUP(_r, _g)  \
109         ((_r) |= (_g) << RACK_GROUP_SHFT(_r) & RACK_GROUP_MASK(_r))
110
111 #define RACK_NUM_SHFT(_r)       0
112 #define RACK_NUM_MASK(_r)       \
113         ( (((unsigned)1<<RACK_NUM_BITS(_r)) - 1) << RACK_NUM_SHFT(_r) )
114 #define RACK_ADD_NUM(_r, _n)    \
115         ((_r) |= ((_n) - 1) << RACK_NUM_SHFT(_r) & RACK_NUM_MASK(_r))
116
117
118 /*
119  * Brick type definitions
120  */
121 #define MAX_BRICK_TYPES         256 /* brick type is stored as uchar */
122
123 extern char brick_types[];
124
125 #define MODULE_CBRICK           0
126 #define MODULE_RBRICK           1
127 #define MODULE_IBRICK           2
128 #define MODULE_KBRICK           3
129 #define MODULE_XBRICK           4
130 #define MODULE_DBRICK           5
131 #define MODULE_PBRICK           6
132 #define MODULE_NBRICK           7
133 #define MODULE_PEBRICK          8
134 #define MODULE_PXBRICK          9
135 #define MODULE_IXBRICK          10
136 #define MODULE_CGBRICK          11
137 #define MODULE_OPUSBRICK        12
138
139 /*
140  * Moduleid_t comparison macros
141  */
142 /* Don't compare the brick type:  only the position is significant */
143 #define MODULE_CMP(_m1, _m2)    (((_m1)&(MODULE_RACK_MASK|MODULE_BPOS_MASK)) -\
144                                  ((_m2)&(MODULE_RACK_MASK|MODULE_BPOS_MASK)))
145 #define MODULE_MATCH(_m1, _m2)  (MODULE_CMP((_m1),(_m2)) == 0)
146
147 typedef struct module_s module_t;
148
149 struct module_s {
150     moduleid_t          id;             /* Module ID of this module        */
151
152     spinlock_t          lock;           /* Lock for this structure         */
153
154     /* List of nodes in this module */
155     cnodeid_t           nodes[MAX_SLABS + 1];
156     geoid_t             geoid[MAX_SLABS + 1];
157
158     /* Fields for Module System Controller */
159     int                 mesgpend;       /* Message pending                 */
160     int                 shutdown;       /* Shutdown in progress            */
161     time_t              intrhist[MODULE_HIST_CNT];
162     int                 histptr;
163
164     int                 hbt_active;     /* MSC heartbeat monitor active    */
165     uint64_t            hbt_last;       /* RTC when last heartbeat sent    */
166
167     /* Module serial number info */
168     union {
169         char            snum_str[MAX_SERIAL_NUM_SIZE];   /* used by CONFIG_SGI_IP27    */
170         uint64_t        snum_int;                        /* used by speedo */
171     } snum;
172     int                 snum_valid;
173
174     int                 disable_alert;
175     int                 count_down;
176
177     /* System serial number info (used by SN1) */
178     char                sys_snum[MAX_SERIAL_NUM_SIZE];
179     int                 sys_snum_valid;
180 };
181
182 /* module.c */
183 extern module_t        *modules[MODULE_MAX];    /* Indexed by cmoduleid_t   */
184 extern int              nummodules;
185
186 extern module_t        *module_lookup(moduleid_t id);
187 extern void             format_module_id(char *buffer, moduleid_t m, int fmt);
188 extern int              parse_module_id(char *buffer);
189
190 #ifdef  __cplusplus
191 }
192 #endif
193
194 #endif /* _ASM_IA64_SN_MODULE_H */