What:		/sys/class/firmware-attributes/*/attributes/*/
Date:		February 2021
KernelVersion:	5.11
Contact:	Divya Bharathi <Divya.Bharathi@Dell.com>,
		Prasanth KSR <prasanth.ksr@dell.com>
		Dell.Client.Kernel@dell.com
Description:
		A sysfs interface for systems management software to enable
		configuration capability on supported systems.  This directory
		exposes interfaces for interacting with configuration options.

		Unless otherwise specified in an attribute description all attributes are optional
		and will accept UTF-8 input.

		type:
		    A file that can be read to obtain the type of attribute.
		    This attribute is mandatory.

		The following are known types:

			- enumeration: a set of pre-defined valid values
			- integer: a range of numerical values
			- string

		HP specific types
		-----------------
			- ordered-list - a set of ordered list valid values


		All attribute types support the following values:

		current_value:
				A file that can be read to obtain the current
				value of the <attr>.

				This file can also be written to in order to update the value of a
				<attr>

				This attribute is mandatory.

		default_value:
				A file that can be read to obtain the default
				value of the <attr>

		display_name:
				A file that can be read to obtain a user friendly
				description of the at <attr>

		display_name_language_code:
						A file that can be read to obtain
						the IETF language tag corresponding to the
						"display_name" of the <attr>

		"enumeration"-type specific properties:

		possible_values:
					A file that can be read to obtain the possible
					values of the <attr>. Values are separated using
					semi-colon (``;``).

		"integer"-type specific properties:

		min_value:
				A file that can be read to obtain the lower
				bound value of the <attr>

		max_value:
				A file that can be read to obtain the upper
				bound value of the <attr>

		scalar_increment:
					A file that can be read to obtain the scalar value used for
					increments of current_value this attribute accepts.

		"string"-type specific properties:

		max_length:
				A file that can be read to obtain the maximum
				length value of the <attr>

		min_length:
				A file that can be read to obtain the minimum
				length value of the <attr>

		Dell specific class extensions
		------------------------------

		On Dell systems the following additional attributes are available:

		dell_modifier:
				A file that can be read to obtain attribute-level
				dependency rule. It says an attribute X will become read-only or
				suppressed, if/if-not attribute Y is configured.

				modifier rules can be in following format::

				    [ReadOnlyIf:<attribute>=<value>]
				    [ReadOnlyIfNot:<attribute>=<value>]
				    [SuppressIf:<attribute>=<value>]
				    [SuppressIfNot:<attribute>=<value>]

				For example::

				    AutoOnFri/dell_modifier has value,
					    [SuppressIfNot:AutoOn=SelectDays]

				This means AutoOnFri will be suppressed in BIOS setup if AutoOn
				attribute is not "SelectDays" and its value will not be effective
				through sysfs until this rule is met.

		Enumeration attributes also support the following:

		dell_value_modifier:
					A file that can be read to obtain value-level dependency.
					This file is similar to dell_modifier but here,	an
					attribute's current value will be forcefully changed based
					dependent attributes value.

					dell_value_modifier rules can be in following format::

					    <value>[ForceIf:<attribute>=<value>]
					    <value>[ForceIfNot:<attribute>=<value>]

					For example::

					    LegacyOrom/dell_value_modifier has value:
						    Disabled[ForceIf:SecureBoot=Enabled]

					This means LegacyOrom's current value will be forced to
					"Disabled" in BIOS setup if SecureBoot is Enabled and its
					value will not be effective through sysfs until this rule is
					met.

		HP specific class extensions
		------------------------------

		On HP systems the following additional attributes are available:

		"ordered-list"-type specific properties:

		elements:
					A file that can be read to obtain the possible
					list of values of the <attr>. Values are separated using
					semi-colon (``;``) and listed according to their priority.
					An element listed first has the highest priority. Writing
					the list in a different order to current_value alters
					the priority order for the particular attribute.

