1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */ 2*758e9fbaSOystein Eftevaag /***********************************************************************; 3*758e9fbaSOystein Eftevaag * Copyright (c) 2015 - 2017, Intel Corporation 4*758e9fbaSOystein Eftevaag * 5*758e9fbaSOystein Eftevaag * All rights reserved. 6*758e9fbaSOystein Eftevaag ***********************************************************************/ 7*758e9fbaSOystein Eftevaag 8*758e9fbaSOystein Eftevaag #ifndef TSS2_ENDIAN_H 9*758e9fbaSOystein Eftevaag #define TSS2_ENDIAN_H 10*758e9fbaSOystein Eftevaag 11*758e9fbaSOystein Eftevaag #if defined(__linux__) || defined(__unix__) 12*758e9fbaSOystein Eftevaag #if defined(__FreeBSD__) 13*758e9fbaSOystein Eftevaag #include <sys/endian.h> 14*758e9fbaSOystein Eftevaag #else 15*758e9fbaSOystein Eftevaag #include <endian.h> 16*758e9fbaSOystein Eftevaag #endif 17*758e9fbaSOystein Eftevaag 18*758e9fbaSOystein Eftevaag #define HOST_TO_BE_16(value) htobe16(value) 19*758e9fbaSOystein Eftevaag #define HOST_TO_BE_32(value) htobe32(value) 20*758e9fbaSOystein Eftevaag #define HOST_TO_BE_64(value) htobe64(value) 21*758e9fbaSOystein Eftevaag #define BE_TO_HOST_16(value) be16toh(value) 22*758e9fbaSOystein Eftevaag #define BE_TO_HOST_32(value) be32toh(value) 23*758e9fbaSOystein Eftevaag #define BE_TO_HOST_64(value) be64toh(value) 24*758e9fbaSOystein Eftevaag 25*758e9fbaSOystein Eftevaag #else /* linux || unix */ 26*758e9fbaSOystein Eftevaag 27*758e9fbaSOystein Eftevaag #if defined(WORDS_BIGENDIAN) 28*758e9fbaSOystein Eftevaag 29*758e9fbaSOystein Eftevaag #define HOST_TO_BE_16(value) (value) 30*758e9fbaSOystein Eftevaag #define HOST_TO_BE_32(value) (value) 31*758e9fbaSOystein Eftevaag #define HOST_TO_BE_64(value) (value) 32*758e9fbaSOystein Eftevaag #define BE_TO_HOST_16(value) (value) 33*758e9fbaSOystein Eftevaag #define BE_TO_HOST_32(value) (value) 34*758e9fbaSOystein Eftevaag #define BE_TO_HOST_64(value) (value) 35*758e9fbaSOystein Eftevaag 36*758e9fbaSOystein Eftevaag #else 37*758e9fbaSOystein Eftevaag #include <stdint.h> 38*758e9fbaSOystein Eftevaag endian_conv_16(uint16_t value)39*758e9fbaSOystein Eftevaagstatic inline uint16_t endian_conv_16(uint16_t value) 40*758e9fbaSOystein Eftevaag { 41*758e9fbaSOystein Eftevaag return ((value & (0xff)) << 8) | \ 42*758e9fbaSOystein Eftevaag ((value & (0xff << 8)) >> 8); 43*758e9fbaSOystein Eftevaag } 44*758e9fbaSOystein Eftevaag endian_conv_32(uint32_t value)45*758e9fbaSOystein Eftevaagstatic inline uint32_t endian_conv_32(uint32_t value) 46*758e9fbaSOystein Eftevaag { 47*758e9fbaSOystein Eftevaag return ((value & (0xff)) << 24) | \ 48*758e9fbaSOystein Eftevaag ((value & (0xff << 8)) << 8) | \ 49*758e9fbaSOystein Eftevaag ((value & (0xff << 16)) >> 8) | \ 50*758e9fbaSOystein Eftevaag ((value & (0xff << 24)) >> 24); 51*758e9fbaSOystein Eftevaag } 52*758e9fbaSOystein Eftevaag endian_conv_64(uint64_t value)53*758e9fbaSOystein Eftevaagstatic inline uint64_t endian_conv_64(uint64_t value) 54*758e9fbaSOystein Eftevaag { 55*758e9fbaSOystein Eftevaag return ((value & (0xffULL)) << 56) | \ 56*758e9fbaSOystein Eftevaag ((value & (0xffULL << 8)) << 40) | \ 57*758e9fbaSOystein Eftevaag ((value & (0xffULL << 16)) << 24) | \ 58*758e9fbaSOystein Eftevaag ((value & (0xffULL << 24)) << 8) | \ 59*758e9fbaSOystein Eftevaag ((value & (0xffULL << 32)) >> 8) | \ 60*758e9fbaSOystein Eftevaag ((value & (0xffULL << 40)) >> 24) | \ 61*758e9fbaSOystein Eftevaag ((value & (0xffULL << 48)) >> 40) | \ 62*758e9fbaSOystein Eftevaag ((value & (0xffULL << 56)) >> 56); 63*758e9fbaSOystein Eftevaag } 64*758e9fbaSOystein Eftevaag 65*758e9fbaSOystein Eftevaag #define HOST_TO_BE_16(value) endian_conv_16(value) 66*758e9fbaSOystein Eftevaag #define HOST_TO_BE_32(value) endian_conv_32(value) 67*758e9fbaSOystein Eftevaag #define HOST_TO_BE_64(value) endian_conv_64(value) 68*758e9fbaSOystein Eftevaag #define BE_TO_HOST_16(value) endian_conv_16(value) 69*758e9fbaSOystein Eftevaag #define BE_TO_HOST_32(value) endian_conv_32(value) 70*758e9fbaSOystein Eftevaag #define BE_TO_HOST_64(value) endian_conv_64(value) 71*758e9fbaSOystein Eftevaag 72*758e9fbaSOystein Eftevaag #endif /* WORDS_BIGENDIAN */ 73*758e9fbaSOystein Eftevaag #endif /* linux || unix */ 74*758e9fbaSOystein Eftevaag #endif /* TSS2_ENDIAN_H */ 75