| /* |
| * Copyright (c) 2001-2019, Arm Limited and Contributors. All rights reserved. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| |
| #ifndef __CC_HAL_H__ |
| #define __CC_HAL_H__ |
| |
| /*! |
| @file |
| @brief This file contains HAL definitions and APIs. |
| */ |
| |
| #include <stdint.h> |
| #include "cc_hal_plat.h" |
| #include "cc_pal_types_plat.h" |
| |
| /*! HAL return code definitions. */ |
| typedef enum { |
| CC_HAL_OK = 0, |
| CC_HAL_ENODEV, /* Device not opened or does not exist */ |
| CC_HAL_EINTERNAL, /* Internal driver error (check system log) */ |
| CC_HAL_MAPFAILED, |
| CC_HAL_ENOTSUP, /* Unsupported function/option */ |
| CC_HAL_ENOPERM, /* Not enough permissions for request */ |
| CC_HAL_EINVAL, /* Invalid parameters */ |
| CC_HAL_ENORSC, /* No resources available (e.g., memory) */ |
| CC_HAL_RESERVE32B = 0x7FFFFFFFL |
| } CCHalRetCode_t; |
| |
| /*! |
| * @brief This function is used to map ARM TrustZone CryptoCell TEE registers to Host virtual address space. |
| It is called by ::CC_LibInit, and returns a non-zero value in case of failure. |
| The existing implementation supports Linux environment. In case virtual addressing is not used, the function can be minimized to contain only the |
| following line, and return OK: |
| gCcRegBase = (uint32_t)DX_BASE_CC; |
| @return CC_HAL_OK on success. |
| @return A non-zero value in case of failure. |
| */ |
| int CC_HalInit(void); |
| |
| |
| /*! |
| * @brief This function is used to wait for the IRR interrupt signal. |
| * |
| * @return CCError_t - return CC_OK upon success |
| */ |
| CCError_t CC_HalWaitInterrupt(uint32_t data /*!< [in] The interrupt bits to wait upon. */ ); |
| |
| /*! |
| * @brief This function is used to wait for the IRR interrupt signal. |
| * The existing implementation performs a "busy wait" on the IRR. |
| * |
| * @return CCError_t - return CC_OK upon success |
| */ |
| CCError_t CC_HalWaitInterruptRND(uint32_t data); |
| |
| /*! |
| * @brief This function clears the DSCRPTR_COMPLETION bit in the ICR signal. |
| */ |
| void CC_HalClearInterrupt(uint32_t data); |
| |
| /*! |
| * @brief This function is called by CC_LibInit and is used for initializing the ARM TrustZone CryptoCell TEE cache settings registers. |
| The existing implementation sets the registers to their default values in HCCC cache coherency mode |
| (ARCACHE = 0x2, AWCACHE = 0x7, AWCACHE_LAST = 0x7). |
| These values should be changed by the customer in case the customer's platform requires different HCCC values, or in case SCCC is needed |
| (the values for SCCC are ARCACHE = 0x3, AWCACHE = 0x3, AWCACHE_LAST = 0x3). |
| |
| * @return void |
| */ |
| void CC_HalInitHWCacheParams(void); |
| |
| /*! |
| * @brief This function is used to unmap ARM TrustZone CryptoCell TEE registers' virtual address. |
| It is called by CC_LibFini, and returns a non-zero value in case of failure. |
| In case virtual addressing is not used, the function can be minimized to be an empty function returning OK. |
| @return CC_HAL_OK on success. |
| @return A non-zero value in case of failure. |
| */ |
| int CC_HalTerminate(void); |
| |
| /*! |
| * @brief This function is used to clear the interrupt vector. |
| |
| * @return void. |
| */ |
| void CC_HalClearInterruptBit(uint32_t data /*!< [in] The interrupt bits to clear. */); |
| |
| /*! |
| * @brief This function is used to mask IRR interrupts. |
| |
| * @return void. |
| */ |
| void CC_HalMaskInterrupt(uint32_t data /*!< [in] The interrupt bits to mask. */); |
| |
| |
| #endif |
| |