1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
24  * Copyright (c) 2018, Joyent, Inc.
25  */
26 
27 #ifndef _TOPO_SUBR_H
28 #define	_TOPO_SUBR_H
29 
30 #include <fm/libtopo.h>
31 #include <topo_list.h>
32 
33 #include <pthread.h>
34 #include <stdarg.h>
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 typedef struct topo_debug_mode {
41 	char *tdm_name;		/* mode name */
42 	char *tdm_desc;		/* mode description */
43 	int tdm_mode;		/* mode: See below */
44 } topo_debug_mode_t;
45 
46 #define	TOPO_DBOUT_STDERR	0	/* Debug messages to stderr */
47 #define	TOPO_DBOUT_SYSLOG	1	/* Debug messages to syslog */
48 
49 #define	TOPO_DBG_ERR	0x0001	/* enable error handling debug messages */
50 #define	TOPO_DBG_MOD	0x0002	/* enable module debug messages */
51 #define	TOPO_DBG_MODSVC	0x0004	/* enable module services debug messages */
52 #define	TOPO_DBG_WALK	0x0008	/* enable walker debug messages */
53 #define	TOPO_DBG_XML	0x0010	/* enable xml parsing debug messages */
54 #define	TOPO_DBG_FORCE	0x0020	/* use DINFOFORCE snapshot for topology */
55 #define	TOPO_DBG_ALL	0xffff	/* enable all debug modes */
56 
57 #define	TOPO_STABSTR_INTERNAL	"Internal"	/* private to libtopo */
58 #define	TOPO_STABSTR_PRIVATE	"Private"	/* private to Sun */
59 #define	TOPO_STABSTR_OBSOLETE	"Obsolete"	/* scheduled for removal */
60 #define	TOPO_STABSTR_EXTERNAL	"External"	/* not controlled by Sun */
61 #define	TOPO_STABSTR_UNSTABLE	"Unstable"	/* new or rapidly changing */
62 #define	TOPO_STABSTR_EVOLVING	"Evolving"	/* less rapidly changing */
63 #define	TOPO_STABSTR_STABLE	"Stable"	/* mature interface from Sun */
64 #define	TOPO_STABSTR_STANDARD	"Standard"	/* industry standard */
65 #define	TOPO_STABSTR_UNKNOWN	"Unknown"	/* stability unknown */
66 
67 typedef struct topo_name_trans {
68 	uint32_t	int_value;
69 	const char	*int_name;
70 } topo_name_trans_t;
71 
72 extern topo_name_trans_t topo_sensor_type_table[];
73 extern topo_name_trans_t topo_units_type_table[];
74 extern topo_name_trans_t topo_led_type_table[];
75 extern topo_name_trans_t topo_led_states_table[];
76 extern topo_name_trans_t topo_sensor_states_physical_table[];
77 extern topo_name_trans_t topo_sensor_states_platform_table[];
78 extern topo_name_trans_t topo_sensor_states_processor_table[];
79 extern topo_name_trans_t topo_sensor_states_power_supply_table[];
80 extern topo_name_trans_t topo_sensor_states_power_unit_table[];
81 extern topo_name_trans_t topo_sensor_states_memory_table[];
82 extern topo_name_trans_t topo_sensor_states_bay_table[];
83 extern topo_name_trans_t topo_sensor_states_firmware_table[];
84 extern topo_name_trans_t topo_sensor_states_event_log_table[];
85 extern topo_name_trans_t topo_sensor_states_watchdog1_table[];
86 extern topo_name_trans_t topo_sensor_states_system_table[];
87 extern topo_name_trans_t topo_sensor_states_critical_table[];
88 extern topo_name_trans_t topo_sensor_states_button_table[];
89 extern topo_name_trans_t topo_sensor_states_cable_table[];
90 extern topo_name_trans_t topo_sensor_states_boot_state_table[];
91 extern topo_name_trans_t topo_sensor_states_boot_error_table[];
92 extern topo_name_trans_t topo_sensor_states_boot_os_table[];
93 extern topo_name_trans_t topo_sensor_states_os_table[];
94 extern topo_name_trans_t topo_sensor_states_slot_table[];
95 extern topo_name_trans_t topo_sensor_states_acpi_table[];
96 extern topo_name_trans_t topo_sensor_states_watchdog2_table[];
97 extern topo_name_trans_t topo_sensor_states_alert_table[];
98 extern topo_name_trans_t topo_sensor_states_presence_table[];
99 extern topo_name_trans_t topo_sensor_states_lan_table[];
100 extern topo_name_trans_t topo_sensor_states_health_table[];
101 extern topo_name_trans_t topo_sensor_states_battery_table[];
102 extern topo_name_trans_t topo_sensor_states_audit_table[];
103 extern topo_name_trans_t topo_sensor_states_version_table[];
104 extern topo_name_trans_t topo_sensor_states_fru_state_table[];
105 extern topo_name_trans_t topo_sensor_states_thresh_table[];
106 extern topo_name_trans_t topo_sensor_states_generic_usage_table[];
107 extern topo_name_trans_t topo_sensor_states_generic_state_table[];
108 extern topo_name_trans_t topo_sensor_states_generic_predfail_table[];
109 extern topo_name_trans_t topo_sensor_states_generic_limit_table[];
110 extern topo_name_trans_t topo_sensor_states_generic_perf_table[];
111 extern topo_name_trans_t topo_sensor_states_generic_presence_table[];
112 extern topo_name_trans_t topo_sensor_states_severity_table[];
113 extern topo_name_trans_t topo_sensor_states_generic_avail_table[];
114 extern topo_name_trans_t topo_sensor_states_generic_status_table[];
115 extern topo_name_trans_t topo_sensor_states_generic_acpi_pwr_table[];
116 extern topo_name_trans_t topo_sensor_states_generic_failure_table[];
117 extern topo_name_trans_t topo_sensor_states_generic_ok_table[];
118 
119 extern void topo_hdl_lock(topo_hdl_t *);
120 extern void topo_hdl_unlock(topo_hdl_t *);
121 
122 extern const char *topo_stability_name(topo_stability_t);
123 extern char *topo_version_num2str(topo_version_t, char *, size_t);
124 extern int topo_version_str2num(const char *, topo_version_t);
125 extern int topo_version_defined(topo_version_t);
126 
127 extern void topo_dprintf(topo_hdl_t *, int, const char *, ...);
128 extern void topo_vdprintf(topo_hdl_t *, const char *, const char *,
129     va_list);
130 
131 extern tnode_t *topo_hdl_root(topo_hdl_t *, const char *);
132 extern char *topo_search_path(topo_mod_t *, const char *, const char *);
133 
134 extern void topo_fmristr_build(ssize_t *, char *, size_t, char *, char *,
135     char *);
136 
137 extern int topo_walk_byid(topo_walk_t *wp, const char *name, topo_instance_t);
138 extern int topo_walk_bysibling(topo_walk_t *wp, const char *name,
139     topo_instance_t);
140 
141 extern char *topo_cleanup_auth_str(topo_hdl_t *, const char *);
142 extern char *topo_cleanup_strn(topo_hdl_t *, const char *, size_t);
143 
144 #ifdef __cplusplus
145 }
146 #endif
147 
148 #endif	/* _TOPO_SUBR_H */
149