summaryrefslogtreecommitdiff
path: root/bmm_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'bmm_test.c')
-rw-r--r--bmm_test.c324
1 files changed, 0 insertions, 324 deletions
diff --git a/bmm_test.c b/bmm_test.c
deleted file mode 100644
index ceadf9c..0000000
--- a/bmm_test.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * bmm_test.c
- *
- * Buffer Management Module
- *
- * User test application
- *
- * Li Li (lea.li@marvell.com)
-
- *(C) Copyright 2007 Marvell International Ltd.
- * All Rights Reserved
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <signal.h>
-#include <unistd.h>
-#include <sys/wait.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include "bmm_lib.h"
-
-static int debug = 0;
-
-int test_count = 0;
-int pass_count = 0;
-int fail_count = 0;
-
-#define PRINT_TEST_NAME printf("Testing %d: %s()\n", test_count++, __FUNCTION__)
-#define PRINT_TEST_RESULT(x) \
- do { \
- if(!x) \
- pass_count++, printf("\tPassed.\n"); \
- else \
- fail_count++, printf("\tFailed.\n"); \
- } while(0)
-#define PRINT_TEST_RESULTS() printf("Passed/Failed = %d/%d\n", pass_count, fail_count)
-
-static int test_bmm_init(void)
-{
- int ret;
-
- PRINT_TEST_NAME;
-
- ret = bmm_init();
- printf("\tbmm_init() return %d\n", ret);
-
- return (ret <= 0);
-}
-
-static int test_bmm_get_space(void)
-{
- unsigned long total_size;
- unsigned long free_size;
-
- PRINT_TEST_NAME;
-
- total_size = bmm_get_total_space();
- free_size = bmm_get_free_space();
-
- printf("\tbmm_get_total_space() return %ldKB\n", total_size/1024);
- printf("\tbmm_get_free_space() return %ldKB\n", free_size/1024);
-
- return (total_size <= 0 || total_size != free_size);
-}
-
-static int test_bmm_malloc(unsigned long size, int attr)
-{
- void *vaddr;
- unsigned long allocated_size1, free_size1;
- unsigned long allocated_size2, free_size2;
- unsigned long allocated_size3, free_size3;
- int off = 0;
- PRINT_TEST_NAME;
-
- allocated_size1 = bmm_get_allocated_space();
- free_size1 = bmm_get_free_space();
- vaddr = bmm_malloc(size, attr);
- if(vaddr == NULL) {
- printf("\tno enough memory\n");
- return -1;
- }
- for(off = 0; off < size; off += 1024*1024){
- unsigned long get_paddr = bmm_get_paddr(vaddr+off);
- void *get_vaddr = bmm_get_vaddr(get_paddr);
- int get_attr = bmm_get_mem_attr(get_vaddr);
- printf("\toff = 0x%x, vaddr=0x%p, get_vaddr=0x%p, get_paddr=0x%08lx\n", off, vaddr+off, get_vaddr, get_paddr);
- printf("\tset_attr=0x%x, get_attr=0x%x\n", attr, get_attr);
- if(vaddr+off != get_vaddr)
- return -1;
- }
-
- allocated_size2 = bmm_get_allocated_space();
- free_size2 = bmm_get_free_space();
- bmm_free(vaddr);
- allocated_size3 = bmm_get_allocated_space();
- free_size3 = bmm_get_free_space();
-
- printf("\tbmm_malloc(%ldKB) return 0x%08lx\n", size/1024, (unsigned long)vaddr);
- printf("\tbmm_get_allocated_space() return %ldKB %ldKB %ldKB\n",
- allocated_size1/1024, allocated_size2/1024, allocated_size3/1024);
- printf("\tbmm_get_free_space() return %ldKB %ldKB %ldKB\n",
- free_size1/1024, free_size2/1024, free_size3/1024);
-
- return (
- allocated_size2 - allocated_size1 != size ||
- allocated_size1 != allocated_size3 ||
- free_size1 - free_size2 != size ||
- free_size1 != free_size3);
-}
-
-static long gettickcount(void)
-{
- struct timeval g_tv;
- struct timezone g_tz;
-
- gettimeofday(&g_tv, &g_tz);
-
- return g_tv.tv_sec * 1000000 + g_tv.tv_usec;
-}
-
-static int test_bmm_flush_user(unsigned long size)
-{
- char *src;
- long t1 = 0, t2 = 0;
-
- PRINT_TEST_NAME;
-
- src = malloc(size);
- if (src == NULL) {
- printf("\tno enough memory\n");
- return -1;
- }
- t1 = gettickcount();
- bmm_flush_user(src, size, BMM_DMA_TO_DEVICE);
- t2 = gettickcount();
- printf("bmm_flush_user 0x%lx memory cost %ldusec\n", size, t2-t1);
- free(src);
-
- src = bmm_malloc(size, BMM_ATTR_DEFAULT);
- if (src == NULL) {
- printf("\tno enough memory\n");
- return -1;
- }
- t1 = gettickcount();
- bmm_flush_cache_range(src, size, BMM_DMA_TO_DEVICE);
- t2 = gettickcount();
- printf("bmm_flush_cache_range 0x%lx memory cost %ldusec\n", size, t2-t1);
- bmm_free(src);
-
- return 0;
-}
-
-static int test_bmm_share(unsigned long size)
-{
- char *src;
- char *dst;
- unsigned long psrc;
- unsigned long pdst;
- unsigned long i;
- unsigned long off, len;
- unsigned long free_size1;
- unsigned long free_size2;
- unsigned long free_size3;
- int ret = 0;
- int pid = 0;
- int pid1 = 0;
- int pid2 = 0;
- int ret1 = 0;
- int ret2 = 0;
-
- PRINT_TEST_NAME;
-
- free_size1 = bmm_get_free_space();
- src = bmm_malloc(size, BMM_ATTR_DEFAULT);
- memset(src, 0, size);
- free_size2 = bmm_get_free_space();
- if(src == NULL) {
- printf("\tno enough memory\n");
- return -1;
- }
- psrc = bmm_get_paddr(src);
- printf("\tFork 3 sub processes...\n");
- pid1 = fork();
- if(pid1 != 0) {
- pid2 = fork();
- if(pid2 != 0) {
- off = 0;
- len = size;
- dst = bmm_attach(psrc + off, len);
- for(i=0; i<size; i++)
- src[i] = i;
- bmm_flush_cache(src, BMM_DMA_TO_DEVICE);
- sleep(1);
- kill(0, SIGCONT);
- waitpid(pid2, &ret2, 0);
- waitpid(pid1, &ret1, 0);
- ret2 = WEXITSTATUS(ret2) ? -1 : 0;
- ret1 = WEXITSTATUS(ret1) ? -1 : 0;
- pid = 0;
- } else {
- raise(SIGSTOP);
- off = 4096;
- len = 4096;
- dst = bmm_attach(psrc + off, len);
- pid = 1;
- }
- } else {
- pid2 = fork();
- if(pid2 != 0) {
- raise(SIGSTOP);
- off = size / 4;
- len = size / 2;
- dst = bmm_attach(psrc + off, len);
- waitpid(pid2, &ret2, 0);
- ret2 = WEXITSTATUS(ret2) ? -1 : 0;
- pid = 2;
- } else {
- raise(SIGSTOP);
- off = size - 4096;
- len = 4096;
- dst = bmm_attach(psrc + off, len);
- pid = 3;
- }
- }
-
- pdst = bmm_get_paddr(dst);
- if(pdst == psrc + off)
- printf("\t[%d] pdst(0x%08lx) == psrc(0x%08lx) + off(%lx)\n", pid, pdst, psrc, off);
- else
- printf("\t[%d] Error: pdst(0x%08lx) != psrc(0x%08lx) + off(%lx)\n", pid, pdst, psrc, off);
-
- bmm_flush_cache(dst, BMM_DMA_FROM_DEVICE);
- for(i=0; i<len; i++) {
- if(dst[i] != (char)(off+i)) {
- ret--;
- if(debug)
- printf("\t[%d] [%ld+%ld]: %d != %d\n", pid, off, i, dst[i], (char)(off+i));
- else
- break;
- }
- }
-
- bmm_detach(dst, len);
-
- printf("\t[%d] bmm_share(%ldKB/%ld-%ld) = %d\n", pid, size/1024, off, len, ret);
-
- if(pid1 == 0 || pid2 == 0)
- exit(ret);
-
- bmm_free(src);
- free_size3 = bmm_get_free_space();
-
- printf("\t[%d] bmm_get_free_space() return %ldKB %ldKB %ldKB\n",
- pid, free_size1/1024, free_size2/1024, free_size3/1024);
-
- if(ret || ret1 || ret2)
- return ret + ret1 + ret2;
-
- printf("\tShare content OK. Checking free space...\n");
-
- return (free_size1 - free_size2 != size || free_size1 != free_size3);
-}
-
-int main(int argc, char * argv[])
-{
- int ret;
- unsigned long i, n;
- pid_t pid = getpid();
-
- if(argc > 1) {
- debug = 1;
- if(!strcmp(argv[1], "dump")) {
- ret = test_bmm_get_space();
- PRINT_TEST_RESULT(ret);
- bmm_dump();
- return 0;
- }
- }
-
- printf("%s running with pid=%d/%x\n", argv[0], pid, pid);
-
- if(debug)
- bmm_dump();
-
- ret = test_bmm_init();
- PRINT_TEST_RESULT(ret);
-
- ret = test_bmm_get_space();
- PRINT_TEST_RESULT(ret);
-
- n = 8;
- for(i=1; i<=n; i++) {
- ret = test_bmm_malloc(i*1024*1024, BMM_ATTR_DEFAULT);
- PRINT_TEST_RESULT(ret);
- }
- for(i=n; i>=1; i--) {
- ret = test_bmm_malloc(i*1024*1024, BMM_ATTR_NONCACHED);
- PRINT_TEST_RESULT(ret);
- }
-
- n = 8;
- for(i=1; i<=n; i++) {
- ret = test_bmm_share(i*1024*1024);
- PRINT_TEST_RESULT(ret);
- }
-
- n = 1;
- ret = test_bmm_flush_user(n*1024*1024);
- PRINT_TEST_RESULT(ret);
- PRINT_TEST_RESULTS();
-
- if(debug)
- bmm_dump();
-
- bmm_exit();
-
- if(debug)
- bmm_dump();
-
- return 0;
-}
-