comparison TaskManager/kernel/ppe/DmaBuffer.cc @ 625:60aa3f241b10

64bit mode worked on Mac OS X.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 16 Nov 2009 10:59:55 +0900
parents 42c94f85c779
children aaaa0baeab89
comparison
equal deleted inserted replaced
624:c7b5c99252ad 625:60aa3f241b10
4 #include "DmaBuffer.h" 4 #include "DmaBuffer.h"
5 5
6 #define ALIGN_DOWN(v, align) ((v)&(-align)) 6 #define ALIGN_DOWN(v, align) ((v)&(-align))
7 #define ALIGN_UP(v, align) ALIGN_DOWN((v)+((align)-1), align) 7 #define ALIGN_UP(v, align) ALIGN_DOWN((v)+((align)-1), align)
8 8
9 void*
10 new_align(int alignment, int size)
11 {
12 char *nonalign;
13 char *align;
14
15 nonalign = new char[size + sizeof(void*) + alignment - 1];
16 align = (char*)(ALIGN_UP((memaddr)nonalign+sizeof(void*),alignment));
17 *((void**)align - 1) = (void*)nonalign;
18
19 return align;
20 }
21
22 void
23 free_align(void *ptr)
24 {
25 char *real;
26
27 if (ptr != NULL) {
28 real = (char*)(*((void**)(ptr)-1));
29 delete real;
30 }
31 }
32 9
33 DmaBuffer::DmaBuffer(int size) 10 DmaBuffer::DmaBuffer(int size)
34 { 11 {
12 #ifdef NO_POSIX_MEMALIGN
35 buffer[0] = malloc(size); 13 buffer[0] = malloc(size);
36 buffer[1] = malloc(size); 14 buffer[1] = malloc(size);
37 15 #else
38 //posix_memalign(&buffer[0], DEFAULT_ALIGNMENT, size); 16 posix_memalign(&buffer[0],64,size);
39 //posix_memalign(&buffer[1], DEFAULT_ALIGNMENT, size); 17 posix_memalign(&buffer[1],64,size);
40 18 #endif
41 //buffer[0] = new_align(DEFAULT_ALIGNMENT, size);
42 //buffer[1] = new_align(DEFAULT_ALIGNMENT, size);
43
44 flag = 0; 19 flag = 0;
45 } 20 }
46 21
47 DmaBuffer::~DmaBuffer(void) 22 DmaBuffer::~DmaBuffer(void)
48 { 23 {
49 //free(buffer[0]); 24 free(buffer[0]);
50 //free(buffer[1]); 25 free(buffer[1]);
51 free_align(buffer[0]);
52 free_align(buffer[1]);
53 } 26 }
54 27
55 void 28 void
56 DmaBuffer::swap_buffer(void) 29 DmaBuffer::swap_buffer(void)
57 { 30 {