linux/drivers/firmware
Mark Rutland f51c35f291 efi/runtime-wrappers: Add {__,}efi_call_virt() templates
Currently each architecture must implement two macros, efi_call_virt() and
__efi_call_virt(), which only differ by the presence or absence of a
return type. Otherwise, the logic surrounding the call is identical.

As each architecture must define the entire body of each, we can't place
any generic manipulation (e.g. irq flag validation) in the middle.

This patch adds template implementations of these macros. With these,
arch code can implement three template macros, avoiding reptition for
the void/non-void return cases:

* arch_efi_call_virt_setup()

  Sets up the environment for the call (e.g. switching page tables,
  allowing kernel-mode use of floating point, if required).

* arch_efi_call_virt()

  Performs the call. The last expression in the macro must be the call
  itself, allowing the logic to be shared by the void and non-void
  cases.

* arch_efi_call_virt_teardown()

  Restores the usual kernel environment once the call has returned.

While the savings from repition are minimal, we additionally gain the
ability to add common code around the call with the call environment set
up. This can be used to detect common firmware issues (e.g. bad irq mask
management).

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Leif Lindholm <leif.lindholm@linaro.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Deacon <will.deacon@arm.com>
Cc: linux-efi@vger.kernel.org
Link: http://lkml.kernel.org/r/1461614832-17633-32-git-send-email-matt@codeblueprint.co.uk
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-04-28 11:34:06 +02:00
..
broadcom drivers/firmware/broadcom/bcm47xx_nvram.c: fix incorrect __ioread32_copy 2016-03-17 15:09:34 -07:00
efi efi/runtime-wrappers: Add {__,}efi_call_virt() templates 2016-04-28 11:34:06 +02:00
google firmware: google memconsole driver fixes 2014-02-15 11:30:28 -08:00
arm_scpi.c firmware: arm_scpi: add support for 64-bit sensor values 2016-02-16 09:26:27 +00:00
dcdbas.c firmware: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
dcdbas.h
dell_rbu.c sysfs: add struct file* to bin_attr callbacks 2010-05-21 09:37:31 -07:00
dmi_scan.c firmware: dmi_scan: Save SMBIOS Type 9 System Slots 2016-01-15 22:08:45 +01:00
dmi-id.c dmi-id: fix a memory leak in dmi_id_init error path 2010-08-05 13:53:34 -07:00
dmi-sysfs.c firmware: dmi_scan: add SBMIOS entry and DMI tables 2015-06-25 09:06:56 +02:00
edd.c [SCSI] edd: Treat "XPRS" host bus type the same as "PCI" 2011-10-31 13:26:19 +04:00
iscsi_ibft_find.c efi: Make 'efi_enabled' a function to query EFI facilities 2013-01-30 11:51:59 -08:00
iscsi_ibft.c iscsi_ibft: Add prefix-len attr and display netmask 2016-03-14 10:30:57 -04:00
Kconfig firmware: qemu config needs I/O ports 2016-02-11 20:13:35 -08:00
Makefile firmware: introduce sysfs driver for QEMU's fw_cfg device 2016-02-09 17:37:39 -08:00
memmap.c drivers/firmware/memmap.c: fix kernel-doc format 2015-06-25 17:00:41 -07:00
pcdp.c serial: 8250_early: Remove setup_early_serial8250_console() 2015-03-26 17:25:27 +01:00
pcdp.h Update broken web addresses in the kernel. 2010-10-18 11:03:14 +02:00
psci.c ARM: 8511/1: ARM64: kernel: PSCI: move PSCI idle management code to drivers/firmware 2016-02-11 15:33:38 +00:00
qcom_scm-32.c qcom-scm: fix endianess issue in __qcom_scm_is_call_available 2015-10-14 14:51:21 -05:00
qcom_scm-64.c firmware: qcom: scm: Add function stubs for ARM64 2015-09-23 12:00:43 -05:00
qcom_scm.c firmware: qcom: scm: Add HDCP Support 2015-05-28 10:47:45 -05:00
qcom_scm.h firmware: qcom: scm: Add HDCP Support 2015-05-28 10:47:45 -05:00
qemu_fw_cfg.c firmware: qemu_fw_cfg.c: hold ACPI global lock during device access 2016-04-07 15:16:40 +03:00
raspberrypi.c ARM: bcm2835: Add the Raspberry Pi firmware driver 2015-10-14 15:30:06 -07:00