xref: /aosp_15_r20/external/coreboot/src/commonlib/bsd/include/commonlib/bsd/stdlib.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1 /* SPDX-License-Identifier: BSD-3-Clause */
2 
3 #ifndef __COMMONLIB_STDLIB_H__
4 #define __COMMONLIB_STDLIB_H__
5 
6 #include <stddef.h>
7 #include <string.h>
8 
9 #ifdef __COREBOOT__
10 #include <console/console.h>
11 #else
12 #include <stdio.h>
13 #define printk(level, ...) printf(__VA_ARGS__)
14 #endif
15 
16 void __noreturn abort(void);
17 void free(void *ptr);
18 void *malloc(size_t size);
19 void *calloc(size_t nitems, size_t size);
20 void *memalign(size_t align, size_t size);
21 int dma_coherent(const void *ptr);
22 
xmalloc_work(size_t size,const char * file,const char * func,int line)23 static inline void *xmalloc_work(size_t size, const char *file, const char *func, int line)
24 {
25 	void *ret = malloc(size);
26 	if (!ret && size) {
27 		printk(BIOS_ERR, "%s:%d %s(): Failed to malloc %zu bytes\n",
28 			file, line, func, size);
29 		abort();
30 	}
31 	return ret;
32 }
33 #define xmalloc(size) xmalloc_work((size), __FILE__, __func__, __LINE__)
34 
xzalloc_work(size_t size,const char * file,const char * func,int line)35 static inline void *xzalloc_work(size_t size, const char *file, const char *func, int line)
36 {
37 	void *ret = xmalloc_work(size, file, func, line);
38 	memset(ret, 0, size);
39 	return ret;
40 }
41 #define xzalloc(size) xzalloc_work((size), __FILE__, __func__, __LINE__)
42 
xmemalign_work(size_t align,size_t size,const char * file,const char * func,int line)43 static inline void *xmemalign_work(size_t align, size_t size, const char *file,
44 				  const char *func, int line)
45 {
46 	void *ret = memalign(align, size);
47 	if (!ret && size) {
48 		printk(BIOS_ERR, "%s:%d %s(): "
49 				"Failed to memalign %zu bytes with %zu alignment.\n",
50 			file, line, func, size, align);
51 		abort();
52 	}
53 	return ret;
54 }
55 #define xmemalign(align, size) xmemalign_work((align), (size), __FILE__, __func__, __LINE__)
56 
57 #endif /* __COMMONLIB_STDLIB_H__ */
58