mirror of
https://github.com/rkujawa/rk65c02.git
synced 2024-12-11 18:49:16 +00:00
Call finish funcs for devices when closing bus.
This commit is contained in:
parent
ef69c47c25
commit
61cc5d2c68
@ -195,6 +195,15 @@ bus_load_file(bus_t *t, uint16_t addr, const char *filename)
|
|||||||
void
|
void
|
||||||
bus_finish(bus_t *t)
|
bus_finish(bus_t *t)
|
||||||
{
|
{
|
||||||
|
device_mapping_t *dm;
|
||||||
|
device_t *d;
|
||||||
|
|
||||||
assert(t != NULL);
|
assert(t != NULL);
|
||||||
|
|
||||||
|
LL_FOREACH(t->dm_head, dm) {
|
||||||
|
d = dm->dev;
|
||||||
|
if ((d->finish) != NULL)
|
||||||
|
d->finish(d);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ typedef struct device_t {
|
|||||||
|
|
||||||
uint8_t (*read_1)(void *, uint16_t doff);
|
uint8_t (*read_1)(void *, uint16_t doff);
|
||||||
void (*write_1)(void *, uint16_t, uint8_t val);
|
void (*write_1)(void *, uint16_t, uint8_t val);
|
||||||
|
void (*finish)(void *);
|
||||||
|
|
||||||
void *config;
|
void *config;
|
||||||
void *aux; /* any dev space-specific data */
|
void *aux; /* any dev space-specific data */
|
||||||
|
@ -49,6 +49,7 @@ device_ram_init(uint16_t size)
|
|||||||
|
|
||||||
d->read_1 = device_ram_read_1;
|
d->read_1 = device_ram_read_1;
|
||||||
d->write_1 = device_ram_write_1;
|
d->write_1 = device_ram_write_1;
|
||||||
|
d->finish = NULL;
|
||||||
|
|
||||||
d->aux = GC_MALLOC(size);
|
d->aux = GC_MALLOC(size);
|
||||||
memset(d->aux, 0, size);
|
memset(d->aux, 0, size);
|
||||||
@ -56,8 +57,4 @@ device_ram_init(uint16_t size)
|
|||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
device_ram_finish(device_t *d)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ struct device_serial_priv {
|
|||||||
|
|
||||||
uint8_t device_serial_read_1(void *, uint16_t);
|
uint8_t device_serial_read_1(void *, uint16_t);
|
||||||
void device_serial_write_1(void *, uint16_t, uint8_t);
|
void device_serial_write_1(void *, uint16_t, uint8_t);
|
||||||
|
void device_serial_finish(void *);
|
||||||
|
|
||||||
uint8_t
|
uint8_t
|
||||||
device_serial_read_1(void *vd, uint16_t offset)
|
device_serial_read_1(void *vd, uint16_t offset)
|
||||||
@ -85,6 +86,7 @@ device_serial_init()
|
|||||||
|
|
||||||
d->read_1 = device_serial_read_1;
|
d->read_1 = device_serial_read_1;
|
||||||
d->write_1 = device_serial_write_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));
|
dp = (struct device_serial_priv *) GC_MALLOC(sizeof(struct device_serial_priv));
|
||||||
d->aux = dp;
|
d->aux = dp;
|
||||||
@ -105,10 +107,12 @@ device_serial_init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
device_serial_finish(device_t *d)
|
device_serial_finish(void *dv)
|
||||||
{
|
{
|
||||||
struct device_serial_priv *dp;
|
struct device_serial_priv *dp;
|
||||||
|
struct device_t *d;
|
||||||
|
|
||||||
|
d = (struct device_t *) dv;
|
||||||
dp = d->aux;
|
dp = d->aux;
|
||||||
|
|
||||||
close(dp->txpipefd);
|
close(dp->txpipefd);
|
||||||
@ -116,7 +120,5 @@ device_serial_finish(device_t *d)
|
|||||||
|
|
||||||
unlink(txpipepath);
|
unlink(txpipepath);
|
||||||
unlink(rxpipepath);
|
unlink(rxpipepath);
|
||||||
|
|
||||||
// XXX?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user