fix: Solution of conflict

Change-Id: If6304999f1dfbcdfbc1670b73ace61b8024336bd
This commit is contained in:
zhushengle 2021-05-06 21:10:22 +08:00
commit f6c4f6f5da
2752 changed files with 335543 additions and 695 deletions

View File

@ -67,6 +67,7 @@ lite_subsystem("kernel") {
}
} else {
deps = [ ":make" ]
deps += [ "//kernel/liteos_a/testsuites/unittest:unittest" ]
}
}

View File

@ -303,6 +303,7 @@ source "../../kernel/liteos_a/bsd/dev/usb/Kconfig"
source "../../drivers/adapter/khdf/liteos/Kconfig"
source "drivers/char/mem/Kconfig"
source "drivers/char/quickstart/Kconfig"
source "drivers/char/random/Kconfig"
source "../../drivers/liteos/tzdriver/Kconfig"
source "drivers/char/video/Kconfig"

View File

@ -189,6 +189,24 @@ STATIC INLINE UINT32 ArchIntUnlock(VOID)
return intSave;
}
STATIC INLINE VOID ArchIrqDisable(VOID)
{
__asm__ __volatile__(
"cpsid i "
:
:
: "memory", "cc");
}
STATIC INLINE VOID ArchIrqEnable(VOID)
{
__asm__ __volatile__(
"cpsie i "
:
:
: "memory", "cc");
}
#else
STATIC INLINE UINT32 ArchIntLock(VOID)

View File

