#ifndef _BINMAN_H_
#define _BINMAN_H_
+#include <dm/ofnode.h>
+
/**
*struct binman_entry - information about a binman entry
*
u32 size;
};
+/**
+ * binman_entry_map() - Look up the address of an entry in memory
+ *
+ * @parent: Parent binman node
+ * @name: Name of entry
+ * @bufp: Returns a pointer to the entry
+ * @sizep: Returns the size of the entry
+ * @return 0 on success, -EPERM if the ROM offset is not set, -ENOENT if the
+ * entry cannot be found, other error code other error
+ */
+int binman_entry_map(ofnode parent, const char *name, void **bufp, int *sizep);
+
/**
* binman_set_rom_offset() - Set the ROM memory-map offset
*
*/
int binman_entry_find(const char *name, struct binman_entry *entry);
+/**
+ * binman_section_find_node() - Find a binman node
+ *
+ * @name: Name of node to look for
+ * @return Node that was found, ofnode_null() if not found
+ */
+ofnode binman_section_find_node(const char *name);
+
/**
* binman_init() - Set up the binman symbol information
*
#include <dm.h>
#include <log.h>
#include <malloc.h>
+#include <mapmem.h>
/**
* struct binman_info - Information needed by the binman library
return binman_entry_find_internal(binman->image, name, entry);
}
+int binman_entry_map(ofnode parent, const char *name, void **bufp, int *sizep)
+{
+ struct binman_entry entry;
+ int ret;
+
+ if (binman->rom_offset == ROM_OFFSET_NONE)
+ return -EPERM;
+ ret = binman_entry_find_internal(parent, name, &entry);
+ if (ret)
+ return log_msg_ret("entry", ret);
+ if (sizep)
+ *sizep = entry.size;
+ *bufp = map_sysmem(entry.image_pos + binman->rom_offset, entry.size);
+
+ return 0;
+}
+
+ofnode binman_section_find_node(const char *name)
+{
+ return ofnode_find_subnode(binman->image, name);
+}
+
void binman_set_rom_offset(int rom_offset)
{
binman->rom_offset = rom_offset;