mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 07:02:34 +02:00
libflashrom: add querying functions with meson integration
Work based on lukasz.dmitrowski@gmail.com code Change-Id: I49041b8fa5700dabe59fef0d2337339d34cd6c6f Signed-off-by: Artur Raglis <artur.raglis@3mdeb.com> Signed-off-by: Lukasz Dmitrowski <lukasz.dmitrowski@gmail.com> Signed-off-by: David Hendricks <david.hendricks@gmail.com> Reviewed-on: https://review.coreboot.org/c/flashrom/+/34363 Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
188127e569
commit
71b706f544
137
libflashrom.c
137
libflashrom.c
@ -104,7 +104,142 @@ int print(const enum flashrom_log_level level, const char *const fmt, ...)
|
||||
* @{
|
||||
*/
|
||||
|
||||
/* TBD */
|
||||
/**
|
||||
* @brief Returns flashrom version
|
||||
* @return flashrom version
|
||||
*/
|
||||
const char *flashrom_version_info(void)
|
||||
{
|
||||
return flashrom_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns list of supported programmers
|
||||
* @return List of supported programmers, or NULL if an error occurred
|
||||
*/
|
||||
const char **flashrom_supported_programmers(void)
|
||||
{
|
||||
enum programmer p = 0;
|
||||
const char **supported_programmers = malloc((PROGRAMMER_INVALID + 1) * sizeof(char*));
|
||||
|
||||
if (supported_programmers != NULL) {
|
||||
for (; p < PROGRAMMER_INVALID; ++p) {
|
||||
supported_programmers[p] = programmer_table[p].name;
|
||||
}
|
||||
} else {
|
||||
msg_gerr("Memory allocation error!\n");
|
||||
}
|
||||
|
||||
return supported_programmers;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns list of supported flash chips
|
||||
* @return List of supported flash chips, or NULL if an error occurred
|
||||
*/
|
||||
struct flashrom_flashchip_info *flashrom_supported_flash_chips(void)
|
||||
{
|
||||
int i = 0;
|
||||
struct flashrom_flashchip_info *supported_flashchips =
|
||||
malloc(flashchips_size * sizeof(*supported_flashchips));
|
||||
|
||||
if (supported_flashchips != NULL) {
|
||||
for (; i < flashchips_size; ++i) {
|
||||
supported_flashchips[i].vendor = flashchips[i].vendor;
|
||||
supported_flashchips[i].name = flashchips[i].name;
|
||||
supported_flashchips[i].tested.erase =
|
||||
(enum flashrom_test_state)flashchips[i].tested.erase;
|
||||
supported_flashchips[i].tested.probe =
|
||||
(enum flashrom_test_state)flashchips[i].tested.probe;
|
||||
supported_flashchips[i].tested.read =
|
||||
(enum flashrom_test_state)flashchips[i].tested.read;
|
||||
supported_flashchips[i].tested.write =
|
||||
(enum flashrom_test_state)flashchips[i].tested.write;
|
||||
supported_flashchips[i].total_size = flashchips[i].total_size;
|
||||
}
|
||||
} else {
|
||||
msg_gerr("Memory allocation error!\n");
|
||||
}
|
||||
|
||||
return supported_flashchips;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns list of supported mainboards
|
||||
* @return List of supported mainboards, or NULL if an error occurred
|
||||
*/
|
||||
struct flashrom_board_info *flashrom_supported_boards(void)
|
||||
{
|
||||
int boards_known_size = 0;
|
||||
int i = 0;
|
||||
const struct board_info *binfo = boards_known;
|
||||
|
||||
while ((binfo++)->vendor)
|
||||
++boards_known_size;
|
||||
binfo = boards_known;
|
||||
/* add place for {0} */
|
||||
++boards_known_size;
|
||||
|
||||
struct flashrom_board_info *supported_boards =
|
||||
malloc(boards_known_size * sizeof(*binfo));
|
||||
|
||||
if (supported_boards != NULL) {
|
||||
for (; i < boards_known_size; ++i) {
|
||||
supported_boards[i].vendor = binfo[i].vendor;
|
||||
supported_boards[i].name = binfo[i].name;
|
||||
supported_boards[i].working = binfo[i].working;
|
||||
}
|
||||
} else {
|
||||
msg_gerr("Memory allocation error!\n");
|
||||
}
|
||||
|
||||
return supported_boards;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns list of supported chipsets
|
||||
* @return List of supported chipsets, or NULL if an error occurred
|
||||
*/
|
||||
struct flashrom_chipset_info *flashrom_supported_chipsets(void)
|
||||
{
|
||||
int chipset_enables_size = 0;
|
||||
int i = 0;
|
||||
const struct penable *chipset = chipset_enables;
|
||||
|
||||
while ((chipset++)->vendor_name)
|
||||
++chipset_enables_size;
|
||||
chipset = chipset_enables;
|
||||
/* add place for {0}*/
|
||||
++chipset_enables_size;
|
||||
|
||||
struct flashrom_chipset_info *supported_chipsets =
|
||||
malloc(chipset_enables_size * sizeof(*supported_chipsets));
|
||||
|
||||
if (supported_chipsets != NULL) {
|
||||
for (; i < chipset_enables_size; ++i) {
|
||||
supported_chipsets[i].vendor = chipset[i].vendor_name;
|
||||
supported_chipsets[i].chipset = chipset[i].device_name;
|
||||
supported_chipsets[i].vendor_id = chipset[i].vendor_id;
|
||||
supported_chipsets[i].chipset_id = chipset[i].device_id;
|
||||
supported_chipsets[i].status = chipset[i].status;
|
||||
}
|
||||
} else {
|
||||
msg_gerr("Memory allocation error!\n");
|
||||
}
|
||||
|
||||
return supported_chipsets;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Frees memory allocated by libflashrom API
|
||||
* @param Pointer to block of memory which should be freed
|
||||
* @return 0 on success
|
||||
*/
|
||||
int flashrom_data_free(void *const p)
|
||||
{
|
||||
free(p);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** @} */ /* end flashrom-query */
|
||||
|
||||
|
@ -37,6 +37,50 @@ enum flashrom_log_level {
|
||||
typedef int(flashrom_log_callback)(enum flashrom_log_level, const char *format, va_list);
|
||||
void flashrom_set_log_callback(flashrom_log_callback *);
|
||||
|
||||
/** @ingroup flashrom-query */
|
||||
enum flashrom_test_state {
|
||||
FLASHROM_TESTED_OK = 0,
|
||||
FLASHROM_TESTED_NT = 1,
|
||||
FLASHROM_TESTED_BAD = 2,
|
||||
FLASHROM_TESTED_DEP = 3,
|
||||
FLASHROM_TESTED_NA = 4,
|
||||
};
|
||||
|
||||
struct flashrom_flashchip_info {
|
||||
const char *vendor;
|
||||
const char *name;
|
||||
unsigned int total_size;
|
||||
struct flashrom_tested {
|
||||
enum flashrom_test_state probe;
|
||||
enum flashrom_test_state read;
|
||||
enum flashrom_test_state erase;
|
||||
enum flashrom_test_state write;
|
||||
} tested;
|
||||
};
|
||||
|
||||
struct flashrom_board_info {
|
||||
const char *vendor;
|
||||
const char *name;
|
||||
enum flashrom_test_state working;
|
||||
};
|
||||
|
||||
struct flashrom_chipset_info {
|
||||
const char *vendor;
|
||||
const char *chipset;
|
||||
uint16_t vendor_id;
|
||||
uint16_t chipset_id;
|
||||
enum flashrom_test_state status;
|
||||
};
|
||||
|
||||
const char *flashrom_version_info(void);
|
||||
void flashrom_system_info(void);
|
||||
const char **flashrom_supported_programmers(void);
|
||||
struct flashrom_flashchip_info *flashrom_supported_flash_chips(void);
|
||||
struct flashrom_board_info *flashrom_supported_boards(void);
|
||||
struct flashrom_chipset_info *flashrom_supported_chipsets(void);
|
||||
int flashrom_data_free(void *const p);
|
||||
|
||||
/** @ingroup flashrom-prog */
|
||||
struct flashrom_programmer;
|
||||
int flashrom_programmer_init(struct flashrom_programmer **, const char *prog_name, const char *prog_params);
|
||||
int flashrom_programmer_shutdown(struct flashrom_programmer *);
|
||||
|
@ -1,7 +1,11 @@
|
||||
LIBFLASHROM_1.0 {
|
||||
global:
|
||||
flashrom_board_info;
|
||||
flashrom_chipset_info;
|
||||
flashrom_data_free;
|
||||
flashrom_flag_get;
|
||||
flashrom_flag_set;
|
||||
flashrom_flashchip_info;
|
||||
flashrom_flash_erase;
|
||||
flashrom_flash_getsize;
|
||||
flashrom_flash_probe;
|
||||
@ -20,5 +24,8 @@ LIBFLASHROM_1.0 {
|
||||
flashrom_programmer_shutdown;
|
||||
flashrom_set_log_callback;
|
||||
flashrom_shutdown;
|
||||
flashrom_supported_programmers;
|
||||
flashrom_system_info;
|
||||
flashrom_version_info;
|
||||
local: *;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user