summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/fw_context.h2
-rw-r--r--utils/fwparam_ibft/fwparam_sysfs.c24
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)