1/*
2 * Copyright 2003-2008, Axel D��rfler, axeld@pinc-software.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef BFS_ENDIAN_H
6#define BFS_ENDIAN_H
7
8
9#include "system_dependencies.h"
10
11
12#if !defined(BFS_LITTLE_ENDIAN_ONLY) && !defined(BFS_BIG_ENDIAN_ONLY)
13//	default setting; BFS is now primarily a little endian file system
14#	define BFS_LITTLE_ENDIAN_ONLY
15#endif
16#if defined(BFS_LITTLE_ENDIAN_ONLY) && defined(BFS_BIG_ENDIAN_ONLY)
17#	error Building BFS with both big and little endian is not supported.
18#endif
19
20
21#if defined(BFS_LITTLE_ENDIAN_ONLY) && B_HOST_IS_LENDIAN \
22	|| defined(BFS_BIG_ENDIAN_ONLY) && B_HOST_IS_BENDIAN
23		/* host is BFS endian */
24#	define BFS_NATIVE_ENDIAN
25#	define BFS_ENDIAN_TO_HOST_INT16(value) value
26#	define BFS_ENDIAN_TO_HOST_INT32(value) value
27#	define BFS_ENDIAN_TO_HOST_INT64(value) value
28#	define HOST_ENDIAN_TO_BFS_INT16(value) value
29#	define HOST_ENDIAN_TO_BFS_INT32(value) value
30#	define HOST_ENDIAN_TO_BFS_INT64(value) value
31#elif defined(BFS_LITTLE_ENDIAN_ONLY) && B_HOST_IS_BENDIAN \
32	|| defined(BFS_BIG_ENDIAN_ONLY) && B_HOST_IS_LENDIAN
33		/* host is big endian, BFS is little endian or vice versa */
34#	define BFS_ENDIAN_TO_HOST_INT16(value) __swap_int16(value)
35#	define BFS_ENDIAN_TO_HOST_INT32(value) __swap_int32(value)
36#	define BFS_ENDIAN_TO_HOST_INT64(value) __swap_int64(value)
37#	define HOST_ENDIAN_TO_BFS_INT16(value) __swap_int16(value)
38#	define HOST_ENDIAN_TO_BFS_INT32(value) __swap_int32(value)
39#	define HOST_ENDIAN_TO_BFS_INT64(value) __swap_int64(value)
40#else
41	// TODO: maybe build a version that supports both, big & little endian?
42	//		But since that will need some kind of global data (to
43	//		know of what type this file system is), it's probably
44	//		something for the boot loader; anything else would be
45	//		a major pain.
46#endif
47
48#endif	/* BFS_ENDIAN_H */
49