1
0

testbench_memalloc.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #include <sys/types.h>
  2. #include <sys/mman.h>
  3. #include <sys/ioctl.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <getopt.h>
  10. #include <assert.h>
  11. #include "basetype.h"
  12. #include "memalloc.h"
  13. int main(void){
  14. i32 memdev_fd = -1;
  15. i32 memdev_fd_2 = -1;
  16. i32 memdev_map = -1;
  17. i32 i = 0, u=0;
  18. u32 * virtual1 = MAP_FAILED;
  19. u32 * virtual2 = MAP_FAILED;
  20. u32 pgsize = getpagesize();
  21. const char *memdev = "/tmp/dev/memalloc";
  22. const char *memmap ="/dev/mem";
  23. u32 bus_address1 = 0, bus_address2 = 0;
  24. u32 size = 4096;
  25. memdev_fd = open(memdev, O_RDWR);
  26. if(memdev_fd == -1)
  27. {
  28. printf("Failed to open dev: %s\n", memdev);
  29. goto end1;
  30. }
  31. memdev_fd_2 = open(memdev, O_RDWR);
  32. if(memdev_fd_2 == -1)
  33. {
  34. printf("Failed to open dev: %s\n", memdev);
  35. goto end1;
  36. }
  37. memdev_map = open(memmap, O_RDWR);
  38. if(memdev_map == -1)
  39. {
  40. printf("Failed to open dev: %s\n", memmap);
  41. goto end1;
  42. }
  43. size = (size + pgsize) & (~(pgsize - 1));
  44. printf("Hard reset\n", size);
  45. /*ioctl(memdev_fd, MEMALLOC_IOCHARDRESET, 0);*/
  46. for(i=0; i<100; i++){
  47. ioctl(memdev_fd, MEMALLOC_IOCXGETBUFFER, &bus_address1);
  48. printf("bus_address1 0x%08x\n", bus_address1);
  49. ioctl(memdev_fd_2, MEMALLOC_IOCXGETBUFFER, &bus_address2);
  50. printf("bus_address2 0x%08x\n", bus_address2);
  51. /* test write stuff in the mem are*/
  52. if(bus_address1){
  53. virtual1 =
  54. (u32 *) mmap(0, size, PROT_READ | PROT_WRITE,
  55. MAP_SHARED, memdev_map, bus_address1);
  56. printf("Virtual1 %08x\n", virtual1);
  57. }
  58. if(virtual1 != MAP_FAILED){
  59. for(u=0; u<size/4; u++){
  60. *virtual1 = i+1;
  61. }
  62. }else{
  63. printf("map failed\n");
  64. }
  65. /* test write stuff in the mem are*/
  66. if(bus_address2){
  67. virtual2 =
  68. (u32 *) mmap(0, size, PROT_READ | PROT_WRITE,
  69. MAP_SHARED, memdev_map, bus_address2);
  70. printf("Virtual2 0x%08x\n", virtual2);
  71. }
  72. if(virtual2 != MAP_FAILED){
  73. for(u=0; u<size/4; u++){
  74. *virtual2 = i+2;
  75. }
  76. }else{
  77. printf("map failed\n");
  78. }
  79. if(virtual1 != MAP_FAILED){
  80. for(u=0; u<size/4; u++){
  81. if(*virtual1 != i+1){
  82. printf("MISMATCH1!\n");
  83. break;
  84. }
  85. }
  86. }
  87. if(virtual2 != MAP_FAILED){
  88. for(u=0; u<size/4; u++){
  89. if(*virtual2 != i+2){
  90. printf("MISMATCH2!\n");
  91. break;
  92. }
  93. }
  94. }
  95. if((i%30)){
  96. printf("release %d ", size);
  97. ioctl(memdev_fd, MEMALLOC_IOCSFREEBUFFER, &bus_address1);
  98. printf("address:\t\t0x%08x\n", bus_address1);
  99. }
  100. printf("release %d ", size);
  101. /*ioctl(memdev_fd_2, MEMALLOC_IOCSFREEBUFFER, &bus_address2);
  102. printf("address:\t\t0x%08x\n", bus_address2);
  103. virtual1 = MAP_FAILED;
  104. virtual2 = MAP_FAILED;*/
  105. if(!(i%30)){
  106. close(memdev_fd);
  107. memdev_fd = open(memdev, O_RDWR);
  108. if(memdev_fd == -1)
  109. {
  110. printf("Failed to open dev: %s\n", memdev);
  111. goto end1;
  112. }
  113. }
  114. close(memdev_fd_2);
  115. memdev_fd_2 = open(memdev, O_RDWR);
  116. if(memdev_fd_2 == -1)
  117. {
  118. printf("Failed to open dev: %s\n", memdev);
  119. goto end1;
  120. }
  121. }
  122. end1:
  123. close(memdev_fd);
  124. close(memdev_fd_2);
  125. close(memdev_map);
  126. return 0;
  127. }