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
|
/*
* 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 (c) 1984, 1986, 1987, 1988, 1989 AT&T
* All Rights Reserved
*
*/
/*
* Copyright 2014 Garrett D'Amore <garrett@damore.org>
*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* Copyright 2019 Joyent, Inc.
*/
#ifndef _SYS_PROCESSOR_H
#define _SYS_PROCESSOR_H
#include <sys/types.h>
#include <sys/procset.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* Definitions for p_online, processor_info & lgrp system calls.
*/
/*
* Type for an lgrpid
*/
typedef uint16_t lgrpid_t;
/*
* Type for processor name (CPU number).
*/
typedef int processorid_t;
typedef int chipid_t;
/*
* Flags and return values for p_online(2), and pi_state for processor_info(2).
* These flags are *not* for in-kernel examination of CPU states.
* See <sys/cpuvar.h> for appropriate informational functions.
*/
#define P_OFFLINE 0x0001 /* processor is offline, as quiet as possible */
#define P_ONLINE 0x0002 /* processor is online */
#define P_STATUS 0x0003 /* value passed to p_online to request status */
#define P_FAULTED 0x0004 /* processor is offline, in faulted state */
#define P_POWEROFF 0x0005 /* processor is powered off */
#define P_NOINTR 0x0006 /* processor is online, but no I/O interrupts */
#define P_SPARE 0x0007 /* processor is offline, can be reactivated */
#define P_DISABLED 0x0008 /* processor is explicitly disabled for use */
#define P_BAD P_FAULTED /* unused but defined by USL */
#define P_FORCED 0x10000000 /* force processor offline */
/*
* String names for processor states defined above.
*/
#define PS_OFFLINE "off-line"
#define PS_ONLINE "on-line"
#define PS_FAULTED "faulted"
#define PS_POWEROFF "powered-off"
#define PS_NOINTR "no-intr"
#define PS_SPARE "spare"
#define PS_DISABLED "disabled"
/*
* Structure filled in by processor_info(2). This structure
* SHOULD NOT BE MODIFIED. Changes to the structure would
* negate ABI compatibility.
*
* The string fields are guaranteed to contain a NULL.
*
* The pi_fputypes field contains a (possibly empty) comma-separated
* list of floating point identifier strings.
*/
#define PI_TYPELEN 16 /* max size of CPU type string */
#define PI_FPUTYPE 32 /* max size of FPU types string */
typedef struct {
int pi_state; /* processor state, see above */
char pi_processor_type[PI_TYPELEN]; /* ASCII CPU type */
char pi_fputypes[PI_FPUTYPE]; /* ASCII FPU types */
int pi_clock; /* CPU clock freq in MHz */
} processor_info_t;
/*
* Binding values for processor_bind(2)
*/
#define PBIND_NONE -1 /* LWP/thread is not bound */
#define PBIND_QUERY -2 /* don't set, just return the binding */
#define PBIND_HARD -3 /* prevents offlining CPU (default) */
#define PBIND_SOFT -4 /* allows offlining CPU */
#define PBIND_QUERY_TYPE -5 /* Return binding type */
/*
* Sentinel values for p_online(2)
*/
#define P_ALL_SIBLINGS (-1)
/*
* User-level system call interface prototypes
*/
#ifndef _KERNEL
extern int p_online(processorid_t processorid, int flag);
extern int processor_info(processorid_t processorid,
processor_info_t *infop);
extern int processor_bind(idtype_t idtype, id_t id,
processorid_t processorid, processorid_t *obind);
extern processorid_t getcpuid(void);
extern lgrpid_t gethomelgroup(void);
#else /* _KERNEL */
/*
* Internal interface prototypes
*/
extern int p_online_internal(processorid_t, int, int *);
extern int p_online_internal_locked(processorid_t, int, int *);
#endif /* !_KERNEL */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_PROCESSOR_H */
|