1/* 2 * Copyright 2009-2010, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _CONFIG_TYPES_H 6#define _CONFIG_TYPES_H 7 8 9#include <config/HaikuConfig.h> 10 11 12/* fixed-width types -- the __haiku_std_[u]int* types correspond to the POSIX 13 [u]int*_t types, the _haiku_[u]int* types to the BeOS [u]int* types. If 14 __HAIKU_BEOS_COMPATIBLE_TYPES is not defined both sets are identical. Once 15 we drop compatibility for good, we can consolidate the types. 16*/ 17typedef signed char __haiku_std_int8; 18typedef unsigned char __haiku_std_uint8; 19typedef signed short __haiku_std_int16; 20typedef unsigned short __haiku_std_uint16; 21typedef signed int __haiku_std_int32; 22typedef unsigned int __haiku_std_uint32; 23#ifdef __HAIKU_ARCH_64_BIT 24typedef signed long __haiku_std_int64; 25typedef unsigned long __haiku_std_uint64; 26#else 27typedef signed long long __haiku_std_int64; 28typedef unsigned long long __haiku_std_uint64; 29#endif 30 31typedef __haiku_std_int8 __haiku_int8; 32typedef __haiku_std_uint8 __haiku_uint8; 33typedef __haiku_std_int16 __haiku_int16; 34typedef __haiku_std_uint16 __haiku_uint16; 35#ifdef __HAIKU_BEOS_COMPATIBLE_TYPES 36typedef signed long int __haiku_int32; 37typedef unsigned long int __haiku_uint32; 38#else 39typedef __haiku_std_int32 __haiku_int32; 40typedef __haiku_std_uint32 __haiku_uint32; 41#endif 42typedef __haiku_std_int64 __haiku_int64; 43typedef __haiku_std_uint64 __haiku_uint64; 44 45/* address types */ 46typedef signed long int __haiku_saddr_t; 47typedef unsigned long int __haiku_addr_t; 48 49#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT 50 typedef __haiku_int64 __haiku_phys_saddr_t; 51 typedef __haiku_uint64 __haiku_phys_addr_t; 52#else 53 typedef __haiku_int32 __haiku_phys_saddr_t; 54 typedef __haiku_uint32 __haiku_phys_addr_t; 55#endif 56 57/* address type limits */ 58#ifdef __HAIKU_ARCH_64_BIT 59# define __HAIKU_SADDR_MAX (9223372036854775807LL) 60# define __HAIKU_ADDR_MAX (18446744073709551615ULL) 61#else 62# define __HAIKU_SADDR_MAX (2147483647) 63# define __HAIKU_ADDR_MAX (4294967295U) 64#endif 65#define __HAIKU_SADDR_MIN (-__HAIKU_SADDR_MAX-1) 66 67#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT 68# define __HAIKU_PHYS_SADDR_MAX (9223372036854775807LL) 69# define __HAIKU_PHYS_ADDR_MAX (18446744073709551615ULL) 70#else 71# define __HAIKU_PHYS_SADDR_MAX (2147483647) 72# define __HAIKU_PHYS_ADDR_MAX (4294967295U) 73#endif 74#define __HAIKU_PHYS_SADDR_MIN (-__HAIKU_SADDR_MAX-1) 75 76 77/* printf()/scanf() format prefixes */ 78#define __HAIKU_STD_PRI_PREFIX_32 "" 79#ifdef __HAIKU_ARCH_64_BIT 80# define __HAIKU_STD_PRI_PREFIX_64 "l" 81#else 82# define __HAIKU_STD_PRI_PREFIX_64 "ll" 83#endif 84 85#ifdef __HAIKU_BEOS_COMPATIBLE_TYPES 86# define __HAIKU_PRI_PREFIX_32 "l" 87#else 88# define __HAIKU_PRI_PREFIX_32 __HAIKU_STD_PRI_PREFIX_32 89#endif 90#define __HAIKU_PRI_PREFIX_64 __HAIKU_STD_PRI_PREFIX_64 91 92#define __HAIKU_PRI_PREFIX_ADDR "l" 93 94#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT 95# define __HAIKU_PRI_PREFIX_PHYS_ADDR __HAIKU_PRI_PREFIX_64 96#else 97# define __HAIKU_PRI_PREFIX_PHYS_ADDR __HAIKU_PRI_PREFIX_32 98#endif 99 100 101/* a generic address type wide enough for virtual and physical addresses */ 102#if __HAIKU_ARCH_BITS >= __HAIKU_ARCH_PHYSICAL_BITS 103 typedef __haiku_addr_t __haiku_generic_addr_t; 104# define __HAIKU_GENERIC_ADDR_MAX __HAIKU_ADDR_MAX 105# define __HAIKU_PRI_PREFIX_GENERIC_ADDR __HAIKU_PRI_PREFIX_ADDR 106#else 107 typedef __haiku_phys_addr_t __haiku_generic_addr_t; 108# define __HAIKU_GENERIC_ADDR_MAX __HAIKU_PHYS_ADDR_MAX 109# define __HAIKU_PRI_PREFIX_GENERIC_ADDR __HAIKU_PRI_PREFIX_PHYS_ADDR 110#endif 111 112 113#endif /* _CONFIG_TYPES_H */ 114