diff --git a/src/bus.c b/src/bus.c index 68eddb7..3fd5f1e 100644 --- a/src/bus.c +++ b/src/bus.c @@ -195,6 +195,15 @@ bus_load_file(bus_t *t, uint16_t addr, const char *filename) void bus_finish(bus_t *t) { + device_mapping_t *dm; + device_t *d; + assert(t != NULL); + + LL_FOREACH(t->dm_head, dm) { + d = dm->dev; + if ((d->finish) != NULL) + d->finish(d); + } } diff --git a/src/device.h b/src/device.h index c7fcb71..fbc2fb5 100644 --- a/src/device.h +++ b/src/device.h @@ -8,6 +8,7 @@ typedef struct device_t { uint8_t (*read_1)(void *, uint16_t doff); void (*write_1)(void *, uint16_t, uint8_t val); + void (*finish)(void *); void *config; void *aux; /* any dev space-specific data */ diff --git a/src/device_ram.c b/src/device_ram.c index 8c07133..7027697 100644 --- a/src/device_ram.c +++ b/src/device_ram.c @@ -49,6 +49,7 @@ device_ram_init(uint16_t size) d->read_1 = device_ram_read_1; d->write_1 = device_ram_write_1; + d->finish = NULL; d->aux = GC_MALLOC(size); memset(d->aux, 0, size); @@ -56,8 +57,4 @@ device_ram_init(uint16_t size) return d; } -void -device_ram_finish(device_t *d) -{ -} diff --git a/src/device_serial.c b/src/device_serial.c index 7ff652c..6b1e155 100644 --- a/src/device_serial.c +++ b/src/device_serial.c @@ -22,6 +22,7 @@ struct device_serial_priv { uint8_t device_serial_read_1(void *, uint16_t); void device_serial_write_1(void *, uint16_t, uint8_t); +void device_serial_finish(void *); uint8_t device_serial_read_1(void *vd, uint16_t offset) @@ -85,6 +86,7 @@ device_serial_init() d->read_1 = device_serial_read_1; d->write_1 = device_serial_write_1; + d->finish = device_serial_finish; dp = (struct device_serial_priv *) GC_MALLOC(sizeof(struct device_serial_priv)); d->aux = dp; @@ -105,10 +107,12 @@ device_serial_init() } void -device_serial_finish(device_t *d) +device_serial_finish(void *dv) { struct device_serial_priv *dp; + struct device_t *d; + d = (struct device_t *) dv; dp = d->aux; close(dp->txpipefd); @@ -116,7 +120,5 @@ device_serial_finish(device_t *d) unlink(txpipepath); unlink(rxpipepath); - - // XXX? }