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