2020 February 29 Breaking Changes Update (#8064)
[jackhill/qmk/firmware.git] / quantum / stm32 / chconf.h
index 6b69195..b6e66f9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+    ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
 
     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
@@ -15,7 +15,7 @@
 */
 
 /**
- * @file    templates/chconf.h
+ * @file    rt/templates/chconf.h
  * @brief   Configuration file template.
  * @details A copy of this file must be placed in each project directory, it
  *          contains the application specific kernel settings.
@@ -29,6 +29,7 @@
 #    define CHCONF_H
 
 #    define _CHIBIOS_RT_CONF_
+#    define _CHIBIOS_RT_CONF_VER_6_0_
 
 /*===========================================================================*/
 /**
  * @brief   System time counter resolution.
  * @note    Allowed values are 16 or 32 bits.
  */
-#    define CH_CFG_ST_RESOLUTION 32
+#    if !defined(CH_CFG_ST_RESOLUTION)
+#        define CH_CFG_ST_RESOLUTION 32
+#    endif
 
 /**
  * @brief   System tick frequency.
  * @details Frequency of the system timer that drives the system ticks. This
  *          setting also defines the system tick time unit.
  */
-#    define CH_CFG_ST_FREQUENCY 100000
+#    if !defined(CH_CFG_ST_FREQUENCY)
+#        define CH_CFG_ST_FREQUENCY 100000
+#    endif
+
+/**
+ * @brief   Time intervals data size.
+ * @note    Allowed values are 16, 32 or 64 bits.
+ */
+#    if !defined(CH_CFG_INTERVALS_SIZE)
+#        define CH_CFG_INTERVALS_SIZE 32
+#    endif
+
+/**
+ * @brief   Time types data size.
+ * @note    Allowed values are 16 or 32 bits.
+ */
+#    if !defined(CH_CFG_TIME_TYPES_SIZE)
+#        define CH_CFG_TIME_TYPES_SIZE 32
+#    endif
 
 /**
  * @brief   Time delta constant for the tick-less mode.
@@ -58,7 +79,9 @@
  *          The value one is not valid, timeouts are rounded up to
  *          this value.
  */
-#    define CH_CFG_ST_TIMEDELTA 2
+#    if !defined(CH_CFG_ST_TIMEDELTA)
+#        define CH_CFG_ST_TIMEDELTA 2
+#    endif
 
 /** @} */
 
  * @note    The round robin preemption is not supported in tickless mode and
  *          must be set to zero in that case.
  */
-#    define CH_CFG_TIME_QUANTUM 0
+#    if !defined(CH_CFG_TIME_QUANTUM)
+#        define CH_CFG_TIME_QUANTUM 0
+#    endif
 
 /**
  * @brief   Managed RAM size.
  *          provide the @p __heap_base__ and @p __heap_end__ symbols.
  * @note    Requires @p CH_CFG_USE_MEMCORE.
  */
-#    define CH_CFG_MEMCORE_SIZE 0
+#    if !defined(CH_CFG_MEMCORE_SIZE)
+#        define CH_CFG_MEMCORE_SIZE 0
+#    endif
 
 /**
  * @brief   Idle thread automatic spawn suppression.
  *          function becomes the idle thread and must implement an
  *          infinite loop.
  */
-#    define CH_CFG_NO_IDLE_THREAD FALSE
+#    if !defined(CH_CFG_NO_IDLE_THREAD)
+#        define CH_CFG_NO_IDLE_THREAD FALSE
+#    endif
 
 /** @} */
 
  * @note    This is not related to the compiler optimization options.
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_OPTIMIZE_SPEED TRUE
+#    if !defined(CH_CFG_OPTIMIZE_SPEED)
+#        define CH_CFG_OPTIMIZE_SPEED TRUE
+#    endif
 
 /** @} */
 
  *
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_USE_TM TRUE
+#    if !defined(CH_CFG_USE_TM)
+#        define CH_CFG_USE_TM TRUE
+#    endif
 
 /**
  * @brief   Threads registry APIs.
  *
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_USE_REGISTRY TRUE
+#    if !defined(CH_CFG_USE_REGISTRY)
+#        define CH_CFG_USE_REGISTRY TRUE
+#    endif
 
 /**
  * @brief   Threads synchronization APIs.
  *
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_USE_WAITEXIT TRUE
+#    if !defined(CH_CFG_USE_WAITEXIT)
+#        define CH_CFG_USE_WAITEXIT TRUE
+#    endif
 
 /**
  * @brief   Semaphores APIs.
  *
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_USE_SEMAPHORES TRUE
+#    if !defined(CH_CFG_USE_SEMAPHORES)
+#        define CH_CFG_USE_SEMAPHORES TRUE
+#    endif
 
 /**
  * @brief   Semaphores queuing mode.
  *          requirements.
  * @note    Requires @p CH_CFG_USE_SEMAPHORES.
  */
-#    define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+#    if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY)
+#        define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+#    endif
 
 /**
  * @brief   Mutexes APIs.
  *
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_USE_MUTEXES TRUE
+#    if !defined(CH_CFG_USE_MUTEXES)
+#        define CH_CFG_USE_MUTEXES TRUE
+#    endif
 
 /**
  * @brief   Enables recursive behavior on mutexes.
  * @note    The default is @p FALSE.
  * @note    Requires @p CH_CFG_USE_MUTEXES.
  */
-#    define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+#    if !defined(CH_CFG_USE_MUTEXES_RECURSIVE)
+#        define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+#    endif
 
 /**
  * @brief   Conditional Variables APIs.
  * @note    The default is @p TRUE.
  * @note    Requires @p CH_CFG_USE_MUTEXES.
  */
-#    define CH_CFG_USE_CONDVARS TRUE
+#    if !defined(CH_CFG_USE_CONDVARS)
+#        define CH_CFG_USE_CONDVARS TRUE
+#    endif
 
 /**
  * @brief   Conditional Variables APIs with timeout.
  * @note    The default is @p TRUE.
  * @note    Requires @p CH_CFG_USE_CONDVARS.
  */
-#    define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+#    if !defined(CH_CFG_USE_CONDVARS_TIMEOUT)
+#        define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+#    endif
 
 /**
  * @brief   Events Flags APIs.
  *
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_USE_EVENTS TRUE
+#    if !defined(CH_CFG_USE_EVENTS)
+#        define CH_CFG_USE_EVENTS TRUE
+#    endif
 
 /**
  * @brief   Events Flags APIs with timeout.
  * @note    The default is @p TRUE.
  * @note    Requires @p CH_CFG_USE_EVENTS.
  */
-#    define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+#    if !defined(CH_CFG_USE_EVENTS_TIMEOUT)
+#        define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+#    endif
 
 /**
  * @brief   Synchronous Messages APIs.
  *
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_USE_MESSAGES TRUE
+#    if !defined(CH_CFG_USE_MESSAGES)
+#        define CH_CFG_USE_MESSAGES TRUE
+#    endif
 
 /**
  * @brief   Synchronous Messages queuing mode.
  *          requirements.
  * @note    Requires @p CH_CFG_USE_MESSAGES.
  */
-#    define CH_CFG_USE_MESSAGES_PRIORITY TRUE
+#    if !defined(CH_CFG_USE_MESSAGES_PRIORITY)
+#        define CH_CFG_USE_MESSAGES_PRIORITY TRUE
+#    endif
 
 /**
  * @brief   Mailboxes APIs.
  * @note    The default is @p TRUE.
  * @note    Requires @p CH_CFG_USE_SEMAPHORES.
  */
-#    define CH_CFG_USE_MAILBOXES TRUE
+#    if !defined(CH_CFG_USE_MAILBOXES)
+#        define CH_CFG_USE_MAILBOXES TRUE
+#    endif
 
 /**
  * @brief   Core Memory Manager APIs.
  *
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_USE_MEMCORE TRUE
+#    if !defined(CH_CFG_USE_MEMCORE)
+#        define CH_CFG_USE_MEMCORE TRUE
+#    endif
 
 /**
  * @brief   Heap Allocator APIs.
  *          @p CH_CFG_USE_SEMAPHORES.
  * @note    Mutexes are recommended.
  */
-#    define CH_CFG_USE_HEAP TRUE
+#    if !defined(CH_CFG_USE_HEAP)
+#        define CH_CFG_USE_HEAP TRUE
+#    endif
 
 /**
  * @brief   Memory Pools Allocator APIs.
  *
  * @note    The default is @p TRUE.
  */
-#    define CH_CFG_USE_MEMPOOLS TRUE
+#    if !defined(CH_CFG_USE_MEMPOOLS)
+#        define CH_CFG_USE_MEMPOOLS TRUE
+#    endif
+
+/**
+ * @brief   Objects FIFOs APIs.
+ * @details If enabled then the objects FIFOs APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#    if !defined(CH_CFG_USE_OBJ_FIFOS)
+#        define CH_CFG_USE_OBJ_FIFOS TRUE
+#    endif
+
+/**
+ * @brief   Pipes APIs.
+ * @details If enabled then the pipes APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#    if !defined(CH_CFG_USE_PIPES)
+#        define CH_CFG_USE_PIPES TRUE
+#    endif
 
 /**
  * @brief   Dynamic Threads APIs.
  * @note    Requires @p CH_CFG_USE_WAITEXIT.
  * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
  */
-#    define CH_CFG_USE_DYNAMIC TRUE
+#    if !defined(CH_CFG_USE_DYNAMIC)
+#        define CH_CFG_USE_DYNAMIC TRUE
+#    endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Objects factory options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Objects Factory APIs.
+ * @details If enabled then the objects factory APIs are included in the
+ *          kernel.
+ *
+ * @note    The default is @p FALSE.
+ */
+#    if !defined(CH_CFG_USE_FACTORY)
+#        define CH_CFG_USE_FACTORY TRUE
+#    endif
+
+/**
+ * @brief   Maximum length for object names.
+ * @details If the specified length is zero then the name is stored by
+ *          pointer but this could have unintended side effects.
+ */
+#    if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH)
+#        define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
+#    endif
+
+/**
+ * @brief   Enables the registry of generic objects.
+ */
+#    if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)
+#        define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE
+#    endif
+
+/**
+ * @brief   Enables factory for generic buffers.
+ */
+#    if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)
+#        define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE
+#    endif
+
+/**
+ * @brief   Enables factory for semaphores.
+ */
+#    if !defined(CH_CFG_FACTORY_SEMAPHORES)
+#        define CH_CFG_FACTORY_SEMAPHORES TRUE
+#    endif
+
+/**
+ * @brief   Enables factory for mailboxes.
+ */
+#    if !defined(CH_CFG_FACTORY_MAILBOXES)
+#        define CH_CFG_FACTORY_MAILBOXES TRUE
+#    endif
+
+/**
+ * @brief   Enables factory for objects FIFOs.
+ */
+#    if !defined(CH_CFG_FACTORY_OBJ_FIFOS)
+#        define CH_CFG_FACTORY_OBJ_FIFOS TRUE
+#    endif
+
+/**
+ * @brief   Enables factory for Pipes.
+ */
+#    if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)
+#        define CH_CFG_FACTORY_PIPES TRUE
+#    endif
 
 /** @} */
 
  *
  * @note    The default is @p FALSE.
  */
-#    define CH_DBG_STATISTICS FALSE
+#    if !defined(CH_DBG_STATISTICS)
+#        define CH_DBG_STATISTICS FALSE
+#    endif
 
 /**
  * @brief   Debug option, system state check.
  *
  * @note    The default is @p FALSE.
  */
-#    define CH_DBG_SYSTEM_STATE_CHECK FALSE
+#    if !defined(CH_DBG_SYSTEM_STATE_CHECK)
+#        define CH_DBG_SYSTEM_STATE_CHECK FALSE
+#    endif
 
 /**
  * @brief   Debug option, parameters checks.
  *
  * @note    The default is @p FALSE.
  */
-#    define CH_DBG_ENABLE_CHECKS FALSE
+#    if !defined(CH_DBG_ENABLE_CHECKS)
+#        define CH_DBG_ENABLE_CHECKS FALSE
+#    endif
 
 /**
  * @brief   Debug option, consistency checks.
  *
  * @note    The default is @p FALSE.
  */
-#    define CH_DBG_ENABLE_ASSERTS FALSE
+#    if !defined(CH_DBG_ENABLE_ASSERTS)
+#        define CH_DBG_ENABLE_ASSERTS FALSE
+#    endif
 
 /**
  * @brief   Debug option, trace buffer.
  *
  * @note    The default is @p CH_DBG_TRACE_MASK_DISABLED.
  */
-#    define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+#    if !defined(CH_DBG_TRACE_MASK)
+#        define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+#    endif
 
 /**
  * @brief   Trace buffer entries.
  * @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
  *          different from @p CH_DBG_TRACE_MASK_DISABLED.
  */
-#    define CH_DBG_TRACE_BUFFER_SIZE 128
+#    if !defined(CH_DBG_TRACE_BUFFER_SIZE)
+#        define CH_DBG_TRACE_BUFFER_SIZE 128
+#    endif
 
 /**
  * @brief   Debug option, stack checks.
  * @note    The default failure mode is to halt the system with the global
  *          @p panic_msg variable set to @p NULL.
  */
-#    define CH_DBG_ENABLE_STACK_CHECK TRUE
+#    if !defined(CH_DBG_ENABLE_STACK_CHECK)
+#        define CH_DBG_ENABLE_STACK_CHECK TRUE
+#    endif
 
 /**
  * @brief   Debug option, stacks initialization.
  *
  * @note    The default is @p FALSE.
  */
-#    define CH_DBG_FILL_THREADS FALSE
+#    if !defined(CH_DBG_FILL_THREADS)
+#        define CH_DBG_FILL_THREADS FALSE
+#    endif
 
 /**
  * @brief   Debug option, threads profiling.
  * @note    This debug option is not currently compatible with the
  *          tickless mode.
  */
-#    define CH_DBG_THREADS_PROFILING FALSE
+#    if !defined(CH_DBG_THREADS_PROFILING)
+#        define CH_DBG_THREADS_PROFILING FALSE
+#    endif
 
 /** @} */
 
  */
 /*===========================================================================*/
 
+/**
+ * @brief   System structure extension.
+ * @details User fields added to the end of the @p ch_system_t structure.
+ */
+#    define CH_CFG_SYSTEM_EXTRA_FIELDS /* Add threads custom fields here.*/
+
+/**
+ * @brief   System initialization hook.
+ * @details User initialization code added to the @p chSysInit() function
+ *          just before interrupts are enabled globally.
+ */
+#    define CH_CFG_SYSTEM_INIT_HOOK()                \
+        { /* Add threads initialization code here.*/ \
+        }
+
 /**
  * @brief   Threads descriptor structure extension.
  * @details User fields added to the end of the @p thread_t structure.
 
 /**
  * @brief   Threads initialization hook.
- * @details User initialization code added to the @p chThdInit() API.
+ * @details User initialization code added to the @p _thread_init() function.
  *
- * @note    It is invoked from within @p chThdInit() and implicitly from all
+ * @note    It is invoked from within @p _thread_init() and implicitly from all
  *          the threads creation APIs.
  */
 #    define CH_CFG_THREAD_INIT_HOOK(tp)              \