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