1*25da2beaSAndroid Build Coastguard Worker /* SPDX-License-Identifier: MIT */ 2*25da2beaSAndroid Build Coastguard Worker #ifndef LIBURING_LIB_H 3*25da2beaSAndroid Build Coastguard Worker #define LIBURING_LIB_H 4*25da2beaSAndroid Build Coastguard Worker 5*25da2beaSAndroid Build Coastguard Worker #include <stdlib.h> 6*25da2beaSAndroid Build Coastguard Worker #include <string.h> 7*25da2beaSAndroid Build Coastguard Worker #include <unistd.h> 8*25da2beaSAndroid Build Coastguard Worker 9*25da2beaSAndroid Build Coastguard Worker #define __INTERNAL__LIBURING_LIB_H 10*25da2beaSAndroid Build Coastguard Worker #if defined(__x86_64__) || defined(__i386__) 11*25da2beaSAndroid Build Coastguard Worker #include "arch/x86/lib.h" 12*25da2beaSAndroid Build Coastguard Worker #else 13*25da2beaSAndroid Build Coastguard Worker /* 14*25da2beaSAndroid Build Coastguard Worker * We don't have nolibc support for this arch. Must use libc! 15*25da2beaSAndroid Build Coastguard Worker */ 16*25da2beaSAndroid Build Coastguard Worker #ifdef CONFIG_NOLIBC 17*25da2beaSAndroid Build Coastguard Worker #error "This arch doesn't support building liburing without libc" 18*25da2beaSAndroid Build Coastguard Worker #endif 19*25da2beaSAndroid Build Coastguard Worker /* libc wrappers. */ 20*25da2beaSAndroid Build Coastguard Worker #include "arch/generic/lib.h" 21*25da2beaSAndroid Build Coastguard Worker #endif 22*25da2beaSAndroid Build Coastguard Worker #undef __INTERNAL__LIBURING_LIB_H 23*25da2beaSAndroid Build Coastguard Worker 24*25da2beaSAndroid Build Coastguard Worker 25*25da2beaSAndroid Build Coastguard Worker #ifndef offsetof 26*25da2beaSAndroid Build Coastguard Worker #define offsetof(TYPE, FIELD) ((size_t) &((TYPE *)0)->FIELD) 27*25da2beaSAndroid Build Coastguard Worker #endif 28*25da2beaSAndroid Build Coastguard Worker 29*25da2beaSAndroid Build Coastguard Worker #ifndef container_of 30*25da2beaSAndroid Build Coastguard Worker #define container_of(PTR, TYPE, FIELD) ({ \ 31*25da2beaSAndroid Build Coastguard Worker __typeof__(((TYPE *)0)->FIELD) *__FIELD_PTR = (PTR); \ 32*25da2beaSAndroid Build Coastguard Worker (TYPE *)((char *) __FIELD_PTR - offsetof(TYPE, FIELD)); \ 33*25da2beaSAndroid Build Coastguard Worker }) 34*25da2beaSAndroid Build Coastguard Worker #endif 35*25da2beaSAndroid Build Coastguard Worker 36*25da2beaSAndroid Build Coastguard Worker void *__uring_malloc(size_t len); 37*25da2beaSAndroid Build Coastguard Worker void __uring_free(void *p); 38*25da2beaSAndroid Build Coastguard Worker uring_malloc(size_t len)39*25da2beaSAndroid Build Coastguard Workerstatic inline void *uring_malloc(size_t len) 40*25da2beaSAndroid Build Coastguard Worker { 41*25da2beaSAndroid Build Coastguard Worker #ifdef CONFIG_NOLIBC 42*25da2beaSAndroid Build Coastguard Worker return __uring_malloc(len); 43*25da2beaSAndroid Build Coastguard Worker #else 44*25da2beaSAndroid Build Coastguard Worker return malloc(len); 45*25da2beaSAndroid Build Coastguard Worker #endif 46*25da2beaSAndroid Build Coastguard Worker } 47*25da2beaSAndroid Build Coastguard Worker uring_free(void * ptr)48*25da2beaSAndroid Build Coastguard Workerstatic inline void uring_free(void *ptr) 49*25da2beaSAndroid Build Coastguard Worker { 50*25da2beaSAndroid Build Coastguard Worker #ifdef CONFIG_NOLIBC 51*25da2beaSAndroid Build Coastguard Worker __uring_free(ptr); 52*25da2beaSAndroid Build Coastguard Worker #else 53*25da2beaSAndroid Build Coastguard Worker free(ptr); 54*25da2beaSAndroid Build Coastguard Worker #endif 55*25da2beaSAndroid Build Coastguard Worker } 56*25da2beaSAndroid Build Coastguard Worker 57*25da2beaSAndroid Build Coastguard Worker #endif /* #ifndef LIBURING_LIB_H */ 58