[coreboot] [PATCH 3/4] Libflashrom - Querying functions
Łukasz Dmitrowski
lukasz.dmitrowski at gmail.com
Fri Aug 14 08:51:16 CET 2015
Added querying functions
Signed-off-by: Lukasz Dmitrowski <lukasz.dmitrowski at gmail.com>
---
Makefile | 4 +-
libflashrom.c | 139 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
libflashrom.h | 40 +++++++++++++++++
3 files changed, 180 insertions(+), 3 deletions(-)
diff --git a/Makefile b/Makefile
index 2c7fccd..0c97268 100644
--- a/Makefile
+++ b/Makefile
@@ -726,7 +726,7 @@ FEATURE_CFLAGS += $(shell LC_ALL=C grep -q "UTSNAME := yes" .features && printf
# We could use PULLED_IN_LIBS, but that would be ugly.
FEATURE_LIBS += $(shell LC_ALL=C grep -q "NEEDLIBZ := yes" .libdeps && printf "%s" "-lz")
-LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS) udelay.o
+LIBFLASHROM_OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS)
OBJS = $(CLI_OBJS) $(LIBFLASHROM_OBJS)
all: hwlibs features $(PROGRAM)$(EXEC_SUFFIX) $(PROGRAM).8
@@ -737,7 +737,7 @@ endif
$(PROGRAM)$(EXEC_SUFFIX): $(OBJS)
$(CC) $(LDFLAGS) -o $(PROGRAM)$(EXEC_SUFFIX) $(OBJS) $(LIBS) $(PCILIBS) $(FEATURE_LIBS) $(USBLIBS)
-libflashrom.a: $(LIBFLASHROM_OBJS)
+libflashrom.a: $(LIBFLASHROM_OBJS) print.o cli_common.o
$(AR) rcs $@ $^
$(RANLIB) $@
diff --git a/libflashrom.c b/libflashrom.c
index c96a2e9..3b94215 100644
--- a/libflashrom.c
+++ b/libflashrom.c
@@ -103,7 +103,144 @@ int print(const enum msglevel level, const char *const fmt, ...)
* @{
*/
-/* TBD */
+/**
+ * @brief Returns flashrom version
+ * @return Flashrom version
+ */
+const char *fl_version(void)
+{
+ return flashrom_version;
+}
+
+/**
+ * @brief Returns a list of supported programmers
+ * @return List of supported programmers
+ */
+const char **fl_supported_programmers(void)
+{
+ enum programmer p = 0;
+ const char **supported_programmers = NULL;
+
+ supported_programmers = malloc((PROGRAMMER_INVALID + 1) * sizeof(char*));
+ if (!supported_programmers) {
+ msg_gerr("Out of memory!");
+ } else {
+ for (; p < PROGRAMMER_INVALID; ++p) {
+ supported_programmers[p] = programmer_table[p].name;
+ }
+ supported_programmers[PROGRAMMER_INVALID] = NULL;
+ }
+
+ return supported_programmers;
+}
+
+/**
+ * @brief Returns list of supported flash ROM chips
+ * @return List of supported flash ROM chips
+ */
+fl_flashchip_info *fl_supported_flash_chips(void)
+{
+ int i = 0;
+ fl_flashchip_info *flashchip_info = NULL;
+
+ flashchip_info = malloc(flashchips_size * sizeof(fl_flashchip_info));
+ if (!flashchip_info) {
+ msg_gerr("Out of memory!");
+ } else {
+ for (; i < flashchips_size; ++i) {
+ flashchip_info[i].vendor = flashchips[i].vendor;
+ flashchip_info[i].name = flashchips[i].name;
+ flashchip_info[i].tested.erase = flashchips[i].tested.erase;
+ flashchip_info[i].tested.probe = flashchips[i].tested.probe;
+ flashchip_info[i].tested.read = flashchips[i].tested.read;
+ flashchip_info[i].tested.write = flashchips[i].tested.write;
+ flashchip_info[i].total_size = flashchips[i].total_size;
+ }
+ }
+
+ return flashchip_info;
+}
+
+/**
+ * @brief Returns list of supported mainboards
+ * @return List of supported mainborads
+ */
+fl_board_info *fl_supported_boards(void)
+{
+ const struct board_info *binfo = boards_known;
+ fl_board_info *supported_boards = NULL;
+ int boards_known_size = 0;
+ int i = 0;
+
+ while ((binfo++)->vendor)
+ ++boards_known_size;
+ binfo = boards_known;
+ /* add place for {0} */
+ ++boards_known_size;
+
+ supported_boards = malloc(boards_known_size * sizeof(fl_board_info));
+
+ if (!supported_boards) {
+ msg_gerr("Out of memory!");
+ } else {
+ 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;
+ }
+ }
+
+ return supported_boards;
+}
+
+/**
+ * @brief Returns list of supported chipsets
+ * @return List of supported chipsets
+ */
+fl_chipset_info *fl_supported_chipsets(void)
+{
+ const struct penable *chipset = chipset_enables;
+ fl_chipset_info *supported_chipsets = NULL;
+ int chipset_enbales_size = 0;
+ int i = 0;
+
+ while ((chipset++)->vendor_name)
+ ++chipset_enbales_size;
+ chipset = chipset_enables;
+ /* add place for {0}*/
+ ++chipset_enbales_size;
+
+ supported_chipsets = malloc(chipset_enbales_size * sizeof(fl_chipset_info));
+
+ if (!supported_chipsets) {
+ msg_gerr("Out of memory!");
+ } else {
+ for (; i < chipset_enbales_size; ++i) {
+ supported_chipsets[i].vendor = chipset[i].vendor_name;
+ supported_chipsets[i].chipset = chipset[i].device_name;
+ supported_chipsets[i].status = chipset[i].status;
+ }
+ }
+
+ return supported_chipsets;
+}
+
+/**
+ * @brief Frees fl_*_info and string lists allocated by flashrom
+ * @param Pointer to block of memory which should be freed
+ * @return 0 on success
+ * 1 on null pointer error
+ */
+int fl_data_free(void *const p)
+{
+ if (!p) {
+ msg_gerr("Null pointer!");
+ return 1;
+ } else {
+ free(p);
+ return 0;
+ }
+}
/** @} */ /* end fl-query */
diff --git a/libflashrom.h b/libflashrom.h
index 2077407..5308fa3 100644
--- a/libflashrom.h
+++ b/libflashrom.h
@@ -38,6 +38,46 @@ typedef enum { /* This has to match enum msglevel. */
typedef int(fl_log_callback_t)(fl_log_level_t, const char *format, va_list);
void fl_set_log_callback(fl_log_callback_t *);
+typedef enum {
+ FL_TESTED_OK = 0,
+ FL_TESTED_NT = 1,
+ FL_TESTED_BAD = 2,
+ FL_TESTED_DEP = 3,
+ FL_TESTED_NA = 4,
+} fl_test_state;
+
+typedef struct {
+ const char *vendor;
+ const char *name;
+ unsigned int total_size;
+
+ struct fl_tested {
+ fl_test_state probe;
+ fl_test_state read;
+ fl_test_state erase;
+ fl_test_state write;
+ } tested;
+} fl_flashchip_info;
+
+typedef struct {
+ const char *vendor;
+ const char *name;
+ fl_test_state working;
+} fl_board_info;
+
+typedef struct {
+ const char *vendor;
+ const char *chipset;
+ fl_test_state status;
+} fl_chipset_info;
+
+const char** fl_supported_programmers(void);
+const char* fl_version(void);
+fl_flashchip_info *fl_supported_flash_chips(void);
+fl_board_info *fl_supported_boards(void);
+fl_chipset_info *fl_supported_chipsets(void);
+int fl_data_free(void *const p);
+
int fl_programmer_init(const char *prog_name, const char *prog_params);
int fl_programmer_shutdown(void);
--
2.1.4
More information about the coreboot
mailing list