diff --git a/programmer.c b/programmer.c index c276a69be..9a67157b0 100644 --- a/programmer.c +++ b/programmer.c @@ -86,6 +86,13 @@ int register_par_master(const struct par_master *mst, { struct registered_master rmst = {0}; + if (mst->shutdown) { + if (register_shutdown(mst->shutdown, data)) { + mst->shutdown(data); /* cleanup */ + return 1; + } + } + if (!mst->chip_writeb || !mst->chip_writew || !mst->chip_writel || !mst->chip_writen || !mst->chip_readb || !mst->chip_readw || !mst->chip_readl || !mst->chip_readn) { diff --git a/programmer.h b/programmer.h index 3de87e58e..982343aa6 100644 --- a/programmer.h +++ b/programmer.h @@ -466,6 +466,7 @@ struct par_master { uint16_t (*chip_readw) (const struct flashctx *flash, const chipaddr addr); uint32_t (*chip_readl) (const struct flashctx *flash, const chipaddr addr); void (*chip_readn) (const struct flashctx *flash, uint8_t *buf, const chipaddr addr, size_t len); + int (*shutdown)(void *data); void *data; }; int register_par_master(const struct par_master *mst, const enum chipbustype buses, void *data);