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