Author: bonefish Date: 2010-05-24 21:55:38 +0200 (Mon, 24 May 2010) New Revision: 36926 Changeset: http://dev.haiku-os.org/changeset/36926/haiku Modified: haiku/trunk/headers/build/BeOSBuildCompatibility.h haiku/trunk/headers/build/config_build/HaikuConfig.h haiku/trunk/headers/build/config_build/types.h haiku/trunk/headers/build/os/BeBuild.h haiku/trunk/headers/build/os/support/SupportDefs.h haiku/trunk/headers/config/HaikuConfig.h haiku/trunk/headers/config/types.h haiku/trunk/headers/os/BeBuild.h haiku/trunk/headers/os/support/SupportDefs.h haiku/trunk/headers/posix/sys/types.h haiku/trunk/headers/private/fs_shell/fssh_api_wrapper.h haiku/trunk/headers/private/fs_shell/fssh_types.h Log: * config/{HaikuConfig.h,types.h}: - Added macro __HAIKU_ARCH_BITS specifying the architecture bitness (32/64) (might be more convenient to use than __HAIKU_ARCH_{32,64}_BIT). - Added macros __HAIKU_ARCH_PHYSICAL_BITS, __HAIKU_ARCH_PHYSICAL_{32,64}_BIT, and the types __haiku_phys_[s]addr_t. The intention is to use separate macros and types for virtual and physical addresses, since for some architectures (e.g. x86 with PAE) those actually differ. * sys/types.h, BeBuild.h, SupportDefs.h: - Added types phys_[s]addr_t and respective printf() format macros. - Added public macros B_HAIKU_BITS, B_HAIKU_PHYSICAL_BITS, B_HAIKU_PHYSICAL_{32,64}_BIT. Might break the build under older Haiku installations. Will test next. Modified: haiku/trunk/headers/build/BeOSBuildCompatibility.h =================================================================== --- haiku/trunk/headers/build/BeOSBuildCompatibility.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/build/BeOSBuildCompatibility.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -26,8 +26,9 @@ # endif #endif -typedef unsigned long haiku_build_addr_t; -#define addr_t haiku_build_addr_t +typedef unsigned long haiku_build_addr_t; +#define addr_t haiku_build_addr_t +#define phys_addr_t haiku_build_addr_t #include <Errors.h> Modified: haiku/trunk/headers/build/config_build/HaikuConfig.h =================================================================== --- haiku/trunk/headers/build/config_build/HaikuConfig.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/build/config_build/HaikuConfig.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1,5 +1,5 @@ /* - * Copyright 2009, Haiku, Inc. All Rights Reserved. + * Copyright 2009-2010, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _CONFIG_HAIKU_CONFIG_H @@ -8,18 +8,22 @@ /* Determine the architecture and define macros for some fundamental properties: - __HAIKU_ARCH - short name of the architecture (used in paths) - __HAIKU_ARCH_<arch> - defined to 1 for the respective architecture - __HAIKU_ARCH_64_BIT - defined to 1 on 64 bit architectures - __HAIKU_BIG_ENDIAN - defined to 1 on big endian architectures + __HAIKU_ARCH - short name of the architecture (used in paths) + __HAIKU_ARCH_<arch> - defined to 1 for the respective architecture + __HAIKU_ARCH_BITS - defined to 32/64 on 32/64 bit architectures + (defaults to 32) + __HAIKU_ARCH_PHYSICAL_BITS - defined to 32/64 on architectures with 32/64 + (defaults to __HAIKU_ARCH_BITS) + __HAIKU_BIG_ENDIAN - defined to 1 on big endian architectures + (defaults to undefined) */ #ifdef __INTEL__ -# define __HAIKU_ARCH x86 -# define __HAIKU_ARCH_X86 1 +# define __HAIKU_ARCH x86 +# define __HAIKU_ARCH_X86 1 #elif __x86_64__ -# define __HAIKU_ARCH x86_64 -# define __HAIKU_ARCH_X86_64 1 -# define __HAIKU_ARCH_64_BIT 1 +# define __HAIKU_ARCH x86_64 +# define __HAIKU_ARCH_X86_64 1 +# define __HAIKU_ARCH_BITS 64 #elif __POWERPC__ # define __HAIKU_ARCH ppc # define __HAIKU_ARCH_PPC 1 @@ -38,10 +42,43 @@ # error Unsupported architecture! #endif -/* implied properties */ -#ifndef __HAIKU_ARCH_64_BIT -# define __HAIKU_ARCH_32_BIT 1 +/* implied properties: + __HAIKU_ARCH_{32,64}_BIT - defined to 1 on 32/64 bit architectures, i.e. + using 32/64 bit virtual addresses + __HAIKU_ARCH_PHYSICAL_BITS - defined to 32/64 on architectures with 32/64 + bit physical addresses + __HAIKU_ARCH_PHYSICAL_{32,64}_BIT - defined to 1 on architectures using 64 + bit physical addresses + __HAIKU_BIG_ENDIAN - defined to 1 on big endian architectures +*/ + +/* bitness */ +#ifndef __HAIKU_ARCH_BITS +# define __HAIKU_ARCH_BITS 32 #endif + +#if __HAIKU_ARCH_BITS == 32 +# define __HAIKU_ARCH_32_BIT 1 +#elif __HAIKU_ARCH_BITS == 64 +# define __HAIKU_ARCH_64_BIT 1 +#else +# error Unsupported bitness! +#endif + +/* physical bitness */ +#ifndef __HAIKU_ARCH_PHYSICAL_BITS +# define __HAIKU_ARCH_PHYSICAL_BITS __HAIKU_ARCH_BITS +#endif + +#if __HAIKU_ARCH_PHYSICAL_BITS == 32 +# define __HAIKU_ARCH_PHYSICAL_32_BIT 1 +#elif __HAIKU_ARCH_PHYSICAL_BITS == 64 +# define __HAIKU_ARCH_PHYSICAL_64_BIT 1 +#else +# error Unsupported physical bitness! +#endif + +/* endianess */ #ifndef __HAIKU_BIG_ENDIAN # define __HAIKU_LITTLE_ENDIAN 1 #endif @@ -51,4 +88,5 @@ #define __HAIKU_SUBDIR_ARCH_HEADER(subdir, header) \ <subdir/arch/__HAIKU_ARCH/header> + #endif /* _CONFIG_HAIKU_CONFIG_H */ Modified: haiku/trunk/headers/build/config_build/types.h =================================================================== --- haiku/trunk/headers/build/config_build/types.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/build/config_build/types.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1,5 +1,5 @@ /* - * Copyright 2009, Haiku, Inc. All Rights Reserved. + * Copyright 2009-2010, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _CONFIG_BUILD_TYPES_H @@ -43,15 +43,32 @@ typedef __haiku_uint32 __haiku_addr_t; #endif +#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT + typedef __haiku_int64 __haiku_phys_saddr_t; + typedef __haiku_uint64 __haiku_phys_addr_t; +#else + typedef __haiku_int32 __haiku_phys_saddr_t; + typedef __haiku_uint32 __haiku_phys_addr_t; +#endif + /* address type limits */ #ifdef __HAIKU_ARCH_64_BIT -# define __HAIKU_SADDR_MAX (9223372036854775807LL) -# define __HAIKU_ADDR_MAX (18446744073709551615ULL) +# define __HAIKU_SADDR_MAX (9223372036854775807LL) +# define __HAIKU_ADDR_MAX (18446744073709551615ULL) #else -# define __HAIKU_SADDR_MAX (2147483647) -# define __HAIKU_ADDR_MAX (4294967295U) +# define __HAIKU_SADDR_MAX (2147483647) +# define __HAIKU_ADDR_MAX (4294967295U) #endif -#define __HAIKU_SADDR_MIN (-__HAIKU_SADDR_MAX-1) +#define __HAIKU_SADDR_MIN (-__HAIKU_SADDR_MAX-1) +#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT +# define __HAIKU_PHYS_SADDR_MAX (9223372036854775807LL) +# define __HAIKU_PHYS_ADDR_MAX (18446744073709551615ULL) +#else +# define __HAIKU_PHYS_SADDR_MAX (2147483647) +# define __HAIKU_PHYS_ADDR_MAX (4294967295U) +#endif +#define __HAIKU_PHYS_SADDR_MIN (-__HAIKU_SADDR_MAX-1) + #endif /* _CONFIG_BUILD_TYPES_H */ Modified: haiku/trunk/headers/build/os/BeBuild.h =================================================================== --- haiku/trunk/headers/build/os/BeBuild.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/build/os/BeBuild.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1,5 +1,5 @@ /* - * Copyright 2007-2009, Haiku, Inc. All Rights Reserved. + * Copyright 2007-2010, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _BE_BUILD_H @@ -44,10 +44,21 @@ #endif +#define B_HAIKU_BITS __HAIKU_ARCH_BITS +#define B_HAIKU_PHYSICAL_BITS __HAIKU_ARCH_PHYSICAL_BITS + #ifdef __HAIKU_ARCH_64_BIT # define B_HAIKU_64_BIT 1 +#else +# define B_HAIKU_32_BIT 1 #endif +#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT +# define B_HAIKU_PHYSICAL_64_BIT 1 +#else +# define B_HAIKU_PHYSICAL_32_BIT 1 +#endif + #ifdef __HAIKU_BEOS_COMPATIBLE # define B_HAIKU_BEOS_COMPATIBLE 1 #endif Modified: haiku/trunk/headers/build/os/support/SupportDefs.h =================================================================== --- haiku/trunk/headers/build/os/support/SupportDefs.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/build/os/support/SupportDefs.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1,5 +1,5 @@ /* - * Copyright 2004-2009, Haiku, Inc. All Rights Reserved. + * Copyright 2004-2010, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Author: @@ -127,6 +127,18 @@ # define B_PRIxADDR B_PRIx32 # define B_PRIXADDR B_PRIX32 #endif +/* phys_addr_t */ +#ifdef HAIKU_HOST_PLATFORM_64_BIT +# define B_PRIuPHYSADDR B_PRIu64 +# define B_PRIoPHYSADDR B_PRIo64 +# define B_PRIxPHYSADDR B_PRIx64 +# define B_PRIXPHYSADDR B_PRIX64 +#else +# define B_PRIuPHYSADDR B_PRIu32 +# define B_PRIoPHYSADDR B_PRIo32 +# define B_PRIxPHYSADDR B_PRIx32 +# define B_PRIXPHYSADDR B_PRIX32 +#endif /* off_t */ #define B_PRIdOFF B_PRId64 #define B_PRIiOFF B_PRIi64 Modified: haiku/trunk/headers/config/HaikuConfig.h =================================================================== --- haiku/trunk/headers/config/HaikuConfig.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/config/HaikuConfig.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1,5 +1,5 @@ /* - * Copyright 2009, Haiku, Inc. All Rights Reserved. + * Copyright 2009-2010, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _CONFIG_HAIKU_CONFIG_H @@ -8,18 +8,22 @@ /* Determine the architecture and define macros for some fundamental properties: - __HAIKU_ARCH - short name of the architecture (used in paths) - __HAIKU_ARCH_<arch> - defined to 1 for the respective architecture - __HAIKU_ARCH_64_BIT - defined to 1 on 64 bit architectures - __HAIKU_BIG_ENDIAN - defined to 1 on big endian architectures + __HAIKU_ARCH - short name of the architecture (used in paths) + __HAIKU_ARCH_<arch> - defined to 1 for the respective architecture + __HAIKU_ARCH_BITS - defined to 32/64 on 32/64 bit architectures + (defaults to 32) + __HAIKU_ARCH_PHYSICAL_BITS - defined to 32/64 on architectures with 32/64 + (defaults to __HAIKU_ARCH_BITS) + __HAIKU_BIG_ENDIAN - defined to 1 on big endian architectures + (defaults to undefined) */ #ifdef __INTEL__ -# define __HAIKU_ARCH x86 -# define __HAIKU_ARCH_X86 1 +# define __HAIKU_ARCH x86 +# define __HAIKU_ARCH_X86 1 #elif __x86_64__ -# define __HAIKU_ARCH x86_64 -# define __HAIKU_ARCH_X86_64 1 -# define __HAIKU_ARCH_64_BIT 1 +# define __HAIKU_ARCH x86_64 +# define __HAIKU_ARCH_X86_64 1 +# define __HAIKU_ARCH_BITS 64 #elif __POWERPC__ # define __HAIKU_ARCH ppc # define __HAIKU_ARCH_PPC 1 @@ -38,10 +42,43 @@ # error Unsupported architecture! #endif -/* implied properties */ -#ifndef __HAIKU_ARCH_64_BIT -# define __HAIKU_ARCH_32_BIT 1 +/* implied properties: + __HAIKU_ARCH_{32,64}_BIT - defined to 1 on 32/64 bit architectures, i.e. + using 32/64 bit virtual addresses + __HAIKU_ARCH_PHYSICAL_BITS - defined to 32/64 on architectures with 32/64 + bit physical addresses + __HAIKU_ARCH_PHYSICAL_{32,64}_BIT - defined to 1 on architectures using 64 + bit physical addresses + __HAIKU_BIG_ENDIAN - defined to 1 on big endian architectures +*/ + +/* bitness */ +#ifndef __HAIKU_ARCH_BITS +# define __HAIKU_ARCH_BITS 32 #endif + +#if __HAIKU_ARCH_BITS == 32 +# define __HAIKU_ARCH_32_BIT 1 +#elif __HAIKU_ARCH_BITS == 64 +# define __HAIKU_ARCH_64_BIT 1 +#else +# error Unsupported bitness! +#endif + +/* physical bitness */ +#ifndef __HAIKU_ARCH_PHYSICAL_BITS +# define __HAIKU_ARCH_PHYSICAL_BITS __HAIKU_ARCH_BITS +#endif + +#if __HAIKU_ARCH_PHYSICAL_BITS == 32 +# define __HAIKU_ARCH_PHYSICAL_32_BIT 1 +#elif __HAIKU_ARCH_PHYSICAL_BITS == 64 +# define __HAIKU_ARCH_PHYSICAL_64_BIT 1 +#else +# error Unsupported physical bitness! +#endif + +/* endianess */ #ifndef __HAIKU_BIG_ENDIAN # define __HAIKU_LITTLE_ENDIAN 1 #endif @@ -66,4 +103,5 @@ # define __HAIKU_BEOS_COMPATIBLE_TYPES 1 #endif + #endif /* _CONFIG_HAIKU_CONFIG_H */ Modified: haiku/trunk/headers/config/types.h =================================================================== --- haiku/trunk/headers/config/types.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/config/types.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1,5 +1,5 @@ /* - * Copyright 2009, Haiku, Inc. All Rights Reserved. + * Copyright 2009-2010, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _CONFIG_TYPES_H @@ -46,17 +46,34 @@ typedef __haiku_uint32 __haiku_addr_t; #endif +#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT + typedef __haiku_int64 __haiku_phys_saddr_t; + typedef __haiku_uint64 __haiku_phys_addr_t; +#else + typedef __haiku_int32 __haiku_phys_saddr_t; + typedef __haiku_uint32 __haiku_phys_addr_t; +#endif + /* address type limits */ #ifdef __HAIKU_ARCH_64_BIT -# define __HAIKU_SADDR_MAX (9223372036854775807LL) -# define __HAIKU_ADDR_MAX (18446744073709551615ULL) +# define __HAIKU_SADDR_MAX (9223372036854775807LL) +# define __HAIKU_ADDR_MAX (18446744073709551615ULL) #else -# define __HAIKU_SADDR_MAX (2147483647) -# define __HAIKU_ADDR_MAX (4294967295U) +# define __HAIKU_SADDR_MAX (2147483647) +# define __HAIKU_ADDR_MAX (4294967295U) #endif -#define __HAIKU_SADDR_MIN (-__HAIKU_SADDR_MAX-1) +#define __HAIKU_SADDR_MIN (-__HAIKU_SADDR_MAX-1) +#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT +# define __HAIKU_PHYS_SADDR_MAX (9223372036854775807LL) +# define __HAIKU_PHYS_ADDR_MAX (18446744073709551615ULL) +#else +# define __HAIKU_PHYS_SADDR_MAX (2147483647) +# define __HAIKU_PHYS_ADDR_MAX (4294967295U) +#endif +#define __HAIKU_PHYS_SADDR_MIN (-__HAIKU_SADDR_MAX-1) + /* printf()/scanf() format prefixes */ #define __HAIKU_STD_PRI_PREFIX_32 "" #define __HAIKU_STD_PRI_PREFIX_64 "ll" @@ -74,5 +91,11 @@ # define __HAIKU_PRI_PREFIX_ADDR __HAIKU_PRI_PREFIX_32 #endif +#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT +# define __HAIKU_PRI_PREFIX_PHYS_ADDR __HAIKU_PRI_PREFIX_64 +#else +# define __HAIKU_PRI_PREFIX_PHYS_ADDR __HAIKU_PRI_PREFIX_32 +#endif + #endif /* _CONFIG_TYPES_H */ Modified: haiku/trunk/headers/os/BeBuild.h =================================================================== --- haiku/trunk/headers/os/BeBuild.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/os/BeBuild.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -46,12 +46,21 @@ #endif +#define B_HAIKU_BITS __HAIKU_ARCH_BITS +#define B_HAIKU_PHYSICAL_BITS __HAIKU_ARCH_PHYSICAL_BITS + #ifdef __HAIKU_ARCH_64_BIT # define B_HAIKU_64_BIT 1 #else # define B_HAIKU_32_BIT 1 #endif +#ifdef __HAIKU_ARCH_PHYSICAL_64_BIT +# define B_HAIKU_PHYSICAL_64_BIT 1 +#else +# define B_HAIKU_PHYSICAL_32_BIT 1 +#endif + #ifdef __HAIKU_BEOS_COMPATIBLE # define B_HAIKU_BEOS_COMPATIBLE 1 #endif Modified: haiku/trunk/headers/os/support/SupportDefs.h =================================================================== --- haiku/trunk/headers/os/support/SupportDefs.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/os/support/SupportDefs.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1,5 +1,5 @@ /* - * Copyright 2004-2009, Haiku, Inc. All Rights Reserved. + * Copyright 2004-2010, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Author: @@ -118,6 +118,11 @@ #define B_PRIoADDR __HAIKU_PRI_PREFIX_ADDR "o" #define B_PRIxADDR __HAIKU_PRI_PREFIX_ADDR "x" #define B_PRIXADDR __HAIKU_PRI_PREFIX_ADDR "X" +/* phys_addr_t */ +#define B_PRIuPHYSADDR __HAIKU_PRI_PREFIX_PHYS_ADDR "u" +#define B_PRIoPHYSADDR __HAIKU_PRI_PREFIX_PHYS_ADDR "o" +#define B_PRIxPHYSADDR __HAIKU_PRI_PREFIX_PHYS_ADDR "x" +#define B_PRIXPHYSADDR __HAIKU_PRI_PREFIX_PHYS_ADDR "X" /* off_t */ #define B_PRIdOFF B_PRId64 #define B_PRIiOFF B_PRIi64 Modified: haiku/trunk/headers/posix/sys/types.h =================================================================== --- haiku/trunk/headers/posix/sys/types.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/posix/sys/types.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009, Haiku Inc. All Rights Reserved. + * Copyright 2002-2010, Haiku Inc. All Rights Reserved. * Distributed under the terms of the MIT License. */ #ifndef _SYS_TYPES_H @@ -50,6 +50,7 @@ typedef char* caddr_t; typedef __haiku_addr_t addr_t; +typedef __haiku_phys_addr_t phys_addr_t; typedef __haiku_int32 key_t; #include <null.h> Modified: haiku/trunk/headers/private/fs_shell/fssh_api_wrapper.h =================================================================== --- haiku/trunk/headers/private/fs_shell/fssh_api_wrapper.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/private/fs_shell/fssh_api_wrapper.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1493,6 +1493,7 @@ #define ulong fssh_ulong #define addr_t fssh_addr_t +#define phys_addr_t fssh_phys_addr_t #define dev_t fssh_dev_t #define ino_t fssh_ino_t Modified: haiku/trunk/headers/private/fs_shell/fssh_types.h =================================================================== --- haiku/trunk/headers/private/fs_shell/fssh_types.h 2010-05-24 15:00:41 UTC (rev 36925) +++ haiku/trunk/headers/private/fs_shell/fssh_types.h 2010-05-24 19:55:38 UTC (rev 36926) @@ -1,5 +1,5 @@ /* - * Copyright 2007-2009, Ingo Weinhold, bonefish@xxxxxxxxxxxxxxxx + * Copyright 2007-2010, Ingo Weinhold, bonefish@xxxxxxxxxxxxxxxx * Distributed under the terms of the MIT License. */ #ifndef _FSSH_TYPES_H @@ -15,8 +15,10 @@ #ifdef HAIKU_HOST_PLATFORM_64_BIT typedef uint64_t fssh_addr_t; +typedef uint64_t fssh_phys_addr_t; #else typedef uint32_t fssh_addr_t; +typedef uint32_t fssh_phys_addr_t; #endif typedef int32_t fssh_dev_t; @@ -114,6 +116,18 @@ # define FSSH_B_PRIxADDR FSSH_B_PRIx32 # define FSSH_B_PRIXADDR FSSH_B_PRIX32 #endif +/* phys_addr_t */ +#ifdef HAIKU_HOST_PLATFORM_64_BIT +# define FSSH_B_PRIuPHYSADDR FSSH_B_PRIu64 +# define FSSH_B_PRIoPHYSADDR FSSH_B_PRIo64 +# define FSSH_B_PRIxPHYSADDR FSSH_B_PRIx64 +# define FSSH_B_PRIXPHYSADDR FSSH_B_PRIX64 +#else +# define FSSH_B_PRIuPHYSADDR FSSH_B_PRIu32 +# define FSSH_B_PRIoPHYSADDR FSSH_B_PRIo32 +# define FSSH_B_PRIxPHYSADDR FSSH_B_PRIx32 +# define FSSH_B_PRIXPHYSADDR FSSH_B_PRIX32 +#endif /* off_t */ #define FSSH_B_PRIdOFF FSSH_B_PRId64 #define FSSH_B_PRIiOFF FSSH_B_PRIi64