diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-18 15:30:04 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-05-18 15:30:04 -0700 |
commit | d974f09ea4970d0299a8267111312b80adbd20e6 (patch) | |
tree | 2b8874872d0fb1fd5e1f5addc343ec29cc98b3cd /drivers/scsi | |
parent | 4a5219edcdae52bfb5eea0dfc2a7bd575961dad7 (diff) | |
parent | b3c8eb50383178f3a4dcf1dc867001156da6473d (diff) | |
download | linux-d974f09ea4970d0299a8267111312b80adbd20e6.tar.bz2 |
Merge branch 'stable/for-linus-4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/ibft
Pull iscsi_ibft updates from Konrad Rzeszutek Wilk:
"The pull has two features - both of them expand the SysFS entries:
- 'prefix-len' - which is subnet_mask_prefix of the iBFT header.
- 'acpi_header' dir with: 'iBFT', OEM-ID (whatever it extracts from
the iBFT header) and OEM_TABLE_ID (also whatever it extracts from
the iBFT header). This is to help NIC drivers to figure out during
bootup how to deal with BIOS created iBFT tables (like by TianoCore
UEFI implemenation)"
* 'stable/for-linus-4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/ibft:
ibft: Expose iBFT acpi header via sysfs
iscsi_ibft: Add prefix-len attr and display netmask
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/iscsi_boot_sysfs.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/drivers/scsi/iscsi_boot_sysfs.c b/drivers/scsi/iscsi_boot_sysfs.c index 8f0ea97cf31f..d453667612f8 100644 --- a/drivers/scsi/iscsi_boot_sysfs.c +++ b/drivers/scsi/iscsi_boot_sysfs.c @@ -306,6 +306,42 @@ static struct attribute_group iscsi_boot_initiator_attr_group = { .is_visible = iscsi_boot_ini_attr_is_visible, }; +/* iBFT ACPI Table attributes */ +iscsi_boot_rd_attr(acpitbl_signature, signature, ISCSI_BOOT_ACPITBL_SIGNATURE); +iscsi_boot_rd_attr(acpitbl_oem_id, oem_id, ISCSI_BOOT_ACPITBL_OEM_ID); +iscsi_boot_rd_attr(acpitbl_oem_table_id, oem_table_id, + ISCSI_BOOT_ACPITBL_OEM_TABLE_ID); + +static struct attribute *acpitbl_attrs[] = { + &iscsi_boot_attr_acpitbl_signature.attr, + &iscsi_boot_attr_acpitbl_oem_id.attr, + &iscsi_boot_attr_acpitbl_oem_table_id.attr, + NULL +}; + +static umode_t iscsi_boot_acpitbl_attr_is_visible(struct kobject *kobj, + struct attribute *attr, int i) +{ + struct iscsi_boot_kobj *boot_kobj = + container_of(kobj, struct iscsi_boot_kobj, kobj); + + if (attr == &iscsi_boot_attr_acpitbl_signature.attr) + return boot_kobj->is_visible(boot_kobj->data, + ISCSI_BOOT_ACPITBL_SIGNATURE); + if (attr == &iscsi_boot_attr_acpitbl_oem_id.attr) + return boot_kobj->is_visible(boot_kobj->data, + ISCSI_BOOT_ACPITBL_OEM_ID); + if (attr == &iscsi_boot_attr_acpitbl_oem_table_id.attr) + return boot_kobj->is_visible(boot_kobj->data, + ISCSI_BOOT_ACPITBL_OEM_TABLE_ID); + return 0; +} + +static struct attribute_group iscsi_boot_acpitbl_attr_group = { + .attrs = acpitbl_attrs, + .is_visible = iscsi_boot_acpitbl_attr_is_visible, +}; + static struct iscsi_boot_kobj * iscsi_boot_create_kobj(struct iscsi_boot_kset *boot_kset, struct attribute_group *attr_group, @@ -436,6 +472,32 @@ iscsi_boot_create_ethernet(struct iscsi_boot_kset *boot_kset, int index, EXPORT_SYMBOL_GPL(iscsi_boot_create_ethernet); /** + * iscsi_boot_create_acpitbl() - create boot acpi table sysfs dir + * @boot_kset: boot kset + * @index: not used + * @data: driver specific data + * @show: attr show function + * @is_visible: attr visibility function + * @release: release function + * + * Note: The boot sysfs lib will free the data passed in for the caller + * when all refs to the acpitbl kobject have been released. + */ +struct iscsi_boot_kobj * +iscsi_boot_create_acpitbl(struct iscsi_boot_kset *boot_kset, int index, + void *data, + ssize_t (*show)(void *data, int type, char *buf), + umode_t (*is_visible)(void *data, int type), + void (*release)(void *data)) +{ + return iscsi_boot_create_kobj(boot_kset, + &iscsi_boot_acpitbl_attr_group, + "acpi_header", index, data, show, + is_visible, release); +} +EXPORT_SYMBOL_GPL(iscsi_boot_create_acpitbl); + +/** * iscsi_boot_create_kset() - creates root sysfs tree * @set_name: name of root dir */ |