Updated STM32L1xx ST header files and related changes.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@8166 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
Giovanni Di Sirio 2015-08-06 09:21:52 +00:00
parent adb186c90a
commit 3814399a1a
38 changed files with 176303 additions and 6275 deletions

View File

@ -60,7 +60,17 @@
/* If the device type is not externally defined, for example from the Makefile, /* If the device type is not externally defined, for example from the Makefile,
then a file named board.h is included. This file must contain a device then a file named board.h is included. This file must contain a device
definition compatible with the vendor include file.*/ definition compatible with the vendor include file.*/
#if !defined(STM32L1XX_MD) && !defined(STM32L1XX_MDP) && !defined(STM32L1XX_HD) #if !defined(STM32L100xB) && !defined(STM32L100xBA) && \
!defined(STM32L100xC) && !defined(STM32L151xB) && \
!defined(STM32L151xBA) && !defined(STM32L151xC) && \
!defined(STM32L151xCA) && !defined(STM32L151xD) && \
!defined(STM32L151xDX) && !defined(STM32L151xE) && \
!defined(STM32L152xB) && !defined(STM32L152xBA) && \
!defined(STM32L152xC) && !defined(STM32L152xCA) && \
!defined(STM32L152xD) && !defined(STM32L152xDX) && \
!defined(STM32L152xE) && !defined(STM32L162xC) && \
!defined(STM32L162xCA) && !defined(STM32L162xD) && \
!defined(STM32L162xDX) && !defined(STM32L162xE)
#include "board.h" #include "board.h"
#endif #endif
@ -77,6 +87,9 @@
#error "CMSIS __NVIC_PRIO_BITS mismatch" #error "CMSIS __NVIC_PRIO_BITS mismatch"
#endif #endif
/* Fix for yet another consistency error in ST headers.*/
#define SVCall_IRQn SVC_IRQn
#endif /* !defined(_FROM_ASM_) */ #endif /* !defined(_FROM_ASM_) */
#endif /* _CMPARAMS_H_ */ #endif /* _CMPARAMS_H_ */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

207
os/ext/CMSIS/ST/stm32l4xx.h Normal file
View File

