aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-bsp/systemd-boot/systemd-boot/0003-sd-boot-Support-global-kernel-command-line-fragment.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-bsp/systemd-boot/systemd-boot/0003-sd-boot-Support-global-kernel-command-line-fragment.patch')
-rw-r--r--recipes-bsp/systemd-boot/systemd-boot/0003-sd-boot-Support-global-kernel-command-line-fragment.patch66
1 files changed, 66 insertions, 0 deletions
diff --git a/recipes-bsp/systemd-boot/systemd-boot/0003-sd-boot-Support-global-kernel-command-line-fragment.patch b/recipes-bsp/systemd-boot/systemd-boot/0003-sd-boot-Support-global-kernel-command-line-fragment.patch
new file mode 100644
index 00000000..a4b63557
--- /dev/null
+++ b/recipes-bsp/systemd-boot/systemd-boot/0003-sd-boot-Support-global-kernel-command-line-fragment.patch
@@ -0,0 +1,66 @@
+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
+