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