Add crossystem fwupdate_tries and fix nv storage writes

Change-Id: I1835f4867de80aa3764e4a4c6d90b3fde2dc4308

R=reinauer@chromium.org
BUG=chromium_os:13672
TEST=manual

crossystem kern_nv=3
crossystem fwupdate_tries   # should print 3
crossystem fwupdate_tries=15
crossystem kern_nv          # should print 0x0000000F
crossystem kern_nv=0
crossystem fwupdate_tries   # should print 0

Review URL: http://codereview.chromium.org/6813056
This commit is contained in:
Randall Spangler
2011-04-08 14:04:21 -07:00
parent 824906b9db
commit d7728233dd
2 changed files with 18 additions and 1 deletions

View File

@@ -41,6 +41,10 @@ typedef enum VdatIntField {
} VdatIntField;
/* Masks for kern_nv usage by kernel */
#define KERN_NV_FWUPDATE_TRIES_MASK 0x0000000F
/* Return true if the FWID starts with the specified string. */
int FwidStartsWith(const char *start) {
char fwid[128];
@@ -93,7 +97,7 @@ int VbSetNvStorage(VbNvParam param, int value) {
goto VbSetNvCleanup;
if (vnc.raw_changed) {
if (0 != VbReadNvStorage(&vnc))
if (0 != VbWriteNvStorage(&vnc))
goto VbSetNvCleanup;
}
@@ -351,6 +355,10 @@ int VbGetSystemPropertyInt(const char* name) {
value = VbGetNvStorage(VBNV_DEBUG_RESET_MODE);
} else if (!strcasecmp(name,"fwb_tries")) {
value = VbGetNvStorage(VBNV_TRY_B_COUNT);
} else if (!strcasecmp(name,"fwupdate_tries")) {
value = VbGetNvStorage(VBNV_KERNEL_FIELD);
if (value != -1)
value &= KERN_NV_FWUPDATE_TRIES_MASK;
}
/* Other parameters */
else if (!strcasecmp(name,"cros_debug")) {
@@ -397,6 +405,7 @@ const char* VbGetSystemPropertyString(const char* name, char* dest, int size) {
int VbSetSystemPropertyInt(const char* name, int value) {
/* Check architecture-dependent properties first */
if (0 == VbSetArchPropertyInt(name, value))
return 0;
@@ -416,6 +425,13 @@ int VbSetSystemPropertyInt(const char* name, int value) {
return VbSetNvStorage(VBNV_DEBUG_RESET_MODE, value);
} else if (!strcasecmp(name,"fwb_tries")) {
return VbSetNvStorage(VBNV_TRY_B_COUNT, value);
} else if (!strcasecmp(name,"fwupdate_tries")) {
int kern_nv = VbGetNvStorage(VBNV_KERNEL_FIELD);
if (kern_nv == -1)
return -1;
kern_nv &= ~KERN_NV_FWUPDATE_TRIES_MASK;
kern_nv |= (value & KERN_NV_FWUPDATE_TRIES_MASK);
return VbSetNvStorage(VBNV_KERNEL_FIELD, kern_nv);
}
return -1;

View File

@@ -62,6 +62,7 @@ const Param sys_param_list[] = {
{"recovery_request", CAN_WRITE, "Recovery mode request (writable)"},
{"dbg_reset", CAN_WRITE, "Debug reset mode request (writable)"},
{"fwb_tries", CAN_WRITE, "Try firmware B count (writable)"},
{"fwupdate_tries", CAN_WRITE, "Times to try OS firmware update (writable)"},
{"vbtest_errfunc", CAN_WRITE, "Verified boot test error function (writable)"},
{"vbtest_errno", CAN_WRITE, "Verified boot test error number (writable)"},
/* Fields not shown in a print-all list */