What:		/sys/class/firmware-attributes/*/authentication/
Date:		February 2021
KernelVersion:	5.11
Contact:	Divya Bharathi <Divya.Bharathi@Dell.com>,
		Prasanth KSR <prasanth.ksr@dell.com>
		Dell.Client.Kernel@dell.com
Description:
		Devices support various authentication mechanisms which can be exposed
		as a separate configuration object.

		For example a "BIOS Admin" password and "System" Password can be set,
		reset or cleared using these attributes.

		- An "Admin" password is used for preventing modification to the BIOS
		  settings.
		- A "System" password is required to boot a machine.

		Change in any of these two authentication methods will also generate an
		uevent KOBJ_CHANGE.

		is_enabled:
					A file that can be read to obtain a 0/1 flag to see if
					<attr> authentication is enabled.
					This attribute is mandatory.

		role:
					The type of authentication used.
					This attribute is mandatory.

					Known types:
						bios-admin:
							Representing BIOS administrator password
						power-on:
							Representing a password required to use
							the system
						system-mgmt:
							Representing System Management password.
							See Lenovo extensions section for details
						HDD:
							Representing HDD password
							See Lenovo extensions section for details
						NVMe:
							Representing NVMe password
							See Lenovo extensions section for details

		mechanism:
					The means of authentication.  This attribute is mandatory.
					Only supported type currently is "password".

		max_password_length:
					A file that can be read to obtain the
					maximum length of the Password

		min_password_length:
					A file that can be read to obtain the
					minimum length of the Password

		current_password:
					A write only value used for privileged access such as
					setting	attributes when a system or admin password is set
					or resetting to a new password

					This attribute is mandatory when mechanism == "password".

		new_password:
					A write only value that when used in tandem with
					current_password will reset a system or admin password.

		Note, password management is session specific. If Admin password is set,
		same password must be written into current_password file (required for
		password-validation) and must be cleared once the session is over.
		For example::

			echo "password" > current_password
			echo "disabled" > TouchScreen/current_value
			echo "" > current_password

		Drivers may emit a CHANGE uevent when a password is set or unset
		userspace may check it again.

		On Dell, Lenovo and HP systems, if Admin password is set, then all BIOS attributes
		require password validation.
		On Lenovo systems if you change the Admin password the new password is not active until
		the next boot.

		Lenovo specific class extensions
		--------------------------------

		On Lenovo systems the following additional settings are available:

		role: system-mgmt	This gives the same authority as the bios-admin password to control
					security related features. The authorities allocated can be set via
					the BIOS menu SMP Access Control Policy

		role: HDD & NVMe	This password is used to unlock access to the drive at boot. Note see
					'level' and 'index' extensions below.

		lenovo_encoding:
					The encoding method that is used. This can be either "ascii"
					or "scancode". Default is set to "ascii"

		lenovo_kbdlang:
					The keyboard language method that is used. This is generally a
					two char code (e.g. "us", "fr", "gr") and may vary per platform.
					Default is set to "us"

		level:
					Available for HDD and NVMe authentication to set 'user' or 'master'
					privilege level.
					If only the user password is configured then this should be used to
					unlock the drive at boot. If both master and user passwords are set
					then either can be used. If a master password is set a user password
					is required.
					This attribute defaults to 'user' level

		index:
					Used with HDD and NVME authentication to set the drive index
					that is being referenced (e.g hdd1, hdd2 etc)
					This attribute defaults to device 1.

		certificate, signature, save_signature:
					These attributes are used for certificate based authentication. This is
					used in conjunction with a signing server as an alternative to password
					based authentication.
					The user writes to the attribute(s) with a BASE64 encoded string obtained
					from the signing server.
					The attributes can be displayed to check the stored value.

					Some usage examples:

						Installing a certificate to enable feature::

							echo "supervisor password" > authentication/Admin/current_password
							echo "signed certificate" > authentication/Admin/certificate

						Updating the installed certificate::

							echo "signature" > authentication/Admin/signature
							echo "signed certificate" > authentication/Admin/certificate

						Removing the installed certificate::

							echo "signature" > authentication/Admin/signature
							echo "" > authentication/Admin/certificate

						Changing a BIOS setting::

							echo "signature" > authentication/Admin/signature
							echo "save signature" > authentication/Admin/save_signature
							echo Enable > attribute/PasswordBeep/current_value

					You cannot enable certificate authentication if a supervisor password
					has not been set.
					Clearing the certificate results in no bios-admin authentication method
					being configured allowing anyone to make changes.
					After any of these operations the system must reboot for the changes to
					take effect.

		certificate_thumbprint:
					Read only attribute used to display the MD5, SHA1 and SHA256 thumbprints
					for the certificate installed in the BIOS.

		certificate_to_password:
					Write only attribute used to switch from certificate based authentication
					back to password based.
					Usage::

						echo "signature" > authentication/Admin/signature
						echo "password" > authentication/Admin/certificate_to_password

		HP specific class extensions
		--------------------------------

		On HP systems the following additional settings are available:

		role: enhanced-bios-auth:
					This role is specific to Secure Platform Management (SPM) attribute.
					It requires configuring an endorsement (kek) and signing certificate (sk).


What:		/sys/class/firmware-attributes/*/attributes/pending_reboot
Date:		February 2021
KernelVersion:	5.11
Contact:	Divya Bharathi <Divya.Bharathi@Dell.com>,
		Prasanth KSR <prasanth.ksr@dell.com>
		Dell.Client.Kernel@dell.com
