⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testall.c

📁 freescale ppc sec2加解密单元驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * These functions handle memory buffer differences for each environment * * putKmem() allocates kernel memory for data to be placed into, and if the * data pointer is not NULL, will copy the data block. * * getKmem() copies post-operation data back to the user's buffer * * freeKmem() frees a kernel memory block after use */#ifdef _LINUX_USERMODE_int putKmem(int fd, void *data, void **block, unsigned int size){    MALLOC_REQ  kmem;    int iostat;        kmem.pid = getpid();    kmem.sz  = size;    iostat = ioctl(fd, IOCTL_MALLOC, &kmem);    if (iostat == SEC2_MALLOC_FAILED)        return iostat;            *block = kmem.ptr;        if (data != NULL)     {        kmem.from = data;        kmem.to = kmem.ptr;        iostat = ioctl(fd, IOCTL_COPYFROM, &kmem);    }        return 0;}int getKmem(int fd, void *data, void **block, unsigned int size){    MALLOC_REQ kmem;    int iostat;        kmem.pid  = getpid();    kmem.sz   = size;    kmem.to   = data;    kmem.from = *block;    iostat = ioctl(fd, IOCTL_COPYTO, &kmem);        return 0;}int freeKmem(int fd, void **block){    int iostat;    iostat = ioctl(fd, IOCTL_FREE, *block);        return 0;}#endif#ifdef __KERNEL__  /* then this is a Linux kernel-mode test module */int putKmem(int fd, void *data, void **block, unsigned int size){    *block = (void *)kmalloc(size, GFP_KERNEL | __GFP_DMA);    if (*block == NULL)        return -1;    if (data != NULL)        memcpy(*block, data, size);        return 0;}int getKmem(int fd, void *data, void **block, unsigned int size){    memcpy(data, *block, size);    return 0;}int freeKmem(int fd, void **block){    kfree(*block);    return 0;}#endif#ifdef VXWORKS     /* is flat-memory VxWorks, don't have to do anything */int putKmem(int fd, void *data, void **block, unsigned int size){    return 0;}int getKmem(int fd, void *data, void **block, unsigned int size){    return 0;}int freeKmem(int fd, void *block){    return 0;}#endif#if 0/* Top level of test */int testAll(void){    int status=0, nFails=0, nTests=0;    int fd;    #ifdef __KERNEL__    init_MUTEX_LOCKED(&notifySemId);#else    fd = open(SEC2_DEVNAME, O_RDWR, 0);    if (fd == -1)    {        printf("testAesa(): can't open %s, error = %d: ", SEC2_DEVNAME, errno);        return -1;    }#endif#ifdef TESTALL_HASH    if ((status = hash_test(fd)) == 0)         nTests++;    else        printf("hash_test(%d) Failed! %04x\n", ++nFails, status);#endif#ifdef TESTALL_IPSEC    if ((status = testIPSEC(fd)) == 0) /* IPSEC with DES */        nTests++;    else        printf("testIPSEC(%d) Failed! %04x\n", ++nFails, status);#endif#ifdef TESTALL_RC4    if ((status = testAfha(fd)) == 0) /* arc4 (0x1.) */        nTests++;    else        printf("testAfha(%d) Failed! %04x\n", ++nFails, status);#if 0    if ((status = testAFHActx(fd)) == 0)        nTests++;    else        printf("testAFHActx(%d) Failed! %04x\n", ++nFails, status);    if ((status = testAfhaLong(fd)) == 0)        nTests++;    else        printf("testAfhaLong(%d) Failed! %04x\n", ++nFails, status);#endif#endif#ifdef TESTALL_DES    if ((status = testDes(fd, 512, 4)) == 0)  /* DES (0x2.) */        nTests++;    else        printf("testDes(%d) Failed! %04x\n", ++nFails, status);    if ((status = testDesECB(fd, 512, 4)) == 0)   /* DES ECB */        nTests++;    else        printf("testDesECB(%d) Failed! %04x\n", ++nFails, status);#endif#ifdef TESTALL_HMAC    if ((status = testHmac(fd)))  /* Hmac (0x3.) */        printf("testHmac(%d) Failed! %04x\n", ++nFails, status);    else         nTests++;#endif#ifdef TESTALL_RNG    if ((status = testRng(fd)) == 0)  /* RNG (0x4.) */        nTests++;    else        printf("testRng(%d) Failed! %04x\n", ++nFails, status);#endif#ifdef TESTALL_AES    if ((status = testAesa(fd)) == 0) /* AESA_SEL (0x6.) */        nTests++;    else        printf("testAesa(%d) Failed! %04x\n", ++nFails, status);#endif#ifdef TESTALL_PKHA  if ((status = testPKHA(fd)) == 0)    nTests++;  else    printf("testPKHA(%d) failed, status = %04x\n", ++nFails, status);#endif#ifdef TESTALL_CCMP  if ((status = testccmp(fd)) == 0)    nTests++;  else    printf("testccmp(%d) failed, status = %04x\n", ++nFails, status);#endif#ifdef TESTALL_SCATTER  if ((status = testSG(fd)) == 0)    nTests++;  else    printf("testSG(%d) failed, status = %04x\n", ++nFails, status);#endif#ifdef TESTALL_FIFO_OVERFLOW  if ((status = testFF()) == 0)    nTests++;  else    printf("testFF(%d) failed, status = %04x\n", ++nFails, status);#endif  /* All tests complete, show status and exit */  if (nFails == 0)    printf("testAll(): All %d Tests Passed\n", nTests);  else    printf("Tests Passed %d, Failed %d!\n", nTests, nFails);#ifdef __KERNEL__    semDelete(notifySemId);#else    close(fd);#endif    if (nFails)        return -1;          return 0;}#ifdef _LINUX_USERMODE_int main(int argc, char **argv){    return testAll();}#endif#ifdef __KERNEL__static inline int __sem_update_count(struct semaphore *sem, int incr){        int old_count, tmp;        __asm__ __volatile__("\n""1:     lwarx   %0,0,%3\n""       srawi   %1,%0,31\n""       andc    %1,%0,%1\n""       add     %1,%1,%4\n"        PPC405_ERR77(0,%3)"       stwcx.  %1,0,%3\n""       bne     1b"        : "=&r" (old_count), "=&r" (tmp), "=m" (sem->count)        : "r" (&sem->count), "r" (incr), "m" (sem->count)        : "cc");        return old_count;}long __down_interruptible_timeout(struct semaphore * sem, long timeout){        int retval = 0;        struct task_struct *tsk = current;        DECLARE_WAITQUEUE(wait, tsk);        tsk->state = TASK_INTERRUPTIBLE;        add_wait_queue_exclusive(&sem->wait, &wait);        smp_wmb();        while (__sem_update_count(sem, -1) <= 0) {                if (signal_pending(current)) {                        /*                         * A signal is pending - give up trying.                         * Set sem->count to 0 if it is negative,                         * since we are no longer sleeping.                         */                        __sem_update_count(sem, 0);                        retval = -EINTR;                        break;                }                timeout = schedule_timeout(timeout);                tsk->state = TASK_INTERRUPTIBLE;        }        tsk->state = TASK_RUNNING;        remove_wait_queue(&sem->wait, &wait);        wake_up(&sem->wait);        return timeout>=0? 0: -1;}int func = 0;MODULE_PARM (func, "i");int init_module(void){    switch (func)    {        case 0:            testAll();            break;        default:            printk("sec2drvTest [func=n] {testMain=0}\n", func);    }    return 0;}void cleanup_module(void){    return;}MODULE_LICENSE("Freescale Restricted");MODULE_DESCRIPTION("SEC2.x driver test module");MODULE_AUTHOR("Freescale Semiconductor Inc.");#endif#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -