diff options
Diffstat (limited to 'include/asm-ia64/sn/sn2/sn_hwperf.h')
-rw-r--r-- | include/asm-ia64/sn/sn2/sn_hwperf.h | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/include/asm-ia64/sn/sn2/sn_hwperf.h b/include/asm-ia64/sn/sn2/sn_hwperf.h new file mode 100644 index 000000000000..b0c4d6dd77ba --- /dev/null +++ b/include/asm-ia64/sn/sn2/sn_hwperf.h | |||
@@ -0,0 +1,226 @@ | |||
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) 2004 Silicon Graphics, Inc. All rights reserved. | ||
7 | * | ||
8 | * Data types used by the SN_SAL_HWPERF_OP SAL call for monitoring | ||
9 | * SGI Altix node and router hardware | ||
10 | * | ||
11 | * Mark Goodwin <markgw@sgi.com> Mon Aug 30 12:23:46 EST 2004 | ||
12 | */ | ||
13 | |||
14 | #ifndef SN_HWPERF_H | ||
15 | #define SN_HWPERF_H | ||
16 | |||
17 | /* | ||
18 | * object structure. SN_HWPERF_ENUM_OBJECTS and SN_HWPERF_GET_CPU_INFO | ||
19 | * return an array of these. Do not change this without also | ||
20 | * changing the corresponding SAL code. | ||
21 | */ | ||
22 | #define SN_HWPERF_MAXSTRING 128 | ||
23 | struct sn_hwperf_object_info { | ||
24 | u32 id; | ||
25 | union { | ||
26 | struct { | ||
27 | u64 this_part:1; | ||
28 | u64 is_shared:1; | ||
29 | } fields; | ||
30 | struct { | ||
31 | u64 flags; | ||
32 | u64 reserved; | ||
33 | } b; | ||
34 | } f; | ||
35 | char name[SN_HWPERF_MAXSTRING]; | ||
36 | char location[SN_HWPERF_MAXSTRING]; | ||
37 | u32 ports; | ||
38 | }; | ||
39 | |||
40 | #define sn_hwp_this_part f.fields.this_part | ||
41 | #define sn_hwp_is_shared f.fields.is_shared | ||
42 | #define sn_hwp_flags f.b.flags | ||
43 | |||
44 | /* macros for object classification */ | ||
45 | #define SN_HWPERF_IS_NODE(x) ((x) && strstr((x)->name, "SHub")) | ||
46 | #define SN_HWPERF_IS_IONODE(x) ((x) && strstr((x)->name, "TIO")) | ||
47 | #define SN_HWPERF_IS_ROUTER(x) ((x) && strstr((x)->name, "Router")) | ||
48 | #define SN_HWPERF_IS_NL3ROUTER(x) ((x) && strstr((x)->name, "NL3Router")) | ||
49 | #define SN_HWPERF_FOREIGN(x) ((x) && !(x)->sn_hwp_this_part && !(x)->sn_hwp_is_shared) | ||
50 | #define SN_HWPERF_SAME_OBJTYPE(x,y) ((SN_HWPERF_IS_NODE(x) && SN_HWPERF_IS_NODE(y)) ||\ | ||
51 | (SN_HWPERF_IS_IONODE(x) && SN_HWPERF_IS_IONODE(y)) ||\ | ||
52 | (SN_HWPERF_IS_ROUTER(x) && SN_HWPERF_IS_ROUTER(y))) | ||
53 | |||
54 | /* numa port structure, SN_HWPERF_ENUM_PORTS returns an array of these */ | ||
55 | struct sn_hwperf_port_info { | ||
56 | u32 port; | ||
57 | u32 conn_id; | ||
58 | u32 conn_port; | ||
59 | }; | ||
60 | |||
61 | /* for HWPERF_{GET,SET}_MMRS */ | ||
62 | struct sn_hwperf_data { | ||
63 | u64 addr; | ||
64 | u64 data; | ||
65 | }; | ||
66 | |||
67 | /* user ioctl() argument, see below */ | ||
68 | struct sn_hwperf_ioctl_args { | ||
69 | u64 arg; /* argument, usually an object id */ | ||
70 | u64 sz; /* size of transfer */ | ||
71 | void *ptr; /* pointer to source/target */ | ||
72 | u32 v0; /* second return value */ | ||
73 | }; | ||
74 | |||
75 | /* | ||
76 | * For SN_HWPERF_{GET,SET}_MMRS and SN_HWPERF_OBJECT_DISTANCE, | ||
77 | * sn_hwperf_ioctl_args.arg can be used to specify a CPU on which | ||
78 | * to call SAL, and whether to use an interprocessor interrupt | ||
79 | * or task migration in order to do so. If the CPU specified is | ||
80 | * SN_HWPERF_ARG_ANY_CPU, then the current CPU will be used. | ||
81 | */ | ||
82 | #define SN_HWPERF_ARG_ANY_CPU 0x7fffffffUL | ||
83 | #define SN_HWPERF_ARG_CPU_MASK 0x7fffffff00000000ULL | ||
84 | #define SN_HWPERF_ARG_USE_IPI_MASK 0x8000000000000000ULL | ||
85 | #define SN_HWPERF_ARG_OBJID_MASK 0x00000000ffffffffULL | ||
86 | |||
87 | /* | ||
88 | * ioctl requests on the "sn_hwperf" misc device that call SAL. | ||
89 | */ | ||
90 | #define SN_HWPERF_OP_MEM_COPYIN 0x1000 | ||
91 | #define SN_HWPERF_OP_MEM_COPYOUT 0x2000 | ||
92 | #define SN_HWPERF_OP_MASK 0x0fff | ||
93 | |||
94 | /* | ||
95 | * Determine mem requirement. | ||
96 | * arg don't care | ||
97 | * sz 8 | ||
98 | * p pointer to u64 integer | ||
99 | */ | ||
100 | #define SN_HWPERF_GET_HEAPSIZE 1 | ||
101 | |||
102 | /* | ||
103 | * Install mem for SAL drvr | ||
104 | * arg don't care | ||
105 | * sz sizeof buffer pointed to by p | ||
106 | * p pointer to buffer for scratch area | ||
107 | */ | ||
108 | #define SN_HWPERF_INSTALL_HEAP 2 | ||
109 | |||
110 | /* | ||
111 | * Determine number of objects | ||
112 | * arg don't care | ||
113 | * sz 8 | ||
114 | * p pointer to u64 integer | ||
115 | */ | ||
116 | #define SN_HWPERF_OBJECT_COUNT (10|SN_HWPERF_OP_MEM_COPYOUT) | ||
117 | |||
118 | /* | ||
119 | * Determine object "distance", relative to a cpu. This operation can | ||
120 | * execute on a designated logical cpu number, using either an IPI or | ||
121 | * via task migration. If the cpu number is SN_HWPERF_ANY_CPU, then | ||
122 | * the current CPU is used. See the SN_HWPERF_ARG_* macros above. | ||
123 | * | ||
124 | * arg bitmap of IPI flag, cpu number and object id | ||
125 | * sz 8 | ||
126 | * p pointer to u64 integer | ||
127 | */ | ||
128 | #define SN_HWPERF_OBJECT_DISTANCE (11|SN_HWPERF_OP_MEM_COPYOUT) | ||
129 | |||
130 | /* | ||
131 | * Enumerate objects. Special case if sz == 8, returns the required | ||
132 | * buffer size. | ||
133 | * arg don't care | ||
134 | * sz sizeof buffer pointed to by p | ||
135 | * p pointer to array of struct sn_hwperf_object_info | ||
136 | */ | ||
137 | #define SN_HWPERF_ENUM_OBJECTS (12|SN_HWPERF_OP_MEM_COPYOUT) | ||
138 | |||
139 | /* | ||
140 | * Enumerate NumaLink ports for an object. Special case if sz == 8, | ||
141 | * returns the required buffer size. | ||
142 | * arg object id | ||
143 | * sz sizeof buffer pointed to by p | ||
144 | * p pointer to array of struct sn_hwperf_port_info | ||
145 | */ | ||
146 | #define SN_HWPERF_ENUM_PORTS (13|SN_HWPERF_OP_MEM_COPYOUT) | ||
147 | |||
148 | /* | ||
149 | * SET/GET memory mapped registers. These operations can execute | ||
150 | * on a designated logical cpu number, using either an IPI or via | ||
151 | * task migration. If the cpu number is SN_HWPERF_ANY_CPU, then | ||
152 | * the current CPU is used. See the SN_HWPERF_ARG_* macros above. | ||
153 | * | ||
154 | * arg bitmap of ipi flag, cpu number and object id | ||
155 | * sz sizeof buffer pointed to by p | ||
156 | * p pointer to array of struct sn_hwperf_data | ||
157 | */ | ||
158 | #define SN_HWPERF_SET_MMRS (14|SN_HWPERF_OP_MEM_COPYIN) | ||
159 | #define SN_HWPERF_GET_MMRS (15|SN_HWPERF_OP_MEM_COPYOUT| \ | ||
160 | SN_HWPERF_OP_MEM_COPYIN) | ||
161 | /* | ||
162 | * Lock a shared object | ||
163 | * arg object id | ||
164 | * sz don't care | ||
165 | * p don't care | ||
166 | */ | ||
167 | #define SN_HWPERF_ACQUIRE 16 | ||
168 | |||
169 | /* | ||
170 | * Unlock a shared object | ||
171 | * arg object id | ||
172 | * sz don't care | ||
173 | * p don't care | ||
174 | */ | ||
175 | #define SN_HWPERF_RELEASE 17 | ||
176 | |||
177 | /* | ||
178 | * Break a lock on a shared object | ||
179 | * arg object id | ||
180 | * sz don't care | ||
181 | * p don't care | ||
182 | */ | ||
183 | #define SN_HWPERF_FORCE_RELEASE 18 | ||
184 | |||
185 | /* | ||
186 | * ioctl requests on "sn_hwperf" that do not call SAL | ||
187 | */ | ||
188 | |||
189 | /* | ||
190 | * get cpu info as an array of hwperf_object_info_t. | ||
191 | * id is logical CPU number, name is description, location | ||
192 | * is geoid (e.g. 001c04#1c). Special case if sz == 8, | ||
193 | * returns the required buffer size. | ||
194 | * | ||
195 | * arg don't care | ||
196 | * sz sizeof buffer pointed to by p | ||
197 | * p pointer to array of struct sn_hwperf_object_info | ||
198 | */ | ||
199 | #define SN_HWPERF_GET_CPU_INFO (100|SN_HWPERF_OP_MEM_COPYOUT) | ||
200 | |||
201 | /* | ||
202 | * Given an object id, return it's node number (aka cnode). | ||
203 | * arg object id | ||
204 | * sz 8 | ||
205 | * p pointer to u64 integer | ||
206 | */ | ||
207 | #define SN_HWPERF_GET_OBJ_NODE (101|SN_HWPERF_OP_MEM_COPYOUT) | ||
208 | |||
209 | /* | ||
210 | * Given a node number (cnode), return it's nasid. | ||
211 | * arg ordinal node number (aka cnodeid) | ||
212 | * sz 8 | ||
213 | * p pointer to u64 integer | ||
214 | */ | ||
215 | #define SN_HWPERF_GET_NODE_NASID (102|SN_HWPERF_OP_MEM_COPYOUT) | ||
216 | |||
217 | /* return codes */ | ||
218 | #define SN_HWPERF_OP_OK 0 | ||
219 | #define SN_HWPERF_OP_NOMEM 1 | ||
220 | #define SN_HWPERF_OP_NO_PERM 2 | ||
221 | #define SN_HWPERF_OP_IO_ERROR 3 | ||
222 | #define SN_HWPERF_OP_BUSY 4 | ||
223 | #define SN_HWPERF_OP_RECONFIGURE 253 | ||
224 | #define SN_HWPERF_OP_INVAL 254 | ||
225 | |||
226 | #endif /* SN_HWPERF_H */ | ||