Description:
		A read-only attribute reads 1 if a reboot is necessary to apply
		pending BIOS attribute changes. Also, an uevent_KOBJ_CHANGE is
		generated when it changes to 1.

			==	=========================================
			0	All BIOS attributes setting are current
			1	A reboot is necessary to get pending BIOS
				attribute changes applied
			==	=========================================

		Note, userspace applications need to follow below steps for efficient
		BIOS management,

		1.	Check if admin password is set. If yes, follow session method for
			password management as briefed under authentication section above.
		2.	Before setting any attribute, check if it has any modifiers
			or value_modifiers. If yes, incorporate them and then modify
			attribute.

		Drivers may emit a CHANGE uevent when this value changes and userspace
		may check it again.

What:		/sys/class/firmware-attributes/*/attributes/reset_bios
Date:		February 2021
KernelVersion:	5.11
Contact:	Divya Bharathi <Divya.Bharathi@Dell.com>,
		Prasanth KSR <prasanth.ksr@dell.com>
		Dell.Client.Kernel@dell.com
Description:
		This attribute can be used to reset the BIOS Configuration.
		Specifically, it tells which type of reset BIOS configuration is being
		requested on the host.

		Reading from it returns a list of supported options encoded as:

			- 'builtinsafe' (Built in safe configuration profile)
			- 'lastknowngood' (Last known good saved configuration profile)
			- 'factory' (Default factory settings configuration profile)
			- 'custom' (Custom saved configuration profile)

		The currently selected option is printed in square brackets as
		shown below::

		    # echo "factory" > /sys/class/firmware-attributes/*/device/attributes/reset_bios
		    # cat /sys/class/firmware-attributes/*/device/attributes/reset_bios
		    builtinsafe lastknowngood [factory] custom

		Note that any changes to this attribute requires a reboot
		for changes to take effect.

