[syslinux:elflink] elflink: add several files to com32/elflink/modules

syslinux-bot for Feng Tang feng.tang at intel.com
Thu Aug 12 21:03:32 PDT 2010


Commit-ID:  f83c57717377fa74c89d27e72bf138d4265731fb
Gitweb:     http://syslinux.zytor.com/commit/f83c57717377fa74c89d27e72bf138d4265731fb
Author:     Feng Tang <feng.tang at intel.com>
AuthorDate: Wed, 30 Jun 2010 14:11:21 +0800
Committer:  Feng Tang <feng.tang at intel.com>
CommitDate: Tue, 20 Jul 2010 11:10:04 +0800

elflink: add several files to com32/elflink/modules

They are meminfo/pcitest/dir/vesainfo/cpuid/cpuidtest. But not
all of their .c32 works.

One note from vesainfo.c32 is, we need change all cs_bounce usage
to lmalloc/free


---
 build.sh                                |    1 +
 com32/elflink/modules/MCONFIG           |    2 +-
 com32/elflink/modules/Makefile          |   21 ++++++++++++-
 com32/{ => elflink}/modules/cpuid.c     |    9 ++++--
 com32/{ => elflink}/modules/cpuidtest.c |    6 ++-
 com32/{ => elflink}/modules/dir.c       |    7 ++--
 com32/{ => elflink}/modules/disk.c      |   12 +++----
 com32/{ => elflink}/modules/meminfo.c   |    8 ++--
 com32/{ => elflink}/modules/pcitest.c   |   10 ++----
 com32/{ => elflink}/modules/vesainfo.c  |   49 +++++++++++++++++++------------
 10 files changed, 79 insertions(+), 46 deletions(-)

