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

Side by Side Diff: firmware/stub/load_firmware_stub.c

Issue 6626045: Pass VbSharedData between LoadFirmware() and LoadKernel() (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/vboot_reference.git@master
Patch Set: Fixes from code review. Created 9 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « firmware/linktest/main.c ('k') | utility/load_firmware_test.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 /* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be 2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file. 3 * found in the LICENSE file.
4 * 4 *
5 * TEMPORARY stub for calling LoadFirmware() which looks like the old 5 * TEMPORARY stub for calling LoadFirmware() which looks like the old
6 * VerifyFirmwareDriver_f() call. 6 * VerifyFirmwareDriver_f() call.
7 * (Firmware portion) 7 * (Firmware portion)
8 */ 8 */
9 9
10 #include "load_firmware_fw.h" 10 #include "load_firmware_fw.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 /* Success */ 56 /* Success */
57 return 0; 57 return 0;
58 } 58 }
59 59
60 60
61 /* Where you're currently calling VerifyFirmwareDriver_f(), call this 61 /* Where you're currently calling VerifyFirmwareDriver_f(), call this
62 * function instead. Because you still need to read in both firmware 62 * function instead. Because you still need to read in both firmware
63 * volumes, this call will still be slow. Once we reach feature 63 * volumes, this call will still be slow. Once we reach feature
64 * complete, you should modify your code to call LoadImage() 64 * complete, you should modify your code to call LoadImage()
65 * directly. */ 65 * directly. */
66 int VerifyFirmwareDriver_stub(uint8_t* root_key_blob, 66 int VerifyFirmwareDriver_stub(uint8_t* gbb_data,
67 uint64_t gbb_size,
67 uint8_t* verification_headerA, 68 uint8_t* verification_headerA,
68 uint8_t* firmwareA, 69 uint8_t* firmwareA,
69 uint8_t* verification_headerB, 70 uint8_t* verification_headerB,
70 uint8_t* firmwareB) { 71 uint8_t* firmwareB) {
71 72
72 int rv; 73 int rv;
73 74
74 CallerInternal ci; 75 CallerInternal ci;
75 LoadFirmwareParams p; 76 LoadFirmwareParams p;
76 VbNvContext vnc; 77 VbNvContext vnc;
77 78
78 /* TODO: YOU SHOULD CALL LoadFirmwareSetup() AS SOON AS THE TPM 79 /* TODO: YOU SHOULD CALL LoadFirmwareSetup() AS SOON AS THE TPM
79 * INTERFACE IS AVAILABLE */ 80 * INTERFACE IS AVAILABLE */
80 LoadFirmwareSetup(); 81 LoadFirmwareSetup();
81 82
82 /* Copy the firmware volume pointers to our global variables. */ 83 /* Copy the firmware volume pointers to our global variables. */
83 ci.firmwareA = firmwareA; 84 ci.firmwareA = firmwareA;
84 ci.firmwareB = firmwareB; 85 ci.firmwareB = firmwareB;
85 86
86 /* TODO: YOU NEED TO PASS IN THE FIRMWARE VOLUME SIZES SOMEHOW */ 87 /* TODO: YOU NEED TO PASS IN THE FIRMWARE VOLUME SIZES SOMEHOW */
87 ci.firmwareA_size = 0; 88 ci.firmwareA_size = 0;
88 ci.firmwareB_size = 0; 89 ci.firmwareB_size = 0;
89 90
90 /* TODO: YOU NEED TO LOAD vnc.raw[] FROM NON-VOLATILE STORAGE */ 91 /* TODO: YOU NEED TO LOAD vnc.raw[] FROM NON-VOLATILE STORAGE */
91 92
92 /* Set up the params for LoadFirmware() */ 93 /* Set up the params for LoadFirmware() */
93 p.caller_internal = &ci; 94 p.caller_internal = &ci;
94 p.firmware_root_key_blob = root_key_blob; 95 p.gbb_data = gbb_data;
96 p.gbb_size = gbb_size;
95 p.verification_block_0 = verification_headerA; 97 p.verification_block_0 = verification_headerA;
96 p.verification_block_1 = verification_headerB; 98 p.verification_block_1 = verification_headerB;
97 p.nv_context = &vnc; 99 p.nv_context = &vnc;
98 100
99 /* Allocate a key blob buffer */ 101 /* Allocate a shared data buffer */
100 p.kernel_sign_key_blob = Malloc(LOAD_FIRMWARE_KEY_BLOB_REC_SIZE); 102 p.shared_data_blob = Malloc(LOAD_FIRMWARE_SHARED_DATA_REC_SIZE);
101 p.kernel_sign_key_size = LOAD_FIRMWARE_KEY_BLOB_REC_SIZE; 103 p.shared_data_size = LOAD_FIRMWARE_SHARED_DATA_REC_SIZE;
102 104
103 /* TODO: YOU NEED TO SET THE BOOT FLAGS SOMEHOW */ 105 /* TODO: YOU NEED TO SET THE BOOT FLAGS SOMEHOW */
104 p.boot_flags = 0; 106 p.boot_flags = 0;
105 107
106 /* Call LoadFirmware() */ 108 /* Call LoadFirmware() */
107 rv = LoadFirmware(&p); 109 rv = LoadFirmware(&p);
108 110
109 if (vnc.raw_changed) { 111 if (vnc.raw_changed) {
110 /* TODO: YOU NEED TO SAVE vnc.raw TO NON-VOLATILE STORAGE */ 112 /* TODO: YOU NEED TO SAVE vnc.raw TO NON-VOLATILE STORAGE */
111 } 113 }
112 114
113 if (LOAD_FIRMWARE_SUCCESS == rv) { 115 if (LOAD_FIRMWARE_SUCCESS == rv) {
114 /* TODO: YOU NEED TO KEEP TRACK OF p.kernel_sign_key_blob AND 116 /* TODO: YOU NEED TO KEEP TRACK OF p.shared_data_blob AND
115 * p.kernel_sign_key_size SO YOU CAN PASS THEM TO LoadKernel(). */ 117 * p.shared_data_size SO YOU CAN PASS THEM TO LoadKernel(). */
116 118
117 return (0 == p.firmware_index ? BOOT_FIRMWARE_A_CONTINUE : 119 return (0 == p.firmware_index ? BOOT_FIRMWARE_A_CONTINUE :
118 BOOT_FIRMWARE_B_CONTINUE); 120 BOOT_FIRMWARE_B_CONTINUE);
119 121
120 } else { 122 } else {
121 /* Error */ 123 /* Error */
122 return BOOT_FIRMWARE_RECOVERY_CONTINUE; 124 return BOOT_FIRMWARE_RECOVERY_CONTINUE;
123 } 125 }
124 } 126 }
OLDNEW
« no previous file with comments | « firmware/linktest/main.c ('k') | utility/load_firmware_test.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698