# Kconfig - Multilevel interrupt configuration
#
# Copyright (c) 2017 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

config MULTI_LEVEL_INTERRUPTS
	bool "Multi-level Interrupts"
	default n
	depends on GEN_SW_ISR_TABLE
	help
	  Multiple levels of interrupts are normally used to increase the
	  number of addressable interrupts in a system. For e.g., if 2 levels
	  of interrupts are used, the 2nd level controller would combine all
	  interrupts routed to it into one line which then gets routed to one
	  of the lines in 1st level interrupt controller.

config MAX_IRQ_PER_AGGREGATOR
	int "Max IRQs per interrupt aggregator"
	default 0
	depends on MULTI_LEVEL_INTERRUPTS
	help
	  This represents the max number of interrupts that an aggregator
	  can map.

config 2ND_LEVEL_INTERRUPTS
	bool "Second-level Interrupts"
	default n
	depends on MULTI_LEVEL_INTERRUPTS
	help
	  Second level interrupts are used to increase the number of
	  addressable interrupts in a system.

config 2ND_LVL_ISR_TBL_OFFSET
	int "Offset in the SW ISR Table for 2nd level interrupt controller"
	default 0
	depends on MULTI_LEVEL_INTERRUPTS
	help
	  This is the offset in the SW ISR table beginning where the ISRs for
	  2nd level interrupts are located. This typically is allocated after
	  allocating first level interrupts.

config NUM_2ND_LEVEL_AGGREGATORS
	hex "Total Number of Second level Interrupt Aggregators"
	default 0
	depends on MULTI_LEVEL_INTERRUPTS
	help
	  This is the number of second level interrupt aggregators present
	  in the system. Each of these interrupt aggregators can typically
	  map MAX_IRQ_PER_AGGREGATOR second level interrupts to one first
	  level interrupt.

config 2ND_LVL_INTR_00_OFFSET
	hex "Parent interrupt number to which controller_0 maps"
	default 0x00
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  This is the interrupt number in the first level to which
	  controller_0 of second level maps.

config 2ND_LVL_INTR_01_OFFSET
	hex "Parent interrupt number to which controller_1 maps"
	default 0x00
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  This is the interrupt number in the first level to which
	  controller_1 of second level maps.

config 2ND_LVL_INTR_02_OFFSET
	hex "Parent interrupt number to which controller_2 maps"
	default 0x00
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  This is the interrupt number in the first level to which
	  controller_2 of second level maps.

config 2ND_LVL_INTR_03_OFFSET
	hex "Parent interrupt number to which controller_3 maps"
	default 0x00
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  This is the interrupt number in the first level to which
	  controller_3 of second level maps.

config 3RD_LEVEL_INTERRUPTS
	bool "Third-level Interrupts"
	default n
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  Third level interrupts are used to increase the number of
	  addressable interrupts in a system.

config NUM_3RD_LEVEL_AGGREGATORS
	hex "Total Number of Third level Interrupt Aggregators"
	default 0
	depends on 3RD_LEVEL_INTERRUPTS
	help
	  These are the number of third level interrupt aggregators present
	  in the system. Each of these interrupt aggregators can typically
	  map MAX_IRQ_PER_AGGREGATOR third level interrupts to one second
	  level interrupt.

config 3RD_LVL_ISR_TBL_OFFSET
	int "Offset in the SW ISR Table for 3rd level interrupt controller"
	default 0
	depends on 3RD_LEVEL_INTERRUPTS
	help
	  This is the offset in the SW ISR table beginning where the ISRs for
	  3rd level interrupts are located. This typically is allocated after
	  allocating first and second level interrupts.

config 3RD_LVL_INTR_00_OFFSET
	hex "Parent interrupt number to which controller_0 maps"
	default 0x00
	depends on 3RD_LEVEL_INTERRUPTS
	help
	  This is the interrupt number in the second level to which
	  controller_0 of third level maps.
