summaryrefslogtreecommitdiff
path: root/dtc.h
diff options
context:
space:
mode:
authorDavid Gibson <dgibson@sneetch.(none)>2005-07-15 17:14:24 +1000
committerDavid Gibson <dgibson@sneetch.(none)>2005-07-15 17:14:24 +1000
commitf0517db25008374955e1b09a140413d7e0f499c3 (patch)
tree4afdb633dbff1189b950b2c5ba633c23125a4ef5 /dtc.h
parent586606e35d1e72d3ee2073bca4247b340233af53 (diff)
downloaddtc-f0517db25008374955e1b09a140413d7e0f499c3.tar.gz
Support for specifying memreserve ranges in the source format, based on
a patch by Jon Loeliger <jdl AT freescale.com>, although tweaked substantially.
Diffstat (limited to 'dtc.h')
-rw-r--r--dtc.h38
1 files changed, 30 insertions, 8 deletions
diff --git a/dtc.h b/dtc.h
index 93c3e60..0f68150 100644
--- a/dtc.h
+++ b/dtc.h
@@ -31,6 +31,10 @@
#include <errno.h>
#include <unistd.h>
#include <netinet/in.h>
+#include <endian.h>
+#include <byteswap.h>
+
+#include "flat_dt.h"
static inline void die(char * str, ...)
{
@@ -74,7 +78,13 @@ typedef u32 cell_t;
#define cpu_to_be32(x) htonl(x)
#define be32_to_cpu(x) ntohl(x)
-
+#if __BYTE_ORDER == __BIG_ENDIAN
+#define cpu_to_be64(x) (x)
+#define be64_to_cpu(x) (x)
+#else
+#define cpu_to_be64(x) bswap_64(x)
+#define be64_to_cpu(x) bswap_64(x)
+#endif
#define streq(a, b) (strcmp((a), (b)) == 0)
#define strneq(a, b, n) (strncmp((a), (b), (n)) == 0)
@@ -110,6 +120,7 @@ struct data data_copy_file(FILE *f, size_t len);
struct data data_append_data(struct data d, void *p, int len);
struct data data_append_cell(struct data d, cell_t word);
+struct data data_append_addr(struct data d, u64 addr);
struct data data_append_byte(struct data d, uint8_t byte);
struct data data_append_zeroes(struct data d, int len);
struct data data_append_align(struct data d, int align);
@@ -118,6 +129,8 @@ struct data data_add_fixup(struct data d, char *ref);
int data_is_one_string(struct data d);
+struct data build_mem_reserve(struct data d);
+
/* DT constraints */
#define MAX_PROPNAME_LEN 31
@@ -168,6 +181,16 @@ void add_child(struct node *parent, struct node *child);
int check_device_tree(struct node *dt);
+/* Boot info (tree plus memreserve information */
+
+struct boot_info {
+ struct data mem_reserve_data; /* mem reserve from header */
+ struct node *dt; /* the device tree */
+};
+
+struct boot_info *build_boot_info(struct data mem_reserve_data,
+ struct node *tree);
+
/* Flattened trees */
enum flat_dt_format {
@@ -175,20 +198,19 @@ enum flat_dt_format {
FFMT_ASM,
};
-void write_dt_blob(FILE *f, struct node *tree, int version, int reservenum);
-void write_dt_asm(FILE *f, struct node *tree, int version, int reservenum);
+void write_dt_blob(FILE *f, struct boot_info *bi, int version);
+void write_dt_asm(FILE *f, struct boot_info *bi, int version);
-struct node *dt_from_blob(FILE *f);
+struct boot_info *dt_from_blob(FILE *f);
/* Tree source */
-void write_tree_source(FILE *f, struct node *tree, int level);
-
-struct node *dt_from_source(FILE *f);
+void write_tree_source(FILE *f, struct boot_info *bi);
+struct boot_info *dt_from_source(FILE *f);
/* FS trees */
-struct node *dt_from_fs(char *dirname);
+struct boot_info *dt_from_fs(char *dirname);
/* misc */