1 /*
2  * MemoryPriv.c
3  *
4  *  Created on: Jan 21, 2015
5  *      Author: maord
6  */
7 
8 #include <ipxe/malloc.h>
9 #include <stddef.h>
10 #include <byteswap.h>
11 #include <ipxe/io.h>
12 #include "../../mlx_utils/include/private/mlx_memory_priv.h"
13 
14 
15 mlx_status
mlx_memory_alloc_priv(IN mlx_utils * utils,IN mlx_size size,OUT mlx_void ** ptr)16 mlx_memory_alloc_priv(
17 				IN mlx_utils *utils __attribute__ ((unused)),
18 				IN mlx_size size,
19 				OUT mlx_void **ptr
20 				)
21 {
22 	mlx_status status = MLX_SUCCESS;
23 	*ptr = malloc(size);
24 	if(*ptr == NULL){
25 		status = MLX_OUT_OF_RESOURCES;
26 	}
27 	return status;
28 }
29 
30 mlx_status
mlx_memory_zalloc_priv(IN mlx_utils * utils,IN mlx_size size,OUT mlx_void ** ptr)31 mlx_memory_zalloc_priv(
32 				IN mlx_utils *utils __attribute__ ((unused)),
33 				IN mlx_size size,
34 				OUT mlx_void **ptr
35 				)
36 {
37 	mlx_status status = MLX_SUCCESS;
38 	*ptr = zalloc(size);
39 	if(*ptr == NULL){
40 		status = MLX_OUT_OF_RESOURCES;
41 	}
42 	return status;
43 }
44 
45 mlx_status
mlx_memory_free_priv(IN mlx_utils * utils,IN mlx_void * ptr)46 mlx_memory_free_priv(
47 				IN mlx_utils *utils __attribute__ ((unused)),
48 				IN mlx_void *ptr
49 				)
50 {
51 	mlx_status status = MLX_SUCCESS;
52 	free(ptr);
53 	return status;
54 }
55 mlx_status
mlx_memory_alloc_dma_priv(IN mlx_utils * utils,IN mlx_size size,IN mlx_size align,OUT mlx_void ** ptr)56 mlx_memory_alloc_dma_priv(
57 					IN mlx_utils *utils __attribute__ ((unused)),
58 					IN mlx_size size ,
59 					IN mlx_size align,
60 					OUT mlx_void **ptr
61 					)
62 {
63 	mlx_status status = MLX_SUCCESS;
64 	*ptr = malloc_dma(size, align);
65 	if (*ptr == NULL) {
66 		status = MLX_OUT_OF_RESOURCES;
67 	} else {
68 		memset(*ptr, 0, size);
69 	}
70 	return status;
71 }
72 
73 mlx_status
mlx_memory_free_dma_priv(IN mlx_utils * utils,IN mlx_size size,IN mlx_void * ptr)74 mlx_memory_free_dma_priv(
75 					IN mlx_utils *utils __attribute__ ((unused)),
76 					IN mlx_size size ,
77 					IN mlx_void *ptr
78 					)
79 {
80 	mlx_status status = MLX_SUCCESS;
81 	free_dma(ptr, size);
82 	return status;
83 }
84 mlx_status
mlx_memory_map_dma_priv(IN mlx_utils * utils,IN mlx_void * addr,IN mlx_size number_of_bytes,OUT mlx_physical_address * phys_addr,OUT mlx_void ** mapping)85 mlx_memory_map_dma_priv(
86 					IN mlx_utils *utils __attribute__ ((unused)),
87 					IN mlx_void *addr ,
88 					IN mlx_size number_of_bytes __attribute__ ((unused)),
89 					OUT mlx_physical_address *phys_addr,
90 					OUT mlx_void **mapping __attribute__ ((unused))
91 					)
92 {
93 	mlx_status status = MLX_SUCCESS;
94 	*phys_addr = virt_to_bus(addr);
95 	return status;
96 }
97 
98 mlx_status
mlx_memory_ummap_dma_priv(IN mlx_utils * utils,IN mlx_void * mapping)99 mlx_memory_ummap_dma_priv(
100 					IN mlx_utils *utils __attribute__ ((unused)),
101 					IN mlx_void *mapping __attribute__ ((unused))
102 					)
103 {
104 	mlx_status status = MLX_SUCCESS;
105 	return status;
106 }
107 
108 mlx_status
mlx_memory_cmp_priv(IN mlx_utils * utils __unused,IN mlx_void * first_block,IN mlx_void * second_block,IN mlx_size size,OUT mlx_uint32 * out)109 mlx_memory_cmp_priv(
110 					IN mlx_utils *utils __unused,
111 					IN mlx_void *first_block,
112 					IN mlx_void *second_block,
113 					IN mlx_size size,
114 					OUT mlx_uint32 *out
115 					)
116 {
117 	mlx_status status = MLX_SUCCESS;
118 	*out = memcmp(first_block, second_block, size);
119 	return status;
120 }
121 
122 mlx_status
mlx_memory_set_priv(IN mlx_utils * utils __unused,IN mlx_void * block,IN mlx_int32 value,IN mlx_size size)123 mlx_memory_set_priv(
124 					IN mlx_utils *utils __unused,
125 					IN mlx_void *block,
126 					IN mlx_int32 value,
127 					IN mlx_size size
128 					)
129 {
130 	mlx_status status = MLX_SUCCESS;
131 	memset(block, value, size);
132 	return status;
133 }
134 
135 mlx_status
mlx_memory_cpy_priv(IN mlx_utils * utils __unused,OUT mlx_void * destination_buffer,IN mlx_void * source_buffer,IN mlx_size length)136 mlx_memory_cpy_priv(
137 					IN mlx_utils *utils __unused,
138 					OUT mlx_void *destination_buffer,
139 					IN mlx_void *source_buffer,
140 					IN mlx_size length
141 					)
142 {
143 	mlx_status status = MLX_SUCCESS;
144 	memcpy(destination_buffer, source_buffer, length);
145 	return status;
146 }
147 
148 mlx_status
mlx_memory_cpu_to_be32_priv(IN mlx_utils * utils __unused,IN mlx_uint32 source,IN mlx_uint32 * destination)149 mlx_memory_cpu_to_be32_priv(
150 			IN mlx_utils *utils __unused,
151 			IN mlx_uint32 source,
152 			IN mlx_uint32 *destination
153 			)
154 {
155 	mlx_status status = MLX_SUCCESS;
156 	*destination = cpu_to_be32(source);
157 	return status;
158 }
159 
160 
161 mlx_status
mlx_memory_be32_to_cpu_priv(IN mlx_utils * utils __unused,IN mlx_uint32 source,IN mlx_uint32 * destination)162 mlx_memory_be32_to_cpu_priv(
163 			IN mlx_utils *utils __unused,
164 			IN mlx_uint32 source,
165 			IN mlx_uint32 *destination
166 			)
167 {
168 	mlx_status status = MLX_SUCCESS;
169 	*destination = be32_to_cpu(source);
170 	return status;
171 }
172 
173