diff --git a/build.sh b/build.sh
index bcd17eb..1f25d8d 100755
--- a/build.sh
+++ b/build.sh
@@ -2,5 +2,6 @@ make -j 4 || exit 1
 cp extlinux/extlinux /home/feng/test/syslinux/
 cp com32/elflink/modules/*.c32 /home/feng/test/syslinux/cd/
 cp memdisk/memdisk /home/feng/test/syslinux/cd/
+cp modules.dep /home/feng/test/syslinux/cd/
 sudo extlinux/extlinux -i /home/feng/test/syslinux/cd/
 qemu -hda /home/feng/test/syslinux/test.img
diff --git a/com32/elflink/modules/MCONFIG b/com32/elflink/modules/MCONFIG
index 7157e1b..0049128 100644
--- a/com32/elflink/modules/MCONFIG
+++ b/com32/elflink/modules/MCONFIG
@@ -36,7 +36,7 @@ com32 = $(topdir)/com32
 CFLAGS     = $(GCCOPT) -W -Wall -march=i386 \
 	     -fomit-frame-pointer -D__COM32__ -DDYNAMIC_MODULE \
 	     -nostdinc -iwithprefix include \
-	     -I$(com32)/libutil/include -I$(com32)/include
+	     -I$(com32)/libutil/include -I$(com32)/include -I$(com32)/gplinclude
 SFLAGS     = $(GCCOPT) -D__COM32__ -march=i386
 LDFLAGS    = -m elf_i386 -shared --hash-style=gnu -T $(com32)/lib/elf32.ld
 LIBGCC    := $(shell $(CC) $(GCCOPT) --print-libgcc)
diff --git a/com32/elflink/modules/Makefile b/com32/elflink/modules/Makefile
index ee16f8b..9c9cb97 100644
--- a/com32/elflink/modules/Makefile
+++ b/com32/elflink/modules/Makefile
@@ -14,7 +14,8 @@ topdir = ../../..
 include MCONFIG
 
 MODULES	  = hello.c32 sort.c32 mytest.c32 menumain.c32 printmsg.c32 background.c32 passwd.c32 sha1hash.c32 \
-	unbase64.c32 sha512crypt.c32 md5.c32 crypt-md5.c32 sha256crypt.c32 get_key.c32 ansiraw.c32 test.c32 menu.c32 drain.c32
+	unbase64.c32 sha512crypt.c32 md5.c32 crypt-md5.c32 sha256crypt.c32 get_key.c32 ansiraw.c32 test.c32 \
+	meminfo.c32 menu.c32 drain.c32 dir.c32 pcitest.c32 vesainfo.c32 cpuid.c32 cpuidtest.c32
 
 TESTFILES =
 
@@ -74,6 +75,24 @@ get_key.c32 : get_key.o
 ansiraw.c32 : ansiraw.o
 	$(LD) $(LDFLAGS) -o $@ $^
 
+meminfo.c32 : meminfo.o
+	$(LD) $(LDFLAGS) -o $@ $^
+
+pcitest.c32 : pcitest.o
+	$(LD) $(LDFLAGS) -o $@ $^
+
+dir.c32 : dir.o
+	$(LD) $(LDFLAGS) -o $@ $^
+
+vesainfo.c32 : vesainfo.o
+	$(LD) $(LDFLAGS) -o $@ $^
+
+cpuid.c32 : cpuid.o
+	$(LD) $(LDFLAGS) -o $@ $^
+
+cpuidtest.c32 : cpuidtest.o
+	$(LD) $(LDFLAGS) -o $@ $^
+
 tidy dist:
 	rm -f *.o *.lo *.a *.lst .*.d 
 
diff --git a/com32/modules/cpuid.c b/com32/elflink/modules/cpuid.c
similarity index 90%
copy from com32/modules/cpuid.c
copy to com32/elflink/modules/cpuid.c
index 78cb3f5..eac59d5 100644
--- a/com32/modules/cpuid.c
+++ b/com32/elflink/modules/cpuid.c
@@ -16,6 +16,8 @@
 #include <console.h>
 #include <com32.h>
 
+#include <sys/module.h>
+
 static void dump_reg(const char *name, uint32_t val)
 {
     int i;
@@ -29,18 +31,18 @@ static void dump_reg(const char *name, uint32_t val)
     putchar('\n');
 }
 
-int main(int argc, char *argv[])
+static int cpuid_main(int argc, char *argv[])
 {
     uint32_t leaf, counter;
     uint32_t eax, ebx, ecx, edx;
 
-    openconsole(&dev_null_r, &dev_stdcon_w);
-
     if (argc < 2 || argc > 4) {
 	printf("Usage: %s leaf [counter]\n", argv[0]);
 	exit(1);
     }
 
+	mp("argv[1] = %s, argv[2] = %s", argv[0], argv[1]);
+
     leaf = strtoul(argv[1], NULL, 0);
     counter = (argc > 2) ? strtoul(argv[2], NULL, 0) : 0;
 
@@ -58,3 +60,4 @@ int main(int argc, char *argv[])
 
     return 0;
 }
+MODULE_MAIN(cpuid_main);
diff --git a/com32/modules/cpuidtest.c b/com32/elflink/modules/cpuidtest.c
similarity index 97%
copy from com32/modules/cpuidtest.c
copy to com32/elflink/modules/cpuidtest.c
index b768885..942955f 100644
--- a/com32/modules/cpuidtest.c
+++ b/com32/elflink/modules/cpuidtest.c
@@ -37,12 +37,13 @@
 #include <console.h>
 #include "cpuid.h"
 
+#include <sys/module.h>
+
 char display_line;
 
-int main(void)
+static int cpuidtest_main(void)
 {
     s_cpu cpu;
-    openconsole(&dev_stdcon_r, &dev_stdcon_w);
 
     for (;;) {
 	detect_cpu(&cpu);
@@ -136,3 +137,4 @@ int main(void)
 
     return 0;
 }
+MODULE_MAIN(cpuidtest_main);
diff --git a/com32/modules/dir.c b/com32/elflink/modules/dir.c
similarity index 97%
copy from com32/modules/dir.c
copy to com32/elflink/modules/dir.c
index c9d9370..17e7880 100644
--- a/com32/modules/dir.c
+++ b/com32/elflink/modules/dir.c
@@ -11,6 +11,8 @@
 #include <unistd.h>
 #include <getkey.h>
 
+#include <sys/module.h>
+
 static int rows, cols;		/* Screen parameters */
 
 #define DIR_CHUNK	1024
