# SPDX-License-Identifier: GPL-2.0-only
#
# IPMI device configuration
#

menuconfig IPMI_HANDLER
	tristate 'IPMI top-level message handler'
	depends on HAS_IOMEM
	select IPMI_DMI_DECODE if DMI
	help
	  This enables the central IPMI message handler, required for IPMI
	  to work.

	  IPMI is a standard for managing sensors (temperature,
	  voltage, etc.) in a system.

	  See <file:Documentation/IPMI.txt> for more details on the driver.

	  If unsure, say N.

config IPMI_DMI_DECODE
	select IPMI_PLAT_DATA
	bool

config IPMI_PLAT_DATA
	bool

if IPMI_HANDLER

config IPMI_PANIC_EVENT
	bool 'Generate a panic event to all BMCs on a panic'
	help
	  When a panic occurs, this will cause the IPMI message handler to,
	  by default, generate an IPMI event describing the panic to each
	  interface registered with the message handler.  This is always
	  available, the module parameter for ipmi_msghandler named
	  panic_op can be set to "event" to chose this value, this config
	  simply causes the default value to be set to "event".

config IPMI_PANIC_STRING
	bool 'Generate OEM events containing the panic string'
	depends on IPMI_PANIC_EVENT
	help
	  When a panic occurs, this will cause the IPMI message handler to,
	  by default, generate IPMI OEM type f0 events holding the IPMB
	  address of the panic generator (byte 4 of the event), a sequence
	  number for the string (byte 5 of the event) and part of the
	  string (the rest of the event).  Bytes 1, 2, and 3 are the normal
	  usage for an OEM event.  You can fetch these events and use the
	  sequence numbers to piece the string together.  This config
	  parameter sets the default value to generate these events,
	  the module parameter for ipmi_msghandler named panic_op can
	  be set to "string" to chose this value, this config simply
	  causes the default value to be set to "string".

config IPMI_DEVICE_INTERFACE
	tristate 'Device interface for IPMI'
	help
	  This provides an IOCTL interface to the IPMI message handler so
	  userland processes may use IPMI.  It supports poll() and select().

config IPMI_SI
	tristate 'IPMI System Interface handler'
	select IPMI_PLAT_DATA
	help
	  Provides a driver for System Interfaces (KCS, SMIC, BT).
	  Currently, only KCS and SMIC are supported.  If
	  you are using IPMI, you should probably say "y" here.

config IPMI_SSIF
	tristate 'IPMI SMBus handler (SSIF)'
	select I2C
	help
	  Provides a driver for a SMBus interface to a BMC, meaning that you
	  have a driver that must be accessed over an I2C bus instead of a
	  standard interface.  This module requires I2C support.

config IPMI_POWERNV
	depends on PPC_POWERNV
	tristate 'POWERNV (OPAL firmware) IPMI interface'
	help
	  Provides a driver for OPAL firmware-based IPMI interfaces.

config IPMI_WATCHDOG
	tristate 'IPMI Watchdog Timer'
	help
	  This enables the IPMI watchdog timer.

config IPMI_POWEROFF
	tristate 'IPMI Poweroff'
	help
	  This enables a function to power off the system with IPMI if
	  the IPMI management controller is capable of this.

endif # IPMI_HANDLER

config IPMI_KCS_BMC
	tristate

config ASPEED_KCS_IPMI_BMC
	depends on ARCH_ASPEED || COMPILE_TEST
	select IPMI_KCS_BMC
	select REGMAP_MMIO
	tristate "Aspeed KCS IPMI BMC driver"
	help
	  Provides a driver for the KCS (Keyboard Controller Style) IPMI
	  interface found on Aspeed SOCs (AST2400 and AST2500).

	  The driver implements the BMC side of the KCS contorller, it
	  provides the access of KCS IO space for BMC side.

config NPCM7XX_KCS_IPMI_BMC
	depends on ARCH_NPCM7XX || COMPILE_TEST
	select IPMI_KCS_BMC
	select REGMAP_MMIO
	tristate "NPCM7xx KCS IPMI BMC driver"
	help
	  Provides a driver for the KCS (Keyboard Controller Style) IPMI
	  interface found on Nuvoton NPCM7xx SOCs.

	  The driver implements the BMC side of the KCS contorller, it
	  provides the access of KCS IO space for BMC side.

	  This support is also available as a module.  If so, the module
	  will be called kcs_bmc_npcm7xx.

config ASPEED_BT_IPMI_BMC
	depends on ARCH_ASPEED || COMPILE_TEST
	depends on REGMAP && REGMAP_MMIO && MFD_SYSCON
	tristate "BT IPMI bmc driver"
	help
	  Provides a driver for the BT (Block Transfer) IPMI interface
	  found on Aspeed SOCs (AST2400 and AST2500). The driver
	  implements the BMC side of the BT interface.

config IPMB_DEVICE_INTERFACE
	tristate 'IPMB Interface handler'
	depends on I2C
	depends on I2C_SLAVE
	help
	  Provides a driver for a device (Satellite MC) to
	  receive requests and send responses back to the BMC via
	  the IPMB interface. This module requires I2C support.
