Mercurial > hg > Members > kono > Cerium
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 { |