1 /*
2 * memtoy.h -- local header template for memory toy/tool
3 */
4 /*
5 * Copyright (c) 2005 Hewlett-Packard, Inc
6 * All rights reserved.
7 */
8
9 /*
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 */
24 #ifndef _MEMTOY_H
25 #define _MEMTOY_H
26 #include <sys/types.h>
27 #include <sys/time.h>
28
29 #include <setjmp.h>
30 #include <signal.h>
31
32 #include "segment.h"
33 #include "version.h"
34
35 #define BOGUS_SIZE ((size_t)-1)
36
37 typedef enum {false=0, true} bool;
38
39 /*
40 * program global data
41 */
42 typedef struct global_context {
43 char *program_name; /* argv[0] - for reference in messages */
44
45 unsigned long options; /* command line options, ... */
46
47 siginfo_t *siginfo; /* signal info, if signalled != 0 */
48 char *signame; /* name of signal, if any */
49 sigjmp_buf sigjmp_env; /* embedded setjmp buffer */
50 bool sigjmp; /* sigsetjmp is "armed" */
51
52 size_t pagesize; /* system page size for mmap, ... */
53
54 int numa_max_node; /* if >0, numa supported */
55
56 segment_t **seglist; /* list of known segments */
57 segment_t *seg_avail; /* an available segment */
58
59 char *cmd_name; /* currently executing command */
60
61 #ifdef _DEBUG
62 unsigned long debug; /* debug enablement flags */
63 #endif
64 } glctx_t;
65
66 extern glctx_t glctx;
67
68 #define OPTION_VERBOSE 0x0001
69 #define OPTION_INTERACTIVE 0x0100
70
71 /*
72 * Danger, Will Robinson!! -- hardcoded variable 'gcp'
73 */
74 #define set_option(OPT) gcp->options |= (OPTION_##OPT)
75 #define clear_option(OPT) gcp->options &= ~(OPION_##OPTT)
76 #define is_option(OPT) ((gcp->options & OPTION_##OPT) != 0)
77
78 #define show_option(opt, off, on) ( !is_option(opt) ? #off : #on )
79
80 #define signalled(GCP) (GCP->siginfo != NULL)
81
82 /*
83 * different between start and end time in microseconds
84 */
tv_diff_usec(struct timeval * stp,struct timeval * etp)85 static unsigned long tv_diff_usec(struct timeval *stp, struct timeval *etp)
86 {
87 return ((1000000L * (etp)->tv_sec + (etp)->tv_usec) -
88 (1000000L * (stp)->tv_sec + (stp)->tv_usec));
89 }
90
91
92 /*
93 * memtoy.c
94 */
95 extern void die(int, char*, ... );
96 extern void vprint(char*, ...);
97 extern void reset_signal(void);
98 extern void wait_for_signal(const char*);
99
100 /*
101 * commands.c
102 */
103 extern void process_commands(void);
104 extern void wait_for_signal(const char *);
105 extern void touch_memory(bool, unsigned long*, size_t);
106
107 #endif
108