m5.c revision 2358
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> 332358Sktlim@umich.edu#include <unistd.h> 34275Sbinkertn@umich.edu 35275Sbinkertn@umich.edu#include "m5op.h" 36275Sbinkertn@umich.edu 37275Sbinkertn@umich.educhar *progname; 38275Sbinkertn@umich.edu 39275Sbinkertn@umich.eduvoid 40275Sbinkertn@umich.eduusage() 41275Sbinkertn@umich.edu{ 42287Sbinkertn@umich.edu printf("usage: m5 ivlb <interval>\n" 43287Sbinkertn@umich.edu " m5 ivle <interval>\n" 44287Sbinkertn@umich.edu " m5 initparam\n" 45287Sbinkertn@umich.edu " m5 sw99param\n" 46287Sbinkertn@umich.edu " m5 exit [delay]\n" 47287Sbinkertn@umich.edu " m5 resetstats [delay [period]]\n" 48287Sbinkertn@umich.edu " m5 dumpstats [delay [period]]\n" 49287Sbinkertn@umich.edu " m5 dumpresetstats [delay [period]]\n" 50287Sbinkertn@umich.edu " m5 checkpoint [delay [period]]\n" 51287Sbinkertn@umich.edu "\n" 52287Sbinkertn@umich.edu "All times in nanoseconds!\n"); 53275Sbinkertn@umich.edu exit(1); 54275Sbinkertn@umich.edu} 55275Sbinkertn@umich.edu 56287Sbinkertn@umich.edu#define COMPARE(X) (strcmp(X, command) == 0) 57287Sbinkertn@umich.edu 58275Sbinkertn@umich.eduint 59275Sbinkertn@umich.edumain(int argc, char *argv[]) 60275Sbinkertn@umich.edu{ 61287Sbinkertn@umich.edu char *command; 62287Sbinkertn@umich.edu uint64_t param; 63287Sbinkertn@umich.edu uint64_t arg1 = 0; 64287Sbinkertn@umich.edu uint64_t arg2 = 0; 65275Sbinkertn@umich.edu 66275Sbinkertn@umich.edu progname = argv[0]; 67275Sbinkertn@umich.edu if (argc < 2) 68275Sbinkertn@umich.edu usage(); 69275Sbinkertn@umich.edu 70287Sbinkertn@umich.edu command = argv[1]; 71287Sbinkertn@umich.edu 72287Sbinkertn@umich.edu if (COMPARE("ivlb")) { 73287Sbinkertn@umich.edu if (argc != 3) 74287Sbinkertn@umich.edu usage(); 75287Sbinkertn@umich.edu 76287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 772188Ssaidi@eecs.umich.edu m5_ivlb(arg1); 78287Sbinkertn@umich.edu return 0; 79287Sbinkertn@umich.edu } 80287Sbinkertn@umich.edu 81287Sbinkertn@umich.edu if (COMPARE("ivle")) { 82287Sbinkertn@umich.edu if (argc != 3) 83287Sbinkertn@umich.edu usage(); 84287Sbinkertn@umich.edu 85287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 862188Ssaidi@eecs.umich.edu m5_ivle(arg1); 87287Sbinkertn@umich.edu return 0; 88287Sbinkertn@umich.edu } 89287Sbinkertn@umich.edu 90287Sbinkertn@umich.edu if (COMPARE("initparam")) { 91287Sbinkertn@umich.edu if (argc != 2) 92287Sbinkertn@umich.edu usage(); 93287Sbinkertn@umich.edu 942188Ssaidi@eecs.umich.edu printf("%ld", m5_initparam()); 95287Sbinkertn@umich.edu return 0; 96287Sbinkertn@umich.edu } 97287Sbinkertn@umich.edu 98287Sbinkertn@umich.edu if (COMPARE("sw99param")) { 99287Sbinkertn@umich.edu if (argc != 2) 100287Sbinkertn@umich.edu usage(); 101275Sbinkertn@umich.edu 1022188Ssaidi@eecs.umich.edu param = m5_initparam(); 103275Sbinkertn@umich.edu // run-time, rampup-time, rampdown-time, warmup-time, connections 104275Sbinkertn@umich.edu printf("%d %d %d %d %d", (param >> 48) & 0xfff, 105275Sbinkertn@umich.edu (param >> 36) & 0xfff, (param >> 24) & 0xfff, 106275Sbinkertn@umich.edu (param >> 12) & 0xfff, (param >> 0) & 0xfff); 107287Sbinkertn@umich.edu 108287Sbinkertn@umich.edu return 0; 109275Sbinkertn@umich.edu } 110275Sbinkertn@umich.edu 111287Sbinkertn@umich.edu if (COMPARE("exit")) { 112287Sbinkertn@umich.edu switch (argc) { 113287Sbinkertn@umich.edu case 3: 114287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 115287Sbinkertn@umich.edu case 2: 1162188Ssaidi@eecs.umich.edu m5_exit(arg1); 117287Sbinkertn@umich.edu return 0; 118287Sbinkertn@umich.edu 119287Sbinkertn@umich.edu default: 120287Sbinkertn@umich.edu usage(); 121287Sbinkertn@umich.edu } 122287Sbinkertn@umich.edu } 123287Sbinkertn@umich.edu 124287Sbinkertn@umich.edu if (COMPARE("resetstats")) { 125287Sbinkertn@umich.edu switch (argc) { 126287Sbinkertn@umich.edu case 4: 127287Sbinkertn@umich.edu arg2 = strtoul(argv[3], NULL, 0); 128287Sbinkertn@umich.edu case 3: 129287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 130287Sbinkertn@umich.edu case 2: 1312188Ssaidi@eecs.umich.edu m5_reset_stats(arg1, arg2); 132287Sbinkertn@umich.edu return 0; 133287Sbinkertn@umich.edu 134287Sbinkertn@umich.edu default: 135287Sbinkertn@umich.edu usage(); 136287Sbinkertn@umich.edu } 137287Sbinkertn@umich.edu } 138287Sbinkertn@umich.edu 139287Sbinkertn@umich.edu if (COMPARE("dumpstats")) { 140287Sbinkertn@umich.edu switch (argc) { 141287Sbinkertn@umich.edu case 4: 142287Sbinkertn@umich.edu arg2 = strtoul(argv[3], NULL, 0); 143287Sbinkertn@umich.edu case 3: 144287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 145287Sbinkertn@umich.edu case 2: 1462188Ssaidi@eecs.umich.edu m5_dump_stats(arg1, arg2); 147287Sbinkertn@umich.edu return 0; 148287Sbinkertn@umich.edu 149287Sbinkertn@umich.edu default: 150287Sbinkertn@umich.edu usage(); 151287Sbinkertn@umich.edu } 152287Sbinkertn@umich.edu } 153287Sbinkertn@umich.edu 154287Sbinkertn@umich.edu if (COMPARE("dumpresetstats")) { 155287Sbinkertn@umich.edu switch (argc) { 156287Sbinkertn@umich.edu case 4: 157287Sbinkertn@umich.edu arg2 = strtoul(argv[3], NULL, 0); 158287Sbinkertn@umich.edu case 3: 159287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 160287Sbinkertn@umich.edu case 2: 1612188Ssaidi@eecs.umich.edu m5_dumpreset_stats(arg1, arg2); 162287Sbinkertn@umich.edu return 0; 163287Sbinkertn@umich.edu 164287Sbinkertn@umich.edu default: 165287Sbinkertn@umich.edu usage(); 166287Sbinkertn@umich.edu } 167287Sbinkertn@umich.edu } 168287Sbinkertn@umich.edu 1692358Sktlim@umich.edu if (COMPARE("readfile")) { 1702358Sktlim@umich.edu char buf[256*1024]; 1712358Sktlim@umich.edu int offset = 0; 1722358Sktlim@umich.edu int len; 1732358Sktlim@umich.edu 1742358Sktlim@umich.edu if (argc != 2) 1752358Sktlim@umich.edu usage(); 1762358Sktlim@umich.edu 1772358Sktlim@umich.edu while ((len = m5_readfile(buf, sizeof(buf), offset)) > 0) { 1782358Sktlim@umich.edu write(STDOUT_FILENO, buf, len); 1792358Sktlim@umich.edu offset += len; 1802358Sktlim@umich.edu } 1812358Sktlim@umich.edu 1822358Sktlim@umich.edu return 0; 1832358Sktlim@umich.edu } 1842358Sktlim@umich.edu 185287Sbinkertn@umich.edu if (COMPARE("checkpoint")) { 186287Sbinkertn@umich.edu switch (argc) { 187287Sbinkertn@umich.edu case 4: 188287Sbinkertn@umich.edu arg2 = strtoul(argv[3], NULL, 0); 189287Sbinkertn@umich.edu case 3: 190287Sbinkertn@umich.edu arg1 = strtoul(argv[2], NULL, 0); 191287Sbinkertn@umich.edu case 2: 1922188Ssaidi@eecs.umich.edu m5_checkpoint(arg1, arg2); 193287Sbinkertn@umich.edu return 0; 194287Sbinkertn@umich.edu 195287Sbinkertn@umich.edu default: 196287Sbinkertn@umich.edu usage(); 197287Sbinkertn@umich.edu } 198287Sbinkertn@umich.edu 199287Sbinkertn@umich.edu return 0; 200287Sbinkertn@umich.edu } 201287Sbinkertn@umich.edu 2022358Sktlim@umich.edu if (COMPARE("loadsymbol")) { 2032358Sktlim@umich.edu m5_loadsymbol(arg1); 2042358Sktlim@umich.edu return 0; 2052358Sktlim@umich.edu } 2062358Sktlim@umich.edu 207287Sbinkertn@umich.edu usage(); 208275Sbinkertn@umich.edu} 209