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

Side by Side Diff: firmware/lib/include/rollback_index.h

Issue 2869022: New rollback_index API. (Closed) Base URL: ssh://git@chromiumos-git/vboot_reference.git
Patch Set: small API change Created 10 years, 5 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
« no previous file with comments | « no previous file | firmware/lib/rollback_index.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 * Functions for querying, manipulating and locking rollback indices 5 * Functions for querying, manipulating and locking rollback indices
6 * stored in the TPM NVRAM. 6 * stored in the TPM NVRAM.
7 */ 7 */
8 8
9 #ifndef VBOOT_REFERENCE_ROLLBACK_INDEX_H_ 9 #ifndef VBOOT_REFERENCE_ROLLBACK_INDEX_H_
10 #define VBOOT_REFERENCE_ROLLBACK_INDEX_H_ 10 #define VBOOT_REFERENCE_ROLLBACK_INDEX_H_
11 11
12 #include "sysincludes.h" 12 #include "sysincludes.h"
13 13
14 /* TODO: global variables won't work in the boot stub, since it runs
15 directly out of ROM. */
16 extern uint16_t g_firmware_key_version;
17 extern uint16_t g_firmware_version;
18 extern uint16_t g_kernel_key_version;
19 extern uint16_t g_kernel_version;
20
21 /* Rollback version types. */ 14 /* Rollback version types. */
22 #define FIRMWARE_VERSIONS 0 15 #define FIRMWARE_VERSIONS 0
23 #define KERNEL_VERSIONS 1 16 #define KERNEL_VERSIONS 1
24 17
25 /* Initialization mode */ 18 /* Initialization mode */
26 #define RO_RECOVERY_MODE 0 19 #define RO_RECOVERY_MODE 0
27 #define RO_NORMAL_MODE 1 20 #define RO_NORMAL_MODE 1
28 #define RW_NORMAL_MODE 2 21 #define RW_NORMAL_MODE 2
29 22
30 /* TPM NVRAM location indices. */ 23 /* TPM NVRAM location indices. */
31 #define FIRMWARE_VERSIONS_NV_INDEX 0x1001 24 #define FIRMWARE_VERSIONS_NV_INDEX 0x1001
32 #define KERNEL_VERSIONS_NV_INDEX 0x1002 25 #define KERNEL_VERSIONS_NV_INDEX 0x1002
33 #define TPM_IS_INITIALIZED_NV_INDEX 0x1003 26 #define TPM_IS_INITIALIZED_NV_INDEX 0x1003
34 #define KERNEL_VERSIONS_BACKUP_NV_INDEX 0x1004 27 #define KERNEL_VERSIONS_BACKUP_NV_INDEX 0x1004
35 #define KERNEL_MUST_USE_BACKUP_NV_INDEX 0x1005 28 #define KERNEL_MUST_USE_BACKUP_NV_INDEX 0x1005
36 #define DEVELOPER_MODE_NV_INDEX 0x1006 29 #define DEVELOPER_MODE_NV_INDEX 0x1006
37 30
38 /* Unique ID to detect kernel space redefinition */ 31 /* Unique ID to detect kernel space redefinition */
39 #define KERNEL_SPACE_UID "GRWL" /* unique ID with secret meaning */ 32 #define KERNEL_SPACE_UID "GRWL" /* unique ID with secret meaning */
40 #define KERNEL_SPACE_UID_SIZE (sizeof(KERNEL_SPACE_UID) - 1) 33 #define KERNEL_SPACE_UID_SIZE (sizeof(KERNEL_SPACE_UID) - 1)
41 #define KERNEL_SPACE_INIT_DATA ((uint8_t*) "\0\0\0\0" KERNEL_SPACE_UID) 34 #define KERNEL_SPACE_INIT_DATA ((uint8_t*) "\0\0\0\0" KERNEL_SPACE_UID)
42 #define KERNEL_SPACE_SIZE (sizeof(uint32_t) + KERNEL_SPACE_UID_SIZE) 35 #define KERNEL_SPACE_SIZE (sizeof(uint32_t) + KERNEL_SPACE_UID_SIZE)
43 36
44 /* All functions return TPM_SUCCESS (zero) if successful, non-zero if error */ 37 /* All functions return TPM_SUCCESS (zero) if successful, non-zero if error */
45 38
46
47 /* 39 /*
48 40
49 Call from LoadFirmware() 41 Call from LoadFirmware()
50 Normal or developer mode (not recovery) 42 Normal or developer mode (not recovery)
51 Wants firmware versions 43 Wants firmware versions
52 Must send in developer flag 44 Must send in developer flag
53 45
54 RollbackFirmwareSetup(IN devmode, OUT firmware versions) 46 RollbackFirmwareSetup(IN devmode)
47 (maybe) RollbackFirmwareRead()
55 (maybe) RollbackFirmwareWrite() 48 (maybe) RollbackFirmwareWrite()
56 RollbackFirmwareLock() 49 RollbackFirmwareLock()
57 50
58 Call from LoadKernel() 51 Call from LoadKernel()
59 52
60 RollbackKernelRecovery(IN devmode) 53 RollbackKernelRecovery(IN devmode)
61 (implies LockFirmwareVersions() inside the setup) 54 (implies LockFirmwareVersions() inside the setup)
62 55
63 RollbackKernelRead(OUT kernel versions) 56 RollbackKernelRead(OUT kernel versions)
64 (maybe) RollbackKernelWrite() 57 (maybe) RollbackKernelWrite()
65 RollbackKernelLock() 58 RollbackKernelLock()
66 59
67 Any mode 60 Any mode
68 If recovery mode, this is the first time we've been called 61 If recovery mode, this is the first time we've been called
69 Must send in developer flag 62 Must send in developer flag
70 If not recovery mode, wants kernel versions 63 If not recovery mode, wants kernel versions
71 Must send in developer and recovery flags 64 Must send in developer and recovery flags
72 */ 65 */
73 66
74 /* These functions are callable from LoadFirmware(). They cannot use 67 /* These functions are callable from LoadFirmware(). They cannot use
75 * global variables. */ 68 * global variables. */
69
76 /* Setup must be called. Pass developer_mode=nonzero if in developer 70 /* Setup must be called. Pass developer_mode=nonzero if in developer
77 * mode. */ 71 * mode. */
78 uint32_t RollbackFirmwareSetup(int developer_mode, 72 uint32_t RollbackFirmwareSetup(int developer_mode);
79 uint16_t* key_version, uint16_t* version); 73 /* Read and Write may be called after Setup. */
74 uint32_t RollbackFirmwareRead(uint16_t* key_version, uint16_t* version);
80 /* Write may be called if the versions change */ 75 /* Write may be called if the versions change */
81 uint32_t RollbackFirmwareWrite(uint16_t key_version, uint16_t version); 76 uint32_t RollbackFirmwareWrite(uint16_t key_version, uint16_t version);
77
82 /* Lock must be called */ 78 /* Lock must be called */
83 uint32_t RollbackFirmwareLock(void); 79 uint32_t RollbackFirmwareLock(void);
84 80
85 /* These functions are callable from LoadKernel(). They may use global 81 /* These functions are callable from LoadKernel(). They may use global
86 * variables. */ 82 * variables. */
83
87 /* Recovery may be called. If it is, this is the first time a 84 /* Recovery may be called. If it is, this is the first time a
88 * rollback function has been called this boot, so it needs to know if 85 * rollback function has been called this boot, so it needs to know if
89 * we're in developer mode. Pass developer_mode=nonzero if in developer 86 * we're in developer mode. Pass developer_mode=nonzero if in developer
90 * mode. */ 87 * mode. */
91 uint32_t RollbackKernelRecovery(int developer_mode); 88 uint32_t RollbackKernelRecovery(int developer_mode);
89
92 /* Read and write may be called if not in developer mode. If called in 90 /* Read and write may be called if not in developer mode. If called in
93 * recovery mode, these are ignored and/or return 0 versions. */ 91 * recovery mode, the effect is undefined. */
94 uint32_t RollbackKernelRead(uint16_t* key_version, uint16_t* version); 92 uint32_t RollbackKernelRead(uint16_t* key_version, uint16_t* version);
95 uint32_t RollbackKernelWrite(uint16_t key_version, uint16_t version); 93 uint32_t RollbackKernelWrite(uint16_t key_version, uint16_t version);
94
96 /* Lock must be called. Internally, it's ignored in recovery mode. */ 95 /* Lock must be called. Internally, it's ignored in recovery mode. */
97 uint32_t RollbackKernelLock(void); 96 uint32_t RollbackKernelLock(void);
98 97
99
100 /* SetupTPM is called on boot and on starting the RW firmware, passing the
101 * appripriate MODE and DEVELOPER_FLAG parameters. MODE can be one of
102 * RO_RECOVERY_MODE, RO_NORMAL_MODE, RW_NORMAL_MODE. DEVELOPER_FLAG is 1 when
103 * the developer switch is ON, 0 otherwise.
104 *
105 * If SetupTPM returns TPM_SUCCESS, the caller may proceed. If it returns
106 * TPM_E_MUST_REBOOT, the caller must reboot in the current mode. For all
107 * other return values, the caller must reboot in recovery mode.
108 *
109 * This function has many side effects on the TPM state. In particular, when
110 * called with mode = RECOVERY_MODE, it locks the firmware versions before
111 * returning. In all other cases, the caller is responsible for locking the
112 * firmware versions once it decides it doesn't need to update them.
113 */
114 uint32_t SetupTPM(int mode, int developer_flag);
115 uint32_t GetStoredVersions(int type, uint16_t* key_version, uint16_t* version);
116 uint32_t WriteStoredVersions(int type, uint16_t key_version, uint16_t version);
117 uint32_t LockFirmwareVersions(void);
118 uint32_t LockKernelVersionsByLockingPP(void);
119
120 #endif /* VBOOT_REFERENCE_ROLLBACK_INDEX_H_ */ 98 #endif /* VBOOT_REFERENCE_ROLLBACK_INDEX_H_ */
OLDNEW
« no previous file with comments | « no previous file | firmware/lib/rollback_index.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698