Commit | Line | Data |
---|---|---|
12869ecd | 1 | /* SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) */ |
9130ba88 RH |
2 | #ifndef LIBFDT_ENV_H |
3 | #define LIBFDT_ENV_H | |
47605971 RH |
4 | /* |
5 | * libfdt - Flat Device Tree manipulation | |
6 | * Copyright (C) 2006 David Gibson, IBM Corporation. | |
7 | * Copyright 2012 Kim Phillips, Freescale Semiconductor. | |
47605971 | 8 | */ |
ed95d745 | 9 | |
9bb9c6a1 | 10 | #include <stdbool.h> |
ed95d745 DG |
11 | #include <stddef.h> |
12 | #include <stdint.h> | |
6f05afcb | 13 | #include <stdlib.h> |
ed95d745 | 14 | #include <string.h> |
f858927f | 15 | #include <limits.h> |
ed95d745 | 16 | |
47605971 | 17 | #ifdef __CHECKER__ |
89d12310 RH |
18 | #define FDT_FORCE __attribute__((force)) |
19 | #define FDT_BITWISE __attribute__((bitwise)) | |
47605971 | 20 | #else |
89d12310 RH |
21 | #define FDT_FORCE |
22 | #define FDT_BITWISE | |
47605971 RH |
23 | #endif |
24 | ||
89d12310 RH |
25 | typedef uint16_t FDT_BITWISE fdt16_t; |
26 | typedef uint32_t FDT_BITWISE fdt32_t; | |
27 | typedef uint64_t FDT_BITWISE fdt64_t; | |
47605971 RH |
28 | |
29 | #define EXTRACT_BYTE(x, n) ((unsigned long long)((uint8_t *)&x)[n]) | |
30 | #define CPU_TO_FDT16(x) ((EXTRACT_BYTE(x, 0) << 8) | EXTRACT_BYTE(x, 1)) | |
31 | #define CPU_TO_FDT32(x) ((EXTRACT_BYTE(x, 0) << 24) | (EXTRACT_BYTE(x, 1) << 16) | \ | |
32 | (EXTRACT_BYTE(x, 2) << 8) | EXTRACT_BYTE(x, 3)) | |
33 | #define CPU_TO_FDT64(x) ((EXTRACT_BYTE(x, 0) << 56) | (EXTRACT_BYTE(x, 1) << 48) | \ | |
34 | (EXTRACT_BYTE(x, 2) << 40) | (EXTRACT_BYTE(x, 3) << 32) | \ | |
35 | (EXTRACT_BYTE(x, 4) << 24) | (EXTRACT_BYTE(x, 5) << 16) | \ | |
36 | (EXTRACT_BYTE(x, 6) << 8) | EXTRACT_BYTE(x, 7)) | |
37 | ||
38 | static inline uint16_t fdt16_to_cpu(fdt16_t x) | |
39 | { | |
89d12310 | 40 | return (FDT_FORCE uint16_t)CPU_TO_FDT16(x); |
47605971 RH |
41 | } |
42 | static inline fdt16_t cpu_to_fdt16(uint16_t x) | |
cd296721 | 43 | { |
89d12310 | 44 | return (FDT_FORCE fdt16_t)CPU_TO_FDT16(x); |
cd296721 | 45 | } |
cd296721 | 46 | |
47605971 | 47 | static inline uint32_t fdt32_to_cpu(fdt32_t x) |
ed95d745 | 48 | { |
89d12310 | 49 | return (FDT_FORCE uint32_t)CPU_TO_FDT32(x); |
47605971 RH |
50 | } |
51 | static inline fdt32_t cpu_to_fdt32(uint32_t x) | |
52 | { | |
89d12310 | 53 | return (FDT_FORCE fdt32_t)CPU_TO_FDT32(x); |
ed95d745 | 54 | } |
ed95d745 | 55 | |
47605971 RH |
56 | static inline uint64_t fdt64_to_cpu(fdt64_t x) |
57 | { | |
89d12310 | 58 | return (FDT_FORCE uint64_t)CPU_TO_FDT64(x); |
47605971 RH |
59 | } |
60 | static inline fdt64_t cpu_to_fdt64(uint64_t x) | |
ed95d745 | 61 | { |
89d12310 | 62 | return (FDT_FORCE fdt64_t)CPU_TO_FDT64(x); |
ed95d745 | 63 | } |
47605971 RH |
64 | #undef CPU_TO_FDT64 |
65 | #undef CPU_TO_FDT32 | |
66 | #undef CPU_TO_FDT16 | |
cd296721 | 67 | #undef EXTRACT_BYTE |
ed95d745 | 68 | |
9130ba88 RH |
69 | #ifdef __APPLE__ |
70 | #include <AvailabilityMacros.h> | |
71 | ||
72 | /* strnlen() is not available on Mac OS < 10.7 */ | |
73 | # if !defined(MAC_OS_X_VERSION_10_7) || (MAC_OS_X_VERSION_MAX_ALLOWED < \ | |
74 | MAC_OS_X_VERSION_10_7) | |
75 | ||
76 | #define strnlen fdt_strnlen | |
77 | ||
78 | /* | |
79 | * fdt_strnlen: returns the length of a string or max_count - which ever is | |
80 | * smallest. | |
81 | * Input 1 string: the string whose size is to be determined | |
82 | * Input 2 max_count: the maximum value returned by this function | |
83 | * Output: length of the string or max_count (the smallest of the two) | |
84 | */ | |
85 | static inline size_t fdt_strnlen(const char *string, size_t max_count) | |
86 | { | |
87 | const char *p = memchr(string, 0, max_count); | |
88 | return p ? p - string : max_count; | |
89 | } | |
90 | ||
91 | #endif /* !defined(MAC_OS_X_VERSION_10_7) || (MAC_OS_X_VERSION_MAX_ALLOWED < | |
92 | MAC_OS_X_VERSION_10_7) */ | |
93 | ||
94 | #endif /* __APPLE__ */ | |
95 | ||
96 | #endif /* LIBFDT_ENV_H */ |