xref: /illumos-gate/usr/src/head/endian.h (revision cc366bfc)
17dc9a163SRobert Mustacchi /*
27dc9a163SRobert Mustacchi  * This file and its contents are supplied under the terms of the
37dc9a163SRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
47dc9a163SRobert Mustacchi  * You may only use this file in accordance with the terms of version
57dc9a163SRobert Mustacchi  * 1.0 of the CDDL.
67dc9a163SRobert Mustacchi  *
77dc9a163SRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
87dc9a163SRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
97dc9a163SRobert Mustacchi  * http://www.illumos.org/license/CDDL.
107dc9a163SRobert Mustacchi  */
117dc9a163SRobert Mustacchi 
127dc9a163SRobert Mustacchi /*
137dc9a163SRobert Mustacchi  * Copyright 2016 Joyent, Inc.
147dc9a163SRobert Mustacchi  */
157dc9a163SRobert Mustacchi 
167dc9a163SRobert Mustacchi #ifndef _ENDIAN_H
177dc9a163SRobert Mustacchi #define	_ENDIAN_H
187dc9a163SRobert Mustacchi 
197dc9a163SRobert Mustacchi /*
207dc9a163SRobert Mustacchi  * Endian conversion routines, see endian(3C)
217dc9a163SRobert Mustacchi  */
227dc9a163SRobert Mustacchi 
237dc9a163SRobert Mustacchi #ifdef __cplusplus
247dc9a163SRobert Mustacchi extern "C" {
257dc9a163SRobert Mustacchi #endif
267dc9a163SRobert Mustacchi 
277dc9a163SRobert Mustacchi #include <sys/isa_defs.h>
287dc9a163SRobert Mustacchi #include <inttypes.h>
297dc9a163SRobert Mustacchi 
30*cc366bfcSRobert Mustacchi #define	__LITTLE_ENDIAN	1234
31*cc366bfcSRobert Mustacchi #define	__BIG_ENDIAN	4321
32*cc366bfcSRobert Mustacchi #define	__PDP_ENDIAN	3412
337dc9a163SRobert Mustacchi 
34*cc366bfcSRobert Mustacchi #if	defined(_LITTLE_ENDIAN)
35*cc366bfcSRobert Mustacchi #define	__BYTE_ORDER	LITTLE_ENDIAN
36*cc366bfcSRobert Mustacchi #elif	defined(_BIG_ENDIAN)
37*cc366bfcSRobert Mustacchi #define	__BYTE_ORDER	BIG_ENDIAN
387dc9a163SRobert Mustacchi #else
397dc9a163SRobert Mustacchi #error	"Unknown byte order"
407dc9a163SRobert Mustacchi #endif	/* _LITTLE_ENDIAN */
417dc9a163SRobert Mustacchi 
42*cc366bfcSRobert Mustacchi #define	LITTLE_ENDIAN	__LITTLE_ENDIAN
43*cc366bfcSRobert Mustacchi #define	BIG_ENDIAN	__BIG_ENDIAN
44*cc366bfcSRobert Mustacchi #define	BYTE_ORDER	__BYTE_ORDER
45*cc366bfcSRobert Mustacchi 
467dc9a163SRobert Mustacchi extern uint16_t htobe16(uint16_t);
477dc9a163SRobert Mustacchi extern uint32_t htobe32(uint32_t);
487dc9a163SRobert Mustacchi extern uint64_t htobe64(uint64_t);
497dc9a163SRobert Mustacchi 
507dc9a163SRobert Mustacchi extern uint16_t htole16(uint16_t);
517dc9a163SRobert Mustacchi extern uint32_t htole32(uint32_t);
527dc9a163SRobert Mustacchi extern uint64_t htole64(uint64_t);
537dc9a163SRobert Mustacchi 
547dc9a163SRobert Mustacchi /* Supply both the old and new BSD names */
557dc9a163SRobert Mustacchi extern uint16_t betoh16(uint16_t);
567dc9a163SRobert Mustacchi extern uint16_t letoh16(uint16_t);
577dc9a163SRobert Mustacchi extern uint16_t be16toh(uint16_t);
587dc9a163SRobert Mustacchi extern uint16_t le16toh(uint16_t);
597dc9a163SRobert Mustacchi 
607dc9a163SRobert Mustacchi extern uint32_t betoh32(uint32_t);
617dc9a163SRobert Mustacchi extern uint32_t letoh32(uint32_t);
627dc9a163SRobert Mustacchi extern uint32_t be32toh(uint32_t);
637dc9a163SRobert Mustacchi extern uint32_t le32toh(uint32_t);
647dc9a163SRobert Mustacchi 
657dc9a163SRobert Mustacchi extern uint64_t betoh64(uint64_t);
667dc9a163SRobert Mustacchi extern uint64_t letoh64(uint64_t);
677dc9a163SRobert Mustacchi extern uint64_t be64toh(uint64_t);
687dc9a163SRobert Mustacchi extern uint64_t le64toh(uint64_t);
697dc9a163SRobert Mustacchi 
707dc9a163SRobert Mustacchi #ifdef __cplusplus
717dc9a163SRobert Mustacchi }
727dc9a163SRobert Mustacchi #endif
737dc9a163SRobert Mustacchi 
747dc9a163SRobert Mustacchi #endif /* _ENDIAN_H */
75