#include <stdint.h>
-#include <gem5/asm/generic/m5op_flags.h>
-
void m5_arm(uint64_t address);
void m5_quiesce(void);
void m5_quiesce_ns(uint64_t ns);
void m5_exit(uint64_t ns_delay);
void m5_fail(uint64_t ns_delay, uint64_t code);
+// m5_sum is for sanity checking the gem5 op interface.
+unsigned m5_sum(unsigned a, unsigned b, unsigned c,
+ unsigned d, unsigned e, unsigned f);
uint64_t m5_init_param(uint64_t key_str1, uint64_t key_str2);
void m5_checkpoint(uint64_t ns_delay, uint64_t ns_period);
void m5_reset_stats(uint64_t ns_delay, uint64_t ns_period);
void m5_debug_break(void);
void m5_switch_cpu(void);
void m5_dist_toggle_sync(void);
-void m5_add_symbol(uint64_t addr, char *symbol);
+void m5_add_symbol(uint64_t addr, const char *symbol);
void m5_load_symbol();
void m5_panic(void);
void m5_work_begin(uint64_t workid, uint64_t threadid);
void m5_work_end(uint64_t workid, uint64_t threadid);
-// These operations are for critical path annotation
-void m5a_bsm(char *sm, const void *id, int flags);
-void m5a_esm(char *sm);
-void m5a_begin(int flags, char *st);
-void m5a_end(void);
-void m5a_q(const void *id, char *q, int count);
-void m5a_dq(const void *id, char *q, int count);
-void m5a_wf(const void *id, char *q, char *sm, int count);
-void m5a_we(const void *id, char *q, char *sm, int count);
-void m5a_ws(const void *id, char *q, char *sm);
-void m5a_sq(const void *id, char *q, int count, int flags);
-void m5a_aq(const void *id, char *q, int count);
-void m5a_pq(const void *id, char *q, int count);
-void m5a_l(char *lsm, const void *id, char *sm);
-void m5a_identify(uint64_t id);
-uint64_t m5a_getid(void);
+void m5_se_page_fault();
+
+/*
+ * Send a very generic poke to the workload so it can do something. It's up to
+ * the workload to know what information to look for to interpret an event,
+ * such as what PC it came from, what register values are, or the context of
+ * the workload itself (is this SE mode? which OS is running?).
+ */
+void m5_workload();
#ifdef __cplusplus
}