2008-08-07 12:24:17 +10:00
# ifndef _LIBFDT_ENV_H
# define _LIBFDT_ENV_H
2015-04-29 16:00:05 -05:00
/*
* libfdt - Flat Device Tree manipulation
* Copyright ( C ) 2006 David Gibson , IBM Corporation .
* Copyright 2012 Kim Phillips , Freescale Semiconductor .
*
* libfdt is dual licensed : you can use it either under the terms of
* the GPL , or the BSD license , at your option .
*
* a ) This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation ; either version 2 of the
* License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public
* License along with this library ; if not , write to the Free
* Software Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston ,
* MA 02110 - 1301 USA
*
* Alternatively ,
*
* b ) Redistribution and use in source and binary forms , with or
* without modification , are permitted provided that the following
* conditions are met :
*
* 1. Redistributions of source code must retain the above
* copyright notice , this list of conditions and the following
* disclaimer .
* 2. Redistributions in binary form must reproduce the above
* copyright notice , this list of conditions and the following
* disclaimer in the documentation and / or other materials
* provided with the distribution .
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES ,
* INCLUDING , BUT NOT LIMITED TO , THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL ,
* SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT
* NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ;
* LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION )
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY , WHETHER IN
* CONTRACT , STRICT LIABILITY , OR TORT ( INCLUDING NEGLIGENCE OR
* OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE ,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*/
2008-08-07 12:24:17 +10:00
# include <stddef.h>
# include <stdint.h>
# include <string.h>
2015-04-29 16:00:05 -05:00
# ifdef __CHECKER__
# define __force __attribute__((force))
# define __bitwise __attribute__((bitwise))
# else
# define __force
# define __bitwise
# endif
typedef uint16_t __bitwise fdt16_t ;
typedef uint32_t __bitwise fdt32_t ;
typedef uint64_t __bitwise fdt64_t ;
# define EXTRACT_BYTE(x, n) ((unsigned long long)((uint8_t *)&x)[n])
# define CPU_TO_FDT16(x) ((EXTRACT_BYTE(x, 0) << 8) | EXTRACT_BYTE(x, 1))
# define CPU_TO_FDT32(x) ((EXTRACT_BYTE(x, 0) << 24) | (EXTRACT_BYTE(x, 1) << 16) | \
( EXTRACT_BYTE ( x , 2 ) < < 8 ) | EXTRACT_BYTE ( x , 3 ) )
# define CPU_TO_FDT64(x) ((EXTRACT_BYTE(x, 0) << 56) | (EXTRACT_BYTE(x, 1) << 48) | \
( EXTRACT_BYTE ( x , 2 ) < < 40 ) | ( EXTRACT_BYTE ( x , 3 ) < < 32 ) | \
( EXTRACT_BYTE ( x , 4 ) < < 24 ) | ( EXTRACT_BYTE ( x , 5 ) < < 16 ) | \
( EXTRACT_BYTE ( x , 6 ) < < 8 ) | EXTRACT_BYTE ( x , 7 ) )
static inline uint16_t fdt16_to_cpu ( fdt16_t x )
{
return ( __force uint16_t ) CPU_TO_FDT16 ( x ) ;
}
static inline fdt16_t cpu_to_fdt16 ( uint16_t x )
2012-09-28 21:25:59 +00:00
{
2015-04-29 16:00:05 -05:00
return ( __force fdt16_t ) CPU_TO_FDT16 ( x ) ;
2012-09-28 21:25:59 +00:00
}
2015-04-29 16:00:05 -05:00
static inline uint32_t fdt32_to_cpu ( fdt32_t x )
2008-08-07 12:24:17 +10:00
{
2015-04-29 16:00:05 -05:00
return ( __force uint32_t ) CPU_TO_FDT32 ( x ) ;
}
static inline fdt32_t cpu_to_fdt32 ( uint32_t x )
{
return ( __force fdt32_t ) CPU_TO_FDT32 ( x ) ;
2008-08-07 12:24:17 +10:00
}
2015-04-29 16:00:05 -05:00
static inline uint64_t fdt64_to_cpu ( fdt64_t x )
{
return ( __force uint64_t ) CPU_TO_FDT64 ( x ) ;
}
static inline fdt64_t cpu_to_fdt64 ( uint64_t x )
2008-08-07 12:24:17 +10:00
{
2015-04-29 16:00:05 -05:00
return ( __force fdt64_t ) CPU_TO_FDT64 ( x ) ;
2008-08-07 12:24:17 +10:00
}
2015-04-29 16:00:05 -05:00
# undef CPU_TO_FDT64
# undef CPU_TO_FDT32
# undef CPU_TO_FDT16
2012-09-28 21:25:59 +00:00
# undef EXTRACT_BYTE
2008-08-07 12:24:17 +10:00
# endif /* _LIBFDT_ENV_H */