Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1158)

Unified Diff: vboot_firmware/stub/load_firmware_stub.c

Issue 2776002: add load firmware stub (Closed) Base URL: ssh://gitrw.chromium.org/vboot_reference.git
Patch Set: Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « vboot_firmware/Makefile ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vboot_firmware/stub/load_firmware_stub.c
diff --git a/vboot_firmware/stub/load_firmware_stub.c b/vboot_firmware/stub/load_firmware_stub.c
new file mode 100644
index 0000000000000000000000000000000000000000..23e98be5e6ae69a39e1a64911ee60ae771ccea0e
--- /dev/null
+++ b/vboot_firmware/stub/load_firmware_stub.c
@@ -0,0 +1,94 @@
+/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * TEMPORARY stub for calling LoadFirmware() which looks like the old
+ * VerifyFirmwarDriver_f() call.
+ * (Firmware portion)
+ */
+
+#include "load_firmware_fw.h"
+
+#include "firmware_image_fw.h"
+#include "utility.h"
+
+
+static uint8_t *g_firmwareA;
+static uint64_t g_firmwareA_size;
+static uint8_t *g_firmwareB;
+static uint64_t g_firmwareB_size;
+
+
+void *GetFirmwareBody(uint64_t firmware_index, uint64_t* size) {
+
+ uint8_t *fw;
+
+ /* In a real implementation, GetFirmwareBody() should be what reads
+ * and decompresses the firmware volume. In this temporary hack, we
+ * just pass the pointer which we got from
+ * VerifyFirmwareDriver_Stub(). */
+ switch(firmware_index) {
+ case 0:
+ *size = g_firmwareA_size;
+ fw = g_firmwareA;
+ case 1:
+ *size = g_firmwareB_size;
+ fw = g_firmwareB;
+ default:
+ /* Anything else is invalid */
+ *size = 0;
+ return NULL;
+ }
+
+ /* Need to call UpdateFirmwareBodyHash() with the firmware volume
+ * data. In this temporary hack, the FV is already decompressed, so
+ * we pass in the entire volume at once. In a real implementation,
+ * you should call this as the FV is being decompressed. */
+ UpdateFirmwareBodyHash(fw, *size);
+
+ /* Return the firmware body pointer */
+ return fw;
+}
+
+
+/* Where you're currently calling VerifyFirmwareDriver_f(), call this
+ * function instead. Because you still need to read in both firmware
+ * volumes, this call will still be slow. Once we reach feature
+ * complete, you should modify your code to call LoadImage()
+ * directly. */
+int VerifyFirmwareDriver_stub(uint8_t* root_key_blob,
+ uint8_t* verification_headerA,
+ uint8_t* firmwareA,
+ uint8_t* verification_headerB,
+ uint8_t* firmwareB) {
+
+ int rv;
+
+ /* Copy the firmware volume pointers to our global variables. */
+ g_firmwareA = firmwareA;
+ g_firmwareB = firmwareB;
+
+ /* TODO: YOU NEED TO PASS IN THE FIRMWARE VOLUME SIZES SOMEHOW */
+ g_firmwareA_size = 0;
+ g_firmwareB_size = 0;
+
+ /* Set up the params for LoadFirmware() */
+ LoadFirmwareParams p;
+ p.firmware_root_key_blob = root_key_blob;
+ p.verification_block_0 = verification_headerA;
+ p.verification_block_1 = verification_headerB;
+
+ /* Call LoadFirmware() */
+ rv = LoadFirmware(&p);
+ if (LOAD_FIRMWARE_SUCCESS == rv) {
+ /* TODO: YOU NEED TO KEEP TRACK OF p.kernel_sign_key_blob AND
+ * p.kernel_sign_key_size SO YOU CAN PASS THEM TO LoadKernel(). */
+
+ return (0 == p.firmware_index ? BOOT_FIRMWARE_A_CONTINUE :
+ BOOT_FIRMWARE_B_CONTINUE);
+
+ } else {
+ /* Error */
+ return BOOT_FIRMWARE_RECOVERY_CONTINUE;
+ }
+}
« no previous file with comments | « vboot_firmware/Makefile ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698