summaryrefslogtreecommitdiffstats
path: root/contrib/syslinux-4.02/com32/include/syslinux/movebits.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/syslinux-4.02/com32/include/syslinux/movebits.h')
-rw-r--r--contrib/syslinux-4.02/com32/include/syslinux/movebits.h89
1 files changed, 89 insertions, 0 deletions
diff --git a/contrib/syslinux-4.02/com32/include/syslinux/movebits.h b/contrib/syslinux-4.02/com32/include/syslinux/movebits.h
new file mode 100644
index 0000000..54ee7ff
--- /dev/null
+++ b/contrib/syslinux-4.02/com32/include/syslinux/movebits.h
@@ -0,0 +1,89 @@
+#ifndef _SYSLINUX_MOVEBITS_H
+#define _SYSLINUX_MOVEBITS_H
+
+#include <inttypes.h>
+#include <stdio.h>
+
+typedef uint32_t addr_t;
+
+/*
+ * A syslinux_movelist is a linked list of move operations. The ordering
+ * is important, so no sorting requirement can be imposed.
+ */
+struct syslinux_movelist {
+ addr_t dst;
+ addr_t src;
+ addr_t len;
+ struct syslinux_movelist *next;
+};
+
+/*
+ * A syslinux_memmap is a sorted, linked list of memory regions,
+ * guaranteed to satisfy the constraint that no adjacent zones have
+ * the same type. Undefined memory ranges are represented with entries;
+ * they have type SMT_UNDEFINED.
+ *
+ * Note that there is no length field. The length of a region is obtained
+ * by looking at the start of the next entry in the chain.
+ */
+enum syslinux_memmap_types {
+ SMT_ERROR = -2, /* Internal error token */
+ SMT_END = -1, /* End of list */
+ SMT_UNDEFINED = 0, /* Unknown range */
+ SMT_FREE = 1, /* Available memory */
+ SMT_RESERVED, /* Unusable memory */
+ SMT_ALLOC, /* Memory allocated by user */
+ SMT_ZERO, /* Memory that should be zeroed */
+};
+
+struct syslinux_memmap {
+ addr_t start;
+ enum syslinux_memmap_types type;
+ struct syslinux_memmap *next;
+};
+
+/*
+ * moves is computed from "fraglist" and "memmap". Areas that are
+ * to be zeroed should be marked as such in the memmap, not in the
+ * fraglist.
+ */
+
+int syslinux_compute_movelist(struct syslinux_movelist **movelist,
+ struct syslinux_movelist *fraglist,
+ struct syslinux_memmap *memmap);
+
+struct syslinux_memmap *syslinux_memory_map(void);
+void syslinux_free_movelist(struct syslinux_movelist *);
+int syslinux_add_movelist(struct syslinux_movelist **,
+ addr_t dst, addr_t src, addr_t len);
+int syslinux_allocate_from_list(struct syslinux_movelist **freelist,
+ addr_t dst, addr_t len);
+int syslinux_do_shuffle(struct syslinux_movelist *fraglist,
+ struct syslinux_memmap *memmap,
+ addr_t entry_point, addr_t entry_type,
+ uint16_t bootflags);
+struct syslinux_memmap *syslinux_target_memmap(struct syslinux_movelist
+ *fraglist,
+ struct syslinux_memmap *memmap);
+
+/* Operatons on struct syslinux_memmap */
+struct syslinux_memmap *syslinux_init_memmap(void);
+int syslinux_add_memmap(struct syslinux_memmap **list,
+ addr_t start, addr_t len,
+ enum syslinux_memmap_types type);
+enum syslinux_memmap_types syslinux_memmap_type(struct syslinux_memmap *list,
+ addr_t start, addr_t len);
+int syslinux_memmap_largest(struct syslinux_memmap *list,
+ enum syslinux_memmap_types type,
+ addr_t * start, addr_t * len);
+void syslinux_free_memmap(struct syslinux_memmap *list);
+struct syslinux_memmap *syslinux_dup_memmap(struct syslinux_memmap *list);
+int syslinux_memmap_find(struct syslinux_memmap *list,
+ enum syslinux_memmap_types type,
+ addr_t * start, addr_t * len, addr_t align);
+
+/* Debugging functions */
+void syslinux_dump_movelist(FILE * file, struct syslinux_movelist *ml);
+void syslinux_dump_memmap(FILE * file, struct syslinux_memmap *memmap);
+
+#endif /* _SYSLINUX_MOVEBITS_H */