1 /* 2 * Copyright 2009, Colin Günther, coling@gmx.de. 3 * Copyright 2007, Hugo Santos. All Rights Reserved. 4 * Distributed under the terms of the MIT License. 5 */ 6 #ifndef _FBSD_COMPAT_SYS_PARAM_H_ 7 #define _FBSD_COMPAT_SYS_PARAM_H_ 8 9 10 #include <posix/sys/param.h> 11 #include <ByteOrder.h> 12 13 #include <sys/types.h> 14 #include <sys/cdefs.h> 15 #include <sys/errno.h> 16 #include <sys/time.h> 17 #include <sys/priority.h> 18 19 20 /* The version this compatibility layer is based on */ 21 #define __FreeBSD_version 1200086 22 23 #define MAXBSIZE 0x10000 24 25 #define PAGE_SHIFT 12 26 #define PAGE_MASK (B_PAGE_SIZE - 1) 27 28 #define trunc_page(x) ((x) & ~PAGE_MASK) 29 30 #define ptoa(x) ((unsigned long)((x) << PAGE_SHIFT)) 31 #define atop(x) ((unsigned long)((x) >> PAGE_SHIFT)) 32 33 #ifndef MSIZE 34 #define MSIZE 256 35 #endif 36 37 #ifndef MCLSHIFT 38 #define MCLSHIFT 11 39 #endif 40 41 #define MCLBYTES (1 << MCLSHIFT) 42 43 #define MJUMPAGESIZE B_PAGE_SIZE 44 #define MJUM9BYTES (9 * 1024) 45 #define MJUM16BYTES (16 * 1024) 46 47 #define ALIGN_BYTES (sizeof(unsigned long) - 1) 48 #define ALIGN(x) ((((unsigned long)x) + ALIGN_BYTES) & ~ALIGN_BYTES) 49 50 #if defined(__x86_64__) || defined(__i386__) || defined(__M68K__) 51 #define ALIGNED_POINTER(p, t) 1 52 #elif defined(__powerpc__) 53 #define ALIGNED_POINTER(p, t) ((((uintptr_t)(p)) & (sizeof (t) - 1)) == 0) 54 #elif defined(__arm__) 55 #define ALIGNED_POINTER(p, t) ((((unsigned)(p)) & (sizeof(t) - 1)) == 0) 56 #elif defined(__mips__) || defined(__sparc__) \ 57 || (defined(__riscv) && __riscv_xlen == 64) \ 58 || defined(__aarch64__) || defined(__arm64__) 59 #define ALIGNED_POINTER(p, t) ((((unsigned long)(p)) & (sizeof (t) - 1)) == 0) 60 #else 61 #error Need definition of ALIGNED_POINTER for this arch! 62 #endif 63 64 /* defined in arch_cpu.h which we can't include here as it's C++ */ 65 #if defined(__x86_64__) || defined(__i386__) || defined(__arm__) \ 66 || defined(__sparc__) || defined(__riscv) \ 67 || defined(__aarch64__) || defined(__arm64__) 68 #define CACHE_LINE_SIZE 64 69 #elif defined(__powerpc__) 70 #define CACHE_LINE_SIZE 128 71 #elif defined(__M68K__) 72 #define CACHE_LINE_SIZE 16 73 #else 74 #error Need definition of CACHE_LINE_SIZE for this arch! 75 #endif 76 77 /* Macros for counting and rounding. */ 78 #ifndef howmany 79 #define howmany(x, y) (((x)+((y)-1))/(y)) 80 #endif 81 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */ 82 #define roundup2(x, y) (((x) + ((y) - 1)) & (~((y) - 1))) 83 #define rounddown(x, y) (((x) / (y)) * (y)) 84 #define rounddown2(x, y) ((x)&(~((y)-1))) /* if y is power of two */ 85 #define powerof2(x) ((((x)-1)&(x))==0) 86 87 #define PRIMASK 0x0ff 88 #define PCATCH 0x100 89 #define PDROP 0x200 90 #define PBDRY 0x400 91 92 #define NBBY 8 /* number of bits in a byte */ 93 94 /* Bit map related macros. */ 95 #define setbit(a,i) (((unsigned char *)(a))[(i)/NBBY] |= 1<<((i)%NBBY)) 96 #define clrbit(a,i) (((unsigned char *)(a))[(i)/NBBY] &= ~(1<<((i)%NBBY))) 97 #define isset(a,i) \ 98 (((const unsigned char *)(a))[(i)/NBBY] & (1<<((i)%NBBY))) 99 #define isclr(a,i) \ 100 ((((const unsigned char *)(a))[(i)/NBBY] & (1<<((i)%NBBY))) == 0) 101 102 /* byteswap macros */ 103 #ifndef htonl 104 # define htonl(x) B_HOST_TO_BENDIAN_INT32(x) 105 # define ntohl(x) B_BENDIAN_TO_HOST_INT32(x) 106 # define htons(x) B_HOST_TO_BENDIAN_INT16(x) 107 # define ntohs(x) B_BENDIAN_TO_HOST_INT16(x) 108 #endif 109 110 #endif /* _FBSD_COMPAT_SYS_PARAM_H_ */ 111