@ -0,0 +1,207 @@
/**
******************************************************************************
* @file stm32l4xx.h
* @author MCD Application Team
* @version V1.0.0
* @date 26-June-2015
* @brief CMSIS STM32L4xx Device Peripheral Access Layer Header File.
*
* The file is the unique include file that the application programmer
* is using in the C source code, usually in main.c. This file contains:
* - Configuration section that allows to select:
* - The STM32L4xx device used in the target application
* - To use or not the peripherals drivers in application code(i.e.
* code will be based on direct access to peripherals registers
* rather than drivers API), this option is controlled by
* "#define USE_HAL_DRIVER"
*
******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/** @addtogroup CMSIS
* @{
*/
/** @addtogroup stm32l4xx
* @{
*/
#ifndef __STM32L4xx_H
#define __STM32L4xx_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** @addtogroup Library_configuration_section
* @{
*/
/**
* @brief STM32 Family
*/
#if !defined (STM32L4)
#define STM32L4
#endif /* STM32L4 */
/* Uncomment the line below according to the target STM32L4 device used in your
application
*/
#if !defined (STM32L471xx) && !defined (STM32L475xx) && !defined (STM32L476xx) && !defined (STM32L485xx) && !defined (STM32L486xx)
/* #define STM32L471xx */ /*!< STM32L471xx Devices */
/* #define STM32L475xx */ /*!< STM32L475xx Devices */
/* #define STM32L476xx */ /*!< STM32L476xx Devices */
/* #define STM32L485xx */ /*!< STM32L485xx Devices */
/* #define STM32L486xx */ /*!< STM32L486xx Devices */
#endif
/* Tip: To avoid modifying this file each time you need to switch between these
devices, you can define the device in your toolchain compiler preprocessor.
*/
#if !defined (USE_HAL_DRIVER)
/**
* @brief Comment the line below if you will not use the peripherals drivers.
In this case, these drivers will not be included and the application code will
be based on direct access to peripherals registers
*/
/*#define USE_HAL_DRIVER */
#endif /* USE_HAL_DRIVER */
/**
* @brief CMSIS Device version number V1.0.0
*/
#define __STM32L4xx_CMSIS_DEVICE_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32L4xx_CMSIS_DEVICE_VERSION_SUB1 (0x00) /*!< [23:16] sub1 version */
#define __STM32L4xx_CMSIS_DEVICE_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */
#define __STM32L4xx_CMSIS_DEVICE_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32L4xx_CMSIS_DEVICE_VERSION ((__CMSIS_DEVICE_VERSION_MAIN << 24)\
|(__CMSIS_DEVICE_VERSION_SUB1 << 16)\
|(__CMSIS_DEVICE_VERSION_SUB2 << 8 )\
|(__CMSIS_DEVICE_VERSION_RC))
/**
* @}
*/
/** @addtogroup Device_Included
* @{
*/
#if defined(STM32L471xx)
#include "stm32l471xx.h"
#elif defined(STM32L475xx)
#include "stm32l475xx.h"
#elif defined(STM32L476xx)
#include "stm32l476xx.h"
#elif defined(STM32L485xx)
#include "stm32l485xx.h"
#elif defined(STM32L486xx)
#include "stm32l486xx.h"
#else
#error "Please select first the target STM32L4xx device used in your application (in stm32l4xx.h file)"
#endif
/**
* @}
*/
/** @addtogroup Exported_types
* @{
*/
typedef enum
{
RESET = 0,
SET = !RESET
} FlagStatus, ITStatus;
typedef enum
{
DISABLE = 0,
ENABLE = !DISABLE
} FunctionalState;
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
typedef enum
{
ERROR = 0,
SUCCESS = !ERROR
} ErrorStatus;
/**
* @}
*/
/** @addtogroup Exported_macros
* @{
*/
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
#define READ_BIT(REG, BIT) ((REG) & (BIT))
#define CLEAR_REG(REG) ((REG) = (0x0))
#define WRITE_REG(REG, VAL) ((REG) = (VAL))
#define READ_REG(REG) ((REG))
#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL)))
/**
* @}
*/
#if defined (USE_HAL_DRIVER)
#include "stm32l4xx_hal.h"
#endif /* USE_HAL_DRIVER */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __STM32L4xx_H */
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -2,25 +2,35 @@
****************************************************************************** ******************************************************************************
* @file system_stm32l1xx.h * @file system_stm32l1xx.h
* @author MCD Application Team * @author MCD Application Team
* @version V1.2.0 * @version V2.1.1
* @date 22-February-2013 * @date 31-March-2015
* @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Header File. * @brief CMSIS Cortex-M3 Device System Source File for STM32L1xx devices.
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2> * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
* *
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * Redistribution and use in source and binary forms, with or without modification,
* You may not use this file except in compliance with the License. * are permitted provided that the following conditions are met:
* You may obtain a copy of the License at: * 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* *
* http://www.st.com/software_license_agreement_liberty_v2 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* Unless required by applicable law or agreed to in writing, software * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* distributed under the License is distributed on an "AS IS" BASIS, * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* See the License for the specific language governing permissions and * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* limitations under the License. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
****************************************************************************** ******************************************************************************
*/ */
@ -55,7 +65,14 @@
/** @addtogroup STM32L1xx_System_Exported_types /** @addtogroup STM32L1xx_System_Exported_types
* @{ * @{
*/ */
/* This variable is updated in three ways:
1) by calling CMSIS function SystemCoreClockUpdate()
2) by calling HAL API function HAL_RCC_GetSysClockFreq()
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
Note: If you use this function to configure the system clock; then there
is no need to call the 2 first functions listed above, since SystemCoreClock
variable is updated automatically.
*/
extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
/** /**

View File

@ -0,0 +1,124 @@
/**
******************************************************************************
* @file system_stm32l4xx.h
* @author MCD Application Team
* @version V1.0.0
* @date 26-June-2015
* @brief CMSIS Cortex-M4 Device System Source File for STM32L4xx devices.
******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/** @addtogroup CMSIS
* @{
*/
/** @addtogroup stm32l4xx_system
* @{
*/
/**
* @brief Define to prevent recursive inclusion
*/
#ifndef __SYSTEM_STM32L4XX_H
#define __SYSTEM_STM32L4XX_H
#ifdef __cplusplus
extern "C" {
#endif
/** @addtogroup STM32L4xx_System_Includes
* @{
*/
/**
* @}
*/
/** @addtogroup STM32L4xx_System_Exported_types
* @{
*/
/* This variable is updated in three ways:
1) by calling CMSIS function SystemCoreClockUpdate()
2) by calling HAL API function HAL_RCC_GetSysClockFreq()
3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
Note: If you use this function to configure the system clock; then there
is no need to call the 2 first functions listed above, since SystemCoreClock
variable is updated automatically.
*/
extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */
extern const uint8_t AHBPrescTable[16]; /*!< AHB prescalers table values */
extern const uint32_t MSIRangeTable[12]; /*!< MSI ranges table values */
/**
* @}
*/
/** @addtogroup STM32L4xx_System_Exported_Constants
* @{
*/
/**
* @}
*/
/** @addtogroup STM32L4xx_System_Exported_Macros
* @{
*/
/**
* @}
*/
/** @addtogroup STM32L4xx_System_Exported_Functions
* @{
*/
extern void SystemInit(void);
extern void SystemCoreClockUpdate(void);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /*__SYSTEM_STM32L4XX_H */
/**
* @}
*/
/**
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

View File

@ -27,7 +27,6 @@
#define BOARD_ST_NUCLEO_L152RE #define BOARD_ST_NUCLEO_L152RE
#define BOARD_NAME "STMicroelectronics NUCLEO-L152RE" #define BOARD_NAME "STMicroelectronics NUCLEO-L152RE"
/* /*
* Board oscillators-related settings. * Board oscillators-related settings.
* NOTE: HSE not fitted. * NOTE: HSE not fitted.
@ -45,7 +44,7 @@
/* /*
* MCU type as defined in the ST header file stm32l1xx.h. * MCU type as defined in the ST header file stm32l1xx.h.
*/ */
#define STM32L1XX_MD #define STM32L152xE
/* /*
* IO pins assignments. * IO pins assignments.

View File

@ -11,7 +11,7 @@
<board_name>STMicroelectronics NUCLEO-L152RE</board_name> <board_name>STMicroelectronics NUCLEO-L152RE</board_name>
<board_id>ST_NUCLEO_L152RE</board_id> <board_id>ST_NUCLEO_L152RE</board_id>
<board_functions></board_functions> <board_functions></board_functions>
<subtype>STM32L1XX_HD</subtype> <subtype>STM32L152xE</subtype>
<clocks <clocks
HSEFrequency="0" HSEFrequency="0"
HSEBypass="true" HSEBypass="true"

View File

@ -27,7 +27,6 @@
#define BOARD_ST_STM32L_DISCOVERY #define BOARD_ST_STM32L_DISCOVERY
#define BOARD_NAME "ST STM32L-Discovery" #define BOARD_NAME "ST STM32L-Discovery"
/* /*
* Board oscillators-related settings. * Board oscillators-related settings.
* NOTE: HSE not fitted. * NOTE: HSE not fitted.
@ -45,7 +44,7 @@
/* /*
* MCU type as defined in the ST header file stm32l1xx.h. * MCU type as defined in the ST header file stm32l1xx.h.
*/ */
#define STM32L1XX_MD #define STM32L152xB
/* /*
* IO pins assignments. * IO pins assignments.

View File

@ -11,7 +11,7 @@
<board_name>ST STM32L-Discovery</board_name> <board_name>ST STM32L-Discovery</board_name>
<board_id>ST_STM32L_DISCOVERY</board_id> <board_id>ST_STM32L_DISCOVERY</board_id>
<board_functions></board_functions> <board_functions></board_functions>
<subtype>STM32L1XX_MD</subtype> <subtype>STM32L152xB</subtype>
<clocks <clocks
HSEFrequency="0" HSEFrequency="0"
HSEBypass="true" HSEBypass="true"

View File

@ -24,6 +24,13 @@
* - STM32_HSE_BYPASS (optionally). * - STM32_HSE_BYPASS (optionally).
* . * .
* One of the following macros must also be defined: * One of the following macros must also be defined:
* - STM32L100xB, STM32L100xBA, STM32L100xC.
* - STM32L151xB, STM32L151xBA, STM32L151xC, STM32L151xCA,
* STM32L151xD, STM32L151xDX, STM32L151xE.
* - STM32L152xB, STM32L152xBA, STM32L152xC, STM32L152xCA,
* STM32L152xD, STM32L152xDX, STM32L152xE.
* - STM32L162xC, STM32L162xCA, STM32L162xD, STM32L162xDX,
* STM32L162xE.
* - STM32L1XX_MD for Ultra Low Power Medium-density devices. * - STM32L1XX_MD for Ultra Low Power Medium-density devices.
* - STM32L1XX_MDP for Ultra Low Power Medium-density Plus devices. * - STM32L1XX_MDP for Ultra Low Power Medium-density Plus devices.
* - STM32L1XX_HD for Ultra Low Power High-density devices. * - STM32L1XX_HD for Ultra Low Power High-density devices.
@ -46,13 +53,22 @@
* @name Platform identification * @name Platform identification
* @{ * @{
*/ */
#if defined(STM32L1XX_MD) || defined(__DOXYGEN__) #if defined(STM32L100xB) || defined(STM32L151xB) || \
defined(STM32L152xB) || defined(__DOXYGEN__)
#define PLATFORM_NAME "STM32L1xx Ultra Low Power Medium Density" #define PLATFORM_NAME "STM32L1xx Ultra Low Power Medium Density"
#elif defined(STM32L1XX_MDP) #elif defined(STM32L100xBA) || defined(STM32L100xC) || \
defined(STM32L151xBA) || defined(STM32L151xC) || \
defined(STM32L151xCA) || defined(STM32L152xBA) || \
defined(STM32L152xC) || defined(STM32L152xCA) || \
defined(STM32L162xC) || defined(STM32L162xCA)
#define PLATFORM_NAME "STM32L1xx Ultra Low Power Medium Density Plus" #define PLATFORM_NAME "STM32L1xx Ultra Low Power Medium Density Plus"
#elif defined(STM32L1XX_HD) #elif defined(STM32L151xD) || defined(STM32L151xDX) || \
defined(STM32L151xE) || defined(STM32L152xD) || \
defined(STM32L152xDX) || defined(STM32L152xE) || \
defined(STM32L162xD) || defined(STM32L162xDX) || \
defined(STM32L162xE)
#define PLATFORM_NAME "STM32L1xx Ultra Low Power High Density" #define PLATFORM_NAME "STM32L1xx Ultra Low Power High Density"
#else #else

View File

@ -25,6 +25,28 @@
#ifndef _STM32_REGISTRY_H_ #ifndef _STM32_REGISTRY_H_
#define _STM32_REGISTRY_H_ #define _STM32_REGISTRY_H_
#if defined(STM32L100xB) || defined(STM32L151xB) || \
defined(STM32L152xB) || defined(__DOXYGEN__)
#define STM32L1XX_MD
#elif defined(STM32L100xBA) || defined(STM32L100xC) || \
defined(STM32L151xBA) || defined(STM32L151xC) || \
defined(STM32L151xCA) || defined(STM32L152xBA) || \
defined(STM32L152xC) || defined(STM32L152xCA) || \
defined(STM32L162xC) || defined(STM32L162xCA)
#define STM32L1XX_MDP
#elif defined(STM32L151xD) || defined(STM32L151xDX) || \
defined(STM32L151xE) || defined(STM32L152xD) || \
defined(STM32L152xDX) || defined(STM32L152xE) || \
defined(STM32L162xD) || defined(STM32L162xDX) || \
defined(STM32L162xE)
#define STM32L1XX_HD
#else
#error "STM32L1xx device not specified"
#endif
/*===========================================================================*/ /*===========================================================================*/
/* Platform capabilities. */ /* Platform capabilities. */
/*===========================================================================*/ /*===========================================================================*/