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

config CMSIS_RTOS_V2
	bool "CMSIS RTOS v2 API"
	depends on POLL
	depends on THREAD_NAME
	depends on THREAD_STACK_INFO
	depends on THREAD_MONITOR
	depends on INIT_STACKS
	depends on NUM_PREEMPT_PRIORITIES >= 56
	help
	  This enables CMSIS RTOS v2 API support. This is an OS-integration
	  layer which allows applications using CMSIS RTOS V2 APIs to build
	  on Zephyr.

if CMSIS_RTOS_V2
config CMSIS_V2_THREAD_MAX_COUNT
	int "Maximum thread count in CMSIS RTOS V2 application"
	default 15
	range 0 255
	help
	  Mention max number of threads in CMSIS RTOS V2 compliant application.
	  There's a limitation on the number of threads due to memory
	  related constraints.

config CMSIS_V2_THREAD_DYNAMIC_MAX_COUNT
	int "Maximum dynamic thread count in CMSIS RTOS V2 application"
	default 0
	range 0 255
	help
	  Mention max number of dynamic threads in CMSIS RTOS V2 compliant
	  application. There's a limitation on the number of threads due to memory
	  related constraints. Dynamic threads are a subset of all other CMSIS
	  threads i.e. they also count towards that maximum too.

config CMSIS_V2_THREAD_MAX_STACK_SIZE
	int "Max stack size threads can be allocated in CMSIS RTOS V2 application"
	default 4096 if COVERAGE_GCOV
	default 512
	help
	  Mention max stack size threads can be allocated in CMSIS RTOS V2 application.

config CMSIS_V2_THREAD_DYNAMIC_STACK_SIZE
	int "Dynamic stack size threads are allocated in CMSIS RTOS V2 application"
	default 4096 if COVERAGE_GCOV
	default 512
	help
	  Mention dynamic stack size threads are allocated in CMSIS RTOS V2 application.

config CMSIS_V2_TIMER_MAX_COUNT
	int "Maximum timer count in CMSIS RTOS V2 application"
	default 5
	range 0 255
	help
	  Mention maximum number of timers in CMSIS RTOS V2 compliant application.

config CMSIS_V2_MUTEX_MAX_COUNT
	int "Maximum mutex count in CMSIS RTOS V2 application"
	default 5
	range 0 255
	help
	  Mention max number of mutexes in CMSIS RTOS V2 compliant application.

config CMSIS_V2_SEMAPHORE_MAX_COUNT
	int "Maximum semaphore count in CMSIS RTOS V2 application"
	default 5
	range 0 255
	help
	  Mention max number of semaphores in CMSIS RTOS V2 compliant application.

config CMSIS_V2_MEM_SLAB_MAX_COUNT
	int "Maximum mem slab count in CMSIS RTOS V2 application"
	default 5
	range 0 255
	help
	  Mention maximum number of memory slabs in CMSIS RTOS V2 compliant application.

config CMSIS_V2_MEM_SLAB_MAX_DYNAMIC_SIZE
	int "Maximum dynamic mem slab/pool size in CMSIS RTOS V2 application"
	default 0
	help
	  Mention maximum dynamic size of memory slabs/pools in CMSIS RTOS V2 compliant application.

config CMSIS_V2_MSGQ_MAX_COUNT
	int "Maximum message queue count in CMSIS RTOS V2 application"
	default 5
	range 0 255
	help
	  Mention maximum number of message queues in CMSIS RTOS V2 compliant application.

config CMSIS_V2_MSGQ_MAX_DYNAMIC_SIZE
	int "Maximum dynamic message queue size in CMSIS RTOS V2 application"
	default 0
	help
	  Mention maximum dynamic size of message queues in CMSIS RTOS V2 compliant application.

config CMSIS_V2_EVT_FLAGS_MAX_COUNT
	int "Maximum event flags count in CMSIS RTOS V2 application"
	default 5
	range 0 255
	help
	  Mention maximum number of event flags in CMSIS RTOS V2 compliant application.
endif
