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
|
/*
* 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 (c) 1999-2000 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _SYS_SUNPM_H
#define _SYS_SUNPM_H
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* Sun Specific Power Management definitions
*/
#include <sys/isa_defs.h>
#include <sys/dditypes.h>
#include <sys/ddipropdefs.h>
#include <sys/devops.h>
#include <sys/time.h>
#include <sys/cmn_err.h>
#include <sys/ddidevmap.h>
#include <sys/ddi_implfuncs.h>
#include <sys/ddi_isa.h>
#include <sys/model.h>
#include <sys/devctl.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _KERNEL
/*
* Power cycle transition check is supported for these devices.
*/
#define DC_SCSI_FORMAT 0x1 /* SCSI */
#define DC_SCSI_MFR_LEN 6 /* YYYYWW */
struct pm_scsi_cycles {
int lifemax; /* lifetime max power cycles */
int ncycles; /* number of cycles so far */
char svc_date[DC_SCSI_MFR_LEN]; /* service date YYYYWW */
int flag; /* reserved for future */
};
struct pm_trans_data {
int format; /* data format */
union {
struct pm_scsi_cycles scsi_cycles;
} un;
};
/*
* Power levels for devices supporting ACPI based D0, D1, D2, D3 states.
*
* Note that 0 is off in Solaris PM framework but D0 is full power
* for these devices.
*/
#define PM_LEVEL_D3 0 /* D3 state - off */
#define PM_LEVEL_D2 1 /* D2 state */
#define PM_LEVEL_D1 2 /* D1 state */
#define PM_LEVEL_D0 3 /* D0 state - fully on */
/*
* Useful strings for creating pm-components property for these devices.
* If a device driver wishes to provide more specific description of power
* levels (highly recommended), it should NOT use following generic defines.
*/
#define PM_LEVEL_D3_STR "0=Device D3 State"
#define PM_LEVEL_D2_STR "1=Device D2 State"
#define PM_LEVEL_D1_STR "2=Device D1 State"
#define PM_LEVEL_D0_STR "3=Device D0 State"
/*
* If you add or remove a function or data reference, please
* remember to duplicate the action below the #else clause for
* __STDC__.
*/
#ifdef __STDC__
/*
* Generic Sun PM definitions.
*/
/*
* These are obsolete power management interfaces, they will be removed from
* a subsequent release.
*/
int
pm_create_components(dev_info_t *dip, int num_components);
void
pm_destroy_components(dev_info_t *dip);
void
pm_set_normal_power(dev_info_t *dip, int component_number, int level);
int
pm_get_normal_power(dev_info_t *dip, int component_number);
/*
* These are power management interfaces.
*/
int
pm_busy_component(dev_info_t *dip, int component_number);
int
pm_idle_component(dev_info_t *dip, int component_number);
int
pm_get_current_power(dev_info_t *dip, int component, int *levelp);
int
pm_power_has_changed(dev_info_t *, int, int);
int
pm_trans_check(struct pm_trans_data *datap, time_t *intervalp);
int
pm_lower_power(dev_info_t *dip, int comp, int level);
int
pm_raise_power(dev_info_t *dip, int comp, int level);
#else /* __STDC__ */
/*
* Obsolete interfaces.
*/
extern int pm_create_components();
extern void pm_destroy_components();
extern void pm_set_normal_power();
extern int pm_get_normal_power();
/*
* PM interfaces
*/
extern int pm_busy_component();
extern int pm_idle_component();
extern int pm_get_current_power();
extern int pm_power_has_changed();
extern int pm_trans_check();
extern int pm_lower_power();
extern int pm_raise_power();
#endif /* __STDC__ */
#endif /* _KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_SUNPM_H */
|