150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak/* 250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * memtoy.h -- local header template for memory toy/tool 350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak */ 450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak/* 550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * Copyright (c) 2005 Hewlett-Packard, Inc 650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * All rights reserved. 750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak */ 850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak/* 1050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * This program is free software; you can redistribute it and/or modify 1150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * it under the terms of the GNU General Public License as published by 1250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * the Free Software Foundation; either version 2 of the License, or 1350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * (at your option) any later version. 1450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * 1550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * This program is distributed in the hope that it will be useful, 1650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * but WITHOUT ANY WARRANTY; without even the implied warranty of 1750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * GNU General Public License for more details. 1950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * 2050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * You should have received a copy of the GNU General Public License 2150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * along with this program; if not, write to the Free Software 2250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 2350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak */ 2450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#ifndef _MEMTOY_H 2550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#define _MEMTOY_H 2650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#include <sys/types.h> 2750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#include <sys/time.h> 2850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 2950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#include <setjmp.h> 3050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#include <signal.h> 3150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 3250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#include "segment.h" 3350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#include "version.h" 3450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 3550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#define BOGUS_SIZE ((size_t)-1) 3650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 3750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modaktypedef enum {false=0, true} bool; 3850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 3950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak/* 4050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * program global data 4150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak */ 4250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modaktypedef struct global_context { 4350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak char *program_name; /* argv[0] - for reference in messages */ 4450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 4550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak unsigned long options; /* command line options, ... */ 4650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 4750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak siginfo_t *siginfo; /* signal info, if signalled != 0 */ 4850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak char *signame; /* name of signal, if any */ 4950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak sigjmp_buf sigjmp_env; /* embedded setjmp buffer */ 5050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak bool sigjmp; /* sigsetjmp is "armed" */ 5150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 5250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak size_t pagesize; /* system page size for mmap, ... */ 5350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 5450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak int numa_max_node; /* if >0, numa supported */ 5550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 5650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak segment_t **seglist; /* list of known segments */ 5750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak segment_t *seg_avail; /* an available segment */ 5850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 5950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak char *cmd_name; /* currently executing command */ 6050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 6150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#ifdef _DEBUG 6250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak unsigned long debug; /* debug enablement flags */ 6350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#endif 6450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} glctx_t; 6550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 6650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakextern glctx_t glctx; 6750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 6850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#define OPTION_VERBOSE 0x0001 6950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#define OPTION_INTERACTIVE 0x0100 7050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 7150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak/* 7250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * Danger, Will Robinson!! -- hardcoded variable 'gcp' 7350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak */ 7450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#define set_option(OPT) gcp->options |= (OPTION_##OPT) 7550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#define clear_option(OPT) gcp->options &= ~(OPION_##OPTT) 7650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#define is_option(OPT) ((gcp->options & OPTION_##OPT) != 0) 7750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 7850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#define show_option(opt, off, on) ( !is_option(opt) ? #off : #on ) 7950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 8050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#define signalled(GCP) (GCP->siginfo != NULL) 8150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 8250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak/* 8350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * different between start and end time in microseconds 8450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak */ 8550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakstatic unsigned long tv_diff_usec(struct timeval *stp, struct timeval *etp) 8650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak{ 8750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak return ((1000000L * (etp)->tv_sec + (etp)->tv_usec) - 8850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak (1000000L * (stp)->tv_sec + (stp)->tv_usec)); 8950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak} 9050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 9150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 9250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak/* 9350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * memtoy.c 9450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak */ 9550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakextern void die(int, char*, ... ); 9650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakextern void vprint(char*, ...); 9750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakextern void reset_signal(void); 9850512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakextern void wait_for_signal(const char*); 9950512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 10050512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak/* 10150512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak * commands.c 10250512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak */ 10350512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakextern void process_commands(void); 10450512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakextern void wait_for_signal(const char *); 10550512d9c147b0e8a05d4d814af3ba83852a79304subrata_modakextern void touch_memory(bool, unsigned long*, size_t); 10650512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak 10750512d9c147b0e8a05d4d814af3ba83852a79304subrata_modak#endif 108