diff options
-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); |