00001 00038 #include <buffer.h> 00039 #include <mempool.h> 00040 #include <physmem.h> 00041 00042 static struct mem_pool buffer_pool; 00043 00049 struct buffer *buffer_alloc(void) 00050 { 00051 struct buffer *buf; 00052 00053 buf = mem_pool_alloc(&buffer_pool); 00054 buf->dma_desc = NULL; 00055 00056 return buf; 00057 } 00058 00062 void buffer_free(struct buffer *buf) 00063 { 00064 mem_pool_free(&buffer_pool, buf); 00065 } 00066 00071 void buffer_resize(struct buffer *buf, size_t new_size) 00072 { 00073 assert(buf); 00074 00075 buf->len = new_size; 00076 } 00077 00078 #ifdef CONFIG_DMAPOOL_GENERIC_POOLS 00079 00080 #include <dmapool.h> 00081 00092 struct buffer *buffer_dma_alloc(size_t size) 00093 { 00094 struct buffer *buf; 00095 dma_addr_t addr; 00096 00097 buf = buffer_alloc(); 00098 if (buf == NULL) 00099 return NULL; 00100 00101 addr = dma_alloc(size); 00102 if (dma_addr_is_failed(addr)) { 00103 buffer_free(buf); 00104 return NULL; 00105 } 00106 00107 buf->addr = addr; 00108 buf->len = size; 00109 00110 return buf; 00111 } 00112 00116 void buffer_dma_free(struct buffer *buf, size_t size) 00117 { 00118 dma_free(buf->addr, size); 00119 buffer_free(buf); 00120 } 00121 #endif /* CONFIG_DMAPOOL_GENERIC_POOLS */ 00122 00129 void buffer_pool_init(void) 00130 { 00131 mem_pool_init_physmem(&buffer_pool, &cpu_sram_pool, 00132 CONFIG_NR_BUFFERS, sizeof(struct buffer), 2); 00133 }
1.6.3