@@ -151,11 +153,9 @@ nomem:
     return -1;
 }
 
-int main(int argc, char *argv[])
+static int dir_main(int argc, char *argv[])
 {
     int rv;
-
-    openconsole(&dev_rawcon_r, &dev_stdcon_w);
     
     if (getscreensize(1, &rows, &cols)) {
 	/* Unknown screen size? */
@@ -174,4 +174,5 @@ int main(int argc, char *argv[])
 
     return rv ? 1 : 0;
 }
+MODULE_MAIN(dir_main);
   
diff --git a/com32/modules/disk.c b/com32/elflink/modules/disk.c
similarity index 93%
copy from com32/modules/disk.c
copy to com32/elflink/modules/disk.c
index ca4b598..3c864bd 100644
--- a/com32/modules/disk.c
+++ b/com32/elflink/modules/disk.c
@@ -19,16 +19,13 @@
 #include <disk/errno_disk.h>
 #include <disk/error.h>
 
-int main(int argc, char *argv[])
+#include <sys/module.h>
+
+int disk_main(int argc, char *argv[])
 {
 	struct driveinfo drive;
 	struct driveinfo *d = &drive;
 
-	(void)argc;
-	(void)argv;
-
-	openconsole(&dev_null_r, &dev_stdcon_w);
-
 	for (int disk = 0x80; disk < 0xff; disk++) {
 		memset(d, 0, sizeof(struct driveinfo));
 		d->disk = disk;
@@ -39,7 +36,7 @@ int main(int argc, char *argv[])
 			continue;
 
 		if (errno_disk) {
-			get_error("reading disk");
+			printf("reading disk");
 			continue;
 		}
 
@@ -60,3 +57,4 @@ int main(int argc, char *argv[])
 	}
 	return 0;
 }
+MODULE_MAIN(disk_main);
diff --git a/com32/modules/meminfo.c b/com32/elflink/modules/meminfo.c
similarity index 97%
copy from com32/modules/meminfo.c
copy to com32/elflink/modules/meminfo.c
index 6e24f35..d5e3f38 100644
--- a/com32/modules/meminfo.c
+++ b/com32/elflink/modules/meminfo.c
@@ -22,6 +22,8 @@
 #include <console.h>
 #include <com32.h>
 
+#include <sys/module.h>
+
 struct e820_data {
     uint64_t base;
     uint64_t len;
@@ -115,12 +117,10 @@ static void dump_legacy(void)
 	   oreg.ecx.w[0], oreg.ecx.w[0], oreg.edx.w[0], oreg.edx.w[0] << 6);
 }
 
-int main(void)
+static int meminfo_main(void)
 {
-    openconsole(&dev_null_r, &dev_stdcon_w);
-
     dump_legacy();
     dump_e820();
-
     return 0;
 }
+MODULE_MAIN(meminfo_main);
diff --git a/com32/modules/pcitest.c b/com32/elflink/modules/pcitest.c
similarity index 97%
copy from com32/modules/pcitest.c
copy to com32/elflink/modules/pcitest.c
index 672023a..dcb8098 100644
--- a/com32/modules/pcitest.c
+++ b/com32/elflink/modules/pcitest.c
@@ -40,6 +40,8 @@
 #include <sys/pci.h>
 #include <stdbool.h>
 
+#include <sys/module.h>
+
 #ifdef DEBUG
 # define dprintf printf
 #else
