mcu_hi3321_watch/kernel/osal/include/memory/osal_barrier.h
2025-05-26 20:15:20 +08:00

146 lines
4.1 KiB
C

/*
* Copyright (c) CompanyNameMagicTag 2021-2022. All rights reserved.
* Description: OS Abstract Layer.
*/
/**
* @defgroup osal_barrier osal_barrier
*/
#ifndef __OSAL_BARRIER_H__
#define __OSAL_BARRIER_H__
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
/**
* @ingroup osal_barrier
* @brief General basic CPU memory barriers
*
* @par Description:
* The memory barrier mb() function ensures that any memory access that appears before the barrier is completed
* before the execution of any memory access that appears after the barrier.
*
* @par Support System:
* linux.
*/
void osal_mb(void);
/**
* @ingroup osal_barrier
* @brief Read basic CPU memory barriers
*
* @par Description:
* The read memory barrier rmb() function ensures that any read that appears before the barrier is completed
* before the execution of any read that appears after the barrier.
*
* @par Support System:
* linux.
*/
void osal_rmb(void);
/**
* @ingroup osal_barrier
* @brief Write basic CPU memory barriers
*
* @par Description:
* The write memory barrier wmb() function ensures that any write that appears before the barrier is completed
* before the execution of any write that appears after the barrier.
*
* @par Support System:
* linux.
*/
void osal_wmb(void);
/**
* @ingroup osal_barrier
* @brief General basic CPU memory barriers, SMP conditional.
*
* @par Description:
* Corresponding SMP versions of osal_mb.
*
* @par Support System:
* linux.
*/
void osal_smp_mb(void);
/**
* @ingroup osal_barrier
* @brief Read basic CPU memory barriers, SMP conditional.
*
* @par Description:
* Corresponding SMP versions of osal_rmb.
*
* @par Support System:
* linux.
*/
void osal_smp_rmb(void);
/**
* @ingroup osal_barrier
* @brief Write basic CPU memory barriers, SMP conditional.
*
* @par Description:
* Corresponding SMP versions of osal_wmb.
*
* @par Support System:
* linux.
*/
void osal_smp_wmb(void);
/**
* @ingroup osal_barrier
* @brief Instruction Synchronization Barrier.
*
* @par Description:
* Instruction Synchronization Barrier flushes the pipeline in the processor, so that all instructions following
* the ISB are fetched from cache or memory, after the instruction has been completed. It ensures that the effects
* of context altering operations, such as changing the ASID, or completed TLB maintenance operations,
* or branch predictor maintenance operations, as well as all changes to the CP15 registers,
* executed before the ISB instruction are visible to the instructions fetched after the ISB.
* In addition, the ISB instruction ensures that any branches that appear in program order after it
* are always written into the branch prediction logic with the context that is visible after the ISB instruction.
* This is required to ensure correct execution of the instruction stream.
*
* @par Support System:
* linux liteos.
*/
void osal_isb(void);
/**
* @ingroup osal_barrier
* @brief Data Synchronization Barrier.
*
* @par Description:
* Data Synchronization Barrier acts as a special kind of memory barrier. No instruction in program order after
* this instruction executes until this instruction completes. This instruction completes when:
* · All explicit memory accesses before this instruction complete.
* · All Cache, Branch predictor and TLB maintenance operations before this instruction complete.
*
* @par Support System:
* linux liteos.
*/
void osal_dsb(void);
/**
* @ingroup osal_barrier
* @brief Data Memory Barrier.
*
* @par Description:
* Data Memory Barrier acts as a memory barrier. It ensures that all explicit memory accesses that appear in program
* order before the DMB instruction are observed before any explicit memory accesses that appear in program order
* after the DMB instruction. It does not affect the ordering of any other instructions executing on the processor.
*
* @par Support System:
* linux liteos.
*/
void osal_dmb(void);
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif /* __OSAL_BARRIER_H__ */