From 76bec78e0520e2eb9738e8d060838b92019834bb Mon Sep 17 00:00:00 2001
From: Josh Triplett <josh@joshtriplett.org>
Date: Wed, 31 Jul 2013 14:03:00 -0700
Subject: [PATCH 2/7] grub-lakitu: CHROMIUM: Forward-port gptpriority command
 to GRUB 2.00

Forward-ported from git commit 9866f9750a38a175849ca04439922ac1ffe8a0e7
with significant edits: Ported from the previous Ruby-based build system
to the new autogen-based Makefile.am generator, and updated for GRUB API
changes.  In particular, the previous version of gptpriority counted on
GRUB's part_gpt to provide access to the original partition table data
in a field of "struct grub_partition" that no longer exists; this
updated version modifies part_gpt to directly export the relevant
attribute field as a new field in grub_partition.

Since this adds a new source file and a new module, and the GRUB ebuild
expects source in "make dist" form (with configure and Makefile.in
already generated), this commit also updates the corresponding generated
files via autogen.sh.

BUG=chromium:265918
TEST=With the complete patch series, built a complete x86-generic image,
     and booted it via UEFI on both 32-bit and 64-bit UEFI platforms.

CQ-DEPEND=Ie865f3d5ab0ecd8e9138bfd5b576a8147a205757

Reviewed-on: https://gerrit.chromium.org/gerrit/63986
Tested-by: Josh Triplett <josh@joshtriplett.org>
Reviewed-by: Liam McLoughlin <lmcloughlin@chromium.org>
Commit-Queue: Josh Triplett <josh@joshtriplett.org>

(cherry picked from commit 612090b4d856bda80d5879aa244069fe622d5c56)
(from https://chromium.googlesource.com/chromiumos/third_party/grub2)

BUG=b:69569602
TEST=TBD

Change-Id: I51afa58f77411eb7b699f1315cdce261eba7586c
Reviewed-on: https://chromium-review.googlesource.com/945883
Reviewed-by: Edward Jee <edjee@google.com>
Commit-Queue: Edward Jee <edjee@google.com>
Tested-by: Edward Jee <edjee@google.com>
Trybot-Ready: Edward Jee <edjee@google.com>
---
 grub-core/Makefile.core.def      |  5 ++
 grub-core/commands/gptpriority.c | 99 ++++++++++++++++++++++++++++++++
 grub-core/partmap/gpt.c          |  1 +
 include/grub/partition.h         |  3 +
 4 files changed, 108 insertions(+)
 create mode 100644 grub-core/commands/gptpriority.c

diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def
index b283c502b..7378c7848 100644
--- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def
@@ -928,6 +928,11 @@ module = {
   common = commands/gptsync.c;
 };
 
+module = {
+  name = gptpriority;
+  common = commands/gptpriority.c;
+};
+
 module = {
   name = halt;
   nopc = commands/halt.c;
diff --git a/grub-core/commands/gptpriority.c b/grub-core/commands/gptpriority.c
new file mode 100644
index 000000000..0bb40cb65
--- /dev/null
+++ b/grub-core/commands/gptpriority.c
@@ -0,0 +1,99 @@
+/* gptpriority.c - read the priority of gpt partitions  */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <grub/command.h>
+#include <grub/dl.h>
+#include <grub/disk.h>
+#include <grub/partition.h>
+#include <grub/gpt_partition.h>
+#include <grub/misc.h>
+#include <grub/mm.h>
+#include <grub/fs.h>
+#include <grub/env.h>
+
+GRUB_MOD_LICENSE ("GPLv3+");
+
+static grub_err_t
+grub_cmd_gptpriority (grub_command_t cmd __attribute__ ((unused)),
+                      int argc, char **args)
+{
+  grub_disk_t disk;
+  grub_partition_t part;
+  char priority_str[3]; /* Maximum value 15 */
+
+  if (argc < 2 || argc > 3)
+    return grub_error (GRUB_ERR_BAD_ARGUMENT,
+                       "gptpriority DISKNAME PARTITIONNUM [VARNAME]");
+
+  /* Open the disk if it exists */
+  disk = grub_disk_open (args[0]);
+  if (!disk)
+    {
+      return grub_error (GRUB_ERR_BAD_ARGUMENT,
+                         "Not a disk");
+    }
+
+  part = grub_partition_probe (disk, args[1]);
+  if (!part)
+    {
+      grub_disk_close (disk);
+      return grub_error (GRUB_ERR_BAD_ARGUMENT,
+                         "No such partition");
+    }
+
+  if (grub_strcmp (part->partmap->name, "gpt"))
+    {
+      grub_disk_close (disk);
+      return grub_error (GRUB_ERR_BAD_PART_TABLE,
+                         "Not a GPT partition");
+    }
+
+  grub_snprintf (priority_str, sizeof(priority_str), "%" PRIuGRUB_UINT64_T,
+                 (part->gpt_attrib >> 48) & 0xfULL);
+
+  if (argc == 3)
+    {
+      grub_env_set (args[2], priority_str);
+      grub_env_export (args[2]);
+    }
+  else
+    {
+      grub_printf ("Priority is %s\n", priority_str);
+    }
+
+  grub_disk_close (disk);
+  return GRUB_ERR_NONE;
+}
+
+static grub_command_t cmd;
+
+GRUB_MOD_INIT(gptpriority)
+{
+  (void) mod;
+  cmd = grub_register_command ("gptpriority", grub_cmd_gptpriority,
+                               "gptpriority DISKNAME PARTITIONNUM [VARNAME]",
+                               "\nDisplays the priority of the specified "
+                               "partition from the given disk, and optionally"
+                               " stores it in an environment variable.\n\n"
+                               "E.g. gptpriority hd2 2 prioA");
+}
+
+GRUB_MOD_FINI(gptpriority)
+{
+  grub_unregister_command (cmd);
+}
diff --git a/grub-core/partmap/gpt.c b/grub-core/partmap/gpt.c
index 72a2e37cd..bc218fda8 100644
--- a/grub-core/partmap/gpt.c
+++ b/grub-core/partmap/gpt.c
@@ -108,6 +108,7 @@ grub_gpt_partition_map_iterate (grub_disk_t disk,
 	  part.index = last_offset;
 	  part.partmap = &grub_gpt_partition_map;
 	  part.parent = disk->partition;
+	  part.gpt_attrib = entry.attrib;
 
 	  grub_dprintf ("gpt", "GPT entry %d: start=%lld, length=%lld\n", i,
 			(unsigned long long) part.start,
diff --git a/include/grub/partition.h b/include/grub/partition.h
index 7adb7ec6e..639f1e610 100644
--- a/include/grub/partition.h
+++ b/include/grub/partition.h
@@ -87,6 +87,9 @@ struct grub_partition
   /* The type of partition whne it's on MSDOS.
      Used for embedding detection.  */
   grub_uint8_t msdostype;
+
+  /* The attrib field for GPT. Needed for priority detection. */
+  grub_uint64_t gpt_attrib;
 };
 
 grub_partition_t EXPORT_FUNC(grub_partition_probe) (struct grub_disk *disk,
-- 
2.30.0.478.g8a0d178c01-goog

