diff options
author | Paul Selkirk <paul@psgd.org> | 2016-08-10 17:56:37 -0400 |
---|---|---|
committer | Paul Selkirk <paul@psgd.org> | 2016-08-10 17:56:37 -0400 |
commit | 99b022abb09ffd17fc54b4e479086444f0eeb79f (patch) | |
tree | b616cea8b90b474c792b2e06f340ba8d590ce54e | |
parent | f5a63c380d9091b002949624001b2b1426454b56 (diff) |
Reset table of cores, e.g. after resetting FPGA from CLI.
-rw-r--r-- | core.c | 18 | ||||
-rw-r--r-- | hal.h | 1 |
2 files changed, 17 insertions, 2 deletions
@@ -93,10 +93,10 @@ static const struct { const char *name; hal_addr_t extra; } gaps[] = { { "modexpa7", 3 * CORE_SIZE }, /* ModexpA7 uses four slots */ }; +static hal_core_t *head = NULL; + static hal_core_t *probe_cores(void) { - static hal_core_t *head = NULL; - if (head != NULL) return head; @@ -167,6 +167,20 @@ static hal_core_t *probe_cores(void) return NULL; } +void hal_core_reset_table(void) +{ +#if HAL_STATIC_CORE_STATE_BLOCKS > 0 + head = NULL; + memset(core_table, 0, sizeof(core_table)); +#else + while (head != NULL) { + hal_core_t *next = head->next; + free(head); + head = next; + } +#endif +} + hal_core_t * hal_core_iterate(hal_core_t *core) { return core == NULL ? probe_cores() : core->next; @@ -209,6 +209,7 @@ extern hal_core_t *hal_core_find(const char *name, hal_core_t *core); extern const hal_core_info_t *hal_core_info(const hal_core_t *core); extern hal_addr_t hal_core_base(const hal_core_t *core); extern hal_core_t * hal_core_iterate(hal_core_t *core); +extern void hal_core_reset_table(void); extern hal_error_t hal_core_alloc(const char *name, hal_core_t **core); extern void hal_core_free(hal_core_t *core); extern void hal_critical_section_start(void); |