# Kconfig - timer driver configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#


menu "Timer Drivers"

config HPET_TIMER
	bool "HPET timer"
	default n
	depends on X86
	select IOAPIC
	select LOAPIC
	select TIMER_READS_ITS_FREQUENCY_AT_RUNTIME
	help
	This option selects High Precision Event Timer (HPET) as a
	system timer.

config HPET_TIMER_LEGACY_EMULATION
	bool "HPET timer legacy emulation mode"
	default n
	depends on HPET_TIMER
	help
	This option switches HPET to legacy emulation mode.
	In this mode 8254 PIT is disabled, HPET timer0 is connected
	to IOAPIC IRQ2, timer1 -- to IOAPIC IRQ8.

config HPET_TIMER_DEBUG
	bool "Enable HPET debug output"
	default n
	depends on HPET_TIMER && PRINTK
	help
	This option enables HPET debugging output.

config HPET_TIMER_BASE_ADDRESS
	hex "HPET Base Address"
	default 0xFED00000
	depends on HPET_TIMER
	help
	This options specifies the base address of the HPET timer device.

config HPET_TIMER_IRQ
	int "HPET Timer IRQ"
	default 20
	depends on HPET_TIMER
	help
	This option specifies the IRQ used by the HPET timer.

config HPET_TIMER_IRQ_PRIORITY
	int "HPET Timer IRQ Priority"
	default 4
	depends on HPET_TIMER
	help
	This option specifies the IRQ priority used by the HPET timer.

choice
depends on HPET_TIMER
prompt "HPET Interrupt Trigger Condition"
default HPET_TIMER_FALLING_EDGE

config HPET_TIMER_FALLING_EDGE
	bool "Falling Edge"
	help
	This option signifies that the HPET timer uses falling edge interrupts.

config HPET_TIMER_RISING_EDGE
	bool "Rising Edge"
	help
	This option signifies that the HPET timer uses rising edge interrupts.

config HPET_TIMER_LEVEL_HIGH
	bool "Level High"
	help
	This option signifies that the HPET timer uses level high interrupts.

config HPET_TIMER_LEVEL_LOW
	bool "Level Low"
	help
	This option signifies that the HPET timer uses level low interrupts.

endchoice

config LOAPIC_TIMER
	bool "LOAPIC timer"
	depends on (LOAPIC || MVIC) && X86
	default n
	help
	This option selects LOAPIC timer as a system timer.

config LOAPIC_TIMER_IRQ
	int "Local APIC Timer IRQ"
	default 24
	depends on LOAPIC_TIMER
	help
	This option specifies the IRQ used by the LOAPIC timer.

config LOAPIC_TIMER_IRQ_PRIORITY
	int "Local APIC Timer IRQ Priority"
	default 2
	depends on LOAPIC_TIMER
	help
	This options specifies the IRQ priority used by the LOAPIC timer.

config LOAPIC_TIMER_DIVIDER_UNSUPPORTED
	bool "LOAPIC timer divider unsupported"
	depends on LOAPIC_TIMER  && MVIC && X86
	default n
	help
	This option selects if Local Apic Timer divider register is supported.

	The MVIC interrupt controller does not provide the Timer Divide
	Configuration Register (TDC).

config ARCV2_TIMER
	bool "ARC Timer"
	default y
	depends on ARC
	help
	This module implements a kernel device driver for the ARCv2 processor timer 0
	and provides the standard "system clock driver" interfaces.

config CORTEX_M_SYSTICK
	bool "Cortex-M SYSTICK timer"
	default y
	depends on CPU_CORTEX_M
	help
	This module implements a kernel device driver for the Cortex-M processor
	SYSTICK timer and provides the standard "system clock driver" interfaces.

config ALTERA_AVALON_TIMER
	bool "Altera Avalon Interval Timer"
	default y
	depends on NIOS2
	help
	This module implements a kernel device driver for the Altera Avalon
	Interval Timer as described in the Embedded IP documentation, for use
	with Nios II and possibly other Altera soft CPUs. It provides the
	standard "system clock driver" interfaces.

config SYSTEM_CLOCK_DISABLE
	bool "API to disable system clock"
	default n
	help
	This option enables the sys_clock_disable() API in the kernel. It is
	needed by some subsystems (which will automatically select it), but is
	rarely needed by applications.

config TIMER_READS_ITS_FREQUENCY_AT_RUNTIME
	bool "Timer queries its hardware to find its frequency at runtime"
	default n
	help
	The drivers select this option automatically when needed. Do not modify
	this unless you have a very good reason for it.

config SYSTEM_CLOCK_INIT_PRIORITY
	int "System clock driver initialization priority"
	default 0
	help
	This options can be used to set a specific initialization priority
	value for the system clock driver. As drivers on nanokernel
	initialization level might need the clock to be running already, you
	should let the default value as it is (0).
endmenu
