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

config MULTI_LEVEL_INTERRUPTS
	bool "Multi-level Interrupts"
	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"
	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"
	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.
