# PCIe/new PCI configuration options

# Copyright (c) 2019 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

menuconfig PCIE
	bool "Enable new PCI/PCIe Root Complex support"
	help
	  This option enables support for new PCI(e) drivers.

if PCIE

config PCIE_MSI
	bool "Enable support for PCI(e) MSI"
	help
	  Use Message-Signaled Interrupts where possible. With this option
	  enabled, PCI(e) devices which support MSI will be configured (at
	  runtime) to use them. This is typically required for PCIe devices
	  to generate interrupts at all.

if PCIE_MSI

config PCIE_MSI_MULTI_VECTOR
	bool "Enable MSI multi-vector support"
	help
	  MSI can support up to 32 different messages. This will enable the
	  support of such capability so each message can get a vector
	  assigned to it. This will require for the selected architecture
	  to provide the necessary logic to make it work. Disable this if
	  the vectors cannot be managed by the hardware or if none of the
	  peripheral require this.

config PCIE_MSI_X
	bool "Enable MSI-X support"
	help
	  If one or more device support MSI-X, you'll need to enable this.
	  If a device exposes support for both MSI-X and MSI, MSI-X will be
	  used and MSI disabled on that device. Enable PCIE_MSI_MULTI_VECTOR
	  if you want to support multi-vector on MSI-X as well.

endif # PCIE_MSI

config PCIE_SHELL
	bool "Enable PCIe/new PCI Shell"
	default y
	depends on SHELL
	help
	  Enable commands for debugging PCI(e) using the built-in shell.

endif # PCIE
