feat: synchronizing arch api
命名规范:修改少量Arch接口,命名规范化调整: 1.修改arch/include下接口声明,所有arch对外提供调用函数均以ArchXX命名 2.提取多个架构均有实现的公共函数声明至arch/include对应头文件中以供外部调用,并修改命名格式为ArchXX 3.修改OS_HWI_WITH_ARG为LOSCFG_PLATFORM_HWI_WITH_ARG并移至los_config.h中 4.typedef VOID (*OS_TICK_HANDLER)(VOID);暂时移至arch/include/los_timer.h中 5.实现atomic原子操作相关接口,位于arch/include/los_atomic.h,arm架构部分与汇编指令相关原子操作接口使用ARCH_ARM宏进行控制是否编译 BREAKING CHANGE: 1.修改arch/include下接口,以ArchXX命名函数 2.提取公共函数声明:ArchAtomicXchg32bits、ArchAtomicDecRet、ArchAtomicCmpXchg32bits 3.新增部分原子操作c内联实现 Close #I4N7XV Signed-off-by: LiteOS2021 <dinglu@huawei.com>
This commit is contained in:
@@ -41,7 +41,7 @@ extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
VOID HalArchInit(VOID);
|
||||
VOID ArchInit(VOID);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
||||
@@ -40,7 +40,210 @@ extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
typedef volatile INT32 Atomic;
|
||||
typedef volatile INT64 Atomic64;
|
||||
|
||||
STATIC INLINE INT32 ArchAtomicRead(const Atomic *v)
|
||||
{
|
||||
return *v;
|
||||
}
|
||||
|
||||
STATIC INLINE VOID ArchAtomicSet(Atomic *v, INT32 setVal)
|
||||
{
|
||||
*v = setVal;
|
||||
}
|
||||
|
||||
STATIC INLINE INT32 ArchAtomicAdd(Atomic *v, INT32 addVal)
|
||||
{
|
||||
INT32 val;
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
*v += addVal;
|
||||
val = *v;
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
STATIC INLINE INT32 ArchAtomicSub(Atomic *v, INT32 subVal)
|
||||
{
|
||||
INT32 val;
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
*v -= subVal;
|
||||
val = *v;
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
STATIC INLINE VOID ArchAtomicInc(Atomic *v)
|
||||
{
|
||||
(VOID)ArchAtomicAdd(v, 1);
|
||||
}
|
||||
|
||||
STATIC INLINE VOID ArchAtomicDec(Atomic *v)
|
||||
{
|
||||
(VOID)ArchAtomicSub(v, 1);
|
||||
}
|
||||
|
||||
STATIC INLINE INT32 ArchAtomicIncRet(Atomic *v)
|
||||
{
|
||||
return ArchAtomicAdd(v, 1);
|
||||
}
|
||||
|
||||
#ifndef ARCH_ARM
|
||||
STATIC INLINE INT32 ArchAtomicDecRet(Atomic *v)
|
||||
{
|
||||
return ArchAtomicSub(v, 1);
|
||||
}
|
||||
|
||||
STATIC INLINE INT32 ArchAtomicXchg32bits(Atomic *v, INT32 val)
|
||||
{
|
||||
INT32 prevVal;
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
prevVal = *v;
|
||||
*v = val;
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return prevVal;
|
||||
}
|
||||
|
||||
STATIC INLINE BOOL ArchAtomicCmpXchg32bits(Atomic *v, INT32 val, INT32 oldVal)
|
||||
{
|
||||
INT32 prevVal;
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
prevVal = *v;
|
||||
if (prevVal == oldVal) {
|
||||
*v = val;
|
||||
}
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return prevVal != oldVal;
|
||||
}
|
||||
#endif
|
||||
|
||||
STATIC INLINE INT64 ArchAtomic64Read(const Atomic64 *v)
|
||||
{
|
||||
INT64 val;
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
val = *v;
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
STATIC INLINE VOID ArchAtomic64Set(Atomic64 *v, INT64 setVal)
|
||||
{
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
*v = setVal;
|
||||
LOS_IntRestore(intSave);
|
||||
}
|
||||
|
||||
STATIC INLINE INT64 ArchAtomic64Add(Atomic64 *v, INT64 addVal)
|
||||
{
|
||||
INT64 val;
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
*v += addVal;
|
||||
val = *v;
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
STATIC INLINE INT64 ArchAtomic64Sub(Atomic64 *v, INT64 subVal)
|
||||
{
|
||||
INT64 val;
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
*v -= subVal;
|
||||
val = *v;
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
STATIC INLINE VOID ArchAtomic64Inc(Atomic64 *v)
|
||||
{
|
||||
(VOID)ArchAtomic64Add(v, 1);
|
||||
}
|
||||
|
||||
STATIC INLINE INT64 ArchAtomic64IncRet(Atomic64 *v)
|
||||
{
|
||||
return ArchAtomic64Add(v, 1);
|
||||
}
|
||||
|
||||
STATIC INLINE VOID ArchAtomic64Dec(Atomic64 *v)
|
||||
{
|
||||
(VOID)ArchAtomic64Sub(v, 1);
|
||||
}
|
||||
|
||||
STATIC INLINE INT64 ArchAtomic64DecRet(Atomic64 *v)
|
||||
{
|
||||
return ArchAtomic64Sub(v, 1);
|
||||
}
|
||||
|
||||
STATIC INLINE INT64 ArchAtomicXchg64bits(Atomic64 *v, INT64 val)
|
||||
{
|
||||
INT64 prevVal;
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
prevVal = *v;
|
||||
*v = val;
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return prevVal;
|
||||
}
|
||||
|
||||
STATIC INLINE BOOL ArchAtomicCmpXchg64bits(Atomic64 *v, INT64 val, INT64 oldVal)
|
||||
{
|
||||
INT64 prevVal;
|
||||
UINT32 intSave;
|
||||
|
||||
intSave = LOS_IntLock();
|
||||
prevVal = *v;
|
||||
if (prevVal == oldVal) {
|
||||
*v = val;
|
||||
}
|
||||
LOS_IntRestore(intSave);
|
||||
|
||||
return prevVal != oldVal;
|
||||
}
|
||||
|
||||
#define LOS_AtomicRead ArchAtomicRead
|
||||
#define LOS_AtomicSet ArchAtomicSet
|
||||
#define LOS_AtomicAdd ArchAtomicAdd
|
||||
#define LOS_AtomicSub ArchAtomicSub
|
||||
#define LOS_AtomicInc ArchAtomicInc
|
||||
#define LOS_AtomicIncRet ArchAtomicIncRet
|
||||
#define LOS_AtomicDec ArchAtomicDec
|
||||
#define LOS_AtomicDecRet ArchAtomicDecRet
|
||||
#define LOS_Atomic64Read ArchAtomic64Read
|
||||
#define LOS_Atomic64Set ArchAtomic64Set
|
||||
#define LOS_Atomic64Add ArchAtomic64Add
|
||||
#define LOS_Atomic64Sub ArchAtomic64Sub
|
||||
#define LOS_Atomic64Inc ArchAtomic64Inc
|
||||
#define LOS_Atomic64IncRet ArchAtomic64IncRet
|
||||
#define LOS_Atomic64Dec ArchAtomic64Dec
|
||||
#define LOS_Atomic64DecRet ArchAtomic64DecRet
|
||||
#define LOS_AtomicXchg32bits ArchAtomicXchg32bits
|
||||
#define LOS_AtomicXchg64bits ArchAtomicXchg64bits
|
||||
#define LOS_AtomicCmpXchg32bits ArchAtomicCmpXchg32bits
|
||||
#define LOS_AtomicCmpXchg64bits ArchAtomicCmpXchg64bits
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ extern "C" {
|
||||
* <ul><li>los_context.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see None.
|
||||
*/
|
||||
extern VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOID *topStack);
|
||||
VOID *ArchTskStackInit(UINT32 taskID, UINT32 stackSize, VOID *topStack);
|
||||
|
||||
/**
|
||||
* @ingroup los_context
|
||||
@@ -84,7 +84,7 @@ extern VOID *HalTskStackInit(UINT32 taskID, UINT32 stackSize, VOID *topStack);
|
||||
* <ul><li>los_context.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see None.
|
||||
*/
|
||||
LITE_OS_SEC_TEXT_MINOR NORETURN VOID HalSysExit(VOID);
|
||||
LITE_OS_SEC_TEXT_MINOR NORETURN VOID ArchSysExit(VOID);
|
||||
|
||||
/**
|
||||
* @ingroup los_context
|
||||
@@ -103,10 +103,9 @@ LITE_OS_SEC_TEXT_MINOR NORETURN VOID HalSysExit(VOID);
|
||||
* <ul><li>los_context.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see None.
|
||||
*/
|
||||
extern VOID HalTaskSchedule(VOID);
|
||||
VOID ArchTaskSchedule(VOID);
|
||||
|
||||
typedef VOID (*OS_TICK_HANDLER)(VOID);
|
||||
UINT32 HalStartSchedule(VOID);
|
||||
UINT32 ArchStartSchedule(VOID);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
||||
@@ -40,14 +40,6 @@ extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* *
|
||||
* @ingroup los_interrupt
|
||||
* Configuration item for interrupt with argument
|
||||
*/
|
||||
#ifndef OS_HWI_WITH_ARG
|
||||
#define OS_HWI_WITH_ARG 0
|
||||
#endif
|
||||
|
||||
typedef UINT32 HWI_HANDLE_T;
|
||||
|
||||
typedef UINT16 HWI_PRIOR_T;
|
||||
@@ -56,7 +48,7 @@ typedef UINT16 HWI_MODE_T;
|
||||
|
||||
typedef UINT32 HWI_ARG_T;
|
||||
|
||||
#if (OS_HWI_WITH_ARG == 1)
|
||||
#if (LOSCFG_PLATFORM_HWI_WITH_ARG == 1)
|
||||
typedef VOID (*HWI_PROC_FUNC)(VOID *parm);
|
||||
#else
|
||||
typedef VOID (*HWI_PROC_FUNC)(void);
|
||||
@@ -67,20 +59,20 @@ extern UINT32 __stack_chk_guard;
|
||||
|
||||
extern VOID __stack_chk_fail(VOID);
|
||||
|
||||
UINT32 HalIsIntActive(VOID);
|
||||
#define OS_INT_ACTIVE (HalIsIntActive())
|
||||
UINT32 ArchIsIntActive(VOID);
|
||||
#define OS_INT_ACTIVE (ArchIsIntActive())
|
||||
#define OS_INT_INACTIVE (!(OS_INT_ACTIVE))
|
||||
#define LOS_HwiCreate HalHwiCreate
|
||||
#define LOS_HwiDelete HalHwiDelete
|
||||
#define LOS_HwiCreate ArchHwiCreate
|
||||
#define LOS_HwiDelete ArchHwiDelete
|
||||
|
||||
UINT32 HalIntLock(VOID);
|
||||
#define LOS_IntLock HalIntLock
|
||||
UINT32 ArchIntLock(VOID);
|
||||
#define LOS_IntLock ArchIntLock
|
||||
|
||||
VOID HalIntRestore(UINT32 intSave);
|
||||
#define LOS_IntRestore HalIntRestore
|
||||
VOID ArchIntRestore(UINT32 intSave);
|
||||
#define LOS_IntRestore ArchIntRestore
|
||||
|
||||
UINT32 HalIntUnLock(VOID);
|
||||
#define LOS_IntUnLock HalIntUnLock
|
||||
UINT32 ArchIntUnLock(VOID);
|
||||
#define LOS_IntUnLock ArchIntUnLock
|
||||
|
||||
/**
|
||||
* @ingroup los_interrupt
|
||||
@@ -105,7 +97,7 @@ UINT32 HalIntUnLock(VOID);
|
||||
* <ul><li>los_interrupt.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see None.
|
||||
*/
|
||||
extern UINT32 HalHwiDelete(HWI_HANDLE_T hwiNum);
|
||||
UINT32 ArchHwiDelete(HWI_HANDLE_T hwiNum);
|
||||
|
||||
/**
|
||||
* @ingroup los_interrupt
|
||||
@@ -137,11 +129,11 @@ extern UINT32 HalHwiDelete(HWI_HANDLE_T hwiNum);
|
||||
* <ul><li>los_interrupt.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see None.
|
||||
*/
|
||||
extern UINT32 HalHwiCreate(HWI_HANDLE_T hwiNum,
|
||||
HWI_PRIOR_T hwiPrio,
|
||||
HWI_MODE_T mode,
|
||||
HWI_PROC_FUNC handler,
|
||||
HWI_ARG_T arg);
|
||||
UINT32 ArchHwiCreate(HWI_HANDLE_T hwiNum,
|
||||
HWI_PRIOR_T hwiPrio,
|
||||
HWI_MODE_T mode,
|
||||
HWI_PROC_FUNC handler,
|
||||
HWI_ARG_T arg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
||||
@@ -79,11 +79,11 @@ typedef struct {
|
||||
MpuMemType memType;
|
||||
} MPU_CFG_PARA;
|
||||
|
||||
VOID HalMpuEnable(UINT32 defaultRegionEnable);
|
||||
VOID HalMpuDisable();
|
||||
UINT32 HalMpuSetRegion(UINT32 regionId, MPU_CFG_PARA *para);
|
||||
UINT32 HalMpuDisableRegion(UINT32 regionId);
|
||||
INT32 HalMpuUnusedRegionGet(VOID);
|
||||
VOID ArchMpuEnable(UINT32 defaultRegionEnable);
|
||||
VOID ArchMpuDisable();
|
||||
UINT32 ArchMpuSetRegion(UINT32 regionId, MPU_CFG_PARA *para);
|
||||
UINT32 ArchMpuDisableRegion(UINT32 regionId);
|
||||
INT32 ArchMpuUnusedRegionGet(VOID);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
||||
@@ -52,11 +52,13 @@ extern "C" {
|
||||
#define RTC_CALIBRATE_SLEEP_TIME 8
|
||||
#define MACHINE_CYCLE_DEALAY_TIMES (LOSCFG_BASE_CORE_TICK_PER_SECOND << 2)
|
||||
|
||||
VOID HalTickLock(VOID);
|
||||
typedef VOID (*OS_TICK_HANDLER)(VOID);
|
||||
|
||||
VOID HalTickUnlock(VOID);
|
||||
VOID ArchTickLock(VOID);
|
||||
|
||||
UINT32 HalEnterSleep(VOID);
|
||||
VOID ArchTickUnlock(VOID);
|
||||
|
||||
UINT32 ArchEnterSleep(VOID);
|
||||
|
||||
/**
|
||||
* @ingroup los_timer
|
||||
@@ -78,7 +80,7 @@ UINT32 HalEnterSleep(VOID);
|
||||
* <ul><li>los_timer.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see
|
||||
*/
|
||||
UINT64 HalGetTickCycle(UINT32 *period);
|
||||
UINT64 ArchGetTickCycle(UINT32 *period);
|
||||
|
||||
/**
|
||||
* @ingroup los_timer
|
||||
@@ -100,7 +102,7 @@ UINT64 HalGetTickCycle(UINT32 *period);
|
||||
* <ul><li>los_timer.h: the header file that contains the API declaration.</li></ul>
|
||||
* @see None
|
||||
*/
|
||||
extern VOID HalSysTickReload(UINT64 nextResponseTime);
|
||||
VOID ArchSysTickReload(UINT64 nextResponseTime);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
|
||||
Reference in New Issue
Block a user