1/*-
2 * Copyright (c) 1982, 1986, 1993
3 *	The Regents of the University of California.  All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 * 4. Neither the name of the University nor the names of its contributors
14 *    may be used to endorse or promote products derived from this software
15 *    without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 *	@(#)resource.h	8.4 (Berkeley) 1/9/95
30 * $FreeBSD$
31 */
32
33#ifndef _SYS_RESOURCE_H_
34#define	_SYS_RESOURCE_H_
35
36#include <sys/cdefs.h>
37#include <sys/_timeval.h>
38#include <sys/_types.h>
39
40/*
41 * Process priority specifications to get/setpriority.
42 */
43#define	PRIO_MIN	-20
44#define	PRIO_MAX	20
45
46#define	PRIO_PROCESS	0
47#define	PRIO_PGRP	1
48#define	PRIO_USER	2
49
50/*
51 * Resource utilization information.
52 *
53 * All fields are only modified by curthread and
54 * no locks are required to read.
55 */
56
57#define	RUSAGE_SELF	0
58#define	RUSAGE_CHILDREN	-1
59#define	RUSAGE_THREAD	1
60
61struct rusage {
62	struct timeval ru_utime;	/* user time used */
63	struct timeval ru_stime;	/* system time used */
64	long	ru_maxrss;		/* max resident set size */
65#define	ru_first	ru_ixrss
66	long	ru_ixrss;		/* integral shared memory size */
67	long	ru_idrss;		/* integral unshared data " */
68	long	ru_isrss;		/* integral unshared stack " */
69	long	ru_minflt;		/* page reclaims */
70	long	ru_majflt;		/* page faults */
71	long	ru_nswap;		/* swaps */
72	long	ru_inblock;		/* block input operations */
73	long	ru_oublock;		/* block output operations */
74	long	ru_msgsnd;		/* messages sent */
75	long	ru_msgrcv;		/* messages received */
76	long	ru_nsignals;		/* signals received */
77	long	ru_nvcsw;		/* voluntary context switches */
78	long	ru_nivcsw;		/* involuntary " */
79#define	ru_last		ru_nivcsw
80};
81
82#if __BSD_VISIBLE
83struct __wrusage {
84	struct rusage	wru_self;
85	struct rusage	wru_children;
86};
87#endif
88
89/*
90 * Resource limits
91 */
92#define	RLIMIT_CPU	0		/* maximum cpu time in seconds */
93#define	RLIMIT_FSIZE	1		/* maximum file size */
94#define	RLIMIT_DATA	2		/* data size */
95#define	RLIMIT_STACK	3		/* stack size */
96#define	RLIMIT_CORE	4		/* core file size */
97#define	RLIMIT_RSS	5		/* resident set size */
98#define	RLIMIT_MEMLOCK	6		/* locked-in-memory address space */
99#define	RLIMIT_NPROC	7		/* number of processes */
100#define	RLIMIT_NOFILE	8		/* number of open files */
101#define	RLIMIT_SBSIZE	9		/* maximum size of all socket buffers */
102#define	RLIMIT_VMEM	10		/* virtual process size (incl. mmap) */
103#define	RLIMIT_AS	RLIMIT_VMEM	/* standard name for RLIMIT_VMEM */
104#define	RLIMIT_NPTS	11		/* pseudo-terminals */
105#define	RLIMIT_SWAP	12		/* swap used */
106
107#define	RLIM_NLIMITS	13		/* number of resource limits */
108
109#define	RLIM_INFINITY	((rlim_t)(((uint64_t)1 << 63) - 1))
110/* XXX Missing: RLIM_SAVED_MAX, RLIM_SAVED_CUR */
111
112
113/*
114 * Resource limit string identifiers
115 */
116
117#ifdef _RLIMIT_IDENT
118static const char *rlimit_ident[RLIM_NLIMITS] = {
119	"cpu",
120	"fsize",
121	"data",
122	"stack",
123	"core",
124	"rss",
125	"memlock",
126	"nproc",
127	"nofile",
128	"sbsize",
129	"vmem",
130	"npts",
131	"swap",
132};
133#endif
134
135#ifndef _RLIM_T_DECLARED
136typedef	__rlim_t	rlim_t;
137#define	_RLIM_T_DECLARED
138#endif
139
140struct rlimit {
141	rlim_t	rlim_cur;		/* current (soft) limit */
142	rlim_t	rlim_max;		/* maximum value for rlim_cur */
143};
144
145#if __BSD_VISIBLE
146
147struct orlimit {
148	__int32_t	rlim_cur;	/* current (soft) limit */
149	__int32_t	rlim_max;	/* maximum value for rlim_cur */
150};
151
152struct loadavg {
153	__fixpt_t	ldavg[3];
154	long		fscale;
155};
156
157#define	CP_USER		0
158#define	CP_NICE		1
159#define	CP_SYS		2
160#define	CP_INTR		3
161#define	CP_IDLE		4
162#define	CPUSTATES	5
163
164#endif	/* __BSD_VISIBLE */
165
166#ifdef _KERNEL
167
168extern struct loadavg averunnable;
169void	read_cpu_time(long *cp_time);	/* Writes array of CPUSTATES */
170
171#else
172
173__BEGIN_DECLS
174/* XXX 2nd arg to [gs]etpriority() should be an id_t */
175int	getpriority(int, int);
176int	getrlimit(int, struct rlimit *);
177int	getrusage(int, struct rusage *);
178int	setpriority(int, int, int);
179int	setrlimit(int, const struct rlimit *);
180__END_DECLS
181
182#endif	/* _KERNEL */
183#endif	/* !_SYS_RESOURCE_H_ */
184