1*852ba100SJustin Hibbits /*
2*852ba100SJustin Hibbits * Copyright 2008-2012 Freescale Semiconductor Inc.
30aeed3e9SJustin Hibbits *
40aeed3e9SJustin Hibbits * Redistribution and use in source and binary forms, with or without
50aeed3e9SJustin Hibbits * modification, are permitted provided that the following conditions are met:
60aeed3e9SJustin Hibbits * * Redistributions of source code must retain the above copyright
70aeed3e9SJustin Hibbits * notice, this list of conditions and the following disclaimer.
80aeed3e9SJustin Hibbits * * Redistributions in binary form must reproduce the above copyright
90aeed3e9SJustin Hibbits * notice, this list of conditions and the following disclaimer in the
100aeed3e9SJustin Hibbits * documentation and/or other materials provided with the distribution.
110aeed3e9SJustin Hibbits * * Neither the name of Freescale Semiconductor nor the
120aeed3e9SJustin Hibbits * names of its contributors may be used to endorse or promote products
130aeed3e9SJustin Hibbits * derived from this software without specific prior written permission.
140aeed3e9SJustin Hibbits *
150aeed3e9SJustin Hibbits *
160aeed3e9SJustin Hibbits * ALTERNATIVELY, this software may be distributed under the terms of the
170aeed3e9SJustin Hibbits * GNU General Public License ("GPL") as published by the Free Software
180aeed3e9SJustin Hibbits * Foundation, either version 2 of that License or (at your option) any
190aeed3e9SJustin Hibbits * later version.
200aeed3e9SJustin Hibbits *
210aeed3e9SJustin Hibbits * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
220aeed3e9SJustin Hibbits * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
230aeed3e9SJustin Hibbits * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
240aeed3e9SJustin Hibbits * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
250aeed3e9SJustin Hibbits * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
260aeed3e9SJustin Hibbits * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
270aeed3e9SJustin Hibbits * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
280aeed3e9SJustin Hibbits * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
290aeed3e9SJustin Hibbits * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
300aeed3e9SJustin Hibbits * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
310aeed3e9SJustin Hibbits */
320aeed3e9SJustin Hibbits
33*852ba100SJustin Hibbits
340aeed3e9SJustin Hibbits /**************************************************************************//**
350aeed3e9SJustin Hibbits
360aeed3e9SJustin Hibbits @File endian_ext.h
370aeed3e9SJustin Hibbits
380aeed3e9SJustin Hibbits @Description Big/little endian swapping routines.
390aeed3e9SJustin Hibbits *//***************************************************************************/
400aeed3e9SJustin Hibbits
410aeed3e9SJustin Hibbits #ifndef __ENDIAN_EXT_H
420aeed3e9SJustin Hibbits #define __ENDIAN_EXT_H
430aeed3e9SJustin Hibbits
440aeed3e9SJustin Hibbits #include "std_ext.h"
450aeed3e9SJustin Hibbits
460aeed3e9SJustin Hibbits
470aeed3e9SJustin Hibbits /**************************************************************************//**
480aeed3e9SJustin Hibbits @Group gen_id General Drivers Utilities
490aeed3e9SJustin Hibbits
500aeed3e9SJustin Hibbits @Description General usage API. This API is intended for usage by both the
510aeed3e9SJustin Hibbits internal modules and the user's application.
520aeed3e9SJustin Hibbits
530aeed3e9SJustin Hibbits @{
540aeed3e9SJustin Hibbits *//***************************************************************************/
550aeed3e9SJustin Hibbits
560aeed3e9SJustin Hibbits /**************************************************************************//**
570aeed3e9SJustin Hibbits @Group endian_id Big/Little-Endian Conversion
580aeed3e9SJustin Hibbits
590aeed3e9SJustin Hibbits @Description Routines and macros for Big/Little-Endian conversion and
600aeed3e9SJustin Hibbits general byte swapping.
610aeed3e9SJustin Hibbits
620aeed3e9SJustin Hibbits All routines and macros are expecting unsigned values as
630aeed3e9SJustin Hibbits parameters, but will generate the correct result also for
640aeed3e9SJustin Hibbits signed values. Therefore, signed/unsigned casting is allowed.
650aeed3e9SJustin Hibbits @{
660aeed3e9SJustin Hibbits *//***************************************************************************/
670aeed3e9SJustin Hibbits
680aeed3e9SJustin Hibbits /**************************************************************************//**
690aeed3e9SJustin Hibbits @Collection Byte-Swap Macros
700aeed3e9SJustin Hibbits
710aeed3e9SJustin Hibbits Macros for swapping byte order.
720aeed3e9SJustin Hibbits
730aeed3e9SJustin Hibbits @Cautions The parameters of these macros are evaluated multiple times.
740aeed3e9SJustin Hibbits For calculated expressions or expressions that contain function
750aeed3e9SJustin Hibbits calls it is recommended to use the byte-swap routines.
760aeed3e9SJustin Hibbits
770aeed3e9SJustin Hibbits @{
780aeed3e9SJustin Hibbits *//***************************************************************************/
790aeed3e9SJustin Hibbits
800aeed3e9SJustin Hibbits /**************************************************************************//**
810aeed3e9SJustin Hibbits @Description Swaps the byte order of a given 16-bit value.
820aeed3e9SJustin Hibbits
830aeed3e9SJustin Hibbits @Param[in] val - The 16-bit value to swap.
840aeed3e9SJustin Hibbits
850aeed3e9SJustin Hibbits @Return The byte-swapped value..
860aeed3e9SJustin Hibbits
870aeed3e9SJustin Hibbits @Cautions The given value is evaluated multiple times by this macro.
880aeed3e9SJustin Hibbits For calculated expressions or expressions that contain function
890aeed3e9SJustin Hibbits calls it is recommended to use the SwapUint16() routine.
900aeed3e9SJustin Hibbits
910aeed3e9SJustin Hibbits @hideinitializer
920aeed3e9SJustin Hibbits *//***************************************************************************/
930aeed3e9SJustin Hibbits #define SWAP_UINT16(val) \
940aeed3e9SJustin Hibbits ((uint16_t)((((val) & 0x00FF) << 8) | (((val) & 0xFF00) >> 8)))
950aeed3e9SJustin Hibbits
960aeed3e9SJustin Hibbits /**************************************************************************//**
970aeed3e9SJustin Hibbits @Description Swaps the byte order of a given 32-bit value.
980aeed3e9SJustin Hibbits
990aeed3e9SJustin Hibbits @Param[in] val - The 32-bit value to swap.
1000aeed3e9SJustin Hibbits
1010aeed3e9SJustin Hibbits @Return The byte-swapped value..
1020aeed3e9SJustin Hibbits
1030aeed3e9SJustin Hibbits @Cautions The given value is evaluated multiple times by this macro.
1040aeed3e9SJustin Hibbits For calculated expressions or expressions that contain function
1050aeed3e9SJustin Hibbits calls it is recommended to use the SwapUint32() routine.
1060aeed3e9SJustin Hibbits
1070aeed3e9SJustin Hibbits @hideinitializer
1080aeed3e9SJustin Hibbits *//***************************************************************************/
1090aeed3e9SJustin Hibbits #define SWAP_UINT32(val) \
1100aeed3e9SJustin Hibbits ((uint32_t)((((val) & 0x000000FF) << 24) | \
1110aeed3e9SJustin Hibbits (((val) & 0x0000FF00) << 8) | \
1120aeed3e9SJustin Hibbits (((val) & 0x00FF0000) >> 8) | \
1130aeed3e9SJustin Hibbits (((val) & 0xFF000000) >> 24)))
1140aeed3e9SJustin Hibbits
1150aeed3e9SJustin Hibbits /**************************************************************************//**
1160aeed3e9SJustin Hibbits @Description Swaps the byte order of a given 64-bit value.
1170aeed3e9SJustin Hibbits
1180aeed3e9SJustin Hibbits @Param[in] val - The 64-bit value to swap.
1190aeed3e9SJustin Hibbits
1200aeed3e9SJustin Hibbits @Return The byte-swapped value..
1210aeed3e9SJustin Hibbits
1220aeed3e9SJustin Hibbits @Cautions The given value is evaluated multiple times by this macro.
1230aeed3e9SJustin Hibbits For calculated expressions or expressions that contain function
1240aeed3e9SJustin Hibbits calls it is recommended to use the SwapUint64() routine.
1250aeed3e9SJustin Hibbits
1260aeed3e9SJustin Hibbits @hideinitializer
1270aeed3e9SJustin Hibbits *//***************************************************************************/
1280aeed3e9SJustin Hibbits #define SWAP_UINT64(val) \
1290aeed3e9SJustin Hibbits ((uint64_t)((((val) & 0x00000000000000FFULL) << 56) | \
1300aeed3e9SJustin Hibbits (((val) & 0x000000000000FF00ULL) << 40) | \
1310aeed3e9SJustin Hibbits (((val) & 0x0000000000FF0000ULL) << 24) | \
1320aeed3e9SJustin Hibbits (((val) & 0x00000000FF000000ULL) << 8) | \
1330aeed3e9SJustin Hibbits (((val) & 0x000000FF00000000ULL) >> 8) | \
1340aeed3e9SJustin Hibbits (((val) & 0x0000FF0000000000ULL) >> 24) | \
1350aeed3e9SJustin Hibbits (((val) & 0x00FF000000000000ULL) >> 40) | \
1360aeed3e9SJustin Hibbits (((val) & 0xFF00000000000000ULL) >> 56)))
1370aeed3e9SJustin Hibbits
1380aeed3e9SJustin Hibbits /* @} */
1390aeed3e9SJustin Hibbits
1400aeed3e9SJustin Hibbits /**************************************************************************//**
1410aeed3e9SJustin Hibbits @Collection Byte-Swap Routines
1420aeed3e9SJustin Hibbits
1430aeed3e9SJustin Hibbits Routines for swapping the byte order of a given parameter and
1440aeed3e9SJustin Hibbits returning the swapped value.
1450aeed3e9SJustin Hibbits
1460aeed3e9SJustin Hibbits These inline routines are safer than the byte-swap macros,
1470aeed3e9SJustin Hibbits because they evaluate the parameter expression only once.
1480aeed3e9SJustin Hibbits @{
1490aeed3e9SJustin Hibbits *//***************************************************************************/
1500aeed3e9SJustin Hibbits
1510aeed3e9SJustin Hibbits /**************************************************************************//**
1520aeed3e9SJustin Hibbits @Function SwapUint16
1530aeed3e9SJustin Hibbits
1540aeed3e9SJustin Hibbits @Description Returns the byte-swapped value of a given 16-bit value.
1550aeed3e9SJustin Hibbits
1560aeed3e9SJustin Hibbits @Param[in] val - The 16-bit value.
1570aeed3e9SJustin Hibbits
1580aeed3e9SJustin Hibbits @Return The byte-swapped value of the parameter.
1590aeed3e9SJustin Hibbits *//***************************************************************************/
SwapUint16(uint16_t val)1600aeed3e9SJustin Hibbits static __inline__ uint16_t SwapUint16(uint16_t val)
1610aeed3e9SJustin Hibbits {
1620aeed3e9SJustin Hibbits return (uint16_t)(((val & 0x00FF) << 8) |
1630aeed3e9SJustin Hibbits ((val & 0xFF00) >> 8));
1640aeed3e9SJustin Hibbits }
1650aeed3e9SJustin Hibbits
1660aeed3e9SJustin Hibbits /**************************************************************************//**
1670aeed3e9SJustin Hibbits @Function SwapUint32
1680aeed3e9SJustin Hibbits
1690aeed3e9SJustin Hibbits @Description Returns the byte-swapped value of a given 32-bit value.
1700aeed3e9SJustin Hibbits
1710aeed3e9SJustin Hibbits @Param[in] val - The 32-bit value.
1720aeed3e9SJustin Hibbits
1730aeed3e9SJustin Hibbits @Return The byte-swapped value of the parameter.
1740aeed3e9SJustin Hibbits *//***************************************************************************/
SwapUint32(uint32_t val)1750aeed3e9SJustin Hibbits static __inline__ uint32_t SwapUint32(uint32_t val)
1760aeed3e9SJustin Hibbits {
1770aeed3e9SJustin Hibbits return (uint32_t)(((val & 0x000000FF) << 24) |
1780aeed3e9SJustin Hibbits ((val & 0x0000FF00) << 8) |
1790aeed3e9SJustin Hibbits ((val & 0x00FF0000) >> 8) |
1800aeed3e9SJustin Hibbits ((val & 0xFF000000) >> 24));
1810aeed3e9SJustin Hibbits }
1820aeed3e9SJustin Hibbits
1830aeed3e9SJustin Hibbits /**************************************************************************//**
1840aeed3e9SJustin Hibbits @Function SwapUint64
1850aeed3e9SJustin Hibbits
1860aeed3e9SJustin Hibbits @Description Returns the byte-swapped value of a given 64-bit value.
1870aeed3e9SJustin Hibbits
1880aeed3e9SJustin Hibbits @Param[in] val - The 64-bit value.
1890aeed3e9SJustin Hibbits
1900aeed3e9SJustin Hibbits @Return The byte-swapped value of the parameter.
1910aeed3e9SJustin Hibbits *//***************************************************************************/
SwapUint64(uint64_t val)1920aeed3e9SJustin Hibbits static __inline__ uint64_t SwapUint64(uint64_t val)
1930aeed3e9SJustin Hibbits {
1940aeed3e9SJustin Hibbits return (uint64_t)(((val & 0x00000000000000FFULL) << 56) |
1950aeed3e9SJustin Hibbits ((val & 0x000000000000FF00ULL) << 40) |
1960aeed3e9SJustin Hibbits ((val & 0x0000000000FF0000ULL) << 24) |
1970aeed3e9SJustin Hibbits ((val & 0x00000000FF000000ULL) << 8) |
1980aeed3e9SJustin Hibbits ((val & 0x000000FF00000000ULL) >> 8) |
1990aeed3e9SJustin Hibbits ((val & 0x0000FF0000000000ULL) >> 24) |
2000aeed3e9SJustin Hibbits ((val & 0x00FF000000000000ULL) >> 40) |
2010aeed3e9SJustin Hibbits ((val & 0xFF00000000000000ULL) >> 56));
2020aeed3e9SJustin Hibbits }
2030aeed3e9SJustin Hibbits
2040aeed3e9SJustin Hibbits /* @} */
2050aeed3e9SJustin Hibbits
2060aeed3e9SJustin Hibbits /**************************************************************************//**
2070aeed3e9SJustin Hibbits @Collection In-place Byte-Swap-And-Set Routines
2080aeed3e9SJustin Hibbits
2090aeed3e9SJustin Hibbits Routines for swapping the byte order of a given variable and
2100aeed3e9SJustin Hibbits setting the swapped value back to the same variable.
2110aeed3e9SJustin Hibbits @{
2120aeed3e9SJustin Hibbits *//***************************************************************************/
2130aeed3e9SJustin Hibbits
2140aeed3e9SJustin Hibbits /**************************************************************************//**
2150aeed3e9SJustin Hibbits @Function SwapUint16P
2160aeed3e9SJustin Hibbits
2170aeed3e9SJustin Hibbits @Description Swaps the byte order of a given 16-bit variable.
2180aeed3e9SJustin Hibbits
2190aeed3e9SJustin Hibbits @Param[in] p_Val - Pointer to the 16-bit variable.
2200aeed3e9SJustin Hibbits
2210aeed3e9SJustin Hibbits @Return None.
2220aeed3e9SJustin Hibbits *//***************************************************************************/
SwapUint16P(uint16_t * p_Val)2230aeed3e9SJustin Hibbits static __inline__ void SwapUint16P(uint16_t *p_Val)
2240aeed3e9SJustin Hibbits {
2250aeed3e9SJustin Hibbits *p_Val = SwapUint16(*p_Val);
2260aeed3e9SJustin Hibbits }
2270aeed3e9SJustin Hibbits
2280aeed3e9SJustin Hibbits /**************************************************************************//**
2290aeed3e9SJustin Hibbits @Function SwapUint32P
2300aeed3e9SJustin Hibbits
2310aeed3e9SJustin Hibbits @Description Swaps the byte order of a given 32-bit variable.
2320aeed3e9SJustin Hibbits
2330aeed3e9SJustin Hibbits @Param[in] p_Val - Pointer to the 32-bit variable.
2340aeed3e9SJustin Hibbits
2350aeed3e9SJustin Hibbits @Return None.
2360aeed3e9SJustin Hibbits *//***************************************************************************/
SwapUint32P(uint32_t * p_Val)2370aeed3e9SJustin Hibbits static __inline__ void SwapUint32P(uint32_t *p_Val)
2380aeed3e9SJustin Hibbits {
2390aeed3e9SJustin Hibbits *p_Val = SwapUint32(*p_Val);
2400aeed3e9SJustin Hibbits }
2410aeed3e9SJustin Hibbits
2420aeed3e9SJustin Hibbits /**************************************************************************//**
2430aeed3e9SJustin Hibbits @Function SwapUint64P
2440aeed3e9SJustin Hibbits
2450aeed3e9SJustin Hibbits @Description Swaps the byte order of a given 64-bit variable.
2460aeed3e9SJustin Hibbits
2470aeed3e9SJustin Hibbits @Param[in] p_Val - Pointer to the 64-bit variable.
2480aeed3e9SJustin Hibbits
2490aeed3e9SJustin Hibbits @Return None.
2500aeed3e9SJustin Hibbits *//***************************************************************************/
SwapUint64P(uint64_t * p_Val)2510aeed3e9SJustin Hibbits static __inline__ void SwapUint64P(uint64_t *p_Val)
2520aeed3e9SJustin Hibbits {
2530aeed3e9SJustin Hibbits *p_Val = SwapUint64(*p_Val);
2540aeed3e9SJustin Hibbits }
2550aeed3e9SJustin Hibbits
2560aeed3e9SJustin Hibbits /* @} */
2570aeed3e9SJustin Hibbits
2580aeed3e9SJustin Hibbits
2590aeed3e9SJustin Hibbits /**************************************************************************//**
2600aeed3e9SJustin Hibbits @Collection Little-Endian Conversion Macros
2610aeed3e9SJustin Hibbits
2620aeed3e9SJustin Hibbits These macros convert given parameters to or from Little-Endian
2630aeed3e9SJustin Hibbits format. Use these macros when you want to read or write a specific
2640aeed3e9SJustin Hibbits Little-Endian value in memory, without a-priori knowing the CPU
2650aeed3e9SJustin Hibbits byte order.
2660aeed3e9SJustin Hibbits
2670aeed3e9SJustin Hibbits These macros use the byte-swap routines. For conversion of
2680aeed3e9SJustin Hibbits constants in initialization structures, you may use the CONST
2690aeed3e9SJustin Hibbits versions of these macros (see below), which are using the
2700aeed3e9SJustin Hibbits byte-swap macros instead.
2710aeed3e9SJustin Hibbits @{
2720aeed3e9SJustin Hibbits *//***************************************************************************/
2730aeed3e9SJustin Hibbits
2740aeed3e9SJustin Hibbits /**************************************************************************//**
2750aeed3e9SJustin Hibbits @Description Converts a given 16-bit value from CPU byte order to
2760aeed3e9SJustin Hibbits Little-Endian byte order.
2770aeed3e9SJustin Hibbits
2780aeed3e9SJustin Hibbits @Param[in] val - The 16-bit value to convert.
2790aeed3e9SJustin Hibbits
2800aeed3e9SJustin Hibbits @Return The converted value.
2810aeed3e9SJustin Hibbits
2820aeed3e9SJustin Hibbits @hideinitializer
2830aeed3e9SJustin Hibbits *//***************************************************************************/
2840aeed3e9SJustin Hibbits #define CPU_TO_LE16(val) SwapUint16(val)
2850aeed3e9SJustin Hibbits
2860aeed3e9SJustin Hibbits /**************************************************************************//**
2870aeed3e9SJustin Hibbits @Description Converts a given 32-bit value from CPU byte order to
2880aeed3e9SJustin Hibbits Little-Endian byte order.
2890aeed3e9SJustin Hibbits
2900aeed3e9SJustin Hibbits @Param[in] val - The 32-bit value to convert.
2910aeed3e9SJustin Hibbits
2920aeed3e9SJustin Hibbits @Return The converted value.
2930aeed3e9SJustin Hibbits
2940aeed3e9SJustin Hibbits @hideinitializer
2950aeed3e9SJustin Hibbits *//***************************************************************************/
2960aeed3e9SJustin Hibbits #define CPU_TO_LE32(val) SwapUint32(val)
2970aeed3e9SJustin Hibbits
2980aeed3e9SJustin Hibbits /**************************************************************************//**
2990aeed3e9SJustin Hibbits @Description Converts a given 64-bit value from CPU byte order to
3000aeed3e9SJustin Hibbits Little-Endian byte order.
3010aeed3e9SJustin Hibbits
3020aeed3e9SJustin Hibbits @Param[in] val - The 64-bit value to convert.
3030aeed3e9SJustin Hibbits
3040aeed3e9SJustin Hibbits @Return The converted value.
3050aeed3e9SJustin Hibbits
3060aeed3e9SJustin Hibbits @hideinitializer
3070aeed3e9SJustin Hibbits *//***************************************************************************/
3080aeed3e9SJustin Hibbits #define CPU_TO_LE64(val) SwapUint64(val)
3090aeed3e9SJustin Hibbits
3100aeed3e9SJustin Hibbits
3110aeed3e9SJustin Hibbits /**************************************************************************//**
3120aeed3e9SJustin Hibbits @Description Converts a given 16-bit value from Little-Endian byte order to
3130aeed3e9SJustin Hibbits CPU byte order.
3140aeed3e9SJustin Hibbits
3150aeed3e9SJustin Hibbits @Param[in] val - The 16-bit value to convert.
3160aeed3e9SJustin Hibbits
3170aeed3e9SJustin Hibbits @Return The converted value.
3180aeed3e9SJustin Hibbits
3190aeed3e9SJustin Hibbits @hideinitializer
3200aeed3e9SJustin Hibbits *//***************************************************************************/
3210aeed3e9SJustin Hibbits #define LE16_TO_CPU(val) CPU_TO_LE16(val)
3220aeed3e9SJustin Hibbits
3230aeed3e9SJustin Hibbits /**************************************************************************//**
3240aeed3e9SJustin Hibbits @Description Converts a given 32-bit value from Little-Endian byte order to
3250aeed3e9SJustin Hibbits CPU byte order.
3260aeed3e9SJustin Hibbits
3270aeed3e9SJustin Hibbits @Param[in] val - The 32-bit value to convert.
3280aeed3e9SJustin Hibbits
3290aeed3e9SJustin Hibbits @Return The converted value.
3300aeed3e9SJustin Hibbits
3310aeed3e9SJustin Hibbits @hideinitializer
3320aeed3e9SJustin Hibbits *//***************************************************************************/
3330aeed3e9SJustin Hibbits #define LE32_TO_CPU(val) CPU_TO_LE32(val)
3340aeed3e9SJustin Hibbits
3350aeed3e9SJustin Hibbits /**************************************************************************//**
3360aeed3e9SJustin Hibbits @Description Converts a given 64-bit value from Little-Endian byte order to
3370aeed3e9SJustin Hibbits CPU byte order.
3380aeed3e9SJustin Hibbits
3390aeed3e9SJustin Hibbits @Param[in] val - The 64-bit value to convert.
3400aeed3e9SJustin Hibbits
3410aeed3e9SJustin Hibbits @Return The converted value.
3420aeed3e9SJustin Hibbits
3430aeed3e9SJustin Hibbits @hideinitializer
3440aeed3e9SJustin Hibbits *//***************************************************************************/
3450aeed3e9SJustin Hibbits #define LE64_TO_CPU(val) CPU_TO_LE64(val)
3460aeed3e9SJustin Hibbits
3470aeed3e9SJustin Hibbits /* @} */
3480aeed3e9SJustin Hibbits
3490aeed3e9SJustin Hibbits /**************************************************************************//**
3500aeed3e9SJustin Hibbits @Collection Little-Endian Constant Conversion Macros
3510aeed3e9SJustin Hibbits
3520aeed3e9SJustin Hibbits These macros convert given constants to or from Little-Endian
3530aeed3e9SJustin Hibbits format. Use these macros when you want to read or write a specific
3540aeed3e9SJustin Hibbits Little-Endian constant in memory, without a-priori knowing the
3550aeed3e9SJustin Hibbits CPU byte order.
3560aeed3e9SJustin Hibbits
3570aeed3e9SJustin Hibbits These macros use the byte-swap macros, therefore can be used for
3580aeed3e9SJustin Hibbits conversion of constants in initialization structures.
3590aeed3e9SJustin Hibbits
3600aeed3e9SJustin Hibbits @Cautions The parameters of these macros are evaluated multiple times.
3610aeed3e9SJustin Hibbits For non-constant expressions, use the non-CONST macro versions.
3620aeed3e9SJustin Hibbits
3630aeed3e9SJustin Hibbits @{
3640aeed3e9SJustin Hibbits *//***************************************************************************/
3650aeed3e9SJustin Hibbits
3660aeed3e9SJustin Hibbits /**************************************************************************//**
3670aeed3e9SJustin Hibbits @Description Converts a given 16-bit constant from CPU byte order to
3680aeed3e9SJustin Hibbits Little-Endian byte order.
3690aeed3e9SJustin Hibbits
3700aeed3e9SJustin Hibbits @Param[in] val - The 16-bit value to convert.
3710aeed3e9SJustin Hibbits
3720aeed3e9SJustin Hibbits @Return The converted value.
3730aeed3e9SJustin Hibbits
3740aeed3e9SJustin Hibbits @hideinitializer
3750aeed3e9SJustin Hibbits *//***************************************************************************/
3760aeed3e9SJustin Hibbits #define CONST_CPU_TO_LE16(val) SWAP_UINT16(val)
3770aeed3e9SJustin Hibbits
3780aeed3e9SJustin Hibbits /**************************************************************************//**
3790aeed3e9SJustin Hibbits @Description Converts a given 32-bit constant from CPU byte order to
3800aeed3e9SJustin Hibbits Little-Endian byte order.
3810aeed3e9SJustin Hibbits
3820aeed3e9SJustin Hibbits @Param[in] val - The 32-bit value to convert.
3830aeed3e9SJustin Hibbits
3840aeed3e9SJustin Hibbits @Return The converted value.
3850aeed3e9SJustin Hibbits
3860aeed3e9SJustin Hibbits @hideinitializer
3870aeed3e9SJustin Hibbits *//***************************************************************************/
3880aeed3e9SJustin Hibbits #define CONST_CPU_TO_LE32(val) SWAP_UINT32(val)
3890aeed3e9SJustin Hibbits
3900aeed3e9SJustin Hibbits /**************************************************************************//**
3910aeed3e9SJustin Hibbits @Description Converts a given 64-bit constant from CPU byte order to
3920aeed3e9SJustin Hibbits Little-Endian byte order.
3930aeed3e9SJustin Hibbits
3940aeed3e9SJustin Hibbits @Param[in] val - The 64-bit value to convert.
3950aeed3e9SJustin Hibbits
3960aeed3e9SJustin Hibbits @Return The converted value.
3970aeed3e9SJustin Hibbits
3980aeed3e9SJustin Hibbits @hideinitializer
3990aeed3e9SJustin Hibbits *//***************************************************************************/
4000aeed3e9SJustin Hibbits #define CONST_CPU_TO_LE64(val) SWAP_UINT64(val)
4010aeed3e9SJustin Hibbits
4020aeed3e9SJustin Hibbits
4030aeed3e9SJustin Hibbits /**************************************************************************//**
4040aeed3e9SJustin Hibbits @Description Converts a given 16-bit constant from Little-Endian byte order
4050aeed3e9SJustin Hibbits to CPU byte order.
4060aeed3e9SJustin Hibbits
4070aeed3e9SJustin Hibbits @Param[in] val - The 16-bit value to convert.
4080aeed3e9SJustin Hibbits
4090aeed3e9SJustin Hibbits @Return The converted value.
4100aeed3e9SJustin Hibbits
4110aeed3e9SJustin Hibbits @hideinitializer
4120aeed3e9SJustin Hibbits *//***************************************************************************/
4130aeed3e9SJustin Hibbits #define CONST_LE16_TO_CPU(val) CONST_CPU_TO_LE16(val)
4140aeed3e9SJustin Hibbits
4150aeed3e9SJustin Hibbits /**************************************************************************//**
4160aeed3e9SJustin Hibbits @Description Converts a given 32-bit constant from Little-Endian byte order
4170aeed3e9SJustin Hibbits to CPU byte order.
4180aeed3e9SJustin Hibbits
4190aeed3e9SJustin Hibbits @Param[in] val - The 32-bit value to convert.
4200aeed3e9SJustin Hibbits
4210aeed3e9SJustin Hibbits @Return The converted value.
4220aeed3e9SJustin Hibbits
4230aeed3e9SJustin Hibbits @hideinitializer
4240aeed3e9SJustin Hibbits *//***************************************************************************/
4250aeed3e9SJustin Hibbits #define CONST_LE32_TO_CPU(val) CONST_CPU_TO_LE32(val)
4260aeed3e9SJustin Hibbits
4270aeed3e9SJustin Hibbits /**************************************************************************//**
4280aeed3e9SJustin Hibbits @Description Converts a given 64-bit constant from Little-Endian byte order
4290aeed3e9SJustin Hibbits to CPU byte order.
4300aeed3e9SJustin Hibbits
4310aeed3e9SJustin Hibbits @Param[in] val - The 64-bit value to convert.
4320aeed3e9SJustin Hibbits
4330aeed3e9SJustin Hibbits @Return The converted value.
4340aeed3e9SJustin Hibbits
4350aeed3e9SJustin Hibbits @hideinitializer
4360aeed3e9SJustin Hibbits *//***************************************************************************/
4370aeed3e9SJustin Hibbits #define CONST_LE64_TO_CPU(val) CONST_CPU_TO_LE64(val)
4380aeed3e9SJustin Hibbits
4390aeed3e9SJustin Hibbits /* @} */
4400aeed3e9SJustin Hibbits
4410aeed3e9SJustin Hibbits
4420aeed3e9SJustin Hibbits /** @} */ /* end of endian_id group */
4430aeed3e9SJustin Hibbits /** @} */ /* end of gen_id group */
4440aeed3e9SJustin Hibbits
4450aeed3e9SJustin Hibbits
4460aeed3e9SJustin Hibbits #endif /* __ENDIAN_EXT_H */
4470aeed3e9SJustin Hibbits
448