diff options
-rw-r--r-- | include/fw_context.h | 2 | ||||
-rw-r--r-- | utils/fwparam_ibft/fwparam_sysfs.c | 24 |
2 files changed, 26 insertions, 0 deletions
diff --git a/include/fw_context.h b/include/fw_context.h index 6a7ec1a..44053d8 100644 --- a/include/fw_context.h +++ b/include/fw_context.h @@ -44,6 +44,7 @@ struct boot_context { char boot_target[BOOT_NAME_MAXLEN]; /* target settings */ + int target_flags; int target_port; char targetname[TARGET_NAME_MAXLEN + 1]; char target_ipaddr[NI_MAXHOST]; @@ -57,6 +58,7 @@ struct boot_context { char initiatorname[TARGET_NAME_MAXLEN + 1]; /* network settings */ + int nic_flags; enum ibft_ip_prefix_origin origin; char dhcp[NI_MAXHOST]; char iface[IF_NAMESIZE]; diff --git a/utils/fwparam_ibft/fwparam_sysfs.c b/utils/fwparam_ibft/fwparam_sysfs.c index cd87b68..c5b0b00 100644 --- a/utils/fwparam_ibft/fwparam_sysfs.c +++ b/utils/fwparam_ibft/fwparam_sysfs.c @@ -170,6 +170,18 @@ static int fill_nic_context(char *subsys, char *id, { int rc; + rc = sysfs_get_int(id, subsys, "flags", &context->nic_flags); + /* + * Per spec we would need to check against Bit 0 + * (Block Valid Flag), but some firmware only + * sets Bit 1 (Firmware Booting Selected). + * So any setting is deemed okay. + */ + if (!rc && (context->nic_flags == 0)) + rc = ENODEV; + if (rc) + return rc; + rc = sysfs_get_str(id, subsys, "mac", context->mac, sizeof(context->mac)); if (rc) @@ -236,6 +248,18 @@ static int fill_tgt_context(char *subsys, char *id, { int rc; + rc = sysfs_get_int(id, subsys, "flags", &context->target_flags); + /* + * Per spec we would need to check against Bit 0 + * (Block Valid Flag), but some firmware only + * sets Bit 1 (Firmware Booting Selected). + * So any setting is deemed okay. + */ + if (!rc && (context->nic_flags == 0)) + rc = ENODEV; + if (rc) + return rc; + rc = sysfs_get_str(id, subsys, "target-name", context->targetname, sizeof(context->targetname)); if (rc) |