commit
81cdf0c6c3
|
@ -36,10 +36,6 @@
|
||||||
#define CPSR_MODE_USR 0x10
|
#define CPSR_MODE_USR 0x10
|
||||||
#define CPSR_MODE_MASK 0x1f
|
#define CPSR_MODE_MASK 0x1f
|
||||||
|
|
||||||
#define DSB __asm__ volatile("dsb" ::: "memory")
|
|
||||||
#define ISB __asm__ volatile("isb" ::: "memory")
|
|
||||||
#define DMB __asm__ volatile("dmb" ::: "memory")
|
|
||||||
|
|
||||||
STATIC INLINE UINT32 OsArmReadSctlr(VOID)
|
STATIC INLINE UINT32 OsArmReadSctlr(VOID)
|
||||||
{
|
{
|
||||||
UINT32 val;
|
UINT32 val;
|
||||||
|
|
|
@ -45,7 +45,6 @@ extern VOID HalClockIrqClear(VOID);
|
||||||
extern VOID HalClockInit(VOID);
|
extern VOID HalClockInit(VOID);
|
||||||
extern UINT64 HalClockGetCycles(VOID);
|
extern UINT64 HalClockGetCycles(VOID);
|
||||||
extern VOID HalDelayUs(UINT32 usecs);
|
extern VOID HalDelayUs(UINT32 usecs);
|
||||||
extern UINT64 hi_sched_clock(VOID);
|
|
||||||
extern UINT32 HalClockGetTickTimerCycles(VOID);
|
extern UINT32 HalClockGetTickTimerCycles(VOID);
|
||||||
extern VOID HalClockTickTimerReload(UINT64 cycles);
|
extern VOID HalClockTickTimerReload(UINT64 cycles);
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ extern "C" {
|
||||||
#define DSB __asm__ volatile("dsb" ::: "memory")
|
#define DSB __asm__ volatile("dsb" ::: "memory")
|
||||||
#define DMB __asm__ volatile("dmb" ::: "memory")
|
#define DMB __asm__ volatile("dmb" ::: "memory")
|
||||||
#define ISB __asm__ volatile("isb" ::: "memory")
|
#define ISB __asm__ volatile("isb" ::: "memory")
|
||||||
|
#define WFI __asm__ volatile("wfi" ::: "memory")
|
||||||
#define BARRIER __asm__ volatile("":::"memory")
|
#define BARRIER __asm__ volatile("":::"memory")
|
||||||
|
|
||||||
#define ARM_SYSREG_READ(REG) \
|
#define ARM_SYSREG_READ(REG) \
|
||||||
|
|
|
@ -162,7 +162,7 @@ VOID HalDelayUs(UINT32 usecs)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT64 hi_sched_clock(VOID)
|
DEPRECATED UINT64 hi_sched_clock(VOID)
|
||||||
{
|
{
|
||||||
return LOS_CurrNanosec();
|
return LOS_CurrNanosec();
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,32 +143,17 @@ LITE_OS_SEC_TEXT_INIT VOID OsUserTaskStackInit(TaskContext *context, TSK_ENTRY_F
|
||||||
context->PC = (UINTPTR)taskEntry;
|
context->PC = (UINTPTR)taskEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID Sev(VOID)
|
DEPRECATED VOID Dmb(VOID)
|
||||||
{
|
|
||||||
__asm__ __volatile__ ("sev" : : : "memory");
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID Wfe(VOID)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__ ("wfe" : : : "memory");
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID Wfi(VOID)
|
|
||||||
{
|
|
||||||
__asm__ __volatile__ ("wfi" : : : "memory");
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID Dmb(VOID)
|
|
||||||
{
|
{
|
||||||
__asm__ __volatile__ ("dmb" : : : "memory");
|
__asm__ __volatile__ ("dmb" : : : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID Dsb(VOID)
|
DEPRECATED VOID Dsb(VOID)
|
||||||
{
|
{
|
||||||
__asm__ __volatile__("dsb" : : : "memory");
|
__asm__ __volatile__("dsb" : : : "memory");
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID Isb(VOID)
|
DEPRECATED VOID Isb(VOID)
|
||||||
{
|
{
|
||||||
__asm__ __volatile__("isb" : : : "memory");
|
__asm__ __volatile__("isb" : : : "memory");
|
||||||
}
|
}
|
||||||
|
|
|
@ -183,7 +183,7 @@ extern UINT32 LOS_ExcRegHook(EXC_PROC_FUNC excHook);
|
||||||
* los_exc.h: the header file that contains the API declaration.
|
* los_exc.h: the header file that contains the API declaration.
|
||||||
* @see None.
|
* @see None.
|
||||||
*/
|
*/
|
||||||
VOID LOS_Panic(const CHAR *fmt, ...) __attribute__ ((noreturn));
|
VOID LOS_Panic(const CHAR *fmt, ...) NORETURN;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_exc
|
* @ingroup los_exc
|
||||||
|
|
|
@ -77,134 +77,6 @@ extern UINT64 g_cpuMap[];
|
||||||
#define CPU_MAP_GET(cpuid) g_cpuMap[(cpuid)]
|
#define CPU_MAP_GET(cpuid) g_cpuMap[(cpuid)]
|
||||||
#define CPU_MAP_SET(cpuid, hwid) g_cpuMap[(cpuid)] = (hwid)
|
#define CPU_MAP_SET(cpuid, hwid) g_cpuMap[(cpuid)] = (hwid)
|
||||||
|
|
||||||
/**
|
|
||||||
* @ingroup los_hw
|
|
||||||
* @brief Set Event.
|
|
||||||
*
|
|
||||||
* @par Description:
|
|
||||||
* <ul>
|
|
||||||
* <li>This API is used to send an event to all cores within a muti-processor system.</li>
|
|
||||||
* </ul>
|
|
||||||
* @attention
|
|
||||||
* <ul>
|
|
||||||
* <li>This API is not implemented.</li>
|
|
||||||
* </ul>
|
|
||||||
*
|
|
||||||
* @param None.
|
|
||||||
*
|
|
||||||
* @retval #None.
|
|
||||||
*
|
|
||||||
* @par Dependency:
|
|
||||||
* los_hw.h: the header file that contains the API declaration.
|
|
||||||
* @see wfe.
|
|
||||||
*/
|
|
||||||
extern VOID Sev(VOID);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ingroup los_hw
|
|
||||||
* @brief Wait for event.
|
|
||||||
*
|
|
||||||
* @par Description:
|
|
||||||
* <ul>
|
|
||||||
* <li>This API is used to suspend execution until events occurs if the event register is not set.</li>
|
|
||||||
* </ul>
|
|
||||||
* @attention
|
|
||||||
* <ul>
|
|
||||||
* <li>This API is not implemented.</li>
|
|
||||||
* </ul>
|
|
||||||
*
|
|
||||||
* @param None.
|
|
||||||
*
|
|
||||||
* @retval #None.
|
|
||||||
*
|
|
||||||
* @par Dependency:
|
|
||||||
* los_hw.h: the header file that contains the API declaration.
|
|
||||||
* @see sev.
|
|
||||||
*/
|
|
||||||
extern VOID Wfe(VOID);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ingroup los_hw
|
|
||||||
* @brief Wait for interrupt.
|
|
||||||
*
|
|
||||||
* @par Description:
|
|
||||||
* <ul>
|
|
||||||
* <li>This API is used to suspend execution until interrupt or a debug request occurs.</li>
|
|
||||||
* </ul>
|
|
||||||
* @attention None.
|
|
||||||
*
|
|
||||||
* @param None.
|
|
||||||
*
|
|
||||||
* @retval #None.
|
|
||||||
*
|
|
||||||
* @par Dependency:
|
|
||||||
* los_hw.h: the header file that contains the API declaration.
|
|
||||||
* @see None.
|
|
||||||
*/
|
|
||||||
extern VOID Wfi(VOID);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ingroup los_hw
|
|
||||||
* @brief Data Memory Barrier.
|
|
||||||
*
|
|
||||||
* @par Description:
|
|
||||||
* <ul>
|
|
||||||
* <li>This API is used as a memory barrier</li>
|
|
||||||
* </ul>
|
|
||||||
* @attention None.
|
|
||||||
*
|
|
||||||
* @param None.
|
|
||||||
*
|
|
||||||
* @retval #None.
|
|
||||||
*
|
|
||||||
* @par Dependency:
|
|
||||||
* los_hw.h: the header file that contains the API declaration.
|
|
||||||
* @see None.
|
|
||||||
*/
|
|
||||||
extern VOID Dmb(VOID);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ingroup los_hw
|
|
||||||
* @brief Data Synchronization Barrier.
|
|
||||||
*
|
|
||||||
* @par Description:
|
|
||||||
* <ul>
|
|
||||||
* <li>This API is used as a special kind of memory barrier</li>
|
|
||||||
* </ul>
|
|
||||||
* @attention None.
|
|
||||||
*
|
|
||||||
* @param None.
|
|
||||||
*
|
|
||||||
* @retval #None.
|
|
||||||
*
|
|
||||||
* @par Dependency:
|
|
||||||
* los_hw.h: the header file that contains the API declaration.
|
|
||||||
* @see None.
|
|
||||||
*/
|
|
||||||
extern VOID Dsb(VOID);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ingroup los_hw
|
|
||||||
* @brief Instruction Synchronization Barrier.
|
|
||||||
*
|
|
||||||
* @par Description:
|
|
||||||
* <ul>
|
|
||||||
* <li>This API is used to flush the pipeline in the processor,
|
|
||||||
* so that all instructions following the ISB are fetched from cache or memory,
|
|
||||||
* after the instruction has been completed.</li>
|
|
||||||
* </ul>
|
|
||||||
* @attention None.
|
|
||||||
*
|
|
||||||
* @param None.
|
|
||||||
*
|
|
||||||
* @retval #None.
|
|
||||||
*
|
|
||||||
* @par Dependency:
|
|
||||||
* los_hw.h: the header file that contains the API declaration.
|
|
||||||
* @see None.
|
|
||||||
*/
|
|
||||||
extern VOID Isb(VOID);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_hw
|
* @ingroup los_hw
|
||||||
* @brief Invalidate instruction cache.
|
* @brief Invalidate instruction cache.
|
||||||
|
|
|
@ -280,7 +280,7 @@ STATIC VOID OsGetHwTime(struct timespec64 *hwTime)
|
||||||
{
|
{
|
||||||
UINT64 nowNsec;
|
UINT64 nowNsec;
|
||||||
|
|
||||||
nowNsec = hi_sched_clock();
|
nowNsec = LOS_CurrNanosec();
|
||||||
hwTime->tv_sec = nowNsec / OS_SYS_NS_PER_SECOND;
|
hwTime->tv_sec = nowNsec / OS_SYS_NS_PER_SECOND;
|
||||||
hwTime->tv_nsec = nowNsec - hwTime->tv_sec * OS_SYS_NS_PER_SECOND;
|
hwTime->tv_nsec = nowNsec - hwTime->tv_sec * OS_SYS_NS_PER_SECOND;
|
||||||
}
|
}
|
||||||
|
@ -865,8 +865,8 @@ clock_t clock(VOID)
|
||||||
clock_t clockMsec;
|
clock_t clockMsec;
|
||||||
UINT64 nowNsec;
|
UINT64 nowNsec;
|
||||||
|
|
||||||
nowNsec = hi_sched_clock();
|
nowNsec = LOS_CurrNanosec();
|
||||||
clockMsec = (clock_t)(nowNsec / OS_SYS_NS_PER_MS);
|
clockMsec = (clock_t)(nowNsec / (OS_SYS_NS_PER_SECOND / CLOCKS_PER_SEC));
|
||||||
|
|
||||||
return clockMsec;
|
return clockMsec;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ static unsigned long g_seed = 1;
|
||||||
|
|
||||||
int RanOpen(struct file *filep)
|
int RanOpen(struct file *filep)
|
||||||
{
|
{
|
||||||
g_seed = (unsigned long)(hi_sched_clock() & 0xffffffff);
|
g_seed = (unsigned long)(LOS_CurrNanosec() & 0xffffffff);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ VOID OsSetMainTask()
|
||||||
LITE_OS_SEC_TEXT WEAK VOID OsIdleTask(VOID)
|
LITE_OS_SEC_TEXT WEAK VOID OsIdleTask(VOID)
|
||||||
{
|
{
|
||||||
while (1) {
|
while (1) {
|
||||||
Wfi();
|
WFI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,11 +46,6 @@ enum DmaMemType {
|
||||||
DMA_NOCACHE
|
DMA_NOCACHE
|
||||||
};
|
};
|
||||||
|
|
||||||
#define IS_PERIPH_ADDR(addr) \
|
|
||||||
(((addr) >= U32_C(PERIPH_PMM_BASE)) && ((addr) <= U32_C(PERIPH_PMM_BASE) + U32_C(PERIPH_PMM_SIZE)))
|
|
||||||
#define IS_MEMORY_ADDR(addr) \
|
|
||||||
(((addr) >= U32_C(DDR_MEM_ADDR)) && ((addr) <= U32_C(DDR_MEM_ADDR) + U32_C(DDR_MEM_SIZE)))
|
|
||||||
|
|
||||||
/* thread safety */
|
/* thread safety */
|
||||||
VOID *LOS_DmaMemAlloc(DMA_ADDR_T *dmaAddr, size_t size, size_t align, enum DmaMemType type);
|
VOID *LOS_DmaMemAlloc(DMA_ADDR_T *dmaAddr, size_t size, size_t align, enum DmaMemType type);
|
||||||
VOID LOS_DmaMemFree(VOID *vaddr);
|
VOID LOS_DmaMemFree(VOID *vaddr);
|
||||||
|
|
|
@ -43,114 +43,6 @@ extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
VOID *ioremap(PADDR_T paddr, unsigned long size)
|
|
||||||
{
|
|
||||||
if (IS_PERIPH_ADDR(paddr) && IS_PERIPH_ADDR(paddr + size)) {
|
|
||||||
return (VOID *)(UINTPTR)IO_DEVICE_ADDR(paddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
VM_ERR("ioremap failed invalid addr or size %p %d", paddr, size);
|
|
||||||
return (VOID *)(UINTPTR)paddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID iounmap(VOID *vaddr) {}
|
|
||||||
|
|
||||||
VOID *ioremap_nocache(PADDR_T paddr, unsigned long size)
|
|
||||||
{
|
|
||||||
if (IS_PERIPH_ADDR(paddr) && IS_PERIPH_ADDR(paddr + size)) {
|
|
||||||
return (VOID *)(UINTPTR)IO_UNCACHED_ADDR(paddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_MEMORY_ADDR(paddr) && IS_MEMORY_ADDR(paddr + size)) {
|
|
||||||
return (VOID *)(UINTPTR)MEM_UNCACHED_ADDR(paddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
VM_ERR("ioremap_nocache failed invalid addr or size %p %d", paddr, size);
|
|
||||||
return (VOID *)(UINTPTR)paddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID *ioremap_cached(PADDR_T paddr, unsigned long size)
|
|
||||||
{
|
|
||||||
if (IS_PERIPH_ADDR(paddr) && IS_PERIPH_ADDR(paddr + size)) {
|
|
||||||
return (VOID *)(UINTPTR)IO_CACHED_ADDR(paddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IS_MEMORY_ADDR(paddr) && IS_MEMORY_ADDR(paddr + size)) {
|
|
||||||
return (VOID *)(UINTPTR)MEM_CACHED_ADDR(paddr);
|
|
||||||
}
|
|
||||||
|
|
||||||
VM_ERR("ioremap_cached failed invalid addr or size %p %d", paddr, size);
|
|
||||||
return (VOID *)(UINTPTR)paddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef LOSCFG_KERNEL_VM
|
|
||||||
int remap_pfn_range(VADDR_T vaddr, unsigned long pfn, unsigned long size, unsigned long prot)
|
|
||||||
{
|
|
||||||
STATUS_T status = LOS_OK;
|
|
||||||
int ret;
|
|
||||||
LosVmMapRegion *region = NULL;
|
|
||||||
unsigned long vpos;
|
|
||||||
unsigned long end;
|
|
||||||
unsigned long paddr = pfn << PAGE_SHIFT;
|
|
||||||
LosVmSpace *space = LOS_SpaceGet(vaddr);
|
|
||||||
|
|
||||||
if (size == 0) {
|
|
||||||
VM_ERR("invalid map size %u", size);
|
|
||||||
return LOS_ERRNO_VM_INVALID_ARGS;
|
|
||||||
}
|
|
||||||
size = ROUNDUP(size, PAGE_SIZE);
|
|
||||||
|
|
||||||
if (!IS_PAGE_ALIGNED(vaddr) || pfn == 0) {
|
|
||||||
VM_ERR("invalid map map vaddr %x or pfn %x", vaddr, pfn);
|
|
||||||
return LOS_ERRNO_VM_INVALID_ARGS;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (space == NULL) {
|
|
||||||
VM_ERR("aspace not exists");
|
|
||||||
return LOS_ERRNO_VM_NOT_FOUND;
|
|
||||||
}
|
|
||||||
|
|
||||||
(VOID)LOS_MuxAcquire(&space->regionMux);
|
|
||||||
|
|
||||||
region = LOS_RegionFind(space, vaddr);
|
|
||||||
if (region == NULL) {
|
|
||||||
VM_ERR("region not exists");
|
|
||||||
status = LOS_ERRNO_VM_NOT_FOUND;
|
|
||||||
goto OUT;
|
|
||||||
}
|
|
||||||
end = vaddr + size;
|
|
||||||
if (region->range.base + region->range.size < end) {
|
|
||||||
VM_ERR("out of range:base=%x size=%d vaddr=%x len=%u",
|
|
||||||
region->range.base, region->range.size, vaddr, size);
|
|
||||||
status = LOS_ERRNO_VM_INVALID_ARGS;
|
|
||||||
goto OUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check */
|
|
||||||
for (vpos = vaddr; vpos < end; vpos += PAGE_SIZE) {
|
|
||||||
status = LOS_ArchMmuQuery(&space->archMmu, (VADDR_T)vpos, NULL, NULL);
|
|
||||||
if (status == LOS_OK) {
|
|
||||||
VM_ERR("remap_pfn_range, address mapping already exist");
|
|
||||||
status = LOS_ERRNO_VM_INVALID_ARGS;
|
|
||||||
goto OUT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* map all */
|
|
||||||
ret = LOS_ArchMmuMap(&space->archMmu, vaddr, paddr, size >> PAGE_SHIFT, prot);
|
|
||||||
if (ret <= 0) {
|
|
||||||
VM_ERR("ioremap LOS_ArchMmuMap failed err = %d", ret);
|
|
||||||
goto OUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = LOS_OK;
|
|
||||||
|
|
||||||
OUT:
|
|
||||||
(VOID)LOS_MuxRelease(&space->regionMux);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
VOID *LOS_DmaMemAlloc(DMA_ADDR_T *dmaAddr, size_t size, size_t align, enum DmaMemType type)
|
VOID *LOS_DmaMemAlloc(DMA_ADDR_T *dmaAddr, size_t size, size_t align, enum DmaMemType type)
|
||||||
{
|
{
|
||||||
VOID *kVaddr = NULL;
|
VOID *kVaddr = NULL;
|
||||||
|
|
|
@ -108,12 +108,12 @@ LOCK_RELEASE:
|
||||||
STATIC VOID OsLockVdso(VdsoDataPage *vdsoDataPage)
|
STATIC VOID OsLockVdso(VdsoDataPage *vdsoDataPage)
|
||||||
{
|
{
|
||||||
vdsoDataPage->lockCount = 1;
|
vdsoDataPage->lockCount = 1;
|
||||||
Dmb();
|
DMB;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC VOID OsUnlockVdso(VdsoDataPage *vdsoDataPage)
|
STATIC VOID OsUnlockVdso(VdsoDataPage *vdsoDataPage)
|
||||||
{
|
{
|
||||||
Dmb();
|
DMB;
|
||||||
vdsoDataPage->lockCount = 0;
|
vdsoDataPage->lockCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,73 +93,73 @@ extern VOID PrintExcInfo(const CHAR *fmt, ...);
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Read a UINT8 value from addr and stroed in value.
|
* Read a UINT8 value from addr and stroed in value.
|
||||||
*/
|
*/
|
||||||
#define READ_UINT8(value, addr) ({ (value) = *((volatile UINT8 *)((UINTPTR)(addr))); Dsb(); })
|
#define READ_UINT8(value, addr) ({ (value) = *((volatile UINT8 *)((UINTPTR)(addr))); DSB; })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Read a UINT16 value from addr and stroed in addr.
|
* Read a UINT16 value from addr and stroed in addr.
|
||||||
*/
|
*/
|
||||||
#define READ_UINT16(value, addr) ({ (value) = *((volatile UINT16 *)((UINTPTR)(addr))); Dsb(); })
|
#define READ_UINT16(value, addr) ({ (value) = *((volatile UINT16 *)((UINTPTR)(addr))); DSB; })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Read a UINT32 value from addr and stroed in value.
|
* Read a UINT32 value from addr and stroed in value.
|
||||||
*/
|
*/
|
||||||
#define READ_UINT32(value, addr) ({ (value) = *((volatile UINT32 *)((UINTPTR)(addr))); Dsb(); })
|
#define READ_UINT32(value, addr) ({ (value) = *((volatile UINT32 *)((UINTPTR)(addr))); DSB; })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Read a UINT64 value from addr and stroed in value.
|
* Read a UINT64 value from addr and stroed in value.
|
||||||
*/
|
*/
|
||||||
#define READ_UINT64(value, addr) ({ (value) = *((volatile UINT64 *)((UINTPTR)(addr))); Dsb(); })
|
#define READ_UINT64(value, addr) ({ (value) = *((volatile UINT64 *)((UINTPTR)(addr))); DSB; })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Write a UINT8 value to addr.
|
* Write a UINT8 value to addr.
|
||||||
*/
|
*/
|
||||||
#define WRITE_UINT8(value, addr) ({ Dsb(); *((volatile UINT8 *)((UINTPTR)(addr))) = (value); })
|
#define WRITE_UINT8(value, addr) ({ DSB; *((volatile UINT8 *)((UINTPTR)(addr))) = (value); })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Write a UINT16 value to addr.
|
* Write a UINT16 value to addr.
|
||||||
*/
|
*/
|
||||||
#define WRITE_UINT16(value, addr) ({ Dsb(); *((volatile UINT16 *)((UINTPTR)(addr))) = (value); })
|
#define WRITE_UINT16(value, addr) ({ DSB; *((volatile UINT16 *)((UINTPTR)(addr))) = (value); })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Write a UINT32 value to addr.
|
* Write a UINT32 value to addr.
|
||||||
*/
|
*/
|
||||||
#define WRITE_UINT32(value, addr) ({ Dsb(); *((volatile UINT32 *)((UINTPTR)(addr))) = (value); })
|
#define WRITE_UINT32(value, addr) ({ DSB; *((volatile UINT32 *)((UINTPTR)(addr))) = (value); })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Write a UINT64 addr to addr.
|
* Write a UINT64 addr to addr.
|
||||||
*/
|
*/
|
||||||
#define WRITE_UINT64(value, addr) ({ Dsb(); *((volatile UINT64 *)((UINTPTR)(addr))) = (value); })
|
#define WRITE_UINT64(value, addr) ({ DSB; *((volatile UINT64 *)((UINTPTR)(addr))) = (value); })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Get a UINT8 value from addr.
|
* Get a UINT8 value from addr.
|
||||||
*/
|
*/
|
||||||
#define GET_UINT8(addr) ({ UINT8 r = *((volatile UINT8 *)((UINTPTR)(addr))); Dsb(); r; })
|
#define GET_UINT8(addr) ({ UINT8 r = *((volatile UINT8 *)((UINTPTR)(addr))); DSB; r; })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Get a UINT16 value from addr.
|
* Get a UINT16 value from addr.
|
||||||
*/
|
*/
|
||||||
#define GET_UINT16(addr) ({ UINT16 r = *((volatile UINT16 *)((UINTPTR)(addr))); Dsb(); r; })
|
#define GET_UINT16(addr) ({ UINT16 r = *((volatile UINT16 *)((UINTPTR)(addr))); DSB; r; })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Get a UINT32 value from addr.
|
* Get a UINT32 value from addr.
|
||||||
*/
|
*/
|
||||||
#define GET_UINT32(addr) ({ UINT32 r = *((volatile UINT32 *)((UINTPTR)(addr))); Dsb(); r; })
|
#define GET_UINT32(addr) ({ UINT32 r = *((volatile UINT32 *)((UINTPTR)(addr))); DSB; r; })
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup los_base
|
* @ingroup los_base
|
||||||
* Get a UINT64 value from addr.
|
* Get a UINT64 value from addr.
|
||||||
*/
|
*/
|
||||||
#define GET_UINT64(addr) ({ UINT64 r = *((volatile UINT64 *)((UINTPTR)(addr))); Dsb(); r; })
|
#define GET_UINT64(addr) ({ UINT64 r = *((volatile UINT64 *)((UINTPTR)(addr))); l; r; })
|
||||||
|
|
||||||
#ifdef LOSCFG_DEBUG_VERSION
|
#ifdef LOSCFG_DEBUG_VERSION
|
||||||
#define LOS_ASSERT(judge) do { \
|
#define LOS_ASSERT(judge) do { \
|
||||||
|
|
|
@ -73,6 +73,14 @@ extern "C" {
|
||||||
#define CLZ(value) (__clz(value))
|
#define CLZ(value) (__clz(value))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef NORETURN
|
||||||
|
#define NORETURN __declspec(noreturn)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEPRECATED
|
||||||
|
#define DEPRECATED __attribute__((deprecated))
|
||||||
|
#endif
|
||||||
|
|
||||||
/* for IAR Compiler */
|
/* for IAR Compiler */
|
||||||
#elif defined ( __ICCARM__ )
|
#elif defined ( __ICCARM__ )
|
||||||
|
|
||||||
|
@ -104,6 +112,14 @@ extern "C" {
|
||||||
#define CTZ(value) (__UNDEFINED(value))
|
#define CTZ(value) (__UNDEFINED(value))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef NORETURN
|
||||||
|
#define NORETURN __attribute__ ((__noreturn__))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEPRECATED
|
||||||
|
#define DEPRECATED __attribute__((deprecated))
|
||||||
|
#endif
|
||||||
|
|
||||||
/* for GNU Compiler */
|
/* for GNU Compiler */
|
||||||
#elif defined ( __GNUC__ )
|
#elif defined ( __GNUC__ )
|
||||||
|
|
||||||
|
@ -135,6 +151,14 @@ extern "C" {
|
||||||
#define CTZ(value) (__builtin_ctz(value))
|
#define CTZ(value) (__builtin_ctz(value))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef NORETURN
|
||||||
|
#define NORETURN __attribute__ ((__noreturn__))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DEPRECATED
|
||||||
|
#define DEPRECATED __attribute__((deprecated))
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error Unknown compiler.
|
#error Unknown compiler.
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue