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