summaryrefslogtreecommitdiff
path: root/usr/src/cmd/picl/plugins/sun4u/psvc/psvcobj/psvc_objects.h
blob: 44c6f444968e51611e1b24306c05036297e77935 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_PSVC_OBJECTS_H
#define	_PSVC_OBJECTS_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

#ifdef	__cplusplus
extern "C" {
#endif

/*
 * Platform Services Framework definitions
 */

#include <sys/types.h>
#include <pthread.h>

typedef struct psvc_opaque *psvc_opaque_t;

/* Return values */
#define	PSVC_SUCCESS 0
#define	PSVC_FAILURE -1
#define	PSVC_NOT_USED -1

/* Class definitions */
#define	PSVC_TEMPERATURE_SENSOR_CLASS 0
#define	PSVC_FAN_CLASS 1
#define	PSVC_LED_CLASS 2
#define	PSVC_SYSTEM_CLASS 3
#define	PSVC_DIGITAL_SENSOR_CLASS 4
#define	PSVC_DIGITAL_CONTROL_CLASS 5
#define	PSVC_BOOLEAN_GPIO_CLASS 6
#define	PSVC_FAN_TACHOMETER_CLASS 7
#define	PSVC_ON_OFF_SWITCH_CLASS 8
#define	PSVC_KEYSWITCH_CLASS 9
#define	PSVC_8BIT_GPIO_CLASS 10
#define	PSVC_PHYSICAL_DEVICE_CLASS 11

#define	PSVC_CHASSIS "SYSTEM"

/* Associations */
#define	PSVC_PRESENCE_SENSOR 0
#define	PSVC_FAN_ONOFF_SENSOR 1
#define	PSVC_FAN_SPEED_TACHOMETER 2
#define	PSVC_FAN_PRIM_SEC_SELECTOR 3
#define	PSVC_DEV_TEMP_SENSOR 4
#define	PSVC_FAN_DRIVE_CONTROL 5
#define	PSVC_KS_NORMAL_POS_SENSOR 6
#define	PSVC_KS_DIAG_POS_SENSOR 7
#define	PSVC_KS_LOCK_POS_SENSOR 8
#define	PSVC_KS_OFF_POS_SENSOR 9
#define	PSVC_SLOT_FAULT_LED 10
#define	PSVC_SLOT_REMOVE_LED 11
#define	PSVC_TS_OVERTEMP_LED 12
#define	PSVC_PS_I_SENSOR 13
#define	PSVC_DEV_FAULT_SENSOR 14
#define	PSVC_DEV_FAULT_LED 15
#define	PSVC_TABLE 16
#define	PSVC_PARENT 17
#define	PSVC_CPU 18
#define	PSVC_ALTERNATE 19
#define	PSVC_HOTPLUG_ENABLE_SWITCH 20
#define	PSVC_PS 21
#define	PSVC_FAN 22
#define	PSVC_TS 23
#define	PSVC_DISK 24
#define	PSVC_LED 25
#define	PSVC_FSP_LED 26
#define	PSVC_KEYSWITCH 27
#define	PSVC_PCI_CARD 28
#define	PSVC_PHYSICAL_DEVICE 29
#define	PSVC_DEV_TYPE_SENSOR 30
#define	PSVC_FAN_TRAY_FANS 31
#define	PSVC_FRU 32


/* Device "feature" definitions */
#define	PSVC_DEV_PERM		0x0000000000000001ULL /* Permanently in sys */
#define	PSVC_DEV_HOTPLUG	0x0000000000000002ULL /* Hot-pluggable device */
#define	PSVC_DEV_OPTION	0x0000000000000004ULL /* Option (not hot-pluggable) */
#define	PSVC_DEV_PRIMARY	0x0000000000000010ULL /* Primary device */
#define	PSVC_DEV_SECONDARY	0x0000000000000020ULL /* Secondary device */
#define	PSVC_DEV_RDONLY    	0x0000000000000100ULL /* Read only device */
#define	PSVC_DEV_RDWR		0x0000000000000400ULL /* read/write device */
#define	PSVC_DEV_FRU		0x0000000000000800ULL /* device is a FRU */
#define	PSVC_LOW_WARN		0x0000000000001000ULL
#define	PSVC_LOW_SHUT		0x0000000000002000ULL
#define	PSVC_HIGH_WARN		0x0000000000004000ULL
#define	PSVC_HIGH_SHUT		0x0000000000008000ULL
#define	PSVC_CONVERSION_TABLE	0x0000000000010000ULL /* Conversion table */
#define	PSVC_OPT_TEMP		0x0000000000020000ULL /* Optimal Temperature */
#define	PSVC_HW_LOW_SHUT	0x0000000000040000ULL
#define	PSVC_HW_HIGH_SHUT	0x0000000000080000ULL
#define	PSVC_FAN_DRIVE_PR	0x0001000000000000ULL
#define	PSVC_TEMP_DRIVEN	0x0002000000000000ULL /* Temperature driven */
#define	PSVC_SPEED_CTRL_PR	0x0004000000000000ULL /* Variable speed ctrl */
#define	PSVC_FAN_ON_OFF		0x0008000000000000ULL /* On/off fans */
#define	PSVC_CLOSED_LOOP_CTRL	0x0010000000000000ULL /* Closed loop control */
#define	PSVC_FAN_DRIVE_TABLE_PR 0x0010000000000000ULL /* oC to fan input tbl */
#define	PSVC_DIE_TEMP		0x0001000000000000ULL
#define	PSVC_AMB_TEMP		0x0002000000000000ULL
#define	PSVC_DIGI_SENSOR	0x0100000000000000ULL /* A to D converter */
#define	PSVC_BI_STATE		0x0001000000000000ULL
#define	PSVC_TRI_STATE		0x0002000000000000ULL
#define	PSVC_GREEN		0x0010000000000000ULL
#define	PSVC_AMBER		0x0020000000000000ULL
#define	PSVC_OUTPUT		0x0100000000000000ULL
#define	PSVC_INPUT		0x0200000000000000ULL
#define	PSVC_BIDIR		0x0400000000000000ULL
#define	PSVC_BIT_POS	0x0001000000000000ULL /* One bit per key positon */
#define	PSVC_VAL_POS	0x0002000000000000ULL /* One value per key position */
#define	PSVC_NORMAL_POS_AV	0x0010000000000000ULL
#define	PSVC_DIAG_POS_AV	0x0020000000000000ULL
#define	PSVC_LOCK_POS_AV	0x0040000000000000ULL
#define	PSVC_OFF_POS_AV		0x0080000000000000ULL
#define	PSVC_GPIO_PORT		0x0001000000000000ULL
#define	PSVC_GPIO_REG		0x0002000000000000ULL


/* LED colors */
#define	PSVC_LED_GREEN "GREEN"
#define	PSVC_LED_AMBER "AMBER"
#define	PSVC_LED_WHITE "WHITE"
#define	PSVC_LED_RED "RED"

/* States */
#define	PSVC_OK	"OK"
#define	PSVC_ERROR	"ERROR"
#define	PSVC_DEGRADED "DEGRADED"
#define	PSVC_STOPPED "STOPPED"
#define	PSVC_OVERHEATING "OVERHEATING"
#define	PSVC_OFF "OFF"
#define	PSVC_ON "ON"
#define	PSVC_HOTPLUGGED "HOTPLUGGED"	/* hotplugged, but not yet enabled */

/*
 * The Following States are for the Locking Object created by PSARC 2002/003
 */
#define	PSVC_LOCK_RUNNING "running"
#define	PSVC_LOCK_ENABLED "enabled"
#define	PSVC_LOCK_DISABLED "disabled"

/* LED states */
#define	PSVC_LED_OFF PSVC_OFF
#define	PSVC_LED_ON PSVC_ON
#define	PSVC_LED_SLOW_BLINK "SLOW_BLINK"
#define	PSVC_LED_FAST_BLINK "FAST_BLINK"

/* On/Off switch states */
#define	PSVC_SWITCH_OFF PSVC_OFF
#define	PSVC_SWITCH_ON PSVC_ON

/* Keyswitch positions */
#define	PSVC_OFF_POS PSVC_OFF
#define	PSVC_NORMAL_POS "NORMAL"
#define	PSVC_LOCKED_POS "LOCKED"
#define	PSVC_DIAG_POS "DIAG"

/* Fault strings */
#define	PSVC_NO_FAULT "NO_FAULT"
#define	PSVC_GEN_FAULT "DEVICE_FAULT"
#define	PSVC_PS_LLO_FLT "PS_LLO_FAULT"
#define	PSVC_PS_FAN_FLT "PS_FAN_FAULT"
#define	PSVC_PS_TEMP_FLT "PS_TEMP_FAULT"
#define	PSVC_PS_ISHARE_FLT "PS_ISHARE_FAULT"
#define	PSVC_PS_TYPE_FLT "PS_TYPE_FLT"
#define	PSVC_TEMP_LO_WARN "TEMP_LOW_WARNING"
#define	PSVC_TEMP_LO_SHUT "TEMP_LOW_SHUTDOWN"
#define	PSVC_TEMP_HI_WARN "TEMP_HIGH_WARNING"
#define	PSVC_TEMP_HI_SHUT "TEMP_HIGH_SHUTDOWN"

/*
 * When Adding Attributes be sure to add the string value of the
 * Attribute to attr_str_tab in psvc_objects_class.h
 */

/* Attribute names */
#define	PSVC_CLASS_ATTR				0	/* "_class" */
#define	PSVC_SUBCLASS_ATTR			1	/* "Subclass" */
#define	PSVC_PRESENCE_ATTR			2	/* "Presence" */
#define	PSVC_PREV_PRESENCE_ATTR			3	/* Previous-presence */
#define	PSVC_STATE_ATTR				4	/* "State" */
#define	PSVC_PREV_STATE_ATTR			5	/* "Previous-state" */
#define	PSVC_ENABLE_ATTR			6	/* "Enabled" */
#define	PSVC_FAULTID_ATTR			7	/* "FaultInformation" */
#define	PSVC_FEATURES_ATTR			8	/* "Features" */
#define	PSVC_LABEL_ATTR				9	/* "Label" */
#define	PSVC_FRUID_ATTR				10	/* "Fruid" */
#define	PSVC_INSTANCE_ATTR			11	/* "Instance" */
#define	PSVC_LED_COLOR_ATTR			12	/* "Led-color" */
#define	PSVC_LO_WARN_ATTR			13	/* "Lo-warn" */
#define	PSVC_LO_SHUT_ATTR			14	/* "Lo-shut" */
#define	PSVC_HI_WARN_ATTR			15	/* "Hi-warn" */
#define	PSVC_HI_SHUT_ATTR			16	/* "Hi-shut" */
#define	PSVC_OPTIMAL_TEMP_ATTR			17	/* "Opt-temp" */
#define	PSVC_HW_HI_SHUT_ATTR			18	/* "Hw-hi-shut" */
#define	PSVC_HW_LO_SHUT_ATTR			19	/* "Hw-lo-shut" */
#define	PSVC_SETPOINT_ATTR			20	/* "Setpoint" */
#define	PSVC_HYSTERESIS_ATTR			21	/* "Hysteresis" */
#define	PSVC_LOOPGAIN_ATTR			22	/* "Loopgain" */
#define	PSVC_LOOPBIAS_ATTR			23	/* "Loopbias" */
#define	PSVC_TEMP_DIFFERENTIAL_ATTR		24 /* "Temp_differential" */
#define	PSVC_TEMP_DIFFERENTIAL_INDEX_ATTR	25 /* Temp_differential_index */
#define	PSVC_SENSOR_VALUE_ATTR			26	/* "Sensor-value" */
#define	PSVC_GPIO_VALUE_ATTR			27	/* "Gpio-value" */
#define	PSVC_GPIO_BITS				28	/* "#Bits" */
#define	PSVC_CONTROL_VALUE_ATTR			29	/* "Control-value" */
#define	PSVC_LED_STATE_ATTR			30	/* "Led-state" */
#define	PSVC_SWITCH_STATE_ATTR			31	/* "Switch-state" */
#define	PSVC_PROBE_RESULT_ATTR			32	/* "Probe-result" */
#define	PSVC_TABLE_VALUE_ATTR			33	/* "Table_value" */
#define	PSVC_ASSOC_ID_ATTR			34	/* "Assoc_id" */
#define	PSVC_ASSOC_MATCHES_ATTR			35	/* "Assoc_matches" */
#define	PSVC_ADDR_SPEC_ATTR			36	/* "Addr-spec" */
#define	PSVC_OBJECT_ID_ATTR			37	/* "Object-id" */
#define	PSVC_LIT_COUNT_ATTR			38	/* "Led-lit-count" */
#define	PSVC_FRU_INFO_ATTR			39	/* "FRU-info" */

#define	PSVC_LED_IS_LOCATOR_ATTR		40	/* "IsLocator" */
#define	PSVC_LED_LOCATOR_NAME_ATTR		41	/* "LocatorName" */
#define	PSVC_LOCATOR_TRUE	"true"

/* PSVC_PRESENCE_ATTR values */
#define	PSVC_ABSENT 0
#define	PSVC_PRESENT 1

/* PSVC_ENABLE_ATTR values */
#define	PSVC_DISABLED 0
#define	PSVC_ENABLED 1

/* PSVC_PROBE_RESULT_ATTR values */
#define	PSVC_DEV_PROBE_SUCCESS PSVC_SUCCESS
#define	PSVC_DEV_PROBE_FAILED  PSVC_FAILURE

/* Size of fan temperature differential array */
#define	PSVC_MAXERRORS 2

/* Address specification macros */
#define	PSVC_VERSION 0		/* Current version */

#define	PSVC_VERSION_SHIFT 0
#define	PSVC_ACTIVE_LOW_SHIFT 7
#define	PSVC_BIT_NUM_SHIFT 4
#define	PSVC_INVERT_SHIFT 4
#define	PSVC_PORT_SHIFT 8
#define	PSVC_BITSHIFT_SHIFT 12
#define	PSVC_BYTEMASK_SHIFT 16
#define	PSVC_REG_SHIFT 24
#define	PSVC_TYPE_SHIFT 32
#define	PSVC_BUSADDR_SHIFT 40
#define	PSVC_BUSNUM_SHIFT 48
#define	PSVC_CNTLR_SHIFT 56

#define	PSVC_GET_VERSION(X) ((X >> PSVC_VERSION_SHIFT) & 0xF)
#define	PSVC_IS_ACTIVE_LOW(X) ((X >> PSVC_ACTIVE_LOW_SHIFT) & 0x1)
#define	PSVC_GET_BIT_NUM(X)  ((X >> PSVC_BIT_NUM_SHIFT) & 0x7)
#define	PSVC_HP_INVERT(X) (((X >> PSVC_INVERT_SHIFT) & 0x7) == 1)
#define	PSVC_GET_ASPEC_PORT(X) ((X >> PSVC_PORT_SHIFT) & 0xF)
#define	PSVC_GET_ASPEC_BITSHIFT(X) ((X >> PSVC_BITSHIFT_SHIFT) & 0xF)
#define	PSVC_GET_ASPEC_BYTEMASK(X) ((X >> PSVC_BYTEMASK_SHIFT) & 0xFF)
#define	PSVC_GET_ASPEC_REG(X) ((X >> PSVC_REG_SHIFT) & 0xFF)
#define	PSVC_GET_ASPEC_TYPE(X) ((X >> PSVC_TYPE_SHIFT) & 0xFF)
#define	PSVC_GET_ASPEC_BUSADDR(X) ((X >> PSVC_BUSADDR_SHIFT) & 0xFF)
#define	PSVC_GET_ASPEC_BUSNUM(X) ((X >> PSVC_BUSNUM_SHIFT) & 0xFF)
#define	PSVC_GET_ASPEC_CNTLR(X) ((X >> PSVC_CNTLR_SHIFT) & 0xFF)


/* Address spec device_types */
#define	PSVC_I2C_AT24		0
#define	PSVC_I2C_HPC3130	1
#define	PSVC_I2C_LM75		2
#define	PSVC_I2C_LTC1427	3
#define	PSVC_I2C_MAX1617	4
#define	PSVC_I2C_PCF8574	5
#define	PSVC_I2C_PCF8591	6
#define	PSVC_I2C_SSC050		7
#define	PSVC_I2C_TDA8444	8
#define	PSVC_I2C_SSC100		9

/* numbers of attempts for retrying requests over the I2C bus */
#define	PSVC_NUM_OF_RETRIES	5
#define	PSVC_THRESHOLD_COUNTER	5

/* Prototypes */
#ifndef LIBRARY_BUILD
int32_t psvc_init(psvc_opaque_t *);
int32_t psvc_fini(psvc_opaque_t);
int32_t psvc_get_attr(psvc_opaque_t, char *, int32_t, void *, ...);
int32_t psvc_set_attr(psvc_opaque_t, char *, int32_t, void *);
void psvcplugin_add_children(char *parent_path);
void psvcplugin_lookup(char *name, char *parent, picl_nodehdl_t *node);
#endif

/* FRU reading structure */
typedef struct {
	int32_t buf_start;
	char *buf;
	int32_t read_size;
}fru_info_t;

/* Mutex used for Daktari Fan speed reading */
extern pthread_mutex_t fan_mutex;

#ifdef	__cplusplus
}
#endif

#endif /* _PSVC_OBJECTS_H */