!156 代码优化

Merge pull request !156 from Caoruihong/ioremap
This commit is contained in:
openharmony_ci 2021-04-19 18:48:22 +08:00 committed by Gitee
commit 81cdf0c6c3
15 changed files with 49 additions and 285 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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) \

View File

@ -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();
} }

View File

@ -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");
} }

View File

@ -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

View File

@ -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.

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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;
} }
} }

View File

@ -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);

View File

@ -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;

View File

@ -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;
} }

View File

@ -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 { \

View File

@ -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