What:		/sys/class/firmware-attributes/*/attributes/save_settings
Date:		August 2023
KernelVersion:	6.6
Contact:	Mark Pearson <mpearson-lenovo@squebb.ca>
Description:
		On Lenovo platforms there is a limitation in the number of times an attribute can be
		saved. This is an architectural limitation and it limits the number of attributes
		that can be modified to 48.
		A solution for this is instead of the attribute being saved after every modification,
		to allow a user to bulk set the attributes, and then trigger a final save. This allows
		unlimited attributes.

		Read the attribute to check what save mode is enabled (single or bulk).
		E.g:
		# cat /sys/class/firmware-attributes/thinklmi/attributes/save_settings
		single

		Write the attribute with 'bulk' to enable bulk save mode.
		Write the attribute with 'single' to enable saving, after every attribute set.
		The default setting is single mode.
		E.g:
		# echo bulk > /sys/class/firmware-attributes/thinklmi/attributes/save_settings

		When in bulk mode write 'save' to trigger a save of all currently modified attributes.
		Note, once a save has been triggered, in bulk mode, attributes can no longer be set and
		will return a permissions error. This is to prevent users hitting the 48+ save limitation
		(which requires entering the BIOS to clear the error condition)
		E.g:
		# echo save > /sys/class/firmware-attributes/thinklmi/attributes/save_settings

What:		/sys/class/firmware-attributes/*/attributes/debug_cmd
Date:		July 2021
KernelVersion:	5.14
Contact:	Mark Pearson <markpearson@lenovo.com>
Description:
		This write only attribute can be used to send debug commands to the BIOS.
		This should only be used when recommended by the BIOS vendor. Vendors may
		use it to enable extra debug attributes or BIOS features for testing purposes.

		Note that any changes to this attribute requires a reboot for changes to take effect.


		HP specific class extensions - Secure Platform Manager (SPM)
		--------------------------------

What:		/sys/class/firmware-attributes/*/authentication/SPM/kek
Date:		March 2023
KernelVersion:	5.18
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
Description:
		'kek' Key-Encryption-Key is a write-only file that can be used to configure the
		RSA public key that will be used by the BIOS to verify
		signatures when setting the signing key.  When written,
		the bytes should correspond to the KEK certificate
		(x509 .DER format containing an OU).  The size of the
		certificate must be less than or equal to 4095 bytes.

What:		/sys/class/firmware-attributes/*/authentication/SPM/sk
Date:		March 2023
KernelVersion:	5.18
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
Description:
		'sk' Signature Key is a write-only file that can be used to configure the RSA
		public key that will be used by the BIOS to verify signatures
		when configuring BIOS settings and security features.  When
		written, the bytes should correspond to the modulus of the
		public key.  The exponent is assumed to be 0x10001.

What:		/sys/class/firmware-attributes/*/authentication/SPM/status
Date:		March 2023
KernelVersion:	5.18
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
Description:
		'status' is a read-only file that returns ASCII text in JSON format reporting
		the status information.

		  "State": "not provisioned | provisioned | provisioning in progress",
		  "Version": "Major.Minor",
		  "Nonce": <16-bit unsigned number display in base 10>,
		  "FeaturesInUse": <16-bit unsigned number display in base 10>,
		  "EndorsementKeyMod": "<256 bytes in base64>",
		  "SigningKeyMod": "<256 bytes in base64>"

What:		/sys/class/firmware-attributes/*/attributes/Sure_Start/audit_log_entries
Date:		March 2023
KernelVersion:	5.18
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
Description:
		'audit_log_entries' is a read-only file that returns the events in the log.

			Audit log entry format

			Byte 0-15:   Requested Audit Log entry  (Each Audit log is 16 bytes)
			Byte 16-127: Unused

What:		/sys/class/firmware-attributes/*/attributes/Sure_Start/audit_log_entry_count
Date:		March 2023
KernelVersion:	5.18
Contact:	"Jorge Lopez" <jorge.lopez2@hp.com>
Description:
		'audit_log_entry_count' is a read-only file that returns the number of existing
		audit log events available to be read. Values are separated using comma. (``,``)

			[No of entries],[log entry size],[Max number of entries supported]

		log entry size identifies audit log size for the current BIOS version.
		The current size is 16 bytes but it can be up to 128 bytes long in future BIOS
		versions.
