OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 2 * Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 * | 5 * |
6 * Alternatively, this software may be distributed under the terms of the | 6 * Alternatively, this software may be distributed under the terms of the |
7 * GNU General Public License ("GPL") version 2 as published by the Free | 7 * GNU General Public License ("GPL") version 2 as published by the Free |
8 * Software Foundation. | 8 * Software Foundation. |
9 */ | 9 */ |
10 | 10 |
(...skipping 16 matching lines...) Expand all Loading... |
27 if (return_code != 0) \ | 27 if (return_code != 0) \ |
28 printf(PREFIX "%s failed, returning %d\n", \ | 28 printf(PREFIX "%s failed, returning %d\n", \ |
29 #action, return_code); \ | 29 #action, return_code); \ |
30 } while (0) | 30 } while (0) |
31 | 31 |
32 #define FIRMWARE_RECOVERY 0 | 32 #define FIRMWARE_RECOVERY 0 |
33 #define FIRMWARE_A 1 | 33 #define FIRMWARE_A 1 |
34 #define FIRMWARE_B 2 | 34 #define FIRMWARE_B 2 |
35 | 35 |
36 /* | 36 /* |
37 * Read <count> bytes, starting from <offset>, from firmware storage | |
38 * device <file> into buffer <buf>. | |
39 * | |
40 * Return 0 on success, non-zero on error. | |
41 */ | |
42 int read_firmware_device(firmware_storage_t *file, off_t offset, void *buf, | |
43 size_t count) | |
44 { | |
45 ssize_t size; | |
46 | |
47 if (file->seek(file->context, offset, SEEK_SET) < 0) { | |
48 debug(PREFIX "seek to address 0x%08x fail\n", offset); | |
49 return -1; | |
50 } | |
51 | |
52 size = 0; | |
53 while (count > 0 && | |
54 (size = file->read(file->context, buf, count)) > 0) { | |
55 count -= size; | |
56 buf += size; | |
57 } | |
58 | |
59 if (size < 0) { | |
60 debug(PREFIX "an error occur when read firmware: %d\n", size); | |
61 return -1; | |
62 } | |
63 | |
64 if (count > 0) { | |
65 debug(PREFIX "cannot read all data: %d\n", count); | |
66 return -1; | |
67 } | |
68 | |
69 return 0; | |
70 } | |
71 | |
72 /* | |
73 * Read verification block on <vblock_offset> from <file>. | 37 * Read verification block on <vblock_offset> from <file>. |
74 * | 38 * |
75 * The pointer to verification block is stored in <vblock_ptr>, and the size of | 39 * The pointer to verification block is stored in <vblock_ptr>, and the size of |
76 * the block is stored in <vblock_size_ptr>. | 40 * the block is stored in <vblock_size_ptr>. |
77 * | 41 * |
78 * On success, the space for storing verification block is malloc()'ed, and has | 42 * On success, the space for storing verification block is malloc()'ed, and has |
79 * to be free()'ed by the caller. | 43 * to be free()'ed by the caller. |
80 * | 44 * |
81 * Return 0 if success, non-zero if fail. | 45 * Return 0 if success, non-zero if fail. |
82 */ | 46 */ |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 firmware_data = malloc(CONFIG_LENGTH_RECOVERY); | 331 firmware_data = malloc(CONFIG_LENGTH_RECOVERY); |
368 WARN_ON_FAILURE(load_firmware_data(firmware_data)); | 332 WARN_ON_FAILURE(load_firmware_data(firmware_data)); |
369 jump_to_firmware((void (*)(void)) firmware_data); | 333 jump_to_firmware((void (*)(void)) firmware_data); |
370 | 334 |
371 debug(PREFIX "error: should never reach here!\n"); | 335 debug(PREFIX "error: should never reach here!\n"); |
372 return 1; | 336 return 1; |
373 } | 337 } |
374 | 338 |
375 U_BOOT_CMD(cros_bootstub, 1, 1, do_cros_bootstub, "verified boot stub firmware", | 339 U_BOOT_CMD(cros_bootstub, 1, 1, do_cros_bootstub, "verified boot stub firmware", |
376 NULL); | 340 NULL); |
OLD | NEW |