xref: /openbsd/usr.bin/top/machine.h (revision 404b540a)
1 /* $OpenBSD: machine.h,v 1.15 2007/05/29 00:56:56 otto Exp $	 */
2 
3 /*
4  *  Top users/processes display for Unix
5  *  Version 3
6  *
7  * Copyright (c) 1984, 1989, William LeFebvre, Rice University
8  * Copyright (c) 1989, 1990, 1992, William LeFebvre, Northwestern University
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22  * IN NO EVENT SHALL THE AUTHOR OR HIS EMPLOYER BE LIABLE FOR ANY DIRECT, INDIRECT,
23  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 /*
32  *  This file defines the interface between top and the machine-dependent
33  *  module.  It is NOT machine dependent and should not need to be changed
34  *  for any specific machine.
35  */
36 
37 /*
38  * the statics struct is filled in by machine_init
39  */
40 struct statics {
41 	char          **procstate_names;
42 	char          **cpustate_names;
43 	char          **memory_names;
44 	char          **order_names;
45 };
46 
47 /*
48  * the system_info struct is filled in by a machine dependent routine.
49  */
50 
51 struct system_info {
52 	pid_t           last_pid;
53 	double          load_avg[NUM_AVERAGES];
54 	int             p_total;
55 	int             p_active;	/* number of procs considered
56 					 * "active" */
57 	int            *procstates;
58 	int64_t        *cpustates;
59 	int            *memory;
60 };
61 
62 /*
63  * cpu_states is an array of percentages * 10.  For example, the (integer)
64  * value 105 is 10.5% (or .105).
65  */
66 
67 /*
68  * the process_select struct tells get_process_info what processes we
69  * are interested in seeing
70  */
71 
72 struct process_select {
73 	int             idle;	/* show idle processes */
74 	int             system;	/* show system processes */
75 	int             threads;	/* show threads */
76 	uid_t           uid;	/* only this uid (unless uid == -1) */
77 	pid_t           pid;	/* only this pid (unless pid == -1) */
78 	char           *command;/* only this command (unless == NULL) */
79 };
80 
81 /* prototypes */
82 extern int      display_init(struct statics *);
83 
84 /* machine.c */
85 extern int      machine_init(struct statics *);
86 extern char    *format_header(char *);
87 extern void     get_system_info(struct system_info *);
88 extern caddr_t
89 get_process_info(struct system_info *, struct process_select *,
90 		 int (*) (const void *, const void *));
91 extern char    *format_next_process(caddr_t, char *(*)(uid_t), pid_t *);
92 extern uid_t    proc_owner(pid_t);
93 
94 extern struct kinfo_proc2	*getprocs(int, int, int *);
95