1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-26 14:42:36 +02:00

libflashrom: Add API to get the list of supported programmers

There were no options available to obtain the list of programmers.
The implementation is based on flashrom_supported_flash_chips.
Arrays of constant strings are returned, and the array must be
freed using flashrom_data_free.

Testing: Both unit tests and CLI tools serve as libflashrom clients.
    All unit tests run successfully.

Change-Id: Ib5275b742b849183b1fe701900040fee369a1d78
Signed-off-by: Dmitry Zhadinets <dzhadinets@gmail.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/86921
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Peter Marheine <pmarheine@chromium.org>
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
This commit is contained in:
Dmitry Zhadinets 2025-03-19 01:58:32 -04:00 committed by Anastasia Klimchuk
parent 6ff43de0e0
commit bc029c2f45
6 changed files with 42 additions and 2 deletions

View File

@ -193,6 +193,14 @@ struct flashrom_chipset_info {
* @return flashrom version
*/
const char *flashrom_version_info(void);
/**
* @brief Returns list of supported programmers
* The last entry in the returned list is followed by a NULL.
*
* @return List of supported programmers, or NULL if an error occurred.
* The pointer must be freed after using flashrom_data_free
*/
const char **flashrom_supported_programmers(void);
/**
* @brief Returns list of supported flash chips
* @return List of supported flash chips, or NULL if an error occurred

View File

@ -194,6 +194,18 @@ const char *flashrom_version_info(void)
return flashrom_version;
}
const char **flashrom_supported_programmers(void)
{
const char **result = malloc(sizeof(char*) * (programmer_table_size + 1));
if (!result)
return NULL;
for (unsigned int i = 0; i < programmer_table_size; ++i) {
result[i] = programmer_table[i]->name;
}
result[programmer_table_size] = 0;
return result;
}
struct flashrom_flashchip_info *flashrom_supported_flash_chips(void)
{
struct flashrom_flashchip_info *supported_flashchips =

View File

@ -32,6 +32,7 @@ LIBFLASHROM_1.0 {
flashrom_supported_boards;
flashrom_supported_chipsets;
flashrom_supported_flash_chips;
flashrom_supported_programmers;
flashrom_version_info;
flashrom_wp_cfg_new;
flashrom_wp_cfg_release;

View File

@ -1,7 +1,7 @@
/*
* This file is part of the flashrom project.
*
* Copyright 2025 Dmitry Zhadinets (dzhadinets@gmail.com)
* Copyright 2025 Dmitry Zhadinets <dzhadinets@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -96,4 +96,21 @@ void flashrom_set_log_level_test_success(void **state)
/* check that callback is called after the change*/
assert_int_equal(print(FLASHROM_MSG_INFO, "1%s", "\n"), 0x666 + (int)FLASHROM_MSG_INFO);
flashrom_set_log_callback(NULL);
}
}
void flashrom_supported_programmers_test_success(void **state)
{
(void) state; /* unused */
const char **array = flashrom_supported_programmers();
const char **ptr = array;
assert_non_null(array);
do {
assert_non_null(*ptr);
}while (*(++ptr));
flashrom_data_free(array);
assert_int_not_equal(ptr - array, 0);
}

View File

@ -482,6 +482,7 @@ int main(int argc, char *argv[])
cmocka_unit_test(flashrom_set_log_callback_test_success),
cmocka_unit_test(flashrom_set_log_callback_v2_test_success),
cmocka_unit_test(flashrom_set_log_level_test_success),
cmocka_unit_test(flashrom_supported_programmers_test_success),
};
ret |= cmocka_run_group_tests_name("libflashrom.c tests", libflashrom_tests, NULL, NULL);

View File

@ -35,6 +35,7 @@ void flashbuses_to_text_test_success(void **state);
void flashrom_set_log_callback_test_success(void **state);
void flashrom_set_log_callback_v2_test_success(void **state);
void flashrom_set_log_level_test_success(void **state);
void flashrom_supported_programmers_test_success(void **state);
/* spi25.c */
void spi_write_enable_test_success(void **state);