diff options
Diffstat (limited to 'contrib/syslinux/syslinux-4.03/com32/sysdump/memmap.c')
-rw-r--r-- | contrib/syslinux/syslinux-4.03/com32/sysdump/memmap.c | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/contrib/syslinux/syslinux-4.03/com32/sysdump/memmap.c b/contrib/syslinux/syslinux-4.03/com32/sysdump/memmap.c deleted file mode 100644 index 251107d..0000000 --- a/contrib/syslinux/syslinux-4.03/com32/sysdump/memmap.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Dump memory map information - */ - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <com32.h> -#include "sysdump.h" -#include "backend.h" - -#define E820_CHUNK 128 -struct e820_info { - uint32_t ebx; - uint32_t len; - uint8_t data[24]; -}; - -static void dump_e820(struct backend *be) -{ - com32sys_t ireg, oreg; - struct e820_info *curr; - struct e820_info *buf, *p; - int nentry, nalloc; - - curr = lmalloc(sizeof *curr); - - buf = p = NULL; - nentry = nalloc = 0; - memset(&ireg, 0, sizeof ireg); - memset(&curr, 0, sizeof curr); - - ireg.eax.l = 0xe820; - ireg.edx.l = 0x534d4150; - ireg.ecx.l = sizeof curr->data; - ireg.es = SEG(curr->data); - ireg.edi.w[0] = OFFS(curr->data); - - do { - __intcall(0x15, &ireg, &oreg); - if ((oreg.eflags.l & EFLAGS_CF) || - oreg.eax.l != 0x534d4150) - break; - - if (nentry >= nalloc) { - nalloc += E820_CHUNK; - buf = realloc(buf, nalloc*sizeof *buf); - if (!buf) - return; /* FAILED */ - } - memcpy(buf[nentry].data, curr->data, sizeof curr->data); - buf[nentry].ebx = ireg.ebx.l; - buf[nentry].len = oreg.ecx.l; - nentry++; - - ireg.ebx.l = oreg.ebx.l; - } while (ireg.ebx.l); - - if (nentry) - cpio_writefile(be, "memmap/15e820", buf, nentry*sizeof *buf); - - free(buf); - lfree(curr); -} - -void dump_memory_map(struct backend *be) -{ - com32sys_t ireg, oreg; - - cpio_mkdir(be, "memmap"); - - memset(&ireg, 0, sizeof ireg); - __intcall(0x12, &ireg, &oreg); - cpio_writefile(be, "memmap/12", &oreg, sizeof oreg); - - ireg.eax.b[1] = 0x88; - __intcall(0x15, &ireg, &oreg); - cpio_writefile(be, "memmap/1588", &oreg, sizeof oreg); - - ireg.eax.w[0] = 0xe801; - __intcall(0x15, &ireg, &oreg); - cpio_writefile(be, "memmap/15e801", &oreg, sizeof oreg); - - dump_e820(be); -} |