123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #ifndef _IPXE_FDT_H
- #define _IPXE_FDT_H
-
- /** @file
- *
- * Flattened Device Tree
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- #include <stdint.h>
-
- struct net_device;
-
- /** Device tree header */
- struct fdt_header {
- /** Magic signature */
- uint32_t magic;
- /** Total size of device tree */
- uint32_t totalsize;
- /** Offset to structure block */
- uint32_t off_dt_struct;
- /** Offset to strings block */
- uint32_t off_dt_strings;
- /** Offset to memory reservation block */
- uint32_t off_mem_rsvmap;
- /** Version of this data structure */
- uint32_t version;
- /** Lowest version to which this structure is compatible */
- uint32_t last_comp_version;
- /** Physical ID of the boot CPU */
- uint32_t boot_cpuid_phys;
- /** Length of string block */
- uint32_t size_dt_strings;
- /** Length of structure block */
- uint32_t size_dt_struct;
- } __attribute__ (( packed ));
-
- /** Magic signature */
- #define FDT_MAGIC 0xd00dfeed
-
- /** Expected device tree version */
- #define FDT_VERSION 16
-
- /** Device tree token */
- typedef uint32_t fdt_token_t;
-
- /** Begin node token */
- #define FDT_BEGIN_NODE 0x00000001
-
- /** End node token */
- #define FDT_END_NODE 0x00000002
-
- /** Property token */
- #define FDT_PROP 0x00000003
-
- /** Property fragment */
- struct fdt_prop {
- /** Data length */
- uint32_t len;
- /** Name offset */
- uint32_t name_off;
- } __attribute__ (( packed ));
-
- /** NOP token */
- #define FDT_NOP 0x00000004
-
- /** End of structure block */
- #define FDT_END 0x00000009
-
- /** Alignment of structure block */
- #define FDT_STRUCTURE_ALIGN ( sizeof ( fdt_token_t ) )
-
- /** A device tree */
- struct fdt {
- /** Tree data */
- union {
- /** Tree header */
- const struct fdt_header *hdr;
- /** Raw data */
- const void *raw;
- };
- /** Length of tree */
- size_t len;
- /** Offset to structure block */
- unsigned int structure;
- /** Length of structure block */
- size_t structure_len;
- /** Offset to strings block */
- unsigned int strings;
- /** Length of strings block */
- size_t strings_len;
- };
-
- extern int fdt_path ( const char *path, unsigned int *offset );
- extern int fdt_alias ( const char *name, unsigned int *offset );
- extern const char * fdt_string ( unsigned int offset, const char *name );
- extern int fdt_mac ( unsigned int offset, struct net_device *netdev );
- extern int register_fdt ( const struct fdt_header *hdr );
-
- #endif /* _IPXE_FDT_H */
|