summaryrefslogtreecommitdiff
path: root/usr/src/lib/librcm/librcm.h
blob: 5c105fd173cb62ceb980d0116fc59e3c42db6ce1 (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
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (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 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef	_LIBRCM_H
#define	_LIBRCM_H

#include <libnvpair.h>
#include <sys/types.h>
#include <sys/processor.h>
#include <sys/pset.h>
#include <sys/time_impl.h>

#ifdef	__cplusplus
extern "C" {
#endif

/*
 * Flags for rcm requests
 */
#define	RCM_INCLUDE_SUBTREE	0x0001
#define	RCM_INCLUDE_DEPENDENT	0x0002
#define	RCM_QUERY		0x0004
#define	RCM_FORCE		0x0008
#define	RCM_FILESYS		0x0010	/* private to filesys module */
#define	RCM_NOPID		0x0020
#define	RCM_DR_OPERATION	0x0040
#define	RCM_MOD_INFO		0x0080	/* private */
#define	RCM_CAPACITY_ADD	0x0100
#define	RCM_CAPACITY_DELETE	0x0200
#define	RCM_QUERY_CANCEL	0x0400	/* private */
#define	RCM_SCOPE		0x0800
#define	RCM_REGISTER_DR		0x1000	/* private */
#define	RCM_REGISTER_EVENT	0x2000	/* private */
#define	RCM_REGISTER_CAPACITY	0x4000	/* private */
#define	RCM_SUSPENDED		0x8000	/* private */
#define	RCM_RETIRE_REQUEST	0x10000
#define	RCM_RETIRE_NOTIFY	0x20000

/*
 * RCM return values
 */
#define	RCM_SUCCESS		0
#define	RCM_FAILURE		-1
#define	RCM_CONFLICT		-2
#define	RCM_NO_CONSTRAINT	-3

/*
 * RCM resource states
 */
#define	RCM_STATE_UNKNOWN		0
#define	RCM_STATE_ONLINE		1
#define	RCM_STATE_ONLINING		2
#define	RCM_STATE_OFFLINE_FAIL		3
#define	RCM_STATE_OFFLINING		4
#define	RCM_STATE_OFFLINE		5
#define	RCM_STATE_REMOVING		6
#define	RCM_STATE_RESUMING		10
#define	RCM_STATE_SUSPEND_FAIL		11
#define	RCM_STATE_SUSPENDING		12
#define	RCM_STATE_SUSPEND		13
#define	RCM_STATE_REMOVE		14	/* private to rcm_daemon */
#define	RCM_STATE_OFFLINE_QUERYING	15
#define	RCM_STATE_OFFLINE_QUERY_FAIL	16
#define	RCM_STATE_OFFLINE_QUERY		17
#define	RCM_STATE_SUSPEND_QUERYING	18
#define	RCM_STATE_SUSPEND_QUERY_FAIL	19
#define	RCM_STATE_SUSPEND_QUERY		20

/*
 * RCM event attr and properties
 */
#define	RCM_RSRCNAME		"rcm.rsrcname"
#define	RCM_CLIENT_NAME		"rcm.client_name"
#define	RCM_CLIENT_EXPORTS	"rcm.client_exports"

/* Resource name to register for new links reconfigured */
#define	RCM_RESOURCE_LINK_NEW		"SUNW_event/resource/new/link"

/* Resource name to register for new physical data-links */
#define	RCM_RESOURCE_PHYSLINK_NEW	"SUNW_event/resource/new/physlink"

/* name-value pair definitions for rcm_notify_event() */
#define	RCM_NV_LINKID		"linkid"
#define	RCM_NV_RECONFIGURED	"reconfigured"

/*
 * rcm handles
 */
typedef struct rcm_handle rcm_handle_t;
typedef struct rcm_info rcm_info_t;
typedef rcm_info_t rcm_info_tuple_t;

/*
 * Interface definitions
 */
int rcm_alloc_handle(char *, uint_t, void *, rcm_handle_t **);
int rcm_free_handle(rcm_handle_t *);
int rcm_get_info(rcm_handle_t *, char *, uint_t, rcm_info_t **);
int rcm_get_info_list(rcm_handle_t *, char **, uint_t, rcm_info_t **);
void rcm_free_info(rcm_info_t *);
int rcm_append_info(rcm_info_t **, rcm_info_t *);
rcm_info_tuple_t *rcm_info_next(rcm_info_t *, rcm_info_tuple_t *);
const char *rcm_info_rsrc(rcm_info_tuple_t *);
const char *rcm_info_info(rcm_info_tuple_t *);
const char *rcm_info_error(rcm_info_tuple_t *);
const char *rcm_info_modname(rcm_info_tuple_t *);
pid_t rcm_info_pid(rcm_info_tuple_t *);
int rcm_info_state(rcm_info_tuple_t *);
int rcm_info_seqnum(rcm_info_tuple_t *);
nvlist_t *rcm_info_properties(rcm_info_tuple_t *);

int rcm_request_offline(rcm_handle_t *, char *, uint_t, rcm_info_t **);
int rcm_request_offline_list(rcm_handle_t *, char **, uint_t, rcm_info_t **);
int rcm_notify_online(rcm_handle_t *, char *, uint_t, rcm_info_t **);
int rcm_notify_online_list(rcm_handle_t *, char **, uint_t, rcm_info_t **);
int rcm_notify_remove(rcm_handle_t *, char *, uint_t, rcm_info_t **);
int rcm_notify_remove_list(rcm_handle_t *, char **, uint_t, rcm_info_t **);
int rcm_request_suspend(rcm_handle_t *, char *, uint_t, timespec_t *,
	rcm_info_t **);
int rcm_request_suspend_list(rcm_handle_t *, char **, uint_t, timespec_t *,
	rcm_info_t **);
int rcm_notify_resume(rcm_handle_t *, char *, uint_t, rcm_info_t **);
int rcm_notify_resume_list(rcm_handle_t *, char **, uint_t, rcm_info_t **);
int rcm_notify_capacity_change(rcm_handle_t *, char *, uint_t, nvlist_t *,
	rcm_info_t **);
int rcm_request_capacity_change(rcm_handle_t *, char *, uint_t, nvlist_t *,
	rcm_info_t **);
int rcm_notify_event(rcm_handle_t *, char *, uint_t, nvlist_t *, rcm_info_t **);

int rcm_register_event(rcm_handle_t *, char *, uint_t, rcm_info_t **);
int rcm_register_capacity(rcm_handle_t *, char *, uint_t, rcm_info_t **);
int rcm_register_interest(rcm_handle_t *, char *, uint_t, rcm_info_t **);
int rcm_unregister_event(rcm_handle_t *, char *, uint_t);
int rcm_unregister_capacity(rcm_handle_t *, char *, uint_t);
int rcm_unregister_interest(rcm_handle_t *, char *, uint_t);

int rcm_get_rsrcstate(rcm_handle_t *, char *, int *);
int rcm_exec_cmd(char *);
const char *rcm_get_client_name(rcm_handle_t *);

#ifdef	__cplusplus
}
#endif

#endif	/* _LIBRCM_H */