From nobody Sat May 10 08:55:08 2025 Delivered-To: importer@patchew.org Received-SPF: none (zoho.com: 80.81.252.135 is neither permitted nor denied by domain of seabios.org) client-ip=80.81.252.135; envelope-from=seabios-bounces@seabios.org; helo=mail.coreboot.org; Authentication-Results: mx.zoho.com; spf=none (zoho.com: 80.81.252.135 is neither permitted nor denied by domain of seabios.org) smtp.mailfrom=seabios-bounces@seabios.org; Return-Path: Received: from mail.coreboot.org (mail.coreboot.org [80.81.252.135]) by mx.zohomail.com with SMTPS id 1487621745331793.5218294636024; Mon, 20 Feb 2017 12:15:45 -0800 (PST) Received: from [127.0.0.1] (helo=ra.coresystems.de) by mail.coreboot.org with esmtp (Exim 4.86_2) (envelope-from ) id 1cfuMl-00088e-Vz; Mon, 20 Feb 2017 21:15:24 +0100 Received: from mail-ot0-f176.google.com ([74.125.82.176]) by mail.coreboot.org with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.86_2) (envelope-from ) id 1cfuMW-00082v-0q for seabios@seabios.org; Mon, 20 Feb 2017 21:15:21 +0100 Received: by mail-ot0-f176.google.com with SMTP id w44so12925439otw.2 for ; Mon, 20 Feb 2017 12:15:07 -0800 (PST) Received: from Arrow.corp.skyportsystems.com (76-236-31-201.lightspeed.sntcca.sbcglobal.net. [76.236.31.201]) by smtp.gmail.com with ESMTPSA id b138sm2626246oih.14.2017.02.20.12.15.04 (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 20 Feb 2017 12:15:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skyportsystems.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=pbIlzSfoP2aMkAiCC1f3fIFUXc5p7s2etMVEe6/xg24=; b=Pl5LYVL0S7g9Tz42+tyg174VSwO1fagWsCeAukhWFfHn05VFpZ+VSjuyfypfKK8eBV M1h/6j/J/4MGoatbWdrFKQ5B/EhYMGvGm3+2fuXrYJ6ud5GwV1LR4UZeZVIjfuSMjlB8 WY/q9KSBy3BVC/e1ER+3pi1HmZJ2YSG42Rq9g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=pbIlzSfoP2aMkAiCC1f3fIFUXc5p7s2etMVEe6/xg24=; b=MnJXB/W8eCkZqa5TxziopdxiaiJi1UieN6+B4ouAEDOh9WfZm87aRFUl6hElfyLP5y crgDTVf8Kh2QzFl+42lFwRTENHPMe/CHoxrHwwcB2ikxNjOI9tlH4BU77nAyUszEntP3 HHPKfWasHPkNb+snqFNc92Z54fVry11m6oZulDXRNPSxTgj0JD/nGA2xljlpKwDmMxeU uNXSlpqUEh7DwtaLOnzC1SRCJl1KHJMYk7qAWbT5FdZjRL2tmZ4dNeDMkcGesYvR89Dq OxYO2GoltGizVx2pfOrjuwpXTtekDIYgeVNtHtf7Ck6szxB1kfiCM/PthG3VrghszJwh A8Wg== X-Gm-Message-State: AMke39lT5ubhjTk1QzX2M19Ds54+5D/TGYhZSGq0IxYy++nnEynuGBmdUlqBoRL2knVU7mD7 X-Received: by 10.157.32.118 with SMTP id n109mr2640316ota.111.1487621705776; Mon, 20 Feb 2017 12:15:05 -0800 (PST) From: ben@skyportsystems.com To: seabios@seabios.org Date: Mon, 20 Feb 2017 12:14:57 -0800 Message-Id: <63dd7d79d6a7d17e763bf6b361cbed3cb84162b8.1487621478.git.ben@skyportsystems.com> X-Mailer: git-send-email 2.10.1 (Apple Git-78) In-Reply-To: References: In-Reply-To: References: X-Spam-Score: -3.3 (---) Subject: [SeaBIOS] [PATCH v6 5/5] QEMU fw_cfg: Write fw_cfg back on S3 resume X-BeenThere: seabios@seabios.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: SeaBIOS mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: lersek@redhat.com, mst@redhat.com MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Errors-To: seabios-bounces@seabios.org Sender: "SeaBIOS" X-Duff: Orig. Duff, Duff Lite, Duff Dry, Duff Dark, Raspberry Duff, Lady Duff, Red Duff, Tartar Control Duff X-ZohoMail: RSF_4 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" From: Ben Warren Any pointers to BIOS-allocated memory that were written back to QEMU fw_cfg files are replayed when resuming from S3 sleep. Signed-off-by: Ben Warren Reviewed-by: Laszlo Ersek --- src/fw/romfile_loader.c | 33 +++++++++++++++++++++++++++++++++ src/fw/romfile_loader.h | 2 ++ src/resume.c | 4 ++++ 3 files changed, 39 insertions(+) diff --git a/src/fw/romfile_loader.c b/src/fw/romfile_loader.c index 30e7b58..14bc908 100644 --- a/src/fw/romfile_loader.c +++ b/src/fw/romfile_loader.c @@ -4,6 +4,7 @@ #include "string.h" // strcmp #include "romfile.h" // struct romfile_s #include "malloc.h" // Zone*, _malloc +#include "list.h" // struct hlist_node #include "output.h" // warn_* #include "paravirt.h" // qemu_cfg_write_file =20 @@ -16,6 +17,16 @@ struct romfile_loader_files { struct romfile_loader_file files[]; }; =20 +// Data structures for storing "write pointer" entries for possible replay +struct romfile_wr_pointer_entry { + u64 pointer; + u32 offset; + u16 key; + u8 ptr_size; + struct hlist_node node; +}; +static struct hlist_head romfile_pointer_list; + static struct romfile_loader_file * romfile_loader_find(const char *name, struct romfile_loader_files *files) @@ -29,6 +40,19 @@ romfile_loader_find(const char *name, return NULL; } =20 +// Replay "write pointer" entries back to QEMU +void romfile_fw_cfg_resume(void) +{ + if (!CONFIG_QEMU) + return; + + struct romfile_wr_pointer_entry *entry; + hlist_for_each_entry(entry, &romfile_pointer_list, node) { + qemu_cfg_write_file_simple(&entry->pointer, entry->key, + entry->offset, entry->ptr_size); + } +} + static void romfile_loader_allocate(struct romfile_loader_entry_s *entry, struct romfile_loader_files *files) { @@ -163,6 +187,15 @@ static void romfile_loader_write_pointer(struct romfil= e_loader_entry_s *entry, entry->wr_pointer.size) !=3D entry->wr_pointer= .size) { goto err; } + + /* Store the info so it can replayed later if necessary */ + struct romfile_wr_pointer_entry *store =3D malloc_high(sizeof(*store)); + store->pointer =3D pointer; + store->key =3D qemu_get_romfile_key(dest_file); + store->offset =3D dst_offset; + store->ptr_size =3D entry->wr_pointer.size; + hlist_add_head(&store->node, &romfile_pointer_list); + return; err: warn_internalerror(); diff --git a/src/fw/romfile_loader.h b/src/fw/romfile_loader.h index 4dc50ab..fcd4ab2 100644 --- a/src/fw/romfile_loader.h +++ b/src/fw/romfile_loader.h @@ -86,4 +86,6 @@ enum { =20 int romfile_loader_execute(const char *name); =20 +void romfile_fw_cfg_resume(void); + #endif diff --git a/src/resume.c b/src/resume.c index e67cfce..99fa34f 100644 --- a/src/resume.c +++ b/src/resume.c @@ -17,6 +17,7 @@ #include "string.h" // memset #include "util.h" // dma_setup #include "tcgbios.h" // tpm_s3_resume +#include "fw/romfile_loader.h" // romfile_fw_cfg_resume =20 // Handler for post calls that look like a resume. void VISIBLE16 @@ -105,6 +106,9 @@ s3_resume(void) tpm_s3_resume(); s3_resume_vga(); =20 + /* Replay any fw_cfg entries that go back to the host */ + romfile_fw_cfg_resume(); + make_bios_readonly(); =20 // Invoke the resume vector. --=20 2.7.4 _______________________________________________ SeaBIOS mailing list SeaBIOS@seabios.org https://www.coreboot.org/mailman/listinfo/seabios