1f0a75d27SPawel Jakub Dawidek /* 2f0a75d27SPawel Jakub Dawidek * CDDL HEADER START 3f0a75d27SPawel Jakub Dawidek * 4f0a75d27SPawel Jakub Dawidek * The contents of this file are subject to the terms of the 51ba4a712SPawel Jakub Dawidek * Common Development and Distribution License (the "License"). 61ba4a712SPawel Jakub Dawidek * You may not use this file except in compliance with the License. 7f0a75d27SPawel Jakub Dawidek * 8f0a75d27SPawel Jakub Dawidek * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9f0a75d27SPawel Jakub Dawidek * or http://www.opensolaris.org/os/licensing. 10f0a75d27SPawel Jakub Dawidek * See the License for the specific language governing permissions 11f0a75d27SPawel Jakub Dawidek * and limitations under the License. 12f0a75d27SPawel Jakub Dawidek * 13f0a75d27SPawel Jakub Dawidek * When distributing Covered Code, include this CDDL HEADER in each 14f0a75d27SPawel Jakub Dawidek * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15f0a75d27SPawel Jakub Dawidek * If applicable, add the following below this CDDL HEADER, with the 16f0a75d27SPawel Jakub Dawidek * fields enclosed by brackets "[]" replaced with your own identifying 17f0a75d27SPawel Jakub Dawidek * information: Portions Copyright [yyyy] [name of copyright owner] 18f0a75d27SPawel Jakub Dawidek * 19f0a75d27SPawel Jakub Dawidek * CDDL HEADER END 20f0a75d27SPawel Jakub Dawidek */ 21f0a75d27SPawel Jakub Dawidek /* 22f0a75d27SPawel Jakub Dawidek * Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T 23f0a75d27SPawel Jakub Dawidek * All Rights Reserved 24f0a75d27SPawel Jakub Dawidek * 25f0a75d27SPawel Jakub Dawidek */ 26f0a75d27SPawel Jakub Dawidek 27f0a75d27SPawel Jakub Dawidek /* 281ba4a712SPawel Jakub Dawidek * Copyright 2014 Garrett D'Amore <garrett@damore.org> 29f0a75d27SPawel Jakub Dawidek * 30f0a75d27SPawel Jakub Dawidek * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 31f0a75d27SPawel Jakub Dawidek * Use is subject to license terms. 32f0a75d27SPawel Jakub Dawidek */ 33f0a75d27SPawel Jakub Dawidek 34f0a75d27SPawel Jakub Dawidek #ifndef _SYS_PROCESSOR_H 35f0a75d27SPawel Jakub Dawidek #define _SYS_PROCESSOR_H 36f0a75d27SPawel Jakub Dawidek 37f0a75d27SPawel Jakub Dawidek #include <sys/types.h> 38f0a75d27SPawel Jakub Dawidek #include <sys/procset.h> 39f0a75d27SPawel Jakub Dawidek 40f0a75d27SPawel Jakub Dawidek #ifdef __cplusplus 41f0a75d27SPawel Jakub Dawidek extern "C" { 42f0a75d27SPawel Jakub Dawidek #endif 43f0a75d27SPawel Jakub Dawidek 44f0a75d27SPawel Jakub Dawidek /* 45f0a75d27SPawel Jakub Dawidek * Definitions for p_online, processor_info & lgrp system calls. 46f0a75d27SPawel Jakub Dawidek */ 47f0a75d27SPawel Jakub Dawidek 48f0a75d27SPawel Jakub Dawidek /* 49f0a75d27SPawel Jakub Dawidek * Type for an lgrpid 50f0a75d27SPawel Jakub Dawidek */ 51f0a75d27SPawel Jakub Dawidek typedef uint16_t lgrpid_t; 52f0a75d27SPawel Jakub Dawidek 53f0a75d27SPawel Jakub Dawidek /* 54f0a75d27SPawel Jakub Dawidek * Type for processor name (CPU number). 55f0a75d27SPawel Jakub Dawidek */ 56f0a75d27SPawel Jakub Dawidek typedef int processorid_t; 57f0a75d27SPawel Jakub Dawidek typedef int chipid_t; 58f0a75d27SPawel Jakub Dawidek 59f0a75d27SPawel Jakub Dawidek /* 60f0a75d27SPawel Jakub Dawidek * Flags and return values for p_online(2), and pi_state for processor_info(2). 61f0a75d27SPawel Jakub Dawidek * These flags are *not* for in-kernel examination of CPU states. 62f0a75d27SPawel Jakub Dawidek * See <sys/cpuvar.h> for appropriate informational functions. 63f0a75d27SPawel Jakub Dawidek */ 64f0a75d27SPawel Jakub Dawidek #define P_OFFLINE 0x0001 /* processor is offline, as quiet as possible */ 65f0a75d27SPawel Jakub Dawidek #define P_ONLINE 0x0002 /* processor is online */ 66f0a75d27SPawel Jakub Dawidek #define P_STATUS 0x0003 /* value passed to p_online to request status */ 67f0a75d27SPawel Jakub Dawidek #define P_FAULTED 0x0004 /* processor is offline, in faulted state */ 68f0a75d27SPawel Jakub Dawidek #define P_POWEROFF 0x0005 /* processor is powered off */ 69f0a75d27SPawel Jakub Dawidek #define P_NOINTR 0x0006 /* processor is online, but no I/O interrupts */ 70f0a75d27SPawel Jakub Dawidek #define P_SPARE 0x0007 /* processor is offline, can be reactivated */ 71f0a75d27SPawel Jakub Dawidek #define P_BAD P_FAULTED /* unused but defined by USL */ 72f0a75d27SPawel Jakub Dawidek #define P_FORCED 0x10000000 /* force processor offline */ 73f0a75d27SPawel Jakub Dawidek 74f0a75d27SPawel Jakub Dawidek /* 75f0a75d27SPawel Jakub Dawidek * String names for processor states defined above. 76f0a75d27SPawel Jakub Dawidek */ 77f0a75d27SPawel Jakub Dawidek #define PS_OFFLINE "off-line" 78f0a75d27SPawel Jakub Dawidek #define PS_ONLINE "on-line" 79f0a75d27SPawel Jakub Dawidek #define PS_FAULTED "faulted" 80f0a75d27SPawel Jakub Dawidek #define PS_POWEROFF "powered-off" 81f0a75d27SPawel Jakub Dawidek #define PS_NOINTR "no-intr" 82f0a75d27SPawel Jakub Dawidek #define PS_SPARE "spare" 831ba4a712SPawel Jakub Dawidek 841ba4a712SPawel Jakub Dawidek /* 851ba4a712SPawel Jakub Dawidek * Structure filled in by processor_info(2). This structure 86f0a75d27SPawel Jakub Dawidek * SHOULD NOT BE MODIFIED. Changes to the structure would 87f0a75d27SPawel Jakub Dawidek * negate ABI compatibility. 88f0a75d27SPawel Jakub Dawidek * 89f0a75d27SPawel Jakub Dawidek * The string fields are guaranteed to contain a NULL. 90f0a75d27SPawel Jakub Dawidek * 91f0a75d27SPawel Jakub Dawidek * The pi_fputypes field contains a (possibly empty) comma-separated 92f0a75d27SPawel Jakub Dawidek * list of floating point identifier strings. 93f0a75d27SPawel Jakub Dawidek */ 94f0a75d27SPawel Jakub Dawidek #define PI_TYPELEN 16 /* max size of CPU type string */ 95f0a75d27SPawel Jakub Dawidek #define PI_FPUTYPE 32 /* max size of FPU types string */ 96f0a75d27SPawel Jakub Dawidek 97f0a75d27SPawel Jakub Dawidek typedef struct { 98f0a75d27SPawel Jakub Dawidek int pi_state; /* processor state, see above */ 99f0a75d27SPawel Jakub Dawidek char pi_processor_type[PI_TYPELEN]; /* ASCII CPU type */ 100f0a75d27SPawel Jakub Dawidek char pi_fputypes[PI_FPUTYPE]; /* ASCII FPU types */ 101f0a75d27SPawel Jakub Dawidek int pi_clock; /* CPU clock freq in MHz */ 102f0a75d27SPawel Jakub Dawidek } processor_info_t; 103f0a75d27SPawel Jakub Dawidek 104f0a75d27SPawel Jakub Dawidek /* 105f0a75d27SPawel Jakub Dawidek * Binding values for processor_bind(2) 106f0a75d27SPawel Jakub Dawidek */ 1071ba4a712SPawel Jakub Dawidek #define PBIND_NONE -1 /* LWP/thread is not bound */ 1081ba4a712SPawel Jakub Dawidek #define PBIND_QUERY -2 /* don't set, just return the binding */ 1091ba4a712SPawel Jakub Dawidek #define PBIND_HARD -3 /* prevents offlining CPU (default) */ 110f0a75d27SPawel Jakub Dawidek #define PBIND_SOFT -4 /* allows offlining CPU */ 111f0a75d27SPawel Jakub Dawidek #define PBIND_QUERY_TYPE -5 /* Return binding type */ 112f0a75d27SPawel Jakub Dawidek 113f0a75d27SPawel Jakub Dawidek /* 114f0a75d27SPawel Jakub Dawidek * User-level system call interface prototypes 115f0a75d27SPawel Jakub Dawidek */ 116f0a75d27SPawel Jakub Dawidek #ifndef _KERNEL 117f0a75d27SPawel Jakub Dawidek 118f0a75d27SPawel Jakub Dawidek extern int p_online(processorid_t processorid, int flag); 119f0a75d27SPawel Jakub Dawidek extern int processor_info(processorid_t processorid, 120f0a75d27SPawel Jakub Dawidek processor_info_t *infop); 121f0a75d27SPawel Jakub Dawidek extern int processor_bind(idtype_t idtype, id_t id, 122f0a75d27SPawel Jakub Dawidek processorid_t processorid, processorid_t *obind); 123f0a75d27SPawel Jakub Dawidek extern processorid_t getcpuid(void); 124f0a75d27SPawel Jakub Dawidek extern lgrpid_t gethomelgroup(void); 125f0a75d27SPawel Jakub Dawidek 126f0a75d27SPawel Jakub Dawidek #else /* _KERNEL */ 127f0a75d27SPawel Jakub Dawidek 128f0a75d27SPawel Jakub Dawidek /* 129f0a75d27SPawel Jakub Dawidek * Internal interface prototypes 130f0a75d27SPawel Jakub Dawidek */ 131f0a75d27SPawel Jakub Dawidek extern int p_online_internal(processorid_t, int, int *); 132f0a75d27SPawel Jakub Dawidek extern int p_online_internal_locked(processorid_t, int, int *); 133f0a75d27SPawel Jakub Dawidek 134f0a75d27SPawel Jakub Dawidek #endif /* !_KERNEL */ 135f0a75d27SPawel Jakub Dawidek 136f0a75d27SPawel Jakub Dawidek #ifdef __cplusplus 137f0a75d27SPawel Jakub Dawidek } 138f0a75d27SPawel Jakub Dawidek #endif 139f0a75d27SPawel Jakub Dawidek 140f0a75d27SPawel Jakub Dawidek #endif /* _SYS_PROCESSOR_H */ 14110b9d77bSPawel Jakub Dawidek