# 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.
