Home | History | Annotate | Download | only in memory_hotplug
      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  */
     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