# SPDX-License-Identifier: GPL-2.0-only

config ACPI_AMD_HARDWARE_SLEEP_VALUES
	def_bool n
	help
	  Provide common definitions for AMD hardware PM1_CNT register sleep
	  values.

config ACPI_CPU_STRING
	string
	default "\\_SB.CP%02X"
	depends on HAVE_ACPI_TABLES
	help
	  Specifies the ACPI name format string used by the acpigen
	  function to generate the processor scope. Default is \_SB.CPxx.
	  Note that you need to escape the '\' character in the string.
	  The resulting string will be truncated to at most 15 chars.

config ACPI_HAVE_PCAT_8259
	def_bool y if !ACPI_NO_PCAT_8259

config ACPI_INTEL_HARDWARE_SLEEP_VALUES
	def_bool n
	help
	  Provide common definitions for Intel hardware PM1_CNT register sleep
	  values.

config ACPI_SOC_NVS
	bool
	help
	  Set to indicate <soc/nvs.h> exists for the platform with a definition
	  for global_nvs.

config ACPI_COMMON_MADT_LAPIC
	bool

config ACPI_NO_MADT
	bool
	help
	  Selected by platforms that don't expose a useful MADT.

config ACPI_NO_PCAT_8259
	bool
	help
	  Selected by platforms that don't expose a PC/AT 8259 PIC pair.

config ACPI_EINJ
	def_bool n
	depends on HAVE_ACPI_TABLES
	help
	  This variable provides control for ACPI error injection table (EINJ)

config HAVE_ACPI_TABLES
	bool
	help
	  This variable specifies whether a given board has ACPI table support.
	  It is usually set in mainboard/*/Kconfig.

config ACPI_LPIT
	bool
	depends on HAVE_ACPI_TABLES
	help
	  Selected by platforms that support and fill Intel Low Power Idle Table.
