cmd: qfw: add API to iterate firmware list
authorMiao Yan <yanmiaobest@gmail.com>
Mon, 23 May 2016 02:37:11 +0000 (19:37 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Mon, 23 May 2016 07:18:00 +0000 (15:18 +0800)
This patch is part of the refactor work of qfw. It adds 3 APIs to qfw
core to iterate firmware list.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
cmd/qemu_fw_cfg.c
include/qemu_fw_cfg.h

index 48ae47683f9f2101f993e55551b28c894ce73f9d..192b7d18d8192b1daefa80e95c8cd8225ff18af7 100644 (file)
@@ -229,10 +229,27 @@ void qemu_fwcfg_free_files(void)
        }
 }
 
+struct fw_file *qemu_fwcfg_file_iter_init(struct fw_cfg_file_iter *iter)
+{
+       iter->entry = fw_list.next;
+       return list_entry(iter->entry, struct fw_file, list);
+}
+
+struct fw_file *qemu_fwcfg_file_iter_next(struct fw_cfg_file_iter *iter)
+{
+       iter->entry = iter->entry->next;
+       return list_entry(iter->entry, struct fw_file, list);
+}
+
+bool qemu_fwcfg_file_iter_end(struct fw_cfg_file_iter *iter)
+{
+       return iter->entry == &fw_list;
+}
+
 static int qemu_fwcfg_list_firmware(void)
 {
        int ret;
-       struct list_head *entry;
+       struct fw_cfg_file_iter iter;
        struct fw_file *file;
 
        /* make sure fw_list is loaded */
@@ -240,8 +257,10 @@ static int qemu_fwcfg_list_firmware(void)
        if (ret)
                return ret;
 
-       list_for_each(entry, &fw_list) {
-               file = list_entry(entry, struct fw_file, list);
+
+       for (file = qemu_fwcfg_file_iter_init(&iter);
+            !qemu_fwcfg_file_iter_end(&iter);
+            file = qemu_fwcfg_file_iter_next(&iter)) {
                printf("%-56s\n", file->cfg.name);
        }
 
index e21f1503c0e8598f62ce8347d115112094271ec4..19d0ba08b4ced5bcbdafd62c491e93d3f97f4574 100644 (file)
@@ -87,6 +87,10 @@ struct fw_file {
        struct list_head list;  /* list node to link to fw_list */
 };
 
+struct fw_cfg_file_iter {
+       struct list_head *entry; /* structure to iterate file list */
+};
+
 struct fw_cfg_dma_access {
        __be32 control;
        __be32 length;
@@ -159,4 +163,9 @@ void qemu_fwcfg_free_files(void);
  */
 int qemu_fwcfg_online_cpus(void);
 
+/* helper functions to iterate firmware file list */
+struct fw_file *qemu_fwcfg_file_iter_init(struct fw_cfg_file_iter *iter);
+struct fw_file *qemu_fwcfg_file_iter_next(struct fw_cfg_file_iter *iter);
+bool qemu_fwcfg_file_iter_end(struct fw_cfg_file_iter *iter);
+
 #endif