#ifndef _FDT_H
#define _FDT_H

/*
 * 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.
 */

#ifndef __ASSEMBLY__

struct fdt_header {
  fdt32_t    magic;                      /* magic word FDT_MAGIC */
  fdt32_t    totalsize;                  /* total size of DT block */
  fdt32_t    off_dt_struct;              /* offset to structure */
  fdt32_t    off_dt_strings;             /* offset to strings */
  fdt32_t    off_mem_rsvmap;             /* offset to memory reserve map */
  fdt32_t    version;                    /* format version */
  fdt32_t    last_comp_version;          /* last compatible version */

  /* version 2 fields below */
  fdt32_t    boot_cpuid_phys;            /* Which physical CPU id we're
                                            booting on */
  /* version 3 fields below */
  fdt32_t    size_dt_strings;            /* size of the strings block */

  /* version 17 fields below */
  fdt32_t    size_dt_struct;             /* size of the structure block */
};

struct fdt_reserve_entry {
  fdt64_t    address;
  fdt64_t    size;
};

struct fdt_node_header {
  fdt32_t    tag;
  char       name[0];
};

struct fdt_property {
  fdt32_t    tag;
  fdt32_t    len;
  fdt32_t    nameoff;
  char       data[0];
};

#endif /* !__ASSEMBLY */

#define FDT_MAGIC    0xd00dfeed         /* 4: version, 4: total size */
#define FDT_TAGSIZE  sizeof(fdt32_t)

#define FDT_BEGIN_NODE  0x1             /* Start node: full name */
#define FDT_END_NODE    0x2             /* End node */
#define FDT_PROP        0x3             /* Property: name off,
                                           size, content */
#define FDT_NOP         0x4             /* nop */
#define FDT_END         0x9

#define FDT_V1_SIZE   (7*sizeof(fdt32_t))
#define FDT_V2_SIZE   (FDT_V1_SIZE + sizeof(fdt32_t))
#define FDT_V3_SIZE   (FDT_V2_SIZE + sizeof(fdt32_t))
#define FDT_V16_SIZE  FDT_V3_SIZE
#define FDT_V17_SIZE  (FDT_V16_SIZE + sizeof(fdt32_t))

#endif /* _FDT_H */
