flash/nor: implement flash bank deallocation on OpenOCD exit
Change-Id: I8fcf09b2a85b3b68743f5fd68a31edea933b9b17 Signed-off-by: Tomas Vanek <vanekt@fbl.cz> Reviewed-on: http://openocd.zylin.com/4414 Tested-by: jenkins Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
This commit is contained in:
parent
38607b2e56
commit
f035b0851b
|
@ -171,6 +171,31 @@ int flash_get_bank_count(void)
|
|||
return i;
|
||||
}
|
||||
|
||||
void default_flash_free_driver_priv(struct flash_bank *bank)
|
||||
{
|
||||
free(bank->driver_priv);
|
||||
bank->driver_priv = NULL;
|
||||
}
|
||||
|
||||
void flash_free_all_banks(void)
|
||||
{
|
||||
struct flash_bank *bank = flash_banks;
|
||||
while (bank) {
|
||||
struct flash_bank *next = bank->next;
|
||||
if (bank->driver->free_driver_priv)
|
||||
bank->driver->free_driver_priv(bank);
|
||||
else
|
||||
LOG_WARNING("Flash driver of %s does not support free_driver_priv()", bank->name);
|
||||
|
||||
free(bank->name);
|
||||
free(bank->sectors);
|
||||
free(bank->prot_blocks);
|
||||
free(bank);
|
||||
bank = next;
|
||||
}
|
||||
flash_banks = NULL;
|
||||
}
|
||||
|
||||
struct flash_bank *get_flash_bank_by_name_noprobe(const char *name)
|
||||
{
|
||||
unsigned requested = get_flash_name_index(name);
|
||||
|
|
|
@ -76,7 +76,7 @@ struct flash_sector {
|
|||
* per-bank basis, if required.
|
||||
*/
|
||||
struct flash_bank {
|
||||
const char *name;
|
||||
char *name;
|
||||
|
||||
struct target *target; /**< Target to which this bank belongs. */
|
||||
|
||||
|
@ -153,8 +153,15 @@ int flash_write(struct target *target,
|
|||
* This routine must be called when the system may modify the status.
|
||||
*/
|
||||
void flash_set_dirty(void);
|
||||
|
||||
/** @returns The number of flash banks currently defined. */
|
||||
int flash_get_bank_count(void);
|
||||
|
||||
/** Deallocates bank->driver_priv */
|
||||
void default_flash_free_driver_priv(struct flash_bank *bank);
|
||||
|
||||
/** Deallocates all flash banks */
|
||||
void flash_free_all_banks(void);
|
||||
/**
|
||||
* Provides default read implementation for flash memory.
|
||||
* @param bank The bank to read.
|
||||
|
|
|
@ -209,6 +209,14 @@ struct flash_driver {
|
|||
* @returns ERROR_OK if successful; otherwise, an error code.
|
||||
*/
|
||||
int (*auto_probe)(struct flash_bank *bank);
|
||||
|
||||
/**
|
||||
* Deallocates private driver structures.
|
||||
* Use default_flash_free_driver_priv() to simply free(bank->driver_priv)
|
||||
*
|
||||
* @param bank - the bank being destroyed
|
||||
*/
|
||||
void (*free_driver_priv)(struct flash_bank *bank);
|
||||
};
|
||||
|
||||
#define FLASH_BANK_COMMAND_HANDLER(name) \
|
||||
|
|
|
@ -353,6 +353,7 @@ int openocd_main(int argc, char *argv[])
|
|||
/* Start the executable meat that can evolve into thread in future. */
|
||||
ret = openocd_thread(argc, argv, cmd_ctx);
|
||||
|
||||
flash_free_all_banks();
|
||||
gdb_service_free();
|
||||
server_free();
|
||||
|
||||
|
|
Loading…
Reference in New Issue