# PCIe/new PCI configuration options

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

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

if PCIE

module = PCIE
module-str = pcie
source "subsys/logging/Kconfig.template.log_config"

config PCIE_CONTROLLER
	bool "PCIe Controller management"
	help
	  Add support for PCIe Controller management when not handled by a
	  system firmware like on x86 platforms.

if PCIE_CONTROLLER

config PCIE_ECAM
	bool "Support for PCIe ECAM Controllers"
	help
	  Add support for Enhanced Configuration Address Mapping configured
	  PCIe Controllers allowing all outgoing I/O and MEM TLPs to be mapped
	  from memory space into any 256 MB region of the PCIe configuration space.

endif # PCIE_CONTROLLER

config PCIE_MSI
	bool "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 "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 "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_PTM
	bool "Support for PCI(e) Precision Time Management (PTM)"
	help
	  This will enable support both PTM root and PTM requester features.
	  Up to the PCIe device driver to enable its PTM requester capability.

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

endif # PCIE
