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

Commit 74c5b31c authored by Mike Waychison's avatar Mike Waychison Committed by Greg Kroah-Hartman
Browse files

driver: Google EFI SMI



The "gsmi" driver bridges userland with firmware specific routines for
accessing hardware.

Currently, this driver only supports NVRAM and eventlog information.
Deprecated functions have been removed from the driver, though their
op-codes are left in place so that they are not re-used.

This driver works by trampolining into the firmware via the smi_command
outlined in the FADT table.  Three protocols are used due to various
limitations over time, but all are included herein.

This driver should only ever load on Google boards, identified by either
a "Google, Inc." board vendor string in DMI, or "GOOGLE" in the OEM
strings of the FADT ACPI table.  This logic happens in
gsmi_system_valid().

Signed-off-by: default avatarDuncan Laurie <dlaurie@google.com>
Signed-off-by: default avatarAaron Durbin <adurbin@google.com>
Signed-off-by: default avatarMike Waychison <mikew@google.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent f548ccd4
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
What:		/sys/firmware/gsmi
Date:		March 2011
Contact:	Mike Waychison <mikew@google.com>
Description:
		Some servers used internally at Google have firmware
		that provides callback functionality via explicit SMI
		triggers.  Some of the callbacks are similar to those
		provided by the EFI runtime services page, but due to
		historical reasons this different entry-point has been
		used.

		The gsmi driver implements the kernel's abstraction for
		these firmware callbacks.  Currently, this functionality
		is limited to handling the system event log and getting
		access to EFI-style variables stored in nvram.

		Layout:

		/sys/firmware/gsmi/vars:

			This directory has the same layout (and
			underlying implementation as /sys/firmware/efi/vars.
			See Documentation/ABI/*/sysfs-firmware-efi-vars
			for more information on how to interact with
			this structure.

		/sys/firmware/gsmi/append_to_eventlog - write-only:

			This file takes a binary blob and passes it onto
			the firmware to be timestamped and appended to
			the system eventlog.  The binary format is
			interpreted by the firmware and may change from
			platform to platform.  The only kernel-enforced
			requirement is that the blob be prefixed with a
			32bit host-endian type used as part of the
			firmware call.

		/sys/firmware/gsmi/clear_config - write-only:

			Writing any value to this file will cause the
			entire firmware configuration to be reset to
			"factory defaults".  Callers should assume that
			a reboot is required for the configuration to be
			cleared.

		/sys/firmware/gsmi/clear_eventlog - write-only:

			This file is used to clear out a portion/the
			whole of the system event log.  Values written
			should be values between 1 and 100 inclusive (in
			ASCII) representing the fraction of the log to
			clear.  Not all platforms support fractional
			clearing though, and this writes to this file
			will error out if the firmware doesn't like your
			submitted fraction.

			Callers should assume that a reboot is needed
			for this operation to complete.
+2 −0
Original line number Diff line number Diff line
@@ -157,4 +157,6 @@ config SIGMA
	  If unsure, say N here.  Drivers that need these helpers will select
	  this option automatically.

source "drivers/firmware/google/Kconfig"

endmenu
+2 −0
Original line number Diff line number Diff line
@@ -13,3 +13,5 @@ obj-$(CONFIG_ISCSI_IBFT_FIND) += iscsi_ibft_find.o
obj-$(CONFIG_ISCSI_IBFT)	+= iscsi_ibft.o
obj-$(CONFIG_FIRMWARE_MEMMAP)	+= memmap.o
obj-$(CONFIG_SIGMA)		+= sigma.o

obj-y  += google/
+9 −0
Original line number Diff line number Diff line
config GOOGLE_SMI
	tristate "SMI interface for Google platforms"
	depends on ACPI && DMI
	select EFI_VARS
	help
	  Say Y here if you want to enable SMI callbacks for Google
	  platforms.  This provides an interface for writing to and
	  clearing the EFI event log and reading and writing NVRAM
	  variables.
+2 −0
Original line number Diff line number Diff line

obj-$(CONFIG_GOOGLE_SMI)		+= gsmi.o
Loading