@ -892,9 +892,9 @@ STATIC VOID OsSetKSectionAttr(UINTPTR virtAddr, BOOL uncached)
length = sizeof(mmuKernelMappings) / sizeof(LosArchMmuInitMapping);
for (i = 0; i < length; i++) {
kernelMap = &mmuKernelMappings[i];
if (uncached) {
flags |= VM_MAP_REGION_FLAG_UNCACHED;
}
if (uncached) {
kernelMap->flags |= VM_MAP_REGION_FLAG_UNCACHED;
}
status = LOS_ArchMmuMap(&kSpace->archMmu, kernelMap->virt, kernelMap->phys,
kernelMap->size >> MMU_DESCRIPTOR_L2_SMALL_SHIFT, kernelMap->flags);
if (status != (kernelMap->size >> MMU_DESCRIPTOR_L2_SMALL_SHIFT)) {

View File

@ -181,18 +181,29 @@ STATIC INT32 OsDecodeDataFSR(UINT32 regDFSR)
#ifdef LOSCFG_KERNEL_VM
UINT32 OsArmSharedPageFault(UINT32 excType, PageFaultContext *frame, UINT32 far, UINT32 fsr)
{
PRINT_INFO("page fault entry!!!\n");
BOOL instruction_fault = FALSE;
BOOL instructionFault = FALSE;
UINT32 pfFlags = 0;
UINT32 fsrFlag;
BOOL write = FALSE;
UINT32 ret;
PRINT_INFO("page fault entry!!!\n");
if (OsGetSystemStatus() == OS_SYSTEM_EXC_CURR_CPU) {
return LOS_ERRNO_VM_NOT_FOUND;
}
#if defined(LOSCFG_KERNEL_SMP) && defined(LOSCFG_DEBUG_VERSION)
BOOL irqEnable = !(LOS_SpinHeld(&g_taskSpin) && (OsPercpuGet()->taskLockCnt != 0));
if (irqEnable) {
ArchIrqEnable();
} else {
PrintExcInfo("[ERR][%s] may be held scheduler lock when entering [%s]\n",
OsCurrTaskGet()->taskName, __FUNCTION__);
}
#else
ArchIrqEnable();
#endif
if (excType == OS_EXCEPT_PREFETCH_ABORT) {
instruction_fault = TRUE;
instructionFault = TRUE;
} else {
write = !!BIT_GET(fsr, WNR_BIT);
}
@ -210,13 +221,23 @@ UINT32 OsArmSharedPageFault(UINT32 excType, PageFaultContext *frame, UINT32 far,
BOOL user = (frame->CPSR & CPSR_MODE_MASK) == CPSR_MODE_USR;
pfFlags |= write ? VM_MAP_PF_FLAG_WRITE : 0;
pfFlags |= user ? VM_MAP_PF_FLAG_USER : 0;
pfFlags |= instruction_fault ? VM_MAP_PF_FLAG_INSTRUCTION : 0;
pfFlags |= instructionFault ? VM_MAP_PF_FLAG_INSTRUCTION : 0;
pfFlags |= VM_MAP_PF_FLAG_NOT_PRESENT;
return OsVmPageFaultHandler(far, pfFlags, frame);
ret = OsVmPageFaultHandler(far, pfFlags, frame);
break;
}
default:
return LOS_ERRNO_VM_NOT_FOUND;
ret = LOS_ERRNO_VM_NOT_FOUND;
break;
}
#if defined(LOSCFG_KERNEL_SMP) && defined(LOSCFG_DEBUG_VERSION)
if (irqEnable) {
ArchIrqDisable();
}
#else
ArchIrqDisable();
#endif
return ret;
}
#endif

View File

@ -365,9 +365,6 @@ _osExceptFiqHdl:
MOV R3, #0
STMFD SP!, {R2-R3}
MOV R0, #OS_EXCEPT_FIQ @ Set exception ID to OS_EXCEPT_FIQ.
B _osExceptDispatch @ Branch to global exception handler.
@ Description: Exception handler
@ Parameter : R0 Exception Type
@ Regs Hold : R3 Exception`s CPSR

View File

@ -107,9 +107,9 @@ __exception_handlers:
.global reset_vector
.type reset_vector,function
#ifdef LOSCFG_QUICK_START
#ifdef LOSCFG_BOOTENV_RAM
__quickstart_args_start:
.fill 512,1,0
.fill LOSCFG_BOOTENV_RAMSIZE,1,0
__quickstart_args_end:
.global OsGetArgsAddr

View File

@ -739,11 +739,8 @@ int mq_timedsend(mqd_t personal, const char *msg, size_t msgLen, unsigned int ms
(VOID)pthread_mutex_lock(&g_mqueueMutex);
privateMqPersonal = MqGetPrivDataBuff(personal);
if (privateMqPersonal == NULL) {
goto ERROUT_UNLOCK;
}
OS_MQ_GOTO_ERROUT_UNLOCK_IF(privateMqPersonal->mq_status != MQ_USE_MAGIC, EBADF);
OS_MQ_GOTO_ERROUT_UNLOCK_IF(privateMqPersonal == NULL || privateMqPersonal->mq_status != MQ_USE_MAGIC, EBADF);
mqueueCB = privateMqPersonal->mq_posixdes;
OS_MQ_GOTO_ERROUT_UNLOCK_IF(msgLen > (size_t)(mqueueCB->mqcb->queueSize - sizeof(UINT32)), EMSGSIZE);
@ -786,10 +783,7 @@ ssize_t mq_timedreceive(mqd_t personal, char *msg, size_t msgLen, unsigned int *
(VOID)pthread_mutex_lock(&g_mqueueMutex);
privateMqPersonal = MqGetPrivDataBuff(personal);
if (privateMqPersonal == NULL) {
goto ERROUT_UNLOCK;
}
if (privateMqPersonal->mq_status != MQ_USE_MAGIC) {
if (privateMqPersonal == NULL || privateMqPersonal->mq_status != MQ_USE_MAGIC) {
errno = EBADF;
goto ERROUT_UNLOCK;
}

View File

@ -0,0 +1,6 @@
config DRIVERS_QUICKSTART
bool "Enable QUICKSTART"
default y
depends on DRIVERS && FS_VFS
help
Answer Y to enable LiteOS support quickstart frame dev.

View File

@ -0,0 +1,89 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __LOS_DEV_QUICKSTART_H__
#define __LOS_DEV_QUICKSTART_H__
#include "los_typedef.h"
#include "sys/ioctl.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
typedef enum {
QS_STAGE1 = 1, /* 1: start from stage1, 0 is already called in kernel process */
QS_STAGE2, /* system init stage No 2 */
QS_STAGE3, /* system init stage No 3 */
QS_STAGE_LIMIT
} QuickstartStage;
typedef enum {
QS_UNREGISTER = QS_STAGE_LIMIT, /* quickstart dev unregister */
QS_NOTIFY, /* quickstart notify */
QS_LISTEN, /* quickstart listen */
QS_CTL_LIMIT
} QuickstartConctrl;
typedef struct {
unsigned int pid;
unsigned int events;
} QuickstartMask;
#define QUICKSTART_IOC_MAGIC 'T'
#define QUICKSTART_UNREGISTER _IO(QUICKSTART_IOC_MAGIC, QS_UNREGISTER)
#define QUICKSTART_NOTIFY _IO(QUICKSTART_IOC_MAGIC, QS_NOTIFY)
#define QUICKSTART_LISTEN _IOR(QUICKSTART_IOC_MAGIC, QS_LISTEN, QuickstartMask)
#define QUICKSTART_STAGE(x) _IO(QUICKSTART_IOC_MAGIC, (x))
#define QUICKSTART_NODE "/dev/quickstart"
#define QS_STAGE_CNT (QS_STAGE_LIMIT - QS_STAGE1)
typedef void (*SysteminitHook)(void);
typedef struct {
SysteminitHook func[QS_STAGE_CNT];
} LosSysteminitHook;
extern void QuickstartHookRegister(LosSysteminitHook hooks);
extern int QuickstartDevRegister(void);
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cplusplus */
#endif /* __cplusplus */
#endif

View File

@ -29,16 +29,15 @@
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "los_quick_start_pri.h"
#include "bits/ioctl.h"
#include "los_dev_quickstart.h"
#include "fcntl.h"
#include "linux/kernel.h"
#include "los_process_pri.h"
#define QUICKSTART_IOC_MAGIC 'T'
#define QUICKSTART_INITSTEP2 _IO(QUICKSTART_IOC_MAGIC, 0)
#define QUICKSTART_UNREGISTER _IO(QUICKSTART_IOC_MAGIC, 1)
#define QUICKSTART_NODE "/dev/quickstart"
EVENT_CB_S g_qsEvent;
static SysteminitHook g_systemInitFunc[QS_STAGE_CNT] = {0};
static char g_callOnce[QS_STAGE_CNT] = {0};
static int QuickstartOpen(struct file *filep)
{
@ -50,19 +49,52 @@ static int QuickstartClose(struct file *filep)
return 0;
}
static void SystemInitStep2(void)
static int QuickstartNotify(unsigned int events)
{
static int once = 0;
/* Only one call is allowed */
if (once != 0) {
return;
unsigned int pid = LOS_GetCurrProcessID();
/* 16:low 16 bits for eventMask, high 16 bits for pid */
unsigned int notifyEvent = (pid << 16) | events;
int ret = LOS_EventWrite((PEVENT_CB_S)&g_qsEvent, notifyEvent);
if (ret != 0) {
PRINT_ERR("%s,%d:0x%x\n", __FUNCTION__, __LINE__, ret);
ret = -EINVAL;
}
once = 1;
return ret;
}
unsigned int ret = OsSystemInitStep2();
if (ret != LOS_OK) {
PRINT_ERR("systemInitStep2 failed\n");
static int QuickstartListen(unsigned long arg)
{
QuickstartMask listenMask;
if (copy_from_user(&listenMask, (struct QuickstartMask __user *)arg, sizeof(QuickstartMask)) != LOS_OK) {
PRINT_ERR("%s,%d\n", __FUNCTION__, __LINE__);
return -EINVAL;
}
/* 16:low 16 bits for eventMask, high 16 bits for pid */
unsigned int mask = (listenMask.pid << 16) | listenMask.events;
int ret = LOS_EventRead((PEVENT_CB_S)&g_qsEvent, mask, LOS_WAITMODE_AND | LOS_WAITMODE_CLR, LOS_WAIT_FOREVER);
if (ret != mask) {
PRINT_ERR("%s,%d:0x%x\n", __FUNCTION__, __LINE__, ret);
ret = -EINVAL;
}
return ret;
}
void QuickstartHookRegister(LosSysteminitHook hooks)
{
for (int i = 0; i < QS_STAGE_CNT; i++) {
g_systemInitFunc[i] = hooks.func[i];
}
}
static int QuickstartStageWorking(unsigned int level)
{
if ((level < QS_STAGE_CNT) && (g_callOnce[level] == 0) && (g_systemInitFunc[level] != NULL)) {
g_callOnce[level] = 1; /* 1: Already called */
g_systemInitFunc[level]();
} else {
PRINT_WARN("Trigger quickstart,but doing nothing!!\n");
}
return 0;
}
static int QuickstartDevUnregister(void)
@ -72,18 +104,27 @@ static int QuickstartDevUnregister(void)
static ssize_t QuickstartIoctl(struct file *filep, int cmd, unsigned long arg)
{
switch (cmd) {
case QUICKSTART_INITSTEP2:
SystemInitStep2();
break;
case QUICKSTART_UNREGISTER:
QuickstartDevUnregister();
break;
ssize_t ret;
if (cmd == QUICKSTART_NOTIFY) {
return QuickstartNotify(arg);
}
if (OsGetUserInitProcessID() != LOS_GetCurrProcessID()) {
PRINT_ERR("Permission denios!\n");
return -EACCES;
}
switch (cmd) {
case QUICKSTART_UNREGISTER:
ret = QuickstartDevUnregister();
break;
case QUICKSTART_LISTEN:
ret = QuickstartListen(arg);
break;
default:
ret = QuickstartStageWorking(cmd - QUICKSTART_STAGE(QS_STAGE1)); /* ioctl cmd converted to stage level */
break;
}
return 0;
return ret;
}
static const struct file_operations_vfs g_quickstartDevOps = {
@ -100,8 +141,9 @@ static const struct file_operations_vfs g_quickstartDevOps = {
NULL, /* unlink */
};
int DevQuickStartRegister(void)
int QuickstartDevRegister(void)
{
return register_driver(QUICKSTART_NODE, &g_quickstartDevOps, 0666, 0); /* 0666: file mode */
LOS_EventInit(&g_qsEvent);
return register_driver(QUICKSTART_NODE, &g_quickstartDevOps, 0644, 0); /* 0644: file mode */
}

View File

@ -93,10 +93,13 @@ int fatfs_2_vfs(int result)
case FR_NO_FILE:
case FR_NO_PATH:
case FR_NO_FILESYSTEM:
status = ENOENT;
break;
case FR_NO_FILESYSTEM:
status = ENOTSUP;
break;
case FR_INVALID_NAME:
status = EINVAL;
break;

View File

@ -78,6 +78,7 @@ int format(const char *dev, int sectors, int option)
}
err = fatfs_mkfs(device, sectors, option);
if (err < 0) {
VnodeDrop();
set_errno(-err);
return -1;
}

View File

@ -163,30 +163,6 @@ void clear_fd(int fd);
extern char *rindex(const char *s, int c);
/**
* @ingroup fs
* @brief list directory contents.
*
* @par Description:
* Get the volume label of the FAT partition.
*
* @attention
* <ul>
* <li>The function support FAT filesystem only.</li>
* <li>The label must allocated more than 11 charactors space first</li>
* </ul>
*
* @param target [IN] Type #const char* The file pathname.
* @param label [OUT] Type #const char* The string pointer transform the label massge back.
*
* @retval #int Point the status which is successed or failed.
*
* @par Dependency:
* <ul><li>fs.h: the header file that contains the API declaration.</li></ul>
*/
int getlabel(const char *target, char *label);
/**
* @ingroup fs
*
@ -349,40 +325,6 @@ int fscheck(const char *path);
extern int virstatfs(const char *path, struct statfs *buf);
/**
* @ingroup fs
* @set the virtual partition information.
*
* @par Description:
* The los_set_virpartparam() function use for set virtual partition parameter.
* The parameter include virtual partition number, virtual partition percent, virtual partition name
* and the partition path which need mount virtual partition.
*
* @attention
* <ul>
* <li>This function only support for FAT32.</li>
* <li>This function only support for the virtual partition feature.</li>
* <li>This function only can be used before mount function.</li>
* <li>The function can be invoked once before umount partition.</li>
* <li>Now support set single partition,the partition information will be replaced
* if it used for set another partition name.</li>
* <li>The function has no effert if virtual partition information is already in the partition.</li>
* </ul>
*
* @param virtualinfo [IN] Type #virpartinfo The struct which include virtual partition information.
*
* @retval #0 los_set_virpartparam success.
* @retval #-1 los_set_virpartparam failed.
*
* @par Dependency:
* <ul><li>fs.h: the header file that contains the API declaration.</li></ul>
* @see
*
*/
#ifdef VFS_IMPL_LATER
int los_set_virpartparam(virpartinfo virtualinfo);
#endif
#endif
/**

View File

@ -111,16 +111,16 @@ int VnodeLookup(const char *path, struct Vnode **vnode, uint32_t flags);
int VnodeHold(void);
int VnodeDrop(void);
void VnodeRefDec(struct Vnode *vnode);
int VnodeFreeIter(struct Vnode *vnode);
int VnodeFreeAll(struct Mount *mnt);
int VnodeFreeAll(const struct Mount *mnt);
int VnodeHashInit(void);
uint32_t VfsHashIndex(struct Vnode *vnode);
int VfsHashGet(const struct Mount *mount, uint32_t hash, struct Vnode **vnode, VfsHashCmp *fun, void *arg);
void VfsHashRemove(struct Vnode *vnode);
int VfsHashInsert(struct Vnode *vnode, uint32_t hash);
void ChangeRoot(struct Vnode *newRoot);
BOOL VnodeInUseIter(struct Vnode *vnode);
BOOL VnodeInUseIter(const struct Mount *mount);
struct Vnode *VnodeGetRoot(void);
void VnodeMemoryDump(void);
int VnodeDestory(struct Vnode *vnode);
#endif /* !_VNODE_H_ */

View File

@ -1148,15 +1148,16 @@ ERROR_HANDLE:
INT32 los_disk_cache_clear(INT32 drvID)
{
INT32 result;
los_part *part = get_part(drvID);
los_disk *disk = NULL;
result = OsSdSync(drvID);
result = OsSdSync(part->disk_id);
if (result != 0) {
PRINTK("[ERROR]disk_cache_clear SD sync failed!\n");
return result;
}
disk = get_disk(drvID);
disk = get_disk(part->disk_id);
if (disk == NULL) {
return -1;
}

View File

@ -1,162 +0,0 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/****************************************************************************
* Included Files
****************************************************************************/
#include "vfs_config.h"
#include "sys/mount.h"
#include "errno.h"
#include "fs/fs.h"
#include "stdlib.h"
#include "string.h"
#include "disk.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Types
****************************************************************************/
/****************************************************************************
* Private Variables
****************************************************************************/
/****************************************************************************
* Public Variables
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: getlabel()
*
* Description:
* getlabel() get the volume label of partition(disk) from FAT filesystem by
* the 'target' path
*
* Parameters:
* target : the path which is the mount point of FAT filesystem device.
* label : the string var pointer, by which passed out label string.
*
* Return:
* Zero is returned on success; -1 is returned on an error and errno is
* set appropriately:
*
* ENOMEM There is no memory for allocated space for var.
* EFAULT The pointer 'target' does not pass in corretly.
* ENOENT The pointer 'target' pointed to a wrong location.
* EPERM The pointer 'target' does not point to a mount inode.
* EINVAL The pointer 'label' does not pass in correctly.
* EACCES The filesystem which 'target' point to is not supported.
*
****************************************************************************/
int getlabel(const char *target, char *label)
{
#ifdef VFS_IMPL_LATER
struct inode *mountpt_inode = NULL;
int errcode = OK;
int status;
char *fullpath = NULL;
struct inode_search_s desc;
int ret;
/* Verify required pointer arguments */
if (target == NULL || label == NULL) {
errcode = EFAULT;
goto errout;
}
/* Get a absolute path */
errcode = vfs_normalize_path((const char *)NULL, target, &fullpath);
if (errcode < 0) {
errcode = -errcode;
goto errout;
}
/* Find the mountpt */
SETUP_SEARCH(&desc, fullpath, false);
ret = inode_find(&desc);
if (ret < 0) {
errcode = EACCES;
goto errout_with_fullpath;
}
mountpt_inode = desc.node;
/* Verfy the path is a mountpoint path or file path */
if (!INODE_IS_MOUNTPT(mountpt_inode) && !INODE_IS_BLOCK(mountpt_inode)) {
errcode = EPERM;
goto errout_with_release;
}
if (mountpt_inode->u.i_mops) {
status = LOS_OK;
if (status < 0) {
/* The inode is unhappy with the blkdrvr for some reason */
errcode = -status;
goto errout_with_release;
}
inode_release(mountpt_inode);
free(fullpath);
return OK;
} else {
errcode = EACCES;
goto errout_with_release;
}
/* A lot of goto's! But they make the error handling much simpler */
errout_with_release:
inode_release(mountpt_inode);
errout_with_fullpath:
free(fullpath);
errout:
set_errno(errcode);
return VFS_ERROR;
#endif
return 0;
}

View File

@ -53,101 +53,7 @@
#ifdef LOSCFG_FS_FAT_VIRTUAL_PARTITION
int virstatfs(const char *path, struct statfs *buf)
{
#ifdef VFS_IMPL_LATER
struct inode *inode = NULL;
int ret = OK;
char *fullpath = NULL;
struct inode_search_s desc;
/* Sanity checks */
if (!path || !buf)
{
ret = EFAULT;
goto errout;
}
if (!path[0])
{
ret = ENOENT;
goto errout;
}
ret = vfs_normalize_path((const char *)NULL, path, &fullpath);
if (ret < 0)
{
ret = -ret;
goto errout;
}
/* Get an inode for this file */
SETUP_SEARCH(&desc, fullpath, false);
ret = inode_find(&desc);
if (ret < 0)
{
/* This name does not refer to a psudeo-inode and there is no
* mountpoint that includes in this path.
*/
ret = EACCES;
free(fullpath);
goto errout;
}
inode = desc.node;
/* The way we handle the statfs depends on the type of inode that we
* are dealing with.
*/
#ifndef CONFIG_DISABLE_MOUNTPOINT
if (INODE_IS_MOUNTPT(inode))
{
/* The node is a file system mointpoint. Verify that the mountpoint
* supports the statfs() method
*/
if (inode->u.i_mops)
{
/* Perform the statfs() operation */
ret = LOS_OK;
}
else
{
ret = EINVAL;
goto errout_with_inode;
}
}
else
#endif
{
ret = EINVAL;
goto errout_with_inode;
}
/* Check if the statfs operation was successful */
if (ret < 0)
{
ret = -ret;
goto errout_with_inode;
}
/* Successfully statfs'ed the file */
inode_release(inode);
free(fullpath);
return OK;
/* Failure conditions always set the errno appropriately */
errout_with_inode:
inode_release(inode);
free(fullpath);
errout:
set_errno(ret);
return VFS_ERROR;
#endif
return 0;
//currently not implemented
return LOS_OK;
}
#endif

View File

@ -64,16 +64,18 @@ void PathCacheDump(void)
void PathCacheMemoryDump(void)
{
int pathCacheNum = 0;
int nameSum = 0;
for (int i = 0; i < LOSCFG_MAX_PATH_CACHE_SIZE; i++) {
LIST_HEAD *dhead = &g_pathCacheHashEntrys[i];
struct PathCache *dent = NULL;
LOS_DL_LIST_FOR_EACH_ENTRY(dent, dhead, struct PathCache, hashEntry) {
pathCacheNum++;
nameSum += dent->nameLen;
}
}
PRINTK("pathCache number = %d\n", pathCacheNum);
PRINTK("pathCache memory size = %d(B)\n", pathCacheNum * sizeof(struct PathCache));
PRINTK("pathCache memory size = %d(B)\n", pathCacheNum * sizeof(struct PathCache) + nameSum);
}
static uint32_t NameHash(const char *name, int len, struct Vnode *dvp)

View File

@ -837,6 +837,10 @@ static int os_shell_cmd_do_rmdir(const char *pathname)
return remove(pathname);
}
d = opendir(pathname);
if (d == NULL)
{
return -1;
}
while (1)
{
dirent = readdir(d);

View File

@ -47,7 +47,6 @@ static struct VnodeOps g_devfsOps;
#define ENTRY_TO_VNODE(ptr) LOS_DL_LIST_ENTRY(ptr, struct Vnode, actFreeEntry)
#define VNODE_LRU_COUNT 10
#define DEV_VNODE_MODE 0755
#define MAX_ITER_TIMES 10
int VnodesInit(void)
{
@ -98,8 +97,8 @@ struct Vnode *VnodeReclaimLru(void)
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, nextItem, &g_vnodeCurrList, struct Vnode, actFreeEntry) {
if ((item->useCount > 0) ||
(item->flag & VNODE_FLAG_MOUNT_NEW) ||
(item->flag & VNODE_FLAG_MOUNT_ORIGIN)) {
(item->flag & VNODE_FLAG_MOUNT_ORIGIN) ||
(item->flag & VNODE_FLAG_MOUNT_NEW)) {
continue;
}
@ -169,29 +168,21 @@ int VnodeFree(struct Vnode *vnode)
if (vnode == NULL) {
return LOS_OK;
}
struct PathCache *item = NULL;
struct PathCache *nextItem = NULL;
VnodeHold();
if (vnode->useCount > 0) {
VnodeDrop();
return -EBUSY;
}
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, nextItem, &vnode->childPathCaches, struct PathCache, childEntry) {
PathCacheFree(item);
}
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, nextItem, &vnode->parentPathCaches, struct PathCache, parentEntry) {
PathCacheFree(item);
}
VnodePathCacheFree(vnode);
LOS_ListDelete(&(vnode->hashEntry));
LOS_ListDelete(&vnode->actFreeEntry);
if (vnode->vop->Reclaim) {
vnode->vop->Reclaim(vnode);
}
LOS_ListDelete(&vnode->actFreeEntry);
memset_s(vnode, sizeof(struct Vnode), 0, sizeof(struct Vnode));
LOS_ListAdd(&g_vnodeFreeList, &vnode->actFreeEntry);
@ -201,83 +192,35 @@ int VnodeFree(struct Vnode *vnode)
return LOS_OK;
}
int VnodeFreeIter(struct Vnode *vnode)
int VnodeFreeAll(const struct Mount *mount)
{
struct Vnode *vp = NULL;
struct PathCache *item = NULL;
struct PathCache *nextItem = NULL;
struct Vnode *vnode = NULL;
struct Vnode *nextVnode = NULL;
int ret;
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, nextItem, &vnode->childPathCaches, struct PathCache, childEntry) {
vp = item->childVnode;
if (vp == NULL) {
continue;
}
ret = VnodeFreeIter(vp);
if (ret != LOS_OK) {
return ret;
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(vnode, nextVnode, &g_vnodeCurrList, struct Vnode, actFreeEntry) {
if ((vnode->originMount == mount) && !(vnode->flag & VNODE_FLAG_MOUNT_NEW)) {
ret = VnodeFree(vnode);
if (ret != LOS_OK) {
return ret;
}
}
}
return VnodeFree(vnode);
return LOS_OK;
}
int VnodeFreeAll(struct Mount *mnt)
BOOL VnodeInUseIter(const struct Mount *mount)
{
struct Vnode *vp = NULL;
struct Vnode *mountptVnode = mnt->vnodeCovered;
struct PathCache *item = NULL;
struct PathCache *nextItem = NULL;
int ret;
struct Vnode *vnode = NULL;
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, nextItem, &mountptVnode->childPathCaches, struct PathCache, childEntry) {
vp = item->childVnode;
if (vp == NULL) {
continue;
}
ret = VnodeFreeIter(vp);
if (ret != LOS_OK) {
return ret;
LOS_DL_LIST_FOR_EACH_ENTRY(vnode, &g_vnodeCurrList, struct Vnode, actFreeEntry) {
if (vnode->originMount == mount) {
if ((vnode->useCount > 0) || (vnode->flag & VNODE_FLAG_MOUNT_ORIGIN)) {
return TRUE;
}
}
}
return 0;
}
static VOID VnodeIterDump(struct Vnode *vnode, int increase)
{
static int count = 0;
LIST_ENTRY *list = &vnode->parentPathCaches;
struct PathCache *pathCache = LOS_DL_LIST_ENTRY(list->pstNext, struct PathCache, parentEntry);
count += increase;
if (count >= MAX_ITER_TIMES) {
PRINTK("########## Vnode In Use Iteration ##########\n");
PRINTK("Iteration times: %d\n", count);
PRINTK("%p -- %s --> %p\n", vnode->parent, pathCache->name, vnode);
PathCacheDump();
}
}
BOOL VnodeInUseIter(struct Vnode *vnode)
{
struct Vnode *vp = NULL;
struct PathCache *item = NULL;
struct PathCache *nextItem = NULL;
VnodeIterDump(vnode, 1);
if (vnode->useCount > 0) {
VnodeIterDump(vnode, -1);
return TRUE;
}
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, nextItem, &vnode->childPathCaches, struct PathCache, childEntry) {
vp = item->childVnode;
if (vp == NULL) {
continue;
}
if (VnodeInUseIter(vp) == TRUE) {
VnodeIterDump(vnode, -1);
return TRUE;
}
}
VnodeIterDump(vnode, -1);
return FALSE;
}
@ -335,7 +278,7 @@ static int PreProcess(const char *originPath, struct Vnode **startVnode, char **
static struct Vnode *ConvertVnodeIfMounted(struct Vnode *vnode)
{
if ((vnode == NULL) || !(vnode->flag & VNODE_FLAG_MOUNT_NEW)) {
if ((vnode == NULL) || !(vnode->flag & VNODE_FLAG_MOUNT_ORIGIN)) {
return vnode;
}
return vnode->newMount->vnodeCovered;
@ -487,7 +430,7 @@ static void ChangeRootInternal(struct Vnode *rootOld, char *dirname)
mnt->vnodeBeCovered = nodeInFs;
nodeInFs->newMount = mnt;
nodeInFs->flag |= VNODE_FLAG_MOUNT_NEW;
nodeInFs->flag |= VNODE_FLAG_MOUNT_ORIGIN;
break;
}
@ -600,7 +543,7 @@ int VnodeDevInit()
return -ENOMEM;
}
devMount->vnodeCovered = devNode;
devMount->vnodeBeCovered->flag |= VNODE_FLAG_MOUNT_NEW;
devMount->vnodeBeCovered->flag |= VNODE_FLAG_MOUNT_ORIGIN;
return LOS_OK;
}
@ -668,8 +611,8 @@ void VnodeMemoryDump(void)
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, nextItem, &g_vnodeCurrList, struct Vnode, actFreeEntry) {
if ((item->useCount > 0) ||
(item->flag & VNODE_FLAG_MOUNT_NEW) ||
(item->flag & VNODE_FLAG_MOUNT_ORIGIN)) {
(item->flag & VNODE_FLAG_MOUNT_ORIGIN) ||
(item->flag & VNODE_FLAG_MOUNT_NEW)) {
continue;
}
@ -679,3 +622,27 @@ void VnodeMemoryDump(void)
PRINTK("Vnode number = %d\n", vnodeCount);
PRINTK("Vnode memory size = %d(B)\n", vnodeCount * sizeof(struct Vnode));
}
int VnodeDestory(struct Vnode *vnode)
{
if (vnode == NULL || vnode->vop != &g_devfsOps) {
/* destory only support dev vnode */
return -EINVAL;
}
VnodeHold();
if (vnode->useCount > 0) {
VnodeDrop();
return -EBUSY;
}
VnodePathCacheFree(vnode);
LOS_ListDelete(&(vnode->hashEntry));
LOS_ListDelete(&vnode->actFreeEntry);
free(vnode->data);
free(vnode);
VnodeDrop();
return LOS_OK;
}

View File

@ -134,4 +134,4 @@ int VfsHashInsert(struct Vnode *vnode, uint32_t hash)
LOS_ListHeadInsert(VfsHashBucket(vnode->originMount, hash), &vnode->hashEntry);
(void)LOS_MuxUnlock(&g_vnodeHashMux);
return LOS_OK;
}
}

View File

@ -55,10 +55,14 @@ STATIC INLINE VOID OsAddNode2SortLink(SortLinkAttribute *sortLinkHeader, SortLin
}
SortLinkList *listSorted = LOS_DL_LIST_ENTRY(head->pstNext, SortLinkList, sortLinkNode);
if (listSorted->responseTime >= sortList->responseTime) {
if (listSorted->responseTime > sortList->responseTime) {
LOS_ListAdd(head, &sortList->sortLinkNode);
sortLinkHeader->nodeNum++;
return;
} else if (listSorted->responseTime == sortList->responseTime) {
LOS_ListAdd(head->pstNext, &sortList->sortLinkNode);
sortLinkHeader->nodeNum++;
return;
}
LOS_DL_LIST *prevNode = head->pstPrev;

View File

@ -107,9 +107,8 @@ struct VmMapRegion {
typedef struct VmSpace {
LOS_DL_LIST node; /**< vm space dl list */
LOS_DL_LIST regions; /**< region dl list */
LosRbTree regionRbTree; /**< region red-black tree root */
LosMux regionMux; /**< region list mutex lock */
LosMux regionMux; /**< region red-black tree mutex lock */
VADDR_T base; /**< vm space base addr */
UINT32 size; /**< vm space size */
VADDR_T heapBase; /**< vm space heap base address */

View File

@ -123,149 +123,6 @@ VOID OsDeletePageCacheLru(LosFilePage *page)
OsPageCacheDel(page);
}
#if VFS_IMPL_LATER
STATIC LosFilePage *OsPagecacheGetPageAndFill(struct file *filp, VM_OFFSET_T pgOff, size_t *readSize, VADDR_T *kvaddr)
{
LosFilePage *page = NULL;
struct page_mapping *mapping = filp->f_mapping;
page = OsFindGetEntry(mapping, pgOff);
if (page != NULL) {
OsSetPageLocked(page->vmPage);
OsPageRefIncLocked(page);
*kvaddr = (VADDR_T)(UINTPTR)OsVmPageToVaddr(page->vmPage);
*readSize = PAGE_SIZE;
} else {
page = OsPageCacheAlloc(mapping, pgOff);
if (page == NULL) {
VM_ERR("Failed to alloc a page frame");
return page;
}
OsSetPageLocked(page->vmPage);
*kvaddr = (VADDR_T)(UINTPTR)OsVmPageToVaddr(page->vmPage);
file_seek(filp, pgOff << PAGE_SHIFT, SEEK_SET);
/* "ReadPage" func exists definitely in this procedure */
*readSize = filp->f_vnode->u.i_mops->readpage(filp, (char *)(UINTPTR)*kvaddr, PAGE_SIZE);
if (*readSize == 0) {
VM_ERR("read 0 bytes");
OsCleanPageLocked(page->vmPage);
}
OsAddToPageacheLru(page, mapping, pgOff);
}
return page;
}
ssize_t OsMappingRead(struct file *filp, char *buf, size_t size)
{
INT32 ret;
vaddr_t kvaddr = 0;
UINT32 intSave;
struct stat bufStat;
size_t readSize = 0;
size_t readTotal = 0;
size_t readLeft = size;
LosFilePage *page = NULL;
VM_OFFSET_T pos = file_seek(filp, 0, SEEK_CUR);
VM_OFFSET_T pgOff = pos >> PAGE_SHIFT;
INT32 offInPage = pos % PAGE_SIZE;
struct page_mapping *mapping = filp->f_mapping;
INT32 nPages = (ROUNDUP(pos + size, PAGE_SIZE) - ROUNDDOWN(pos, PAGE_SIZE)) >> PAGE_SHIFT;
ret = stat(filp->f_path, &bufStat);
if (ret != OK) {
VM_ERR("Get file size failed. (filepath=%s)", filp->f_path);
return 0;
}
if (pos >= bufStat.st_size) {
PRINT_INFO("%s filp->f_pos >= bufStat.st_size (pos=%ld, fileSize=%ld)\n", filp->f_path, pos, bufStat.st_size);
return 0;
}
LOS_SpinLockSave(&mapping->list_lock, &intSave);
for (INT32 i = 0; (i < nPages) && readLeft; i++, pgOff++) {
page = OsPagecacheGetPageAndFill(filp, pgOff, &readSize, &kvaddr);
if ((page == NULL) || (readSize == 0)) {
break;
}
if (readSize < PAGE_SIZE) {
readLeft = readSize;
}
readSize = MIN2((PAGE_SIZE - offInPage), readLeft);
(VOID)memcpy_s((VOID *)buf, readLeft, (char *)(UINTPTR)kvaddr + offInPage, readSize);
buf += readSize;
readLeft -= readSize;
readTotal += readSize;
offInPage = 0;
OsCleanPageLocked(page->vmPage);
}
LOS_SpinUnlockRestore(&mapping->list_lock, intSave);
file_seek(filp, pos + readTotal, SEEK_SET);
return readTotal;
}
#endif
ssize_t OsMappingWrite(struct file *filp, const char *buf, size_t size)
{
VADDR_T kvaddr;
UINT32 intSave;
INT32 writeSize = 0;
size_t writeLeft = size;
VM_OFFSET_T pos = file_seek(filp, 0, SEEK_CUR);
VM_OFFSET_T pgOff = pos >> PAGE_SHIFT;
INT32 offInPage = pos % PAGE_SIZE;
LosFilePage *page = NULL;
struct page_mapping *mapping = filp->f_mapping;
INT32 nPages = (ROUNDUP(pos + size, PAGE_SIZE) - ROUNDDOWN(pos, PAGE_SIZE)) >> PAGE_SHIFT;
LOS_SpinLockSave(&mapping->list_lock, &intSave);
for (INT32 i = 0; i < nPages; i++, pgOff++) {
page = OsFindGetEntry(mapping, pgOff);
if (page) {
kvaddr = (VADDR_T)(UINTPTR)OsVmPageToVaddr(page->vmPage);
OsSetPageLocked(page->vmPage);
OsPageRefIncLocked(page);
} else {
page = OsPageCacheAlloc(mapping, pgOff);
if (page == NULL) {
VM_ERR("Failed to alloc a page frame");
break;
}
kvaddr = (VADDR_T)(UINTPTR)OsVmPageToVaddr(page->vmPage);
OsAddToPageacheLru(page, mapping, pgOff);
OsSetPageLocked(page->vmPage);
}
writeSize = MIN2((PAGE_SIZE - offInPage), writeLeft);
(VOID)memcpy_s((char *)(UINTPTR)kvaddr + offInPage, writeLeft, buf, writeSize);
buf += writeSize;
writeLeft -= writeSize;
OsMarkPageDirty(page, NULL, offInPage, writeSize);
offInPage = 0;
OsCleanPageLocked(page->vmPage);
}
LOS_SpinUnlockRestore(&mapping->list_lock, intSave);
file_seek(filp, pos + size - writeLeft, SEEK_SET);
return (size - writeLeft);
}
STATIC VOID OsPageCacheUnmap(LosFilePage *fpage, LosArchMmu *archMmu, VADDR_T vaddr)
{
UINT32 intSave;

View File

@ -132,7 +132,6 @@ STATIC BOOL OsVmSpaceInitCommon(LosVmSpace *vmSpace, VADDR_T *virtTtb)
{
LOS_RbInitTree(&vmSpace->regionRbTree, OsRegionRbCmpKeyFn, OsRegionRbFreeFn, OsRegionRbGetKeyFn);
LOS_ListInit(&vmSpace->regions);
status_t retval = LOS_MuxInit(&vmSpace->regionMux, NULL);
if (retval != LOS_OK) {
VM_ERR("Create mutex for vm space failed, status: %d", retval);
@ -239,34 +238,6 @@ STATIC BOOL OsVmSpaceParamCheck(LosVmSpace *vmSpace)
return TRUE;
}
LosVmMapRegion *OsShareRegionClone(LosVmMapRegion *oldRegion)
{
/* no need to create vm object */
LosVmMapRegion *newRegion = LOS_MemAlloc(m_aucSysMem0, sizeof(LosVmMapRegion));
if (newRegion == NULL) {
VM_ERR("malloc new region struct failed.");
return NULL;
}
/* todo: */
*newRegion = *oldRegion;
return newRegion;
}
LosVmMapRegion *OsPrivateRegionClone(LosVmMapRegion *oldRegion)
{
/* need to create vm object */
LosVmMapRegion *newRegion = LOS_MemAlloc(m_aucSysMem0, sizeof(LosVmMapRegion));
if (newRegion == NULL) {
VM_ERR("malloc new region struct failed.");
return NULL;
}
/* todo: */
*newRegion = *oldRegion;
return newRegion;
}
STATUS_T LOS_VmSpaceClone(LosVmSpace *oldVmSpace, LosVmSpace *newVmSpace)
{
LosVmMapRegion *oldRegion = NULL;
@ -841,11 +812,6 @@ STATUS_T OsIsRegionCanExpand(LosVmSpace *space, LosVmMapRegion *region, size_t s
return LOS_NOK;
}
/* if next node is head, then we can expand */
if (OsIsVmRegionEmpty(space) == TRUE) {
return LOS_OK;
}
nextRegion = (LosVmMapRegion *)LOS_RbSuccessorNode(&space->regionRbTree, &region->rbNode);
/* if the gap is larger than size, then we can expand */
if ((nextRegion != NULL) && ((nextRegion->range.base - region->range.base) >= size)) {

View File

@ -435,11 +435,6 @@ INT32 ShmGet(key_t key, size_t size, INT32 shmflg)
INT32 shmid;
SYSV_SHM_LOCK();
if (!((UINT32)shmflg & IPC_CREAT) &&
((UINT32)shmflg & IPC_EXCL)) {
ret = -EINVAL;
goto ERROR;
}
if (key == IPC_PRIVATE) {
ret = ShmAllocSeg(key, size, shmflg);
@ -454,6 +449,11 @@ INT32 ShmGet(key_t key, size_t size, INT32 shmflg)
}
} else {
shmid = ret;
if (((UINT32)shmflg & IPC_CREAT) &&
((UINT32)shmflg & IPC_EXCL)) {
ret = -EEXIST;
goto ERROR;
}
ret = ShmPermCheck(ShmFindSeg(shmid), (UINT32)shmflg & ACCESSPERMS);
if (ret != 0) {
ret = -ret;

View File

@ -28,8 +28,23 @@ endchoice
config BOOTENV_ADDR
int "Address of boot command line (KB)"
depends on PLATFORM_ROOTFS
depends on PLATFORM_ROOTFS && (STORAGE_SPINOR || STORAGE_SPINAND || STORAGE_EMMC)
range 0 1024
default 512
help
Boot command line addr, range from 0 to 1MB.
config BOOTENV_RAM
bool "Read bootenv from RAM"
default n
depends on PLATFORM_ROOTFS
help
Answer Y to read bootenv from ram. Need boot copy to RAM.
config BOOTENV_RAMSIZE
int "Size of boot environment in RAM (Byte)"
depends on PLATFORM_ROOTFS && BOOTENV_RAM
range 128 1024
default 512
help
Boot environment in Ram space size, range from 128 to 1024 byte.

View File

@ -117,10 +117,6 @@
#include "los_hilog.h"
#endif
#ifdef LOSCFG_QUICK_START
#include "los_quick_start_pri.h"
#endif
STATIC SystemRebootFunc g_rebootHook = NULL;
@ -388,13 +384,6 @@ STATIC UINT32 OsSystemInitTaskCreate(VOID)
return LOS_TaskCreate(&taskID, &sysTask);
}
#ifdef LOSCFG_QUICK_START
UINT32 OsSystemInitStep2(VOID)
{
SystemInit2();
return 0;
}
#endif
UINT32 OsSystemInit(VOID)
{

View File

@ -219,7 +219,7 @@ STATIC const CHAR *GetDevName(const CHAR *rootType, INT32 rootAddr, INT32 rootSi
#ifndef LOSCFG_SECURITY_BOOT
STATIC INT32 GetArgs(CHAR **args)
{
#ifdef LOSCFG_QUICK_START
#ifdef LOSCFG_BOOTENV_RAM
*args = OsGetArgsAddr();
return LOS_OK;
@ -387,7 +387,7 @@ STATIC INT32 GetRootType(CHAR **rootType, CHAR **fsType, INT32 *rootAddr, INT32
PRINT_ERR("Cannot get bootargs!\n");
return LOS_NOK;
}
#ifndef LOSCFG_QUICK_START
#ifndef LOSCFG_BOOTENV_RAM
CHAR *argsBak = NULL;
argsBak = args;
#endif
@ -399,7 +399,7 @@ STATIC INT32 GetRootType(CHAR **rootType, CHAR **fsType, INT32 *rootAddr, INT32
p = strsep(&args, " ");
}
if ((*fsType != NULL) && (*rootType != NULL)) {
#ifndef LOSCFG_QUICK_START
#ifndef LOSCFG_BOOTENV_RAM
free(argsBak);
#endif
return LOS_OK;
@ -415,7 +415,7 @@ ERROUT:
free(*fsType);
*fsType = NULL;
}
#ifndef LOSCFG_QUICK_START
#ifndef LOSCFG_BOOTENV_RAM
free(argsBak);
#endif
return LOS_NOK;
@ -444,7 +444,7 @@ STATIC VOID OsMountUserdata(const CHAR *fsType)
return;
}
err = get_errno();
if (err == ENOENT) {
if (err == ENOTSUP) {
#ifdef LOSCFG_FS_FAT
ret = format(emmcUserdataDev, 0, FM_FAT32);
if (ret != LOS_OK) {

View File

@ -76,7 +76,7 @@ INT32 OsMountRootfs(VOID);
VOID OsSetCmdLineAddr(UINT64 addr);
UINT64 OsGetCmdLineAddr(VOID);
#ifdef LOSCFG_QUICK_START
#ifdef LOSCFG_BOOTENV_RAM
CHAR *OsGetArgsAddr(VOID);
#endif
#endif /* _LOS_ROOTFS_H */

50
testsuites/Kconfig Normal file
View File

@ -0,0 +1,50 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# For a description of the syntax of this configuration file,
# see extra/config/Kconfig-language.txt
#
mainmenu "Huawei LiteOS Configuration"
menu "Enable Kernel TestSuit"
config KERNEL_TEST
bool "Enable Kernel Testsuit"
config TEST
bool "Enable Auto TestSuit"
default y
depends on KERNEL_TEST
source "./kernel/Kconfig"
source "./kernel/Kconfig_case"
endmenu

28
testsuites/LICENSE Normal file
View File

@ -0,0 +1,28 @@
Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors may be used
to endorse or promote products derived from this software without specific prior written
permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

127
testsuites/Makefile Normal file
View File

@ -0,0 +1,127 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
LITEOSTESTTOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
export OS=$(shell uname -s)
ifneq ($(OS), Linux)
LITEOSTESTTOPDIR := $(shell dirname $(subst \,/,$(LITEOSTESTTOPDIR))/./)
endif
LITEOSTOPDIR := $(LITEOSTESTTOPDIR)/..
export LITEOSTOPDIR
export LITEOSTESTTOPDIR
-include $(LITEOSTESTTOPDIR)/config.mk
RM = -rm -rf
MAKE = make
__LIBS = libs
APPS = apps
KERNEL = kernel
TEST = test
TEST_KERNEL = test_kernel
TEST_APPS = test_apps
ROOTFSDIR = rootfsdir
ROOTFS = rootfs
HIDE := @
LITEOS_TEST_TARGET = liteos_ktest
LITEOS_TEST_LIBC = test_libs
LITEOS_LIBS_TARGET = libs_target
LITEOS_TEST_AUTOCONFIG_H = $(LITEOSTESTTOPDIR)/include/generated/autoconf.h
LITEOS_TEST_KERNEL_MENUCONFIG_H = $(LITEOSTESTTOPDIR)/kernel/include
#######LITEOS_TEST_USER_MENUCONFIG_H = $(LITEOSTESTTOPDIR)/apps/include
ifeq ($(LOSCFG_KERNEL_TEST), y)
LITEOS_TEST_MENUCONFIG_H = $(LITEOS_TEST_KERNEL_MENUCONFIG_H)/test_menuconfig.h
#######else
#######LITEOS_TEST_MENUCONFIG_H = $(LITEOS_TEST_USER_MENUCONFIG_H)/test_menuconfig.h
endif
ifeq ($(LOSCFG_STORAGE_SPINOR), y)
FSTYPE = jffs2
endif
ifeq ($(LOSCFG_STORAGE_EMMC), y)
FSTYPE = vfat
endif
ROOTFS_DIR = $(OUT)/rootfs
ROOTFS_ZIP = $(OUT)/rootfs.zip
VERSION =
LITEOS_LIBDEP := $(LITEOS_BASELIB)
$(TEST_KERNEL): $(LITEOS_TEST_TARGET)
$(LITEOS_TEST_TARGET): $(LITEOS_TEST_LIBC)
$(LD) $(LITEOS_LDFLAGS) $(LITEOS_TABLES_LDFLAGS) $(LITEOS_DYNLDFLAGS) -Map=$(OUT)/$@.map -o $(OUT)/$@ --start-group $(LITEOS_LIBDEP) --end-group
$(OBJCOPY) -O binary $(OUT)/$@ $(LITEOS_TARGET_DIR)/$@.bin
$(OBJDUMP) -t $(OUT)/$@ |sort >$(OUT)/$@.sym.sorted
$(OBJDUMP) -d $(OUT)/$@ >$(OUT)/$@.asm
$(LITEOS_TEST_LIBC): $(KERNEL)
$(HIDE)for dir in $(TESTLIB_SUBDIRS); \
do $(MAKE) -C $$dir all || exit 1; \
done
$(HIDE)echo "=============== make lib done ==============="
$(KERNEL): $(LITEOS_TEST_AUTOCONFIG_H)
$(HIDE)$(MAKE) -C ../ lib || exit 1
#echo "LITEOS_CFLAGS : $(LITEOS_CFLAGS)"
##### make test menuconfig #####
export CONFIG_=LOSCFG_
MENUCONFIG_PATH = $(LITEOSTOPDIR)/tools/menuconfig
TEST_KCONFIG_FILE_PATH = $(LITEOSTESTTOPDIR)/Kconfig
menuconfig:$(MENUCONFIG_PATH)/mconf
$< $(TEST_KCONFIG_FILE_PATH)
genconfig:$(MENUCONFIG_PATH)/conf
$(HIDE)mkdir -p include/config include/generated
$< --silentoldconfig $(TEST_KCONFIG_FILE_PATH)
mv -f $(LITEOS_TEST_AUTOCONFIG_H) $(LITEOS_TEST_MENUCONFIG_H)
##### menuconfig end #######
genconfig:$(MENUCONFIG_PATH)/conf
$(LITEOS_TEST_AUTOCONFIG_H):
ifneq ($(LITEOS_TEST_MENUCONFIG_H), $(wildcard $(LITEOS_TEST_MENUCONFIG_H)))
$(HIDE)$(MAKE) genconfig
endif
clean:
$(HIDE)$(MAKE) -C ../ clean || exit 1
$(HIDE)for dir in $(TESTLIB_SUBDIRS); \
do $(MAKE) -C $$dir clean || exit 1; \
done
$(HIDE)$(RM) include
$(HIDE)$(RM) $(LITEOS_TEST_MENUCONFIG_H)
$(HIDE)$(RM) $(OUT)
.PHONY: test_apps test_kernel clean

View File

@ -0,0 +1,43 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
TESTLIB_SUBDIRS :=
-include $(LITEOSTESTTOPDIR)/.config
ifeq ($(LOSCFG_KERNEL_TEST), y)
-include $(LITEOSTESTTOPDIR)/kernel/test.mk
endif
ifeq ($(LOSCFG_LLTREPORT) ,y)
# -fprofile-arcs may introduce false alarm on 'maybe-uninitialized'
LITEOS_GCOV_OPTS := -fprofile-arcs -ftest-coverage -Wno-maybe-uninitialized
LITEOS_BASELIB += -lgcov
endif

49
testsuites/config.mk Normal file
View File

@ -0,0 +1,49 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-include $(LITEOSTOPDIR)/tools/build/config.mk
-include $(LITEOSTESTTOPDIR)/build/los_test_config.mk
LITEOS_CFLAGS += -I $(LITEOSTOPDIR)/lib/libc/musl/include \
-I $(LITEOSTOPDIR)/lib/libc/musl/obj/include \
-I $(LITEOSTOPDIR)/lib/libc/musl/arch/arm \
-I $(LITEOSTOPDIR)/lib/libc/musl/arch/generic \
-I $(LITEOSTHIRDPARTY)/bounds_checking_function/include \
-I $(LITEOSTOPDIR)/security/cap/ \
-I $(LITEOSTOPDIR)/security/vid/ \
-I $(LITEOSTOPDIR)/platform/include \
-I $(LITEOSTOPDIR)/kernel/base/include\
-I $(LITEOSTOPDIR)/kernel/include \
-I $(LITEOSTOPDIR)/kernel/extended/include \
-I $(LITEOSTOPDIR)/fs/vfs \
-I $(LITEOSTHIRDPARTY)/FatFs/source \
-I $(LITEOSTOPDIR)/fs/proc/include \
-I $(LITEOSTOPDIR)/fs/jffs2/os_adapt \
-I $(LITEOSTHIRDPARTY)/NuttX/fs/nfs/ \
-I $(LITEOSTOPDIR)/bsd/compat/linuxkpi/include

142
testsuites/kernel/BUILD.gn Normal file
View File

@ -0,0 +1,142 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import("//build/lite/config/component/lite_component.gni")
static_library("test_base") {
sources = [
"src/ChipTest.c",
"src/iCunit.c",
"src/osTest.c",
"src/testrun_shellcmd.c",
"src/testusb_shellcmd.c",
]
include_dirs = [
"../kernel/base/includ",
"../kernel/include",
"../kernel/extended/include",
"include",
"../fs/vfs",
"../fs/proc/include",
"../fs/jffs2/include",
"../fs/nfs/include",
"../bsd/compat/linuxkpi/include",
]
}
lite_component("test") {
features = [ ":test_base" ]
# KERNEL BASE TEST
if (LOSCFG_TEST_KERNEL_BASE_IPC) {
features += [ "sample/kernel_base/ipc:test_ipc" ]
}
if (LOSCFG_TEST_KERNEL_BASE_CORE) {
features += [ "sample/kernel_base/core:test_core" ]
}
if (LOSCFG_TEST_KERNEL_BASE_MP) {
features += [ "sample/kernel_base/mp:test_mp" ]
}
if (LOSCFG_TEST_KERNEL_BASE_MEM) {
features += [ "sample/kernel_base/mem:test_mem" ]
}
if (LOSCFG_TEST_KERNEL_BASE_MISC) {
features += [ "sample/kernel_base/misc:test_misc" ]
}
if (LOSCFG_TEST_KERNEL_BASE_OM) {
features += [ "sample/kernel_base/om:test_om" ]
}
if (LOSCFG_TEST_KERNEL_BASE_ATOMIC) {
features += [ "sample/kernel_base/atomic:test_atomic" ]
}
# KERNEL EXTEND TEST
if (LOSCFG_TEST_KERNEL_EXTEND_CPP) {
features += [ "sample/kernel_extend/cpp:test_cpp" ]
}
if (LOSCFG_TEST_KERNEL_EXTEND_CPUP) {
features += [ "sample/kernel_extend/cpup:test_cpup" ]
}
if (LOSCFG_TEST_KERNEL_EXTEND_MMU) {
features += [ "sample/kernel_extend/mmu:test_mmu" ]
}
# COMPAT TEST
if (LOSCFG_TEST_POSIX) {
features += [
"sample/posix:test_posix",
# "sample/posix/smp:test_posix_smp",
]
}
# if (LOSCFG_TEST_POSIX_MEM) {
# features += [ "sample/posix/mem:test_posix_mem" ]
# }
# if (LOSCFG_TEST_POSIX_MQUEUE) {
# features += [ "sample/posix/mqueue:test_posix_mqueue" ]
# }
# if (LOSCFG_TEST_POSIX_MUTEX) {
# features += [ "sample/posix/mutex:test_posix_mutex" ]
# }
# if (LOSCFG_TEST_POSIX_PTHREAD) {
# features += [ "sample/posix/pthread:test_posix_pthread" ]
# }
# if (LOSCFG_TEST_POSIX_SCHED) {
# features += [ "sample/posix/sched:test_posix_sched" ]
# }
# if (LOSCFG_TEST_POSIX_SEM) {
# features += [ "sample/posix/sem:test_posix_sem" ]
# }
# if (LOSCFG_TEST_POSIX_SWTMR) {
# features += [ "sample/posix/swtmr:test_posix_swtmr" ]
# }
if (LOSCFG_TEST_LINUX) {
features += [ "sample/linux:test_linux" ]
}
#if (LOSCFG_TEST_LINUX_HRTIMER) {
# features += [ "sample/linux/hrtimer:test_linux_hrtimer" ]
#}
# LIBC TEST
if (LOSCFG_TEST_LIBC) {
features += [ "sample/libc:test_libc" ]
}
# LIBM TEST
if (LOSCFG_TEST_LIBM) {
features += [ "sample/libm:test_libm" ]
}
# SHELL TEST
if (LOSCFG_TEST_SHELL) {
features += [ "sample/shell:test_shell" ]
}
}

426
testsuites/kernel/Kconfig Normal file
View File

@ -0,0 +1,426 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config TEST_LEVEL
bool "Enable Test Level"
default y
depends on TEST
config TEST_SMOKE
bool "Enable Test smoke"
default y
depends on TEST && TEST_LEVEL
config TEST_FULL
bool "Enable Test full"
default y
depends on TEST && TEST_LEVEL
config TEST_PRESSURE
bool "Enable Test Pressure"
default n
depends on TEST && TEST_LEVEL
config TEST_LLT
bool "Enable Test LLT"
default n
depends on TEST && TEST_LEVEL
config TEST_MUTIL
bool "Enable Multi Testsuit"
default n
depends on KERNEL_TEST && TEST
config TEST_KERNEL_BASE
bool "Enable Kernel Testsuit"
default y
depends on KERNEL_TEST && TEST
config TEST_KERNEL_BASE_IPC
bool "Enable IPC Testsuit"
default y
depends on KERNEL_TEST && TEST_KERNEL_BASE && TEST
config TEST_KERNEL_BASE_CORE
bool "Enable CORE Testsuit"
default y
depends on KERNEL_TEST && TEST_KERNEL_BASE && TEST
config TEST_KERNEL_BASE_MP
bool "Enable MP Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_BASE && TEST && KERNEL_SMP
config TEST_KERNEL_BASE_MEM
bool "Enable MEM Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_BASE && TEST
config TEST_KERNEL_BASE_VM
bool "Enable VM Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_BASE && TEST
config TEST_KERNEL_BASE_MISC
bool "Enable MISC Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_BASE && TEST
config TEST_KERNEL_BASE_OM
bool "Enable OM Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_BASE && TEST
config TEST_KERNEL_BASE_ATOMIC
bool "Enable ATOMIC Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_BASE && TEST
config TEST_KERNEL_EXTEND
bool "Enable Extended Kernel Testsuit"
default y
depends on KERNEL_TEST && TEST
config TEST_KERNEL_EXTEND_CPP
bool "Enable CPP Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && TEST
config TEST_KERNEL_EXTEND_CPUP
bool "Enable CPUP Testsuit"
default y
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && TEST
config TEST_KERNEL_EXTEND_EXC
bool "Enable EXC Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && TEST
config TEST_KERNEL_EXTEND_UNALIGNACCESS
bool "Enable UNALIGNACCESS Testsuit"
default n
depends on KERNEL_TEST && DO_ALIGN && TEST_KERNEL_EXTEND && TEST
config TEST_KERNEL_EXTEND_MMU
bool "Enable MMU Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && TEST
config TEST_KERNEL_EXTEND_DYNLOAD
bool "Enable DYNLOAD Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && TEST
config TEST_KERNEL_EXTEND_MPU
bool "Enable MPU Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && TEST
config TEST_KERNEL_EXTEND_RUNSTOP
bool "Enable RUNSTOP Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && KERNEL_RUNSTOP && TEST
config TEST_KERNEL_EXTEND_SCATTER
bool "Enable SCATTER Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && KERNEL_SCATTER && TEST
config TEST_KERNEL_EXTEND_TICKLESS
bool "Enable TICKLESS Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && TEST
config TEST_KERNEL_EXTEND_TRACE
bool "Enable TRACE Testsuit"
default n
depends on KERNEL_TEST && TEST_KERNEL_EXTEND && TEST
config TEST_POSIX
bool "Enable Posix Testsuit"
default y
depends on KERNEL_TEST && TEST
config TEST_POSIX_MEM
bool "Enable Mem Testsuit"
default n
depends on KERNEL_TEST && TEST_POSIX && TEST
config TEST_POSIX_MQUEUE
bool "Enable Mqueue Testsuit"
default n
depends on KERNEL_TEST && TEST_POSIX && TEST
config TEST_POSIX_MUTEX
bool "Enable Mutex Testsuit"
default y
depends on KERNEL_TEST && TEST_POSIX && TEST
config TEST_POSIX_PTHREAD
bool "Enable Pthread Testsuit"
default y
depends on KERNEL_TEST && TEST_POSIX && TEST
config TEST_POSIX_SCHED
bool "Enable Sched Testsuit"
default n
depends on KERNEL_TEST && TEST_POSIX && TEST
config TEST_POSIX_SEM
bool "Enable Sem Testsuit"
default n
depends on KERNEL_TEST && TEST_POSIX && TEST
config TEST_POSIX_SWTMR
bool "Enable Swtmr Testsuit"
default n
depends on KERNEL_TEST && TEST_POSIX && TEST
config TEST_LINUX
bool "Enable Linux Testsuit"
default n
depends on KERNEL_TEST && TEST
config TEST_LINUX_HRTIMER
bool "Enable Hrtimer Testsuit"
default n
depends on KERNEL_TEST && TEST_LINUX && TEST
config TEST_FS
bool "Enable FS Testsuit"
default n
depends on KERNEL_TEST && TEST
config TEST_FS_VFS
bool "Enable VFS Test"
default n
depends on KERNEL_TEST && TEST_FS && TEST
config TEST_FS_JFFS
bool "Enable JFFS Test"
default n
depends on KERNEL_TEST && TEST_FS && TEST
config TEST_FS_RAMFS
bool "Enable RAMFS Test"
default n
depends on KERNEL_TEST && TEST_FS && TEST
config TEST_FS_FAT
bool "Enable FAT Test"
default n
depends on KERNEL_TEST && TEST_FS && TEST
config TEST_FS_FAT_FAT32
bool "Enable FAT32 Test"
default n
depends on KERNEL_TEST && TEST_FS_FAT && TEST
config TEST_FAT32_FSCK
bool "Enable FAT32 Fsck Test"
default n
depends on KERNEL_TEST && TEST_FS_FAT && TEST
config TEST_FS_VIRPART
bool "Enable FAT virtual partition test"
default n
depends on KERNEL_TEST && FS_FAT_VIRTUAL_PARTITION && TEST_FS && TEST
config TEST_FS_PROC
bool "Enable PROC Test"
default n
depends on KERNEL_TEST && TEST_FS && TEST
config TEST_FS_NFS
bool "Enable NFS Test"
default n
depends on KERNEL_TEST && TEST_FS && TEST
config TEST_MTD
bool "Enable MTD Testsuit"
default n
depends on KERNEL_TEST && TEST
config TEST_MTD_JFFS
bool "Enable JFFS MTD Testsuit"
default n
depends on KERNEL_TEST && TEST_MTD && TEST
config TEST_MTD_FAT
bool "Enable FAT MTD Testsuit"
default n
depends on KERNEL_TEST && TEST_MTD && !FS_FAT_VIRTUAL_PARTITION && TEST
config TEST_MTD_DISK
bool "Enable FAT MTD DISK Test"
default n
depends on KERNEL_TEST && TEST_MTD && !FS_FAT_VIRTUAL_PARTITION && TEST
config TEST_MTD_FAT_VIRPART
bool "Enable FAT virtual partition MTD test"
default n
depends on KERNEL_TEST && TEST_MTD && FS_FAT_VIRTUAL_PARTITION && TEST
config TEST_DRIVERBASE
bool "Enable DriverBase Testsuit"
default n
depends on KERNEL_TEST && TEST
config TEST_LIBC
bool "Enable LIBC Testsuit"
default n
depends on KERNEL_TEST && TEST
config TEST_LIBM
bool "Enable LIBM Testsuit"
default n
depends on KERNEL_TEST && TEST
config TEST_SHELL
bool "Enable Shell Testsuit"
default n
depends on KERNEL_TEST && TEST
config TEST_USB
bool "Enable Usb Manual Testsuit"
default n
depends on KERNEL_TEST && TEST && DRIVERS_USB
help
config TEST_HOST_MASS_DEVICE
bool "Enable Host Mass Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_MASS_STORAGE && TEST
config TEST_HOST_UVC
bool "Enable Host UVC Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_HOST_UVC && TEST
config TEST_DEVICE_MASS_GADGET
bool "Enable Device Mass Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_MASS_STORAGE_GADGET && TEST
config TEST_UVC_GADGET
bool "Enable UVC Gadget Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_UVC_GADGET && TEST
config TEST_UAC_GADGET
bool "Enable UAC Gadget Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_UAC_GADGET && TEST
config TEST_CAMERA_GADGET
bool "Enable Camera Gadget Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_CAMERA_GADGET && TEST
config TEST_HUB_GADGET
bool "Enable HUB Gadget Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && TEST
config TEST_SERIAL_GADGET
bool "Enable Serial Gadget Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_SERIAL_GADGET && TEST
config TEST_HID_GADGET
bool "Enable HID Gadget Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_HID_GADGET && TEST
config TEST_ETHERNET_GADGET
bool "Enable Ethernet Gadget Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_ETHERNET_GADGET && TEST
config TEST_MULTI_GADGET
bool "Enable Ethernet & Serial Gadget Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_ETH_SER_GADGET && TEST
config TEST_DFU_GADGET
bool "Enable Drivers DFU Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && DRIVERS_USB_DFU_GADGET && TEST
config TEST_MUTILDEVICE_GADGET
bool "Enable Drivers Multidevices Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && TEST
config TEST_SMP_USB
bool "Enable Usb SMP Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && TEST && KERNEL_SMP
config TEST_HOST_ETH
bool "Enable Host Eth Testsuit"
default n
depends on KERNEL_TEST && TEST_USB && TEST
config TEST_AUTO_USB
bool "Enable Usb Auto Testsuit"
default n
depends on KERNEL_TEST && TEST && DRIVERS_USB
config TEST_MMC
bool "Enable MMC Testsuit"
default n
depends on KERNEL_TEST && DRIVERS_MMC && TEST
config TEST_SD
bool "Enable SD Testsuit"
default n
depends on KERNEL_TEST && DRIVERS_MMC && TEST_MMC && TEST
config TEST_SDIO
bool "Enable SDIO Testsuit"
default n
depends on KERNEL_TEST && DRIVERS_MMC && TEST_MMC && TEST
comment "Only one platform can be selected"
depends on KERNEL_TEST && DRIVERS_MMC && TEST_MMC && TEST && TEST_SDIO
config TEST_SDIO_1131S
depends on KERNEL_TEST && DRIVERS_MMC && TEST_MMC && TEST && TEST_SDIO
bool "1131s"
config TEST_SDIO_RTL8189
depends on KERNEL_TEST && DRIVERS_MMC && TEST_MMC && TEST && TEST_SDIO
bool "RTL8189"
config TEST_PERFORMANCE
bool "Enable Performance Testsuit"
default n
depends on KERNEL_TEST && TEST
config TEST_PERFORMANCE_CORE
bool "Enable Performance CORE Testsuit"
default n
depends on KERNEL_TEST && TEST_PERFORMANCE && TEST
config TEST_PERFORMANCE_MEM
bool "Enable Performance MEM Testsuit"
default n
depends on KERNEL_TEST && TEST_PERFORMANCE && TEST
config TEST_PERFORMANCE_FS
bool "Enable Performance FS Testsuit"
default n
depends on KERNEL_TEST && TEST_PERFORMANCE && TEST
config TEST_PERFORMANCE_USB
bool "Enable Performance USB Testsuit"
default n
depends on KERNEL_TEST && TEST_PERFORMANCE && TEST
config TEST_PERFORMANCE_NET
bool "Enable Performance NET Testsuit"
default n
depends on KERNEL_TEST && TEST_PERFORMANCE && TEST
config TEST_NET
bool "Enable NET Test"
default n
depends on KERNEL_TEST && TEST
help
Attention: if this option turns on, other test suits will be ignored.
config TEST_LWIP
bool "Enable LWIP Testsuit"
default n
depends on KERNEL_TEST && TEST_NET && TEST
config AR6K3_WIFI_TEST
bool "Enable AR6K3_WIFI Test"
default n
depends on KERNEL_TEST && TEST && DRIVERS_WIFI_QRD
help
Attention: if this option turns on, other test suits will be ignored.
config BCM_WIFI_TEST
bool "Enable BCM_WIFI Test"
default n
depends on KERNEL_TEST && TEST && DRIVERS_WIFI_BCM
help
Attention: if this option turns on, other test suits will be ignored.
config TEST_PLATFORM
bool "Enable Platform Testsuit"
default n
depends on KERNEL_TEST && TEST
config 3RDPARTY_TEST
bool "Enable 3rdParty Test"
default n
depends on KERNEL_TEST && TEST && 3RDPARTY
help
Attention: 3rdParty tools and libs test

View File

@ -0,0 +1,387 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
config LOSCFG_TEST_LEVEL
int "Test Level"
default 2
depends on LOSCFG_TESTSUIT_SHELL
help
Attention:
0:smoke test
1:llt test
2:full test
3:presssure test
config LOSCFG_TEST_KERNEL_BASE
bool "Enable Kernel Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_BASE_IPC
bool "Enable IPC Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_BASE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_BASE_CORE
bool "Enable CORE Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_BASE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_BASE_MEM
bool "Enable MEM Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_BASE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_BASE_VM
bool "Enable VM Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_BASE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_BASE_MISC
bool "Enable MISC Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_BASE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_BASE_OM
bool "Enable OM Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_BASE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_BASE_ATOMIC
bool "Enable ATOMIC Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_BASE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND
bool "Enable Extended Kernel Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND_CPP
bool "Enable CPP Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_EXTEND && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND_CPUP
bool "Enable CPUP Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_EXTEND && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND_EXC
bool "Enable EXC Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_EXTEND && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND_UNALIGNACCESS
bool "Enable UNALIGNACCESS Testsuit"
default n
depends on LOSCFG_DO_ALIGN && LOSCFG_TEST_KERNEL_EXTEND && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND_MMU
bool "Enable MMU Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_EXTEND && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND_DYNLOAD
bool "Enable DYNLOAD Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_EXTEND && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND_MPU
bool "Enable MPU Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_EXTEND && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND_TICKLESS
bool "Enable TICKLESS Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_EXTEND && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_KERNEL_EXTEND_TRACE
bool "Enable TRACE Testsuit"
default n
depends on LOSCFG_TEST_KERNEL_EXTEND && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_POSIX
bool "Enable Posix Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_POSIX_MEM
bool "Enable Mem Testsuit"
default n
depends on LOSCFG_TEST_POSIX && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_POSIX_MQUEUE
bool "Enable Mqueue Testsuit"
default n
depends on LOSCFG_TEST_POSIX && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_POSIX_MUTEX
bool "Enable Mutex Testsuit"
default n
depends on LOSCFG_TEST_POSIX && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_POSIX_PTHREAD
bool "Enable Pthread Testsuit"
default n
depends on LOSCFG_TEST_POSIX && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_POSIX_SCHED
bool "Enable Sched Testsuit"
default n
depends on LOSCFG_TEST_POSIX && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_POSIX_SEM
bool "Enable Sem Testsuit"
default n
depends on LOSCFG_TEST_POSIX && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_POSIX_SWTMR
bool "Enable Swtmr Testsuit"
default n
depends on LOSCFG_TEST_POSIX && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_LINUX
bool "Enable Linux Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_LINUX_HRTIMER
bool "Enable Hrtimer Testsuit"
default n
depends on LOSCFG_TEST_LINUX && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS
bool "Enable FS Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS_VFS
bool "Enable VFS Test"
default n
depends on LOSCFG_TEST_FS && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS_JFFS
bool "Enable JFFS Test"
default n
depends on LOSCFG_TEST_FS && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS_RAMFS
bool "Enable RAMFS Test"
default n
depends on LOSCFG_TEST_FS && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS_FAT
bool "Enable FAT Test"
default n
depends on LOSCFG_TEST_FS && !LOSCFG_FS_FAT_VIRTUAL_PARTITION && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS_FAT_FAT32
bool "Enable FAT32 Test"
default n
depends on LOSCFG_TEST_FS_FAT && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS_FAT_EXFAT
bool "Enable exFAT Test"
default n
depends on LOSCFG_TEST_FS_FAT && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FAT32_FSCK
bool "Enable FAT32 Fsck Test"
default n
depends on LOSCFG_TEST_FS_FAT && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS_VIRPART
bool "Enable FAT virtual partition test"
default n
depends on LOSCFG_FS_FAT_VIRTUAL_PARTITION && LOSCFG_TEST_FS && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS_PROC
bool "Enable PROC Test"
default n
depends on LOSCFG_TEST_FS && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_FS_NFS
bool "Enable NFS Test"
default n
depends on LOSCFG_TEST_FS && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_MTD
bool "Enable MTD Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_MTD_JFFS
bool "Enable JFFS MTD Testsuit"
default n
depends on LOSCFG_TEST_MTD && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_MTD_FAT
bool "Enable FAT MTD Testsuit"
default n
depends on LOSCFG_TEST_MTD && !LOSCFG_FS_FAT_VIRTUAL_PARTITION && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_MTD_FAT_VIRPART
bool "Enable FAT virtual partition MTD test"
default n
depends on LOSCFG_TEST_MTD && LOSCFG_FS_FAT_VIRTUAL_PARTITION && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_DRIVERBASE
bool "Enable DriverBase Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_LIBC
bool "Enable LIBC Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_LIBM
bool "Enable LIBM Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_SHELL
bool "Enable Shell Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_USB
bool "Enable Usb Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL && LOSCFG_DRIVERS_USB
help
config LOSCFG_TEST_HOST_MASS_DEVICE
bool "Enable Host Mass Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_DRIVERS_USB_MASS_STORAGE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_DEVICE_MASS_GADGET
bool "Enable Device Mass Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_DRIVERS_USB_MASS_STORAGE_GADGET && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_UVC_GADGET
bool "Enable UVC Gadget Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_DRIVERS_USB_UVC_GADGET && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_UAC_GADGET
bool "Enable UAC Gadget Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_DRIVERS_USB_UAC_GADGET && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_CAMERA_GADGET
bool "Enable Camera Gadget Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_DRIVERS_USB_CAMERA_GADGET && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_HUB_GADGET
bool "Enable HUB Gadget Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_DRIVERS_USB_MASS_STORAGE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_SERIAL_GADGET
bool "Enable Serial Gadget Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_DRIVERS_USB_SERIAL_GADGET && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_ETHERNET_GADGET
bool "Enable Ethernet Gadget Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_DRIVERS_USB_ETHERNET_GADGET && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_MULTI_GADGET
bool "Enable Ethernet & Serial Gadget Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_DRIVERS_USB_ETH_SER_GADGET && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_DFU_GADGET
bool "Enable Drivers DFU Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_MUTILDEVICE_GADGET
bool "Enable Drivers Multidevices Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_HOST_ETH
bool "Enable Host Eth Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_AUTO_USB
bool "Enable Usb auto Testsuit"
default n
depends on LOSCFG_TEST_USB && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_MMC
bool "Enable MMC Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL && LOSCFG_DRIVERS_MMC
config LOSCFG_TEST_SD
bool "Enable SD Testsuit"
default n
depends on LOSCFG_TEST_MMC && LOSCFG_DRIVERS_MMC && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_SDIO
bool "Enable SDIO Testsuit"
default n
depends on LOSCFG_TEST_MMC && LOSCFG_DRIVERS_MMC && LOSCFG_TESTSUIT_SHELL
comment "Only one platform can be selected"
depends on LOSCFG_TEST_SDIO && LOSCFG_TEST_MMC && LOSCFG_DRIVERS_MMC && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_SDIO_1131S
depends on LOSCFG_TEST_SDIO && LOSCFG_TEST_MMC && LOSCFG_DRIVERS_MMC && LOSCFG_TESTSUIT_SHELL
bool "1131s"
config LOSCFG_TEST_SDIO_RTL8189
depends on LOSCFG_TEST_SDIO && LOSCFG_TEST_MMC && LOSCFG_DRIVERS_MMC && LOSCFG_TESTSUIT_SHELL
bool "RTL8189"
config LOSCFG_TEST_PERFORMANCE
bool "Enable Performance Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_PERFORMANCE_CORE
bool "Enable Performance CORE Testsuit"
default n
depends on LOSCFG_TEST_PERFORMANCE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_PERFORMANCE_MEM
bool "Enable Performance MEM Testsuit"
default n
depends on LOSCFG_TEST_PERFORMANCE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_PERFORMANCE_FS
bool "Enable Performance FS Testsuit"
default n
depends on LOSCFG_TEST_PERFORMANCE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_PERFORMANCE_USB
bool "Enable Performance USB Testsuit"
default n
depends on LOSCFG_TEST_PERFORMANCE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_PERFORMANCE_NET
bool "Enable Performance NET Testsuit"
default n
depends on LOSCFG_TEST_PERFORMANCE && LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_PLATFORM
bool "Enable Platform Testsuit"
default n
depends on LOSCFG_TESTSUIT_SHELL
config LOSCFG_TEST_NET
bool "Enable NET Test"
default n
depends on LOSCFG_TESTSUIT_SHELL
help
Attention: if this option turns on, other test suits will be ignored.
config LOSCFG_TEST_LWIP
bool "Enable LWIP Testsuit"
default n
depends on LOSCFG_TEST_NET && LOSCFG_TESTSUIT_SHELL
config AR6K3_WIFI_TEST
bool "Enable AR6K3_WIFI Test"
default n
depends on LOSCFG_TESTSUIT_SHELL && LOSCFG_DRIVERS_WIFI_QRD
help
Attention: if this option turns on, other test suits will be ignored.
config BCM_WIFI_TEST
bool "Enable BCM_WIFI Test"
default n
depends on LOSCFG_TESTSUIT_SHELL && LOSCFG_DRIVERS_WIFI_BCM
help
Attention: if this option turns on, other test suits will be ignored.
config LOSCFG_3RDPARTY_TEST
bool "Enable 3rdParty Test"
default n
depends on LOSCFG_TESTSUIT_SHELL && LOSCFG_3RDPARTY
help
Attention: 3rdParty tools and libs test
config LOSCFG_TEST_MANUAL_SHELL
bool "Enable Manual Test"
default n
depends on LOSCFG_TESTSUIT_SHELL

View File

@ -0,0 +1,48 @@
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this list of
# conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
# of conditions and the following disclaimer in the documentation and/or other materials
# provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
# to endorse or promote products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
include $(LITEOSTESTTOPDIR)/config.mk
MODULE_NAME := ktest
LOCAL_INCLUDE := -I $(LITEOSTESTTOPDIR)/kernel/include
LOCAL_SRCS := $(wildcard src/osTest.c) \
$(wildcard src/runstop_osTest.c) \
$(wildcard src/scatter_osTest.c) \
$(wildcard src/iCunit.c) \
$(wildcard src/ChipTest.c) \
$(wildcard src/testusb_shellcmd.c) \
$(wildcard src/testrun_shellcmd.c)
LOCAL_FLAGS := $(LOCAL_INCLUDE) -Wno-error -I $(LITEOSTOPDIR)/../../$(LOSCFG_BOARD_CONFIG_PATH)/include \
-I $(LITEOSTOPDIR)/fs/fat/os_adapt
include $(MODULE)

View File

@ -0,0 +1,574 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _UNI_ICUNIT_H
#define _UNI_ICUNIT_H
#include <string.h>
#include <stdio.h>
#include "los_typedef.h"
#include "los_spinlock.h"
#ifdef TST_DRVPRINT
#include "VOS_typdef.h"
#include "uartdriver.h"
#endif
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
typedef unsigned short iUINT16;
typedef unsigned int iUINT32;
typedef signed short iINT16;
typedef signed long iINT32;
typedef char iCHAR;
typedef void iVOID;
typedef unsigned long iiUINT32;
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#define FUNCTION_TEST (1 << 0)
#define PRESSURE_TEST (1 << 1)
#define PERFORMANCE_TEST (1 << 2)
#define TEST_MODE (FUNCTION_TEST)
#define TEST_LESSER_MEM NO
typedef iUINT32 (*CASE_FUNCTION)(void);
typedef struct {
const iCHAR *pcCaseID;
CASE_FUNCTION pstCaseFunc;
iUINT16 testcase_layer;
iUINT16 testcase_module;
iUINT16 testcase_level;
iUINT16 testcase_type;
iiUINT32 retCode;
iUINT16 errLine;
} ICUNIT_CASE_S;
typedef struct {
iUINT16 uwCaseCnt;
iCHAR *pcSuitID;
iCHAR *pucFilename;
ICUNIT_CASE_S *pstCaseList;
iUINT16 passCnt;
iUINT16 failCnt;
} ICUNIT_SUIT_S;
typedef enum {
TEST_TASK = 0,
TEST_MEM,
TEST_VM,
TEST_SEM,
TEST_MUX,
TEST_RWLOCK,
TEST_EVENT,
TEST_QUE,
TEST_SWTMR,
TEST_HWI,
TEST_MP,
TEST_ATO,
TEST_CPUP,
TEST_SCATTER,
TEST_RUNSTOP,
TEST_TIMER,
TEST_MMU,
TEST_ROBIN,
TEST_LIBC,
TEST_WAIT,
TEST_VFAT,
TEST_JFFS,
TEST_RAMFS,
TEST_NFS,
TEST_PROC,
TEST_FS,
TEST_UART,
TEST_PTHREAD,
TEST_COMP,
TEST_HWI_HALFBOTTOM,
TEST_WORKQ,
TEST_WAKELOCK,
TEST_TIMES,
TEST_LIBM,
TEST_SUPPORT,
TEST_STL,
TEST_MAIL,
TEST_MSG,
TEST_CP,
TEST_SIGNAL,
TEST_SCHED,
TEST_MTDCHAR,
TEST_TIME,
TEST_WRITE,
TEST_READ,
TEST_DYNLOAD,
TEST_REGISTER,
TEST_UNAME,
TEST_ERR,
TEST_CMD,
TEST_TICKLESS,
TEST_TRACE,
TEST_UNALIGNACCESS,
TEST_EXC,
TEST_REQULATOR,
TEST_DEVFREQ,
TEST_CPUFREQ,
TEST_MISC,
#if defined(LOSCFG_3RDPARTY_TEST)
TEST_THTTPD,
TEST_BIDIREFC,
TEST_CJSON,
TEST_CURL,
TEST_FFMPEG,
TEST_FREETYPE,
TEST_INIPARSER,
TEST_JSONCPP,
TEST_LIBICONV,
TEST_LIBJPEG,
TEST_LIBPNG,
TEST_OPENEXIF,
TEST_OPENSSL,
TEST_OPUS,
TEST_SQLITE,
TEST_TINYXML,
TEST_XML2,
TEST_ZBAR,
TEST_HARFBUZZ,
#endif
TEST_DRIVERBASE,
TEST_UDP,
TEST_TCP,
TEST_MODULE_ALL,
} LiteOS_test_module;
typedef enum {
TEST_LOS = 0,
TEST_POSIX,
TEST_LIB,
TEST_VFS,
TEST_EXTEND,
TEST_PARTITION,
TEST_CPP,
TEST_SHELL,
TEST_LINUX,
TEST_USB,
#if defined(LOSCFG_3RDPARTY_TEST)
TEST_3RDPARTY,
#endif
TEST_DRIVERFRAME,
TEST_NET_LWIP,
TEST_LAYER_ALL,
} LiteOS_test_layer;
typedef enum {
TEST_LEVEL0 = 0,
TEST_LEVEL1,
TEST_LEVEL2,
TEST_LEVEL3,
TEST_LEVEL4,
TEST_LEVEL_ALL,
} LiteOS_test_level;
typedef enum {
TEST_FUNCTION = 0,
TEST_PRESSURE,
TEST_PERFORMANCE,
TEST_TYPE_ALL,
} LiteOS_test_type;
typedef enum {
TEST_SEQUENCE = 0,
TEST_RANDOM
} LiteOS_test_sequence;
extern iUINT16 g_iCunitErrLineNo;
extern iiUINT32 g_iCunitErrCode;
extern void ICunitSaveErr(iiUINT32 line, iiUINT32 retCode);
#define ICUNIT_UNINIT 0x0EF00000
#define ICUNIT_OPENFILE_FAILED 0x0EF00001
#define ICUNIT_ALLOC_FAIL 0x0EF00002
#define ICUNIT_SUIT_FULL 0x0EF00002
#define ICUNIT_CASE_FULL 0x0EF00003
#define ICUNIT_SUIT_ALL 0x0EF0FFFF
#define ICUNIT_SUCCESS 0x00000000
#if 1
#define ICUNIT_TRACK_EQUAL(param, g_value, retcode) \
do { \
if ((param) != (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
} \
} while (0)
#define ICUNIT_TRACK_NOT_EQUAL(param, g_value, retcode) \
do { \
if ((param) == (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
} \
} while (0)
#define ICUNIT_ASSERT_NOT_EQUAL_NULL(param, g_value, retcode) \
do { \
if ((param) == (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return NULL; \
} \
} while (0)
#define ICUNIT_ASSERT_EQUAL_NULL(param, g_value, retcode) \
do { \
if ((param) != (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return NULL; \
} \
} while (0)
#define ICUNIT_ASSERT_EQUAL_VOID(param, g_value, retcode) \
do { \
if ((param) != (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return; \
} \
} while (0)
#define ICUNIT_ASSERT_NOT_EQUAL_VOID(param, g_value, retcode) \
do { \
if ((param) == (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return; \
} \
} while (0)
#define ICUNIT_ASSERT_EQUAL(param, g_value, retcode) \
do { \
if ((param) != (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return 1; \
} \
} while (0)
#define ICUNIT_ASSERT_NOT_EQUAL(param, g_value, retcode) \
do { \
if ((param) == (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return 1; \
} \
} while (0)
#define ICUNIT_ASSERT_WITHIN_EQUAL(param, value1, value2, retcode) \
do { \
if ((param) < (value1) || (param) > (value2)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return 1; \
} \
} while (0)
#define ICUNIT_ASSERT_WITHIN_EQUAL_VOID(param, value1, value2, retcode) \
do { \
if ((param) < (value1) || (param) > (value2)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return; \
} \
} while (0)
#define ICUNIT_ASSERT_WITHIN_EQUAL_NULL(param, value1, value2, retcode) \
do { \
if ((param) < (value1) || (param) > (value2)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return; \
} \
} while (0)
#define ICUNIT_ASSERT_SIZE_STRING_EQUAL(str1, str2, strsize, retcode) \
do { \
if (strncmp((str1), (str2), (strsize)) != 0) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return 1; \
} \
} while (0)
#define ICUNIT_ASSERT_EQUAL_TIME(param, g_value, retcode, label) \
do { \
if ((param) < (g_value - 1) || (param) > (g_value + 1)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
goto label; \
} \
} while (0)
#define ICUNIT_ASSERT_STRING_EQUAL(str1, str2, retcode) \
do { \
if (strcmp(str1, str2) != 0) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return 1; \
} \
} while (0)
#define ICUNIT_ASSERT_STRING_EQUAL_VOID(str1, str2, retcode) \
do { \
if (strcmp(str1, str2) != 0) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return; \
} \
} while (0)
#define ICUNIT_ASSERT_STRING_NOT_EQUAL(str1, str2, retcode) \
do { \
if (strcmp(str1, str2) == 0) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
return 1; \
} \
} while (0)
#define ICUNIT_GOTO_EQUAL(param, g_value, retcode, label) \
do { \
if ((param) != (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
goto label; \
} \
} while (0)
#define ICUNIT_GOTO_EQUAL_IN(param, value1, value2, retcode, label) \
do { \
if (((param) != (value1)) && ((param) != (value2))) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
goto label; \
} \
} while (0)
#define ICUNIT_GOTO_NOT_EQUAL(param, g_value, retcode, label) \
do { \
if ((param) == (g_value)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
goto label; \
} \
} while (0)
#define ICUNIT_GOTO_WITHIN_EQUAL(param, value1, value2, retcode, label) \
do { \
if ((param) < (value1) || (param) > (value2)) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
goto label; \
} \
} while (0)
#define ICUNIT_GOTO_STRING_EQUAL(str1, str2, retcode, label) \
do { \
if (strcmp(str1, str2) != 0) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
goto label; \
} \
} while (0)
#define ICUNIT_GOTO_STRING_NOT_EQUAL(str1, str2, retcode, label) \
do { \
if (strcmp(str1, str2) == 0) { \
ICunitSaveErr(__LINE__, (iiUINT32)retcode); \
goto label; \
} \
} while (0)
#else
#define ICUNIT_TRACK_EQUAL(param, g_value, retcode) \
do { \
if ((param) != (g_value)) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
} \
} while (0)
#define ICUNIT_TRACK_NOT_EQUAL(param, g_value, retcode) \
do { \
if ((param) == (g_value)) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
} \
} while (0)
#define ICUNIT_ASSERT_EQUAL_VOID(param, g_value, retcode) \
do { \
if ((param) != (g_value)) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
return; \
} \
} while (0)
#define ICUNIT_ASSERT_NOT_EQUAL_VOID(param, g_value, retcode) \
do { \
if ((param) == (g_value)) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
return; \
} \
} while (0)
#define ICUNIT_ASSERT_EQUAL(param, g_value, retcode) \
do { \
if ((param) != (g_value)) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
return 1; \
} \
} while (0)
#define ICUNIT_ASSERT_NOT_EQUAL(param, g_value, retcode) \
do { \
if ((param) == (g_value)) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
return 1; \
} \
} while (0)
#define ICUNIT_ASSERT_STRING_EQUAL(str1, str2, retcode) \
do { \
if (strcmp(str1, str2) != 0) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
return 1; \
} \
} while (0)
#define ICUNIT_ASSERT_STRING_NOT_EQUAL(str1, str2, retcode) \
do { \
if (strcmp(str1, str2) == 0) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
return 1; \
} \
} while (0)
#define ICUNIT_GOTO_EQUAL(param, g_value, retcode, label) \
do { \
if ((param) != (g_value)) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
goto label; \
} \
} while (0)
#define ICUNIT_GOTO_NOT_EQUAL(param, g_value, retcode, label) \
do { \
if ((param) == (g_value)) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
goto label; \
} \
} while (0)
#define ICUNIT_GOTO_STRING_EQUAL(str1, str2, retcode, label) \
do { \
if (strcmp(str1, str2) != 0) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
goto label; \
} \
} while (0)
#define ICUNIT_GOTO_STRING_NOT_EQUAL(str1, str2, retcode, label) \
do { \
if (strcmp(str1, str2) == 0) { \
g_iCunitErrLineNo = (g_iCunitErrLineNo == 0) ? __LINE__ : g_iCunitErrLineNo; \
g_iCunitErrCode = (g_iCunitErrCode == 0) ? (iiUINT32)retcode : g_iCunitErrCode; \
goto label; \
} \
} while (0)
#endif
#if (LOSCFG_KERNEL_SMP == YES)
extern SPIN_LOCK_S g_testSuitSpin;
#define TESTSUIT_LOCK(state) LOS_SpinLockSave(&g_testSuitSpin, &(state))
#define TESTSUIT_UNLOCK(state) LOS_SpinUnlockRestore(&g_testSuitSpin, state)
#endif
extern iUINT32 iCunitAddSuit_F(iCHAR *suitName, iCHAR *pfileName);
#define iCunitAddSuit(suitName) iCunitAddSuit_F(suitName, __FILE__)
extern iUINT32 ICunitAddCase(const iCHAR *caseName, CASE_FUNCTION caseFunc, iUINT16 testcaseLayer,
iUINT16 testcaseModule, iUINT16 testcaseLevel, iUINT16 testcaseType);
extern iUINT32 ICunitRunTestOne(const char *tcId);
extern INT32 ICunitRunTestArray(const char *tcSequence, const char *tcNum, const char *tcLayer, const char *tcModule,
const char *tcLevel, const char *tcType);
extern iUINT32 ICunitRunTestArraySequence(iUINT32 testcaseNum, iUINT32 testcaseLayer, iUINT32 testcaseModule,
iUINT32 testcaseLevel, iUINT32 testcaseType);
extern iUINT32 ICunitRunTestArrayRandom(iUINT32 testcaseNum, iUINT32 testcaseLayer, iUINT32 testcaseModule,
iUINT32 testcaseLevel, iUINT32 testcaseType);
extern iUINT32 ICunitRunTestcaseSatisfied(ICUNIT_CASE_S *testCase, iUINT32 testcaseLayer, iUINT32 testcaseModule,
iUINT32 testcaseLevel, iUINT32 testcaseType);
extern iUINT32 ICunitInit(void);
extern iUINT32 ICunitRunSingle(ICUNIT_CASE_S *psubCase);
extern iUINT32 ICunitRunF(ICUNIT_CASE_S *psubCase);
extern iUINT32 iCunitPrintReport(void);
#define TEST_ADD_CASE(name, casefunc, testcase_layer, testcase_module, testcase_level, testcase_type) \
do { \
iUINT32 uwRet = 1; \
uwRet = ICunitAddCase(name, (CASE_FUNCTION)casefunc, testcase_layer, testcase_module, testcase_level, \
testcase_type); \
ICUNIT_ASSERT_EQUAL_VOID(uwRet, ICUNIT_SUCCESS, uwRet); \
} while (0)
#define TEST_RUN_SUITE() \
do { \
UINT32 uiRet; \
uiRet = iCunitRun(); \
ICUNIT_ASSERT_NOT_EQUAL_VOID(uiRet, ICUNIT_UNINIT, ICUNIT_UNINIT); \
} while (0)
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#endif /* _UNI_ICUNIT_H */

View File

@ -0,0 +1,64 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _ICUNIT_ICUNIT_INC
#define _ICUNIT_ICUNIT_INC
#include "iCunit_config.h"
#include "los_builddef.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
ICUNIT_CASE_S g_iCunitRandArray[1];
ICUNIT_CASE_S g_iCunitCaseArray[ICUNIT_CASE_SIZE];
iUINT32 g_iCunitInitSuccess = 0x0000FFFF;
iUINT32 g_iCunitCaseCnt = 0xFFFF;
iUINT32 g_iCunitCaseFailedCnt = 0;
iUINT32 g_iCunitErrLogAddCase = 0;
iUINT16 g_iCunitErrLineNo;
iiUINT32 g_iCunitErrCode;
iUINT32 g_iCunitCaseRun = 0;
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#endif /* _UNI_ICUNIT_INC */

View File

@ -0,0 +1,60 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "los_builddef.h"
#ifndef _ICUNIT_CONFIG_H
#define _ICUNIT_CONFIG_H
#include "los_builddef.h"
#include "los_config.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if defined(LITEOS_TEST_AUTO) && !defined(LOSCFG_TEST_MUTIL)
#define ICUNIT_CASE_SIZE LOSCFG_BASE_CORE_TSK_LIMIT
#else
#define ICUNIT_CASE_SIZE 20000
#endif
#define ICUNIT_SUIT_SIZE 1
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#endif

View File

@ -0,0 +1,49 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LOS_TEST_PRI_H
#define _LOS_TEST_PRI_H
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
extern UINT32 OsTestInit(VOID);
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cplusplus */
#endif /* __cplusplus */
#endif /* _LOS_TEST_PRI_H */

View File

@ -0,0 +1,374 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _OSTEST_H
#define _OSTEST_H
#ifndef SWTMR_TEST
#define SWTMR_TEST
#endif
#include "test_menuconfig.h"
#include "stdarg.h"
#include "los_config.h"
#include "iCunit.h"
#include "stdio.h"
#include "stdlib.h"
#include "limits.h"
#include "string.h"
#include "los_base.h"
#include "los_config.h"
#include "los_typedef.h"
#include "los_hwi.h"
#include "los_vm_map.h"
#include "los_task.h"
#include "los_sched_pri.h"
#include "los_task_pri.h"
#include "los_sys_pri.h"
#include "los_sem_pri.h"
#include "los_event.h"
#include "los_memory.h"
#include "los_queue.h"
#include "los_swtmr.h"
#include "los_mux.h"
#include "los_queue_pri.h"
#include "los_atomic.h"
#if !defined(TEST1980) && !defined(TESTISP)
#include "console.h"
#endif
#ifndef LOSCFG_AARCH64
#ifdef LOSCFG_LIB_LIBC
#include "time.h"
#endif
#include "target_config.h"
#endif
#include "los_process_pri.h"
#include "pthread.h"
#ifdef LOSCFG_PLATFORM_HI3516DV300
#define TEST3516DV300
#elif LOSCFG_PLATFORM_HI3518EV300
#define TEST3518EV300
#endif
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#define TEST_TASK_PARAM_INIT(testTask, task_name, entry, prio) \
do { \
memset(&testTask, 0, sizeof(TSK_INIT_PARAM_S)); \
testTask.pfnTaskEntry = (TSK_ENTRY_FUNC)entry; \
testTask.uwStackSize = LOS_TASK_MIN_STACK_SIZE; \
testTask.pcName = task_name; \
testTask.usTaskPrio = prio; \
testTask.uwResved = LOS_TASK_STATUS_DETACHED; \
} while (0)
#if (LOSCFG_KERNEL_SMP == YES)
#define TEST_TASK_PARAM_INIT_AFFI(testTask, task_name, entry, prio, affi) \
TEST_TASK_PARAM_INIT(testTask, task_name, entry, prio) \
testTask.usCpuAffiMask = affi;
#else
#define TEST_TASK_PARAM_INIT_AFFI(stTestTask, task_name, entry, prio, affi) \
TEST_TASK_PARAM_INIT(stTestTask, task_name, entry, prio)
#endif
#define JFFS_BASE_MTD_ADDR 0x100000
#define JFFS_BASE_MTD_LEN 0x600000
#define TASK_PRIO_TEST 25
#define TASK_PRIO_TEST_TASK 4
#define TASK_PRIO_TEST_SWTMR 4
#ifdef LOSCFG_AARCH64
#define TASK_STACK_SIZE_TEST (LOS_TASK_MIN_STACK_SIZE * 3)
#else
#define TASK_STACK_SIZE_TEST LOS_TASK_MIN_STACK_SIZE
#endif
#define LOS_MS_PER_TICK (OS_SYS_MS_PER_SECOND / LOSCFG_BASE_CORE_TICK_PER_SECOND)
#define HWI_NUM_INTVALID OS_HWI_MAX_NUM
#define writel(g_value, address) WRITE_UINT32(g_value, address)
#ifdef TESTPBXA9
extern int vsnprintf(char *str, size_t n, const char *fmt, va_list ap);
#endif
#if defined(LOSCFG_TEST_POSIX)
extern UINT32 PosixPthreadInit(pthread_attr_t *attr, int pri);
extern UINT32 PosixPthreadDestroy(pthread_attr_t *attr, pthread_t thread);
#endif
extern UINT32 TaskCountGetTest(VOID);
extern UINT32 SemCountGetTest(VOID);
extern UINT32 QueueCountGetTest(VOID);
extern UINT32 SwtmrCountGetTest(VOID);
extern void hal_interrupt_set_affinity(uint32_t irq, uint32_t cpuMask);
#define TASK_EXISTED_NUM (TaskCountGetTest())
#define QUEUE_EXISTED_NUM (QueueCountGetTest())
#define SWTMR_EXISTED_NUM (SwtmrCountGetTest())
#define SEM_EXISTED_NUM (SemCountGetTest())
extern void TestTestHwiDelete(unsigned int irq, void *devId);
extern void TestHwiTrigger(unsigned int irq);
extern void TestExtraTaskDelay(UINT32 tick);
extern UINT64 TestTickCountGet(void);
extern UINT64 TestTickCountByCurrCpuid(void);
extern void TestBusyTaskDelay(UINT32 tick);
extern void *malloc(size_t size);
extern void TestDumpCpuid(void);
extern u_long TRandom(void);
#define TEST_HwiDelete(ID) TestTestHwiDelete(ID, NULL)
#define TEST_HwiClear(ID) HalIrqMask(ID)
#define TEST_HwiTriggerDelay LOS_TaskDelay(200 * LOSCFG_BASE_CORE_TICK_PER_SECOND / 1000)
#define TEST_HwiCreate(ID, prio, mode, Func, arg) LOS_HwiCreate(ID, prio, mode, Func, arg)
#define HWI_NUM_INT0 0
#define HWI_NUM_INT1 1
#define HWI_NUM_INT2 2
#define HWI_NUM_INT3 3
#define HWI_NUM_INT4 4
#define HWI_NUM_INT5 5
#define HWI_NUM_INT6 6
#define HWI_NUM_INT7 7
#define HWI_NUM_INT11 11
#define HWI_NUM_INT12 12
#define HWI_NUM_INT13 13
#define HWI_NUM_INT14 14
#define HWI_NUM_INT15 15
#define HWI_NUM_INT16 16
#define HWI_NUM_INT17 17
#define HWI_NUM_INT18 18
#define HWI_NUM_INT19 19
#define HWI_NUM_INT21 21
#define HWI_NUM_INT22 22
#define HWI_NUM_INT23 23
#define HWI_NUM_INT24 24
#define HWI_NUM_INT25 25
#define HWI_NUM_INT26 26
#define HWI_NUM_INT27 27
#define HWI_NUM_INT28 28
#define HWI_NUM_INT30 30
#define HWI_NUM_INT31 31
#define HWI_NUM_INT32 32
#define HWI_NUM_INT33 33
#define HWI_NUM_INT34 34
#define HWI_NUM_INT35 35
#define HWI_NUM_INT42 42
#define HWI_NUM_INT45 45
#define HWI_NUM_INT46 46
#define HWI_NUM_INT50 50
#define HWI_NUM_INT55 55
#define HWI_NUM_INT56 56
#define HWI_NUM_INT57 57
#define HWI_NUM_INT58 58
#define HWI_NUM_INT59 59
#define HWI_NUM_INT60 60
#define HWI_NUM_INT61 61
#define HWI_NUM_INT63 63
#define HWI_NUM_INT62 62
#define HWI_NUM_INT68 68
#define HWI_NUM_INT69 69
#define HWI_NUM_INT95 95
#define HWI_NUM_INT114 114
#define HWI_NUM_INT169 169
#if defined TESTPBXA9
#define HWI_NUM_TEST HWI_NUM_INT56
#define HWI_NUM_TEST1 HWI_NUM_INT57
#define HWI_NUM_TEST0 HWI_NUM_INT58
#define HWI_NUM_TEST2 HWI_NUM_INT59
#define HWI_NUM_TEST3 HWI_NUM_INT60
#elif defined TEST3518EV300
#define HWI_NUM_TEST0 HWI_NUM_INT58
#define HWI_NUM_TEST HWI_NUM_INT59
#define HWI_NUM_TEST1 HWI_NUM_INT60
#define HWI_NUM_TEST2 HWI_NUM_INT61
#define HWI_NUM_TEST3 HWI_NUM_INT68
#elif defined TEST3516DV300
#define HWI_NUM_TEST HWI_NUM_INT56
#define HWI_NUM_TEST1 HWI_NUM_INT57
#define HWI_NUM_TEST0 HWI_NUM_INT58
#define HWI_NUM_TEST2 HWI_NUM_INT59
#define HWI_NUM_TEST3 HWI_NUM_INT60
#endif
#define TEST_TASKDELAY_1TICK 1
#define TEST_TASKDELAY_2TICK 2
#define TEST_TASKDELAY_4TICK 4
#define TEST_TASKDELAY_10TICK 10
#define TEST_TASKDELAY_20TICK 20
#define TEST_TASKDELAY_50TICK 50
#ifdef TEST3731
#define TestTimer2ValueGet(temp) READ_UINT32(temp, TIMER1_REG_BASE + TIMER_VALUE)
#elif defined TEST3559
#define TestTimer2ValueGet(temp) READ_UINT32(temp, TIMER3_REG_BASE + TIMER_VALUE)
#else
#define TestTimer2ValueGet(temp) READ_UINT32(temp, TIMER2_REG_BASE + TIMER_VALUE)
#endif
#define REALTIME(time) (UINT32)((UINT64)(0xffffffff - time) * 1000 / OS_SYS_CLOCK) /* accuracy:ms */
#define HW_TMI(time) (UINT32)((UINT64)(0xffffffff - time) * 1000 / (OS_SYS_CLOCK / 1000000)) /* accuracy:ns */
#define uart_printf_func dprintf
#ifndef VFS_STAT_PRINTF
#define VFS_STAT_PRINTF 0
#endif
#ifndef VFS_STATFS_PRINTF
#define VFS_STATFS_PRINTF 0
#endif
#define OPEN_FILE_MAX 20
#define HUAWEI_ENV_NFS 0
#ifndef TEST_RESOURCELEAK_CHECK
#define TEST_RESOURCELEAK_CHECK YES
#endif
#ifndef TEST_MODULE_CHECK
#define TEST_MODULE_CHECK YES
#endif
#define OS_PROCESS_STATUS_PEND OS_PROCESS_STATUS_PENDING
#define OS_TASK_STATUS_SUSPEND OS_TASK_STATUS_SUSPENDED
#define OS_TASK_STATUS_PEND OS_TASK_STATUS_PENDING
extern UINT32 volatile g_testCount;
extern UINT32 g_testCount1;
extern UINT32 g_testCount2;
extern UINT32 g_testCount3;
extern UINT32 g_flowcheck;
extern UINT32 g_failResult;
extern UINT32 g_passResult;
extern UINT32 g_testTskHandle;
extern UINT32 g_testTaskID01;
extern UINT32 g_testTaskID02;
extern UINT32 g_testTaskID03;
extern UINT32 g_testTaskID04;
extern UINT32 g_hwiNum1;
extern UINT32 g_hwiNum2;
extern UINT32 g_semID;
extern UINT32 g_semID2;
extern LosMux g_mutexkernelTest;
extern UINT32 g_cpupTestCount;
extern UINT16 g_swTmrID;
extern UINT32 g_semID;
extern UINT32 g_testQueueID01;
extern UINT32 g_testQueueID02;
extern UINT32 g_testQueueID03;
extern UINT32 g_testTskHandle;
extern UINT32 g_leavingTaskNum;
extern UINT32 g_semID3[];
extern EVENT_CB_S g_eventCB;
extern EVENT_CB_S g_event;
extern UINT32 g_testPeriod;
extern BOOL g_isAddArray;
extern BOOL g_isSdInit;
extern BOOL g_isSpinorInit;
extern UINT32 g_getTickConsume;
extern UINT32 g_waitTestCount;
extern INT32 g_libFileSystem;
extern UINT32 LosMuxCreate(LosMux *mutex);
extern INT32 g_performanceStart;
extern void msleep(unsigned int msecs);
extern unsigned int sleep(unsigned int seconds);
extern int usleep(unsigned useconds);
#define OS_TASK_STATUS_DETACHED OS_TASK_FLAG_DETACHED
extern UINT32 LOS_MemTotalUsedGet(VOID *pool);
extern VOID ptestTickConsume(VOID);
extern UINT32 TEST_TskDelete(UINT32 taskID);
extern UINT32 TEST_SemDelete(UINT32 semHandle);
extern VOID ItSuiteLosQueue(VOID);
extern VOID ItSuiteLosSwtmr(VOID);
extern VOID ItSuiteLosTask(VOID);
extern VOID ItSuiteLosEvent(VOID);
extern VOID ItSuiteLosMux(VOID);
extern VOID ItSuiteLosRwlock(VOID);
extern VOID ItSuiteLosSem(VOID);
extern VOID ItSuiteSmpHwi(VOID);
extern VOID ItSuiteHwiNesting(VOID);
extern VOID ItSuiteExtendCpup(VOID);
extern VOID ItSuitePosixMutex(VOID);
extern VOID ItSuitePosixPthread(VOID);
extern VOID TestRunShell(VOID);
extern UINT32 OsTestInit(VOID);
extern void TEST_DT_COMMON(void);
extern VOID dprintf(const char *fmt, ...);
#define BIG_FD 512
typedef struct testrunParam {
CHAR testcase_sequence[16];
CHAR testcase_num[16];
CHAR testcase_layer[32];
CHAR testcase_module[32];
CHAR testcase_level[16];
CHAR testcase_type[16];
CHAR testcase_id[128];
} TEST_RUN_PARAM;
#define LOSCFG_BASE_CORE_TSK_CONFIG LOSCFG_BASE_CORE_TSK_LIMIT
#define LOSCFG_BASE_IPC_SEM_CONFIG LOSCFG_BASE_IPC_SEM_LIMIT
#define LOSCFG_BASE_IPC_QUEUE_CONFIG LOSCFG_BASE_IPC_QUEUE_LIMIT
#define LOSCFG_BASE_CORE_SWTMR_CONFIG LOSCFG_BASE_CORE_SWTMR_LIMIT
#define HAL_READ_UINT8(addr, data) READ_UINT8(data, addr)
#define HAL_WRITE_UINT8(addr, data) WRITE_UINT8(data, addr)
#define HAL_READ_UINT32(addr, data) READ_UINT32(data, addr)
#define HAL_WRITE_UINT32(addr, data) WRITE_UINT32(data, addr)
extern void InitRebootHook(void);
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#endif /* _OSTEST_H */

View File

@ -0,0 +1,35 @@
static_library("test_core") {
sources = [
"task/It_los_task.c",
"swtmr/It_los_swtmr.c",
"hwi/It_smp_hwi.c",
"hwi_nesting/It_hwi_nesting.c",
]
if (LOSCFG_TEST_SMOKE) {
sources += [
"task/smoke/It_los_task_045.c",
"task/smoke/It_los_task_046.c",
"task/smoke/It_los_task_049.c",
"task/smoke/It_los_task_081.c",
"task/smoke/It_los_task_089.c",
"task/smoke/It_los_task_097.c",
"task/smoke/It_los_task_099.c",
"task/smoke/It_los_task_101.c",
"task/smoke/It_los_task_105.c",
"task/smoke/It_los_task_timeslice_001.c",
"swtmr/smoke/It_los_swtmr_053.c",
"swtmr/smoke/It_los_swtmr_058.c",
]
}
include_dirs = [
"../../../include/",
"task",
"swtmr",
"hwi",
"hwi_nesting",
]
cflags = [ "-Wno-error" ]
}

View File

@ -0,0 +1,46 @@
include $(LITEOSTESTTOPDIR)/config.mk
MODULE_NAME := coretest
LOCAL_INCLUDE := \
-I $(LITEOSTESTTOPDIR)/kernel/include \
-I $(LITEOSTESTTOPDIR)/kernel/sample/kernel_base/core/task \
-I $(LITEOSTESTTOPDIR)/kernel/sample/kernel_base/core/swtmr \
-I $(LITEOSTESTTOPDIR)/kernel/sample/kernel_base/core/hwi \
-I $(LITEOSTESTTOPDIR)/kernel/sample/kernel_base/core/hwi_nesting
SRC_MODULES := task swtmr hwi hwi_nesting
ifeq ($(LOSCFG_KERNEL_SMP), y)
SMP_MODULES := task/smp swtmr/smp hwi/smp task/float
endif
ifeq ($(LOSCFG_TEST_LLT), y)
LLT_MODULES := task/llt swtmr/llt
endif
ifeq ($(LOSCFG_TEST_PRESSURE), y)
PRESSURE_MODULES := task/pressure swtmr/pressure
endif
ifeq ($(LOSCFG_TEST_SMOKE), y)
SMOKE_MODULES := task/smoke swtmr/smoke
endif
ifeq ($(LOSCFG_TEST_FULL), y)
FULL_MODULES := task/full swtmr/full hwi_nesting/full
endif
ifeq ($(LOSCFG_TEST_MANUAL_SHELL), y)
MANUAL_MODULES :=task/manual
endif
LOCAL_MODULES := $(SRC_MODULES) $(LLT_MODULES) $(PRESSURE_MODULES) $(SMOKE_MODULES) $(FULL_MODULES) $(SMP_MODULES) $(MANUAL_MODULES)
LOCAL_SRCS := $(foreach dir,$(LOCAL_MODULES),$(wildcard $(dir)/*.c))
LOCAL_CHS := $(foreach dir,$(LOCAL_MODULES),$(wildcard $(dir)/*.h))
LOCAL_FLAGS := $(LOCAL_INCLUDE) -Wno-error
include $(MODULE)

View File

@ -0,0 +1,100 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
VOID ItSuiteSmpHwi(VOID)
{
#if (LOSCFG_KERNEL_SMP == YES)
ItSmpLosHwi001();
ItSmpLosHwi002();
ItSmpLosHwi003();
ItSmpLosHwi004();
ItSmpLosHwi005();
ItSmpLosHwi006();
ItSmpLosHwi007();
ItSmpLosHwi008();
ItSmpLosHwi009();
ItSmpLosHwi010();
ItSmpLosHwi011();
ItSmpLosHwi012();
ItSmpLosHwi013();
#ifndef LOSCFG_NO_SHARED_IRQ
ItSmpLosHwiShare001();
ItSmpLosHwiShare002();
ItSmpLosHwiShare003();
ItSmpLosHwiShare004();
ItSmpLosHwiShare005();
ItSmpLosHwiShare006();
ItSmpLosHwiShare007();
ItSmpLosHwiShare008();
ItSmpLosHwiShare009();
ItSmpLosHwiShare010();
#endif
ItSmpLosHwiIpi001();
ItSmpLosHwiIpi002();
ItSmpLosHwiIpi003();
ItSmpLosHwiIpi004();
ItSmpLosHwiIpi005();
ItSmpLosHwiIpi006();
ItSmpLosHwiIpi007();
ItSmpLosHwiIpi008();
ItSmpLosHwiNest001();
ItSmpLosHwiNest002();
ItSmpLosHwiNest003();
ItSmpLosHwiNest004();
ItSmpLosHwiNest005();
ItSmpLosHwiNest006();
ItSmpLosHwiNest007();
ItSmpLosHwiNest008();
#endif
#if (LOSCFG_KERNEL_SMP == YES)
HalIrqSetAffinity(HWI_NUM_TEST, 1);
HalIrqSetAffinity(HWI_NUM_TEST1, 1);
HalIrqSetAffinity(HWI_NUM_TEST2, 1);
HalIrqSetAffinity(HWI_NUM_TEST3, 1);
#endif
}
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,98 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LOS_SMP_HWI_H
#define LOS_SMP_HWI_H
#include "los_hwi.h"
#include "osTest.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#define LOOP 100
#if defined(LOSCFG_TEST_SMP)
VOID ItSmpLosHwi001(VOID);
VOID ItSmpLosHwi002(VOID);
VOID ItSmpLosHwi003(VOID);
VOID ItSmpLosHwi004(VOID);
VOID ItSmpLosHwi005(VOID);
VOID ItSmpLosHwi006(VOID);
VOID ItSmpLosHwi007(VOID);
VOID ItSmpLosHwi008(VOID);
VOID ItSmpLosHwi009(VOID);
VOID ItSmpLosHwi010(VOID);
VOID ItSmpLosHwi011(VOID);
VOID ItSmpLosHwi012(VOID);
VOID ItSmpLosHwi013(VOID);
#ifndef LOSCFG_NO_SHARED_IRQ
VOID ItSmpLosHwiShare001(VOID);
VOID ItSmpLosHwiShare002(VOID);
VOID ItSmpLosHwiShare003(VOID);
VOID ItSmpLosHwiShare004(VOID);
VOID ItSmpLosHwiShare005(VOID);
VOID ItSmpLosHwiShare006(VOID);
VOID ItSmpLosHwiShare007(VOID);
VOID ItSmpLosHwiShare008(VOID);
VOID ItSmpLosHwiShare009(VOID);
VOID ItSmpLosHwiShare010(VOID);
#endif
VOID ItSmpLosHwiIpi001(VOID);
VOID ItSmpLosHwiIpi002(VOID);
VOID ItSmpLosHwiIpi003(VOID);
VOID ItSmpLosHwiIpi004(VOID);
VOID ItSmpLosHwiIpi005(VOID);
VOID ItSmpLosHwiIpi006(VOID);
VOID ItSmpLosHwiIpi007(VOID);
VOID ItSmpLosHwiIpi008(VOID);
VOID ItSmpLosHwiNest001(VOID);
VOID ItSmpLosHwiNest002(VOID);
VOID ItSmpLosHwiNest003(VOID);
VOID ItSmpLosHwiNest004(VOID);
VOID ItSmpLosHwiNest005(VOID);
VOID ItSmpLosHwiNest006(VOID);
VOID ItSmpLosHwiNest007(VOID);
VOID ItSmpLosHwiNest008(VOID);
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#endif /* LOS_SMP_HWI_H */

View File

@ -0,0 +1,89 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_testTimes;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01(void)
{
#ifdef TEST1980
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
#endif
TestHwiTrigger(HWI_NUM_TEST);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
g_testCount = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
}
VOID ItSmpLosHwi001(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi001", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,91 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01(void)
{
#ifdef TEST1980
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(0));
#endif
TestHwiTrigger(HWI_NUM_TEST);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
g_testCount = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
currCpuid = (ArchCurrCpuid() + 1) % (LOSCFG_KERNEL_CORE_NUM);
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_002_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(currCpuid)); // cross task
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
do {
__asm__ volatile("nop");
} while (g_testCount != 1);
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
}
VOID ItSmpLosHwi002(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi002", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,108 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_testTimes;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01(void)
{
UINT32 ret;
TestDumpCpuid();
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
#ifndef LOSCFG_NO_SHARED_IRQ
ICUNIT_ASSERT_EQUAL_VOID(ret, OS_ERRNO_HWI_SHARED_ERROR, ret);
#else
ICUNIT_ASSERT_EQUAL_VOID(ret, OS_ERRNO_HWI_ALREADY_CREATED, ret);
#endif
return;
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
g_testCount = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
#ifdef TEST1980
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
#endif
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
}
VOID ItSmpLosHwi003(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi003", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,112 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_testTimes;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01(void)
{
UINT32 ret;
TestDumpCpuid();
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
#ifndef LOSCFG_NO_SHARED_IRQ
ICUNIT_ASSERT_EQUAL_VOID(ret, OS_ERRNO_HWI_SHARED_ERROR, ret);
#else
ICUNIT_ASSERT_EQUAL_VOID(ret, OS_ERRNO_HWI_ALREADY_CREATED, ret);
#endif
return;
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
g_testCount = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
currCpuid = (ArchCurrCpuid() + 1) % (LOSCFG_KERNEL_CORE_NUM);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_002_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(currCpuid)); // cross task
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
#ifdef TEST1980
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
#endif
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
}
VOID ItSmpLosHwi004(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi004", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,100 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01(void)
{
UINT32 ret;
TestDumpCpuid();
TEST_HwiDelete(HWI_NUM_TEST);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
g_testCount = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
#ifdef TEST1980
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
#endif
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 0, g_testCount, EXIT);
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
}
VOID ItSmpLosHwi005(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi005", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,103 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01(void)
{
UINT32 ret;
TestDumpCpuid();
TEST_HwiDelete(HWI_NUM_TEST);
LOS_AtomicInc(&g_testCount);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
g_testCount = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
currCpuid = (ArchCurrCpuid() + 1) % (LOSCFG_KERNEL_CORE_NUM);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_002_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(currCpuid)); // cross task
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestAssertBusyTaskDelay(100, 1); // 100, Set the timeout of runtime;
#ifdef TEST1980
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
#endif
TestHwiTrigger(HWI_NUM_TEST);
TestAssertBusyTaskDelay(100, 2); // 100, Set the timeout of runtime; 2, test runing count
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
}
VOID ItSmpLosHwi006(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi006", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,105 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01(void)
{
UINT32 ret;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
TestDumpCpuid();
return;
}
static VOID TaskF02(void)
{
UINT32 ret;
#ifdef TEST1980
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
#endif
TestHwiTrigger(HWI_NUM_TEST);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret;
g_testCount = 0;
TEST_TASK_PARAM_INIT(testTask, "it_hwi_007_task01", TaskF01, TASK_PRIO_TEST + 1);
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
TEST_TASK_PARAM_INIT(testTask, "it_hwi_007_task02", TaskF02, TASK_PRIO_TEST + 1);
ret = LOS_TaskCreate(&g_testTaskID02, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
}
VOID ItSmpLosHwi007(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi007", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,103 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_ret = 0;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01(void)
{
UINT32 ret;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
g_ret |= ret;
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, i, j;
for (j = 0; j < LOOP; j++) {
g_testCount = 0;
g_ret = 0;
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_007_task01", TaskF01, TASK_PRIO_TEST + 1,
CPUID_TO_AFFI_MASK(i));
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
LOS_TaskDelay(1);
#ifdef TEST1980
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
#endif
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
ICUNIT_GOTO_NOT_EQUAL(g_ret, 0, g_ret, EXIT);
TEST_HwiDelete(HWI_NUM_TEST);
}
EXIT:
LOS_TaskDelete(g_testTaskID01);
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
}
VOID ItSmpLosHwi008(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi008", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,99 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_ret = 0;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01(void)
{
UINT32 ret;
ret = LOS_HwiDelete(HWI_NUM_TEST, NULL);
g_ret |= ret;
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, i, j;
for (j = 0; j < LOOP; j++) {
g_testCount = 0;
g_ret = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_007_task01", TaskF01, TASK_PRIO_TEST + 1,
CPUID_TO_AFFI_MASK(i));
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
LOS_TaskDelay(2); // 2, set delay time
#ifdef TEST1980
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
#endif
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 0, g_testCount, EXIT);
}
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, NULL);
return LOS_OK;
}
VOID ItSmpLosHwi009(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi009", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,121 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_szId[LOSCFG_KERNEL_CORE_NUM] = {0};
static VOID SwtmrF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF01(void)
{
UINT32 ret;
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_szId[0], 0);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
TestDumpCpuid();
return;
}
static VOID HwiF02(void)
{
UINT32 ret;
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_szId[1], 0);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
UINT32 ret, i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
ret = LOS_HwiCreate(HWI_NUM_TEST1, 1, 0, (HWI_PROC_FUNC)HwiF02, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST1, CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM)); // other cpu
for (i = 0; i < LOOP; i++) {
#ifndef TEST1980
TestHwiTrigger(HWI_NUM_TEST1);
TestHwiTrigger(HWI_NUM_TEST);
#else
HalIrqSendIpi(CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM), HWI_NUM_TEST1);
HalIrqSendIpi(CPUID_TO_AFFI_MASK(ArchCurrCpuid()), HWI_NUM_TEST);
#endif
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 0, g_testCount, EXIT);
ret = LOS_SwtmrDelete(g_szId[0]);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_SwtmrDelete(g_szId[1]);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
}
ret = LOS_HwiDelete(HWI_NUM_TEST, NULL);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiDelete(HWI_NUM_TEST1, NULL);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
EXIT:
LOS_SwtmrDelete(g_szId[0]);
LOS_SwtmrDelete(g_szId[1]);
LOS_HwiDelete(HWI_NUM_TEST, NULL);
LOS_HwiDelete(HWI_NUM_TEST1, NULL);
return LOS_OK;
}
VOID ItSmpLosHwi010(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi010", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,190 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_szId[LOSCFG_KERNEL_CORE_NUM] = {0};
static VOID SwtmrF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF01(void)
{
UINT32 ret;
TEST_HwiClear(HWI_NUM_TEST);
ret = LOS_SwtmrStart(g_szId[0]);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestDumpCpuid();
return;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, NULL);
LOS_HwiDelete(HWI_NUM_TEST1, NULL);
LOS_HwiDelete(HWI_NUM_TEST2, NULL);
LOS_HwiDelete(HWI_NUM_TEST3, NULL);
LOS_SwtmrDelete(g_szId[0]);
LOS_SwtmrDelete(g_szId[1]);
return;
}
static VOID HwiF02(void)
{
UINT32 ret;
TEST_HwiClear(HWI_NUM_TEST1);
ret = LOS_SwtmrStart(g_szId[1]);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestDumpCpuid();
return;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, NULL);
LOS_HwiDelete(HWI_NUM_TEST1, NULL);
LOS_HwiDelete(HWI_NUM_TEST2, NULL);
LOS_HwiDelete(HWI_NUM_TEST3, NULL);
LOS_SwtmrDelete(g_szId[0]);
LOS_SwtmrDelete(g_szId[1]);
return;
}
static VOID HwiF03(void)
{
UINT32 ret;
TEST_HwiClear(HWI_NUM_TEST2);
ret = LOS_SwtmrStop(g_szId[1]);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestDumpCpuid();
return;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, NULL);
LOS_HwiDelete(HWI_NUM_TEST1, NULL);
LOS_HwiDelete(HWI_NUM_TEST2, NULL);
LOS_HwiDelete(HWI_NUM_TEST3, NULL);
LOS_SwtmrDelete(g_szId[0]);
LOS_SwtmrDelete(g_szId[1]);
return;
}
static VOID HwiF04(void)
{
UINT32 ret;
TEST_HwiClear(HWI_NUM_TEST3);
ret = LOS_SwtmrStop(g_szId[0]);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestDumpCpuid();
return;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, NULL);
LOS_HwiDelete(HWI_NUM_TEST1, NULL);
LOS_HwiDelete(HWI_NUM_TEST2, NULL);
LOS_HwiDelete(HWI_NUM_TEST3, NULL);
LOS_SwtmrDelete(g_szId[0]);
LOS_SwtmrDelete(g_szId[1]);
return;
}
static UINT32 Testcase(void)
{
UINT32 ret, i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_szId[0], 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_szId[1], 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
ret = LOS_HwiCreate(HWI_NUM_TEST1, 1, 0, (HWI_PROC_FUNC)HwiF02, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST1, CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM)); // other cpu
ret = LOS_HwiCreate(HWI_NUM_TEST2, 1, 0, (HWI_PROC_FUNC)HwiF03, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST2, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
ret = LOS_HwiCreate(HWI_NUM_TEST3, 1, 0, (HWI_PROC_FUNC)HwiF04, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST3, CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM)); // other cpu
for (i = 0; i < LOOP; i++) {
#ifndef TEST1980
TestHwiTrigger(HWI_NUM_TEST1); // start swtmrs
TestHwiTrigger(HWI_NUM_TEST);
#else
HalIrqSendIpi(CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM), HWI_NUM_TEST1);
HalIrqSendIpi(CPUID_TO_AFFI_MASK(ArchCurrCpuid()), HWI_NUM_TEST);
#endif
LOS_TaskDelay(g_testPeriod + 1);
ICUNIT_GOTO_EQUAL(g_testCount, 2 * (i + 1), g_testCount, EXIT); // 2 * (i + 1),Compared to the expected value.
#ifndef TEST1980
TestHwiTrigger(HWI_NUM_TEST3); // stop swtmrs
TestHwiTrigger(HWI_NUM_TEST2);
#else
HalIrqSendIpi(CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM), HWI_NUM_TEST3);
HalIrqSendIpi(CPUID_TO_AFFI_MASK(ArchCurrCpuid()), HWI_NUM_TEST2);
#endif
LOS_TaskDelay(g_testPeriod + 1);
ICUNIT_GOTO_EQUAL(g_testCount, 2 * (i + 1), g_testCount, EXIT); // 2 * (i + 1),Compared to the expected value.
}
EXIT:
ret = LOS_HwiDelete(HWI_NUM_TEST, NULL);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST1, NULL);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST2, NULL);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST3, NULL);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_SwtmrDelete(g_szId[0]);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_SwtmrDelete(g_szId[1]);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
return LOS_OK;
}
VOID ItSmpLosHwi011(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi011", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,125 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_szId[LOSCFG_KERNEL_CORE_NUM] = {0};
static VOID SwtmrF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF01(void)
{
UINT32 ret;
ret = LOS_SwtmrDelete(g_szId[0]);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
TestDumpCpuid();
return;
}
static VOID HwiF02(void)
{
UINT32 ret;
ret = LOS_SwtmrDelete(g_szId[1]);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
UINT32 ret, i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
ret = LOS_HwiCreate(HWI_NUM_TEST1, 1, 0, (HWI_PROC_FUNC)HwiF02, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST1, CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM)); // other cpu
for (i = 0; i < LOOP; i++) {
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_szId[0], 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_szId[1], 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_SwtmrStart(g_szId[0]);
LOS_SwtmrStart(g_szId[1]);
#ifndef TEST1980
TestHwiTrigger(HWI_NUM_TEST1);
TestHwiTrigger(HWI_NUM_TEST);
#else
HalIrqSendIpi(CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM), HWI_NUM_TEST1);
HalIrqSendIpi(CPUID_TO_AFFI_MASK(ArchCurrCpuid()), HWI_NUM_TEST);
#endif
LOS_TaskDelay(g_testPeriod + 1);
ICUNIT_GOTO_EQUAL(g_testCount, 0, g_testCount, EXIT);
}
EXIT:
ret = LOS_HwiDelete(HWI_NUM_TEST, NULL);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST1, NULL);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_SwtmrDelete(g_szId[0]);
ICUNIT_GOTO_NOT_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_SwtmrDelete(g_szId[1]);
ICUNIT_GOTO_NOT_EQUAL(ret, LOS_OK, ret, EXIT);
return LOS_OK;
}
VOID ItSmpLosHwi012(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi012", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,102 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static VOID SwtmrF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF01(void)
{
UINT32 ret, i;
for (i = 0; i < TRandom() % 100; i++) { // Get a random number between 0 and 100
}
ret = LOS_SwtmrDelete(g_swTmrID);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
UINT32 ret, i, j;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM)); // other cpu
for (i = 0; i < LOOP; i++) {
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_swTmrID, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestHwiTrigger(HWI_NUM_TEST); // delete swtmr in hwi on other cpu
for (j = 0; j < TRandom() % 500; j++) { // Get a random number between 0 and 500
LOS_SwtmrStart(g_swTmrID); // start swtmr in task on current cpu
}
LOS_TaskDelay(g_testPeriod + 1);
ICUNIT_GOTO_EQUAL(g_testCount, 0, g_testCount, EXIT);
}
EXIT:
ret = LOS_HwiDelete(HWI_NUM_TEST, NULL);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_SwtmrDelete(g_swTmrID);
ICUNIT_GOTO_NOT_EQUAL(ret, LOS_OK, ret, EXIT);
return LOS_OK;
}
VOID ItSmpLosHwi013(VOID)
{
TEST_ADD_CASE("ItSmpLosHwi013", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,107 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
ICUNIT_GOTO_EQUAL(ArchCurrCpuid(), g_targetCpuid, ArchCurrCpuid(), EXIT);
return;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT11);
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_targetCpuid = ArchCurrCpuid(); // currernt cpu
PRINT_DEBUG("g_targetCpuid = %d\n", g_targetCpuid);
LOS_TaskDelay(1);
HalIrqSendIpi(g_targetCpuid + 1, HWI_NUM_INT11); // 01:0kernel,10:1kernel,11:0kernel& 1kernel
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
return LOS_OK;
}
VOID ItSmpLosHwiIpi001(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiIpi001", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,103 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
ICUNIT_ASSERT_EQUAL_VOID(ArchCurrCpuid(), g_targetCpuid, ArchCurrCpuid());
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_targetCpuid = 0;
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqUnmask(HWI_NUM_INT11);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_targetCpuid = (ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM; // other cpu
PRINT_DEBUG("g_targetCpuid = %d\n", g_targetCpuid);
LOS_TaskDelay(1);
HalIrqSendIpi(g_targetCpuid + 1, HWI_NUM_INT11);
LOS_TaskDelay(1);
TEST_HwiDelete(HWI_NUM_INT11);
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
return LOS_OK;
}
VOID ItSmpLosHwiIpi002(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiIpi002", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,100 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
ICUNIT_ASSERT_EQUAL_VOID(ArchCurrCpuid(), g_targetCpuid, ArchCurrCpuid());
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
PRINT_DEBUG("g_targetCpuid = %d\n", g_targetCpuid);
HalIrqSendIpi(g_targetCpuid + 1, HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
UINT32 i;
g_testCount = 0;
g_targetCpuid = 0;
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqUnmask(HWI_NUM_INT11);
currCpuid = (ArchCurrCpuid() + 1) % (LOSCFG_KERNEL_CORE_NUM);
g_targetCpuid = currCpuid; // other cpu
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1, CPUID_TO_AFFI_MASK(currCpuid));
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(10); // 10, set delay time
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
TEST_HwiDelete(HWI_NUM_INT11);
return LOS_OK;
}
VOID ItSmpLosHwiIpi003(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiIpi003", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,100 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
ICUNIT_ASSERT_EQUAL_VOID(ArchCurrCpuid(), g_targetCpuid, ArchCurrCpuid());
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
PRINT_DEBUG("g_targetCpuid = %d\n", g_targetCpuid);
HalIrqSendIpi(g_targetCpuid + 1, HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
UINT32 i;
g_testCount = 0;
g_targetCpuid = 0;
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqUnmask(HWI_NUM_INT11);
currCpuid = (ArchCurrCpuid() + 1) % (LOSCFG_KERNEL_CORE_NUM); // other cpu
g_targetCpuid = ArchCurrCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1, CPUID_TO_AFFI_MASK(currCpuid));
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(10); // 10, set delay time
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
TEST_HwiDelete(HWI_NUM_INT11);
return LOS_OK;
}
VOID ItSmpLosHwiIpi004(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiIpi004", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,107 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT11);
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_targetCpuid = (1 << LOSCFG_KERNEL_CORE_NUM) - 1; // all cpu
PRINT_DEBUG("g_targetCpuid = %d\n", g_targetCpuid);
LOS_TaskDelay(1);
HalIrqSendIpi(g_targetCpuid, HWI_NUM_INT11);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, LOSCFG_KERNEL_CORE_NUM, g_testCount, EXIT);
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
return LOS_OK;
}
VOID ItSmpLosHwiIpi005(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiIpi005", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,128 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static UINT32 g_szId[LOSCFG_KERNEL_CORE_NUM] = {0};
static VOID SwtmrF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF01(void)
{
UINT32 ret, index;
index = ArchCurrCpuid();
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_szId[index], 0);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i, j;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT11);
g_targetCpuid = (1 << LOSCFG_KERNEL_CORE_NUM) - 1; // all cpu
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
LOS_TaskDelay(1);
for (j = 0; j < LOOP; j++) {
HalIrqSendIpi(g_targetCpuid, HWI_NUM_INT11);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, LOSCFG_KERNEL_CORE_NUM * (j + 1), g_testCount, EXIT);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
ret = LOS_SwtmrDelete(g_szId[i]);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
}
TEST_HwiDelete(HWI_NUM_INT11);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
LOS_SwtmrDelete(g_szId[i]);
}
return LOS_OK;
}
VOID ItSmpLosHwiIpi006(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiIpi006", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,143 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
/* for debugging */
STATIC UINT32 g_ipiTriggerTimes = 0;
STATIC UINT32 g_ipiRecieveTimes[LOSCFG_KERNEL_CORE_NUM] = { 0 };
static UINT32 g_szId[LOSCFG_KERNEL_CORE_NUM] = {0};
static VOID SwtmrF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF01(void)
{
UINT32 ret, index;
index = ArchCurrCpuid();
g_ipiRecieveTimes[index]++;
ret = LOS_SwtmrDelete(g_szId[index]);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i, j;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT11);
g_targetCpuid = (1 << LOSCFG_KERNEL_CORE_NUM) - 1; // all cpu
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
LOS_TaskDelay(1);
for (j = 0; j < LOOP; j++) {
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_szId[i], 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_ipiTriggerTimes++;
HalIrqSendIpi(g_targetCpuid, HWI_NUM_INT11);
LOS_TaskDelay(1);
PRINTK("sent %u time\n", g_ipiTriggerTimes);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
PRINTK(" cpu%d recieved %u times\n", i, g_ipiRecieveTimes[i]);
}
ICUNIT_GOTO_EQUAL(g_testCount, LOSCFG_KERNEL_CORE_NUM * (j + 1), g_testCount, EXIT);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
ret = LOS_SwtmrDelete(g_szId[i]);
ICUNIT_ASSERT_NOT_EQUAL(ret, LOS_OK, ret);
}
}
TEST_HwiDelete(HWI_NUM_INT11);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
PRINT_DEBUG("---%d---\n", g_szId[i]);
LOS_SwtmrDelete(g_szId[i]);
}
return LOS_OK;
}
VOID ItSmpLosHwiIpi007(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiIpi007", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,129 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID SwtmrF01(void)
{
LOS_AtomicDec(&g_testCount);
}
static VOID HwiF01(void)
{
UINT32 ret, id;
id = ArchCurrCpuid() % 3; // 3, Get the current CPU
switch (id) {
case 0:
LOS_SwtmrStart(g_swTmrID);
break;
case 1:
LOS_SwtmrDelete(g_swTmrID);
break;
case 2: // 2, when id is 2
LOS_SwtmrStop(g_swTmrID);
break;
default:
break;
}
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT11);
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_targetCpuid = (1 << LOSCFG_KERNEL_CORE_NUM) - 1; // all cpu
LOS_TaskDelay(1);
for (i = 0; i < LOOP; i++) {
ret = LOS_SwtmrCreate(g_testPeriod, LOS_SWTMR_MODE_PERIOD, (SWTMR_PROC_FUNC)SwtmrF01, &g_swTmrID, 0);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSendIpi(g_targetCpuid, HWI_NUM_INT11);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, LOSCFG_KERNEL_CORE_NUM * (i + 1), g_testCount, EXIT);
LOS_SwtmrDelete(g_swTmrID);
}
TEST_HwiDelete(HWI_NUM_INT11);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
LOS_SwtmrDelete(g_swTmrID);
return LOS_OK;
}
VOID ItSmpLosHwiIpi008(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiIpi008", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,115 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF02(void)
{
ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID HwiF01(void)
{
TestHwiTrigger(HWI_NUM_TEST);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT12);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT12);
ret = LOS_HwiCreate(HWI_NUM_INT12, 1, 0, (HWI_PROC_FUNC)HwiF01, 0); // ipi
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF02, 0); // spi
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_targetCpuid = ArchCurrCpuid();
HalIrqSendIpi(CPUID_TO_AFFI_MASK(g_targetCpuid), HWI_NUM_INT12); // currernt cpu;
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2,The expected value
TEST_HwiDelete(HWI_NUM_INT12);
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_INT12);
TEST_HwiDelete(HWI_NUM_TEST);
return LOS_OK;
}
VOID ItSmpLosHwiNest001(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiNest001", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,115 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
extern EVENT_CB_S g_event;
static VOID HwiF02(void)
{
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID HwiF01(void)
{
TestHwiTrigger(HWI_NUM_TEST);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT12);
LOS_EventWrite(&g_event, 0x1 << (ArchCurrCpuid()));
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
LOS_EventInit(&g_event);
HalIrqUnmask(HWI_NUM_INT12);
ret = LOS_HwiCreate(HWI_NUM_INT12, 1, 0, (HWI_PROC_FUNC)HwiF01, 0); // ipi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF02, 0); // spi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
ret = LOS_EventRead(&g_event, (0x1 << LOSCFG_KERNEL_CORE_NUM) - 1, LOS_WAITMODE_AND, LOS_WAIT_FOREVER);
ICUNIT_GOTO_EQUAL(ret, (0x1 << LOSCFG_KERNEL_CORE_NUM) - 1, ret, EXIT);
g_targetCpuid = (ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM; // other cpu
HalIrqSendIpi(CPUID_TO_AFFI_MASK(g_targetCpuid), HWI_NUM_INT12);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2,The expected value
EXIT:
TEST_HwiDelete(HWI_NUM_INT12);
TEST_HwiDelete(HWI_NUM_TEST);
LOS_EventDestroy(&g_event);
return LOS_OK;
}
VOID ItSmpLosHwiNest002(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiNest002", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,99 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF02(void)
{
ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID HwiF01(void)
{
TestHwiTrigger(HWI_NUM_TEST1);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0); // spi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
ret = LOS_HwiCreate(HWI_NUM_TEST1, 1, 0, (HWI_PROC_FUNC)HwiF02, 0); // spi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST1, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2,The expected value
TEST_HwiDelete(HWI_NUM_TEST);
TEST_HwiDelete(HWI_NUM_TEST1);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
TEST_HwiDelete(HWI_NUM_TEST1);
return LOS_OK;
}
VOID ItSmpLosHwiNest003(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiNest003", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,106 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF02(void)
{
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID HwiF01(void)
{
#ifndef TEST1980
TestHwiTrigger(HWI_NUM_TEST1);
#else
HalIrqSendIpi(CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM), HWI_NUM_TEST1);
#endif
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
ret = LOS_HwiCreate(HWI_NUM_TEST, 1, 0, (HWI_PROC_FUNC)HwiF01, 0); // spi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
ret = LOS_HwiCreate(HWI_NUM_TEST1, 1, 0, (HWI_PROC_FUNC)HwiF02, 0); // spi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST1, CPUID_TO_AFFI_MASK((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM)); // other cpu
#ifndef TEST1980
TestHwiTrigger(HWI_NUM_TEST);
#else
HalIrqSendIpi(CPUID_TO_AFFI_MASK(ArchCurrCpuid()), HWI_NUM_TEST);
#endif
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2,The expected value
TEST_HwiDelete(HWI_NUM_TEST);
TEST_HwiDelete(HWI_NUM_TEST1);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_TEST);
TEST_HwiDelete(HWI_NUM_TEST1);
return LOS_OK;
}
VOID ItSmpLosHwiNest004(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiNest004", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,116 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF02(void)
{
ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID HwiF01(void)
{
HalIrqSendIpi(g_targetCpuid + 1, HWI_NUM_INT12);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
HalIrqUnmask(HWI_NUM_INT12);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT11);
HalIrqUnmask(HWI_NUM_INT12);
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0); // ipi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiCreate(HWI_NUM_INT12, 1, 0, (HWI_PROC_FUNC)HwiF02, 0); // ipi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_targetCpuid = ArchCurrCpuid(); // current cpu
HalIrqSendIpi(g_targetCpuid + 1, HWI_NUM_INT11);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2,The expected value
TEST_HwiDelete(HWI_NUM_INT11);
TEST_HwiDelete(HWI_NUM_INT12);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
TEST_HwiDelete(HWI_NUM_INT12);
return LOS_OK;
}
VOID ItSmpLosHwiNest005(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiNest005", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,115 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF02(void)
{
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID HwiF01(void)
{
HalIrqSendIpi(((ArchCurrCpuid() + 1) % LOSCFG_KERNEL_CORE_NUM) + 1, HWI_NUM_INT12);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
HalIrqUnmask(HWI_NUM_INT12);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT11);
HalIrqUnmask(HWI_NUM_INT12);
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0); // ipi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiCreate(HWI_NUM_INT12, 1, 0, (HWI_PROC_FUNC)HwiF02, 0); // ipi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_targetCpuid = ArchCurrCpuid(); // current cpu
HalIrqSendIpi(g_targetCpuid + 1, HWI_NUM_INT11);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2,The expected value
TEST_HwiDelete(HWI_NUM_INT11);
TEST_HwiDelete(HWI_NUM_INT12);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
TEST_HwiDelete(HWI_NUM_INT12);
return LOS_OK;
}
VOID ItSmpLosHwiNest006(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiNest006", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,115 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF02(void)
{
HalIrqSendIpi(CPUID_TO_AFFI_MASK(g_targetCpuid), HWI_NUM_INT11); // currernt cpu;
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID HwiF01(void)
{
ICUNIT_ASSERT_EQUAL_VOID(g_testCount, 1, g_testCount);
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT11);
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0); // ipi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiCreate(HWI_NUM_TEST1, 1, 0, (HWI_PROC_FUNC)HwiF02, 0); // spi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST1, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_targetCpuid = ArchCurrCpuid();
TestHwiTrigger(HWI_NUM_TEST1);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2,The expected value
TEST_HwiDelete(HWI_NUM_INT11);
TEST_HwiDelete(HWI_NUM_TEST1);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
TEST_HwiDelete(HWI_NUM_TEST1);
return LOS_OK;
}
VOID ItSmpLosHwiNest007(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiNest007", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,114 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#if (LOSCFG_KERNEL_SMP == YES)
static UINT32 g_targetCpuid;
static VOID HwiF02(void)
{
HalIrqSendIpi(CPUID_TO_AFFI_MASK((g_targetCpuid + 1) % LOSCFG_KERNEL_CORE_NUM), HWI_NUM_INT11); // other cpu;
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
TestDumpCpuid();
return;
}
static VOID TaskF01(void)
{
HalIrqUnmask(HWI_NUM_INT11);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i;
g_testCount = 0;
g_testPeriod = 10; // 10, Timeout interval of a periodic software timer.
g_targetCpuid = 0;
HalIrqUnmask(HWI_NUM_INT11);
ret = LOS_HwiCreate(HWI_NUM_INT11, 1, 0, (HWI_PROC_FUNC)HwiF01, 0); // ipi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiCreate(HWI_NUM_TEST1, 1, 0, (HWI_PROC_FUNC)HwiF02, 0); // spi
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
HalIrqSetAffinity(HWI_NUM_TEST1, CPUID_TO_AFFI_MASK(ArchCurrCpuid())); // curret cpu
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK((ArchCurrCpuid() + i + 1) %
LOSCFG_KERNEL_CORE_NUM)); // let current cpu 's task create at the last
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
g_targetCpuid = ArchCurrCpuid();
TestHwiTrigger(HWI_NUM_TEST1);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 2, g_testCount, EXIT); // 2,The expected value
TEST_HwiDelete(HWI_NUM_INT11);
TEST_HwiDelete(HWI_NUM_TEST1);
return LOS_OK;
EXIT:
TEST_HwiDelete(HWI_NUM_INT11);
TEST_HwiDelete(HWI_NUM_TEST1);
return LOS_OK;
}
VOID ItSmpLosHwiNest008(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiNest008", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,114 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef LOSCFG_NO_SHARED_IRQ
static HwiIrqParam g_dev1, g_dev2;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF02(void)
{
LOS_AtomicAdd(&g_testCount, 0xff);
}
static VOID TaskF01(void)
{
UINT32 ret;
g_dev2.pDevId = (void *)2; // 2, Set device ID
g_dev2.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF02, &g_dev2); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
g_testCount = 0;
g_dev1.pDevId = (void *)1;
g_dev1.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &g_dev1); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 0x100, g_testCount, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
return LOS_OK;
}
VOID ItSmpLosHwiShare001(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare001", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,115 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef LOSCFG_NO_SHARED_IRQ
static HwiIrqParam g_dev1, g_dev2;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF02(void)
{
LOS_AtomicAdd(&g_testCount, 0xff);
}
static VOID TaskF01(void)
{
UINT32 ret;
g_dev2.pDevId = (void *)2; // 2, Set device ID
g_dev2.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF02, &g_dev2); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
g_testCount = 0;
g_dev1.pDevId = (void *)1;
g_dev1.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &g_dev1); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
currCpuid = (ArchCurrCpuid() + 1) % (LOSCFG_KERNEL_CORE_NUM);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_002_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(currCpuid)); // cross task
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 0x100, g_testCount, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
return LOS_OK;
}
VOID ItSmpLosHwiShare002(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare002", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,114 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef LOSCFG_NO_SHARED_IRQ
static HwiIrqParam g_dev1, g_dev2;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF02(void)
{
LOS_AtomicAdd(&g_testCount, 0xff);
}
static VOID TaskF01(void)
{
UINT32 ret;
TestDumpCpuid();
TestHwiTrigger(HWI_NUM_TEST);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
g_testCount = 0;
g_dev1.pDevId = (void *)1;
g_dev1.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &g_dev1); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
g_dev2.pDevId = (void *)2; // 2, Set device ID
g_dev2.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF02, &g_dev2); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 0x100, g_testCount, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
return LOS_OK;
}
VOID ItSmpLosHwiShare003(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare003", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,111 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef LOSCFG_NO_SHARED_IRQ
static HwiIrqParam g_dev1, g_dev2;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF02(void)
{
LOS_AtomicAdd(&g_testCount, 0xff);
}
static VOID TaskF01(void)
{
TestDumpCpuid();
TestHwiTrigger(HWI_NUM_TEST);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
g_testCount = 0;
g_dev1.pDevId = (void *)1;
g_dev1.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &g_dev1); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
g_dev2.pDevId = (void *)2; // 2, Set device ID
g_dev2.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF02, &g_dev2); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
currCpuid = (ArchCurrCpuid() + 1) % (LOSCFG_KERNEL_CORE_NUM);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_002_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(currCpuid)); // cross task
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 0x100, g_testCount, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
return LOS_OK;
}
VOID ItSmpLosHwiShare004(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare004", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,113 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef LOSCFG_NO_SHARED_IRQ
static HwiIrqParam g_dev1, g_dev2;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF02(void)
{
LOS_AtomicAdd(&g_testCount, 0xff);
}
static VOID TaskF01(void)
{
UINT32 ret;
TestDumpCpuid();
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
g_testCount = 0;
g_dev1.pDevId = (void *)1;
g_dev1.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &g_dev1); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
g_dev2.pDevId = (void *)2; // 2, Set device ID
g_dev2.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF02, &g_dev2); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_001_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(ArchCurrCpuid()));
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
LOS_TaskDelay(1);
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 0xff, g_testCount, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
return LOS_OK;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
return LOS_OK;
}
VOID ItSmpLosHwiShare005(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare005", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,118 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef LOSCFG_NO_SHARED_IRQ
static HwiIrqParam g_dev1, g_dev2;
extern EVENT_CB_S g_event;
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID HwiF02(void)
{
LOS_AtomicAdd(&g_testCount, 0xff);
}
static VOID TaskF01(void)
{
UINT32 ret;
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
LOS_EventWrite(&g_event, 0x1);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
g_testCount = 0;
LOS_EventInit(&g_event);
g_dev1.pDevId = (void *)1;
g_dev1.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &g_dev1); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
g_dev2.pDevId = (void *)2; // 2, Set device ID
g_dev2.swIrq = HWI_NUM_TEST;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF02, &g_dev2); // 3, Set the interrupt priority
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
currCpuid = (ArchCurrCpuid() + 1) % (LOSCFG_KERNEL_CORE_NUM);
TestDumpCpuid();
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_002_task", TaskF01, TASK_PRIO_TEST - 1,
CPUID_TO_AFFI_MASK(currCpuid)); // cross task
ret = LOS_TaskCreate(&g_testTaskID01, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_EventRead(&g_event, 0x1, LOS_WAITMODE_AND, LOS_WAIT_FOREVER);
ICUNIT_GOTO_EQUAL(ret, 0x1, ret, EXIT);
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_EQUAL(g_testCount, 0xff, g_testCount, EXIT);
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
LOS_EventDestroy(&g_event);
return LOS_OK;
EXIT:
LOS_EventDestroy(&g_event);
LOS_HwiDelete(HWI_NUM_TEST, &g_dev1);
LOS_HwiDelete(HWI_NUM_TEST, &g_dev2);
return LOS_OK;
}
VOID ItSmpLosHwiShare006(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare006", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,124 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
extern EVENT_CB_S g_event;
#ifndef LOSCFG_NO_SHARED_IRQ
static HwiIrqParam g_dev[LOSCFG_KERNEL_CORE_NUM];
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF02(VOID)
{
TestHwiTrigger(HWI_NUM_TEST);
LOS_EventWrite(&g_event, 0x1 << LOSCFG_KERNEL_CORE_NUM);
TestDumpCpuid();
return;
}
static VOID TaskF01(UINTPTR devIndex)
{
UINT32 ret;
// 3, Set the interrupt priority
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &(g_dev[devIndex]));
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
ret = LOS_EventWrite(&g_event, 0x1 << devIndex);
ICUNIT_ASSERT_EQUAL_VOID(ret, LOS_OK, ret);
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
UINT32 i;
g_testCount = 0;
LOS_EventInit(&g_event);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
g_dev[i].pDevId = (void *)(i + 1);
g_dev[i].swIrq = HWI_NUM_TEST;
}
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT(testTask, "it_hwi_share_task", TaskF01,
TASK_PRIO_TEST + 1); // not set cpuaffi
testTask.auwArgs[0] = i;
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
ret = LOS_EventRead(&g_event, (0x1 << LOSCFG_KERNEL_CORE_NUM) - 1, LOS_WAITMODE_AND, LOS_WAIT_FOREVER);
ICUNIT_GOTO_EQUAL(ret, (0x1 << LOSCFG_KERNEL_CORE_NUM) - 1, ret, EXIT);
TEST_TASK_PARAM_INIT(testTask, "it_hwi_share_task", TaskF02,
TASK_PRIO_TEST + 1); // not set cpuaffi
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_EventRead(&g_event, (0x1 << (LOSCFG_KERNEL_CORE_NUM + 1)) - 1, LOS_WAITMODE_AND, LOS_WAIT_FOREVER);
ICUNIT_GOTO_EQUAL(ret, (0x1 << (LOSCFG_KERNEL_CORE_NUM + 1)) - 1, ret, EXIT);
LOS_TaskDelay(2); // 2, set delay time
ICUNIT_GOTO_EQUAL(g_testCount, LOSCFG_KERNEL_CORE_NUM, g_testCount, EXIT);
EXIT:
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
LOS_HwiDelete(HWI_NUM_TEST, &(g_dev[i]));
}
LOS_EventDestroy(&g_event);
return LOS_OK;
}
VOID ItSmpLosHwiShare007(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare007", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,103 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef LOSCFG_NO_SHARED_IRQ
static UINT32 g_ret = 0;
static HwiIrqParam g_dev;
static VOID HwiF01(void)
{
TEST_HwiClear(HWI_NUM_TEST);
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01()
{
UINT32 ret;
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &g_dev); // 3, Set the interrupt priority
g_ret |= ret;
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i, j;
g_dev.pDevId = (void *)(1);
g_dev.swIrq = HWI_NUM_TEST;
for (j = 0; j < LOOP; j++) {
g_testCount = 0;
g_ret = 0;
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_share_task", TaskF01, TASK_PRIO_TEST + 1,
CPUID_TO_AFFI_MASK(i));
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
LOS_TaskDelay(1);
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_NOT_EQUAL(g_ret, 0, g_ret, EXIT);
ICUNIT_GOTO_EQUAL(g_testCount, 1, g_testCount, EXIT);
LOS_HwiDelete(HWI_NUM_TEST, &g_dev);
}
LOS_HwiDelete(HWI_NUM_TEST, &g_dev);
return LOS_OK;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, &g_dev);
return LOS_OK;
}
VOID ItSmpLosHwiShare008(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare008", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,108 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef LOSCFG_NO_SHARED_IRQ
static HwiIrqParam g_dev;
static UINT32 g_ret = 0;
static VOID HwiF01(void)
{
TEST_HwiClear(HWI_NUM_TEST);
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01()
{
UINT32 ret;
ret = LOS_HwiDelete(HWI_NUM_TEST, &g_dev);
g_ret |= ret;
TestDumpCpuid();
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid;
UINT32 i, j;
g_dev.pDevId = (void *)(1);
g_dev.swIrq = HWI_NUM_TEST;
for (j = 0; j < LOOP; j++) {
g_testCount = 0;
g_ret = 0;
// 3, Set the interrupt priority
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &g_dev);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_share_task", TaskF01, TASK_PRIO_TEST + 1,
CPUID_TO_AFFI_MASK(i));
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
LOS_TaskDelay(1);
TestHwiTrigger(HWI_NUM_TEST);
LOS_TaskDelay(1);
ICUNIT_GOTO_NOT_EQUAL(g_ret, 0, g_ret, EXIT);
ICUNIT_GOTO_EQUAL(g_testCount, 0, g_testCount, EXIT);
LOS_HwiDelete(HWI_NUM_TEST, &g_dev);
}
return LOS_OK;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, &g_dev);
return LOS_OK;
}
VOID ItSmpLosHwiShare009(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare009", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,138 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_smp_hwi.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifndef LOSCFG_NO_SHARED_IRQ
static HwiIrqParam g_dev[3]; // 3, Three devices
static VOID HwiF01(void)
{
LOS_AtomicInc(&g_testCount);
}
static VOID TaskF01()
{
UINT32 ret, index, i;
index = ArchCurrCpuid();
switch (index) {
case 0:
for (i = 0; i < LOOP; i++) {
// 3, Set the interrupt priority
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &(g_dev[0]));
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestHwiTrigger(HWI_NUM_TEST);
LOS_HwiDelete(HWI_NUM_TEST, &(g_dev[0]));
TestDumpCpuid();
}
break;
case 1:
for (i = 0; i < LOOP; i++) {
// 3, Set the interrupt priority
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &(g_dev[1]));
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestHwiTrigger(HWI_NUM_TEST);
LOS_HwiDelete(HWI_NUM_TEST, &(g_dev[1]));
TestDumpCpuid();
}
break;
case 2: // 2, when CPU id is
for (i = 0; i < LOOP; i++) {
// 3, Set the interrupt priority; 2, index
ret = LOS_HwiCreate(HWI_NUM_TEST, 3, IRQF_SHARED, (HWI_PROC_FUNC)HwiF01, &(g_dev[2]));
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
TestHwiTrigger(HWI_NUM_TEST);
LOS_HwiDelete(HWI_NUM_TEST, &(g_dev[2])); // 2, index
TestDumpCpuid();
}
break;
default:
TestDumpCpuid();
break;
}
return;
EXIT:
LOS_HwiDelete(HWI_NUM_TEST, &(g_dev[0]));
LOS_HwiDelete(HWI_NUM_TEST, &(g_dev[1]));
LOS_HwiDelete(HWI_NUM_TEST, &(g_dev[2])); // 2, index
return;
}
static UINT32 Testcase(void)
{
TSK_INIT_PARAM_S testTask;
UINT32 ret, testid, currCpuid;
UINT32 i;
g_testCount = 0;
for (i = 0; i < 3; i++) { // 3, max index
g_dev[i].pDevId = (void *)(i + 1);
g_dev[i].swIrq = HWI_NUM_TEST;
}
for (i = 0; i < LOSCFG_KERNEL_CORE_NUM; i++) {
TEST_TASK_PARAM_INIT_AFFI(testTask, "it_hwi_share_task", TaskF01, TASK_PRIO_TEST + 1, CPUID_TO_AFFI_MASK(i));
ret = LOS_TaskCreate(&testid, &testTask);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
}
LOS_TaskDelay(100); // 100, set delay time
for (i = 0; i < 3; i++) { // 3, max index
ret = LOS_HwiDelete(HWI_NUM_TEST, &(g_dev[i]));
PRINT_DEBUG("ret = 0x%x\n", ret);
ICUNIT_ASSERT_NOT_EQUAL(ret, LOS_OK, ret);
}
return LOS_OK;
}
VOID ItSmpLosHwiShare010(VOID)
{
TEST_ADD_CASE("ItSmpLosHwiShare010", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,102 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_hwi_nesting.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#define RECORD_SIZE 100
UINT32 g_intrTrace[RECORD_SIZE];
UINT32 g_traceIdx = 0;
UINT32 g_intrHandleEnd = 0;
VOID RecordIntrTrace(INT32 irq, INT32 direction)
{
g_intrTrace[g_traceIdx++] = irq | (direction << 31); // 31, Bit shift mark.
}
VOID ResetIntrTrace(VOID)
{
g_traceIdx = 0;
memset(g_intrTrace, 0, RECORD_SIZE);
}
UINT32 CheckIntrTrace(UINT32 *expect, UINT32 num)
{
UINT32 ret = LOS_OK;
INT32 idx = 0;
if ((expect == NULL) || (num > RECORD_SIZE)) {
return LOS_NOK;
}
for (; idx < g_traceIdx; idx++) {
if (expect[idx] != g_intrTrace[idx]) {
ret = LOS_NOK;
break;
}
}
if (ret == LOS_NOK) {
for (idx = 0; idx < g_traceIdx; idx++) {
dprintf("%u ", g_intrTrace[idx]);
}
}
dprintf("\n");
return ret;
}
VOID ItSuiteHwiNesting(VOID)
{
#if defined(LOSCFG_TEST_FULL)
#ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION
ItLosHwiNest001();
ItLosHwiNest002();
ItLosHwiNest003();
ItLosHwiNest004();
ItLosHwiNest005();
ItLosHwiNest006();
ItLosHwiNest007();
#endif
#endif
}
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,68 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "osTest.h"
#include "los_hwi.h"
#include "gic_common.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#define HIGHT_PRIO_INTR 100
#define MIDDLE_PRIO_INTR 101
#define LOW_PRIO_INTR 102
#define SPI_HIGHT_PRIO 0
#define SPI_MIDDLE_PRIO ((GIC_MAX_INTERRUPT_PREEMPTION_LEVEL - 2) << PRIORITY_SHIFT)
#define SPI_LOW_PRIO MIN_INTERRUPT_PRIORITY
#define INTR_ENTRY 0
#define INTR_EXIT 1
extern UINT32 g_intrHandleEnd;
VOID RecordIntrTrace(INT32 irq, INT32 direction);
VOID ResetIntrTrace(VOID);
UINT32 CheckIntrTrace(UINT32 *expect, UINT32 num);
VOID ItLosHwiNest001(VOID);
VOID ItLosHwiNest002(VOID);
VOID ItLosHwiNest003(VOID);
VOID ItLosHwiNest004(VOID);
VOID ItLosHwiNest005(VOID);
VOID ItLosHwiNest006(VOID);
VOID ItLosHwiNest007(VOID);
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,127 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_hwi_nesting.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION
static HwiIrqParam g_nestingPara;
/* low in -> middle in -> hight in -> hight out -> middle out -> low out */
static UINT32 g_expect[] = {
LOW_PRIO_INTR, MIDDLE_PRIO_INTR, HIGHT_PRIO_INTR,
0x80000000 | HIGHT_PRIO_INTR,
0x80000000 | MIDDLE_PRIO_INTR,
0x80000000 | LOW_PRIO_INTR
};
static VOID NestingPrioLow(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(LOW_PRIO_INTR, INTR_ENTRY);
HalIrqPending(MIDDLE_PRIO_INTR); /* pending middle prio interrupt */
while (nestingDelay-- > 0) {
}
RecordIntrTrace(LOW_PRIO_INTR, INTR_EXIT);
g_intrHandleEnd = 1;
}
static VOID NestingPrioMiddle(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_ENTRY);
HalIrqPending(HIGHT_PRIO_INTR); /* pending hight prio interrupt */
while (nestingDelay-- > 0) {
}
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_EXIT);
}
static VOID NestingPrioHigh(INT32 irq, VOID *data)
{
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_ENTRY);
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_EXIT);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
LOS_HwiCreate(HIGHT_PRIO_INTR, SPI_HIGHT_PRIO, 0, (HWI_PROC_FUNC)NestingPrioHigh, &g_nestingPara);
LOS_HwiCreate(MIDDLE_PRIO_INTR, SPI_MIDDLE_PRIO, 0, (HWI_PROC_FUNC)NestingPrioMiddle, &g_nestingPara);
LOS_HwiCreate(LOW_PRIO_INTR, SPI_LOW_PRIO, 0, (HWI_PROC_FUNC)NestingPrioLow, &g_nestingPara);
HalIrqUnmask(HIGHT_PRIO_INTR);
HalIrqUnmask(MIDDLE_PRIO_INTR);
HalIrqUnmask(LOW_PRIO_INTR);
HalIrqPending(LOW_PRIO_INTR);
while (g_intrHandleEnd == 0) {
LOS_TaskDelay(10); // 10, set delay time.
}
ret = CheckIntrTrace(g_expect, sizeof(g_expect));
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
EXIT:
LOS_HwiDelete(HIGHT_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(MIDDLE_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(LOW_PRIO_INTR, &g_nestingPara);
HalIrqMask(HIGHT_PRIO_INTR);
HalIrqMask(MIDDLE_PRIO_INTR);
HalIrqMask(LOW_PRIO_INTR);
g_intrHandleEnd = 0;
ResetIntrTrace();
return LOS_OK;
}
VOID ItLosHwiNest001(VOID)
{
TEST_ADD_CASE("ItLosHwiNest001", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,128 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_hwi_nesting.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION
static HwiIrqParam g_nestingPara;
/* middle in -> middle out -> low in -> hight in -> hight out -> low out */
static UINT32 g_expect[] = {
MIDDLE_PRIO_INTR,
0x80000000 | MIDDLE_PRIO_INTR,
LOW_PRIO_INTR,
HIGHT_PRIO_INTR,
0x80000000 | HIGHT_PRIO_INTR,
0x80000000 | LOW_PRIO_INTR
};
static VOID NestingPrioLow(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(LOW_PRIO_INTR, INTR_ENTRY);
HalIrqPending(HIGHT_PRIO_INTR); /* pending hight prio interrupt */
while (nestingDelay-- > 0);
RecordIntrTrace(LOW_PRIO_INTR, INTR_EXIT);
g_intrHandleEnd = 1;
}
static VOID NestingPrioMiddle(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_ENTRY);
HalIrqPending(LOW_PRIO_INTR); /* pending low prio interrupt */
while (nestingDelay-- > 0);
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_EXIT);
}
static VOID NestingPrioHigh(INT32 irq, VOID *data)
{
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_ENTRY);
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_EXIT);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
LOS_HwiCreate(HIGHT_PRIO_INTR, SPI_HIGHT_PRIO, 0, (HWI_PROC_FUNC)NestingPrioHigh, &g_nestingPara);
LOS_HwiCreate(MIDDLE_PRIO_INTR, SPI_MIDDLE_PRIO, 0, (HWI_PROC_FUNC)NestingPrioMiddle, &g_nestingPara);
LOS_HwiCreate(LOW_PRIO_INTR, SPI_LOW_PRIO, 0, (HWI_PROC_FUNC)NestingPrioLow, &g_nestingPara);
HalIrqUnmask(HIGHT_PRIO_INTR);
HalIrqUnmask(MIDDLE_PRIO_INTR);
HalIrqUnmask(LOW_PRIO_INTR);
HalIrqPending(MIDDLE_PRIO_INTR); /* pending middle prio interrupt */
while (g_intrHandleEnd == 0) {
LOS_TaskDelay(10); // 10, set delay time.
}
ret = CheckIntrTrace(g_expect, sizeof(g_expect));
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
EXIT:
LOS_HwiDelete(HIGHT_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(MIDDLE_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(LOW_PRIO_INTR, &g_nestingPara);
HalIrqMask(HIGHT_PRIO_INTR);
HalIrqMask(MIDDLE_PRIO_INTR);
HalIrqMask(LOW_PRIO_INTR);
g_intrHandleEnd = 0;
ResetIntrTrace();
return LOS_OK;
}
VOID ItLosHwiNest002(VOID)
{
TEST_ADD_CASE("ItLosHwiNest002", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,129 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_hwi_nesting.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION
static HwiIrqParam g_nestingPara;
/* hight in -> hight out -> middle in -> middle out -> low in -> low out */
static UINT32 g_expect[] = {
HIGHT_PRIO_INTR,
0x80000000 | HIGHT_PRIO_INTR,
MIDDLE_PRIO_INTR,
0x80000000 | MIDDLE_PRIO_INTR,
LOW_PRIO_INTR,
0x80000000 | LOW_PRIO_INTR
};
static VOID NestingPrioLow(INT32 irq, VOID *data)
{
RecordIntrTrace(LOW_PRIO_INTR, INTR_ENTRY);
RecordIntrTrace(LOW_PRIO_INTR, INTR_EXIT);
g_intrHandleEnd = 1;
}
static VOID NestingPrioMiddle(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_ENTRY);
HalIrqPending(LOW_PRIO_INTR); /* pending low prio interrupt */
while (nestingDelay-- > 0) {
}
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_EXIT);
}
static VOID NestingPrioHigh(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_ENTRY);
HalIrqPending(MIDDLE_PRIO_INTR); /* pending middle prio interrupt */
while (nestingDelay-- > 0) {
}
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_EXIT);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
LOS_HwiCreate(HIGHT_PRIO_INTR, SPI_HIGHT_PRIO, 0, (HWI_PROC_FUNC)NestingPrioHigh, &g_nestingPara);
LOS_HwiCreate(MIDDLE_PRIO_INTR, SPI_MIDDLE_PRIO, 0, (HWI_PROC_FUNC)NestingPrioMiddle, &g_nestingPara);
LOS_HwiCreate(LOW_PRIO_INTR, SPI_LOW_PRIO, 0, (HWI_PROC_FUNC)NestingPrioLow, &g_nestingPara);
HalIrqUnmask(HIGHT_PRIO_INTR);
HalIrqUnmask(MIDDLE_PRIO_INTR);
HalIrqUnmask(LOW_PRIO_INTR);
HalIrqPending(HIGHT_PRIO_INTR); /* pending hight prio interrupt */
while (g_intrHandleEnd == 0) {
LOS_TaskDelay(10); // 10, set delay time.
}
ret = CheckIntrTrace(g_expect, sizeof(g_expect));
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
EXIT:
LOS_HwiDelete(HIGHT_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(MIDDLE_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(LOW_PRIO_INTR, &g_nestingPara);
HalIrqMask(HIGHT_PRIO_INTR);
HalIrqMask(MIDDLE_PRIO_INTR);
HalIrqMask(LOW_PRIO_INTR);
g_intrHandleEnd = 0;
ResetIntrTrace();
return LOS_OK;
}
VOID ItLosHwiNest003(VOID)
{
TEST_ADD_CASE("ItLosHwiNest003", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,128 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_hwi_nesting.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION
static HwiIrqParam g_nestingPara;
/* middle in -> middle out -> low in -> low out -> hight in -> hight out */
static UINT32 g_expect[] = {
MIDDLE_PRIO_INTR,
0x80000000 | MIDDLE_PRIO_INTR,
LOW_PRIO_INTR,
0x80000000 | LOW_PRIO_INTR,
HIGHT_PRIO_INTR,
0x80000000 | HIGHT_PRIO_INTR
};
static VOID NestingPrioLow(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(LOW_PRIO_INTR, INTR_ENTRY);
HalIrqPending(HIGHT_PRIO_INTR); /* pending hight prio interrupt */
while (nestingDelay-- > 0);
RecordIntrTrace(LOW_PRIO_INTR, INTR_EXIT);
g_intrHandleEnd = 1;
}
static VOID NestingPrioMiddle(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_ENTRY);
HalIrqPending(LOW_PRIO_INTR); /* pending low prio interrupt */
while (nestingDelay-- > 0);
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_EXIT);
}
static VOID NestingPrioHigh(INT32 irq, VOID *data)
{
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_ENTRY);
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_EXIT);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
LOS_HwiCreate(HIGHT_PRIO_INTR, SPI_MIDDLE_PRIO, 0, (HWI_PROC_FUNC)NestingPrioHigh, &g_nestingPara);
LOS_HwiCreate(MIDDLE_PRIO_INTR, SPI_MIDDLE_PRIO, 0, (HWI_PROC_FUNC)NestingPrioMiddle, &g_nestingPara);
LOS_HwiCreate(LOW_PRIO_INTR, SPI_MIDDLE_PRIO, 0, (HWI_PROC_FUNC)NestingPrioLow, &g_nestingPara);
HalIrqUnmask(HIGHT_PRIO_INTR);
HalIrqUnmask(MIDDLE_PRIO_INTR);
HalIrqUnmask(LOW_PRIO_INTR);
HalIrqPending(MIDDLE_PRIO_INTR); /* pending middle prio interrupt */
while (g_intrHandleEnd == 0) {
LOS_TaskDelay(10); // 10, set delay time.
}
ret = CheckIntrTrace(g_expect, sizeof(g_expect));
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
EXIT:
LOS_HwiDelete(HIGHT_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(MIDDLE_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(LOW_PRIO_INTR, &g_nestingPara);
HalIrqMask(HIGHT_PRIO_INTR);
HalIrqMask(MIDDLE_PRIO_INTR);
HalIrqMask(LOW_PRIO_INTR);
g_intrHandleEnd = 0;
ResetIntrTrace();
return LOS_OK;
}
VOID ItLosHwiNest004(VOID)
{
TEST_ADD_CASE("ItLosHwiNest004", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,143 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_hwi_nesting.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION
static HwiIrqParam g_nestingPara;
/* low in -> middle in -> hight in -> hight out -> middle out -> low out */
/* loop trigger */
static UINT32 g_expect[] = {
LOW_PRIO_INTR, MIDDLE_PRIO_INTR, HIGHT_PRIO_INTR,
0x80000000 | HIGHT_PRIO_INTR,
0x80000000 | MIDDLE_PRIO_INTR,
0x80000000 | LOW_PRIO_INTR,
LOW_PRIO_INTR, MIDDLE_PRIO_INTR, HIGHT_PRIO_INTR,
0x80000000 | HIGHT_PRIO_INTR,
0x80000000 | MIDDLE_PRIO_INTR,
0x80000000 | LOW_PRIO_INTR,
LOW_PRIO_INTR, MIDDLE_PRIO_INTR, HIGHT_PRIO_INTR,
0x80000000 | HIGHT_PRIO_INTR,
0x80000000 | MIDDLE_PRIO_INTR,
0x80000000 | LOW_PRIO_INTR,
LOW_PRIO_INTR,
0x80000000 | LOW_PRIO_INTR,
};
static VOID NestingPrioLow(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(LOW_PRIO_INTR, INTR_ENTRY);
if (g_intrHandleEnd < 3) { // 3, Interrupt callback function count.
HalIrqPending(MIDDLE_PRIO_INTR); /* pending middle prio interrupt */
}
while (nestingDelay-- > 0) {
}
RecordIntrTrace(LOW_PRIO_INTR, INTR_EXIT);
g_intrHandleEnd++;
}
static VOID NestingPrioMiddle(INT32 irq, VOID *data)
{
volatile UINT64 nestingDelay = 10000000; // 10000000, The loop frequency.
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_ENTRY);
HalIrqPending(HIGHT_PRIO_INTR); /* pending hight prio interrupt */
while (nestingDelay-- > 0) {
}
RecordIntrTrace(MIDDLE_PRIO_INTR, INTR_EXIT);
}
static VOID NestingPrioHigh(INT32 irq, VOID *data)
{
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_ENTRY);
HalIrqPending(LOW_PRIO_INTR);
RecordIntrTrace(HIGHT_PRIO_INTR, INTR_EXIT);
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
LOS_HwiCreate(HIGHT_PRIO_INTR, SPI_HIGHT_PRIO, 0, (HWI_PROC_FUNC)NestingPrioHigh, &g_nestingPara);
LOS_HwiCreate(MIDDLE_PRIO_INTR, SPI_MIDDLE_PRIO, 0, (HWI_PROC_FUNC)NestingPrioMiddle, &g_nestingPara);
LOS_HwiCreate(LOW_PRIO_INTR, SPI_LOW_PRIO, 0, (HWI_PROC_FUNC)NestingPrioLow, &g_nestingPara);
HalIrqUnmask(HIGHT_PRIO_INTR);
HalIrqUnmask(MIDDLE_PRIO_INTR);
HalIrqUnmask(LOW_PRIO_INTR);
HalIrqPending(LOW_PRIO_INTR);
while (g_intrHandleEnd == 0) {
LOS_TaskDelay(10); // 10, set delay time.
}
ret = CheckIntrTrace(g_expect, sizeof(g_expect));
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
EXIT:
LOS_HwiDelete(HIGHT_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(MIDDLE_PRIO_INTR, &g_nestingPara);
LOS_HwiDelete(LOW_PRIO_INTR, &g_nestingPara);
HalIrqMask(HIGHT_PRIO_INTR);
HalIrqMask(MIDDLE_PRIO_INTR);
HalIrqMask(LOW_PRIO_INTR);
g_intrHandleEnd = 0;
ResetIntrTrace();
return LOS_OK;
}
VOID ItLosHwiNest005(VOID)
{
TEST_ADD_CASE("ItLosHwiNest005", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,93 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_hwi_nesting.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION
static HwiIrqParam g_nestingPara;
static VOID NestingPrioHigh(INT32 irq, VOID *data)
{
g_intrHandleEnd = 1;
UINT32 temp[0x100][2] = {0};
memset(temp, 1, sizeof(UINT32) * 0x100 * 2); // 2, buffer size.
}
static VOID TaskF01(VOID)
{
HalIrqUnmask(HIGHT_PRIO_INTR);
HalIrqPending(HIGHT_PRIO_INTR);
}
static UINT32 Testcase(VOID)
{
UINT32 ret, taskID;
TSK_INIT_PARAM_S task1 = { 0 };
// 4, Task priority calculation.
TEST_TASK_PARAM_INIT(task1, "ItLosHwiNest010", (TSK_ENTRY_FUNC)TaskF01, TASK_PRIO_TEST - 4);
task1.uwStackSize = 0x2000;
LOS_HwiCreate(HIGHT_PRIO_INTR, SPI_HIGHT_PRIO, 0, (HWI_PROC_FUNC)NestingPrioHigh, &g_nestingPara);
HalIrqUnmask(HIGHT_PRIO_INTR);
ret = LOS_TaskCreate(&taskID, &task1);
while (g_intrHandleEnd == 0) {
LOS_TaskDelay(10); // 10, set delay time.
}
ICUNIT_GOTO_EQUAL(g_intrHandleEnd, 1, g_intrHandleEnd, EXIT);
EXIT:
LOS_HwiDelete(HIGHT_PRIO_INTR, &g_nestingPara);
HalIrqMask(HIGHT_PRIO_INTR);
g_intrHandleEnd = 0;
return LOS_OK;
}
VOID ItLosHwiNest006(VOID)
{
TEST_ADD_CASE("ItLosHwiNest006", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,123 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_hwi_nesting.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#ifdef LOSCFG_ARCH_INTERRUPT_PREEMPTION
#define MAX_RECORD_SIZE 1000
static HwiIrqParam g_nestingPara;
static INT32 g_saveIndex = 0;
static UINT64 g_intPendTime;
static UINT64 g_recordTime[MAX_RECORD_SIZE] = {0};
static VOID NestingPrioHigh(INT32 irq, VOID *data)
{
UINT64 curTime;
curTime = LOS_CurrNanosec();
g_recordTime[g_saveIndex] = curTime - g_intPendTime;
if (g_saveIndex == MAX_RECORD_SIZE) {
g_saveIndex = 0;
}
dprintf("curTime = %lld, pendTime = %lld \n", curTime, g_intPendTime);
dprintf("%lld\n", curTime - g_intPendTime);
dprintf("[swtmr] hwi response time : ##%lld \n", g_recordTime[g_saveIndex]);
g_saveIndex++;
}
static VOID DumpResult()
{
UINT32 i, count;
UINT64 avg, sum;
sum = 0;
count = 0;
for (i = 0; i < MAX_RECORD_SIZE; i++) {
if (g_recordTime[i] != 0) {
dprintf("%lld ");
sum += g_recordTime[i];
count++;
}
}
avg = sum / count;
dprintf("***hwi perf test dump***: \n");
dprintf("avg = %lld \n");
}
static VOID SwtmrF01(VOID)
{
g_intPendTime = LOS_CurrNanosec();
HalIrqPending(HIGHT_PRIO_INTR);
}
static UINT32 Testcase(VOID)
{
UINT32 ret, swtmrId;
LOS_HwiCreate(HIGHT_PRIO_INTR, SPI_HIGHT_PRIO, 0, (HWI_PROC_FUNC)NestingPrioHigh, &g_nestingPara);
HalIrqUnmask(HIGHT_PRIO_INTR);
// 10, Timing duration of the software timer to be created.
ret = LOS_SwtmrCreate(10, LOS_SWTMR_MODE_PERIOD, SwtmrF01, &swtmrId,
0xffff);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
LOS_SwtmrStart(swtmrId);
/* EXIT time control */
LOS_TaskDelay(100); // 100, set delay time.
LOS_SwtmrStop(swtmrId);
DumpResult();
EXIT:
LOS_SwtmrDelete(swtmrId);
LOS_HwiDelete(HIGHT_PRIO_INTR, &g_nestingPara);
HalIrqMask(HIGHT_PRIO_INTR);
return LOS_OK;
}
VOID ItLosHwiNest007(VOID)
{
TEST_ADD_CASE("ItLosHwiNest007", Testcase, TEST_LOS, TEST_HWI, TEST_LEVEL1, TEST_FUNCTION);
}
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,197 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_los_swtmr.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
EVENT_CB_S g_eventCB1, g_eventCB2, g_eventCB3;
VOID ItSuiteLosSwtmr(VOID)
{
int ret = LOS_SetProcessScheduler(LOS_GetCurrProcessID(), LOS_SCHED_RR, TASK_PRIO_TEST_SWTMR);
if (ret != LOS_OK) {
dprintf("%s set test process schedule failed! %d\n", ret);
}
ret = LOS_SetTaskScheduler(LOS_CurTaskIDGet(), LOS_SCHED_RR, TASK_PRIO_TEST_SWTMR);
if (ret != LOS_OK) {
dprintf("%s set test task schedule failed! %d\n", ret);
}
#if defined(LOSCFG_TEST_SMOKE)
ItLosSwtmr053();
ItLosSwtmr058();
#endif
#if (LOSCFG_KERNEL_SMP == YES)
ItSmpLosSwtmr001(); /* Concurrent Multi-core */
ItSmpLosSwtmr002(); /* Stop Across Cores */
ItSmpLosSwtmr003();
ItSmpLosSwtmr004();
ItSmpLosSwtmr005();
ItSmpLosSwtmr006();
ItSmpLosSwtmr007();
ItSmpLosSwtmr008();
ItSmpLosSwtmr009();
ItSmpLosSwtmr010();
ItSmpLosSwtmr011();
ItSmpLosSwtmr012();
ItSmpLosSwtmr013();
ItSmpLosSwtmr014();
ItSmpLosSwtmr015();
ItSmpLosSwtmr016();
ItSmpLosSwtmr017();
ItSmpLosSwtmr018();
ItSmpLosSwtmr019();
ItSmpLosSwtmr020();
ItSmpLosSwtmr021();
ItSmpLosSwtmr022();
ItSmpLosSwtmr023();
ItSmpLosSwtmr024();
ItSmpLosSwtmr025();
ItSmpLosSwtmr026();
ItSmpLosSwtmr027();
ItSmpLosSwtmr028();
ItSmpLosSwtmr029();
ItSmpLosSwtmr030();
ItSmpLosSwtmr031();
ItSmpLosSwtmr032();
ItSmpLosSwtmr033();
ItSmpLosSwtmr034();
ItSmpLosSwtmr035();
#endif
#if defined(LOSCFG_TEST_FULL)
ItLosSwtmr001();
ItLosSwtmr002();
ItLosSwtmr003();
ItLosSwtmr005();
ItLosSwtmr006();
ItLosSwtmr007();
ItLosSwtmr008();
ItLosSwtmr009();
ItLosSwtmr010();
ItLosSwtmr011();
ItLosSwtmr012();
ItLosSwtmr013();
ItLosSwtmr014();
ItLosSwtmr015();
ItLosSwtmr016();
ItLosSwtmr017();
ItLosSwtmr018();
ItLosSwtmr019();
ItLosSwtmr020();
ItLosSwtmr021();
ItLosSwtmr022();
ItLosSwtmr030();
ItLosSwtmr033();
ItLosSwtmr036();
ItLosSwtmr037();
ItLosSwtmr039();
ItLosSwtmr040();
ItLosSwtmr041();
ItLosSwtmr042();
ItLosSwtmr043();
ItLosSwtmr044();
ItLosSwtmr045();
ItLosSwtmr046();
ItLosSwtmr047();
ItLosSwtmr048();
ItLosSwtmr049();
ItLosSwtmr050();
ItLosSwtmr051();
ItLosSwtmr052();
ItLosSwtmr054();
ItLosSwtmr055();
ItLosSwtmr056();
ItLosSwtmr057();
ItLosSwtmr059();
ItLosSwtmr060();
ItLosSwtmr061();
ItLosSwtmr062();
ItLosSwtmr063();
ItLosSwtmr064();
ItLosSwtmr065();
ItLosSwtmr066();
ItLosSwtmr067();
ItLosSwtmr068();
ItLosSwtmr069();
ItLosSwtmr070();
ItLosSwtmr071();
ItLosSwtmr075();
ItLosSwtmr076();
ItLosSwtmr077();
ItLosSwtmr078();
#endif
#if defined(LOSCFG_TEST_PRESSURE)
ItLosSwtmr004();
ItLosSwtmr024();
ItLosSwtmr025();
ItLosSwtmr026();
ItLosSwtmr027();
ItLosSwtmr028();
ItLosSwtmr029();
ItLosSwtmr031();
ItLosSwtmr032();
ItLosSwtmr034();
ItLosSwtmr035();
ItLosSwtmr038();
#endif
#if defined(LOSCFG_TEST_LLT)
ItLosSwtmr073();
#if !defined(TESTPBXA9) && !defined(TESTVIRTA53) && !defined(TEST3516DV300) && !defined(TESTHI1980IMU)
ItLosSwtmr072(); // SwtmrTimeGet
ItLosSwtmr074(); // across cores
ItLosSwtmr079(); // sched_clock_swtmr
#endif
ItLosSwtmr080();
ItLosSwtmr023();
#endif
ret = LOS_SetProcessScheduler(LOS_GetCurrProcessID(), LOS_SCHED_RR, 20); // 20, set a reasonable priority.
if (ret != LOS_OK) {
dprintf("%s set test process schedule failed! %d\n", ret);
}
ret = LOS_SetTaskScheduler(LOS_CurTaskIDGet(), LOS_SCHED_RR, TASK_PRIO_TEST);
if (ret != LOS_OK) {
dprintf("%s set test task schedule failed! %d\n", ret);
}
}
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

View File

@ -0,0 +1,213 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef IT_LOS_SWTMR_H
#define IT_LOS_SWTMR_H
#include "los_swtmr.h"
#include "osTest.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#define LOOP 100
#define SELF_DELETED 0
#define SYS_EXIST_SWTMR 1
#define SWTMR_LOOP_NUM 10
#define TEST_HWI_RUNTIME 0x100000
extern EVENT_CB_S g_eventCB1;
extern EVENT_CB_S g_eventCB2;
extern EVENT_CB_S g_eventCB3;
extern LITE_OS_SEC_BSS SWTMR_CTRL_S *m_pstSwtmrFreeList;
static UINT32 g_swTmrMaxNum;
static UINT16 g_swTmrID1;
static UINT16 g_swTmrID2;
static UINT16 g_swTmrID3;
static UINT32 g_swtmrCountA;
static UINT32 g_swtmrCountB;
static UINT32 g_swtmrCountC;
static UINT64 g_cpuTickCountA;
static UINT64 g_cpuTickCountB;
extern UINT32 OsSwTmrGetNextTimeout(VOID);
extern UINT32 OsSwtmrTimeGet(SWTMR_CTRL_S *swtmr);
extern VOID LOS_GetCpuTick(UINT32 *puwCntHi, UINT32 *puwCntLo);
extern VOID ItSuiteLosSwtmr(VOID);
#if defined(LOSCFG_KERNEL_SMP)
VOID ItSmpLosSwtmr001(VOID);
VOID ItSmpLosSwtmr002(VOID);
VOID ItSmpLosSwtmr003(VOID);
VOID ItSmpLosSwtmr004(VOID);
VOID ItSmpLosSwtmr005(VOID);
VOID ItSmpLosSwtmr006(VOID);
VOID ItSmpLosSwtmr007(VOID);
VOID ItSmpLosSwtmr008(VOID);
VOID ItSmpLosSwtmr009(VOID);
VOID ItSmpLosSwtmr010(VOID);
VOID ItSmpLosSwtmr011(VOID);
VOID ItSmpLosSwtmr012(VOID);
VOID ItSmpLosSwtmr013(VOID);
VOID ItSmpLosSwtmr014(VOID);
VOID ItSmpLosSwtmr015(VOID);
VOID ItSmpLosSwtmr016(VOID);
VOID ItSmpLosSwtmr017(VOID);
VOID ItSmpLosSwtmr018(VOID);
VOID ItSmpLosSwtmr019(VOID);
VOID ItSmpLosSwtmr020(VOID);
VOID ItSmpLosSwtmr021(VOID);
VOID ItSmpLosSwtmr022(VOID);
VOID ItSmpLosSwtmr023(VOID);
VOID ItSmpLosSwtmr024(VOID);
VOID ItSmpLosSwtmr025(VOID);
VOID ItSmpLosSwtmr026(VOID);
VOID ItSmpLosSwtmr027(VOID);
VOID ItSmpLosSwtmr028(VOID);
VOID ItSmpLosSwtmr029(VOID);
VOID ItSmpLosSwtmr030(VOID);
VOID ItSmpLosSwtmr031(VOID);
VOID ItSmpLosSwtmr032(VOID);
VOID ItSmpLosSwtmr033(VOID);
VOID ItSmpLosSwtmr034(VOID);
VOID ItSmpLosSwtmr035(VOID);
#endif
#if defined(LOSCFG_TEST_SMOKE)
VOID ItLosSwtmr053(VOID);
VOID ItLosSwtmr058(VOID);
#endif
#if defined(LOSCFG_TEST_FULL)
VOID ItLosSwtmr001(VOID);
VOID ItLosSwtmr002(VOID);
VOID ItLosSwtmr003(VOID);
VOID ItLosSwtmr005(VOID);
VOID ItLosSwtmr006(VOID);
VOID ItLosSwtmr007(VOID);
VOID ItLosSwtmr008(VOID);
VOID ItLosSwtmr009(VOID);
VOID ItLosSwtmr010(VOID);
VOID ItLosSwtmr011(VOID);
VOID ItLosSwtmr012(VOID);
VOID ItLosSwtmr013(VOID);
VOID ItLosSwtmr014(VOID);
VOID ItLosSwtmr015(VOID);
VOID ItLosSwtmr016(VOID);
VOID ItLosSwtmr017(VOID);
VOID ItLosSwtmr018(VOID);
VOID ItLosSwtmr019(VOID);
VOID ItLosSwtmr020(VOID);
VOID ItLosSwtmr021(VOID);
VOID ItLosSwtmr022(VOID);
VOID ItLosSwtmr030(VOID);
VOID ItLosSwtmr033(VOID);
VOID ItLosSwtmr036(VOID);
VOID ItLosSwtmr037(VOID);
VOID ItLosSwtmr038(VOID);
VOID ItLosSwtmr039(VOID);
VOID ItLosSwtmr040(VOID);
VOID ItLosSwtmr041(VOID);
VOID ItLosSwtmr042(VOID);
VOID ItLosSwtmr043(VOID);
VOID ItLosSwtmr044(VOID);
VOID ItLosSwtmr045(VOID);
VOID ItLosSwtmr046(VOID);
VOID ItLosSwtmr047(VOID);
VOID ItLosSwtmr048(VOID);
VOID ItLosSwtmr049(VOID);
VOID ItLosSwtmr050(VOID);
VOID ItLosSwtmr051(VOID);
VOID ItLosSwtmr052(VOID);
VOID ItLosSwtmr054(VOID);
VOID ItLosSwtmr055(VOID);
VOID ItLosSwtmr056(VOID);
VOID ItLosSwtmr057(VOID);
VOID ItLosSwtmr059(VOID);
VOID ItLosSwtmr060(VOID);
VOID ItLosSwtmr061(VOID);
VOID ItLosSwtmr062(VOID);
VOID ItLosSwtmr063(VOID);
VOID ItLosSwtmr064(VOID);
VOID ItLosSwtmr065(VOID);
VOID ItLosSwtmr066(VOID);
VOID ItLosSwtmr067(VOID);
VOID ItLosSwtmr068(VOID);
VOID ItLosSwtmr069(VOID);
VOID ItLosSwtmr070(VOID);
VOID ItLosSwtmr071(VOID);
VOID ItLosSwtmr075(VOID);
VOID ItLosSwtmr076(VOID);
VOID ItLosSwtmr077(VOID);
VOID ItLosSwtmr078(VOID);
#endif
#if defined(LOSCFG_TEST_PRESSURE)
VOID ItLosSwtmr004(VOID);
VOID ItLosSwtmr024(VOID);
VOID ItLosSwtmr025(VOID);
VOID ItLosSwtmr026(VOID);
VOID ItLosSwtmr027(VOID);
VOID ItLosSwtmr028(VOID);
VOID ItLosSwtmr029(VOID);
VOID ItLosSwtmr031(VOID);
VOID ItLosSwtmr032(VOID);
VOID ItLosSwtmr034(VOID);
VOID ItLosSwtmr035(VOID);
VOID ItLosSwtmr081(VOID);
VOID ItLosSwtmr082(VOID);
VOID ItLosSwtmr083(VOID);
#endif
#if defined(LOSCFG_TEST_LLT)
VOID ItLosSwtmr072(VOID);
VOID ItLosSwtmr073(VOID);
VOID ItLosSwtmr074(VOID);
VOID ItLosSwtmr079(VOID);
VOID ItLosSwtmr080(VOID);
VOID ItLosSwtmr023(VOID);
#endif
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */
#endif /* IT_LOS_SWTMR_H */

View File

@ -0,0 +1,95 @@
/*
* Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "It_los_swtmr.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif /* __cpluscplus */
#endif /* __cpluscplus */
static VOID SwtmrF01(UINT32 arg)
{
if (arg != 0xffff) {
return;
}
g_testCount++;
return;
}
static UINT32 Testcase(VOID)
{
UINT32 ret;
UINT16 swTmrID;
g_testCount = 0;
// 4, Timeout interval of a periodic software timer.
ret = LOS_SwtmrCreate(4, LOS_SWTMR_MODE_ONCE, SwtmrF01, &swTmrID, 0xffff);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ret = LOS_SwtmrStart(swTmrID);
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ret = LOS_TaskDelay(10); // 10, set delay time
ICUNIT_GOTO_EQUAL(ret, LOS_OK, ret, EXIT);
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
ret = LOS_TaskDelay(5); // 5, set delay time
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
ICUNIT_ASSERT_EQUAL(g_testCount, 1, g_testCount);
#if SELF_DELETED
ret = LOS_SwtmrDelete(swTmrID);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
#endif
return LOS_OK;
EXIT:
ret = LOS_SwtmrDelete(swTmrID);
ICUNIT_ASSERT_EQUAL(ret, LOS_OK, ret);
return LOS_OK;
}
VOID ItLosSwtmr001(VOID) // IT_Layer_ModuleORFeature_No
{
TEST_ADD_CASE("ItLosSwtmr001", Testcase, TEST_LOS, TEST_SWTMR, TEST_LEVEL2, TEST_FUNCTION);
}
#ifdef __cplusplus
#if __cplusplus
}
#endif /* __cpluscplus */
#endif /* __cpluscplus */

Some files were not shown because too many files have changed in this diff Show More