/**
  ******************************************************************************
  * @file    se_callgate.h
  * @author  MCD Application Team
  * @brief   This file contains definitions for Secure Engine CALLGATE module
  *          functionalities.
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright(c) 2017 STMicroelectronics International N.V.
  * All rights reserved.</center></h2>
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted, provided that the following conditions are met:
  *
  * 1. Redistribution 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 other
  *    contributors to this software may be used to endorse or promote products
  *    derived from this software without specific written permission.
  * 4. This software, including modifications and/or derivative works of this
  *    software, must execute solely and exclusively on microcontroller or
  *    microprocessor devices manufactured by or for STMicroelectronics.
  * 5. Redistribution and use of this software other than as permitted under
  *    this license is void and will automatically terminate your rights under
  *    this license.
  *
  * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
  * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
  * SHALL STMICROELECTRONICS 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.
  *
  ******************************************************************************
  */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef SE_CALLGATE_H
#define SE_CALLGATE_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "se_def.h"


/** @addtogroup SE Secure Engine
  * @{
  */

/** @addtogroup SE_CORE SE Core
  * @{
  */

/** @addtogroup SE_CALLGATE SE CallGate
  * @{
  */

/** @defgroup SE_CALLGATE_Exported_Constants Exported Constants
  * @{
  */

/**
  * @brief  Secure Engine CallGate Function ID structure definition
  */
typedef enum
{
  /*Generic functions*/
  SE_INIT_ID = 0x00U,                                    /*!< Secure Engine Init     */

  /* CRYPTO Low level functions for bootloader only */
  SE_CRYPTO_LL_ENCRYPT_INIT_ID    = 0x01U,         /*!< CRYPTO Low level Encrypt_Init               */
  SE_CRYPTO_LL_ENCRYPT_APPEND_ID  = 0x02U,         /*!< CRYPTO Low level Encrypt_Append             */
  SE_CRYPTO_LL_ENCRYPT_FINISH_ID  = 0x03U,         /*!< CRYPTO Low level Encrypt_Finish             */
  SE_CRYPTO_LL_DECRYPT_INIT_ID    = 0x04U,         /*!< CRYPTO Low level Decrypt_Init               */
  SE_CRYPTO_LL_DECRYPT_APPEND_ID  = 0x05U,         /*!< CRYPTO Low level Decrypt_Append             */
  SE_CRYPTO_LL_DECRYPT_FINISH_ID  = 0x06U,         /*!< CRYPTO Low level Decrypt_Finish             */
  SE_CRYPTO_LL_AUTHENTICATE_FW_INIT_ID    = 0x07U, /*!< CRYPTO Low level Authenticate_FW_Init       */
  SE_CRYPTO_LL_AUTHENTICATE_FW_APPEND_ID  = 0x08U, /*!< CRYPTO Low level Authenticate_FW_Append     */
  SE_CRYPTO_LL_AUTHENTICATE_FW_FINISH_ID  = 0x09U, /*!< CRYPTO Low level Authenticate_FW_Finish     */

  /* CRYPTO High level functions for bootloader only */
  SE_CRYPTO_HL_AUTHENTICATE_METADATA = 0x10U,       /*!< CRYPTO High level Authenticate Metadata */

  /* Next ranges are kept for future use (additional crypto schemes, additional user code) */
  SE_APP_GET_ACTIVE_FW_INFO = 0x20U,                     /*!< User Application retrieves the Active Firmware Info */
  SE_APP_USER_FUNC1         = 0x21U,                     /*!< User Application code to ... */
  SE_APP_USER_FUNC2         = 0x22U,                     /*!< User Application code to ... */

  /* BootInfo access functions (bootloader only) */
  SE_BOOT_INFO_READ_ALL_ID        = 0x80U,               /*!< SE_INFO_ReadBootInfo (bootloader only)     */
  SE_BOOT_INFO_WRITE_ALL_ID       = 0x81U,               /*!< SE_INFO_WriteBootInfo (bootloader only)    */

  /* SE IMG interface (bootloader only) */
  SE_IMG_READ = 0x92U,                                   /*!< SFU reads a Flash protected area (bootloader only) */
  SE_IMG_WRITE   = 0x93U,                                /*!< SFU write a Flash protected area (bootloader only) */

  /* LOCK service to be used by the bootloader only */
  SE_LOCK_RESTRICT_SERVICES   = 0x100U,                   /*!< SFU lock part of SE services (bootloader only) */

} SE_FunctionIDTypeDef;

/**
  * @}
  */

/** @addtogroup SE_CALLGATE_Exported_Functions
  * @{
  */
SE_ErrorStatus SE_CallGate(SE_FunctionIDTypeDef eID, SE_StatusTypeDef *peSE_Status, ...);

/**
  * @}
  */

/**
  * @}
  */

/**
  * @}
  */

/**
  * @}
  */

#ifdef __cplusplus
}
#endif

#endif /* SE_CALLGATE_H */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/


