m5.c revision 1762
1278Sbinkertn@umich.edu/* 21762Sstever@eecs.umich.edu * Copyright (c) 2003-2005 The Regents of The University of Michigan 3278Sbinkertn@umich.edu * All rights reserved. 4278Sbinkertn@umich.edu * 5278Sbinkertn@umich.edu * Redistribution and use in source and binary forms, with or without 6278Sbinkertn@umich.edu * modification, are permitted provided that the following conditions are 7278Sbinkertn@umich.edu * met: redistributions of source code must retain the above copyright 8278Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer; 9278Sbinkertn@umich.edu * redistributions in binary form must reproduce the above copyright 10278Sbinkertn@umich.edu * notice, this list of conditions and the following disclaimer in the 11278Sbinkertn@umich.edu * documentation and/or other materials provided with the distribution; 12278Sbinkertn@umich.edu * neither the name of the copyright holders nor the names of its 13278Sbinkertn@umich.edu * contributors may be used to endorse or promote products derived from 14278Sbinkertn@umich.edu * this software without specific prior written permission. 15278Sbinkertn@umich.edu * 16278Sbinkertn@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17278Sbinkertn@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18278Sbinkertn@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19278Sbinkertn@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20278Sbinkertn@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21278Sbinkertn@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22278Sbinkertn@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23278Sbinkertn@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24278Sbinkertn@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25278Sbinkertn@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26278Sbinkertn@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27278Sbinkertn@umich.edu */ 28278Sbinkertn@umich.edu 29287Sbinkertn@umich.edu#include <inttypes.h> 30275Sbinkertn@umich.edu#include <stdio.h> 31275Sbinkertn@umich.edu#include <stdlib.h> 32275Sbinkertn@umich.edu#include <string.h> 33275Sbinkertn@umich.edu 34275Sbinkertn@umich.edu#include "m5op.h" 35275Sbinkertn@umich.edu 36275Sbinkertn@umich.educhar *progname; 37275Sbinkertn@umich.edu 38275Sbinkertn@umich.eduvoid 39275Sbinkertn@umich.eduusage() 40275Sbinkertn@umich.edu{ 41287Sbinkertn@umich.edu printf("usage: m5 ivlb <interval>\n" 42287Sbinkertn@umich.edu " m5 ivle <interval>\n" 43287Sbinkertn@umich.edu " m5 initparam\n" 44287Sbinkertn@umich.edu " m5 sw99param\n" 45287Sbinkertn@umich.edu " m5 exit [delay]\n" 46287Sbinkertn@umich.edu " m5 resetstats [delay [period]]\n" 47287Sbinkertn@umich.edu " m5 dumpstats [delay [period]]\n" 48287Sbinkertn@umich.edu " m5 dumpresetstats [delay [period]]\n" 49287Sbinkertn@umich.edu " m5 checkpoint [delay [period]]\n" 50287Sbinkertn@umich.edu "\n" 51287Sbinkertn@umich.edu "All times in nanoseconds!\n"); 52275Sbinkertn@umich.edu exit(1); 53275Sbinkertn@umich.edu} 54275Sbinkertn@umich.edu 55287Sbinkertn@umich.edu#define COMPARE(X) (strcmp(X, command) == 0) 56287Sbinkertn@umich.edu 57275Sbinkertn@umich.eduint 58275Sbinkertn@umich.edumain(int argc, char *argv[]) 59275Sbinkertn@umich.edu{ 60287Sbinkertn@umich.edu char *command; 61287Sbinkertn@umich.edu uint64_t param; 62287Sbinkertn@umich.edu uint64_t arg1 = 0; 63287Sbinkertn@umich.edu uint64_t arg2 = 0; 64275Sbinkertn@umich.edu 65275Sbinkertn@umich.edu progname = argv[0]; 66275Sbinkertn@umich.edu if (argc < 2) 67275Sbinkertn@umich.edu usage(); 68275Sbinkertn@umich.edu 69287Sbinkertn@umich.edu command = argv[1]; 70287Sbinkertn@umich.edu 71287Sbinkertn@umich.edu if (COMPARE("ivlb")) { 72287Sbinkertn@umich.edu if (argc != 3) 73287Sbinkertn@umich.edu usage(); 74287Sbinkertn@umich.edu 75287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 76287Sbinkertn@umich.edu ivlb(arg1); 77287Sbinkertn@umich.edu return 0; 78287Sbinkertn@umich.edu } 79287Sbinkertn@umich.edu 80287Sbinkertn@umich.edu if (COMPARE("ivle")) { 81287Sbinkertn@umich.edu if (argc != 3) 82287Sbinkertn@umich.edu usage(); 83287Sbinkertn@umich.edu 84287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 85287Sbinkertn@umich.edu ivle(arg1); 86287Sbinkertn@umich.edu return 0; 87287Sbinkertn@umich.edu } 88287Sbinkertn@umich.edu 89287Sbinkertn@umich.edu if (COMPARE("initparam")) { 90287Sbinkertn@umich.edu if (argc != 2) 91287Sbinkertn@umich.edu usage(); 92287Sbinkertn@umich.edu 93287Sbinkertn@umich.edu printf("%ld", initparam()); 94287Sbinkertn@umich.edu return 0; 95287Sbinkertn@umich.edu } 96287Sbinkertn@umich.edu 97287Sbinkertn@umich.edu if (COMPARE("sw99param")) { 98287Sbinkertn@umich.edu if (argc != 2) 99287Sbinkertn@umich.edu usage(); 100275Sbinkertn@umich.edu 101275Sbinkertn@umich.edu param = initparam(); 102275Sbinkertn@umich.edu // run-time, rampup-time, rampdown-time, warmup-time, connections 103275Sbinkertn@umich.edu printf("%d %d %d %d %d", (param >> 48) & 0xfff, 104275Sbinkertn@umich.edu (param >> 36) & 0xfff, (param >> 24) & 0xfff, 105275Sbinkertn@umich.edu (param >> 12) & 0xfff, (param >> 0) & 0xfff); 106287Sbinkertn@umich.edu 107287Sbinkertn@umich.edu return 0; 108275Sbinkertn@umich.edu } 109275Sbinkertn@umich.edu 110287Sbinkertn@umich.edu if (COMPARE("exit")) { 111287Sbinkertn@umich.edu switch (argc) { 112287Sbinkertn@umich.edu case 3: 113287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 114287Sbinkertn@umich.edu case 2: 115287Sbinkertn@umich.edu m5exit(arg1); 116287Sbinkertn@umich.edu return 0; 117287Sbinkertn@umich.edu 118287Sbinkertn@umich.edu default: 119287Sbinkertn@umich.edu usage(); 120287Sbinkertn@umich.edu } 121287Sbinkertn@umich.edu } 122287Sbinkertn@umich.edu 123287Sbinkertn@umich.edu if (COMPARE("resetstats")) { 124287Sbinkertn@umich.edu switch (argc) { 125287Sbinkertn@umich.edu case 4: 126287Sbinkertn@umich.edu arg2 = strtoul(argv[3], NULL, 0); 127287Sbinkertn@umich.edu case 3: 128287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 129287Sbinkertn@umich.edu case 2: 130287Sbinkertn@umich.edu reset_stats(arg1, arg2); 131287Sbinkertn@umich.edu return 0; 132287Sbinkertn@umich.edu 133287Sbinkertn@umich.edu default: 134287Sbinkertn@umich.edu usage(); 135287Sbinkertn@umich.edu } 136287Sbinkertn@umich.edu } 137287Sbinkertn@umich.edu 138287Sbinkertn@umich.edu if (COMPARE("dumpstats")) { 139287Sbinkertn@umich.edu switch (argc) { 140287Sbinkertn@umich.edu case 4: 141287Sbinkertn@umich.edu arg2 = strtoul(argv[3], NULL, 0); 142287Sbinkertn@umich.edu case 3: 143287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 144287Sbinkertn@umich.edu case 2: 145287Sbinkertn@umich.edu dump_stats(arg1, arg2); 146287Sbinkertn@umich.edu return 0; 147287Sbinkertn@umich.edu 148287Sbinkertn@umich.edu default: 149287Sbinkertn@umich.edu usage(); 150287Sbinkertn@umich.edu } 151287Sbinkertn@umich.edu } 152287Sbinkertn@umich.edu 153287Sbinkertn@umich.edu if (COMPARE("dumpresetstats")) { 154287Sbinkertn@umich.edu switch (argc) { 155287Sbinkertn@umich.edu case 4: 156287Sbinkertn@umich.edu arg2 = strtoul(argv[3], NULL, 0); 157287Sbinkertn@umich.edu case 3: 158287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 159287Sbinkertn@umich.edu case 2: 160287Sbinkertn@umich.edu dumpreset_stats(arg1, arg2); 161287Sbinkertn@umich.edu return 0; 162287Sbinkertn@umich.edu 163287Sbinkertn@umich.edu default: 164287Sbinkertn@umich.edu usage(); 165287Sbinkertn@umich.edu } 166287Sbinkertn@umich.edu } 167287Sbinkertn@umich.edu 168287Sbinkertn@umich.edu if (COMPARE("checkpoint")) { 169287Sbinkertn@umich.edu switch (argc) { 170287Sbinkertn@umich.edu case 4: 171287Sbinkertn@umich.edu arg2 = strtoul(argv[3], NULL, 0); 172287Sbinkertn@umich.edu case 3: 173287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 174287Sbinkertn@umich.edu case 2: 175287Sbinkertn@umich.edu checkpoint(arg1, arg2); 176287Sbinkertn@umich.edu return 0; 177287Sbinkertn@umich.edu 178287Sbinkertn@umich.edu default: 179287Sbinkertn@umich.edu usage(); 180287Sbinkertn@umich.edu } 181287Sbinkertn@umich.edu 182287Sbinkertn@umich.edu return 0; 183287Sbinkertn@umich.edu } 184287Sbinkertn@umich.edu 185287Sbinkertn@umich.edu usage(); 186275Sbinkertn@umich.edu} 187