From patchwork Mon May 23 02:37:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miao Yan X-Patchwork-Id: 625020 X-Patchwork-Delegate: bmeng.cn@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3rCjPz64DBz9s3s for ; Mon, 23 May 2016 12:37:59 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=HJXPOtMZ; dkim-atps=neutral Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id EBF254B979; Mon, 23 May 2016 04:37:55 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id MlxVjFidn6h3; Mon, 23 May 2016 04:37:55 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 29A044B98B; Mon, 23 May 2016 04:37:43 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 4328B4B98A for ; Mon, 23 May 2016 04:37:34 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6PzWkh5Zt94K for ; Mon, 23 May 2016 04:37:34 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-pa0-f65.google.com (mail-pa0-f65.google.com [209.85.220.65]) by theia.denx.de (Postfix) with ESMTPS id A8A234B979 for ; Mon, 23 May 2016 04:37:30 +0200 (CEST) Received: by mail-pa0-f65.google.com with SMTP id rw9so16506085pab.2 for ; Sun, 22 May 2016 19:37:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:in-reply-to:references; bh=qEQF3FmV24L8/22iF9NYx0zETc/+KbH2/OGgtDCJjPo=; b=HJXPOtMZanpTfaEn6JE1QtQnTzfF8EvjhkBpGwTtFEIs+YvMQ6mursc4XhQ8SmJ6y9 8xiDFDz2STHrLa8a1efevyVQgpor0pdqSRfAEbfhE7USGmWS1v7CaGVxbvzsQInfcJ/h ZD/9tXE2lmSmgeAJAj3B+SE2d3YEZRPtQRj3XgWWFaD5hb5JobcTFwTgF06j9pgtSz5C mOXmpUUxq6DjrmSiz8qhw6Qe9hoq4KVB9xmF+NEYimfbcAt/waT2x9x+b5PEFfaA36JW 9BPA2TJ2lmVVIIA+wZrqfEzmdybnAg9OZsMvV2EunyQGbG7lYTOYMYppv4xzSchz4SCN 3wEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=qEQF3FmV24L8/22iF9NYx0zETc/+KbH2/OGgtDCJjPo=; b=fOsAzwk0N9G8yvjvLLk4Ikp5upwRhjKWHdE0YR+Mqoocn9TJ1M/GJ+lU5B7CejZkL1 OVfH3QjrL4ja3b0THQVoFLOlGx8IdYgwzFHDqgSWvtgkS/TeNjJ9qwzuP54gbZkFFIQj vJkjdjeUR0B7B1+69tJ8DDom90NfyrU+XPjfQuen/4enTOr9IahZ4sM8T5urI7gjX9Gt z2O6JJGPCNi2V/YWx2DVZa2vWvkHWDnW3hpwOLpy3CX/YPyGAype68q7kwGLFumvKI0x /991bEt+AU7BAEKQWwcrsAn5dKdVZ91KpxYevsk+bPo/3IT3V+XDU6oHLBpGkwBDLZF4 nh7g== X-Gm-Message-State: AOPr4FUbbD3XcEsUDL3mf61zn3NXUt3RO2yAKw5KmvEu7Lm2E7kGs07nvjpGX1rIZHR4cg== X-Received: by 10.66.65.133 with SMTP id x5mr24200198pas.108.1463971048851; Sun, 22 May 2016 19:37:28 -0700 (PDT) Received: from pa-dbc1131.eng.vmware.com ([208.91.1.34]) by smtp.gmail.com with ESMTPSA id u127sm42109384pfb.82.2016.05.22.19.37.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 22 May 2016 19:37:28 -0700 (PDT) From: Miao Yan To: u-boot@lists.denx.de, trini@konsulko.com, sjg@chromium.org, bmeng.cn@gmail.com Date: Sun, 22 May 2016 19:37:11 -0700 Message-Id: <1463971042-24531-3-git-send-email-yanmiaobest@gmail.com> X-Mailer: git-send-email 2.6.3.444.gfd13a2e In-Reply-To: <1463971042-24531-1-git-send-email-yanmiaobest@gmail.com> References: <1463971042-24531-1-git-send-email-yanmiaobest@gmail.com> Subject: [U-Boot] [PATCH v3 02/13] cmd: qfw: add API to iterate firmware list X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" 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 Reviewed-by: Bin Meng --- Changes in v3: - none cmd/qemu_fw_cfg.c | 25 ++++++++++++++++++++++--- include/qemu_fw_cfg.h | 9 +++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/cmd/qemu_fw_cfg.c b/cmd/qemu_fw_cfg.c index 48ae476..192b7d1 100644 --- a/cmd/qemu_fw_cfg.c +++ b/cmd/qemu_fw_cfg.c @@ -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); } diff --git a/include/qemu_fw_cfg.h b/include/qemu_fw_cfg.h index e21f150..19d0ba0 100644 --- a/include/qemu_fw_cfg.h +++ b/include/qemu_fw_cfg.h @@ -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