1
0
forked from brl/citadel
citadel/meta-intel/recipes-bsp/systemd-boot/systemd-boot/0003-sd-boot-Support-global-kernel-command-line-fragment.patch

67 lines
2.4 KiB
Diff

From 1e33f99e13a70c19c1f63f6ef1c5522a09adece6 Mon Sep 17 00:00:00 2001
From: Jianxun Zhang <jianxun.zhang@linux.intel.com>
Date: Mon, 20 Jun 2016 13:08:20 -0700
Subject: [PATCH 3/3] sd-boot: Support global kernel command line fragment
Query file blob KBOOTPARAM from RMC. If it exists, we append
it to the new linux boot entry's cmdline. A boot entry could
be read from a .conf file on ESP, RMC database, or embedded
linux image. content in KBOOTPARAM is effective in all of
these cases.
Upstream-Status: Pending
Signed-off-by: Jianxun Zhang <jianxun.zhang@linux.intel.com>
---
src/boot/efi/boot.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
index d1b029b..8dffc48 100644
--- a/src/boot/efi/boot.c
+++ b/src/boot/efi/boot.c
@@ -846,6 +846,40 @@ static VOID config_add_entry(Config *config, ConfigEntry *entry) {
config->entries = ReallocatePool(config->entries,
sizeof(VOID *) * config->entry_count, sizeof(VOID *) * i);
}
+
+ /* rmc: a linux entry could be added from .conf file or an embedded linux image
+ * we put appending global command line here to cover both of two cases.
+ */
+ if (entry->type == LOADER_LINUX && rmc_db && rmc_fp) {
+ rmc_file_t rmc_kp;
+
+ if (!rmc_query_file_by_fp(rmc_fp, rmc_db, "KBOOTPARAM", &rmc_kp)) {
+ CHAR8 *cmdline;
+ CHAR16 *s;
+ CHAR16 *t;
+ CHAR16 *p;
+
+ cmdline = AllocatePool(rmc_kp.blob_len * sizeof(CHAR8) + 1);
+ CopyMem(cmdline, rmc_kp.blob, rmc_kp.blob_len);
+ cmdline[rmc_kp.blob_len] = '\0';
+ p = stra_to_str(cmdline);
+ t = p;
+
+ while (*t) {
+ if (*t == '\n')
+ *t = '\0';
+ t++;
+ }
+
+ s = PoolPrint(L"%s %s", entry->options, p);
+ FreePool(entry->options);
+ FreePool(p);
+ FreePool(cmdline);
+
+ entry->options = s;
+ }
+ }
+
config->entries[config->entry_count++] = entry;
}
--
2.7.4