Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 138fe4e0 authored by Konrad Rzeszutek's avatar Konrad Rzeszutek Committed by Greg Kroah-Hartman
Browse files

Firmware: add iSCSI iBFT Support

Add /sysfs/firmware/ibft/[initiator|targetX|ethernetX] directories along with
text properties which export the the iSCSI Boot Firmware Table (iBFT)
structure.

What is iSCSI Boot Firmware Table?  It is a mechanism for the iSCSI tools to
extract from the machine NICs the iSCSI connection information so that they
can automagically mount the iSCSI share/target.  Currently the iSCSI
information is hard-coded in the initrd.  The /sysfs entries are read-only
one-name-and-value fields.

The usual set of data exposed is:

# for a in `find /sys/firmware/ibft/ -type f -print`; do  echo -n "$a: ";  cat $a; done
/sys/firmware/ibft/target0/target-name: iqn.2007.com.intel-sbx44:storage-10gb
/sys/firmware/ibft/target0/nic-assoc: 0
/sys/firmware/ibft/target0/chap-type: 0
/sys/firmware/ibft/target0/lun: 00000000
/sys/firmware/ibft/target0/port: 3260
/sys/firmware/ibft/target0/ip-addr: 192.168.79.116
/sys/firmware/ibft/target0/flags: 3
/sys/firmware/ibft/target0/index: 0
/sys/firmware/ibft/ethernet0/mac: 00:11:25:9d:8b:01
/sys/firmware/ibft/ethernet0/vlan: 0
/sys/firmware/ibft/ethernet0/gateway: 192.168.79.254
/sys/firmware/ibft/ethernet0/origin: 0
/sys/firmware/ibft/ethernet0/subnet-mask: 255.255.252.0
/sys/firmware/ibft/ethernet0/ip-addr: 192.168.77.41
/sys/firmware/ibft/ethernet0/flags: 7
/sys/firmware/ibft/ethernet0/index: 0
/sys/firmware/ibft/initiator/initiator-name: iqn.2007-07.com:konrad.initiator
/sys/firmware/ibft/initiator/flags: 3
/sys/firmware/ibft/initiator/index: 0

For full details of the IBFT structure please take a look at:
ftp://ftp.software.ibm.com/systems/support/system_x_pdf/ibm_iscsi_boot_firmware_table_v1.02.pdf



[akpm@linux-foundation.org: fix build]
Signed-off-by: default avatarKonrad Rzeszutek <konradr@linux.vnet.ibm.com>
Cc: Mike Christie <michaelc@cs.wisc.edu>
Cc: Peter Jones <pjones@redhat.com>
Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 95bc6a10
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
What:		/sys/firmware/ibft/initiator
Date:		November 2007
Contact:	Konrad Rzeszutek <ketuzsezr@darnok.org>
Description:	The /sys/firmware/ibft/initiator directory will contain
		files that expose the iSCSI Boot Firmware Table initiator data.
		Usually this contains the Initiator name.

What:		/sys/firmware/ibft/targetX
Date:		November 2007
Contact:	Konrad Rzeszutek <ketuzsezr@darnok.org>
Description:	The /sys/firmware/ibft/targetX directory will contain
		files that expose the iSCSI Boot Firmware Table target data.
		Usually this contains the target's IP address, boot LUN,
		target name, and what NIC it is associated with. It can also
		contain the CHAP name (and password), the reverse CHAP
		name (and password)

What:		/sys/firmware/ibft/ethernetX
Date:		November 2007
Contact:	Konrad Rzeszutek <ketuzsezr@darnok.org>
Description:	The /sys/firmware/ibft/ethernetX directory will contain
		files that expose the iSCSI Boot Firmware Table NIC data.
		This can this can the IP address, MAC, and gateway of the NIC.
+3 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@
#include <linux/efi.h>
#include <linux/init.h>
#include <linux/edd.h>
#include <linux/iscsi_ibft.h>
#include <linux/nodemask.h>
#include <linux/kexec.h>
#include <linux/crash_dump.h>
@@ -689,6 +690,8 @@ void __init setup_bootmem_allocator(void)
#endif
	numa_kva_reserve();
	reserve_crashkernel();

	reserve_ibft_region();
}

/*
+4 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@
#include <linux/acpi.h>
#include <linux/kallsyms.h>
#include <linux/edd.h>
#include <linux/iscsi_ibft.h>
#include <linux/mmzone.h>
#include <linux/kexec.h>
#include <linux/cpufreq.h>
@@ -434,6 +435,9 @@ void __init setup_arch(char **cmdline_p)
	}
#endif
	reserve_crashkernel();

	reserve_ibft_region();

	paging_init();
	map_vsyscall();

+20 −0
Original line number Diff line number Diff line
@@ -93,4 +93,24 @@ config DMIID
	  information from userspace through /sys/class/dmi/id/ or if you want
	  DMI-based module auto-loading.

config ISCSI_IBFT_FIND
	bool "iSCSI Boot Firmware Table Attributes"
	depends on X86
	default n
	help
	  This option enables the kernel to find the region of memory
	  in which the ISCSI Boot Firmware Table (iBFT) resides. This
	  is necessary for iSCSI Boot Firmware Table Attributes module to work
	  properly.

config ISCSI_IBFT
	tristate "iSCSI Boot Firmware Table Attributes module"
	depends on ISCSI_IBFT_FIND
	default	n
	help
	  This option enables support for detection and exposing of iSCSI
	  Boot Firmware Table (iBFT) via sysfs to userspace. If you wish to
	  detect iSCSI boot parameters dynamically during system boot, say Y.
	  Otherwise, say N.

endmenu
+2 −0
Original line number Diff line number Diff line
@@ -8,3 +8,5 @@ obj-$(CONFIG_EFI_PCDP) += pcdp.o
obj-$(CONFIG_DELL_RBU)          += dell_rbu.o
obj-$(CONFIG_DCDBAS)		+= dcdbas.o
obj-$(CONFIG_DMIID)		+= dmi-id.o
obj-$(CONFIG_ISCSI_IBFT_FIND)	+= iscsi_ibft_find.o
obj-$(CONFIG_ISCSI_IBFT)	+= iscsi_ibft.o
Loading