Add a finish method to all endpoints and call it

This commit is contained in:
David Biancolin 2019-05-24 17:33:55 +00:00
parent 26abd23137
commit b8d1ea3f6f
7 changed files with 12 additions and 10 deletions

@ -1 +1 @@
Subproject commit 545d2184975e5e43e364614d1a09959774ce3673
Subproject commit 3b5dd741362408886f3390e89cd809829571bcb2

View File

@ -47,6 +47,7 @@ class blockdev_t: public endpoint_t
virtual void tick();
virtual bool terminate() { return false; }
virtual int exit_code() { return 0; }
virtual void finish() {};
private:
BLOCKDEVWIDGET_struct * mmio_addrs;

View File

@ -30,6 +30,7 @@ class serial_t: public endpoint_t
virtual void tick();
virtual bool terminate(){ return fesvr->done(); }
virtual int exit_code(){ return fesvr->exit_code(); }
virtual void finish() {};
private:
SERIALWIDGET_struct * mmio_addrs;

View File

@ -21,6 +21,7 @@ class simplenic_t: public endpoint_t
virtual void tick();
virtual bool terminate() { return false; };
virtual int exit_code() { return 0; }
virtual void finish() {};
private:
simif_t* sim;

View File

@ -16,8 +16,7 @@ class tracerv_t: public endpoint_t
virtual void tick();
virtual bool terminate() { return false; }
virtual int exit_code() { return 0; }
void flush();
void finish() { flush(); };
virtual void finish() { flush(); };
private:
TRACERVWIDGET_struct * mmio_addrs;
@ -28,6 +27,7 @@ class tracerv_t: public endpoint_t
// Used in unit testing to check TracerV is correctly pulling instuctions off the target
bool test_output = false;
long dma_addr;
void flush();
int beats_available_stable();
std::string tracefilename;
};

View File

@ -14,6 +14,7 @@ class uart_t: public endpoint_t
void recv();
virtual void init() {};
virtual void tick();
virtual void finish() {};
virtual bool terminate() { return false; }
virtual int exit_code() { return 0; }

View File

@ -444,14 +444,12 @@ void firesim_top_t::run() {
fprintf(stderr, "FPGA-Cycles-to-Model-Cycles Ratio (FMR): %.2f\n", fmr);
expect(!exitcode, NULL);
for (auto e: fpga_models) {
for (auto &e: fpga_models) {
e->finish();
}
for (auto &e: endpoints) {
e->finish();
}
#ifdef PRINTWIDGET_0_PRESENT
print_endpoint->finish();
#endif
#ifdef TRACERVWIDGET_0_PRESENT
tracerv_endpoint_0->finish();
#endif
}