Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

Bootlin logo

Elixir Cross Referencer

Loading...
# Multilevel interrupt configuration

# Copyright (c) 2017 Intel Corporation
# Copyright (c) 2018 Foundries.io
# SPDX-License-Identifier: Apache-2.0

config MULTI_LEVEL_INTERRUPTS
	bool "Multi-level interrupt support"
	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 example, if two
	  levels are used, a second level interrupt aggregator would combine
	  all interrupts routed to it into one IRQ line in the first level
	  interrupt controller. If three levels are used, a third level
	  aggregator combines its input interrupts into one IRQ line at the
	  second level. The number of interrupt levels is usually determined
	  by the hardware. (The term "aggregator" here means "interrupt
	  controller".)

config MAX_IRQ_PER_AGGREGATOR
	int "Max IRQs per interrupt aggregator"
	default 0
	depends on MULTI_LEVEL_INTERRUPTS
	help
	  The maximum number of interrupt inputs to any aggregator in the
	  system.

config 2ND_LEVEL_INTERRUPTS
	bool "Second-level interrupt support"
	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 _sw_isr_table for level 2 interrupts"
	default 0
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  This is the offset in _sw_isr_table, the generated ISR handler table,
	  where storage for 2nd level interrupt ISRs begins. This is
	  typically allocated after ISRs for level 1 interrupts.

config NUM_2ND_LEVEL_AGGREGATORS
	int "Total number of second level interrupt aggregators"
	range 1 8
	default 1
	depends on 2ND_LEVEL_INTERRUPTS
	help
	  The number of level 2 interrupt aggregators to support. Each
	  aggregator can manage at most MAX_IRQ_PER_AGGREGATOR level 2
	  interrupts.

prev-level-num = 1
cur-level-num = 2
cur-level = 2ND
aggregator = 0
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 1
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 2
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 3
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 4
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 5
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 6
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 7
rsource "Kconfig.multilevel.aggregator_template"

config 3RD_LEVEL_INTERRUPTS
	bool "Third-level interrupt support"
	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
	int "Total number of third level interrupt aggregators"
	range 1 8
	default 1
	depends on 3RD_LEVEL_INTERRUPTS
	help
	  The number of level 3 interrupt aggregators to support. Each
	  aggregator can manage at most MAX_IRQ_PER_AGGREGATOR level 3
	  interrupts.

config 3RD_LVL_ISR_TBL_OFFSET
	int "Offset in _sw_isr_table for level 3 interrupts"
	default 0
	depends on 3RD_LEVEL_INTERRUPTS
	help
	  This is the offset in _sw_isr_table, the generated ISR handler table,
	  where storage for 3rd level interrupt ISRs begins. This is
	  typically allocated after ISRs for level 2 interrupts.

prev-level-num = 2
cur-level-num = 3
cur-level = 3RD
aggregator = 0
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 1
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 2
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 3
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 4
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 5
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 6
rsource "Kconfig.multilevel.aggregator_template"
aggregator = 7
rsource "Kconfig.multilevel.aggregator_template"