@@ -99,17 +101,12 @@ void display_pci_devices(struct pci_domain *pci_domain)
     }
 }
 
-int main(int argc, char *argv[])
+static int pcitest_main(int argc, char *argv[])
 {
     struct pci_domain *pci_domain;
     int return_code = 0;
     int nb_pci_devices = 0;
 
-    (void)argc;
-    (void)argv;
-
-    openconsole(&dev_stdcon_r, &dev_stdcon_w);
-
     /* Scanning to detect pci buses and devices */
     printf("PCI: Scanning PCI BUS\n");
     pci_domain = pci_scan();
@@ -156,3 +153,4 @@ int main(int argc, char *argv[])
     display_pci_devices(pci_domain);
     return 0;
 }
+MODULE_MAIN(pcitest_main);
diff --git a/com32/modules/vesainfo.c b/com32/elflink/modules/vesainfo.c
similarity index 69%
copy from com32/modules/vesainfo.c
copy to com32/elflink/modules/vesainfo.c
index 00181e4..05e4f2c 100644
--- a/com32/modules/vesainfo.c
+++ b/com32/elflink/modules/vesainfo.c
@@ -11,6 +11,8 @@
 #include <inttypes.h>
 #include "../lib/sys/vesa/vesa.h"
 
+#include <sys/module.h>
+
 /* Wait for a keypress */
 static void wait_key(void)
 {
@@ -20,25 +22,31 @@ static void wait_key(void)
 
 static void print_modes(void)
 {
-    static com32sys_t rm;
-    struct vesa_general_info *gi;
-    struct vesa_mode_info *mi;
-    uint16_t mode, *mode_ptr;
-    int lines;
-
-    /* Allocate space in the bounce buffer for these structures */
-    gi = &((struct vesa_info *)__com32.cs_bounce)->gi;
-    mi = &((struct vesa_info *)__com32.cs_bounce)->mi;
-
-    gi->signature = VBE2_MAGIC;	/* Get VBE2 extended data */
-    rm.eax.w[0] = 0x4F00;	/* Get SVGA general information */
-    rm.edi.w[0] = OFFS(gi);
-    rm.es = SEG(gi);
-    __intcall(0x10, &rm, &rm);
+	static com32sys_t rm;
+	struct vesa_general_info *gi;
+	struct vesa_mode_info *mi;
+	uint16_t mode, *mode_ptr;
+	int lines;
+
+	struct vesa_info *vesa;
+
+	vesa = lmalloc(sizeof(*vesa));
+	if (!vesa) {
+		printf("vesainfo.c32: fail in lmalloc\n");
+		return;
+	}
+	gi = &vesa->gi;
+	mi = &vesa->mi;
+
+	gi->signature = VBE2_MAGIC;	/* Get VBE2 extended data */
+	rm.eax.w[0] = 0x4F00;	/* Get SVGA general information */
+	rm.edi.w[0] = OFFS(gi);
+	rm.es = SEG(gi);
+	__intcall(0x10, &rm, &rm);
 
     if (rm.eax.w[0] != 0x004F) {
 	printf("No VESA BIOS detected\n");
-	return;
+	goto exit;
     } else if (gi->signature != VESA_MAGIC) {
 	printf("VESA information structure has bad magic, trying anyway...\n");
     }
@@ -71,12 +79,15 @@ static void print_modes(void)
 	       mode, mi->mode_attr, mi->h_res, mi->v_res, mi->bpp,
 	       mi->memory_layout, mi->rpos, mi->gpos, mi->bpos);
     }
+
+exit:
+	free(vesa);
+	return;
 }
 
-int main(void)
+static int vesainfo_main(void)
 {
-    openconsole(&dev_rawcon_r, &dev_stdcon_w);
-
     print_modes();
     return 0;
 }
+MODULE_MAIN(vesainfo_main);



More information about the Syslinux-commits mailing list