1 /* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
2  * Use of this source code is governed by a BSD-style license that can be
3  * found in the LICENSE file.
4  *
5  * Architecture-specific APIs for crossystem
6  */
7 
8 #ifndef VBOOT_REFERENCE_CROSSYSTEM_ARCH_H_
9 #define VBOOT_REFERENCE_CROSSYSTEM_ARCH_H_
10 
11 #include <stddef.h>
12 
13 #include "vboot_nvstorage.h"
14 #include "vboot_struct.h"
15 
16 /* Firmware types from BINF.3. Placed in the common file because both x86 and
17  * arm use this. The constants are defined in "Chrome OS Main Processor
18  * Firmware Spec"
19  */
20 #define BINF3_RECOVERY   0
21 #define BINF3_NORMAL     1
22 #define BINF3_DEVELOPER  2
23 #define BINF3_NETBOOT    3
24 
25 
26 /* INTERNAL APIS FOR CROSSYSTEM AVAILABLE TO ARCH-SPECIFIC FUNCTIONS */
27 
28 /* Read an integer property from VbNvStorage.
29  *
30  * Returns the parameter value, or -1 if error. */
31 int VbGetNvStorage(VbNvParam param);
32 
33 /* Write an integer property to VbNvStorage.
34  *
35  * Returns 0 if success, -1 if error. */
36 int VbSetNvStorage(VbNvParam param, int value);
37 
38 /* Return true if the FWID starts with the specified string. */
39 int FwidStartsWith(const char *start);
40 
41 /* Return version of VbSharedData struct or -1 if not found. */
42 int VbSharedDataVersion(void);
43 
44 /* Apis WITH ARCH-SPECIFIC IMPLEMENTATIONS */
45 
46 /* Read the non-volatile context from NVRAM.
47  *
48  * Returns 0 if success, -1 if error. */
49 int VbReadNvStorage(VbNvContext* vnc);
50 
51 /* Write the non-volatile context to NVRAM.
52  *
53  * Returns 0 if success, -1 if error. */
54 int VbWriteNvStorage(VbNvContext* vnc);
55 
56 /* Read the VbSharedData buffer.
57  *
58  * Verifies the buffer contains at least enough data for the
59  * VbSharedDataHeader; if not, this is an error.
60  *
61  * If less data is read than expected, sets the returned structure's data_size
62  * to the actual amount of data read.  If this is less than data_used, then
63  * some data was not returned; callers must handle this; this is not considered
64  * an error.
65  *
66  * Returns the data buffer, which must be freed by the caller using
67  * free(), or NULL if error. */
68 VbSharedDataHeader* VbSharedDataRead(void);
69 
70 /* Read an architecture-specific system property integer.
71  *
72  * Returns the property value, or -1 if error. */
73 int VbGetArchPropertyInt(const char* name);
74 
75 /* Read an architecture-specific system property string into a
76  * destination buffer of the specified size.  Returned string will be
77  * null-terminated.  If the buffer is too small, the returned string
78  * will be truncated.
79  *
80  * Returns the passed buffer, or NULL if error. */
81 const char* VbGetArchPropertyString(const char* name, char* dest, size_t size);
82 
83 /* Set an architecture-specific system property integer.
84  *
85  * Returns 0 if success, -1 if error. */
86 int VbSetArchPropertyInt(const char* name, int value);
87 
88 /* Set an architecture-specific system property string.
89  *
90  * Returns 0 if success, -1 if error. */
91 int VbSetArchPropertyString(const char* name, const char* value);
92 
93 #endif  /* VBOOT_REFERENCE__CROSSYSTEM_ARCH_H_ */
94