mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-22 23:32:39 +00:00
Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e4e4ee33f | ||
|
|
e1444e5399 | ||
|
|
ef57ad6164 | ||
|
|
72bd5756af | ||
|
|
295e041189 | ||
|
|
3f6f84f9e0 |
No files matched your search
@@ -246,4 +246,3 @@ build-aux/test-driver
|
|||||||
/garbage-gen
|
/garbage-gen
|
||||||
/garbage-gen.exe
|
/garbage-gen.exe
|
||||||
/grub-fs-tester
|
/grub-fs-tester
|
||||||
grub-core/build-grub-module-verifier
|
|
||||||
@@ -15,14 +15,15 @@ configuring the GRUB.
|
|||||||
Note: older versions may work but support is limited
|
Note: older versions may work but support is limited
|
||||||
|
|
||||||
Experimental support for clang 3.3 or later (results in much bigger binaries)
|
Experimental support for clang 3.3 or later (results in much bigger binaries)
|
||||||
for i386, x86_64, arm (including thumb), arm64, mips(el), powerpc, sparc64
|
for i386, x86_64, arm (except thumb), arm64, mips(el), powerpc, sparc64
|
||||||
Note: clang 3.2 or later works for i386 and x86_64 targets but results in
|
Note: clang 3.2 or later works for i386 and x86_64 targets but results in
|
||||||
much bigger binaries.
|
much bigger binaries.
|
||||||
earlier versions not tested
|
earlier versions not tested
|
||||||
Note: clang 3.2 or later works for arm
|
Note: clang 3.2 or later works for arm
|
||||||
|
None of tested clang versions generated usable thumb code
|
||||||
earlier versions not tested
|
earlier versions not tested
|
||||||
Note: clang on arm64 is not supported due to
|
Note: clang 3.3 or later works for arm64
|
||||||
https://llvm.org/bugs/show_bug.cgi?id=26030
|
earlier versions have no arm64 support
|
||||||
Note: clang 3.3 or later works for mips(el)
|
Note: clang 3.3 or later works for mips(el)
|
||||||
earlier versions fail to generate .reginfo and hence gprel relocations
|
earlier versions fail to generate .reginfo and hence gprel relocations
|
||||||
fail.
|
fail.
|
||||||
|
|||||||
+27
-40
@@ -145,116 +145,109 @@ if COND_real_platform
|
|||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_multiboot
|
if COND_i386_multiboot
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_ieee1275
|
if COND_i386_ieee1275
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_qemu
|
if COND_i386_qemu
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_pc
|
if COND_i386_pc
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_efi
|
if COND_i386_efi
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_x86_64_efi
|
if COND_x86_64_efi
|
||||||
QEMU32=qemu-system-x86_64
|
QEMU32=qemu-system-x86_64
|
||||||
MINIMUM_CPU_LINUX=core2duo
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -static -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -static -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.mips: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
linux.init.mips: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
||||||
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.ppc: $(srcdir)/grub-core/tests/boot/linux.init-ppc.S
|
linux.init.ppc: $(srcdir)/grub-core/tests/boot/linux.init-ppc.S
|
||||||
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.mipsel: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
linux.init.mipsel: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
||||||
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.loongson: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
linux.init.loongson: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
||||||
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -DREBOOT=1
|
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -DREBOOT=1
|
||||||
|
|
||||||
multiboot.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
multiboot.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
||||||
|
|
||||||
kfreebsd.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kfreebsd.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
||||||
|
|
||||||
kfreebsd.aout: kfreebsd.elf
|
kfreebsd.aout: kfreebsd.elf
|
||||||
$(TARGET_OBJCOPY) -O a.out-i386-linux $< $@ -j .text
|
$(TARGET_OBJCOPY) -O a.out-i386-linux $< $@ -R .note.gnu.build-id -R .note.gnu.gold-version
|
||||||
|
|
||||||
pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -static -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x7c00 -m32
|
$(TARGET_CC) -o $@ $< -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x7c00 -m32
|
||||||
|
|
||||||
pc-chainloader.bin: pc-chainloader.elf
|
pc-chainloader.bin: pc-chainloader.elf
|
||||||
$(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@;
|
$(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@;
|
||||||
|
|
||||||
ntldr.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
ntldr.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0 -m32
|
$(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0 -m32
|
||||||
|
|
||||||
ntldr.bin: ntldr.elf
|
ntldr.bin: ntldr.elf
|
||||||
$(TARGET_OBJCOPY) -O binary --strip-unneeded -j .text $< $@;
|
$(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@;
|
||||||
|
|
||||||
multiboot2.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
multiboot2.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -static -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1
|
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1
|
||||||
|
|
||||||
kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
$(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
||||||
|
|
||||||
kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
||||||
|
|
||||||
knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -DTARGET_NETBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m64 -DTARGET_NETBSD=1 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
kopenbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kopenbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -DTARGET_OPENBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m64 -DTARGET_OPENBSD=1 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux-initramfs.mips: linux.init.mips Makefile
|
linux-initramfs.mips: linux.init.mips Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.ppc: linux.init.ppc Makefile
|
linux-initramfs.ppc: linux.init.ppc Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.mipsel: linux.init.mipsel Makefile
|
linux-initramfs.mipsel: linux.init.mipsel Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.loongson: linux.init.loongson Makefile
|
linux-initramfs.loongson: linux.init.loongson Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.i386: linux.init.i386 Makefile
|
linux-initramfs.i386: linux.init.i386 Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.x86_64: linux.init.x86_64 Makefile
|
linux-initramfs.x86_64: linux.init.x86_64 Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile
|
kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR
|
||||||
@@ -313,7 +306,7 @@ bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64.gz $(GRUB_PAYLOADS_DIR)/
|
|||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
|
|
||||||
bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg --qemu-opts="-cpu $(MINIMUM_CPU_LINUX)" | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
|
|
||||||
bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
@@ -376,12 +369,6 @@ if COND_i386_coreboot
|
|||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_ieee1275
|
|
||||||
# *BSD requires ACPI
|
|
||||||
#legacy protocol (linux16) makes early BIOS calls.
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_i386_pc
|
if COND_i386_pc
|
||||||
#pc chainloader by definition is only for i386-pc
|
#pc chainloader by definition is only for i386-pc
|
||||||
#ntldr and bootmgr require BIOS.
|
#ntldr and bootmgr require BIOS.
|
||||||
@@ -423,7 +410,7 @@ bootcheck: $(BOOTCHECKS)
|
|||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
default_payload.elf: grub-mkstandalone grub-mkimage FORCE
|
default_payload.elf: grub-mkstandalone grub-mkimage FORCE
|
||||||
test -f $@ && rm $@ || true
|
rm $@
|
||||||
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(shell cat grub-core/fs.lst) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(shell cat grub-core/fs.lst) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -416,7 +416,7 @@ program = {
|
|||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ New in 2.02:
|
|||||||
* ZFS features support.
|
* ZFS features support.
|
||||||
* ZFS LZ4 support.
|
* ZFS LZ4 support.
|
||||||
* XFS V5 format support.
|
* XFS V5 format support.
|
||||||
* LVM RAID1 support.
|
|
||||||
|
|
||||||
* New/improved terminal and video support:
|
* New/improved terminal and video support:
|
||||||
* Monochrome text (matching `hercules' in GRUB Legacy).
|
* Monochrome text (matching `hercules' in GRUB Legacy).
|
||||||
@@ -50,9 +49,6 @@ New in 2.02:
|
|||||||
* Improve TFTP robustness.
|
* Improve TFTP robustness.
|
||||||
* Parse `nd' disk names in GRUB Legacy configuration files.
|
* Parse `nd' disk names in GRUB Legacy configuration files.
|
||||||
* Issue separate DNS queries for IPv4 and IPv6.
|
* Issue separate DNS queries for IPv4 and IPv6.
|
||||||
* Support IPv6 Router Advertisement to configure default router.
|
|
||||||
* New variable net_<interface>_next_server containing next server
|
|
||||||
from BOOTP reply.
|
|
||||||
|
|
||||||
* Coreboot improvements:
|
* Coreboot improvements:
|
||||||
* CBFS support both in on-disk images (loopback) and flash.
|
* CBFS support both in on-disk images (loopback) and flash.
|
||||||
@@ -100,8 +96,6 @@ New in 2.02:
|
|||||||
EFI Stall. If everything fails, use hardcoded frequency 800MHz.
|
EFI Stall. If everything fails, use hardcoded frequency 800MHz.
|
||||||
* Support Hyper-V Gen2 platforms which lack PIT for TSC calibration.
|
* Support Hyper-V Gen2 platforms which lack PIT for TSC calibration.
|
||||||
* Map UEFI Persistent Memory to E820 persistent memory.
|
* Map UEFI Persistent Memory to E820 persistent memory.
|
||||||
* New Xen loader on ARM64.
|
|
||||||
* Respect alignment requirement for block device IO buffers on EFI.
|
|
||||||
|
|
||||||
* Security:
|
* Security:
|
||||||
* Add optional facility to enforce that all files read by the core image
|
* Add optional facility to enforce that all files read by the core image
|
||||||
@@ -140,11 +134,6 @@ New in 2.02:
|
|||||||
menu entry immediately.
|
menu entry immediately.
|
||||||
* New `file' command and grub-file utility to check file types.
|
* New `file' command and grub-file utility to check file types.
|
||||||
* New syslinux configuration file parser.
|
* New syslinux configuration file parser.
|
||||||
* Set menu entry class to primary OS name returned by os-prober to display
|
|
||||||
OS specific icon.
|
|
||||||
* On Linux x86 detect EFI word size in grub-install and automatically select
|
|
||||||
correct platform (x86_64-efi or i386-efi) to install. Requires Linux kernel
|
|
||||||
4.0 or higher.
|
|
||||||
|
|
||||||
* Build system:
|
* Build system:
|
||||||
* Remove all uses of nested functions; GRUB no longer requires an
|
* Remove all uses of nested functions; GRUB no longer requires an
|
||||||
@@ -171,9 +160,6 @@ New in 2.02:
|
|||||||
* emu libusb support removed (was broken and unmaintained).
|
* emu libusb support removed (was broken and unmaintained).
|
||||||
* powerpc64le compile support.
|
* powerpc64le compile support.
|
||||||
* Use fixed timestamp when generating GRUB image for reproducible builds.
|
* Use fixed timestamp when generating GRUB image for reproducible builds.
|
||||||
* Verify at build time that modules contain only supported relocations and their
|
|
||||||
structure matches what boot-time module loader expects.
|
|
||||||
* Do not require fonts on powerpc-ieee1275.
|
|
||||||
|
|
||||||
* Revision control moved to git.
|
* Revision control moved to git.
|
||||||
|
|
||||||
|
|||||||
@@ -390,58 +390,6 @@ else
|
|||||||
[fi]
|
[fi]
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN([grub_CHECK_LINK_PIE],[
|
|
||||||
[# Position independent executable.
|
|
||||||
link_nopie_needed=no]
|
|
||||||
AC_MSG_CHECKING([whether linker needs disabling of PIE to work])
|
|
||||||
AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])])
|
|
||||||
|
|
||||||
[if eval "$ac_compile -Wl,-r,-d -nostdlib -Werror -o conftest.o" 2> /dev/null; then]
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
|
||||||
rm -f conftest.o
|
|
||||||
else
|
|
||||||
link_nopie_needed=yes]
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
[fi]
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
dnl Check if the Linker supports `-no-pie'.
|
|
||||||
AC_DEFUN([grub_CHECK_NO_PIE],
|
|
||||||
[AC_MSG_CHECKING([whether linker accepts -no-pie])
|
|
||||||
AC_CACHE_VAL(grub_cv_cc_ld_no_pie,
|
|
||||||
[save_LDFLAGS="$LDFLAGS"
|
|
||||||
LDFLAGS="$LDFLAGS -no-pie -nostdlib -Werror"
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
|
||||||
[grub_cv_cc_ld_no_pie=yes],
|
|
||||||
[grub_cv_cc_ld_no_pie=no])
|
|
||||||
LDFLAGS="$save_LDFLAGS"
|
|
||||||
])
|
|
||||||
AC_MSG_RESULT([$grub_cv_cc_ld_no_pie])
|
|
||||||
nopie_possible=no
|
|
||||||
if test "x$grub_cv_cc_ld_no_pie" = xyes ; then
|
|
||||||
nopie_possible=yes
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD],
|
|
||||||
[AC_MSG_CHECKING([whether linker accepts -nopie])
|
|
||||||
AC_CACHE_VAL(grub_cv_cc_ld_no_pie_oneword,
|
|
||||||
[save_LDFLAGS="$LDFLAGS"
|
|
||||||
LDFLAGS="$LDFLAGS -nopie -nostdlib -Werror"
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
|
||||||
[grub_cv_cc_ld_no_pie_oneword=yes],
|
|
||||||
[grub_cv_cc_ld_no_pie_oneword=no])
|
|
||||||
LDFLAGS="$save_LDFLAGS"
|
|
||||||
])
|
|
||||||
AC_MSG_RESULT([$grub_cv_cc_ld_no_pie_oneword])
|
|
||||||
nopie_oneword_possible=no
|
|
||||||
if test "x$grub_cv_cc_ld_no_pie_oneword" = xyes ; then
|
|
||||||
nopie_oneword_possible=yes
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl Check if the C compiler supports `-fPIC'.
|
dnl Check if the C compiler supports `-fPIC'.
|
||||||
AC_DEFUN([grub_CHECK_PIC],[
|
AC_DEFUN([grub_CHECK_PIC],[
|
||||||
[# Position independent executable.
|
[# Position independent executable.
|
||||||
|
|||||||
+1
-5
@@ -1,16 +1,12 @@
|
|||||||
/* on x86 old clang doesn't support .code16
|
/* on x86 old clang doesn't support .code16
|
||||||
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
||||||
which makes us go over boot sector size.
|
which makes us go over boot sector size. */
|
||||||
Starting with 3.9 clang emits 3-byte jumps but still creates 8-bytes movl
|
|
||||||
instead of 5-bytes, so code overflows into data. */
|
|
||||||
|
|
||||||
.code16
|
.code16
|
||||||
jmp far
|
jmp far
|
||||||
.org 4
|
.org 4
|
||||||
jmp nearer
|
jmp nearer
|
||||||
.org 6
|
.org 6
|
||||||
movl nearer, %ebx
|
|
||||||
.org 11
|
|
||||||
.space 100
|
.space 100
|
||||||
nearer:
|
nearer:
|
||||||
.space 200
|
.space 200
|
||||||
|
|||||||
+18
-64
@@ -31,7 +31,7 @@ dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables
|
|||||||
dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
|
dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
|
||||||
dnl used for the target type. See INSTALL for full list of variables.
|
dnl used for the target type. See INSTALL for full list of variables.
|
||||||
|
|
||||||
AC_INIT([GRUB],[2.03],[bug-grub@gnu.org])
|
AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
|
||||||
|
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
|
|
||||||
@@ -374,10 +374,7 @@ case "$host_os" in
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_CHECK_SIZEOF(off_t)
|
AC_CHECK_SIZEOF(off_t)
|
||||||
if test x"$ac_cv_sizeof_off_t" != x8 ; then
|
test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);;
|
||||||
AC_CHECK_SIZEOF(off64_t)
|
|
||||||
test x"$ac_cv_sizeof_off64_t" = x8 || AC_MSG_ERROR([Large file support is required])
|
|
||||||
fi;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test x$USE_NLS = xno; then
|
if test x$USE_NLS = xno; then
|
||||||
@@ -392,15 +389,7 @@ fi
|
|||||||
|
|
||||||
# Check for functions and headers.
|
# Check for functions and headers.
|
||||||
AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
|
AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
|
||||||
AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h limits.h)
|
AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h sys/mkdev.h limits.h)
|
||||||
|
|
||||||
# glibc 2.25 still includes sys/sysmacros.h in sys/types.h but emits deprecation
|
|
||||||
# warning which causes compilation failure later with -Werror. So use -Werror here
|
|
||||||
# as well to force proper sys/sysmacros.h detection.
|
|
||||||
SAVED_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$HOST_CFLAGS -Werror"
|
|
||||||
AC_HEADER_MAJOR
|
|
||||||
CFLAGS="$SAVED_CFLAGS"
|
|
||||||
|
|
||||||
AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
|
AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@@ -460,16 +449,6 @@ case "$build_os" in
|
|||||||
esac
|
esac
|
||||||
AC_SUBST(BUILD_EXEEXT)
|
AC_SUBST(BUILD_EXEEXT)
|
||||||
|
|
||||||
# In some build environments like termux /bin/sh is not a valid
|
|
||||||
# shebang. Use $SHELL instead if it's executable and /bin/sh isn't
|
|
||||||
BUILD_SHEBANG=/bin/sh
|
|
||||||
for she in /bin/sh "$SHELL"; do
|
|
||||||
if test -x "$she" ; then
|
|
||||||
BUILD_SHEBANG="$she"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
AC_SUBST(BUILD_SHEBANG)
|
|
||||||
|
|
||||||
# For gnulib.
|
# For gnulib.
|
||||||
gl_INIT
|
gl_INIT
|
||||||
|
|
||||||
@@ -1166,23 +1145,14 @@ if test "$target_cpu"-"$platform" = x86_64-efi; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$target_cpu" = xarm; then
|
if test "x$target_cpu" = xarm; then
|
||||||
AC_CACHE_CHECK([for options to disable movt and movw], grub_cv_target_cc_mno_movt, [
|
AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
|
||||||
grub_cv_target_cc_mno_movt=no
|
CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
|
||||||
for cand in "-mno-movt" \
|
|
||||||
"-mllvm -arm-use-movt=0"; do
|
|
||||||
if test x"$grub_cv_target_cc_mno_movt" != xno ; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
CFLAGS="$TARGET_CFLAGS $cand -Werror"
|
|
||||||
CPPFLAGS="$TARGET_CPPFLAGS"
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
[grub_cv_target_cc_mno_movt="$cand"], [])
|
[grub_cv_cc_mlong_calls=yes],
|
||||||
done
|
[grub_cv_cc_mlong_calls=no])
|
||||||
])
|
])
|
||||||
|
if test "x$grub_cv_cc_mlong_calls" = xyes; then
|
||||||
if test x"$grub_cv_target_cc_mno_movt" != xno ; then
|
TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
|
||||||
# A trick so that clang doesn't see it on link stage
|
|
||||||
TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_movt"
|
|
||||||
fi
|
fi
|
||||||
AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
|
AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
|
||||||
CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
|
CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
|
||||||
@@ -1215,26 +1185,13 @@ CFLAGS="$TARGET_CFLAGS"
|
|||||||
|
|
||||||
# Position independent executable.
|
# Position independent executable.
|
||||||
grub_CHECK_PIE
|
grub_CHECK_PIE
|
||||||
grub_CHECK_NO_PIE
|
|
||||||
grub_CHECK_NO_PIE_ONEWORD
|
|
||||||
grub_CHECK_LINK_PIE
|
|
||||||
[# Need that, because some distributions ship compilers that include
|
[# Need that, because some distributions ship compilers that include
|
||||||
# `-fPIE' or '-fpie' and '-pie' in the default specs.
|
# `-fPIE' in the default specs.
|
||||||
if [ x"$pie_possible" = xyes ]; then
|
if [ x"$pie_possible" = xyes ]; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE -fno-pie"
|
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$link_nopie_needed" = xyes ] || [ x"$pie_possible" = xyes ]; then
|
|
||||||
if [ x"$nopie_possible" = xyes ]; then
|
|
||||||
TARGET_LDFLAGS="$TARGET_LDFLAGS -no-pie"
|
|
||||||
fi
|
|
||||||
if [ x"$nopie_oneword_possible" = xyes ]; then
|
|
||||||
TARGET_LDFLAGS="$TARGET_LDFLAGS -nopie"
|
|
||||||
fi
|
|
||||||
fi]
|
fi]
|
||||||
|
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
LDFLAGS="$TARGET_LDFLAGS"
|
|
||||||
|
|
||||||
# Position independent executable.
|
# Position independent executable.
|
||||||
grub_CHECK_PIC
|
grub_CHECK_PIC
|
||||||
@@ -1243,12 +1200,9 @@ grub_CHECK_PIC
|
|||||||
# and reload $gp in every function.
|
# and reload $gp in every function.
|
||||||
# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
|
# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
|
||||||
# However with clang we need PIC for this reloading to happen.
|
# However with clang we need PIC for this reloading to happen.
|
||||||
# With arm64 we need relocations that are in some way representable in
|
|
||||||
# PE as we need to support arm64-efi. Without -fPIC clang generates
|
|
||||||
# movk's which aren't representable.
|
|
||||||
# Since default varies across dictributions use either -fPIC or -fno-PIC
|
# Since default varies across dictributions use either -fPIC or -fno-PIC
|
||||||
# explicitly.
|
# explicitly.
|
||||||
if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel || test x$target_cpu = xarm64 ) && test "x$grub_cv_cc_target_clang" = xyes ; then
|
if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
|
TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
|
||||||
elif [ x"$pic_possible" = xyes ]; then
|
elif [ x"$pic_possible" = xyes ]; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
|
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
|
||||||
@@ -1601,11 +1555,11 @@ if test x"$grub_build_mkfont_excuse" = x ; then
|
|||||||
else
|
else
|
||||||
enable_build_grub_mkfont=no
|
enable_build_grub_mkfont=no
|
||||||
fi
|
fi
|
||||||
if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$platform" = xcoreboot ); then
|
if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
|
||||||
if test x"$grub_build_mkfont_excuse" = x ; then
|
if test x"$grub_build_mkfont_excuse" = x ; then
|
||||||
AC_MSG_ERROR([qemu, coreboot and loongson ports need build-time grub-mkfont])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
|
||||||
else
|
else
|
||||||
AC_MSG_ERROR([qemu, coreboot and loongson ports need build-time grub-mkfont ($grub_build_mkfont_excuse)])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1675,11 +1629,11 @@ if test x"$enable_build_grub_mkfont" = xno ; then
|
|||||||
FONT_SOURCE=
|
FONT_SOURCE=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$platform" = xcoreboot ); then
|
if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
|
||||||
if test x"$grub_build_mkfont_excuse" = x ; then
|
if test x"$grub_build_mkfont_excuse" = x ; then
|
||||||
AC_MSG_ERROR([qemu, coreboot and loongson ports need unifont])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
|
||||||
else
|
else
|
||||||
AC_MSG_ERROR([qemu, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
+17
-31
@@ -2446,10 +2446,6 @@ The boot file name provided by DHCP. Read-only.
|
|||||||
The name of the DHCP server responsible for these boot parameters.
|
The name of the DHCP server responsible for these boot parameters.
|
||||||
Read-only.
|
Read-only.
|
||||||
|
|
||||||
@item net_@var{<interface>}_next_server
|
|
||||||
The IP address of the next (usually, TFTP) server provided by DHCP.
|
|
||||||
Read-only.
|
|
||||||
|
|
||||||
@item net_default_interface
|
@item net_default_interface
|
||||||
Initially set to name of network interface that was used to load grub.
|
Initially set to name of network interface that was used to load grub.
|
||||||
Read-write, although setting it affects only interpretation of
|
Read-write, although setting it affects only interpretation of
|
||||||
@@ -3066,7 +3062,6 @@ These variables have special meaning to GRUB.
|
|||||||
* net_@var{<interface>}_hostname::
|
* net_@var{<interface>}_hostname::
|
||||||
* net_@var{<interface>}_ip::
|
* net_@var{<interface>}_ip::
|
||||||
* net_@var{<interface>}_mac::
|
* net_@var{<interface>}_mac::
|
||||||
* net_@var{<interface>}_next_server::
|
|
||||||
* net_@var{<interface>}_rootpath::
|
* net_@var{<interface>}_rootpath::
|
||||||
* net_default_interface::
|
* net_default_interface::
|
||||||
* net_default_ip::
|
* net_default_ip::
|
||||||
@@ -3218,10 +3213,9 @@ source for more details.
|
|||||||
@node default
|
@node default
|
||||||
@subsection default
|
@subsection default
|
||||||
|
|
||||||
If this variable is set, it identifies a menu entry that should be
|
If this variable is set, it identifies a menu entry that should be selected
|
||||||
selected by default, possibly after a timeout (@pxref{timeout}). The
|
by default, possibly after a timeout (@pxref{timeout}). The entry may be
|
||||||
entry may be identified by number (starting from 0 at each level of
|
identified by number or by id.
|
||||||
the hierarchy), by title, or by id.
|
|
||||||
|
|
||||||
For example, if you have:
|
For example, if you have:
|
||||||
|
|
||||||
@@ -3237,26 +3231,24 @@ then you can make this the default using:
|
|||||||
default=example-gnu-linux
|
default=example-gnu-linux
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
If the entry is in a submenu, then it must be identified using the
|
If the entry is in a submenu, then it must be identified using the titles of
|
||||||
number, title, or id of each of the submenus starting from the top
|
each of the submenus starting from the top level followed by the number or
|
||||||
level, followed by the number, title, or id of the menu entry itself,
|
title of the menu entry itself, separated by @samp{>}. For example, take
|
||||||
with each element separated by @samp{>}. For example, take the
|
the following menu structure:
|
||||||
following menu structure:
|
|
||||||
|
|
||||||
@example
|
@example
|
||||||
GNU/Hurd --id gnu-hurd
|
Submenu 1
|
||||||
Standard Boot --id=gnu-hurd-std
|
Menu Entry 1
|
||||||
Rescue shell --id=gnu-hurd-rescue
|
Menu Entry 2
|
||||||
Other platforms --id=other
|
Submenu 2
|
||||||
Minix --id=minix
|
Submenu 3
|
||||||
Version 3.4.0 --id=minix-3.4.0
|
Menu Entry 3
|
||||||
Version 3.3.0 --id=minix-3.3.0
|
Menu Entry 4
|
||||||
GRUB Invaders --id=grub-invaders
|
Menu Entry 5
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
The more recent release of Minix would then be identified as
|
``Menu Entry 3'' would then be identified as
|
||||||
@samp{Other platforms>Minix>Version 3.4.0}, or as @samp{1>0>0}, or as
|
@samp{Submenu 2>Submenu 3>Menu Entry 3}.
|
||||||
@samp{other>minix>minix-3.4.0}.
|
|
||||||
|
|
||||||
This variable is often set by @samp{GRUB_DEFAULT} (@pxref{Simple
|
This variable is often set by @samp{GRUB_DEFAULT} (@pxref{Simple
|
||||||
configuration}), @command{grub-set-default}, or @command{grub-reboot}.
|
configuration}), @command{grub-set-default}, or @command{grub-reboot}.
|
||||||
@@ -3430,12 +3422,6 @@ The default is the value of @samp{color_normal} (@pxref{color_normal}).
|
|||||||
@xref{Network}.
|
@xref{Network}.
|
||||||
|
|
||||||
|
|
||||||
@node net_@var{<interface>}_next_server
|
|
||||||
@subsection net_@var{<interface>}_next_server
|
|
||||||
|
|
||||||
@xref{Network}.
|
|
||||||
|
|
||||||
|
|
||||||
@node net_@var{<interface>}_rootpath
|
@node net_@var{<interface>}_rootpath
|
||||||
@subsection net_@var{<interface>}_rootpath
|
@subsection net_@var{<interface>}_rootpath
|
||||||
|
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ BUILT_SOURCES += symlist.h
|
|||||||
|
|
||||||
symlist.c: symlist.h gensymlist.sh
|
symlist.c: symlist.h gensymlist.sh
|
||||||
$(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1)
|
$(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1)
|
||||||
cat symlist.p | $(SHELL) $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1)
|
cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1)
|
||||||
rm -f symlist.p
|
rm -f symlist.p
|
||||||
CLEANFILES += symlist.c
|
CLEANFILES += symlist.c
|
||||||
BUILT_SOURCES += symlist.c
|
BUILT_SOURCES += symlist.c
|
||||||
|
|||||||
+12
-17
@@ -229,10 +229,8 @@ kernel = {
|
|||||||
|
|
||||||
arm_efi = kern/arm/efi/init.c;
|
arm_efi = kern/arm/efi/init.c;
|
||||||
arm_efi = kern/arm/efi/misc.c;
|
arm_efi = kern/arm/efi/misc.c;
|
||||||
arm_efi = kern/efi/fdt.c;
|
|
||||||
|
|
||||||
arm64_efi = kern/arm64/efi/init.c;
|
arm64_efi = kern/arm64/efi/init.c;
|
||||||
arm64_efi = kern/efi/fdt.c;
|
|
||||||
|
|
||||||
i386_pc = kern/i386/pc/init.c;
|
i386_pc = kern/i386/pc/init.c;
|
||||||
i386_pc = kern/i386/pc/mmap.c;
|
i386_pc = kern/i386/pc/mmap.c;
|
||||||
@@ -244,7 +242,6 @@ kernel = {
|
|||||||
|
|
||||||
coreboot = kern/coreboot/mmap.c;
|
coreboot = kern/coreboot/mmap.c;
|
||||||
i386_coreboot = kern/i386/coreboot/cbtable.c;
|
i386_coreboot = kern/i386/coreboot/cbtable.c;
|
||||||
coreboot = kern/coreboot/cbtable.c;
|
|
||||||
arm_coreboot = kern/arm/coreboot/cbtable.c;
|
arm_coreboot = kern/arm/coreboot/cbtable.c;
|
||||||
|
|
||||||
i386_multiboot = kern/i386/multiboot_mmap.c;
|
i386_multiboot = kern/i386/multiboot_mmap.c;
|
||||||
@@ -601,6 +598,13 @@ module = {
|
|||||||
enable = arm_coreboot;
|
enable = arm_coreboot;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = dwc2;
|
||||||
|
common = bus/usb/dwc2.c;
|
||||||
|
arm_coreboot = bus/usb/dwc2-fdt.c;
|
||||||
|
enable = arm_coreboot;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = pci;
|
name = pci;
|
||||||
common = bus/pci.c;
|
common = bus/pci.c;
|
||||||
@@ -665,7 +669,6 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = cbtable;
|
name = cbtable;
|
||||||
common = kern/i386/coreboot/cbtable.c;
|
common = kern/i386/coreboot/cbtable.c;
|
||||||
common = kern/coreboot/cbtable.c;
|
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
enable = i386_efi;
|
enable = i386_efi;
|
||||||
enable = i386_qemu;
|
enable = i386_qemu;
|
||||||
@@ -847,7 +850,7 @@ module = {
|
|||||||
common = commands/gptsync.c;
|
common = commands/gptsync.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
/*module = {
|
||||||
name = halt;
|
name = halt;
|
||||||
nopc = commands/halt.c;
|
nopc = commands/halt.c;
|
||||||
i386_pc = commands/i386/pc/halt.c;
|
i386_pc = commands/i386/pc/halt.c;
|
||||||
@@ -863,8 +866,7 @@ module = {
|
|||||||
efi = lib/efi/halt.c;
|
efi = lib/efi/halt.c;
|
||||||
ieee1275 = lib/ieee1275/halt.c;
|
ieee1275 = lib/ieee1275/halt.c;
|
||||||
emu = lib/emu/halt.c;
|
emu = lib/emu/halt.c;
|
||||||
uboot = lib/dummy/halt.c;
|
uboot = lib/uboot/halt.c;
|
||||||
arm_coreboot = lib/dummy/halt.c;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -882,9 +884,8 @@ module = {
|
|||||||
mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
|
mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
|
||||||
xen = lib/xen/reboot.c;
|
xen = lib/xen/reboot.c;
|
||||||
uboot = lib/uboot/reboot.c;
|
uboot = lib/uboot/reboot.c;
|
||||||
arm_coreboot = lib/dummy/reboot.c;
|
|
||||||
common = commands/reboot.c;
|
common = commands/reboot.c;
|
||||||
};
|
};*/
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = hashsum;
|
name = hashsum;
|
||||||
@@ -1561,7 +1562,6 @@ module = {
|
|||||||
i386_xen = lib/i386/xen/relocator.S;
|
i386_xen = lib/i386/xen/relocator.S;
|
||||||
x86_64_xen = lib/x86_64/xen/relocator.S;
|
x86_64_xen = lib/x86_64/xen/relocator.S;
|
||||||
xen = lib/i386/relocator_common_c.c;
|
xen = lib/i386/relocator_common_c.c;
|
||||||
x86_64_efi = lib/x86_64/efi/relocator.c;
|
|
||||||
|
|
||||||
extra_dist = lib/i386/relocator_common.S;
|
extra_dist = lib/i386/relocator_common.S;
|
||||||
extra_dist = kern/powerpc/cache_flush.S;
|
extra_dist = kern/powerpc/cache_flush.S;
|
||||||
@@ -1576,8 +1576,8 @@ module = {
|
|||||||
name = datetime;
|
name = datetime;
|
||||||
cmos = lib/cmos_datetime.c;
|
cmos = lib/cmos_datetime.c;
|
||||||
efi = lib/efi/datetime.c;
|
efi = lib/efi/datetime.c;
|
||||||
uboot = lib/dummy/datetime.c;
|
uboot = lib/uboot/datetime.c;
|
||||||
arm_coreboot = lib/dummy/datetime.c;
|
arm_coreboot = lib/uboot/datetime.c;
|
||||||
sparc64_ieee1275 = lib/ieee1275/datetime.c;
|
sparc64_ieee1275 = lib/ieee1275/datetime.c;
|
||||||
powerpc_ieee1275 = lib/ieee1275/datetime.c;
|
powerpc_ieee1275 = lib/ieee1275/datetime.c;
|
||||||
sparc64_ieee1275 = lib/ieee1275/cmos.c;
|
sparc64_ieee1275 = lib/ieee1275/cmos.c;
|
||||||
@@ -1991,11 +1991,6 @@ module = {
|
|||||||
common = tests/example_functional_test.c;
|
common = tests/example_functional_test.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = strtoull_test;
|
|
||||||
common = tests/strtoull_test.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = setjmp_test;
|
name = setjmp_test;
|
||||||
common = tests/setjmp_test.c;
|
common = tests/setjmp_test.c;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
/* ehci.c - EHCI Support. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2013 Free Software Foundation, Inc.
|
* Copyright (C) 2011 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -18,15 +19,27 @@
|
|||||||
|
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/kernel.h>
|
#include <grub/time.h>
|
||||||
#include <grub/loader.h>
|
#include <grub/usb.h>
|
||||||
|
#include <grub/fdtbus.h>
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
dwc2_attach(const struct grub_fdtbus_dev *dev)
|
||||||
|
{
|
||||||
|
grub_dprintf ("dwc2", "Found snps-dwc2\n");
|
||||||
|
|
||||||
|
grub_dwc2_init_device (grub_fdtbus_map_reg (dev, 0, 0));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct grub_fdtbus_driver dwc2 =
|
||||||
|
{
|
||||||
|
.compatible = "snps,dwc2",
|
||||||
|
.attach = dwc2_attach
|
||||||
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_reboot (void)
|
grub_dwc2_pci_scan (void)
|
||||||
{
|
{
|
||||||
grub_machine_fini (GRUB_LOADER_FLAG_NORETURN);
|
grub_fdtbus_register (&dwc2);
|
||||||
|
|
||||||
/* Just stop here */
|
|
||||||
|
|
||||||
while (1);
|
|
||||||
}
|
}
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -1579,8 +1579,8 @@ grub_ehci_hubports (grub_usb_controller_t dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static grub_usb_err_t
|
static grub_usb_err_t
|
||||||
grub_ehci_portstatus (grub_usb_controller_t dev,
|
grub_ehci_reset_port (grub_usb_controller_t dev,
|
||||||
unsigned int port, unsigned int enable)
|
unsigned int port)
|
||||||
{
|
{
|
||||||
struct grub_ehci *e = (struct grub_ehci *) dev->data;
|
struct grub_ehci *e = (struct grub_ehci *) dev->data;
|
||||||
grub_uint64_t endtime;
|
grub_uint64_t endtime;
|
||||||
@@ -1602,14 +1602,6 @@ grub_ehci_portstatus (grub_usb_controller_t dev,
|
|||||||
if (grub_get_time_ms () > endtime)
|
if (grub_get_time_ms () > endtime)
|
||||||
return GRUB_USB_ERR_TIMEOUT;
|
return GRUB_USB_ERR_TIMEOUT;
|
||||||
|
|
||||||
if (!enable) /* We don't need reset port */
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci", "portstatus: Disabled.\n");
|
|
||||||
grub_dprintf ("ehci", "portstatus: end, status=0x%02x\n",
|
|
||||||
grub_ehci_port_read (e, port));
|
|
||||||
return GRUB_USB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "portstatus: enable\n");
|
grub_dprintf ("ehci", "portstatus: enable\n");
|
||||||
|
|
||||||
grub_boot_time ("Resetting port %d", port);
|
grub_boot_time ("Resetting port %d", port);
|
||||||
@@ -1810,7 +1802,7 @@ static struct grub_usb_controller_dev usb_controller = {
|
|||||||
.check_transfer = grub_ehci_check_transfer,
|
.check_transfer = grub_ehci_check_transfer,
|
||||||
.cancel_transfer = grub_ehci_cancel_transfer,
|
.cancel_transfer = grub_ehci_cancel_transfer,
|
||||||
.hubports = grub_ehci_hubports,
|
.hubports = grub_ehci_hubports,
|
||||||
.portstatus = grub_ehci_portstatus,
|
.reset_port = grub_ehci_reset_port,
|
||||||
.detect_dev = grub_ehci_detect_dev,
|
.detect_dev = grub_ehci_detect_dev,
|
||||||
/* estimated max. count of TDs for one bulk transfer */
|
/* estimated max. count of TDs for one bulk transfer */
|
||||||
.max_bulk_tds = GRUB_EHCI_N_TD * 3 / 4
|
.max_bulk_tds = GRUB_EHCI_N_TD * 3 / 4
|
||||||
|
|||||||
@@ -1224,8 +1224,8 @@ grub_ohci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static grub_usb_err_t
|
static grub_usb_err_t
|
||||||
grub_ohci_portstatus (grub_usb_controller_t dev,
|
grub_ohci_rest_port (grub_usb_controller_t dev,
|
||||||
unsigned int port, unsigned int enable)
|
unsigned int port)
|
||||||
{
|
{
|
||||||
struct grub_ohci *o = (struct grub_ohci *) dev->data;
|
struct grub_ohci *o = (struct grub_ohci *) dev->data;
|
||||||
grub_uint64_t endtime;
|
grub_uint64_t endtime;
|
||||||
@@ -1234,22 +1234,6 @@ grub_ohci_portstatus (grub_usb_controller_t dev,
|
|||||||
grub_dprintf ("ohci", "begin of portstatus=0x%02x\n",
|
grub_dprintf ("ohci", "begin of portstatus=0x%02x\n",
|
||||||
grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port));
|
grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port));
|
||||||
|
|
||||||
if (!enable) /* We don't need reset port */
|
|
||||||
{
|
|
||||||
/* Disable the port and wait for it. */
|
|
||||||
grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port,
|
|
||||||
GRUB_OHCI_CLEAR_PORT_ENABLE);
|
|
||||||
endtime = grub_get_time_ms () + 1000;
|
|
||||||
while ((grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port)
|
|
||||||
& (1 << 1)))
|
|
||||||
if (grub_get_time_ms () > endtime)
|
|
||||||
return GRUB_USB_ERR_TIMEOUT;
|
|
||||||
|
|
||||||
grub_dprintf ("ohci", "end of portstatus=0x%02x\n",
|
|
||||||
grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port));
|
|
||||||
return GRUB_USB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* OHCI does one reset signal 10ms long but USB spec.
|
/* OHCI does one reset signal 10ms long but USB spec.
|
||||||
* requests 50ms for root hub (no need to be continuous).
|
* requests 50ms for root hub (no need to be continuous).
|
||||||
* So, we do reset 5 times... */
|
* So, we do reset 5 times... */
|
||||||
@@ -1438,7 +1422,7 @@ static struct grub_usb_controller_dev usb_controller =
|
|||||||
.check_transfer = grub_ohci_check_transfer,
|
.check_transfer = grub_ohci_check_transfer,
|
||||||
.cancel_transfer = grub_ohci_cancel_transfer,
|
.cancel_transfer = grub_ohci_cancel_transfer,
|
||||||
.hubports = grub_ohci_hubports,
|
.hubports = grub_ohci_hubports,
|
||||||
.portstatus = grub_ohci_portstatus,
|
.reset_port = grub_ohci_reset_port,
|
||||||
.detect_dev = grub_ohci_detect_dev,
|
.detect_dev = grub_ohci_detect_dev,
|
||||||
/* estimated max. count of TDs for one bulk transfer */
|
/* estimated max. count of TDs for one bulk transfer */
|
||||||
.max_bulk_tds = GRUB_OHCI_TDS * 3 / 4
|
.max_bulk_tds = GRUB_OHCI_TDS * 3 / 4
|
||||||
|
|||||||
@@ -710,8 +710,8 @@ grub_uhci_iterate (grub_usb_controller_iterate_hook_t hook, void *hook_data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static grub_usb_err_t
|
static grub_usb_err_t
|
||||||
grub_uhci_portstatus (grub_usb_controller_t dev,
|
grub_uhci_reset_port (grub_usb_controller_t dev,
|
||||||
unsigned int port, unsigned int enable)
|
unsigned int port)
|
||||||
{
|
{
|
||||||
struct grub_uhci *u = (struct grub_uhci *) dev->data;
|
struct grub_uhci *u = (struct grub_uhci *) dev->data;
|
||||||
int reg;
|
int reg;
|
||||||
@@ -732,21 +732,6 @@ grub_uhci_portstatus (grub_usb_controller_t dev,
|
|||||||
status = grub_uhci_readreg16 (u, reg);
|
status = grub_uhci_readreg16 (u, reg);
|
||||||
grub_dprintf ("uhci", "detect=0x%02x\n", status);
|
grub_dprintf ("uhci", "detect=0x%02x\n", status);
|
||||||
|
|
||||||
if (!enable) /* We don't need reset port */
|
|
||||||
{
|
|
||||||
/* Disable the port. */
|
|
||||||
grub_uhci_writereg16 (u, reg, 0 << 2);
|
|
||||||
grub_dprintf ("uhci", "waiting for the port to be disabled\n");
|
|
||||||
endtime = grub_get_time_ms () + 1000;
|
|
||||||
while ((grub_uhci_readreg16 (u, reg) & (1 << 2)))
|
|
||||||
if (grub_get_time_ms () > endtime)
|
|
||||||
return GRUB_USB_ERR_TIMEOUT;
|
|
||||||
|
|
||||||
status = grub_uhci_readreg16 (u, reg);
|
|
||||||
grub_dprintf ("uhci", ">3detect=0x%02x\n", status);
|
|
||||||
return GRUB_USB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Reset the port. */
|
/* Reset the port. */
|
||||||
status = grub_uhci_readreg16 (u, reg) & ~GRUB_UHCI_PORTSC_RWC;
|
status = grub_uhci_readreg16 (u, reg) & ~GRUB_UHCI_PORTSC_RWC;
|
||||||
grub_uhci_writereg16 (u, reg, status | (1 << 9));
|
grub_uhci_writereg16 (u, reg, status | (1 << 9));
|
||||||
@@ -843,7 +828,7 @@ static struct grub_usb_controller_dev usb_controller =
|
|||||||
.check_transfer = grub_uhci_check_transfer,
|
.check_transfer = grub_uhci_check_transfer,
|
||||||
.cancel_transfer = grub_uhci_cancel_transfer,
|
.cancel_transfer = grub_uhci_cancel_transfer,
|
||||||
.hubports = grub_uhci_hubports,
|
.hubports = grub_uhci_hubports,
|
||||||
.portstatus = grub_uhci_portstatus,
|
.reset_port = grub_uhci_reset_port,
|
||||||
.detect_dev = grub_uhci_detect_dev,
|
.detect_dev = grub_uhci_detect_dev,
|
||||||
/* estimated max. count of TDs for one bulk transfer */
|
/* estimated max. count of TDs for one bulk transfer */
|
||||||
.max_bulk_tds = N_TD * 3 / 4
|
.max_bulk_tds = N_TD * 3 / 4
|
||||||
|
|||||||
@@ -207,8 +207,8 @@ attach_root_port (struct grub_usb_hub *hub, int portno,
|
|||||||
|
|
||||||
grub_boot_time ("After detect_dev");
|
grub_boot_time ("After detect_dev");
|
||||||
|
|
||||||
/* Enable the port. */
|
/* Reset port. */
|
||||||
err = hub->controller->dev->portstatus (hub->controller, portno, 1);
|
err = hub->controller->dev->reset_port (hub->controller, portno);
|
||||||
if (err)
|
if (err)
|
||||||
return;
|
return;
|
||||||
hub->controller->dev->pending_reset = grub_get_time_ms () + 5000;
|
hub->controller->dev->pending_reset = grub_get_time_ms () + 5000;
|
||||||
|
|||||||
@@ -761,10 +761,10 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
struct grub_efi_guid acpi = GRUB_EFI_ACPI_TABLE_GUID;
|
struct grub_efi_guid acpi = GRUB_EFI_ACPI_TABLE_GUID;
|
||||||
struct grub_efi_guid acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID;
|
struct grub_efi_guid acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID;
|
||||||
|
|
||||||
efi_call_2 (grub_efi_system_table->boot_services->install_configuration_table,
|
grub_efi_system_table->boot_services->install_configuration_table
|
||||||
&acpi20, grub_acpi_get_rsdpv2 ());
|
(&acpi20, grub_acpi_get_rsdpv2 ());
|
||||||
efi_call_2 (grub_efi_system_table->boot_services->install_configuration_table,
|
grub_efi_system_table->boot_services->install_configuration_table
|
||||||
&acpi, grub_acpi_get_rsdpv1 ());
|
(&acpi, grub_acpi_get_rsdpv1 ());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -140,13 +140,10 @@ grub_cmd_cat (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (utcount)
|
|
||||||
{
|
|
||||||
grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT);
|
grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT);
|
||||||
for (j = 0; j < utcount; j++)
|
for (j = 0; j < utcount; j++)
|
||||||
grub_printf ("<%x>", (unsigned int) utbuf[j]);
|
grub_printf ("<%x>", (unsigned int) utbuf[j]);
|
||||||
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
||||||
}
|
|
||||||
|
|
||||||
grub_xputs ("\n");
|
grub_xputs ("\n");
|
||||||
grub_refresh ();
|
grub_refresh ();
|
||||||
|
|||||||
@@ -328,7 +328,6 @@ grub_cmd_hdparm (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
ata = ((struct grub_scsi *) disk->data)->data;
|
ata = ((struct grub_scsi *) disk->data)->data;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* FALLTHROUGH */
|
|
||||||
default:
|
default:
|
||||||
grub_disk_close (disk);
|
grub_disk_close (disk);
|
||||||
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
||||||
|
|||||||
@@ -517,7 +517,7 @@ grub_cmd_legacy_initrd (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
return cmd->func (cmd, argc ? 1 : 0, args);
|
return cmd->func (cmd, argc, args);
|
||||||
}
|
}
|
||||||
if (kernel_type == MULTIBOOT)
|
if (kernel_type == MULTIBOOT)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -79,7 +79,6 @@ get_uuid (const char *name, char **uuid, int getnative)
|
|||||||
case GRUB_DISK_DEVICE_XEN:
|
case GRUB_DISK_DEVICE_XEN:
|
||||||
if (getnative)
|
if (getnative)
|
||||||
break;
|
break;
|
||||||
/* FALLTHROUGH */
|
|
||||||
|
|
||||||
/* Virtual disks. */
|
/* Virtual disks. */
|
||||||
/* GRUB dynamically generated files. */
|
/* GRUB dynamically generated files. */
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ iterate_device (const char *name, void *data)
|
|||||||
/* Skip floppy drives when requested. */
|
/* Skip floppy drives when requested. */
|
||||||
if (ctx->no_floppy &&
|
if (ctx->no_floppy &&
|
||||||
name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
|
name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
|
||||||
return 1;
|
return 0;
|
||||||
|
|
||||||
#ifdef DO_SEARCH_FS_UUID
|
#ifdef DO_SEARCH_FS_UUID
|
||||||
#define compare_fn grub_strcasecmp
|
#define compare_fn grub_strcasecmp
|
||||||
|
|||||||
@@ -282,7 +282,6 @@ grub_cryptodisk_endecrypt (struct grub_cryptodisk *dev,
|
|||||||
break;
|
break;
|
||||||
case GRUB_CRYPTODISK_MODE_IV_PLAIN64:
|
case GRUB_CRYPTODISK_MODE_IV_PLAIN64:
|
||||||
iv[1] = grub_cpu_to_le32 (sector >> 32);
|
iv[1] = grub_cpu_to_le32 (sector >> 32);
|
||||||
/* FALLTHROUGH */
|
|
||||||
case GRUB_CRYPTODISK_MODE_IV_PLAIN:
|
case GRUB_CRYPTODISK_MODE_IV_PLAIN:
|
||||||
iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF);
|
iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -80,15 +80,6 @@ make_devices (void)
|
|||||||
/* This should not happen... Why? */
|
/* This should not happen... Why? */
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* iPXE adds stub Block IO protocol to loaded image device handle. It is
|
|
||||||
completely non-functional and simply returns an error for every method.
|
|
||||||
So attempt to detect and skip it. Magic number is literal "iPXE" and
|
|
||||||
check block size as well */
|
|
||||||
/* FIXME: shoud we close it? We do not do it elsewhere */
|
|
||||||
if (bio->media && bio->media->media_id == 0x69505845U &&
|
|
||||||
bio->media->block_size == 1)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
d = grub_malloc (sizeof (*d));
|
d = grub_malloc (sizeof (*d));
|
||||||
if (! d)
|
if (! d)
|
||||||
{
|
{
|
||||||
@@ -224,7 +215,7 @@ name_devices (struct grub_efidisk_data *devices)
|
|||||||
{
|
{
|
||||||
case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE:
|
||||||
is_hard_drive = 1;
|
is_hard_drive = 1;
|
||||||
/* Intentionally fall through. */
|
/* Fall through by intention. */
|
||||||
case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
struct grub_efidisk_data *parent, *parent2;
|
struct grub_efidisk_data *parent, *parent2;
|
||||||
@@ -502,15 +493,8 @@ grub_efidisk_open (const char *name, struct grub_disk *disk)
|
|||||||
m = d->block_io->media;
|
m = d->block_io->media;
|
||||||
/* FIXME: Probably it is better to store the block size in the disk,
|
/* FIXME: Probably it is better to store the block size in the disk,
|
||||||
and total sectors should be replaced with total blocks. */
|
and total sectors should be replaced with total blocks. */
|
||||||
grub_dprintf ("efidisk",
|
grub_dprintf ("efidisk", "m = %p, last block = %llx, block size = %x\n",
|
||||||
"m = %p, last block = %llx, block size = %x, io align = %x\n",
|
m, (unsigned long long) m->last_block, m->block_size);
|
||||||
m, (unsigned long long) m->last_block, m->block_size,
|
|
||||||
m->io_align);
|
|
||||||
|
|
||||||
/* Ensure required buffer alignment is a power of two (or is zero). */
|
|
||||||
if (m->io_align & (m->io_align - 1))
|
|
||||||
return grub_error (GRUB_ERR_IO, "invalid buffer alignment %d", m->io_align);
|
|
||||||
|
|
||||||
disk->total_sectors = m->last_block + 1;
|
disk->total_sectors = m->last_block + 1;
|
||||||
/* Don't increase this value due to bug in some EFI. */
|
/* Don't increase this value due to bug in some EFI. */
|
||||||
disk->max_agglomerate = 0xa0000 >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS);
|
disk->max_agglomerate = 0xa0000 >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS);
|
||||||
@@ -540,42 +524,15 @@ grub_efidisk_readwrite (struct grub_disk *disk, grub_disk_addr_t sector,
|
|||||||
{
|
{
|
||||||
struct grub_efidisk_data *d;
|
struct grub_efidisk_data *d;
|
||||||
grub_efi_block_io_t *bio;
|
grub_efi_block_io_t *bio;
|
||||||
grub_efi_status_t status;
|
|
||||||
grub_size_t io_align, num_bytes;
|
|
||||||
char *aligned_buf;
|
|
||||||
|
|
||||||
d = disk->data;
|
d = disk->data;
|
||||||
bio = d->block_io;
|
bio = d->block_io;
|
||||||
|
|
||||||
/* Set alignment to 1 if 0 specified */
|
return efi_call_5 ((wr ? bio->write_blocks : bio->read_blocks), bio,
|
||||||
io_align = bio->media->io_align ? bio->media->io_align : 1;
|
bio->media->media_id,
|
||||||
num_bytes = size << disk->log_sector_size;
|
(grub_efi_uint64_t) sector,
|
||||||
|
(grub_efi_uintn_t) size << disk->log_sector_size,
|
||||||
if ((grub_addr_t) buf & (io_align - 1))
|
buf);
|
||||||
{
|
|
||||||
aligned_buf = grub_memalign (io_align, num_bytes);
|
|
||||||
if (! aligned_buf)
|
|
||||||
return GRUB_EFI_OUT_OF_RESOURCES;
|
|
||||||
if (wr)
|
|
||||||
grub_memcpy (aligned_buf, buf, num_bytes);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
aligned_buf = buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = efi_call_5 ((wr ? bio->write_blocks : bio->read_blocks), bio,
|
|
||||||
bio->media->media_id, (grub_efi_uint64_t) sector,
|
|
||||||
(grub_efi_uintn_t) num_bytes, aligned_buf);
|
|
||||||
|
|
||||||
if ((grub_addr_t) buf & (io_align - 1))
|
|
||||||
{
|
|
||||||
if (!wr)
|
|
||||||
grub_memcpy (buf, aligned_buf, num_bytes);
|
|
||||||
grub_free (aligned_buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -590,9 +547,7 @@ grub_efidisk_read (struct grub_disk *disk, grub_disk_addr_t sector,
|
|||||||
|
|
||||||
status = grub_efidisk_readwrite (disk, sector, size, buf, 0);
|
status = grub_efidisk_readwrite (disk, sector, size, buf, 0);
|
||||||
|
|
||||||
if (status == GRUB_EFI_NO_MEDIA)
|
if (status != GRUB_EFI_SUCCESS)
|
||||||
return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("no media in `%s'"), disk->name);
|
|
||||||
else if (status != GRUB_EFI_SUCCESS)
|
|
||||||
return grub_error (GRUB_ERR_READ_ERROR,
|
return grub_error (GRUB_ERR_READ_ERROR,
|
||||||
N_("failure reading sector 0x%llx from `%s'"),
|
N_("failure reading sector 0x%llx from `%s'"),
|
||||||
(unsigned long long) sector,
|
(unsigned long long) sector,
|
||||||
@@ -613,9 +568,7 @@ grub_efidisk_write (struct grub_disk *disk, grub_disk_addr_t sector,
|
|||||||
|
|
||||||
status = grub_efidisk_readwrite (disk, sector, size, (char *) buf, 1);
|
status = grub_efidisk_readwrite (disk, sector, size, (char *) buf, 1);
|
||||||
|
|
||||||
if (status == GRUB_EFI_NO_MEDIA)
|
if (status != GRUB_EFI_SUCCESS)
|
||||||
return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("no media in `%s'"), disk->name);
|
|
||||||
else if (status != GRUB_EFI_SUCCESS)
|
|
||||||
return grub_error (GRUB_ERR_WRITE_ERROR,
|
return grub_error (GRUB_ERR_WRITE_ERROR,
|
||||||
N_("failure writing sector 0x%llx to `%s'"),
|
N_("failure writing sector 0x%llx to `%s'"),
|
||||||
(unsigned long long) sector, disk->name);
|
(unsigned long long) sector, disk->name);
|
||||||
|
|||||||
@@ -417,7 +417,6 @@ fill_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type,
|
|||||||
default:
|
default:
|
||||||
grub_dprintf ("efiemu",
|
grub_dprintf ("efiemu",
|
||||||
"Unknown memory type %d. Assuming unusable\n", type);
|
"Unknown memory type %d. Assuming unusable\n", type);
|
||||||
/* FALLTHROUGH */
|
|
||||||
case GRUB_MEMORY_RESERVED:
|
case GRUB_MEMORY_RESERVED:
|
||||||
return grub_efiemu_add_to_mmap (addr, size,
|
return grub_efiemu_add_to_mmap (addr, size,
|
||||||
GRUB_EFI_UNUSABLE_MEMORY);
|
GRUB_EFI_UNUSABLE_MEMORY);
|
||||||
|
|||||||
@@ -227,11 +227,11 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data,
|
|||||||
static grub_err_t
|
static grub_err_t
|
||||||
read_sblock (grub_disk_t disk, struct grub_btrfs_superblock *sb)
|
read_sblock (grub_disk_t disk, struct grub_btrfs_superblock *sb)
|
||||||
{
|
{
|
||||||
struct grub_btrfs_superblock sblock;
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
grub_err_t err = GRUB_ERR_NONE;
|
grub_err_t err = GRUB_ERR_NONE;
|
||||||
for (i = 0; i < ARRAY_SIZE (superblock_sectors); i++)
|
for (i = 0; i < ARRAY_SIZE (superblock_sectors); i++)
|
||||||
{
|
{
|
||||||
|
struct grub_btrfs_superblock sblock;
|
||||||
/* Don't try additional superblocks beyond device size. */
|
/* Don't try additional superblocks beyond device size. */
|
||||||
if (i && (grub_le_to_cpu64 (sblock.this_device.size)
|
if (i && (grub_le_to_cpu64 (sblock.this_device.size)
|
||||||
>> GRUB_DISK_SECTOR_BITS) <= superblock_sectors[i])
|
>> GRUB_DISK_SECTOR_BITS) <= superblock_sectors[i])
|
||||||
|
|||||||
+1
-5
@@ -189,11 +189,7 @@ struct grub_fshelp_node {
|
|||||||
struct grub_fat_data *data;
|
struct grub_fat_data *data;
|
||||||
|
|
||||||
grub_uint8_t attr;
|
grub_uint8_t attr;
|
||||||
#ifndef MODE_EXFAT
|
grub_ssize_t file_size;
|
||||||
grub_uint32_t file_size;
|
|
||||||
#else
|
|
||||||
grub_uint64_t file_size;
|
|
||||||
#endif
|
|
||||||
grub_uint32_t file_cluster;
|
grub_uint32_t file_cluster;
|
||||||
grub_uint32_t cur_cluster_num;
|
grub_uint32_t cur_cluster_num;
|
||||||
grub_uint32_t cur_cluster;
|
grub_uint32_t cur_cluster;
|
||||||
|
|||||||
@@ -750,15 +750,19 @@ grub_iso9660_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
|
|
||||||
if (dir->data->joliet && !ctx.filename)
|
if (dir->data->joliet && !ctx.filename)
|
||||||
{
|
{
|
||||||
char *semicolon;
|
char *oldname, *semicolon;
|
||||||
|
|
||||||
|
oldname = name;
|
||||||
ctx.filename = grub_iso9660_convert_string
|
ctx.filename = grub_iso9660_convert_string
|
||||||
((grub_uint8_t *) name, dirent.namelen >> 1);
|
((grub_uint8_t *) oldname, dirent.namelen >> 1);
|
||||||
|
|
||||||
semicolon = grub_strrchr (ctx.filename, ';');
|
semicolon = grub_strrchr (ctx.filename, ';');
|
||||||
if (semicolon)
|
if (semicolon)
|
||||||
*semicolon = '\0';
|
*semicolon = '\0';
|
||||||
|
|
||||||
|
if (ctx.filename_alloc)
|
||||||
|
grub_free (oldname);
|
||||||
|
|
||||||
ctx.filename_alloc = 1;
|
ctx.filename_alloc = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+20
-37
@@ -823,12 +823,7 @@ direct_read (struct grub_squash_data *data,
|
|||||||
curread = data->blksz - boff;
|
curread = data->blksz - boff;
|
||||||
if (curread > len)
|
if (curread > len)
|
||||||
curread = len;
|
curread = len;
|
||||||
if (!ino->block_sizes[i])
|
if (!(ino->block_sizes[i]
|
||||||
{
|
|
||||||
/* Sparse block */
|
|
||||||
grub_memset (buf, '\0', curread);
|
|
||||||
}
|
|
||||||
else if (!(ino->block_sizes[i]
|
|
||||||
& grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED)))
|
& grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED)))
|
||||||
{
|
{
|
||||||
char *block;
|
char *block;
|
||||||
@@ -878,57 +873,36 @@ direct_read (struct grub_squash_data *data,
|
|||||||
|
|
||||||
|
|
||||||
static grub_ssize_t
|
static grub_ssize_t
|
||||||
grub_squash_read (grub_file_t file, char *buf, grub_size_t len)
|
grub_squash_read_data (struct grub_squash_data *data,
|
||||||
|
struct grub_squash_cache_inode *ino,
|
||||||
|
grub_off_t off, char *buf, grub_size_t len)
|
||||||
{
|
{
|
||||||
struct grub_squash_data *data = file->data;
|
|
||||||
struct grub_squash_cache_inode *ino = &data->ino;
|
|
||||||
grub_off_t off = file->offset;
|
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint64_t a, b;
|
grub_uint64_t a = 0, b;
|
||||||
grub_uint32_t fragment = 0;
|
grub_uint32_t fragment = 0;
|
||||||
int compressed = 0;
|
int compressed = 0;
|
||||||
struct grub_squash_frag_desc frag;
|
struct grub_squash_frag_desc frag;
|
||||||
grub_off_t direct_len;
|
|
||||||
grub_uint64_t mask = grub_le_to_cpu32 (data->sb.block_size) - 1;
|
|
||||||
grub_size_t orig_len = len;
|
|
||||||
|
|
||||||
switch (ino->ino.type)
|
switch (ino->ino.type)
|
||||||
{
|
{
|
||||||
case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR):
|
case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR):
|
||||||
|
a = grub_le_to_cpu64 (ino->ino.long_file.chunk);
|
||||||
fragment = grub_le_to_cpu32 (ino->ino.long_file.fragment);
|
fragment = grub_le_to_cpu32 (ino->ino.long_file.fragment);
|
||||||
break;
|
break;
|
||||||
case grub_cpu_to_le16_compile_time (SQUASH_TYPE_REGULAR):
|
case grub_cpu_to_le16_compile_time (SQUASH_TYPE_REGULAR):
|
||||||
|
a = grub_le_to_cpu32 (ino->ino.file.chunk);
|
||||||
fragment = grub_le_to_cpu32 (ino->ino.file.fragment);
|
fragment = grub_le_to_cpu32 (ino->ino.file.fragment);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Squash may pack file tail as fragment. So read initial part directly and
|
if (fragment == 0xffffffff)
|
||||||
get tail from fragments */
|
return direct_read (data, ino, off, buf, len);
|
||||||
direct_len = fragment == 0xffffffff ? file->size : file->size & ~mask;
|
|
||||||
if (off < direct_len)
|
|
||||||
{
|
|
||||||
grub_size_t read_len = direct_len - off;
|
|
||||||
grub_ssize_t res;
|
|
||||||
|
|
||||||
if (read_len > len)
|
|
||||||
read_len = len;
|
|
||||||
res = direct_read (data, ino, off, buf, read_len);
|
|
||||||
if ((grub_size_t) res != read_len)
|
|
||||||
return -1; /* FIXME: is short read possible here? */
|
|
||||||
len -= read_len;
|
|
||||||
if (!len)
|
|
||||||
return read_len;
|
|
||||||
buf += read_len;
|
|
||||||
off = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
off -= direct_len;
|
|
||||||
|
|
||||||
err = read_chunk (data, &frag, sizeof (frag),
|
err = read_chunk (data, &frag, sizeof (frag),
|
||||||
data->fragments, sizeof (frag) * fragment);
|
data->fragments, sizeof (frag) * fragment);
|
||||||
if (err)
|
if (err)
|
||||||
return -1;
|
return -1;
|
||||||
a = grub_le_to_cpu64 (frag.offset);
|
a += grub_le_to_cpu64 (frag.offset);
|
||||||
compressed = !(frag.size & grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED));
|
compressed = !(frag.size & grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED));
|
||||||
if (ino->ino.type == grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR))
|
if (ino->ino.type == grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR))
|
||||||
b = grub_le_to_cpu32 (ino->ino.long_file.offset) + off;
|
b = grub_le_to_cpu32 (ino->ino.long_file.offset) + off;
|
||||||
@@ -969,7 +943,16 @@ grub_squash_read (grub_file_t file, char *buf, grub_size_t len)
|
|||||||
if (err)
|
if (err)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return orig_len;
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_ssize_t
|
||||||
|
grub_squash_read (grub_file_t file, char *buf, grub_size_t len)
|
||||||
|
{
|
||||||
|
struct grub_squash_data *data = file->data;
|
||||||
|
|
||||||
|
return grub_squash_read_data (data, &data->ino,
|
||||||
|
file->offset, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
|
|||||||
+1
-6
@@ -76,13 +76,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
|
|
||||||
/* incompat feature flags */
|
/* incompat feature flags */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */
|
|
||||||
#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */
|
|
||||||
|
|
||||||
/* We do not currently verify metadata UUID so it is safe to read such filesystem */
|
|
||||||
#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \
|
#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \
|
||||||
(XFS_SB_FEAT_INCOMPAT_FTYPE | \
|
(XFS_SB_FEAT_INCOMPAT_FTYPE)
|
||||||
XFS_SB_FEAT_INCOMPAT_META_UUID)
|
|
||||||
|
|
||||||
struct grub_xfs_sblock
|
struct grub_xfs_sblock
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -336,7 +336,6 @@ grub_gdb_trap (int trap_no)
|
|||||||
/* sAA..AA: Step one instruction from AA..AA(optional). */
|
/* sAA..AA: Step one instruction from AA..AA(optional). */
|
||||||
case 's':
|
case 's':
|
||||||
stepping = 1;
|
stepping = 1;
|
||||||
/* FALLTHROUGH */
|
|
||||||
|
|
||||||
/* cAA..AA: Continue at address AA..AA(optional). */
|
/* cAA..AA: Continue at address AA..AA(optional). */
|
||||||
case 'c':
|
case 'c':
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#! @BUILD_SHEBANG@
|
#! /bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Copyright (C) 2010 Free Software Foundation, Inc.
|
# Copyright (C) 2010 Free Software Foundation, Inc.
|
||||||
@@ -94,6 +94,6 @@ else
|
|||||||
rm -f $tmpfile.bin
|
rm -f $tmpfile.bin
|
||||||
fi
|
fi
|
||||||
if test x@platform@ != xemu; then
|
if test x@platform@ != xemu; then
|
||||||
./build-grub-module-verifier@BUILD_EXEEXT@ $tmpfile @target_cpu@ @platform@
|
./build-grub-module-verifier@BUILD_EXEEXT@ $tmpfile @target_cpu@
|
||||||
fi
|
fi
|
||||||
mv $tmpfile $outfile
|
mv $tmpfile $outfile
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#! @BUILD_SHEBANG@
|
#! /bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Copyright (C) 2010 Free Software Foundation, Inc.
|
# Copyright (C) 2010 Free Software Foundation, Inc.
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
diff --git grub-core/gnulib/regexec.c grub-core/gnulib/regexec.c
|
|
||||||
index f632cd4..a7776f0 100644
|
|
||||||
--- grub-core/gnulib/regexec.c
|
|
||||||
+++ grub-core/gnulib/regexec.c
|
|
||||||
@@ -4099,6 +4099,9 @@ check_node_accept (const re_match_context_t *mctx, const re_token_t *node,
|
|
||||||
case OP_UTF8_PERIOD:
|
|
||||||
if (ch >= ASCII_CHARS)
|
|
||||||
return false;
|
|
||||||
+#if defined __GNUC__ && __GNUC__ >= 7
|
|
||||||
+ __attribute__ ((fallthrough));
|
|
||||||
+#endif
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
#endif
|
|
||||||
case OP_PERIOD:
|
|
||||||
@@ -4099,9 +4099,6 @@ check_node_accept (const re_match_context_t *mctx, const re_token_t *node,
|
|||||||
case OP_UTF8_PERIOD:
|
case OP_UTF8_PERIOD:
|
||||||
if (ch >= ASCII_CHARS)
|
if (ch >= ASCII_CHARS)
|
||||||
return false;
|
return false;
|
||||||
#if defined __GNUC__ && __GNUC__ >= 7
|
|
||||||
__attribute__ ((fallthrough));
|
|
||||||
#endif
|
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
#endif
|
#endif
|
||||||
case OP_PERIOD:
|
case OP_PERIOD:
|
||||||
|
|||||||
@@ -27,14 +27,48 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||||
|
|
||||||
grub_linuxbios_table_header_t
|
/* Helper for grub_linuxbios_table_iterate. */
|
||||||
grub_linuxbios_get_tables (void)
|
static int
|
||||||
|
check_signature (grub_linuxbios_table_header_t tbl_header)
|
||||||
|
{
|
||||||
|
if (! grub_memcmp (tbl_header->signature, "LBIO", 4))
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_err_t
|
||||||
|
grub_linuxbios_table_iterate (int (*hook) (grub_linuxbios_table_item_t,
|
||||||
|
void *),
|
||||||
|
void *hook_data)
|
||||||
{
|
{
|
||||||
grub_linuxbios_table_header_t table_header
|
grub_linuxbios_table_header_t table_header
|
||||||
= (grub_linuxbios_table_header_t) grub_arm_saved_registers.r[0];
|
= (grub_linuxbios_table_header_t) grub_arm_saved_registers.r[0];
|
||||||
|
grub_linuxbios_table_item_t table_item;
|
||||||
|
|
||||||
if (!grub_linuxbios_check_signature (table_header))
|
if (!check_signature (table_header))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return table_header;
|
signature_found:
|
||||||
|
table_item =
|
||||||
|
(grub_linuxbios_table_item_t) ((char *) table_header +
|
||||||
|
table_header->header_size);
|
||||||
|
for (; table_item < (grub_linuxbios_table_item_t) ((char *) table_header
|
||||||
|
+ table_header->header_size
|
||||||
|
+ table_header->table_size);
|
||||||
|
table_item = (grub_linuxbios_table_item_t) ((char *) table_item + table_item->size))
|
||||||
|
{
|
||||||
|
if (table_item->tag == GRUB_LINUXBIOS_MEMBER_LINK
|
||||||
|
&& check_signature ((grub_linuxbios_table_header_t) (grub_addr_t)
|
||||||
|
*(grub_uint64_t *) (table_item + 1)))
|
||||||
|
{
|
||||||
|
table_header = (grub_linuxbios_table_header_t) (grub_addr_t)
|
||||||
|
*(grub_uint64_t *) (table_item + 1);
|
||||||
|
goto signature_found;
|
||||||
|
}
|
||||||
|
if (hook (table_item, hook_data))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -173,8 +173,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
sym_addr += grub_arm_thm_call_get_offset ((grub_uint16_t *) target);
|
sym_addr += grub_arm_thm_call_get_offset ((grub_uint16_t *) target);
|
||||||
|
|
||||||
grub_dprintf ("dl", " sym_addr = 0x%08x\n", sym_addr);
|
grub_dprintf ("dl", " sym_addr = 0x%08x\n", sym_addr);
|
||||||
if (ELF_ST_TYPE (sym->st_info) != STT_FUNC)
|
|
||||||
sym_addr |= 1;
|
|
||||||
|
|
||||||
offset = sym_addr - (grub_uint32_t) target;
|
offset = sym_addr - (grub_uint32_t) target;
|
||||||
|
|
||||||
@@ -229,16 +227,13 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
|
|
||||||
sym_addr += grub_arm_thm_jump19_get_offset ((grub_uint16_t *) target);
|
sym_addr += grub_arm_thm_jump19_get_offset ((grub_uint16_t *) target);
|
||||||
|
|
||||||
if (ELF_ST_TYPE (sym->st_info) != STT_FUNC)
|
|
||||||
sym_addr |= 1;
|
|
||||||
|
|
||||||
offset = sym_addr - (grub_uint32_t) target;
|
offset = sym_addr - (grub_uint32_t) target;
|
||||||
|
|
||||||
if (!grub_arm_thm_jump19_check_offset (offset)
|
if (!grub_arm_thm_jump19_check_offset (offset)
|
||||||
|| !(sym_addr & 1))
|
|| !(sym_addr & 1))
|
||||||
{
|
{
|
||||||
struct trampoline_thumb *tp = mod->trampptr;
|
struct trampoline_thumb *tp = mod->gotptr;
|
||||||
mod->trampptr = tp + 1;
|
mod->gotptr = tp + 1;
|
||||||
grub_memcpy (tp->template, thumb_template, sizeof (tp->template));
|
grub_memcpy (tp->template, thumb_template, sizeof (tp->template));
|
||||||
tp->neg_addr = -sym_addr - 4;
|
tp->neg_addr = -sym_addr - 4;
|
||||||
offset = ((grub_uint8_t *) tp - (grub_uint8_t *) target - 4) | 1;
|
offset = ((grub_uint8_t *) tp - (grub_uint8_t *) target - 4) | 1;
|
||||||
|
|||||||
@@ -29,10 +29,10 @@ grub_uboot_get_machine_type (void)
|
|||||||
return grub_arm_saved_registers.r[1];
|
return grub_arm_saved_registers.r[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_addr_t
|
const void *
|
||||||
grub_uboot_get_boot_data (void)
|
grub_uboot_get_boot_data (void)
|
||||||
{
|
{
|
||||||
return grub_arm_saved_registers.r[2];
|
return (const void *) grub_arm_saved_registers.r[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|||||||
+43
-53
@@ -25,9 +25,14 @@
|
|||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/cpu/reloc.h>
|
#include <grub/cpu/reloc.h>
|
||||||
|
|
||||||
|
struct trampoline
|
||||||
|
{
|
||||||
#define LDR 0x58000050
|
#define LDR 0x58000050
|
||||||
#define BR 0xd61f0200
|
#define BR 0xd61f0200
|
||||||
|
grub_uint32_t ldr; /* ldr x16, 8 */
|
||||||
|
grub_uint32_t br; /* br x16 */
|
||||||
|
grub_uint64_t addr;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if EHDR is a valid ELF header.
|
* Check if EHDR is a valid ELF header.
|
||||||
@@ -48,6 +53,42 @@ grub_arch_dl_check_header (void *ehdr)
|
|||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||||
|
|
||||||
|
grub_err_t
|
||||||
|
grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
|
grub_size_t *got)
|
||||||
|
{
|
||||||
|
const Elf_Ehdr *e = ehdr;
|
||||||
|
const Elf_Shdr *s;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
*tramp = 0;
|
||||||
|
*got = 0;
|
||||||
|
|
||||||
|
for (i = 0, s = (const Elf_Shdr *) ((grub_addr_t) e + e->e_shoff);
|
||||||
|
i < e->e_shnum;
|
||||||
|
i++, s = (const Elf_Shdr *) ((grub_addr_t) s + e->e_shentsize))
|
||||||
|
if (s->sh_type == SHT_REL || s->sh_type == SHT_RELA)
|
||||||
|
{
|
||||||
|
const Elf_Rel *rel, *max;
|
||||||
|
|
||||||
|
for (rel = (const Elf_Rel *) ((grub_addr_t) e + s->sh_offset),
|
||||||
|
max = rel + s->sh_size / s->sh_entsize;
|
||||||
|
rel < max;
|
||||||
|
rel = (const Elf_Rel *) ((grub_addr_t) rel + s->sh_entsize))
|
||||||
|
switch (ELF_R_TYPE (rel->r_info))
|
||||||
|
{
|
||||||
|
case R_AARCH64_CALL26:
|
||||||
|
case R_AARCH64_JUMP26:
|
||||||
|
{
|
||||||
|
*tramp += sizeof (struct trampoline);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unified function for both REL and RELA
|
* Unified function for both REL and RELA
|
||||||
*/
|
*/
|
||||||
@@ -56,7 +97,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
Elf_Shdr *s, grub_dl_segment_t seg)
|
Elf_Shdr *s, grub_dl_segment_t seg)
|
||||||
{
|
{
|
||||||
Elf_Rel *rel, *max;
|
Elf_Rel *rel, *max;
|
||||||
unsigned unmatched_adr_got_page = 0;
|
|
||||||
|
|
||||||
for (rel = (Elf_Rel *) ((char *) ehdr + s->sh_offset),
|
for (rel = (Elf_Rel *) ((char *) ehdr + s->sh_offset),
|
||||||
max = (Elf_Rel *) ((char *) rel + s->sh_size);
|
max = (Elf_Rel *) ((char *) rel + s->sh_size);
|
||||||
@@ -105,7 +145,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
|
|
||||||
if (!grub_arm_64_check_xxxx26_offset (offset))
|
if (!grub_arm_64_check_xxxx26_offset (offset))
|
||||||
{
|
{
|
||||||
struct grub_arm64_trampoline *tp = mod->trampptr;
|
struct trampoline *tp = mod->trampptr;
|
||||||
mod->trampptr = tp + 1;
|
mod->trampptr = tp + 1;
|
||||||
tp->ldr = LDR;
|
tp->ldr = LDR;
|
||||||
tp->br = BR;
|
tp->br = BR;
|
||||||
@@ -120,56 +160,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
grub_arm64_set_xxxx26_offset (place, offset);
|
grub_arm64_set_xxxx26_offset (place, offset);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case R_AARCH64_PREL32:
|
|
||||||
{
|
|
||||||
grub_int64_t value;
|
|
||||||
Elf64_Word *addr32 = place;
|
|
||||||
value = ((grub_int32_t) *addr32) + sym_addr -
|
|
||||||
(Elf64_Xword) (grub_addr_t) seg->addr - rel->r_offset;
|
|
||||||
if (value != (grub_int32_t) value)
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE, "relocation out of range");
|
|
||||||
grub_dprintf("dl", " reloc_prel32 %p => 0x%016llx\n",
|
|
||||||
place, (unsigned long long) sym_addr);
|
|
||||||
*addr32 = value;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case R_AARCH64_ADR_GOT_PAGE:
|
|
||||||
{
|
|
||||||
grub_uint64_t *gp = mod->gotptr;
|
|
||||||
Elf_Rela *rel2;
|
|
||||||
grub_int64_t gpoffset = ((grub_uint64_t) gp & ~0xfffULL) - (((grub_uint64_t) place) & ~0xfffULL);
|
|
||||||
*gp = (grub_uint64_t) sym_addr;
|
|
||||||
mod->gotptr = gp + 1;
|
|
||||||
unmatched_adr_got_page++;
|
|
||||||
grub_dprintf("dl", " reloc_got %p => 0x%016llx (0x%016llx)\n",
|
|
||||||
place, (unsigned long long) sym_addr, (unsigned long long) gp);
|
|
||||||
if (!grub_arm64_check_hi21_signed (gpoffset))
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
|
||||||
"HI21 out of range");
|
|
||||||
grub_arm64_set_hi21(place, gpoffset);
|
|
||||||
for (rel2 = (Elf_Rela *) ((char *) rel + s->sh_entsize);
|
|
||||||
rel2 < (Elf_Rela *) max;
|
|
||||||
rel2 = (Elf_Rela *) ((char *) rel2 + s->sh_entsize))
|
|
||||||
if (ELF_R_SYM (rel2->r_info)
|
|
||||||
== ELF_R_SYM (rel->r_info)
|
|
||||||
&& ((Elf_Rela *) rel)->r_addend == rel2->r_addend
|
|
||||||
&& ELF_R_TYPE (rel2->r_info) == R_AARCH64_LD64_GOT_LO12_NC)
|
|
||||||
{
|
|
||||||
grub_arm64_set_abs_lo12_ldst64 ((void *) ((grub_addr_t) seg->addr + rel2->r_offset),
|
|
||||||
(grub_uint64_t)gp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (rel2 >= (Elf_Rela *) max)
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
|
||||||
"ADR_GOT_PAGE without matching LD64_GOT_LO12_NC");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case R_AARCH64_LD64_GOT_LO12_NC:
|
|
||||||
if (unmatched_adr_got_page == 0)
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
|
||||||
"LD64_GOT_LO12_NC without matching ADR_GOT_PAGE");
|
|
||||||
unmatched_adr_got_page--;
|
|
||||||
break;
|
|
||||||
case R_AARCH64_ADR_PREL_PG_HI21:
|
case R_AARCH64_ADR_PREL_PG_HI21:
|
||||||
{
|
{
|
||||||
grub_int64_t offset = (sym_addr & ~0xfffULL) - (((grub_uint64_t) place) & ~0xfffULL);
|
grub_int64_t offset = (sym_addr & ~0xfffULL) - (((grub_uint64_t) place) & ~0xfffULL);
|
||||||
|
|||||||
@@ -93,42 +93,3 @@ grub_arm64_set_abs_lo12_ldst64 (grub_uint32_t *place, grub_int64_t target)
|
|||||||
*place &= insmask;
|
*place &= insmask;
|
||||||
*place |= grub_cpu_to_le32 (target << 7) & ~insmask;
|
*place |= grub_cpu_to_le32 (target << 7) & ~insmask;
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
|
||||||
|
|
||||||
grub_err_t
|
|
||||||
grub_arm64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
|
||||||
grub_size_t *got)
|
|
||||||
{
|
|
||||||
const Elf64_Ehdr *e = ehdr;
|
|
||||||
const Elf64_Shdr *s;
|
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
*tramp = 0;
|
|
||||||
*got = 0;
|
|
||||||
|
|
||||||
for (i = 0, s = (Elf64_Shdr *) ((char *) e + grub_le_to_cpu64 (e->e_shoff));
|
|
||||||
i < grub_le_to_cpu16 (e->e_shnum);
|
|
||||||
i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize)))
|
|
||||||
if (s->sh_type == grub_cpu_to_le32_compile_time (SHT_REL)
|
|
||||||
|| s->sh_type == grub_cpu_to_le32_compile_time (SHT_RELA))
|
|
||||||
{
|
|
||||||
const Elf64_Rela *rel, *max;
|
|
||||||
|
|
||||||
for (rel = (Elf64_Rela *) ((char *) e + grub_le_to_cpu64 (s->sh_offset)),
|
|
||||||
max = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_size));
|
|
||||||
rel < max; rel = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_entsize)))
|
|
||||||
switch (ELF64_R_TYPE (rel->r_info))
|
|
||||||
{
|
|
||||||
case R_AARCH64_CALL26:
|
|
||||||
case R_AARCH64_JUMP26:
|
|
||||||
*tramp += sizeof (struct grub_arm64_trampoline);
|
|
||||||
break;
|
|
||||||
case R_AARCH64_ADR_GOT_PAGE:
|
|
||||||
*got += 8;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2007,2008,2013 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/i386/coreboot/memory.h>
|
|
||||||
#include <grub/coreboot/lbio.h>
|
|
||||||
#include <grub/types.h>
|
|
||||||
#include <grub/err.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/dl.h>
|
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
|
||||||
|
|
||||||
/* Helper for grub_linuxbios_table_iterate. */
|
|
||||||
int
|
|
||||||
grub_linuxbios_check_signature (grub_linuxbios_table_header_t tbl_header)
|
|
||||||
{
|
|
||||||
if (! grub_memcmp (tbl_header->signature, "LBIO", 4))
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_err_t
|
|
||||||
grub_linuxbios_table_iterate (int (*hook) (grub_linuxbios_table_item_t,
|
|
||||||
void *),
|
|
||||||
void *hook_data)
|
|
||||||
{
|
|
||||||
grub_linuxbios_table_header_t table_header = grub_linuxbios_get_tables ();
|
|
||||||
grub_linuxbios_table_item_t table_item;
|
|
||||||
|
|
||||||
if (!table_header)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
signature_found:
|
|
||||||
|
|
||||||
table_item =
|
|
||||||
(grub_linuxbios_table_item_t) ((char *) table_header +
|
|
||||||
table_header->header_size);
|
|
||||||
for (; table_item < (grub_linuxbios_table_item_t) ((char *) table_header
|
|
||||||
+ table_header->header_size
|
|
||||||
+ table_header->table_size);
|
|
||||||
table_item = (grub_linuxbios_table_item_t) ((char *) table_item + table_item->size))
|
|
||||||
{
|
|
||||||
if (table_item->tag == GRUB_LINUXBIOS_MEMBER_LINK
|
|
||||||
&& grub_linuxbios_check_signature ((grub_linuxbios_table_header_t) (grub_addr_t)
|
|
||||||
*(grub_uint64_t *) (table_item + 1)))
|
|
||||||
{
|
|
||||||
table_header = (grub_linuxbios_table_header_t) (grub_addr_t)
|
|
||||||
*(grub_uint64_t *) (table_item + 1);
|
|
||||||
goto signature_found;
|
|
||||||
}
|
|
||||||
if (hook (table_item, hook_data))
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -366,9 +366,6 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0)
|
|||||||
len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4)
|
len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4)
|
||||||
/ sizeof (grub_efi_char16_t));
|
/ sizeof (grub_efi_char16_t));
|
||||||
fp = (grub_efi_file_path_device_path_t *) dp;
|
fp = (grub_efi_file_path_device_path_t *) dp;
|
||||||
/* According to EFI spec Path Name is NULL terminated */
|
|
||||||
while (len > 0 && fp->path_name[len - 1] == 0)
|
|
||||||
len--;
|
|
||||||
|
|
||||||
p = (char *) grub_utf16_to_utf8 ((unsigned char *) p, fp->path_name, len);
|
p = (char *) grub_utf16_to_utf8 ((unsigned char *) p, fp->path_name, len);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
/* fdt.c - EFI Flattened Device Tree interaction */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2006,2007 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
|
|
||||||
void *
|
|
||||||
grub_efi_get_firmware_fdt (void)
|
|
||||||
{
|
|
||||||
grub_efi_configuration_table_t *tables;
|
|
||||||
grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID;
|
|
||||||
void *firmware_fdt = NULL;
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
/* Look for FDT in UEFI config tables. */
|
|
||||||
tables = grub_efi_system_table->configuration_table;
|
|
||||||
|
|
||||||
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
|
||||||
if (grub_memcmp (&tables[i].vendor_guid, &fdt_guid, sizeof (fdt_guid)) == 0)
|
|
||||||
{
|
|
||||||
firmware_fdt = tables[i].vendor_table;
|
|
||||||
grub_dprintf ("linux", "found registered FDT @ %p\n", firmware_fdt);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return firmware_fdt;
|
|
||||||
}
|
|
||||||
@@ -59,13 +59,10 @@ grub_machine_get_bootlocation (char **device, char **path)
|
|||||||
if (!image)
|
if (!image)
|
||||||
return;
|
return;
|
||||||
*device = grub_efidisk_get_device_name (image->device_handle);
|
*device = grub_efidisk_get_device_name (image->device_handle);
|
||||||
if (!*device && grub_efi_net_config)
|
|
||||||
{
|
|
||||||
grub_efi_net_config (image->device_handle, device, path);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
*path = grub_efi_get_filename (image->file_path);
|
*path = grub_efi_get_filename (image->file_path);
|
||||||
|
if (!*device && grub_efi_net_config)
|
||||||
|
grub_efi_net_config (image->device_handle, device, path);
|
||||||
|
|
||||||
if (*path)
|
if (*path)
|
||||||
{
|
{
|
||||||
/* Get the directory. */
|
/* Get the directory. */
|
||||||
|
|||||||
@@ -63,7 +63,6 @@ void
|
|||||||
grub_reboot (void)
|
grub_reboot (void)
|
||||||
{
|
{
|
||||||
longjmp (main_env, 1);
|
longjmp (main_env, 1);
|
||||||
grub_fatal ("longjmp failed");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -127,7 +127,6 @@ xasprintf (const char *fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
result = grub_xvasprintf (fmt, ap);
|
result = grub_xvasprintf (fmt, ap);
|
||||||
va_end (ap);
|
|
||||||
if (!result)
|
if (!result)
|
||||||
grub_util_error ("%s", _("out of memory"));
|
grub_util_error ("%s", _("out of memory"));
|
||||||
|
|
||||||
|
|||||||
@@ -25,20 +25,59 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
grub_linuxbios_table_header_t
|
/* Helper for grub_linuxbios_table_iterate. */
|
||||||
grub_linuxbios_get_tables (void)
|
static int
|
||||||
|
check_signature (grub_linuxbios_table_header_t tbl_header)
|
||||||
{
|
{
|
||||||
grub_linuxbios_table_header_t table_header;
|
if (! grub_memcmp (tbl_header->signature, "LBIO", 4))
|
||||||
/* Assuming table_header is aligned to its size (8 bytes). */
|
return 1;
|
||||||
for (table_header = (grub_linuxbios_table_header_t) 0x500;
|
|
||||||
table_header < (grub_linuxbios_table_header_t) 0x1000; table_header++)
|
return 0;
|
||||||
if (grub_linuxbios_check_signature (table_header))
|
}
|
||||||
return table_header;
|
|
||||||
|
grub_err_t
|
||||||
for (table_header = (grub_linuxbios_table_header_t) 0xf0000;
|
grub_linuxbios_table_iterate (int (*hook) (grub_linuxbios_table_item_t,
|
||||||
table_header < (grub_linuxbios_table_header_t) 0x100000; table_header++)
|
void *),
|
||||||
if (grub_linuxbios_check_signature (table_header))
|
void *hook_data)
|
||||||
return table_header;
|
{
|
||||||
|
grub_linuxbios_table_header_t table_header;
|
||||||
|
grub_linuxbios_table_item_t table_item;
|
||||||
|
|
||||||
|
/* Assuming table_header is aligned to its size (8 bytes). */
|
||||||
|
|
||||||
|
for (table_header = (grub_linuxbios_table_header_t) 0x500;
|
||||||
|
table_header < (grub_linuxbios_table_header_t) 0x1000; table_header++)
|
||||||
|
if (check_signature (table_header))
|
||||||
|
goto signature_found;
|
||||||
|
|
||||||
|
for (table_header = (grub_linuxbios_table_header_t) 0xf0000;
|
||||||
|
table_header < (grub_linuxbios_table_header_t) 0x100000; table_header++)
|
||||||
|
if (check_signature (table_header))
|
||||||
|
goto signature_found;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
signature_found:
|
||||||
|
|
||||||
|
table_item =
|
||||||
|
(grub_linuxbios_table_item_t) ((char *) table_header +
|
||||||
|
table_header->header_size);
|
||||||
|
for (; table_item < (grub_linuxbios_table_item_t) ((char *) table_header
|
||||||
|
+ table_header->header_size
|
||||||
|
+ table_header->table_size);
|
||||||
|
table_item = (grub_linuxbios_table_item_t) ((char *) table_item + table_item->size))
|
||||||
|
{
|
||||||
|
if (table_item->tag == GRUB_LINUXBIOS_MEMBER_LINK
|
||||||
|
&& check_signature ((grub_linuxbios_table_header_t) (grub_addr_t)
|
||||||
|
*(grub_uint64_t *) (table_item + 1)))
|
||||||
|
{
|
||||||
|
table_header = (grub_linuxbios_table_header_t) (grub_addr_t)
|
||||||
|
*(grub_uint64_t *) (table_item + 1);
|
||||||
|
goto signature_found;
|
||||||
|
}
|
||||||
|
if (hook (table_item, hook_data))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -104,9 +104,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
case R_IA64_PCREL64LSB:
|
case R_IA64_PCREL64LSB:
|
||||||
*(grub_uint64_t *) addr += value - addr;
|
*(grub_uint64_t *) addr += value - addr;
|
||||||
break;
|
break;
|
||||||
case R_IA64_GPREL64I:
|
|
||||||
grub_ia64_set_immu64 (addr, value - (grub_addr_t) mod->base);
|
|
||||||
break;
|
|
||||||
case R_IA64_GPREL22:
|
case R_IA64_GPREL22:
|
||||||
if ((value - (grub_addr_t) mod->base) & ~MASK20)
|
if ((value - (grub_addr_t) mod->base) & ~MASK20)
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
return grub_error (GRUB_ERR_BAD_MODULE,
|
||||||
@@ -119,7 +116,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
case R_IA64_LTOFF22:
|
case R_IA64_LTOFF22:
|
||||||
if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
|
if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
|
||||||
value = *(grub_uint64_t *) sym->st_value + rel->r_addend;
|
value = *(grub_uint64_t *) sym->st_value + rel->r_addend;
|
||||||
/* Fallthrough. */
|
|
||||||
case R_IA64_LTOFF_FPTR22:
|
case R_IA64_LTOFF_FPTR22:
|
||||||
{
|
{
|
||||||
grub_uint64_t *gpptr = mod->gotptr;
|
grub_uint64_t *gpptr = mod->gotptr;
|
||||||
|
|||||||
@@ -30,40 +30,6 @@
|
|||||||
#define MASK20 ((1 << 20) - 1)
|
#define MASK20 ((1 << 20) - 1)
|
||||||
#define MASK3 (~(grub_addr_t) 3)
|
#define MASK3 (~(grub_addr_t) 3)
|
||||||
|
|
||||||
void
|
|
||||||
grub_ia64_set_immu64 (grub_addr_t addr, grub_uint64_t val)
|
|
||||||
{
|
|
||||||
/* Copied from binutils. */
|
|
||||||
grub_uint64_t *ptr = ((grub_uint64_t *) (addr & MASK3));
|
|
||||||
grub_uint64_t t0, t1;
|
|
||||||
|
|
||||||
t0 = grub_le_to_cpu64 (ptr[0]);
|
|
||||||
t1 = grub_le_to_cpu64 (ptr[1]);
|
|
||||||
|
|
||||||
/* tmpl/s: bits 0.. 5 in t0
|
|
||||||
slot 0: bits 5..45 in t0
|
|
||||||
slot 1: bits 46..63 in t0, bits 0..22 in t1
|
|
||||||
slot 2: bits 23..63 in t1 */
|
|
||||||
|
|
||||||
/* First, clear the bits that form the 64 bit constant. */
|
|
||||||
t0 &= ~(0x3ffffLL << 46);
|
|
||||||
t1 &= ~(0x7fffffLL
|
|
||||||
| (( (0x07fLL << 13) | (0x1ffLL << 27)
|
|
||||||
| (0x01fLL << 22) | (0x001LL << 21)
|
|
||||||
| (0x001LL << 36)) << 23));
|
|
||||||
|
|
||||||
t0 |= ((val >> 22) & 0x03ffffLL) << 46; /* 18 lsbs of imm41 */
|
|
||||||
t1 |= ((val >> 40) & 0x7fffffLL) << 0; /* 23 msbs of imm41 */
|
|
||||||
t1 |= ( (((val >> 0) & 0x07f) << 13) /* imm7b */
|
|
||||||
| (((val >> 7) & 0x1ff) << 27) /* imm9d */
|
|
||||||
| (((val >> 16) & 0x01f) << 22) /* imm5c */
|
|
||||||
| (((val >> 21) & 0x001) << 21) /* ic */
|
|
||||||
| (((val >> 63) & 0x001) << 36)) << 23; /* i */
|
|
||||||
|
|
||||||
ptr[0] = t0;
|
|
||||||
ptr[1] = t1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_ia64_add_value_to_slot_20b (grub_addr_t addr, grub_uint32_t value)
|
grub_ia64_add_value_to_slot_20b (grub_addr_t addr, grub_uint32_t value)
|
||||||
{
|
{
|
||||||
@@ -216,11 +182,11 @@ grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
|||||||
i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize)))
|
i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize)))
|
||||||
if (s->sh_type == grub_cpu_to_le32_compile_time (SHT_RELA))
|
if (s->sh_type == grub_cpu_to_le32_compile_time (SHT_RELA))
|
||||||
{
|
{
|
||||||
const Elf64_Rela *rel, *max;
|
Elf64_Rela *rel, *max;
|
||||||
|
|
||||||
for (rel = (Elf64_Rela *) ((char *) e + grub_le_to_cpu64 (s->sh_offset)),
|
for (rel = (Elf64_Rela *) ((char *) e + grub_le_to_cpu64 (s->sh_offset)),
|
||||||
max = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_size));
|
max = rel + grub_le_to_cpu64 (s->sh_size) / grub_le_to_cpu64 (s->sh_entsize);
|
||||||
rel < max; rel = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_entsize)))
|
rel < max; rel++)
|
||||||
switch (ELF64_R_TYPE (grub_le_to_cpu64 (rel->r_info)))
|
switch (ELF64_R_TYPE (grub_le_to_cpu64 (rel->r_info)))
|
||||||
{
|
{
|
||||||
case R_IA64_PCREL21B:
|
case R_IA64_PCREL21B:
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
|
|||||||
{
|
{
|
||||||
grub_ieee1275_phandle_t root;
|
grub_ieee1275_phandle_t root;
|
||||||
grub_ieee1275_phandle_t memory;
|
grub_ieee1275_phandle_t memory;
|
||||||
grub_uint32_t available[128];
|
grub_uint32_t available[32];
|
||||||
grub_ssize_t available_size;
|
grub_ssize_t available_size;
|
||||||
grub_uint32_t address_cells = 1;
|
grub_uint32_t address_cells = 1;
|
||||||
grub_uint32_t size_cells = 1;
|
grub_uint32_t size_cells = 1;
|
||||||
@@ -49,9 +49,6 @@ grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
|
|||||||
sizeof available, &available_size))
|
sizeof available, &available_size))
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||||
"couldn't examine /memory/available property");
|
"couldn't examine /memory/available property");
|
||||||
if (available_size < 0 || (grub_size_t) available_size > sizeof (available))
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
|
||||||
"/memory response buffer exceeded");
|
|
||||||
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS))
|
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -236,7 +236,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
sym_value &= 0xffff0000;
|
sym_value &= 0xffff0000;
|
||||||
*(grub_uint16_t *) addr = 0;
|
*(grub_uint16_t *) addr = 0;
|
||||||
}
|
}
|
||||||
/* Fallthrough. */
|
|
||||||
case R_MIPS_CALL16:
|
case R_MIPS_CALL16:
|
||||||
{
|
{
|
||||||
grub_uint32_t *gpptr = mod->gotptr;
|
grub_uint32_t *gpptr = mod->gotptr;
|
||||||
|
|||||||
@@ -391,13 +391,12 @@ grub_strtoull (const char *str, char **end, int base)
|
|||||||
unsigned long digit;
|
unsigned long digit;
|
||||||
|
|
||||||
digit = grub_tolower (*str) - '0';
|
digit = grub_tolower (*str) - '0';
|
||||||
if (digit >= 'a' - '0')
|
if (digit > 9)
|
||||||
|
{
|
||||||
digit += '0' - 'a' + 10;
|
digit += '0' - 'a' + 10;
|
||||||
else if (digit > 9)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (digit >= (unsigned long) base)
|
if (digit >= (unsigned long) base)
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
found = 1;
|
found = 1;
|
||||||
|
|
||||||
|
|||||||
@@ -159,7 +159,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
if (value >> 32)
|
if (value >> 32)
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
return grub_error (GRUB_ERR_BAD_MODULE,
|
||||||
"address out of 32 bits range");
|
"address out of 32 bits range");
|
||||||
/* Fallthrough. */
|
|
||||||
case R_SPARC_LM22:
|
case R_SPARC_LM22:
|
||||||
*addr = (*addr & 0xFFC00000) | ((value >> 10) & 0x3FFFFF);
|
*addr = (*addr & 0xFFC00000) | ((value >> 10) & 0x3FFFFF);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -73,22 +73,6 @@ VARIABLE(grub_relocator64_rsp)
|
|||||||
|
|
||||||
movq %rax, %rsp
|
movq %rax, %rsp
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_EFI
|
|
||||||
jmp LOCAL(skip_efi_stack_align)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Here is grub_relocator64_efi_start() entry point. Most of the
|
|
||||||
* code below is shared between grub_relocator64_efi_start()
|
|
||||||
* and grub_relocator64_start().
|
|
||||||
*
|
|
||||||
* Think twice before changing anything there!!!
|
|
||||||
*/
|
|
||||||
VARIABLE(grub_relocator64_efi_start)
|
|
||||||
/* Align the stack as UEFI spec requires. */
|
|
||||||
andq $~15, %rsp
|
|
||||||
|
|
||||||
LOCAL(skip_efi_stack_align):
|
|
||||||
#endif
|
|
||||||
/* mov imm64, %rax */
|
/* mov imm64, %rax */
|
||||||
.byte 0x48
|
.byte 0x48
|
||||||
.byte 0xb8
|
.byte 0xb8
|
||||||
@@ -136,11 +120,6 @@ LOCAL(jump_addr):
|
|||||||
VARIABLE(grub_relocator64_rip)
|
VARIABLE(grub_relocator64_rip)
|
||||||
.quad 0
|
.quad 0
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_EFI
|
|
||||||
/* Here grub_relocator64_efi_start() ends. Ufff... */
|
|
||||||
VARIABLE(grub_relocator64_efi_end)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __x86_64__
|
#ifndef __x86_64__
|
||||||
.p2align 4
|
.p2align 4
|
||||||
LOCAL(gdt):
|
LOCAL(gdt):
|
||||||
|
|||||||
@@ -16,8 +16,6 @@
|
|||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/i386/memory.h>
|
|
||||||
#include <grub/i386/types.h>
|
|
||||||
#include <grub/symbol.h>
|
#include <grub/symbol.h>
|
||||||
#include <grub/xen.h>
|
#include <grub/xen.h>
|
||||||
|
|
||||||
@@ -25,86 +23,78 @@
|
|||||||
|
|
||||||
VARIABLE(grub_relocator_xen_remap_start)
|
VARIABLE(grub_relocator_xen_remap_start)
|
||||||
LOCAL(base):
|
LOCAL(base):
|
||||||
/* Remap the remapper to it's new address. */
|
/* mov imm32, %ebx */
|
||||||
/* mov imm32, %ebx - %ebx: new virtual address of remapper */
|
|
||||||
.byte 0xbb
|
.byte 0xbb
|
||||||
VARIABLE(grub_relocator_xen_remapper_virt)
|
VARIABLE(grub_relocator_xen_remapper_virt)
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
/* mov imm32, %ecx - %ecx: low part of page table entry */
|
/* mov imm32, %ecx */
|
||||||
.byte 0xb9
|
.byte 0xb9
|
||||||
VARIABLE(grub_relocator_xen_remapper_map)
|
VARIABLE(grub_relocator_xen_remapper_map)
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
/* mov imm32, %edx - %edx: high part of page table entry */
|
/* mov imm32, %edx */
|
||||||
.byte 0xba
|
.byte 0xba
|
||||||
VARIABLE(grub_relocator_xen_remapper_map_high)
|
VARIABLE(grub_relocator_xen_remapper_map_high)
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
movl %ebx, %ebp /* %ebx is clobbered by hypercall */
|
movl %ebx, %ebp
|
||||||
|
|
||||||
movl $UVMF_INVLPG, %esi /* esi: flags (inv. single entry) */
|
movl $2, %esi
|
||||||
movl $__HYPERVISOR_update_va_mapping, %eax
|
movl $__HYPERVISOR_update_va_mapping, %eax
|
||||||
int $0x82
|
int $0x82
|
||||||
|
|
||||||
movl %ebp, %ebx
|
movl %ebp, %ebx
|
||||||
addl $(LOCAL(cont) - LOCAL(base)), %ebx
|
addl $(LOCAL(cont) - LOCAL(base)), %ebx
|
||||||
|
|
||||||
jmp *%ebx /* Continue with new virtual address */
|
jmp *%ebx
|
||||||
|
|
||||||
LOCAL(cont):
|
LOCAL(cont):
|
||||||
/* Modify mappings of new page tables to be read-only. */
|
xorl %eax, %eax
|
||||||
/* mov imm32, %eax */
|
movl %eax, %ebp
|
||||||
.byte 0xb8
|
|
||||||
VARIABLE(grub_relocator_xen_paging_areas_addr)
|
|
||||||
.long 0
|
|
||||||
movl %eax, %ebx
|
|
||||||
1:
|
1:
|
||||||
movl 0(%ebx), %ebp /* Get start pfn of the current area */
|
|
||||||
movl GRUB_TARGET_SIZEOF_LONG(%ebx), %ecx /* Get # of pg tables */
|
|
||||||
testl %ecx, %ecx /* 0 -> last area reached */
|
|
||||||
jz 3f
|
|
||||||
addl $(2 * GRUB_TARGET_SIZEOF_LONG), %ebx
|
|
||||||
movl %ebx, %esp /* Save current area pointer */
|
|
||||||
|
|
||||||
2:
|
|
||||||
movl %ecx, %edi
|
|
||||||
/* mov imm32, %eax */
|
/* mov imm32, %eax */
|
||||||
.byte 0xb8
|
.byte 0xb8
|
||||||
VARIABLE(grub_relocator_xen_mfn_list)
|
VARIABLE(grub_relocator_xen_mfn_list)
|
||||||
.long 0
|
.long 0
|
||||||
movl 0(%eax, %ebp, 4), %ecx /* mfn */
|
movl %eax, %edi
|
||||||
movl %ebp, %ebx
|
movl %ebp, %eax
|
||||||
shll $PAGE_SHIFT, %ebx /* virtual address (1:1 mapping) */
|
movl 0(%edi, %eax, 4), %ecx
|
||||||
|
|
||||||
|
/* mov imm32, %ebx */
|
||||||
|
.byte 0xbb
|
||||||
|
VARIABLE(grub_relocator_xen_paging_start)
|
||||||
|
.long 0
|
||||||
|
shll $12, %eax
|
||||||
|
addl %eax, %ebx
|
||||||
movl %ecx, %edx
|
movl %ecx, %edx
|
||||||
shll $PAGE_SHIFT, %ecx /* prepare pte low part */
|
shll $12, %ecx
|
||||||
shrl $(32 - PAGE_SHIFT), %edx /* pte high part */
|
shrl $20, %edx
|
||||||
orl $(GRUB_PAGE_PRESENT | GRUB_PAGE_USER), %ecx /* pte low */
|
orl $5, %ecx
|
||||||
movl $UVMF_INVLPG, %esi
|
movl $2, %esi
|
||||||
movl $__HYPERVISOR_update_va_mapping, %eax
|
movl $__HYPERVISOR_update_va_mapping, %eax
|
||||||
int $0x82 /* parameters: eax, ebx, ecx, edx, esi */
|
int $0x82
|
||||||
|
|
||||||
incl %ebp /* next pfn */
|
incl %ebp
|
||||||
movl %edi, %ecx
|
/* mov imm32, %ecx */
|
||||||
|
.byte 0xb9
|
||||||
|
VARIABLE(grub_relocator_xen_paging_size)
|
||||||
|
.long 0
|
||||||
|
cmpl %ebp, %ecx
|
||||||
|
|
||||||
loop 2b
|
ja 1b
|
||||||
|
|
||||||
mov %esp, %ebx /* restore area poniter */
|
|
||||||
jmp 1b
|
|
||||||
|
|
||||||
3:
|
|
||||||
/* Switch page tables: pin new L3 pt, load cr3, unpin old L3. */
|
|
||||||
/* mov imm32, %ebx */
|
/* mov imm32, %ebx */
|
||||||
.byte 0xbb
|
.byte 0xbb
|
||||||
VARIABLE(grub_relocator_xen_mmu_op_addr)
|
VARIABLE(grub_relocator_xen_mmu_op_addr)
|
||||||
.long 0
|
.long 0
|
||||||
movl $3, %ecx /* 3 mmu ops */
|
movl $3, %ecx
|
||||||
movl $0, %edx /* pdone (not used) */
|
movl $0, %edx
|
||||||
movl $DOMID_SELF, %esi
|
movl $0x7FF0, %esi
|
||||||
movl $__HYPERVISOR_mmuext_op, %eax
|
movl $__HYPERVISOR_mmuext_op, %eax
|
||||||
int $0x82
|
int $0x82
|
||||||
|
|
||||||
/* Continue in virtual kernel mapping. */
|
|
||||||
/* mov imm32, %eax */
|
/* mov imm32, %eax */
|
||||||
.byte 0xb8
|
.byte 0xb8
|
||||||
VARIABLE(grub_relocator_xen_remap_continue)
|
VARIABLE(grub_relocator_xen_remap_continue)
|
||||||
@@ -112,9 +102,6 @@ VARIABLE(grub_relocator_xen_remap_continue)
|
|||||||
|
|
||||||
jmp *%eax
|
jmp *%eax
|
||||||
|
|
||||||
VARIABLE(grub_relocator_xen_paging_areas)
|
|
||||||
.long 0, 0, 0, 0, 0, 0, 0, 0
|
|
||||||
|
|
||||||
VARIABLE(grub_relocator_xen_mmu_op)
|
VARIABLE(grub_relocator_xen_mmu_op)
|
||||||
.space 256
|
.space 256
|
||||||
|
|
||||||
@@ -122,22 +109,21 @@ VARIABLE(grub_relocator_xen_remap_end)
|
|||||||
|
|
||||||
|
|
||||||
VARIABLE(grub_relocator_xen_start)
|
VARIABLE(grub_relocator_xen_start)
|
||||||
/* Unmap old remapper area. */
|
|
||||||
/* mov imm32, %eax */
|
/* mov imm32, %eax */
|
||||||
.byte 0xb8
|
.byte 0xb8
|
||||||
VARIABLE(grub_relocator_xen_remapper_virt2)
|
VARIABLE(grub_relocator_xen_remapper_virt2)
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
movl %eax, %ebx
|
movl %eax, %edi
|
||||||
|
|
||||||
xorl %ecx, %ecx /* Invalid pte */
|
xorl %ecx, %ecx
|
||||||
xorl %edx, %edx
|
xorl %edx, %edx
|
||||||
|
|
||||||
movl $UVMF_INVLPG, %esi
|
movl $2, %esi
|
||||||
movl $__HYPERVISOR_update_va_mapping, %eax
|
movl $__HYPERVISOR_update_va_mapping, %eax
|
||||||
int $0x82
|
int $0x82
|
||||||
|
|
||||||
/* Prepare registers for starting kernel. */
|
|
||||||
/* mov imm32, %eax */
|
/* mov imm32, %eax */
|
||||||
.byte 0xb8
|
.byte 0xb8
|
||||||
VARIABLE(grub_relocator_xen_stack)
|
VARIABLE(grub_relocator_xen_stack)
|
||||||
@@ -159,7 +145,6 @@ VARIABLE(grub_relocator_xen_start_info)
|
|||||||
VARIABLE(grub_relocator_xen_entry_point)
|
VARIABLE(grub_relocator_xen_entry_point)
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
/* Now start the new kernel. */
|
|
||||||
jmp *%eax
|
jmp *%eax
|
||||||
|
|
||||||
VARIABLE(grub_relocator_xen_end)
|
VARIABLE(grub_relocator_xen_end)
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
#include <grub/symbol.h>
|
#include <grub/symbol.h>
|
||||||
|
#include <grub/uboot/uboot.h>
|
||||||
#include <grub/datetime.h>
|
#include <grub/datetime.h>
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
|
|
||||||
@@ -29,12 +30,12 @@ grub_err_t
|
|||||||
grub_get_datetime (struct grub_datetime *datetime __attribute__ ((unused)))
|
grub_get_datetime (struct grub_datetime *datetime __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
return grub_error (GRUB_ERR_INVALID_COMMAND,
|
return grub_error (GRUB_ERR_INVALID_COMMAND,
|
||||||
"can\'t get datetime on this machine");
|
"can\'t get datetime using U-Boot");
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_err_t
|
grub_err_t
|
||||||
grub_set_datetime (struct grub_datetime * datetime __attribute__ ((unused)))
|
grub_set_datetime (struct grub_datetime * datetime __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
return grub_error (GRUB_ERR_INVALID_COMMAND,
|
return grub_error (GRUB_ERR_INVALID_COMMAND,
|
||||||
"can\'t set datetime on this machine");
|
"can\'t set datetime using U-Boot");
|
||||||
}
|
}
|
||||||
File renamed without changes.
@@ -1,80 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2009 Free Software Foundation, Inc.
|
|
||||||
* Copyright (C) 2016 Oracle and/or its affiliates. All rights reserved.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
|
|
||||||
#include <grub/types.h>
|
|
||||||
#include <grub/err.h>
|
|
||||||
|
|
||||||
#include <grub/i386/relocator.h>
|
|
||||||
#include <grub/relocator_private.h>
|
|
||||||
|
|
||||||
extern grub_uint64_t grub_relocator64_rax;
|
|
||||||
extern grub_uint64_t grub_relocator64_rbx;
|
|
||||||
extern grub_uint64_t grub_relocator64_rcx;
|
|
||||||
extern grub_uint64_t grub_relocator64_rdx;
|
|
||||||
extern grub_uint64_t grub_relocator64_rip;
|
|
||||||
extern grub_uint64_t grub_relocator64_rsi;
|
|
||||||
|
|
||||||
extern grub_uint8_t grub_relocator64_efi_start;
|
|
||||||
extern grub_uint8_t grub_relocator64_efi_end;
|
|
||||||
|
|
||||||
#define RELOCATOR_SIZEOF(x) (&grub_relocator##x##_end - &grub_relocator##x##_start)
|
|
||||||
|
|
||||||
grub_err_t
|
|
||||||
grub_relocator64_efi_boot (struct grub_relocator *rel,
|
|
||||||
struct grub_relocator64_efi_state state)
|
|
||||||
{
|
|
||||||
grub_err_t err;
|
|
||||||
void *relst;
|
|
||||||
grub_relocator_chunk_t ch;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 64-bit relocator code may live above 4 GiB quite well.
|
|
||||||
* However, I do not want ask for problems. Just in case.
|
|
||||||
*/
|
|
||||||
err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
|
|
||||||
0x100000000 - RELOCATOR_SIZEOF (64_efi),
|
|
||||||
RELOCATOR_SIZEOF (64_efi), 16,
|
|
||||||
GRUB_RELOCATOR_PREFERENCE_NONE, 1);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
/* Do not touch %rsp! It points to EFI created stack. */
|
|
||||||
grub_relocator64_rax = state.rax;
|
|
||||||
grub_relocator64_rbx = state.rbx;
|
|
||||||
grub_relocator64_rcx = state.rcx;
|
|
||||||
grub_relocator64_rdx = state.rdx;
|
|
||||||
grub_relocator64_rip = state.rip;
|
|
||||||
grub_relocator64_rsi = state.rsi;
|
|
||||||
|
|
||||||
grub_memmove (get_virtual_current_address (ch), &grub_relocator64_efi_start,
|
|
||||||
RELOCATOR_SIZEOF (64_efi));
|
|
||||||
|
|
||||||
err = grub_relocator_prepare_relocs (rel, get_physical_target_address (ch),
|
|
||||||
&relst, NULL);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
((void (*) (void)) relst) ();
|
|
||||||
|
|
||||||
/* Not reached. */
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
@@ -16,85 +16,95 @@
|
|||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/x86_64/memory.h>
|
|
||||||
#include <grub/x86_64/types.h>
|
|
||||||
#include <grub/symbol.h>
|
#include <grub/symbol.h>
|
||||||
#include <grub/xen.h>
|
#include <grub/xen.h>
|
||||||
|
|
||||||
/* Macro to load an imm64 value stored by the C-part into %rax: */
|
|
||||||
#define MOV_IMM64_RAX(var) .byte 0x48, 0xb8; VARIABLE(var); .quad 0
|
|
||||||
|
|
||||||
.p2align 4 /* force 16-byte alignment */
|
.p2align 4 /* force 16-byte alignment */
|
||||||
|
|
||||||
VARIABLE(grub_relocator_xen_remap_start)
|
VARIABLE(grub_relocator_xen_remap_start)
|
||||||
LOCAL(base):
|
LOCAL(base):
|
||||||
/* Remap the remapper to it's new address. */
|
/* mov imm64, %rax */
|
||||||
MOV_IMM64_RAX(grub_relocator_xen_remapper_virt)
|
.byte 0x48
|
||||||
|
.byte 0xb8
|
||||||
|
VARIABLE(grub_relocator_xen_remapper_virt)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
movq %rax, %rdi /* %rdi: new virtual address of remapper */
|
movq %rax, %rdi
|
||||||
movq %rax, %rbx /* Remember new virtual address */
|
movq %rax, %rbx
|
||||||
|
|
||||||
MOV_IMM64_RAX(grub_relocator_xen_remapper_map)
|
/* mov imm64, %rax */
|
||||||
|
.byte 0x48
|
||||||
|
.byte 0xb8
|
||||||
|
VARIABLE(grub_relocator_xen_remapper_map)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
movq %rax, %rsi /* %rsi: page table entry */
|
movq %rax, %rsi
|
||||||
|
|
||||||
movq $UVMF_INVLPG, %rdx /* %rdx: flags (inv. single entry) */
|
movq $2, %rdx
|
||||||
movq $__HYPERVISOR_update_va_mapping, %rax
|
movq $__HYPERVISOR_update_va_mapping, %rax
|
||||||
syscall /* Do the remap operation */
|
syscall
|
||||||
|
|
||||||
addq $(LOCAL(cont) - LOCAL(base)), %rbx
|
addq $(LOCAL(cont) - LOCAL(base)), %rbx
|
||||||
|
|
||||||
jmp *%rbx /* Continue with new virtual address */
|
jmp *%rbx
|
||||||
|
|
||||||
LOCAL(cont):
|
LOCAL(cont):
|
||||||
/* Modify mappings of new page tables to be read-only. */
|
|
||||||
MOV_IMM64_RAX(grub_relocator_xen_mfn_list)
|
|
||||||
|
|
||||||
movq %rax, %rbx /* %rbx is the base of the p2m list */
|
/* mov imm64, %rcx */
|
||||||
leaq EXT_C(grub_relocator_xen_paging_areas) (%rip), %r8
|
.byte 0x48
|
||||||
|
.byte 0xb9
|
||||||
|
VARIABLE(grub_relocator_xen_paging_size)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
|
/* mov imm64, %rax */
|
||||||
|
.byte 0x48
|
||||||
|
.byte 0xb8
|
||||||
|
VARIABLE(grub_relocator_xen_paging_start)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
|
movq %rax, %r12
|
||||||
|
|
||||||
|
/* mov imm64, %rax */
|
||||||
|
.byte 0x48
|
||||||
|
.byte 0xb8
|
||||||
|
VARIABLE(grub_relocator_xen_mfn_list)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
|
movq %rax, %rsi
|
||||||
1:
|
1:
|
||||||
movq 0(%r8), %r12 /* Get start pfn of the current area */
|
|
||||||
movq GRUB_TARGET_SIZEOF_LONG(%r8), %rcx /* Get # of pg tables */
|
|
||||||
testq %rcx, %rcx /* 0 -> last area reached */
|
|
||||||
jz 3f
|
|
||||||
2:
|
|
||||||
movq %r12, %rdi
|
movq %r12, %rdi
|
||||||
shlq $PAGE_SHIFT, %rdi /* virtual address (1:1 mapping) */
|
movq %rsi, %rbx
|
||||||
movq (%rbx, %r12, 8), %rsi /* mfn */
|
movq 0(%rsi), %rsi
|
||||||
shlq $PAGE_SHIFT, %rsi
|
shlq $12, %rsi
|
||||||
orq $(GRUB_PAGE_PRESENT | GRUB_PAGE_USER), %rsi /* Build pte */
|
orq $5, %rsi
|
||||||
movq $UVMF_INVLPG, %rdx
|
movq $2, %rdx
|
||||||
movq %rcx, %r9 /* %rcx clobbered by hypercall */
|
movq %rcx, %r9
|
||||||
movq $__HYPERVISOR_update_va_mapping, %rax
|
movq $__HYPERVISOR_update_va_mapping, %rax
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
movq %r9, %rcx
|
movq %r9, %rcx
|
||||||
incq %r12 /* next pfn */
|
addq $8, %rbx
|
||||||
|
addq $4096, %r12
|
||||||
|
movq %rbx, %rsi
|
||||||
|
|
||||||
loop 2b
|
loop 1b
|
||||||
|
|
||||||
addq $(2 * GRUB_TARGET_SIZEOF_LONG), %r8 /* next pg table area */
|
leaq LOCAL(mmu_op) (%rip), %rdi
|
||||||
jmp 1b
|
movq $3, %rsi
|
||||||
|
movq $0, %rdx
|
||||||
3:
|
movq $0x7FF0, %r10
|
||||||
/* Switch page tables: pin new L4 pt, load cr3, unpin old L4. */
|
|
||||||
leaq EXT_C(grub_relocator_xen_mmu_op) (%rip), %rdi
|
|
||||||
movq $3, %rsi /* 3 mmu ops */
|
|
||||||
movq $0, %rdx /* pdone (not used) */
|
|
||||||
movq $DOMID_SELF, %r10
|
|
||||||
movq $__HYPERVISOR_mmuext_op, %rax
|
movq $__HYPERVISOR_mmuext_op, %rax
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
/* Continue in virtual kernel mapping. */
|
/* mov imm64, %rax */
|
||||||
MOV_IMM64_RAX(grub_relocator_xen_remap_continue)
|
.byte 0x48
|
||||||
|
.byte 0xb8
|
||||||
|
VARIABLE(grub_relocator_xen_remap_continue)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
jmp *%rax
|
jmp *%rax
|
||||||
|
|
||||||
VARIABLE(grub_relocator_xen_paging_areas)
|
LOCAL(mmu_op):
|
||||||
/* array of start, size pairs, size 0 is end marker */
|
|
||||||
.quad 0, 0, 0, 0, 0, 0, 0, 0
|
|
||||||
|
|
||||||
VARIABLE(grub_relocator_xen_mmu_op)
|
VARIABLE(grub_relocator_xen_mmu_op)
|
||||||
.space 256
|
.space 256
|
||||||
|
|
||||||
@@ -102,32 +112,46 @@ VARIABLE(grub_relocator_xen_remap_end)
|
|||||||
|
|
||||||
|
|
||||||
VARIABLE(grub_relocator_xen_start)
|
VARIABLE(grub_relocator_xen_start)
|
||||||
/* Unmap old remapper area. */
|
/* mov imm64, %rax */
|
||||||
MOV_IMM64_RAX(grub_relocator_xen_remapper_virt2)
|
.byte 0x48
|
||||||
|
.byte 0xb8
|
||||||
|
VARIABLE(grub_relocator_xen_remapper_virt2)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
movq %rax, %rdi
|
movq %rax, %rdi
|
||||||
|
|
||||||
xorq %rax, %rax /* Invalid pte */
|
xorq %rax, %rax
|
||||||
movq %rax, %rsi
|
movq %rax, %rsi
|
||||||
|
|
||||||
movq $UVMF_INVLPG, %rdx
|
movq $2, %rdx
|
||||||
movq $__HYPERVISOR_update_va_mapping, %rax
|
movq $__HYPERVISOR_update_va_mapping, %rax
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
/* Prepare registers for starting kernel. */
|
|
||||||
MOV_IMM64_RAX(grub_relocator_xen_stack)
|
/* mov imm64, %rax */
|
||||||
|
.byte 0x48
|
||||||
|
.byte 0xb8
|
||||||
|
VARIABLE(grub_relocator_xen_stack)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
movq %rax, %rsp
|
movq %rax, %rsp
|
||||||
|
|
||||||
MOV_IMM64_RAX(grub_relocator_xen_start_info)
|
/* mov imm64, %rax */
|
||||||
|
.byte 0x48
|
||||||
|
.byte 0xb8
|
||||||
|
VARIABLE(grub_relocator_xen_start_info)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
movq %rax, %rsi
|
movq %rax, %rsi
|
||||||
|
|
||||||
cld
|
cld
|
||||||
|
|
||||||
MOV_IMM64_RAX(grub_relocator_xen_entry_point)
|
/* mov imm64, %rax */
|
||||||
|
.byte 0x48
|
||||||
|
.byte 0xb8
|
||||||
|
VARIABLE(grub_relocator_xen_entry_point)
|
||||||
|
.quad 0
|
||||||
|
|
||||||
/* Now start the new kernel. */
|
|
||||||
jmp *%rax
|
jmp *%rax
|
||||||
|
|
||||||
VARIABLE(grub_relocator_xen_end)
|
VARIABLE(grub_relocator_xen_end)
|
||||||
@@ -29,11 +29,6 @@
|
|||||||
|
|
||||||
typedef grub_addr_t grub_xen_reg_t;
|
typedef grub_addr_t grub_xen_reg_t;
|
||||||
|
|
||||||
struct grub_relocator_xen_paging_area {
|
|
||||||
grub_xen_reg_t start;
|
|
||||||
grub_xen_reg_t size;
|
|
||||||
} GRUB_PACKED;
|
|
||||||
|
|
||||||
extern grub_uint8_t grub_relocator_xen_start;
|
extern grub_uint8_t grub_relocator_xen_start;
|
||||||
extern grub_uint8_t grub_relocator_xen_end;
|
extern grub_uint8_t grub_relocator_xen_end;
|
||||||
extern grub_uint8_t grub_relocator_xen_remap_start;
|
extern grub_uint8_t grub_relocator_xen_remap_start;
|
||||||
@@ -41,16 +36,15 @@ extern grub_uint8_t grub_relocator_xen_remap_end;
|
|||||||
extern grub_xen_reg_t grub_relocator_xen_stack;
|
extern grub_xen_reg_t grub_relocator_xen_stack;
|
||||||
extern grub_xen_reg_t grub_relocator_xen_start_info;
|
extern grub_xen_reg_t grub_relocator_xen_start_info;
|
||||||
extern grub_xen_reg_t grub_relocator_xen_entry_point;
|
extern grub_xen_reg_t grub_relocator_xen_entry_point;
|
||||||
|
extern grub_xen_reg_t grub_relocator_xen_paging_start;
|
||||||
|
extern grub_xen_reg_t grub_relocator_xen_paging_size;
|
||||||
extern grub_xen_reg_t grub_relocator_xen_remapper_virt;
|
extern grub_xen_reg_t grub_relocator_xen_remapper_virt;
|
||||||
extern grub_xen_reg_t grub_relocator_xen_remapper_virt2;
|
extern grub_xen_reg_t grub_relocator_xen_remapper_virt2;
|
||||||
extern grub_xen_reg_t grub_relocator_xen_remapper_map;
|
extern grub_xen_reg_t grub_relocator_xen_remapper_map;
|
||||||
extern grub_xen_reg_t grub_relocator_xen_mfn_list;
|
extern grub_xen_reg_t grub_relocator_xen_mfn_list;
|
||||||
extern struct grub_relocator_xen_paging_area
|
|
||||||
grub_relocator_xen_paging_areas[XEN_MAX_MAPPINGS];
|
|
||||||
extern grub_xen_reg_t grub_relocator_xen_remap_continue;
|
extern grub_xen_reg_t grub_relocator_xen_remap_continue;
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
extern grub_xen_reg_t grub_relocator_xen_mmu_op_addr;
|
extern grub_xen_reg_t grub_relocator_xen_mmu_op_addr;
|
||||||
extern grub_xen_reg_t grub_relocator_xen_paging_areas_addr;
|
|
||||||
extern grub_xen_reg_t grub_relocator_xen_remapper_map_high;
|
extern grub_xen_reg_t grub_relocator_xen_remapper_map_high;
|
||||||
#endif
|
#endif
|
||||||
extern mmuext_op_t grub_relocator_xen_mmu_op[3];
|
extern mmuext_op_t grub_relocator_xen_mmu_op[3];
|
||||||
@@ -67,7 +61,6 @@ grub_relocator_xen_boot (struct grub_relocator *rel,
|
|||||||
{
|
{
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
void *relst;
|
void *relst;
|
||||||
int i;
|
|
||||||
grub_relocator_chunk_t ch, ch_tramp;
|
grub_relocator_chunk_t ch, ch_tramp;
|
||||||
grub_xen_mfn_t *mfn_list =
|
grub_xen_mfn_t *mfn_list =
|
||||||
(grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;
|
(grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;
|
||||||
@@ -84,11 +77,8 @@ grub_relocator_xen_boot (struct grub_relocator *rel,
|
|||||||
grub_relocator_xen_stack = state.stack;
|
grub_relocator_xen_stack = state.stack;
|
||||||
grub_relocator_xen_start_info = state.start_info;
|
grub_relocator_xen_start_info = state.start_info;
|
||||||
grub_relocator_xen_entry_point = state.entry_point;
|
grub_relocator_xen_entry_point = state.entry_point;
|
||||||
for (i = 0; i < XEN_MAX_MAPPINGS; i++)
|
grub_relocator_xen_paging_start = state.paging_start << 12;
|
||||||
{
|
grub_relocator_xen_paging_size = state.paging_size;
|
||||||
grub_relocator_xen_paging_areas[i].start = state.paging_start[i];
|
|
||||||
grub_relocator_xen_paging_areas[i].size = state.paging_size[i];
|
|
||||||
}
|
|
||||||
grub_relocator_xen_remapper_virt = remapper_virt;
|
grub_relocator_xen_remapper_virt = remapper_virt;
|
||||||
grub_relocator_xen_remapper_virt2 = remapper_virt;
|
grub_relocator_xen_remapper_virt2 = remapper_virt;
|
||||||
grub_relocator_xen_remap_continue = trampoline_virt;
|
grub_relocator_xen_remap_continue = trampoline_virt;
|
||||||
@@ -98,12 +88,10 @@ grub_relocator_xen_boot (struct grub_relocator *rel,
|
|||||||
grub_relocator_xen_remapper_map_high = (mfn_list[remapper_pfn] >> 20);
|
grub_relocator_xen_remapper_map_high = (mfn_list[remapper_pfn] >> 20);
|
||||||
grub_relocator_xen_mmu_op_addr = (char *) &grub_relocator_xen_mmu_op
|
grub_relocator_xen_mmu_op_addr = (char *) &grub_relocator_xen_mmu_op
|
||||||
- (char *) &grub_relocator_xen_remap_start + remapper_virt;
|
- (char *) &grub_relocator_xen_remap_start + remapper_virt;
|
||||||
grub_relocator_xen_paging_areas_addr =
|
|
||||||
(char *) &grub_relocator_xen_paging_areas
|
|
||||||
- (char *) &grub_relocator_xen_remap_start + remapper_virt;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
grub_relocator_xen_mfn_list = state.mfn_list;
|
grub_relocator_xen_mfn_list = state.mfn_list
|
||||||
|
+ state.paging_start * sizeof (grub_addr_t);
|
||||||
|
|
||||||
grub_memset (grub_relocator_xen_mmu_op, 0,
|
grub_memset (grub_relocator_xen_mmu_op, 0,
|
||||||
sizeof (grub_relocator_xen_mmu_op));
|
sizeof (grub_relocator_xen_mmu_op));
|
||||||
@@ -112,9 +100,9 @@ grub_relocator_xen_boot (struct grub_relocator *rel,
|
|||||||
#else
|
#else
|
||||||
grub_relocator_xen_mmu_op[0].cmd = MMUEXT_PIN_L4_TABLE;
|
grub_relocator_xen_mmu_op[0].cmd = MMUEXT_PIN_L4_TABLE;
|
||||||
#endif
|
#endif
|
||||||
grub_relocator_xen_mmu_op[0].arg1.mfn = mfn_list[state.paging_start[0]];
|
grub_relocator_xen_mmu_op[0].arg1.mfn = mfn_list[state.paging_start];
|
||||||
grub_relocator_xen_mmu_op[1].cmd = MMUEXT_NEW_BASEPTR;
|
grub_relocator_xen_mmu_op[1].cmd = MMUEXT_NEW_BASEPTR;
|
||||||
grub_relocator_xen_mmu_op[1].arg1.mfn = mfn_list[state.paging_start[0]];
|
grub_relocator_xen_mmu_op[1].arg1.mfn = mfn_list[state.paging_start];
|
||||||
grub_relocator_xen_mmu_op[2].cmd = MMUEXT_UNPIN_TABLE;
|
grub_relocator_xen_mmu_op[2].cmd = MMUEXT_UNPIN_TABLE;
|
||||||
grub_relocator_xen_mmu_op[2].arg1.mfn =
|
grub_relocator_xen_mmu_op[2].arg1.mfn =
|
||||||
mfn_list[grub_xen_start_page_addr->pt_base >> 12];
|
mfn_list[grub_xen_start_page_addr->pt_base >> 12];
|
||||||
|
|||||||
@@ -1044,8 +1044,6 @@ enum xz_ret xz_dec_lzma2_run(
|
|||||||
|
|
||||||
s->lzma2.sequence = SEQ_LZMA_PREPARE;
|
s->lzma2.sequence = SEQ_LZMA_PREPARE;
|
||||||
|
|
||||||
/* Fall through */
|
|
||||||
|
|
||||||
case SEQ_LZMA_PREPARE:
|
case SEQ_LZMA_PREPARE:
|
||||||
if (s->lzma2.compressed < RC_INIT_BYTES)
|
if (s->lzma2.compressed < RC_INIT_BYTES)
|
||||||
return XZ_DATA_ERROR;
|
return XZ_DATA_ERROR;
|
||||||
@@ -1056,8 +1054,6 @@ enum xz_ret xz_dec_lzma2_run(
|
|||||||
s->lzma2.compressed -= RC_INIT_BYTES;
|
s->lzma2.compressed -= RC_INIT_BYTES;
|
||||||
s->lzma2.sequence = SEQ_LZMA_RUN;
|
s->lzma2.sequence = SEQ_LZMA_RUN;
|
||||||
|
|
||||||
/* Fall through */
|
|
||||||
|
|
||||||
case SEQ_LZMA_RUN:
|
case SEQ_LZMA_RUN:
|
||||||
/*
|
/*
|
||||||
* Set dictionary limit to indicate how much we want
|
* Set dictionary limit to indicate how much we want
|
||||||
|
|||||||
@@ -750,7 +750,6 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
|
|||||||
|
|
||||||
s->sequence = SEQ_BLOCK_START;
|
s->sequence = SEQ_BLOCK_START;
|
||||||
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case SEQ_BLOCK_START:
|
case SEQ_BLOCK_START:
|
||||||
/* We need one byte of input to continue. */
|
/* We need one byte of input to continue. */
|
||||||
if (b->in_pos == b->in_size)
|
if (b->in_pos == b->in_size)
|
||||||
@@ -774,7 +773,6 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
|
|||||||
s->temp.pos = 0;
|
s->temp.pos = 0;
|
||||||
s->sequence = SEQ_BLOCK_HEADER;
|
s->sequence = SEQ_BLOCK_HEADER;
|
||||||
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case SEQ_BLOCK_HEADER:
|
case SEQ_BLOCK_HEADER:
|
||||||
if (!fill_temp(s, b))
|
if (!fill_temp(s, b))
|
||||||
return XZ_OK;
|
return XZ_OK;
|
||||||
@@ -785,7 +783,6 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
|
|||||||
|
|
||||||
s->sequence = SEQ_BLOCK_UNCOMPRESS;
|
s->sequence = SEQ_BLOCK_UNCOMPRESS;
|
||||||
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case SEQ_BLOCK_UNCOMPRESS:
|
case SEQ_BLOCK_UNCOMPRESS:
|
||||||
ret = dec_block(s, b);
|
ret = dec_block(s, b);
|
||||||
if (ret != XZ_STREAM_END)
|
if (ret != XZ_STREAM_END)
|
||||||
@@ -813,7 +810,6 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
|
|||||||
|
|
||||||
s->sequence = SEQ_BLOCK_CHECK;
|
s->sequence = SEQ_BLOCK_CHECK;
|
||||||
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case SEQ_BLOCK_CHECK:
|
case SEQ_BLOCK_CHECK:
|
||||||
ret = hash_validate(s, b, 0);
|
ret = hash_validate(s, b, 0);
|
||||||
if (ret != XZ_STREAM_END)
|
if (ret != XZ_STREAM_END)
|
||||||
@@ -862,7 +858,6 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
|
|||||||
|
|
||||||
s->sequence = SEQ_INDEX_CRC32;
|
s->sequence = SEQ_INDEX_CRC32;
|
||||||
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case SEQ_INDEX_CRC32:
|
case SEQ_INDEX_CRC32:
|
||||||
ret = hash_validate(s, b, 1);
|
ret = hash_validate(s, b, 1);
|
||||||
if (ret != XZ_STREAM_END)
|
if (ret != XZ_STREAM_END)
|
||||||
@@ -871,7 +866,6 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b)
|
|||||||
s->temp.size = STREAM_HEADER_SIZE;
|
s->temp.size = STREAM_HEADER_SIZE;
|
||||||
s->sequence = SEQ_STREAM_FOOTER;
|
s->sequence = SEQ_STREAM_FOOTER;
|
||||||
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
case SEQ_STREAM_FOOTER:
|
case SEQ_STREAM_FOOTER:
|
||||||
if (!fill_temp(s, b))
|
if (!fill_temp(s, b))
|
||||||
return XZ_OK;
|
return XZ_OK;
|
||||||
|
|||||||
@@ -28,6 +28,28 @@
|
|||||||
static void *loaded_fdt;
|
static void *loaded_fdt;
|
||||||
static void *fdt;
|
static void *fdt;
|
||||||
|
|
||||||
|
static void *
|
||||||
|
get_firmware_fdt (void)
|
||||||
|
{
|
||||||
|
grub_efi_configuration_table_t *tables;
|
||||||
|
grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID;
|
||||||
|
void *firmware_fdt = NULL;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
/* Look for FDT in UEFI config tables. */
|
||||||
|
tables = grub_efi_system_table->configuration_table;
|
||||||
|
|
||||||
|
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
||||||
|
if (grub_memcmp (&tables[i].vendor_guid, &fdt_guid, sizeof (fdt_guid)) == 0)
|
||||||
|
{
|
||||||
|
firmware_fdt = tables[i].vendor_table;
|
||||||
|
grub_dprintf ("linux", "found registered FDT @ %p\n", firmware_fdt);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return firmware_fdt;
|
||||||
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
grub_fdt_load (grub_size_t additional_size)
|
grub_fdt_load (grub_size_t additional_size)
|
||||||
{
|
{
|
||||||
@@ -43,7 +65,7 @@ grub_fdt_load (grub_size_t additional_size)
|
|||||||
if (loaded_fdt)
|
if (loaded_fdt)
|
||||||
raw_fdt = loaded_fdt;
|
raw_fdt = loaded_fdt;
|
||||||
else
|
else
|
||||||
raw_fdt = grub_efi_get_firmware_fdt();
|
raw_fdt = get_firmware_fdt();
|
||||||
|
|
||||||
size =
|
size =
|
||||||
raw_fdt ? grub_fdt_get_totalsize (raw_fdt) : GRUB_FDT_EMPTY_TREE_SZ;
|
raw_fdt ? grub_fdt_get_totalsize (raw_fdt) : GRUB_FDT_EMPTY_TREE_SZ;
|
||||||
|
|||||||
@@ -122,8 +122,6 @@ copy_file_path (grub_efi_file_path_device_path_t *fp,
|
|||||||
if (*p == '/')
|
if (*p == '/')
|
||||||
*p = '\\';
|
*p = '\\';
|
||||||
|
|
||||||
/* File Path is NULL terminated */
|
|
||||||
fp->path_name[size++] = '\0';
|
|
||||||
fp->header.length = size * sizeof (grub_efi_char16_t) + sizeof (*fp);
|
fp->header.length = size * sizeof (grub_efi_char16_t) + sizeof (*fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,10 +156,8 @@ make_file_path (grub_efi_device_path_t *dp, const char *filename)
|
|||||||
d = GRUB_EFI_NEXT_DEVICE_PATH (d);
|
d = GRUB_EFI_NEXT_DEVICE_PATH (d);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* File Path is NULL terminated. Allocate space for 2 extra characters */
|
|
||||||
/* FIXME why we split path in two components? */
|
|
||||||
file_path = grub_malloc (size
|
file_path = grub_malloc (size
|
||||||
+ ((grub_strlen (dir_start) + 2)
|
+ ((grub_strlen (dir_start) + 1)
|
||||||
* GRUB_MAX_UTF16_PER_UTF8
|
* GRUB_MAX_UTF16_PER_UTF8
|
||||||
* sizeof (grub_efi_char16_t))
|
* sizeof (grub_efi_char16_t))
|
||||||
+ sizeof (grub_efi_file_path_device_path_t) * 2);
|
+ sizeof (grub_efi_file_path_device_path_t) * 2);
|
||||||
|
|||||||
@@ -1889,10 +1889,6 @@ grub_cmd_freebsd_module (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
void *src;
|
void *src;
|
||||||
|
|
||||||
if (! grub_loader_is_loaded ())
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("you need to load the kernel first"));
|
|
||||||
|
|
||||||
if (kernel_type != KERNEL_TYPE_FREEBSD)
|
if (kernel_type != KERNEL_TYPE_FREEBSD)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no FreeBSD loaded");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no FreeBSD loaded");
|
||||||
|
|
||||||
@@ -1996,10 +1992,6 @@ grub_cmd_netbsd_module (grub_command_t cmd,
|
|||||||
{
|
{
|
||||||
grub_uint32_t type;
|
grub_uint32_t type;
|
||||||
|
|
||||||
if (! grub_loader_is_loaded ())
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("you need to load the kernel first"));
|
|
||||||
|
|
||||||
if (kernel_type != KERNEL_TYPE_NETBSD)
|
if (kernel_type != KERNEL_TYPE_NETBSD)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no NetBSD loaded");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no NetBSD loaded");
|
||||||
|
|
||||||
@@ -2078,10 +2070,6 @@ grub_cmd_openbsd_ramdisk (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
||||||
|
|
||||||
if (! grub_loader_is_loaded ())
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("you need to load the kernel first"));
|
|
||||||
|
|
||||||
if (kernel_type != KERNEL_TYPE_OPENBSD)
|
if (kernel_type != KERNEL_TYPE_OPENBSD)
|
||||||
return grub_error (GRUB_ERR_BAD_OS, "no kOpenBSD loaded");
|
return grub_error (GRUB_ERR_BAD_OS, "no kOpenBSD loaded");
|
||||||
|
|
||||||
|
|||||||
@@ -384,7 +384,6 @@ load_chewed (grub_file_t file, const char *filename)
|
|||||||
segment.len = 0;
|
segment.len = 0;
|
||||||
segment.offset = 0;
|
segment.offset = 0;
|
||||||
segment.len = 0;
|
segment.len = 0;
|
||||||
/* Fallthrough. */
|
|
||||||
case PAYLOAD_SEGMENT_CODE:
|
case PAYLOAD_SEGMENT_CODE:
|
||||||
case PAYLOAD_SEGMENT_DATA:
|
case PAYLOAD_SEGMENT_DATA:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -915,8 +915,8 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_env_set ("gfxpayload", "text");
|
grub_env_set ("gfxpayload", "text");
|
||||||
grub_printf_ (N_("%s is deprecated. "
|
grub_printf_ (N_("%s is deprecated. "
|
||||||
"Use set gfxpayload=%s before "
|
"Use set gfxpayload=%s before "
|
||||||
"linux command instead.\n"),
|
"linux command instead.\n"), "text",
|
||||||
argv[i], "text");
|
argv[i]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
@@ -925,8 +925,8 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_env_set ("gfxpayload", "text");
|
grub_env_set ("gfxpayload", "text");
|
||||||
grub_printf_ (N_("%s is deprecated. "
|
grub_printf_ (N_("%s is deprecated. "
|
||||||
"Use set gfxpayload=%s before "
|
"Use set gfxpayload=%s before "
|
||||||
"linux command instead.\n"),
|
"linux command instead.\n"), "text",
|
||||||
argv[i], "text");
|
argv[i]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* Ignore invalid values. */
|
/* Ignore invalid values. */
|
||||||
@@ -984,13 +984,10 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
{
|
{
|
||||||
case 'g':
|
case 'g':
|
||||||
shift += 10;
|
shift += 10;
|
||||||
/* FALLTHROUGH */
|
|
||||||
case 'm':
|
case 'm':
|
||||||
shift += 10;
|
shift += 10;
|
||||||
/* FALLTHROUGH */
|
|
||||||
case 'k':
|
case 'k':
|
||||||
shift += 10;
|
shift += 10;
|
||||||
/* FALLTHROUGH */
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,18 +70,9 @@ load_kernel (grub_file_t file, const char *filename,
|
|||||||
char *buffer, struct multiboot_header *header)
|
char *buffer, struct multiboot_header *header)
|
||||||
{
|
{
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
mbi_load_data_t mld;
|
|
||||||
|
|
||||||
mld.file = file;
|
|
||||||
mld.filename = filename;
|
|
||||||
mld.buffer = buffer;
|
|
||||||
mld.mbi_ver = 1;
|
|
||||||
mld.relocatable = 0;
|
|
||||||
mld.avoid_efi_boot_services = 0;
|
|
||||||
|
|
||||||
if (grub_multiboot_quirks & GRUB_MULTIBOOT_QUIRK_BAD_KLUDGE)
|
if (grub_multiboot_quirks & GRUB_MULTIBOOT_QUIRK_BAD_KLUDGE)
|
||||||
{
|
{
|
||||||
err = grub_multiboot_load_elf (&mld);
|
err = grub_multiboot_load_elf (file, filename, buffer);
|
||||||
if (err == GRUB_ERR_NONE) {
|
if (err == GRUB_ERR_NONE) {
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
@@ -130,7 +121,7 @@ load_kernel (grub_file_t file, const char *filename,
|
|||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return grub_multiboot_load_elf (&mld);
|
return grub_multiboot_load_elf (file, filename, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct multiboot_header *
|
static struct multiboot_header *
|
||||||
|
|||||||
+256
-516
File diff suppressed because it is too large.
Load diff
@@ -20,16 +20,12 @@
|
|||||||
#include <grub/i386/linux.h>
|
#include <grub/i386/linux.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
|
|
||||||
#define XZ_MAGIC "\3757zXZ\0"
|
|
||||||
|
|
||||||
grub_elf_t
|
grub_elf_t
|
||||||
grub_xen_file (grub_file_t file)
|
grub_xen_file (grub_file_t file)
|
||||||
{
|
{
|
||||||
grub_elf_t elf;
|
grub_elf_t elf;
|
||||||
struct linux_kernel_header lh;
|
struct linux_kernel_header lh;
|
||||||
grub_file_t off_file;
|
grub_file_t off_file;
|
||||||
grub_uint32_t payload_offset, payload_length;
|
|
||||||
grub_uint8_t magic[6];
|
|
||||||
|
|
||||||
elf = grub_elf_file (file, file->name);
|
elf = grub_elf_file (file, file->name);
|
||||||
if (elf)
|
if (elf)
|
||||||
@@ -50,36 +46,20 @@ grub_xen_file (grub_file_t file)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
payload_length = lh.payload_length;
|
if (lh.payload_length < 4)
|
||||||
payload_offset = (lh.setup_sects + 1) * 512
|
|
||||||
+ lh.payload_offset;
|
|
||||||
|
|
||||||
if (payload_length < sizeof (magic))
|
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_OS, "payload too short");
|
grub_error (GRUB_ERR_BAD_OS, "payload too short");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_dprintf ("xen", "found bzimage payload 0x%llx-0x%llx\n",
|
grub_dprintf ("xen", "found bzimage payload 0x%llx-0x%llx\n",
|
||||||
(unsigned long long) payload_offset,
|
(unsigned long long) (lh.setup_sects + 1) * 512
|
||||||
(unsigned long long) lh.payload_length);
|
+ lh.payload_offset,
|
||||||
|
(unsigned long long) lh.payload_length - 4);
|
||||||
|
|
||||||
grub_file_seek (file, payload_offset);
|
off_file = grub_file_offset_open (file, (lh.setup_sects + 1) * 512
|
||||||
|
+ lh.payload_offset,
|
||||||
if (grub_file_read (file, &magic, sizeof (magic)) != sizeof (magic))
|
lh.payload_length - 4);
|
||||||
{
|
|
||||||
if (!grub_errno)
|
|
||||||
grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
|
||||||
file->name);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Kernel suffixes xz payload with their uncompressed size.
|
|
||||||
Trim it. */
|
|
||||||
if (grub_memcmp (magic, XZ_MAGIC, sizeof (XZ_MAGIC) - 1) == 0)
|
|
||||||
payload_length -= 4;
|
|
||||||
off_file = grub_file_offset_open (file, payload_offset,
|
|
||||||
payload_length);
|
|
||||||
if (!off_file)
|
if (!off_file)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
#include <grub/xen_file.h>
|
#include <grub/xen_file.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <xen/elfnote.h>
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi,
|
parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi,
|
||||||
@@ -27,8 +26,6 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi,
|
|||||||
char *buf;
|
char *buf;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
int has_paddr = 0;
|
int has_paddr = 0;
|
||||||
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
if (grub_file_seek (elf->file, off) == (grub_off_t) -1)
|
if (grub_file_seek (elf->file, off) == (grub_off_t) -1)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
buf = grub_malloc (sz);
|
buf = grub_malloc (sz);
|
||||||
@@ -38,8 +35,7 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi,
|
|||||||
if (grub_file_read (elf->file, buf, sz) != (grub_ssize_t) sz)
|
if (grub_file_read (elf->file, buf, sz) != (grub_ssize_t) sz)
|
||||||
{
|
{
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
goto out;
|
return grub_errno;
|
||||||
grub_free (buf);
|
|
||||||
return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
||||||
elf->file->name);
|
elf->file->name);
|
||||||
}
|
}
|
||||||
@@ -127,14 +123,14 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi,
|
|||||||
{
|
{
|
||||||
xi->virt_base = grub_strtoull (ptr + sizeof ("VIRT_BASE=") - 1, &ptr, 16);
|
xi->virt_base = grub_strtoull (ptr + sizeof ("VIRT_BASE=") - 1, &ptr, 16);
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
goto out;
|
return grub_errno;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (grub_strncmp (ptr, "VIRT_ENTRY=", sizeof ("VIRT_ENTRY=") - 1) == 0)
|
if (grub_strncmp (ptr, "VIRT_ENTRY=", sizeof ("VIRT_ENTRY=") - 1) == 0)
|
||||||
{
|
{
|
||||||
xi->entry_point = grub_strtoull (ptr + sizeof ("VIRT_ENTRY=") - 1, &ptr, 16);
|
xi->entry_point = grub_strtoull (ptr + sizeof ("VIRT_ENTRY=") - 1, &ptr, 16);
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
goto out;
|
return grub_errno;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (grub_strncmp (ptr, "HYPERCALL_PAGE=", sizeof ("HYPERCALL_PAGE=") - 1) == 0)
|
if (grub_strncmp (ptr, "HYPERCALL_PAGE=", sizeof ("HYPERCALL_PAGE=") - 1) == 0)
|
||||||
@@ -142,7 +138,7 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi,
|
|||||||
xi->hypercall_page = grub_strtoull (ptr + sizeof ("HYPERCALL_PAGE=") - 1, &ptr, 16);
|
xi->hypercall_page = grub_strtoull (ptr + sizeof ("HYPERCALL_PAGE=") - 1, &ptr, 16);
|
||||||
xi->has_hypercall_page = 1;
|
xi->has_hypercall_page = 1;
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
goto out;
|
return grub_errno;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (grub_strncmp (ptr, "ELF_PADDR_OFFSET=", sizeof ("ELF_PADDR_OFFSET=") - 1) == 0)
|
if (grub_strncmp (ptr, "ELF_PADDR_OFFSET=", sizeof ("ELF_PADDR_OFFSET=") - 1) == 0)
|
||||||
@@ -150,7 +146,7 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi,
|
|||||||
xi->paddr_offset = grub_strtoull (ptr + sizeof ("ELF_PADDR_OFFSET=") - 1, &ptr, 16);
|
xi->paddr_offset = grub_strtoull (ptr + sizeof ("ELF_PADDR_OFFSET=") - 1, &ptr, 16);
|
||||||
has_paddr = 1;
|
has_paddr = 1;
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
goto out;
|
return grub_errno;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -158,11 +154,7 @@ parse_xen_guest (grub_elf_t elf, struct grub_xen_file_info *xi,
|
|||||||
xi->hypercall_page = (xi->hypercall_page << 12) + xi->virt_base;
|
xi->hypercall_page = (xi->hypercall_page << 12) + xi->virt_base;
|
||||||
if (!has_paddr)
|
if (!has_paddr)
|
||||||
xi->paddr_offset = xi->virt_base;
|
xi->paddr_offset = xi->virt_base;
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
out:
|
|
||||||
grub_free (buf);
|
|
||||||
|
|
||||||
return grub_errno;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||||
@@ -204,35 +196,35 @@ parse_note (grub_elf_t elf, struct grub_xen_file_info *xi,
|
|||||||
xi->has_note = 1;
|
xi->has_note = 1;
|
||||||
switch (nh->n_type)
|
switch (nh->n_type)
|
||||||
{
|
{
|
||||||
case XEN_ELFNOTE_ENTRY:
|
case 1:
|
||||||
xi->entry_point = grub_le_to_cpu_addr (*(Elf_Addr *) desc);
|
xi->entry_point = grub_le_to_cpu_addr (*(Elf_Addr *) desc);
|
||||||
break;
|
break;
|
||||||
case XEN_ELFNOTE_HYPERCALL_PAGE:
|
case 2:
|
||||||
xi->hypercall_page = grub_le_to_cpu_addr (*(Elf_Addr *) desc);
|
xi->hypercall_page = grub_le_to_cpu_addr (*(Elf_Addr *) desc);
|
||||||
xi->has_hypercall_page = 1;
|
xi->has_hypercall_page = 1;
|
||||||
break;
|
break;
|
||||||
case XEN_ELFNOTE_VIRT_BASE:
|
case 3:
|
||||||
xi->virt_base = grub_le_to_cpu_addr (*(Elf_Addr *) desc);
|
xi->virt_base = grub_le_to_cpu_addr (*(Elf_Addr *) desc);
|
||||||
break;
|
break;
|
||||||
case XEN_ELFNOTE_PADDR_OFFSET:
|
case 4:
|
||||||
xi->paddr_offset = grub_le_to_cpu_addr (*(Elf_Addr *) desc);
|
xi->paddr_offset = grub_le_to_cpu_addr (*(Elf_Addr *) desc);
|
||||||
break;
|
break;
|
||||||
case XEN_ELFNOTE_XEN_VERSION:
|
case 5:
|
||||||
grub_dprintf ("xen", "xenversion = `%s'\n", (char *) desc);
|
grub_dprintf ("xen", "xenversion = `%s'\n", (char *) desc);
|
||||||
break;
|
break;
|
||||||
case XEN_ELFNOTE_GUEST_OS:
|
case 6:
|
||||||
grub_dprintf ("xen", "name = `%s'\n", (char *) desc);
|
grub_dprintf ("xen", "name = `%s'\n", (char *) desc);
|
||||||
break;
|
break;
|
||||||
case XEN_ELFNOTE_GUEST_VERSION:
|
case 7:
|
||||||
grub_dprintf ("xen", "version = `%s'\n", (char *) desc);
|
grub_dprintf ("xen", "version = `%s'\n", (char *) desc);
|
||||||
break;
|
break;
|
||||||
case XEN_ELFNOTE_LOADER:
|
case 8:
|
||||||
if (descsz < 7
|
if (descsz < 7
|
||||||
|| grub_memcmp (desc, "generic", descsz == 7 ? 7 : 8) != 0)
|
|| grub_memcmp (desc, "generic", descsz == 7 ? 7 : 8) != 0)
|
||||||
return grub_error (GRUB_ERR_BAD_OS, "invalid loader");
|
return grub_error (GRUB_ERR_BAD_OS, "invalid loader");
|
||||||
break;
|
break;
|
||||||
/* PAE */
|
/* PAE */
|
||||||
case XEN_ELFNOTE_PAE_MODE:
|
case 9:
|
||||||
grub_dprintf ("xen", "pae = `%s', %d, %d\n", (char *) desc,
|
grub_dprintf ("xen", "pae = `%s', %d, %d\n", (char *) desc,
|
||||||
xi->arch, descsz);
|
xi->arch, descsz);
|
||||||
if (xi->arch != GRUB_XEN_FILE_I386
|
if (xi->arch != GRUB_XEN_FILE_I386
|
||||||
@@ -261,13 +253,6 @@ parse_note (grub_elf_t elf, struct grub_xen_file_info *xi,
|
|||||||
descsz == 2 ? 2 : 3) == 0)
|
descsz == 2 ? 2 : 3) == 0)
|
||||||
xi->arch = GRUB_XEN_FILE_I386;
|
xi->arch = GRUB_XEN_FILE_I386;
|
||||||
break;
|
break;
|
||||||
case XEN_ELFNOTE_INIT_P2M:
|
|
||||||
xi->p2m_base = grub_le_to_cpu_addr (*(Elf_Addr *) desc);
|
|
||||||
xi->has_p2m_base = 1;
|
|
||||||
break;
|
|
||||||
case XEN_ELFNOTE_MOD_START_PFN:
|
|
||||||
xi->unmapped_initrd = !!grub_le_to_cpu32(*(grub_uint32_t *) desc);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
grub_dprintf ("xen", "unknown note type %d\n", nh->n_type);
|
grub_dprintf ("xen", "unknown note type %d\n", nh->n_type);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -118,48 +118,6 @@ grub_multiboot_set_video_mode (void)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_EFI
|
|
||||||
#ifdef __x86_64__
|
|
||||||
#define grub_relocator_efi_boot grub_relocator64_efi_boot
|
|
||||||
#define grub_relocator_efi_state grub_relocator64_efi_state
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef grub_relocator_efi_boot
|
|
||||||
static void
|
|
||||||
efi_boot (struct grub_relocator *rel,
|
|
||||||
grub_uint32_t target)
|
|
||||||
{
|
|
||||||
struct grub_relocator_efi_state state_efi = MULTIBOOT_EFI_INITIAL_STATE;
|
|
||||||
|
|
||||||
state_efi.MULTIBOOT_EFI_ENTRY_REGISTER = grub_multiboot_payload_eip;
|
|
||||||
state_efi.MULTIBOOT_EFI_MBI_REGISTER = target;
|
|
||||||
|
|
||||||
grub_relocator_efi_boot (rel, state_efi);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define grub_efi_is_finished 1
|
|
||||||
static void
|
|
||||||
efi_boot (struct grub_relocator *rel __attribute__ ((unused)),
|
|
||||||
grub_uint32_t target __attribute__ ((unused)))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__i386__) || defined (__x86_64__)
|
|
||||||
static void
|
|
||||||
normal_boot (struct grub_relocator *rel, struct grub_relocator32_state state)
|
|
||||||
{
|
|
||||||
grub_relocator32_boot (rel, state, 0);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static void
|
|
||||||
normal_boot (struct grub_relocator *rel, struct grub_relocator32_state state)
|
|
||||||
{
|
|
||||||
grub_relocator32_boot (rel, state);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_multiboot_boot (void)
|
grub_multiboot_boot (void)
|
||||||
{
|
{
|
||||||
@@ -173,10 +131,11 @@ grub_multiboot_boot (void)
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
if (grub_efi_is_finished)
|
#if defined (__i386__) || defined (__x86_64__)
|
||||||
normal_boot (grub_multiboot_relocator, state);
|
grub_relocator32_boot (grub_multiboot_relocator, state, 0);
|
||||||
else
|
#else
|
||||||
efi_boot (grub_multiboot_relocator, state.MULTIBOOT_MBI_REGISTER);
|
grub_relocator32_boot (grub_multiboot_relocator, state);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Not reached. */
|
/* Not reached. */
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
@@ -207,12 +166,13 @@ static grub_uint64_t highest_load;
|
|||||||
|
|
||||||
/* Load ELF32 or ELF64. */
|
/* Load ELF32 or ELF64. */
|
||||||
grub_err_t
|
grub_err_t
|
||||||
grub_multiboot_load_elf (mbi_load_data_t *mld)
|
grub_multiboot_load_elf (grub_file_t file, const char *filename,
|
||||||
|
void *buffer)
|
||||||
{
|
{
|
||||||
if (grub_multiboot_is_elf32 (mld->buffer))
|
if (grub_multiboot_is_elf32 (buffer))
|
||||||
return grub_multiboot_load_elf32 (mld);
|
return grub_multiboot_load_elf32 (file, filename, buffer);
|
||||||
else if (grub_multiboot_is_elf64 (mld->buffer))
|
else if (grub_multiboot_is_elf64 (buffer))
|
||||||
return grub_multiboot_load_elf64 (mld);
|
return grub_multiboot_load_elf64 (file, filename, buffer);
|
||||||
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_OS, N_("invalid arch-dependent ELF magic"));
|
return grub_error (GRUB_ERR_UNKNOWN_OS, N_("invalid arch-dependent ELF magic"));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,15 +51,11 @@ CONCAT(grub_multiboot_is_elf, XX) (void *buffer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
|
CONCAT(grub_multiboot_load_elf, XX) (grub_file_t file, const char *filename, void *buffer)
|
||||||
{
|
{
|
||||||
Elf_Ehdr *ehdr = (Elf_Ehdr *) mld->buffer;
|
Elf_Ehdr *ehdr = (Elf_Ehdr *) buffer;
|
||||||
char *phdr_base;
|
char *phdr_base;
|
||||||
grub_err_t err;
|
|
||||||
grub_relocator_chunk_t ch;
|
|
||||||
grub_uint32_t load_offset, load_size;
|
|
||||||
int i;
|
int i;
|
||||||
void *source;
|
|
||||||
|
|
||||||
if (ehdr->e_ident[EI_MAG0] != ELFMAG0
|
if (ehdr->e_ident[EI_MAG0] != ELFMAG0
|
||||||
|| ehdr->e_ident[EI_MAG1] != ELFMAG1
|
|| ehdr->e_ident[EI_MAG1] != ELFMAG1
|
||||||
@@ -79,86 +75,54 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
|
|||||||
if (ehdr->e_phoff + (grub_uint32_t) ehdr->e_phnum * ehdr->e_phentsize > MULTIBOOT_SEARCH)
|
if (ehdr->e_phoff + (grub_uint32_t) ehdr->e_phnum * ehdr->e_phentsize > MULTIBOOT_SEARCH)
|
||||||
return grub_error (GRUB_ERR_BAD_OS, "program header at a too high offset");
|
return grub_error (GRUB_ERR_BAD_OS, "program header at a too high offset");
|
||||||
|
|
||||||
phdr_base = (char *) mld->buffer + ehdr->e_phoff;
|
phdr_base = (char *) buffer + ehdr->e_phoff;
|
||||||
#define phdr(i) ((Elf_Phdr *) (phdr_base + (i) * ehdr->e_phentsize))
|
#define phdr(i) ((Elf_Phdr *) (phdr_base + (i) * ehdr->e_phentsize))
|
||||||
|
|
||||||
mld->link_base_addr = ~0;
|
|
||||||
|
|
||||||
/* Calculate lowest and highest load address. */
|
|
||||||
for (i = 0; i < ehdr->e_phnum; i++)
|
|
||||||
if (phdr(i)->p_type == PT_LOAD)
|
|
||||||
{
|
|
||||||
mld->link_base_addr = grub_min (mld->link_base_addr, phdr(i)->p_paddr);
|
|
||||||
highest_load = grub_max (highest_load, phdr(i)->p_paddr + phdr(i)->p_memsz);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MULTIBOOT_LOAD_ELF64
|
|
||||||
if (highest_load >= 0x100000000)
|
|
||||||
return grub_error (GRUB_ERR_BAD_OS, "segment crosses 4 GiB border");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
load_size = highest_load - mld->link_base_addr;
|
|
||||||
|
|
||||||
if (mld->relocatable)
|
|
||||||
{
|
|
||||||
if (load_size > mld->max_addr || mld->min_addr > mld->max_addr - load_size)
|
|
||||||
return grub_error (GRUB_ERR_BAD_OS, "invalid min/max address and/or load size");
|
|
||||||
|
|
||||||
err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch,
|
|
||||||
mld->min_addr, mld->max_addr - load_size,
|
|
||||||
load_size, mld->align ? mld->align : 1,
|
|
||||||
mld->preference, mld->avoid_efi_boot_services);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator, &ch,
|
|
||||||
mld->link_base_addr, load_size);
|
|
||||||
|
|
||||||
if (err)
|
|
||||||
{
|
|
||||||
grub_dprintf ("multiboot_loader", "Cannot allocate memory for OS image\n");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
mld->load_base_addr = get_physical_target_address (ch);
|
|
||||||
source = get_virtual_current_address (ch);
|
|
||||||
|
|
||||||
grub_dprintf ("multiboot_loader", "link_base_addr=0x%x, load_base_addr=0x%x, "
|
|
||||||
"load_size=0x%x, relocatable=%d\n", mld->link_base_addr,
|
|
||||||
mld->load_base_addr, load_size, mld->relocatable);
|
|
||||||
|
|
||||||
if (mld->relocatable)
|
|
||||||
grub_dprintf ("multiboot_loader", "align=0x%lx, preference=0x%x, avoid_efi_boot_services=%d\n",
|
|
||||||
(long) mld->align, mld->preference, mld->avoid_efi_boot_services);
|
|
||||||
|
|
||||||
/* Load every loadable segment in memory. */
|
/* Load every loadable segment in memory. */
|
||||||
for (i = 0; i < ehdr->e_phnum; i++)
|
for (i = 0; i < ehdr->e_phnum; i++)
|
||||||
{
|
{
|
||||||
if (phdr(i)->p_type == PT_LOAD)
|
if (phdr(i)->p_type == PT_LOAD)
|
||||||
{
|
{
|
||||||
|
grub_err_t err;
|
||||||
|
void *source;
|
||||||
|
|
||||||
|
if (phdr(i)->p_paddr + phdr(i)->p_memsz > highest_load)
|
||||||
|
highest_load = phdr(i)->p_paddr + phdr(i)->p_memsz;
|
||||||
|
|
||||||
grub_dprintf ("multiboot_loader", "segment %d: paddr=0x%lx, memsz=0x%lx, vaddr=0x%lx\n",
|
grub_dprintf ("multiboot_loader", "segment %d: paddr=0x%lx, memsz=0x%lx, vaddr=0x%lx\n",
|
||||||
i, (long) phdr(i)->p_paddr, (long) phdr(i)->p_memsz, (long) phdr(i)->p_vaddr);
|
i, (long) phdr(i)->p_paddr, (long) phdr(i)->p_memsz, (long) phdr(i)->p_vaddr);
|
||||||
|
|
||||||
load_offset = phdr(i)->p_paddr - mld->link_base_addr;
|
{
|
||||||
|
grub_relocator_chunk_t ch;
|
||||||
|
err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator,
|
||||||
|
&ch, phdr(i)->p_paddr,
|
||||||
|
phdr(i)->p_memsz);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_dprintf ("multiboot_loader", "Error loading phdr %d\n", i);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
source = get_virtual_current_address (ch);
|
||||||
|
}
|
||||||
|
|
||||||
if (phdr(i)->p_filesz != 0)
|
if (phdr(i)->p_filesz != 0)
|
||||||
{
|
{
|
||||||
if (grub_file_seek (mld->file, (grub_off_t) phdr(i)->p_offset)
|
if (grub_file_seek (file, (grub_off_t) phdr(i)->p_offset)
|
||||||
== (grub_off_t) -1)
|
== (grub_off_t) -1)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
if (grub_file_read (mld->file, (grub_uint8_t *) source + load_offset, phdr(i)->p_filesz)
|
if (grub_file_read (file, source, phdr(i)->p_filesz)
|
||||||
!= (grub_ssize_t) phdr(i)->p_filesz)
|
!= (grub_ssize_t) phdr(i)->p_filesz)
|
||||||
{
|
{
|
||||||
if (!grub_errno)
|
if (!grub_errno)
|
||||||
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
||||||
mld->filename);
|
filename);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (phdr(i)->p_filesz < phdr(i)->p_memsz)
|
if (phdr(i)->p_filesz < phdr(i)->p_memsz)
|
||||||
grub_memset ((grub_uint8_t *) source + load_offset + phdr(i)->p_filesz, 0,
|
grub_memset ((grub_uint8_t *) source + phdr(i)->p_filesz, 0,
|
||||||
phdr(i)->p_memsz - phdr(i)->p_filesz);
|
phdr(i)->p_memsz - phdr(i)->p_filesz);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -204,18 +168,18 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
|
|||||||
if (!shdr)
|
if (!shdr)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
if (grub_file_seek (mld->file, ehdr->e_shoff) == (grub_off_t) -1)
|
if (grub_file_seek (file, ehdr->e_shoff) == (grub_off_t) -1)
|
||||||
{
|
{
|
||||||
grub_free (shdr);
|
grub_free (shdr);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_file_read (mld->file, shdr, (grub_uint32_t) ehdr->e_shnum * ehdr->e_shentsize)
|
if (grub_file_read (file, shdr, (grub_uint32_t) ehdr->e_shnum * ehdr->e_shentsize)
|
||||||
!= (grub_ssize_t) ehdr->e_shnum * ehdr->e_shentsize)
|
!= (grub_ssize_t) ehdr->e_shnum * ehdr->e_shentsize)
|
||||||
{
|
{
|
||||||
if (!grub_errno)
|
if (!grub_errno)
|
||||||
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
||||||
mld->filename);
|
filename);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,9 +189,7 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
|
|||||||
Elf_Shdr *sh = (Elf_Shdr *) shdrptr;
|
Elf_Shdr *sh = (Elf_Shdr *) shdrptr;
|
||||||
void *src;
|
void *src;
|
||||||
grub_addr_t target;
|
grub_addr_t target;
|
||||||
|
grub_err_t err;
|
||||||
if (mld->mbi_ver >= 2 && (sh->sh_type == SHT_REL || sh->sh_type == SHT_RELA))
|
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, "ELF files with relocs are not supported yet");
|
|
||||||
|
|
||||||
/* This section is a loaded section,
|
/* This section is a loaded section,
|
||||||
so we don't care. */
|
so we don't care. */
|
||||||
@@ -238,11 +200,15 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
|
|||||||
if (sh->sh_size == 0)
|
if (sh->sh_size == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch, 0,
|
{
|
||||||
(0xffffffff - sh->sh_size) + 1,
|
grub_relocator_chunk_t ch;
|
||||||
sh->sh_size, sh->sh_addralign,
|
err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator,
|
||||||
|
&ch, 0,
|
||||||
|
(0xffffffff - sh->sh_size)
|
||||||
|
+ 1, sh->sh_size,
|
||||||
|
sh->sh_addralign,
|
||||||
GRUB_RELOCATOR_PREFERENCE_NONE,
|
GRUB_RELOCATOR_PREFERENCE_NONE,
|
||||||
mld->avoid_efi_boot_services);
|
0);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
grub_dprintf ("multiboot_loader", "Error loading shdr %d\n", i);
|
grub_dprintf ("multiboot_loader", "Error loading shdr %d\n", i);
|
||||||
@@ -250,16 +216,17 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
|
|||||||
}
|
}
|
||||||
src = get_virtual_current_address (ch);
|
src = get_virtual_current_address (ch);
|
||||||
target = get_physical_target_address (ch);
|
target = get_physical_target_address (ch);
|
||||||
|
}
|
||||||
|
|
||||||
if (grub_file_seek (mld->file, sh->sh_offset) == (grub_off_t) -1)
|
if (grub_file_seek (file, sh->sh_offset) == (grub_off_t) -1)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
if (grub_file_read (mld->file, src, sh->sh_size)
|
if (grub_file_read (file, src, sh->sh_size)
|
||||||
!= (grub_ssize_t) sh->sh_size)
|
!= (grub_ssize_t) sh->sh_size)
|
||||||
{
|
{
|
||||||
if (!grub_errno)
|
if (!grub_errno)
|
||||||
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
||||||
mld->filename);
|
filename);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
sh->sh_addr = target;
|
sh->sh_addr = target;
|
||||||
|
|||||||
@@ -68,7 +68,6 @@ static grub_size_t elf_sec_num, elf_sec_entsize;
|
|||||||
static unsigned elf_sec_shstrndx;
|
static unsigned elf_sec_shstrndx;
|
||||||
static void *elf_sections;
|
static void *elf_sections;
|
||||||
static int keep_bs = 0;
|
static int keep_bs = 0;
|
||||||
static grub_uint32_t load_base_addr;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize,
|
grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize,
|
||||||
@@ -102,40 +101,36 @@ find_header (grub_properly_aligned_t *buffer, grub_ssize_t len)
|
|||||||
grub_err_t
|
grub_err_t
|
||||||
grub_multiboot_load (grub_file_t file, const char *filename)
|
grub_multiboot_load (grub_file_t file, const char *filename)
|
||||||
{
|
{
|
||||||
|
grub_properly_aligned_t *buffer;
|
||||||
grub_ssize_t len;
|
grub_ssize_t len;
|
||||||
struct multiboot_header *header;
|
struct multiboot_header *header;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
struct multiboot_header_tag *tag;
|
struct multiboot_header_tag *tag;
|
||||||
struct multiboot_header_tag_address *addr_tag = NULL;
|
struct multiboot_header_tag_address *addr_tag = NULL;
|
||||||
struct multiboot_header_tag_relocatable *rel_tag;
|
int entry_specified = 0;
|
||||||
int entry_specified = 0, efi_entry_specified = 0;
|
grub_addr_t entry = 0;
|
||||||
grub_addr_t entry = 0, efi_entry = 0;
|
|
||||||
grub_uint32_t console_required = 0;
|
grub_uint32_t console_required = 0;
|
||||||
struct multiboot_header_tag_framebuffer *fbtag = NULL;
|
struct multiboot_header_tag_framebuffer *fbtag = NULL;
|
||||||
int accepted_consoles = GRUB_MULTIBOOT_CONSOLE_EGA_TEXT;
|
int accepted_consoles = GRUB_MULTIBOOT_CONSOLE_EGA_TEXT;
|
||||||
mbi_load_data_t mld;
|
|
||||||
|
|
||||||
mld.mbi_ver = 2;
|
buffer = grub_malloc (MULTIBOOT_SEARCH);
|
||||||
mld.relocatable = 0;
|
if (!buffer)
|
||||||
|
|
||||||
mld.buffer = grub_malloc (MULTIBOOT_SEARCH);
|
|
||||||
if (!mld.buffer)
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
len = grub_file_read (file, mld.buffer, MULTIBOOT_SEARCH);
|
len = grub_file_read (file, buffer, MULTIBOOT_SEARCH);
|
||||||
if (len < 32)
|
if (len < 32)
|
||||||
{
|
{
|
||||||
grub_free (mld.buffer);
|
grub_free (buffer);
|
||||||
return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), filename);
|
return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"), filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
COMPILE_TIME_ASSERT (MULTIBOOT_HEADER_ALIGN % 4 == 0);
|
COMPILE_TIME_ASSERT (MULTIBOOT_HEADER_ALIGN % 4 == 0);
|
||||||
|
|
||||||
header = find_header (mld.buffer, len);
|
header = find_header (buffer, len);
|
||||||
|
|
||||||
if (header == 0)
|
if (header == 0)
|
||||||
{
|
{
|
||||||
grub_free (mld.buffer);
|
grub_free (buffer);
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no multiboot header found");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no multiboot header found");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,13 +172,10 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
|||||||
case MULTIBOOT_TAG_TYPE_NETWORK:
|
case MULTIBOOT_TAG_TYPE_NETWORK:
|
||||||
case MULTIBOOT_TAG_TYPE_EFI_MMAP:
|
case MULTIBOOT_TAG_TYPE_EFI_MMAP:
|
||||||
case MULTIBOOT_TAG_TYPE_EFI_BS:
|
case MULTIBOOT_TAG_TYPE_EFI_BS:
|
||||||
case MULTIBOOT_TAG_TYPE_EFI32_IH:
|
|
||||||
case MULTIBOOT_TAG_TYPE_EFI64_IH:
|
|
||||||
case MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR:
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
grub_free (mld.buffer);
|
grub_free (buffer);
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_OS,
|
return grub_error (GRUB_ERR_UNKNOWN_OS,
|
||||||
"unsupported information tag: 0x%x",
|
"unsupported information tag: 0x%x",
|
||||||
request_tag->requests[i]);
|
request_tag->requests[i]);
|
||||||
@@ -200,13 +192,6 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
|||||||
entry = ((struct multiboot_header_tag_entry_address *) tag)->entry_addr;
|
entry = ((struct multiboot_header_tag_entry_address *) tag)->entry_addr;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64:
|
|
||||||
#if defined (GRUB_MACHINE_EFI) && defined (__x86_64__)
|
|
||||||
efi_entry_specified = 1;
|
|
||||||
efi_entry = ((struct multiboot_header_tag_entry_address *) tag)->entry_addr;
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS:
|
case MULTIBOOT_HEADER_TAG_CONSOLE_FLAGS:
|
||||||
if (!(((struct multiboot_header_tag_console_flags *) tag)->console_flags
|
if (!(((struct multiboot_header_tag_console_flags *) tag)->console_flags
|
||||||
& MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED))
|
& MULTIBOOT_CONSOLE_FLAGS_EGA_TEXT_SUPPORTED))
|
||||||
@@ -221,50 +206,27 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
|||||||
accepted_consoles |= GRUB_MULTIBOOT_CONSOLE_FRAMEBUFFER;
|
accepted_consoles |= GRUB_MULTIBOOT_CONSOLE_FRAMEBUFFER;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MULTIBOOT_HEADER_TAG_RELOCATABLE:
|
|
||||||
mld.relocatable = 1;
|
|
||||||
rel_tag = (struct multiboot_header_tag_relocatable *) tag;
|
|
||||||
mld.min_addr = rel_tag->min_addr;
|
|
||||||
mld.max_addr = rel_tag->max_addr;
|
|
||||||
mld.align = rel_tag->align;
|
|
||||||
switch (rel_tag->preference)
|
|
||||||
{
|
|
||||||
case MULTIBOOT_LOAD_PREFERENCE_LOW:
|
|
||||||
mld.preference = GRUB_RELOCATOR_PREFERENCE_LOW;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MULTIBOOT_LOAD_PREFERENCE_HIGH:
|
|
||||||
mld.preference = GRUB_RELOCATOR_PREFERENCE_HIGH;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
mld.preference = GRUB_RELOCATOR_PREFERENCE_NONE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* GRUB always page-aligns modules. */
|
/* GRUB always page-aligns modules. */
|
||||||
case MULTIBOOT_HEADER_TAG_MODULE_ALIGN:
|
case MULTIBOOT_HEADER_TAG_MODULE_ALIGN:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MULTIBOOT_HEADER_TAG_EFI_BS:
|
case MULTIBOOT_HEADER_TAG_EFI_BS:
|
||||||
#ifdef GRUB_MACHINE_EFI
|
|
||||||
keep_bs = 1;
|
keep_bs = 1;
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (! (tag->flags & MULTIBOOT_HEADER_TAG_OPTIONAL))
|
if (! (tag->flags & MULTIBOOT_HEADER_TAG_OPTIONAL))
|
||||||
{
|
{
|
||||||
grub_free (mld.buffer);
|
grub_free (buffer);
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_OS,
|
return grub_error (GRUB_ERR_UNKNOWN_OS,
|
||||||
"unsupported tag: 0x%x", tag->type);
|
"unsupported tag: 0x%x", tag->type);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (addr_tag && !entry_specified && !(keep_bs && efi_entry_specified))
|
if (addr_tag && !entry_specified)
|
||||||
{
|
{
|
||||||
grub_free (mld.buffer);
|
grub_free (buffer);
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_OS,
|
return grub_error (GRUB_ERR_UNKNOWN_OS,
|
||||||
"load address tag without entry address tag");
|
"load address tag without entry address tag");
|
||||||
}
|
}
|
||||||
@@ -273,8 +235,8 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
|||||||
{
|
{
|
||||||
grub_uint64_t load_addr = (addr_tag->load_addr + 1)
|
grub_uint64_t load_addr = (addr_tag->load_addr + 1)
|
||||||
? addr_tag->load_addr : (addr_tag->header_addr
|
? addr_tag->load_addr : (addr_tag->header_addr
|
||||||
- ((char *) header - (char *) mld.buffer));
|
- ((char *) header - (char *) buffer));
|
||||||
int offset = ((char *) header - (char *) mld.buffer -
|
int offset = ((char *) header - (char *) buffer -
|
||||||
(addr_tag->header_addr - load_addr));
|
(addr_tag->header_addr - load_addr));
|
||||||
int load_size = ((addr_tag->load_end_addr == 0) ? file->size - offset :
|
int load_size = ((addr_tag->load_end_addr == 0) ? file->size - offset :
|
||||||
addr_tag->load_end_addr - addr_tag->load_addr);
|
addr_tag->load_end_addr - addr_tag->load_addr);
|
||||||
@@ -287,50 +249,27 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
|||||||
else
|
else
|
||||||
code_size = load_size;
|
code_size = load_size;
|
||||||
|
|
||||||
if (mld.relocatable)
|
|
||||||
{
|
|
||||||
if (code_size > mld.max_addr || mld.min_addr > mld.max_addr - code_size)
|
|
||||||
{
|
|
||||||
grub_free (mld.buffer);
|
|
||||||
return grub_error (GRUB_ERR_BAD_OS, "invalid min/max address and/or load size");
|
|
||||||
}
|
|
||||||
|
|
||||||
err = grub_relocator_alloc_chunk_align (grub_multiboot_relocator, &ch,
|
|
||||||
mld.min_addr, mld.max_addr - code_size,
|
|
||||||
code_size, mld.align ? mld.align : 1,
|
|
||||||
mld.preference, keep_bs);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator,
|
err = grub_relocator_alloc_chunk_addr (grub_multiboot_relocator,
|
||||||
&ch, load_addr, code_size);
|
&ch, load_addr,
|
||||||
|
code_size);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
grub_dprintf ("multiboot_loader", "Error loading aout kludge\n");
|
grub_dprintf ("multiboot_loader", "Error loading aout kludge\n");
|
||||||
grub_free (mld.buffer);
|
grub_free (buffer);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
mld.link_base_addr = load_addr;
|
|
||||||
mld.load_base_addr = get_physical_target_address (ch);
|
|
||||||
source = get_virtual_current_address (ch);
|
source = get_virtual_current_address (ch);
|
||||||
|
|
||||||
grub_dprintf ("multiboot_loader", "link_base_addr=0x%x, load_base_addr=0x%x, "
|
|
||||||
"load_size=0x%lx, relocatable=%d\n", mld.link_base_addr,
|
|
||||||
mld.load_base_addr, (long) code_size, mld.relocatable);
|
|
||||||
|
|
||||||
if (mld.relocatable)
|
|
||||||
grub_dprintf ("multiboot_loader", "align=0x%lx, preference=0x%x, avoid_efi_boot_services=%d\n",
|
|
||||||
(long) mld.align, mld.preference, keep_bs);
|
|
||||||
|
|
||||||
if ((grub_file_seek (file, offset)) == (grub_off_t) -1)
|
if ((grub_file_seek (file, offset)) == (grub_off_t) -1)
|
||||||
{
|
{
|
||||||
grub_free (mld.buffer);
|
grub_free (buffer);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_file_read (file, source, load_size);
|
grub_file_read (file, source, load_size);
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
{
|
{
|
||||||
grub_free (mld.buffer);
|
grub_free (buffer);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -340,41 +279,17 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mld.file = file;
|
err = grub_multiboot_load_elf (file, filename, buffer);
|
||||||
mld.filename = filename;
|
|
||||||
mld.avoid_efi_boot_services = keep_bs;
|
|
||||||
err = grub_multiboot_load_elf (&mld);
|
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
grub_free (mld.buffer);
|
grub_free (buffer);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
load_base_addr = mld.load_base_addr;
|
if (entry_specified)
|
||||||
|
|
||||||
if (keep_bs && efi_entry_specified)
|
|
||||||
grub_multiboot_payload_eip = efi_entry;
|
|
||||||
else if (entry_specified)
|
|
||||||
grub_multiboot_payload_eip = entry;
|
grub_multiboot_payload_eip = entry;
|
||||||
|
|
||||||
if (mld.relocatable)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Both branches are mathematically equivalent. However, it looks
|
|
||||||
* that real life (C?) is more complicated. I am trying to avoid
|
|
||||||
* wrap around here if mld.load_base_addr < mld.link_base_addr.
|
|
||||||
* If you look at C operator precedence then everything should work.
|
|
||||||
* However, I am not 100% sure that a given compiler will not
|
|
||||||
* optimize/break this stuff. So, maybe we should use signed
|
|
||||||
* 64-bit int here.
|
|
||||||
*/
|
|
||||||
if (mld.load_base_addr >= mld.link_base_addr)
|
|
||||||
grub_multiboot_payload_eip += mld.load_base_addr - mld.link_base_addr;
|
|
||||||
else
|
|
||||||
grub_multiboot_payload_eip -= mld.link_base_addr - mld.load_base_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fbtag)
|
if (fbtag)
|
||||||
err = grub_multiboot_set_console (GRUB_MULTIBOOT_CONSOLE_FRAMEBUFFER,
|
err = grub_multiboot_set_console (GRUB_MULTIBOOT_CONSOLE_FRAMEBUFFER,
|
||||||
accepted_consoles,
|
accepted_consoles,
|
||||||
@@ -462,7 +377,7 @@ static grub_size_t
|
|||||||
grub_multiboot_get_mbi_size (void)
|
grub_multiboot_get_mbi_size (void)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_MACHINE_EFI
|
#ifdef GRUB_MACHINE_EFI
|
||||||
if (!keep_bs && !efi_mmap_size)
|
if (!efi_mmap_size)
|
||||||
find_efi_mmap_size ();
|
find_efi_mmap_size ();
|
||||||
#endif
|
#endif
|
||||||
return 2 * sizeof (grub_uint32_t) + sizeof (struct multiboot_tag)
|
return 2 * sizeof (grub_uint32_t) + sizeof (struct multiboot_tag)
|
||||||
@@ -481,16 +396,13 @@ grub_multiboot_get_mbi_size (void)
|
|||||||
+ grub_get_multiboot_mmap_count ()
|
+ grub_get_multiboot_mmap_count ()
|
||||||
* sizeof (struct multiboot_mmap_entry)), MULTIBOOT_TAG_ALIGN)
|
* sizeof (struct multiboot_mmap_entry)), MULTIBOOT_TAG_ALIGN)
|
||||||
+ ALIGN_UP (sizeof (struct multiboot_tag_framebuffer), MULTIBOOT_TAG_ALIGN)
|
+ ALIGN_UP (sizeof (struct multiboot_tag_framebuffer), MULTIBOOT_TAG_ALIGN)
|
||||||
|
+ ALIGN_UP (sizeof (struct multiboot_tag_efi32), MULTIBOOT_TAG_ALIGN)
|
||||||
|
+ ALIGN_UP (sizeof (struct multiboot_tag_efi64), MULTIBOOT_TAG_ALIGN)
|
||||||
+ ALIGN_UP (sizeof (struct multiboot_tag_old_acpi)
|
+ ALIGN_UP (sizeof (struct multiboot_tag_old_acpi)
|
||||||
+ sizeof (struct grub_acpi_rsdp_v10), MULTIBOOT_TAG_ALIGN)
|
+ sizeof (struct grub_acpi_rsdp_v10), MULTIBOOT_TAG_ALIGN)
|
||||||
+ ALIGN_UP (sizeof (struct multiboot_tag_load_base_addr), MULTIBOOT_TAG_ALIGN)
|
|
||||||
+ acpiv2_size ()
|
+ acpiv2_size ()
|
||||||
+ net_size ()
|
+ net_size ()
|
||||||
#ifdef GRUB_MACHINE_EFI
|
#ifdef GRUB_MACHINE_EFI
|
||||||
+ ALIGN_UP (sizeof (struct multiboot_tag_efi32), MULTIBOOT_TAG_ALIGN)
|
|
||||||
+ ALIGN_UP (sizeof (struct multiboot_tag_efi32_ih), MULTIBOOT_TAG_ALIGN)
|
|
||||||
+ ALIGN_UP (sizeof (struct multiboot_tag_efi64), MULTIBOOT_TAG_ALIGN)
|
|
||||||
+ ALIGN_UP (sizeof (struct multiboot_tag_efi64_ih), MULTIBOOT_TAG_ALIGN)
|
|
||||||
+ ALIGN_UP (sizeof (struct multiboot_tag_efi_mmap)
|
+ ALIGN_UP (sizeof (struct multiboot_tag_efi_mmap)
|
||||||
+ efi_mmap_size, MULTIBOOT_TAG_ALIGN)
|
+ efi_mmap_size, MULTIBOOT_TAG_ALIGN)
|
||||||
#endif
|
#endif
|
||||||
@@ -508,7 +420,6 @@ grub_fill_multiboot_mmap_iter (grub_uint64_t addr, grub_uint64_t size,
|
|||||||
(*mmap_entry)->addr = addr;
|
(*mmap_entry)->addr = addr;
|
||||||
(*mmap_entry)->len = size;
|
(*mmap_entry)->len = size;
|
||||||
(*mmap_entry)->type = type;
|
(*mmap_entry)->type = type;
|
||||||
(*mmap_entry)->zero = 0;
|
|
||||||
(*mmap_entry)++;
|
(*mmap_entry)++;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -766,15 +677,6 @@ grub_multiboot_make_mbi (grub_uint32_t *target)
|
|||||||
% sizeof (grub_properly_aligned_t) == 0);
|
% sizeof (grub_properly_aligned_t) == 0);
|
||||||
ptrorig += (2 * sizeof (grub_uint32_t)) / sizeof (grub_properly_aligned_t);
|
ptrorig += (2 * sizeof (grub_uint32_t)) / sizeof (grub_properly_aligned_t);
|
||||||
|
|
||||||
{
|
|
||||||
struct multiboot_tag_load_base_addr *tag = (struct multiboot_tag_load_base_addr *) ptrorig;
|
|
||||||
tag->type = MULTIBOOT_TAG_TYPE_LOAD_BASE_ADDR;
|
|
||||||
tag->size = sizeof (struct multiboot_tag_load_base_addr);
|
|
||||||
tag->load_base_addr = load_base_addr;
|
|
||||||
ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN)
|
|
||||||
/ sizeof (grub_properly_aligned_t);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
struct multiboot_tag_string *tag = (struct multiboot_tag_string *) ptrorig;
|
struct multiboot_tag_string *tag = (struct multiboot_tag_string *) ptrorig;
|
||||||
tag->type = MULTIBOOT_TAG_TYPE_CMDLINE;
|
tag->type = MULTIBOOT_TAG_TYPE_CMDLINE;
|
||||||
@@ -837,7 +739,6 @@ grub_multiboot_make_mbi (grub_uint32_t *target)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!keep_bs)
|
|
||||||
{
|
{
|
||||||
struct multiboot_tag_mmap *tag = (struct multiboot_tag_mmap *) ptrorig;
|
struct multiboot_tag_mmap *tag = (struct multiboot_tag_mmap *) ptrorig;
|
||||||
grub_fill_multiboot_mmap (tag);
|
grub_fill_multiboot_mmap (tag);
|
||||||
@@ -859,7 +760,6 @@ grub_multiboot_make_mbi (grub_uint32_t *target)
|
|||||||
/ sizeof (grub_properly_aligned_t);
|
/ sizeof (grub_properly_aligned_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!keep_bs)
|
|
||||||
{
|
{
|
||||||
struct multiboot_tag_basic_meminfo *tag
|
struct multiboot_tag_basic_meminfo *tag
|
||||||
= (struct multiboot_tag_basic_meminfo *) ptrorig;
|
= (struct multiboot_tag_basic_meminfo *) ptrorig;
|
||||||
@@ -970,17 +870,21 @@ grub_multiboot_make_mbi (grub_uint32_t *target)
|
|||||||
grub_efi_uintn_t efi_desc_size;
|
grub_efi_uintn_t efi_desc_size;
|
||||||
grub_efi_uint32_t efi_desc_version;
|
grub_efi_uint32_t efi_desc_version;
|
||||||
|
|
||||||
if (!keep_bs)
|
|
||||||
{
|
|
||||||
tag->type = MULTIBOOT_TAG_TYPE_EFI_MMAP;
|
tag->type = MULTIBOOT_TAG_TYPE_EFI_MMAP;
|
||||||
tag->size = sizeof (*tag) + efi_mmap_size;
|
tag->size = sizeof (*tag) + efi_mmap_size;
|
||||||
|
|
||||||
|
if (!keep_bs)
|
||||||
err = grub_efi_finish_boot_services (&efi_mmap_size, tag->efi_mmap, NULL,
|
err = grub_efi_finish_boot_services (&efi_mmap_size, tag->efi_mmap, NULL,
|
||||||
&efi_desc_size, &efi_desc_version);
|
&efi_desc_size, &efi_desc_version);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (grub_efi_get_memory_map (&efi_mmap_size, (void *) tag->efi_mmap,
|
||||||
|
NULL,
|
||||||
|
&efi_desc_size, &efi_desc_version) <= 0)
|
||||||
|
err = grub_error (GRUB_ERR_IO, "couldn't retrieve memory map");
|
||||||
|
}
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
tag->descr_size = efi_desc_size;
|
tag->descr_size = efi_desc_size;
|
||||||
tag->descr_vers = efi_desc_version;
|
tag->descr_vers = efi_desc_version;
|
||||||
tag->size = sizeof (*tag) + efi_mmap_size;
|
tag->size = sizeof (*tag) + efi_mmap_size;
|
||||||
@@ -988,10 +892,8 @@ grub_multiboot_make_mbi (grub_uint32_t *target)
|
|||||||
ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN)
|
ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN)
|
||||||
/ sizeof (grub_properly_aligned_t);
|
/ sizeof (grub_properly_aligned_t);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (keep_bs)
|
if (keep_bs)
|
||||||
{
|
|
||||||
{
|
{
|
||||||
struct multiboot_tag *tag = (struct multiboot_tag *) ptrorig;
|
struct multiboot_tag *tag = (struct multiboot_tag *) ptrorig;
|
||||||
tag->type = MULTIBOOT_TAG_TYPE_EFI_BS;
|
tag->type = MULTIBOOT_TAG_TYPE_EFI_BS;
|
||||||
@@ -999,29 +901,6 @@ grub_multiboot_make_mbi (grub_uint32_t *target)
|
|||||||
ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN)
|
ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN)
|
||||||
/ sizeof (grub_properly_aligned_t);
|
/ sizeof (grub_properly_aligned_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __i386__
|
|
||||||
{
|
|
||||||
struct multiboot_tag_efi32_ih *tag = (struct multiboot_tag_efi32_ih *) ptrorig;
|
|
||||||
tag->type = MULTIBOOT_TAG_TYPE_EFI32_IH;
|
|
||||||
tag->size = sizeof (struct multiboot_tag_efi32_ih);
|
|
||||||
tag->pointer = (grub_addr_t) grub_efi_image_handle;
|
|
||||||
ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN)
|
|
||||||
/ sizeof (grub_properly_aligned_t);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __x86_64__
|
|
||||||
{
|
|
||||||
struct multiboot_tag_efi64_ih *tag = (struct multiboot_tag_efi64_ih *) ptrorig;
|
|
||||||
tag->type = MULTIBOOT_TAG_TYPE_EFI64_IH;
|
|
||||||
tag->size = sizeof (struct multiboot_tag_efi64_ih);
|
|
||||||
tag->pointer = (grub_addr_t) grub_efi_image_handle;
|
|
||||||
ptrorig += ALIGN_UP (tag->size, MULTIBOOT_TAG_ALIGN)
|
|
||||||
/ sizeof (grub_properly_aligned_t);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!@BUILD_SHEBANG@
|
#!/bin/sh
|
||||||
|
|
||||||
# User-controllable options
|
# User-controllable options
|
||||||
grub_modinfo_target_cpu=@target_cpu@
|
grub_modinfo_target_cpu=@target_cpu@
|
||||||
|
|||||||
+2
-10
@@ -111,8 +111,8 @@ grub_net_arp_send_request (struct grub_net_network_level_interface *inf,
|
|||||||
}
|
}
|
||||||
|
|
||||||
grub_err_t
|
grub_err_t
|
||||||
grub_net_arp_receive (struct grub_net_buff *nb, struct grub_net_card *card,
|
grub_net_arp_receive (struct grub_net_buff *nb,
|
||||||
grub_uint16_t *vlantag)
|
struct grub_net_card *card)
|
||||||
{
|
{
|
||||||
struct arppkt *arp_packet = (struct arppkt *) nb->data;
|
struct arppkt *arp_packet = (struct arppkt *) nb->data;
|
||||||
grub_net_network_level_address_t sender_addr, target_addr;
|
grub_net_network_level_address_t sender_addr, target_addr;
|
||||||
@@ -138,14 +138,6 @@ grub_net_arp_receive (struct grub_net_buff *nb, struct grub_net_card *card,
|
|||||||
|
|
||||||
FOR_NET_NETWORK_LEVEL_INTERFACES (inf)
|
FOR_NET_NETWORK_LEVEL_INTERFACES (inf)
|
||||||
{
|
{
|
||||||
/* Verify vlantag id */
|
|
||||||
if (inf->card == card && inf->vlantag != *vlantag)
|
|
||||||
{
|
|
||||||
grub_dprintf ("net", "invalid vlantag! %x != %x\n",
|
|
||||||
inf->vlantag, *vlantag);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Am I the protocol address target? */
|
/* Am I the protocol address target? */
|
||||||
if (grub_net_addr_cmp (&inf->address, &target_addr) == 0
|
if (grub_net_addr_cmp (&inf->address, &target_addr) == 0
|
||||||
&& arp_packet->op == grub_cpu_to_be16_compile_time (ARP_REQUEST))
|
&& arp_packet->op == grub_cpu_to_be16_compile_time (ARP_REQUEST))
|
||||||
|
|||||||
+15
-26
@@ -82,7 +82,7 @@ parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask)
|
|||||||
grub_memcpy (&gw.ipv4, ptr, sizeof (gw.ipv4));
|
grub_memcpy (&gw.ipv4, ptr, sizeof (gw.ipv4));
|
||||||
rname = grub_xasprintf ("%s:default", name);
|
rname = grub_xasprintf ("%s:default", name);
|
||||||
if (rname)
|
if (rname)
|
||||||
grub_net_add_route_gw (rname, target, gw, NULL);
|
grub_net_add_route_gw (rname, target, gw);
|
||||||
grub_free (rname);
|
grub_free (rname);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -142,7 +142,6 @@ grub_net_configure_by_dhcp_ack (const char *name,
|
|||||||
grub_net_link_level_address_t hwaddr;
|
grub_net_link_level_address_t hwaddr;
|
||||||
struct grub_net_network_level_interface *inter;
|
struct grub_net_network_level_interface *inter;
|
||||||
int mask = -1;
|
int mask = -1;
|
||||||
char server_ip[sizeof ("xxx.xxx.xxx.xxx")];
|
|
||||||
|
|
||||||
addr.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4;
|
addr.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4;
|
||||||
addr.ipv4 = bp->your_ip;
|
addr.ipv4 = bp->your_ip;
|
||||||
@@ -158,9 +157,6 @@ grub_net_configure_by_dhcp_ack (const char *name,
|
|||||||
hwaddr.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET;
|
hwaddr.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET;
|
||||||
|
|
||||||
inter = grub_net_add_addr (name, card, &addr, &hwaddr, flags);
|
inter = grub_net_add_addr (name, card, &addr, &hwaddr, flags);
|
||||||
if (!inter)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* This is likely based on misunderstanding. gateway_ip refers to
|
/* This is likely based on misunderstanding. gateway_ip refers to
|
||||||
address of BOOTP relay and should not be used after BOOTP transaction
|
address of BOOTP relay and should not be used after BOOTP transaction
|
||||||
@@ -193,22 +189,15 @@ grub_net_configure_by_dhcp_ack (const char *name,
|
|||||||
if (size > OFFSET_OF (boot_file, bp))
|
if (size > OFFSET_OF (boot_file, bp))
|
||||||
grub_env_set_net_property (name, "boot_file", bp->boot_file,
|
grub_env_set_net_property (name, "boot_file", bp->boot_file,
|
||||||
sizeof (bp->boot_file));
|
sizeof (bp->boot_file));
|
||||||
if (bp->server_ip)
|
|
||||||
{
|
|
||||||
grub_snprintf (server_ip, sizeof (server_ip), "%d.%d.%d.%d",
|
|
||||||
((grub_uint8_t *) &bp->server_ip)[0],
|
|
||||||
((grub_uint8_t *) &bp->server_ip)[1],
|
|
||||||
((grub_uint8_t *) &bp->server_ip)[2],
|
|
||||||
((grub_uint8_t *) &bp->server_ip)[3]);
|
|
||||||
grub_env_set_net_property (name, "next_server", server_ip, sizeof (server_ip));
|
|
||||||
grub_print_error ();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_def)
|
if (is_def)
|
||||||
grub_net_default_server = 0;
|
grub_net_default_server = 0;
|
||||||
if (is_def && !grub_net_default_server && bp->server_ip)
|
if (is_def && !grub_net_default_server && bp->server_ip)
|
||||||
{
|
{
|
||||||
grub_net_default_server = grub_strdup (server_ip);
|
grub_net_default_server = grub_xasprintf ("%d.%d.%d.%d",
|
||||||
|
((grub_uint8_t *) &bp->server_ip)[0],
|
||||||
|
((grub_uint8_t *) &bp->server_ip)[1],
|
||||||
|
((grub_uint8_t *) &bp->server_ip)[2],
|
||||||
|
((grub_uint8_t *) &bp->server_ip)[3]);
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,7 +209,11 @@ grub_net_configure_by_dhcp_ack (const char *name,
|
|||||||
|
|
||||||
if (device && !*device && bp->server_ip)
|
if (device && !*device && bp->server_ip)
|
||||||
{
|
{
|
||||||
*device = grub_xasprintf ("tftp,%s", server_ip);
|
*device = grub_xasprintf ("tftp,%d.%d.%d.%d",
|
||||||
|
((grub_uint8_t *) &bp->server_ip)[0],
|
||||||
|
((grub_uint8_t *) &bp->server_ip)[1],
|
||||||
|
((grub_uint8_t *) &bp->server_ip)[2],
|
||||||
|
((grub_uint8_t *) &bp->server_ip)[3]);
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
}
|
}
|
||||||
if (size > OFFSET_OF (server_name, bp)
|
if (size > OFFSET_OF (server_name, bp)
|
||||||
@@ -375,7 +368,6 @@ grub_cmd_dhcpopt (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
if (grub_strcmp (args[3], "string") == 0)
|
if (grub_strcmp (args[3], "string") == 0)
|
||||||
{
|
{
|
||||||
grub_err_t err = GRUB_ERR_NONE;
|
|
||||||
char *val = grub_malloc (taglength + 1);
|
char *val = grub_malloc (taglength + 1);
|
||||||
if (!val)
|
if (!val)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
@@ -384,9 +376,8 @@ grub_cmd_dhcpopt (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
if (args[0][0] == '-' && args[0][1] == 0)
|
if (args[0][0] == '-' && args[0][1] == 0)
|
||||||
grub_printf ("%s\n", val);
|
grub_printf ("%s\n", val);
|
||||||
else
|
else
|
||||||
err = grub_env_set (args[0], val);
|
return grub_env_set (args[0], val);
|
||||||
grub_free (val);
|
return GRUB_ERR_NONE;
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_strcmp (args[3], "number") == 0)
|
if (grub_strcmp (args[3], "number") == 0)
|
||||||
@@ -408,7 +399,6 @@ grub_cmd_dhcpopt (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
if (grub_strcmp (args[3], "hex") == 0)
|
if (grub_strcmp (args[3], "hex") == 0)
|
||||||
{
|
{
|
||||||
grub_err_t err = GRUB_ERR_NONE;
|
|
||||||
char *val = grub_malloc (2 * taglength + 1);
|
char *val = grub_malloc (2 * taglength + 1);
|
||||||
int i;
|
int i;
|
||||||
if (!val)
|
if (!val)
|
||||||
@@ -422,9 +412,8 @@ grub_cmd_dhcpopt (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
if (args[0][0] == '-' && args[0][1] == 0)
|
if (args[0][0] == '-' && args[0][1] == 0)
|
||||||
grub_printf ("%s\n", val);
|
grub_printf ("%s\n", val);
|
||||||
else
|
else
|
||||||
err = grub_env_set (args[0], val);
|
return grub_env_set (args[0], val);
|
||||||
grub_free (val);
|
return GRUB_ERR_NONE;
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
|||||||
@@ -238,15 +238,6 @@ recv_hook (grub_net_udp_socket_t sock __attribute__ ((unused)),
|
|||||||
char *redirect_save = NULL;
|
char *redirect_save = NULL;
|
||||||
grub_uint32_t ttl_all = ~0U;
|
grub_uint32_t ttl_all = ~0U;
|
||||||
|
|
||||||
/* Code apparently assumed that only one packet is received as response.
|
|
||||||
We may get multiple responses due to network condition, so check here
|
|
||||||
and quit early. */
|
|
||||||
if (*data->addresses)
|
|
||||||
{
|
|
||||||
grub_netbuff_free (nb);
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
head = (struct dns_header *) nb->data;
|
head = (struct dns_header *) nb->data;
|
||||||
ptr = (grub_uint8_t *) (head + 1);
|
ptr = (grub_uint8_t *) (head + 1);
|
||||||
if (ptr >= nb->tail)
|
if (ptr >= nb->tail)
|
||||||
|
|||||||
@@ -85,30 +85,24 @@ get_card_packet (struct grub_net_card *dev)
|
|||||||
grub_uint64_t start_time;
|
grub_uint64_t start_time;
|
||||||
struct grub_net_buff *nb;
|
struct grub_net_buff *nb;
|
||||||
|
|
||||||
start_time = grub_get_time_ms ();
|
nb = grub_netbuff_alloc (dev->mtu + 64 + 2);
|
||||||
do
|
|
||||||
rc = grub_ieee1275_read (data->handle, dev->rcvbuf, dev->rcvbufsize, &actual);
|
|
||||||
while ((actual <= 0 || rc < 0) && (grub_get_time_ms () - start_time < 200));
|
|
||||||
|
|
||||||
if (actual <= 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
nb = grub_netbuff_alloc (actual + 2);
|
|
||||||
if (!nb)
|
if (!nb)
|
||||||
return NULL;
|
return NULL;
|
||||||
/* Reserve 2 bytes so that 2 + 14/18 bytes of ethernet header is divisible
|
/* Reserve 2 bytes so that 2 + 14/18 bytes of ethernet header is divisible
|
||||||
by 4. So that IP header is aligned on 4 bytes. */
|
by 4. So that IP header is aligned on 4 bytes. */
|
||||||
grub_netbuff_reserve (nb, 2);
|
grub_netbuff_reserve (nb, 2);
|
||||||
|
|
||||||
grub_memcpy (nb->data, dev->rcvbuf, actual);
|
start_time = grub_get_time_ms ();
|
||||||
|
do
|
||||||
if (grub_netbuff_put (nb, actual))
|
rc = grub_ieee1275_read (data->handle, nb->data, dev->mtu + 64, &actual);
|
||||||
|
while ((actual <= 0 || rc < 0) && (grub_get_time_ms () - start_time < 200));
|
||||||
|
if (actual > 0)
|
||||||
{
|
{
|
||||||
|
grub_netbuff_put (nb, actual);
|
||||||
|
return nb;
|
||||||
|
}
|
||||||
grub_netbuff_free (nb);
|
grub_netbuff_free (nb);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
|
|
||||||
return nb;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct grub_net_card_driver ofdriver =
|
static struct grub_net_card_driver ofdriver =
|
||||||
@@ -153,11 +147,11 @@ grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath,
|
|||||||
char *comma_char = 0;
|
char *comma_char = 0;
|
||||||
char *equal_char = 0;
|
char *equal_char = 0;
|
||||||
grub_size_t field_counter = 0;
|
grub_size_t field_counter = 0;
|
||||||
|
|
||||||
grub_net_network_level_address_t client_addr, gateway_addr, subnet_mask;
|
grub_net_network_level_address_t client_addr, gateway_addr, subnet_mask;
|
||||||
grub_net_link_level_address_t hw_addr;
|
grub_net_link_level_address_t hw_addr;
|
||||||
grub_net_interface_flags_t flags = 0;
|
grub_net_interface_flags_t flags = 0;
|
||||||
struct grub_net_network_level_interface *inter = NULL;
|
struct grub_net_network_level_interface *inter;
|
||||||
grub_uint16_t vlantag = 0;
|
|
||||||
|
|
||||||
hw_addr.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET;
|
hw_addr.type = GRUB_NET_LINK_LEVEL_PROTOCOL_ETHERNET;
|
||||||
|
|
||||||
@@ -175,11 +169,6 @@ grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath,
|
|||||||
*equal_char = 0;
|
*equal_char = 0;
|
||||||
grub_env_set_net_property ((*card)->name, args, equal_char + 1,
|
grub_env_set_net_property ((*card)->name, args, equal_char + 1,
|
||||||
grub_strlen(equal_char + 1));
|
grub_strlen(equal_char + 1));
|
||||||
|
|
||||||
if ((grub_strcmp (args, "vtag") == 0) &&
|
|
||||||
(grub_strlen (equal_char + 1) == 8))
|
|
||||||
vlantag = grub_strtoul (equal_char + 1 + 4, 0, 16);
|
|
||||||
|
|
||||||
*equal_char = '=';
|
*equal_char = '=';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -218,10 +207,8 @@ grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath,
|
|||||||
hw_addr.mac, sizeof(hw_addr.mac), 0);
|
hw_addr.mac, sizeof(hw_addr.mac), 0);
|
||||||
inter = grub_net_add_addr ((*card)->name, *card, &client_addr, &hw_addr,
|
inter = grub_net_add_addr ((*card)->name, *card, &client_addr, &hw_addr,
|
||||||
flags);
|
flags);
|
||||||
inter->vlantag = vlantag;
|
|
||||||
grub_net_add_ipv4_local (inter,
|
grub_net_add_ipv4_local (inter,
|
||||||
__builtin_ctz (~grub_le_to_cpu32 (subnet_mask.ipv4)));
|
__builtin_ctz (~grub_le_to_cpu32 (subnet_mask.ipv4)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gateway_addr.ipv4 != 0)
|
if (gateway_addr.ipv4 != 0)
|
||||||
@@ -234,7 +221,7 @@ grub_ieee1275_parse_bootpath (const char *devpath, char *bootpath,
|
|||||||
target.ipv4.masksize = 0;
|
target.ipv4.masksize = 0;
|
||||||
rname = grub_xasprintf ("%s:default", ((*card)->name));
|
rname = grub_xasprintf ("%s:default", ((*card)->name));
|
||||||
if (rname)
|
if (rname)
|
||||||
grub_net_add_route_gw (rname, target, gateway_addr, inter);
|
grub_net_add_route_gw (rname, target, gateway_addr);
|
||||||
else
|
else
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
@@ -307,91 +294,6 @@ grub_ieee1275_net_config_real (const char *devpath, char **device, char **path,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate memory with alloc-mem */
|
|
||||||
static void *
|
|
||||||
grub_ieee1275_alloc_mem (grub_size_t len)
|
|
||||||
{
|
|
||||||
struct alloc_args
|
|
||||||
{
|
|
||||||
struct grub_ieee1275_common_hdr common;
|
|
||||||
grub_ieee1275_cell_t method;
|
|
||||||
grub_ieee1275_cell_t len;
|
|
||||||
grub_ieee1275_cell_t catch;
|
|
||||||
grub_ieee1275_cell_t result;
|
|
||||||
}
|
|
||||||
args;
|
|
||||||
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CANNOT_INTERPRET))
|
|
||||||
{
|
|
||||||
grub_error (GRUB_ERR_UNKNOWN_COMMAND, N_("interpret is not supported"));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
INIT_IEEE1275_COMMON (&args.common, "interpret", 2, 2);
|
|
||||||
args.len = len;
|
|
||||||
args.method = (grub_ieee1275_cell_t) "alloc-mem";
|
|
||||||
|
|
||||||
if (IEEE1275_CALL_ENTRY_FN (&args) == -1 || args.catch)
|
|
||||||
{
|
|
||||||
grub_error (GRUB_ERR_INVALID_COMMAND, N_("alloc-mem failed"));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return (void *)args.result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free memory allocated by alloc-mem */
|
|
||||||
static grub_err_t
|
|
||||||
grub_ieee1275_free_mem (void *addr, grub_size_t len)
|
|
||||||
{
|
|
||||||
struct free_args
|
|
||||||
{
|
|
||||||
struct grub_ieee1275_common_hdr common;
|
|
||||||
grub_ieee1275_cell_t method;
|
|
||||||
grub_ieee1275_cell_t len;
|
|
||||||
grub_ieee1275_cell_t addr;
|
|
||||||
grub_ieee1275_cell_t catch;
|
|
||||||
}
|
|
||||||
args;
|
|
||||||
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CANNOT_INTERPRET))
|
|
||||||
{
|
|
||||||
grub_error (GRUB_ERR_UNKNOWN_COMMAND, N_("interpret is not supported"));
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
INIT_IEEE1275_COMMON (&args.common, "interpret", 3, 1);
|
|
||||||
args.addr = (grub_ieee1275_cell_t)addr;
|
|
||||||
args.len = len;
|
|
||||||
args.method = (grub_ieee1275_cell_t) "free-mem";
|
|
||||||
|
|
||||||
if (IEEE1275_CALL_ENTRY_FN(&args) == -1 || args.catch)
|
|
||||||
{
|
|
||||||
grub_error (GRUB_ERR_INVALID_COMMAND, N_("free-mem failed"));
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *
|
|
||||||
ofnet_alloc_netbuf (grub_size_t len)
|
|
||||||
{
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN))
|
|
||||||
return grub_ieee1275_alloc_mem (len);
|
|
||||||
else
|
|
||||||
return grub_zalloc (len);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
ofnet_free_netbuf (void *addr, grub_size_t len)
|
|
||||||
{
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN))
|
|
||||||
grub_ieee1275_free_mem (addr, len);
|
|
||||||
else
|
|
||||||
grub_free (addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
search_net_devices (struct grub_ieee1275_devalias *alias)
|
search_net_devices (struct grub_ieee1275_devalias *alias)
|
||||||
{
|
{
|
||||||
@@ -507,19 +409,40 @@ search_net_devices (struct grub_ieee1275_devalias *alias)
|
|||||||
card->default_address = lla;
|
card->default_address = lla;
|
||||||
|
|
||||||
card->txbufsize = ALIGN_UP (card->mtu, 64) + 256;
|
card->txbufsize = ALIGN_UP (card->mtu, 64) + 256;
|
||||||
card->rcvbufsize = ALIGN_UP (card->mtu, 64) + 256;
|
|
||||||
|
|
||||||
card->txbuf = ofnet_alloc_netbuf (card->txbufsize);
|
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_VIRT_TO_REAL_BROKEN))
|
||||||
if (!card->txbuf)
|
|
||||||
goto fail_netbuf;
|
|
||||||
|
|
||||||
card->rcvbuf = ofnet_alloc_netbuf (card->rcvbufsize);
|
|
||||||
if (!card->rcvbuf)
|
|
||||||
{
|
{
|
||||||
grub_error_push ();
|
struct alloc_args
|
||||||
ofnet_free_netbuf (card->txbuf, card->txbufsize);
|
{
|
||||||
grub_error_pop ();
|
struct grub_ieee1275_common_hdr common;
|
||||||
goto fail_netbuf;
|
grub_ieee1275_cell_t method;
|
||||||
|
grub_ieee1275_cell_t len;
|
||||||
|
grub_ieee1275_cell_t catch;
|
||||||
|
grub_ieee1275_cell_t result;
|
||||||
|
}
|
||||||
|
args;
|
||||||
|
INIT_IEEE1275_COMMON (&args.common, "interpret", 2, 2);
|
||||||
|
args.len = card->txbufsize;
|
||||||
|
args.method = (grub_ieee1275_cell_t) "alloc-mem";
|
||||||
|
|
||||||
|
if (IEEE1275_CALL_ENTRY_FN (&args) == -1
|
||||||
|
|| args.catch)
|
||||||
|
{
|
||||||
|
card->txbuf = 0;
|
||||||
|
grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("out of memory"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
card->txbuf = (void *) args.result;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
card->txbuf = grub_zalloc (card->txbufsize);
|
||||||
|
if (!card->txbuf)
|
||||||
|
{
|
||||||
|
grub_free (ofdata->path);
|
||||||
|
grub_free (ofdata);
|
||||||
|
grub_free (card);
|
||||||
|
grub_print_error ();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
card->driver = NULL;
|
card->driver = NULL;
|
||||||
card->data = ofdata;
|
card->data = ofdata;
|
||||||
@@ -532,13 +455,6 @@ search_net_devices (struct grub_ieee1275_devalias *alias)
|
|||||||
card->driver = &ofdriver;
|
card->driver = &ofdriver;
|
||||||
grub_net_card_register (card);
|
grub_net_card_register (card);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail_netbuf:
|
|
||||||
grub_free (ofdata->path);
|
|
||||||
grub_free (ofdata);
|
|
||||||
grub_free (card);
|
|
||||||
grub_print_error ();
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/env.h>
|
|
||||||
#include <grub/net/ethernet.h>
|
#include <grub/net/ethernet.h>
|
||||||
#include <grub/net/ip.h>
|
#include <grub/net/ip.h>
|
||||||
#include <grub/net/arp.h>
|
#include <grub/net/arp.h>
|
||||||
@@ -57,17 +56,10 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf,
|
|||||||
{
|
{
|
||||||
struct etherhdr *eth;
|
struct etherhdr *eth;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t etherhdr_size;
|
|
||||||
grub_uint16_t vlantag_id = VLANTAG_IDENTIFIER;
|
|
||||||
|
|
||||||
etherhdr_size = sizeof (*eth);
|
COMPILE_TIME_ASSERT (sizeof (*eth) < GRUB_NET_MAX_LINK_HEADER_SIZE);
|
||||||
COMPILE_TIME_ASSERT (sizeof (*eth) + 4 < GRUB_NET_MAX_LINK_HEADER_SIZE);
|
|
||||||
|
|
||||||
/* Increase ethernet header in case of vlantag */
|
err = grub_netbuff_push (nb, sizeof (*eth));
|
||||||
if (inf->vlantag != 0)
|
|
||||||
etherhdr_size += 4;
|
|
||||||
|
|
||||||
err = grub_netbuff_push (nb, etherhdr_size);
|
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
eth = (struct etherhdr *) nb->data;
|
eth = (struct etherhdr *) nb->data;
|
||||||
@@ -84,19 +76,6 @@ send_ethernet_packet (struct grub_net_network_level_interface *inf,
|
|||||||
return err;
|
return err;
|
||||||
inf->card->opened = 1;
|
inf->card->opened = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check and add a vlan-tag if needed. */
|
|
||||||
if (inf->vlantag != 0)
|
|
||||||
{
|
|
||||||
/* Move eth type to the right */
|
|
||||||
grub_memcpy ((char *) nb->data + etherhdr_size - 2,
|
|
||||||
(char *) nb->data + etherhdr_size - 6, 2);
|
|
||||||
|
|
||||||
/* Add the tag in the middle */
|
|
||||||
grub_memcpy ((char *) nb->data + etherhdr_size - 6, &vlantag_id, 2);
|
|
||||||
grub_memcpy ((char *) nb->data + etherhdr_size - 4, (char *) &(inf->vlantag), 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
return inf->card->driver->send (inf->card, nb);
|
return inf->card->driver->send (inf->card, nb);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,25 +90,10 @@ grub_net_recv_ethernet_packet (struct grub_net_buff *nb,
|
|||||||
grub_net_link_level_address_t hwaddress;
|
grub_net_link_level_address_t hwaddress;
|
||||||
grub_net_link_level_address_t src_hwaddress;
|
grub_net_link_level_address_t src_hwaddress;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t etherhdr_size = sizeof (*eth);
|
|
||||||
grub_uint16_t vlantag = 0;
|
|
||||||
|
|
||||||
|
|
||||||
/* Check if a vlan-tag is present. If so, the ethernet header is 4 bytes */
|
|
||||||
/* longer than the original one. The vlantag id is extracted and the header */
|
|
||||||
/* is reseted to the original size. */
|
|
||||||
if (grub_get_unaligned16 (nb->data + etherhdr_size - 2) == VLANTAG_IDENTIFIER)
|
|
||||||
{
|
|
||||||
vlantag = grub_get_unaligned16 (nb->data + etherhdr_size);
|
|
||||||
etherhdr_size += 4;
|
|
||||||
/* Move eth type to the original position */
|
|
||||||
grub_memcpy((char *) nb->data + etherhdr_size - 6,
|
|
||||||
(char *) nb->data + etherhdr_size - 2, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
eth = (struct etherhdr *) nb->data;
|
eth = (struct etherhdr *) nb->data;
|
||||||
type = grub_be_to_cpu16 (eth->type);
|
type = grub_be_to_cpu16 (eth->type);
|
||||||
err = grub_netbuff_pull (nb, etherhdr_size);
|
err = grub_netbuff_pull (nb, sizeof (*eth));
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
@@ -157,14 +121,13 @@ grub_net_recv_ethernet_packet (struct grub_net_buff *nb,
|
|||||||
{
|
{
|
||||||
/* ARP packet. */
|
/* ARP packet. */
|
||||||
case GRUB_NET_ETHERTYPE_ARP:
|
case GRUB_NET_ETHERTYPE_ARP:
|
||||||
grub_net_arp_receive (nb, card, &vlantag);
|
grub_net_arp_receive (nb, card);
|
||||||
grub_netbuff_free (nb);
|
grub_netbuff_free (nb);
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
/* IP packet. */
|
/* IP packet. */
|
||||||
case GRUB_NET_ETHERTYPE_IP:
|
case GRUB_NET_ETHERTYPE_IP:
|
||||||
case GRUB_NET_ETHERTYPE_IP6:
|
case GRUB_NET_ETHERTYPE_IP6:
|
||||||
return grub_net_recv_ip_packets (nb, card, &hwaddress, &src_hwaddress,
|
return grub_net_recv_ip_packets (nb, card, &hwaddress, &src_hwaddress);
|
||||||
&vlantag);
|
|
||||||
}
|
}
|
||||||
grub_netbuff_free (nb);
|
grub_netbuff_free (nb);
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|||||||
@@ -381,8 +381,9 @@ http_establish (struct grub_file *file, grub_off_t offset, int initial)
|
|||||||
ptr = nb->tail;
|
ptr = nb->tail;
|
||||||
grub_snprintf ((char *) ptr,
|
grub_snprintf ((char *) ptr,
|
||||||
sizeof ("Range: bytes=XXXXXXXXXXXXXXXXXXXX-"
|
sizeof ("Range: bytes=XXXXXXXXXXXXXXXXXXXX-"
|
||||||
|
"\r\n"
|
||||||
"\r\n"),
|
"\r\n"),
|
||||||
"Range: bytes=%" PRIuGRUB_UINT64_T "-\r\n",
|
"Range: bytes=%" PRIuGRUB_UINT64_T "-\r\n\r\n",
|
||||||
offset);
|
offset);
|
||||||
grub_netbuff_put (nb, grub_strlen ((char *) ptr));
|
grub_netbuff_put (nb, grub_strlen ((char *) ptr));
|
||||||
}
|
}
|
||||||
@@ -449,7 +450,6 @@ http_seek (struct grub_file *file, grub_off_t off)
|
|||||||
}
|
}
|
||||||
|
|
||||||
file->device->net->stall = 0;
|
file->device->net->stall = 0;
|
||||||
file->device->net->eof = 0;
|
|
||||||
file->device->net->offset = off;
|
file->device->net->offset = off;
|
||||||
|
|
||||||
data = grub_zalloc (sizeof (*data));
|
data = grub_zalloc (sizeof (*data));
|
||||||
|
|||||||
@@ -115,7 +115,6 @@ grub_net_recv_icmp6_packet (struct grub_net_buff *nb,
|
|||||||
grub_uint8_t ttl)
|
grub_uint8_t ttl)
|
||||||
{
|
{
|
||||||
struct icmp_header *icmph;
|
struct icmp_header *icmph;
|
||||||
struct grub_net_network_level_interface *orig_inf = inf;
|
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint16_t checksum;
|
grub_uint16_t checksum;
|
||||||
|
|
||||||
@@ -346,31 +345,14 @@ grub_net_recv_icmp6_packet (struct grub_net_buff *nb,
|
|||||||
{
|
{
|
||||||
grub_uint8_t *ptr;
|
grub_uint8_t *ptr;
|
||||||
struct option_header *ohdr;
|
struct option_header *ohdr;
|
||||||
struct router_adv *radv;
|
|
||||||
struct grub_net_network_level_interface *route_inf = NULL;
|
|
||||||
int default_route = 0;
|
|
||||||
if (icmph->code)
|
if (icmph->code)
|
||||||
break;
|
break;
|
||||||
radv = (struct router_adv *)nb->data;
|
|
||||||
err = grub_netbuff_pull (nb, sizeof (struct router_adv));
|
err = grub_netbuff_pull (nb, sizeof (struct router_adv));
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
grub_netbuff_free (nb);
|
grub_netbuff_free (nb);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
if (grub_be_to_cpu16 (radv->router_lifetime) > 0)
|
|
||||||
{
|
|
||||||
struct grub_net_route *route;
|
|
||||||
|
|
||||||
FOR_NET_ROUTES (route)
|
|
||||||
{
|
|
||||||
if (!grub_memcmp (&route->gw, source, sizeof (route->gw)))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (route == NULL)
|
|
||||||
default_route = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ptr = (grub_uint8_t *) nb->data; ptr < nb->tail;
|
for (ptr = (grub_uint8_t *) nb->data; ptr < nb->tail;
|
||||||
ptr += ohdr->len * 8)
|
ptr += ohdr->len * 8)
|
||||||
{
|
{
|
||||||
@@ -431,11 +413,7 @@ grub_net_recv_icmp6_packet (struct grub_net_buff *nb,
|
|||||||
/* Update lease time if needed here once we have
|
/* Update lease time if needed here once we have
|
||||||
lease times. */
|
lease times. */
|
||||||
if (inf)
|
if (inf)
|
||||||
{
|
|
||||||
if (!route_inf)
|
|
||||||
route_inf = inf;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
grub_dprintf ("net", "creating slaac\n");
|
grub_dprintf ("net", "creating slaac\n");
|
||||||
|
|
||||||
@@ -451,51 +429,12 @@ grub_net_recv_icmp6_packet (struct grub_net_buff *nb,
|
|||||||
inf = grub_net_add_addr (name,
|
inf = grub_net_add_addr (name,
|
||||||
card, &addr,
|
card, &addr,
|
||||||
&slaac->address, 0);
|
&slaac->address, 0);
|
||||||
if (!route_inf)
|
|
||||||
route_inf = inf;
|
|
||||||
grub_net_add_route (name, netaddr, inf);
|
grub_net_add_route (name, netaddr, inf);
|
||||||
grub_free (name);
|
grub_free (name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (default_route)
|
|
||||||
{
|
|
||||||
char *name;
|
|
||||||
grub_net_network_level_netaddress_t netaddr;
|
|
||||||
name = grub_xasprintf ("%s:ra:default6", card->name);
|
|
||||||
if (!name)
|
|
||||||
{
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
goto next;
|
|
||||||
}
|
|
||||||
/* Default routes take alll of the traffic, so make the mask huge */
|
|
||||||
netaddr.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6;
|
|
||||||
netaddr.ipv6.masksize = 0;
|
|
||||||
netaddr.ipv6.base[0] = 0;
|
|
||||||
netaddr.ipv6.base[1] = 0;
|
|
||||||
|
|
||||||
/* May not have gotten slaac info, find a global address on this
|
|
||||||
card. */
|
|
||||||
if (route_inf == NULL)
|
|
||||||
{
|
|
||||||
FOR_NET_NETWORK_LEVEL_INTERFACES (inf)
|
|
||||||
{
|
|
||||||
if (inf->card == card && inf != orig_inf
|
|
||||||
&& inf->address.type == GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6
|
|
||||||
&& grub_net_hwaddr_cmp(&inf->hwaddress,
|
|
||||||
&orig_inf->hwaddress) == 0)
|
|
||||||
{
|
|
||||||
route_inf = inf;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (route_inf != NULL)
|
|
||||||
grub_net_add_route_gw (name, netaddr, *source, route_inf);
|
|
||||||
grub_free (name);
|
|
||||||
}
|
|
||||||
next:
|
|
||||||
if (ptr != nb->tail)
|
if (ptr != nb->tail)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-26
@@ -228,7 +228,6 @@ handle_dgram (struct grub_net_buff *nb,
|
|||||||
grub_net_ip_protocol_t proto,
|
grub_net_ip_protocol_t proto,
|
||||||
const grub_net_network_level_address_t *source,
|
const grub_net_network_level_address_t *source,
|
||||||
const grub_net_network_level_address_t *dest,
|
const grub_net_network_level_address_t *dest,
|
||||||
grub_uint16_t *vlantag,
|
|
||||||
grub_uint8_t ttl)
|
grub_uint8_t ttl)
|
||||||
{
|
{
|
||||||
struct grub_net_network_level_interface *inf = NULL;
|
struct grub_net_network_level_interface *inf = NULL;
|
||||||
@@ -294,15 +293,6 @@ handle_dgram (struct grub_net_buff *nb,
|
|||||||
&& grub_net_addr_cmp (&inf->address, dest) == 0
|
&& grub_net_addr_cmp (&inf->address, dest) == 0
|
||||||
&& grub_net_hwaddr_cmp (&inf->hwaddress, hwaddress) == 0)
|
&& grub_net_hwaddr_cmp (&inf->hwaddress, hwaddress) == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Verify vlantag id */
|
|
||||||
if (inf->card == card && inf->vlantag != *vlantag)
|
|
||||||
{
|
|
||||||
grub_dprintf ("net", "invalid vlantag! %x != %x\n",
|
|
||||||
inf->vlantag, *vlantag);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Solicited node multicast. */
|
/* Solicited node multicast. */
|
||||||
if (inf->card == card
|
if (inf->card == card
|
||||||
&& inf->address.type == GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6
|
&& inf->address.type == GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6
|
||||||
@@ -373,9 +363,7 @@ static void
|
|||||||
free_old_fragments (void)
|
free_old_fragments (void)
|
||||||
{
|
{
|
||||||
struct reassemble *rsm, **prev;
|
struct reassemble *rsm, **prev;
|
||||||
grub_uint64_t limit_time = grub_get_time_ms ();
|
grub_uint64_t limit_time = grub_get_time_ms () - 90000;
|
||||||
|
|
||||||
limit_time = (limit_time > 90000) ? limit_time - 90000 : 0;
|
|
||||||
|
|
||||||
for (prev = &reassembles, rsm = *prev; rsm; rsm = *prev)
|
for (prev = &reassembles, rsm = *prev; rsm; rsm = *prev)
|
||||||
if (rsm->last_time < limit_time)
|
if (rsm->last_time < limit_time)
|
||||||
@@ -393,8 +381,7 @@ static grub_err_t
|
|||||||
grub_net_recv_ip4_packets (struct grub_net_buff *nb,
|
grub_net_recv_ip4_packets (struct grub_net_buff *nb,
|
||||||
struct grub_net_card *card,
|
struct grub_net_card *card,
|
||||||
const grub_net_link_level_address_t *hwaddress,
|
const grub_net_link_level_address_t *hwaddress,
|
||||||
const grub_net_link_level_address_t *src_hwaddress,
|
const grub_net_link_level_address_t *src_hwaddress)
|
||||||
grub_uint16_t *vlantag)
|
|
||||||
{
|
{
|
||||||
struct iphdr *iph = (struct iphdr *) nb->data;
|
struct iphdr *iph = (struct iphdr *) nb->data;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
@@ -469,7 +456,7 @@ grub_net_recv_ip4_packets (struct grub_net_buff *nb,
|
|||||||
dest.ipv4 = iph->dest;
|
dest.ipv4 = iph->dest;
|
||||||
|
|
||||||
return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol,
|
return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol,
|
||||||
&source, &dest, vlantag, iph->ttl);
|
&source, &dest, iph->ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (prev = &reassembles, rsm = *prev; rsm; prev = &rsm->next, rsm = *prev)
|
for (prev = &reassembles, rsm = *prev; rsm; prev = &rsm->next, rsm = *prev)
|
||||||
@@ -605,7 +592,7 @@ grub_net_recv_ip4_packets (struct grub_net_buff *nb,
|
|||||||
dest.ipv4 = dst;
|
dest.ipv4 = dst;
|
||||||
|
|
||||||
return handle_dgram (ret, card, src_hwaddress,
|
return handle_dgram (ret, card, src_hwaddress,
|
||||||
hwaddress, proto, &source, &dest, vlantag,
|
hwaddress, proto, &source, &dest,
|
||||||
ttl);
|
ttl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -663,8 +650,7 @@ static grub_err_t
|
|||||||
grub_net_recv_ip6_packets (struct grub_net_buff *nb,
|
grub_net_recv_ip6_packets (struct grub_net_buff *nb,
|
||||||
struct grub_net_card *card,
|
struct grub_net_card *card,
|
||||||
const grub_net_link_level_address_t *hwaddress,
|
const grub_net_link_level_address_t *hwaddress,
|
||||||
const grub_net_link_level_address_t *src_hwaddress,
|
const grub_net_link_level_address_t *src_hwaddress)
|
||||||
grub_uint16_t *vlantag)
|
|
||||||
{
|
{
|
||||||
struct ip6hdr *iph = (struct ip6hdr *) nb->data;
|
struct ip6hdr *iph = (struct ip6hdr *) nb->data;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
@@ -715,24 +701,21 @@ grub_net_recv_ip6_packets (struct grub_net_buff *nb,
|
|||||||
grub_memcpy (dest.ipv6, &iph->dest, sizeof (dest.ipv6));
|
grub_memcpy (dest.ipv6, &iph->dest, sizeof (dest.ipv6));
|
||||||
|
|
||||||
return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol,
|
return handle_dgram (nb, card, src_hwaddress, hwaddress, iph->protocol,
|
||||||
&source, &dest, vlantag, iph->ttl);
|
&source, &dest, iph->ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_err_t
|
grub_err_t
|
||||||
grub_net_recv_ip_packets (struct grub_net_buff *nb,
|
grub_net_recv_ip_packets (struct grub_net_buff *nb,
|
||||||
struct grub_net_card *card,
|
struct grub_net_card *card,
|
||||||
const grub_net_link_level_address_t *hwaddress,
|
const grub_net_link_level_address_t *hwaddress,
|
||||||
const grub_net_link_level_address_t *src_hwaddress,
|
const grub_net_link_level_address_t *src_hwaddress)
|
||||||
grub_uint16_t *vlantag)
|
|
||||||
{
|
{
|
||||||
struct iphdr *iph = (struct iphdr *) nb->data;
|
struct iphdr *iph = (struct iphdr *) nb->data;
|
||||||
|
|
||||||
if ((iph->verhdrlen >> 4) == 4)
|
if ((iph->verhdrlen >> 4) == 4)
|
||||||
return grub_net_recv_ip4_packets (nb, card, hwaddress, src_hwaddress,
|
return grub_net_recv_ip4_packets (nb, card, hwaddress, src_hwaddress);
|
||||||
vlantag);
|
|
||||||
if ((iph->verhdrlen >> 4) == 6)
|
if ((iph->verhdrlen >> 4) == 6)
|
||||||
return grub_net_recv_ip6_packets (nb, card, hwaddress, src_hwaddress,
|
return grub_net_recv_ip6_packets (nb, card, hwaddress, src_hwaddress);
|
||||||
vlantag);
|
|
||||||
grub_dprintf ("net", "Bad IP version: %d\n", (iph->verhdrlen >> 4));
|
grub_dprintf ("net", "Bad IP version: %d\n", (iph->verhdrlen >> 4));
|
||||||
grub_netbuff_free (nb);
|
grub_netbuff_free (nb);
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|||||||
+25
-23
@@ -37,6 +37,21 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
|
|
||||||
char *grub_net_default_server;
|
char *grub_net_default_server;
|
||||||
|
|
||||||
|
struct grub_net_route
|
||||||
|
{
|
||||||
|
struct grub_net_route *next;
|
||||||
|
struct grub_net_route **prev;
|
||||||
|
grub_net_network_level_netaddress_t target;
|
||||||
|
char *name;
|
||||||
|
struct grub_net_network_level_protocol *prot;
|
||||||
|
int is_gateway;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct grub_net_network_level_interface *interface;
|
||||||
|
grub_net_network_level_address_t gw;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
struct grub_net_route *grub_net_routes = NULL;
|
struct grub_net_route *grub_net_routes = NULL;
|
||||||
struct grub_net_network_level_interface *grub_net_network_level_interfaces = NULL;
|
struct grub_net_network_level_interface *grub_net_network_level_interfaces = NULL;
|
||||||
struct grub_net_card *grub_net_cards = NULL;
|
struct grub_net_card *grub_net_cards = NULL;
|
||||||
@@ -395,6 +410,14 @@ grub_cmd_ipv6_autoconf (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
grub_net_route_register (struct grub_net_route *route)
|
||||||
|
{
|
||||||
|
grub_list_push (GRUB_AS_LIST_P (&grub_net_routes),
|
||||||
|
GRUB_AS_LIST (route));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define FOR_NET_ROUTES(var) for (var = grub_net_routes; var; var = var->next)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
parse_ip (const char *val, grub_uint32_t *ip, const char **rest)
|
parse_ip (const char *val, grub_uint32_t *ip, const char **rest)
|
||||||
@@ -501,8 +524,6 @@ match_net (const grub_net_network_level_netaddress_t *net,
|
|||||||
case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6:
|
case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV6:
|
||||||
{
|
{
|
||||||
grub_uint64_t mask[2];
|
grub_uint64_t mask[2];
|
||||||
if (net->ipv6.masksize == 0)
|
|
||||||
return 1;
|
|
||||||
if (net->ipv6.masksize <= 64)
|
if (net->ipv6.masksize <= 64)
|
||||||
{
|
{
|
||||||
mask[0] = 0xffffffffffffffffULL << (64 - net->ipv6.masksize);
|
mask[0] = 0xffffffffffffffffULL << (64 - net->ipv6.masksize);
|
||||||
@@ -666,14 +687,7 @@ grub_net_route_address (grub_net_network_level_address_t addr,
|
|||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
if (depth == 0)
|
if (depth == 0)
|
||||||
{
|
|
||||||
*gateway = bestroute->gw;
|
*gateway = bestroute->gw;
|
||||||
if (bestroute->interface != NULL)
|
|
||||||
{
|
|
||||||
*interf = bestroute->interface;
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
curtarget = bestroute->gw;
|
curtarget = bestroute->gw;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1095,8 +1109,7 @@ grub_net_add_route (const char *name,
|
|||||||
grub_err_t
|
grub_err_t
|
||||||
grub_net_add_route_gw (const char *name,
|
grub_net_add_route_gw (const char *name,
|
||||||
grub_net_network_level_netaddress_t target,
|
grub_net_network_level_netaddress_t target,
|
||||||
grub_net_network_level_address_t gw,
|
grub_net_network_level_address_t gw)
|
||||||
struct grub_net_network_level_interface *inter)
|
|
||||||
{
|
{
|
||||||
struct grub_net_route *route;
|
struct grub_net_route *route;
|
||||||
|
|
||||||
@@ -1114,7 +1127,6 @@ grub_net_add_route_gw (const char *name,
|
|||||||
route->target = target;
|
route->target = target;
|
||||||
route->is_gateway = 1;
|
route->is_gateway = 1;
|
||||||
route->gw = gw;
|
route->gw = gw;
|
||||||
route->interface = inter;
|
|
||||||
|
|
||||||
grub_net_route_register (route);
|
grub_net_route_register (route);
|
||||||
|
|
||||||
@@ -1140,7 +1152,7 @@ grub_cmd_addroute (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
err = grub_net_resolve_address (args[3], &gw);
|
err = grub_net_resolve_address (args[3], &gw);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
return grub_net_add_route_gw (args[0], target, gw, NULL);
|
return grub_net_add_route_gw (args[0], target, gw);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1346,15 +1358,6 @@ grub_net_open_real (const char *name)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_strncmp (prefdev, "pxe", sizeof ("pxe") - 1) == 0 &&
|
|
||||||
(!prefdev[sizeof ("pxe") - 1] || (prefdev[sizeof("pxe") - 1] == ':')))
|
|
||||||
{
|
|
||||||
grub_free (prefdev);
|
|
||||||
prefdev = grub_strdup ("tftp");
|
|
||||||
if (!prefdev)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
comma = grub_strchr (prefdev, ',');
|
comma = grub_strchr (prefdev, ',');
|
||||||
if (comma)
|
if (comma)
|
||||||
*comma = '\0';
|
*comma = '\0';
|
||||||
@@ -1681,7 +1684,6 @@ grub_net_seek_real (struct grub_file *file, grub_off_t offset)
|
|||||||
file->device->net->packs.last = NULL;
|
file->device->net->packs.last = NULL;
|
||||||
file->device->net->offset = 0;
|
file->device->net->offset = 0;
|
||||||
file->device->net->eof = 0;
|
file->device->net->eof = 0;
|
||||||
file->device->net->stall = 0;
|
|
||||||
err = file->device->net->protocol->open (file, file->device->net->name);
|
err = file->device->net->protocol->open (file, file->device->net->name);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|||||||
@@ -1144,16 +1144,6 @@ grub_bidi_line_logical_to_visual (const grub_uint32_t *logical,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
is_visible (const struct grub_unicode_glyph *gl)
|
|
||||||
{
|
|
||||||
if (gl->ncomb)
|
|
||||||
return 1;
|
|
||||||
if (gl->base == GRUB_UNICODE_LRM || gl->base == GRUB_UNICODE_RLM)
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_ssize_t
|
grub_ssize_t
|
||||||
grub_bidi_logical_to_visual (const grub_uint32_t *logical,
|
grub_bidi_logical_to_visual (const grub_uint32_t *logical,
|
||||||
grub_size_t logical_len,
|
grub_size_t logical_len,
|
||||||
@@ -1174,7 +1164,6 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical,
|
|||||||
if (ptr == logical + logical_len || *ptr == '\n')
|
if (ptr == logical + logical_len || *ptr == '\n')
|
||||||
{
|
{
|
||||||
grub_ssize_t ret;
|
grub_ssize_t ret;
|
||||||
grub_ssize_t i, j;
|
|
||||||
ret = grub_bidi_line_logical_to_visual (line_start,
|
ret = grub_bidi_line_logical_to_visual (line_start,
|
||||||
ptr - line_start,
|
ptr - line_start,
|
||||||
visual_ptr,
|
visual_ptr,
|
||||||
@@ -1193,10 +1182,7 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical,
|
|||||||
grub_free (*visual_out);
|
grub_free (*visual_out);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
for (i = 0, j = 0; i < ret; i++)
|
visual_ptr += ret;
|
||||||
if (is_visible(&visual_ptr[i]))
|
|
||||||
visual_ptr[j++] = visual_ptr[i];
|
|
||||||
visual_ptr += j;
|
|
||||||
line_start = ptr;
|
line_start = ptr;
|
||||||
if (ptr != logical + logical_len)
|
if (ptr != logical + logical_len)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -254,8 +254,6 @@ update_screen (struct screen *screen, struct per_term_screen *term_screen,
|
|||||||
mode = ALL_LINES;
|
mode = ALL_LINES;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_term_setcursor (term_screen->term, 0);
|
|
||||||
|
|
||||||
if (mode != NO_LINE)
|
if (mode != NO_LINE)
|
||||||
{
|
{
|
||||||
/* Draw lines. This code is tricky, because this must calculate logical
|
/* Draw lines. This code is tricky, because this must calculate logical
|
||||||
@@ -363,8 +361,6 @@ update_screen (struct screen *screen, struct per_term_screen *term_screen,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_term_setcursor (term_screen->term, 1);
|
|
||||||
|
|
||||||
grub_term_refresh (term_screen->term);
|
grub_term_refresh (term_screen->term);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,12 +40,6 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MAJOR_IN_MKDEV)
|
|
||||||
#include <sys/mkdev.h>
|
|
||||||
#elif defined(MAJOR_IN_SYSMACROS)
|
|
||||||
#include <sys/sysmacros.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <libdevmapper.h>
|
#include <libdevmapper.h>
|
||||||
|
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
@@ -143,7 +137,7 @@ grub_util_get_dm_abstraction (const char *os_dev)
|
|||||||
grub_free (uuid);
|
grub_free (uuid);
|
||||||
return GRUB_DEV_ABSTRACTION_LVM;
|
return GRUB_DEV_ABSTRACTION_LVM;
|
||||||
}
|
}
|
||||||
if (strncmp (uuid, "CRYPT-LUKS1-", 12) == 0)
|
if (strncmp (uuid, "CRYPT-LUKS1-", 4) == 0)
|
||||||
{
|
{
|
||||||
grub_free (uuid);
|
grub_free (uuid);
|
||||||
return GRUB_DEV_ABSTRACTION_LUKS;
|
return GRUB_DEV_ABSTRACTION_LUKS;
|
||||||
|
|||||||
@@ -24,11 +24,6 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
#if defined(MAJOR_IN_MKDEV)
|
|
||||||
#include <sys/mkdev.h>
|
|
||||||
#elif defined(MAJOR_IN_SYSMACROS)
|
|
||||||
#include <sys/sysmacros.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_DEVICE_MAPPER
|
#ifdef HAVE_DEVICE_MAPPER
|
||||||
# include <libdevmapper.h>
|
# include <libdevmapper.h>
|
||||||
|
|||||||
@@ -35,12 +35,6 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MAJOR_IN_MKDEV)
|
|
||||||
#include <sys/mkdev.h>
|
|
||||||
#elif defined(MAJOR_IN_SYSMACROS)
|
|
||||||
#include <sys/sysmacros.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
#include <sys/ioctl.h> /* ioctl */
|
#include <sys/ioctl.h> /* ioctl */
|
||||||
#include <sys/mount.h>
|
#include <sys/mount.h>
|
||||||
@@ -380,30 +374,24 @@ get_btrfs_fs_prefix (const char *mount_path)
|
|||||||
char **
|
char **
|
||||||
grub_find_root_devices_from_mountinfo (const char *dir, char **relroot)
|
grub_find_root_devices_from_mountinfo (const char *dir, char **relroot)
|
||||||
{
|
{
|
||||||
FILE *fp = NULL;
|
FILE *fp;
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
grub_size_t entry_len, entry_max = 4;
|
grub_size_t entry_len = 0, entry_max = 4;
|
||||||
struct mountinfo_entry *entries;
|
struct mountinfo_entry *entries;
|
||||||
struct mountinfo_entry parent_entry = { 0, 0, 0, "", "", "", "" };
|
struct mountinfo_entry parent_entry = { 0, 0, 0, "", "", "", "" };
|
||||||
int i;
|
int i;
|
||||||
int retry = 0;
|
|
||||||
int dir_fd = -1;
|
|
||||||
char **ret = NULL;
|
|
||||||
|
|
||||||
if (! *dir)
|
if (! *dir)
|
||||||
dir = "/";
|
dir = "/";
|
||||||
if (relroot)
|
if (relroot)
|
||||||
*relroot = NULL;
|
*relroot = NULL;
|
||||||
|
|
||||||
entries = xmalloc (entry_max * sizeof (*entries));
|
|
||||||
|
|
||||||
again:
|
|
||||||
fp = grub_util_fopen ("/proc/self/mountinfo", "r");
|
fp = grub_util_fopen ("/proc/self/mountinfo", "r");
|
||||||
if (! fp)
|
if (! fp)
|
||||||
goto out; /* fall through to other methods */
|
return NULL; /* fall through to other methods */
|
||||||
|
|
||||||
entry_len = 0;
|
entries = xmalloc (entry_max * sizeof (*entries));
|
||||||
|
|
||||||
/* First, build a list of relevant visible mounts. */
|
/* First, build a list of relevant visible mounts. */
|
||||||
while (getline (&buf, &len, fp) > 0)
|
while (getline (&buf, &len, fp) > 0)
|
||||||
@@ -490,6 +478,7 @@ again:
|
|||||||
/* Now scan visible mounts for the ones we're interested in. */
|
/* Now scan visible mounts for the ones we're interested in. */
|
||||||
for (i = entry_len - 1; i >= 0; i--)
|
for (i = entry_len - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
|
char **ret = NULL;
|
||||||
char *fs_prefix = NULL;
|
char *fs_prefix = NULL;
|
||||||
if (!*entries[i].device)
|
if (!*entries[i].device)
|
||||||
continue;
|
continue;
|
||||||
@@ -520,23 +509,6 @@ again:
|
|||||||
ret = grub_find_root_devices_from_btrfs (dir);
|
ret = grub_find_root_devices_from_btrfs (dir);
|
||||||
fs_prefix = get_btrfs_fs_prefix (entries[i].enc_path);
|
fs_prefix = get_btrfs_fs_prefix (entries[i].enc_path);
|
||||||
}
|
}
|
||||||
else if (!retry && grub_strcmp (entries[i].fstype, "autofs") == 0)
|
|
||||||
{
|
|
||||||
/* If the best match is automounted, try to trigger mount. We cannot
|
|
||||||
simply return here because stat() on automounted directory does not
|
|
||||||
trigger mount and returns bogus (pseudo)device number instead.
|
|
||||||
We keep mountpoint open until end of scan to prevent timeout. */
|
|
||||||
|
|
||||||
int flags = O_RDONLY|O_DIRECTORY;
|
|
||||||
|
|
||||||
fclose (fp);
|
|
||||||
#ifdef O_LARGEFILE
|
|
||||||
flags |= O_LARGEFILE;
|
|
||||||
#endif
|
|
||||||
dir_fd = open (entries[i].enc_path, flags);
|
|
||||||
retry = 1;
|
|
||||||
goto again;
|
|
||||||
}
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
{
|
{
|
||||||
ret = xmalloc (2 * sizeof (ret[0]));
|
ret = xmalloc (2 * sizeof (ret[0]));
|
||||||
@@ -566,17 +538,16 @@ again:
|
|||||||
}
|
}
|
||||||
if (fs_prefix != entries[i].enc_root)
|
if (fs_prefix != entries[i].enc_root)
|
||||||
free (fs_prefix);
|
free (fs_prefix);
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
free (buf);
|
free (buf);
|
||||||
free (entries);
|
free (entries);
|
||||||
if (fp)
|
|
||||||
fclose (fp);
|
fclose (fp);
|
||||||
if (dir_fd != -1)
|
|
||||||
close (dir_fd);
|
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
free (buf);
|
||||||
|
free (entries);
|
||||||
|
fclose (fp);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
|
|||||||
@@ -51,10 +51,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#if defined(MAJOR_IN_MKDEV)
|
#if defined(HAVE_SYS_MKDEV_H)
|
||||||
#include <sys/mkdev.h>
|
#include <sys/mkdev.h>
|
||||||
#elif defined(MAJOR_IN_SYSMACROS)
|
|
||||||
#include <sys/sysmacros.h>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR)
|
#if defined(HAVE_LIBZFS) && defined(HAVE_LIBNVPAIR)
|
||||||
|
|||||||
@@ -77,19 +77,11 @@ grub_util_get_fd_size (grub_util_fd_t fd, const char *name, unsigned *log_secsiz
|
|||||||
int
|
int
|
||||||
grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t off)
|
grub_util_fd_seek (grub_util_fd_t fd, grub_uint64_t off)
|
||||||
{
|
{
|
||||||
#if SIZEOF_OFF_T == 8
|
|
||||||
off_t offset = (off_t) off;
|
off_t offset = (off_t) off;
|
||||||
|
|
||||||
if (lseek (fd, offset, SEEK_SET) != offset)
|
if (lseek (fd, offset, SEEK_SET) != offset)
|
||||||
return -1;
|
return -1;
|
||||||
#elif SIZEOF_OFF64_T == 8
|
|
||||||
off64_t offset = (off64_t) off;
|
|
||||||
|
|
||||||
if (lseek64 (fd, offset, SEEK_SET) != offset)
|
|
||||||
return -1;
|
|
||||||
#else
|
|
||||||
#error "No large file support"
|
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -251,6 +251,7 @@ grub_script_lexer_init (struct grub_parser_param *parser, char *script,
|
|||||||
{
|
{
|
||||||
parser->lexerstate = 0;
|
parser->lexerstate = 0;
|
||||||
yylex_destroy (lexerstate->yyscanner);
|
yylex_destroy (lexerstate->yyscanner);
|
||||||
|
grub_free (lexerstate->yyscanner);
|
||||||
grub_free (lexerstate->text);
|
grub_free (lexerstate->text);
|
||||||
grub_free (lexerstate);
|
grub_free (lexerstate);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -4,8 +4,6 @@
|
|||||||
* Copyright (C) 2012 Google Inc.
|
* Copyright (C) 2012 Google Inc.
|
||||||
* Copyright (C) 2016 Free Software Foundation, Inc.
|
* Copyright (C) 2016 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This is based on depthcharge code.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
|||||||
@@ -4,8 +4,6 @@
|
|||||||
* Copyright (C) 2012 Google Inc.
|
* Copyright (C) 2012 Google Inc.
|
||||||
* Copyright (C) 2016 Free Software Foundation, Inc.
|
* Copyright (C) 2016 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* This is based on depthcharge code.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
@@ -28,7 +26,7 @@
|
|||||||
static grub_uint64_t
|
static grub_uint64_t
|
||||||
grub_get_time_us (void)
|
grub_get_time_us (void)
|
||||||
{
|
{
|
||||||
return 1000 * grub_get_time_ms ();
|
return 1000 * grub_get_time_ms();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -104,30 +102,25 @@ static const uint8_t EcFramingByte = 0xec;
|
|||||||
|
|
||||||
static uint64_t last_transfer;
|
static uint64_t last_transfer;
|
||||||
|
|
||||||
static void
|
static void stop_bus(void)
|
||||||
stop_bus (void)
|
|
||||||
{
|
{
|
||||||
spi_stop ();
|
spi_stop();
|
||||||
last_transfer = grub_get_time_us ();
|
last_transfer = grub_get_time_us();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int wait_for_frame(void)
|
||||||
wait_for_frame (void)
|
|
||||||
{
|
{
|
||||||
uint64_t start = grub_get_time_us ();
|
uint64_t start = grub_get_time_us();
|
||||||
uint8_t byte;
|
uint8_t byte;
|
||||||
do
|
do {
|
||||||
{
|
if (spi_read(&byte, 1))
|
||||||
if (spi_read (&byte, 1))
|
|
||||||
return -1;
|
return -1;
|
||||||
if (byte != EcFramingByte &&
|
if (byte != EcFramingByte &&
|
||||||
grub_get_time_us () - start > FramingTimeoutUs)
|
grub_get_time_us() - start > FramingTimeoutUs) {
|
||||||
{
|
grub_dprintf("cros", "Timeout waiting for framing byte.\n");
|
||||||
grub_dprintf ("cros", "Timeout waiting for framing byte.\n");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
} while (byte != EcFramingByte);
|
||||||
while (byte != EcFramingByte);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -138,8 +131,7 @@ wait_for_frame (void)
|
|||||||
* @param size Size of data block in bytes
|
* @param size Size of data block in bytes
|
||||||
* @return checksum value (0 to 255)
|
* @return checksum value (0 to 255)
|
||||||
*/
|
*/
|
||||||
static uint8_t
|
static uint8_t cros_ec_calc_checksum(const void *data, int size)
|
||||||
cros_ec_calc_checksum (const void *data, int size)
|
|
||||||
{
|
{
|
||||||
uint8_t csum;
|
uint8_t csum;
|
||||||
const uint8_t *bytes = data;
|
const uint8_t *bytes = data;
|
||||||
@@ -150,24 +142,23 @@ cros_ec_calc_checksum (const void *data, int size)
|
|||||||
return csum & 0xff;
|
return csum & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum
|
enum {
|
||||||
{
|
// response, arglen
|
||||||
/* response, arglen */
|
|
||||||
CROS_EC_SPI_IN_HDR_SIZE = 2,
|
CROS_EC_SPI_IN_HDR_SIZE = 2,
|
||||||
/* version, cmd, arglen */
|
// version, cmd, arglen
|
||||||
CROS_EC_SPI_OUT_HDR_SIZE = 3
|
CROS_EC_SPI_OUT_HDR_SIZE = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
static grub_uint8_t busbuf[256];
|
static grub_uint8_t busbuf[256];
|
||||||
#define MSG_BYTES ((int)sizeof (busbuf))
|
#define MSG_BYTES ((int)sizeof (busbuf))
|
||||||
|
|
||||||
static int
|
static int ec_command(int cmd, int cmd_version,
|
||||||
ec_command (int cmd, int cmd_version,
|
const void *dout, int dout_len,
|
||||||
const void *dout, int dout_len, void *din, int din_len)
|
void *din, int din_len)
|
||||||
{
|
{
|
||||||
uint8_t *bytes;
|
uint8_t *bytes;
|
||||||
|
|
||||||
/* Header + data + checksum. */
|
// Header + data + checksum.
|
||||||
uint32_t out_bytes = CROS_EC_SPI_OUT_HDR_SIZE + dout_len + 1;
|
uint32_t out_bytes = CROS_EC_SPI_OUT_HDR_SIZE + dout_len + 1;
|
||||||
uint32_t in_bytes = CROS_EC_SPI_IN_HDR_SIZE + din_len + 1;
|
uint32_t in_bytes = CROS_EC_SPI_IN_HDR_SIZE + din_len + 1;
|
||||||
|
|
||||||
@@ -175,112 +166,104 @@ ec_command (int cmd, int cmd_version,
|
|||||||
* Sanity-check I/O sizes given transaction overhead in internal
|
* Sanity-check I/O sizes given transaction overhead in internal
|
||||||
* buffers.
|
* buffers.
|
||||||
*/
|
*/
|
||||||
if (out_bytes > MSG_BYTES)
|
if (out_bytes > MSG_BYTES) {
|
||||||
{
|
grub_dprintf("cros", "Cannot send %d bytes\n", dout_len);
|
||||||
grub_dprintf ("cros", "Cannot send %d bytes\n", dout_len);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (in_bytes > MSG_BYTES)
|
if (in_bytes > MSG_BYTES) {
|
||||||
{
|
grub_dprintf("cros", "Cannot receive %d bytes\n", din_len);
|
||||||
grub_dprintf ("cros", "Cannot receive %d bytes\n", din_len);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prepare the output. */
|
// Prepare the output.
|
||||||
bytes = busbuf;
|
bytes = busbuf;
|
||||||
*bytes++ = EC_CMD_VERSION0 + cmd_version;
|
*bytes++ = EC_CMD_VERSION0 + cmd_version;
|
||||||
*bytes++ = cmd;
|
*bytes++ = cmd;
|
||||||
*bytes++ = dout_len;
|
*bytes++ = dout_len;
|
||||||
memcpy (bytes, dout, dout_len);
|
memcpy(bytes, dout, dout_len);
|
||||||
bytes += dout_len;
|
bytes += dout_len;
|
||||||
|
|
||||||
*bytes++ = cros_ec_calc_checksum (busbuf,
|
*bytes++ = cros_ec_calc_checksum(busbuf,
|
||||||
CROS_EC_SPI_OUT_HDR_SIZE + dout_len);
|
CROS_EC_SPI_OUT_HDR_SIZE + dout_len);
|
||||||
|
|
||||||
while (grub_get_time_us () - last_transfer < 200)
|
while (grub_get_time_us() - last_transfer < 200)
|
||||||
;
|
;
|
||||||
|
|
||||||
if (spi_start ())
|
if (spi_start())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Allow EC to ramp up clock after being awoken. */
|
// Allow EC to ramp up clock after being awoken.
|
||||||
/* See chrome-os-partner:32223 for more details. */
|
// See chrome-os-partner:32223 for more details.
|
||||||
grub_microsleep (100);
|
grub_microsleep (100);
|
||||||
|
|
||||||
if (spi_send (busbuf, out_bytes))
|
if (spi_send(busbuf, out_bytes)) {
|
||||||
{
|
stop_bus();
|
||||||
stop_bus ();
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wait until the EC is ready. */
|
// Wait until the EC is ready.
|
||||||
if (wait_for_frame ())
|
if (wait_for_frame()) {
|
||||||
{
|
stop_bus();
|
||||||
stop_bus ();
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read the response code and the data length. */
|
// Read the response code and the data length.
|
||||||
bytes = busbuf;
|
bytes = busbuf;
|
||||||
if (spi_read (bytes, 2))
|
if (spi_read(bytes, 2)) {
|
||||||
{
|
stop_bus();
|
||||||
stop_bus ();
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
uint8_t result = *bytes++;
|
uint8_t result = *bytes++;
|
||||||
uint8_t length = *bytes++;
|
uint8_t length = *bytes++;
|
||||||
|
|
||||||
/* Make sure there's enough room for the data. */
|
// Make sure there's enough room for the data.
|
||||||
if (CROS_EC_SPI_IN_HDR_SIZE + length + 1 > MSG_BYTES)
|
if (CROS_EC_SPI_IN_HDR_SIZE + length + 1 > MSG_BYTES) {
|
||||||
{
|
grub_dprintf("cros", "Received length %#02x too large\n",
|
||||||
grub_dprintf ("cros", "Received length %#02x too large\n", length);
|
length);
|
||||||
stop_bus ();
|
stop_bus();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read the data and the checksum, and finish up. */
|
// Read the data and the checksum, and finish up.
|
||||||
if (spi_read (bytes, length + 1))
|
if (spi_read(bytes, length + 1)) {
|
||||||
{
|
stop_bus();
|
||||||
stop_bus ();
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
bytes += length;
|
bytes += length;
|
||||||
int expected = *bytes++;
|
int expected = *bytes++;
|
||||||
stop_bus ();
|
stop_bus();
|
||||||
|
|
||||||
/* Check the integrity of the response. */
|
// Check the integrity of the response.
|
||||||
if (result != 0)
|
if (result != 0) {
|
||||||
{
|
grub_dprintf("cros", "Received bad result code %d\n", result);
|
||||||
grub_dprintf ("cros", "Received bad result code %d\n", result);
|
|
||||||
return -result;
|
return -result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int csum = cros_ec_calc_checksum (busbuf,
|
int csum = cros_ec_calc_checksum(busbuf,
|
||||||
CROS_EC_SPI_IN_HDR_SIZE + length);
|
CROS_EC_SPI_IN_HDR_SIZE + length);
|
||||||
|
|
||||||
if (csum != expected)
|
if (csum != expected) {
|
||||||
{
|
grub_dprintf("cros", "Invalid checksum rx %#02x, calced %#02x\n",
|
||||||
grub_dprintf ("cros", "Invalid checksum rx %#02x, calced %#02x\n",
|
|
||||||
expected, csum);
|
expected, csum);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the caller wants the response, copy it out for them. */
|
// If the caller wants the response, copy it out for them.
|
||||||
if (length < din_len)
|
if (length < din_len)
|
||||||
din_len = length;
|
din_len = length;
|
||||||
if (din)
|
if (din) {
|
||||||
{
|
memcpy(din, (uint8_t *)busbuf + CROS_EC_SPI_IN_HDR_SIZE,
|
||||||
memcpy (din, (uint8_t *) busbuf + CROS_EC_SPI_IN_HDR_SIZE, din_len);
|
din_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
return din_len;
|
return din_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
grub_cros_ec_scan_keyboard (struct grub_cros_ec_keyscan *scan)
|
grub_cros_ec_scan_keyboard(struct grub_cros_ec_keyscan *scan)
|
||||||
{
|
{
|
||||||
if (ec_command (EC_CMD_MKBP_STATE, 0, NULL, 0, scan,
|
if (ec_command(EC_CMD_MKBP_STATE, 0, NULL, 0, scan,
|
||||||
sizeof (*scan)) < (int) sizeof (*scan))
|
sizeof(*scan)) < (int)sizeof(*scan))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -668,7 +668,6 @@ draw_cursor (int show)
|
|||||||
unsigned int y;
|
unsigned int y;
|
||||||
unsigned int width;
|
unsigned int width;
|
||||||
unsigned int height;
|
unsigned int height;
|
||||||
unsigned int ascent;
|
|
||||||
grub_video_color_t color;
|
grub_video_color_t color;
|
||||||
|
|
||||||
write_char ();
|
write_char ();
|
||||||
@@ -680,18 +679,13 @@ draw_cursor (int show)
|
|||||||
>= virtual_screen.rows)
|
>= virtual_screen.rows)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Ensure that cursor doesn't go outside of character box. */
|
|
||||||
ascent = grub_font_get_ascent(virtual_screen.font);
|
|
||||||
if (ascent > virtual_screen.normal_char_height - 2)
|
|
||||||
ascent = virtual_screen.normal_char_height - 2;
|
|
||||||
|
|
||||||
/* Determine cursor properties and position on text layer. */
|
/* Determine cursor properties and position on text layer. */
|
||||||
x = virtual_screen.cursor_x * virtual_screen.normal_char_width;
|
x = virtual_screen.cursor_x * virtual_screen.normal_char_width;
|
||||||
width = virtual_screen.normal_char_width;
|
width = virtual_screen.normal_char_width;
|
||||||
color = virtual_screen.fg_color;
|
color = virtual_screen.fg_color;
|
||||||
y = ((virtual_screen.cursor_y + virtual_screen.total_scroll)
|
y = ((virtual_screen.cursor_y + virtual_screen.total_scroll)
|
||||||
* virtual_screen.normal_char_height
|
* virtual_screen.normal_char_height
|
||||||
+ ascent);
|
+ grub_font_get_ascent (virtual_screen.font));
|
||||||
height = 2;
|
height = 2;
|
||||||
|
|
||||||
/* Render cursor to text layer. */
|
/* Render cursor to text layer. */
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ static const grub_uint8_t set1_mapping[128] =
|
|||||||
/* 0x4c */ GRUB_KEYBOARD_KEY_NUM5, GRUB_KEYBOARD_KEY_NUM6,
|
/* 0x4c */ GRUB_KEYBOARD_KEY_NUM5, GRUB_KEYBOARD_KEY_NUM6,
|
||||||
/* 0x4e */ GRUB_KEYBOARD_KEY_NUMPLUS, GRUB_KEYBOARD_KEY_NUM1,
|
/* 0x4e */ GRUB_KEYBOARD_KEY_NUMPLUS, GRUB_KEYBOARD_KEY_NUM1,
|
||||||
/* 0x50 */ GRUB_KEYBOARD_KEY_NUM2, GRUB_KEYBOARD_KEY_NUM3,
|
/* 0x50 */ GRUB_KEYBOARD_KEY_NUM2, GRUB_KEYBOARD_KEY_NUM3,
|
||||||
/* 0x52 */ GRUB_KEYBOARD_KEY_NUM0, GRUB_KEYBOARD_KEY_NUMDOT,
|
/* 0x52 */ GRUB_KEYBOARD_KEY_NUMDOT, GRUB_KEYBOARD_KEY_NUMDOT,
|
||||||
/* 0x54 */ 0, 0,
|
/* 0x54 */ 0, 0,
|
||||||
/* 0x56 */ GRUB_KEYBOARD_KEY_102ND, GRUB_KEYBOARD_KEY_F11,
|
/* 0x56 */ GRUB_KEYBOARD_KEY_102ND, GRUB_KEYBOARD_KEY_F11,
|
||||||
/* 0x58 */ GRUB_KEYBOARD_KEY_F12, 0,
|
/* 0x58 */ GRUB_KEYBOARD_KEY_F12, 0,
|
||||||
@@ -174,7 +174,7 @@ static const grub_uint8_t set2_mapping[256] =
|
|||||||
/* 0x6a */ GRUB_KEYBOARD_KEY_JP_YEN, GRUB_KEYBOARD_KEY_NUM4,
|
/* 0x6a */ GRUB_KEYBOARD_KEY_JP_YEN, GRUB_KEYBOARD_KEY_NUM4,
|
||||||
/* 0x6c */ GRUB_KEYBOARD_KEY_NUM7, GRUB_KEYBOARD_KEY_KPCOMMA,
|
/* 0x6c */ GRUB_KEYBOARD_KEY_NUM7, GRUB_KEYBOARD_KEY_KPCOMMA,
|
||||||
/* 0x6e */ 0, 0,
|
/* 0x6e */ 0, 0,
|
||||||
/* 0x70 */ GRUB_KEYBOARD_KEY_NUM0, GRUB_KEYBOARD_KEY_NUMDOT,
|
/* 0x70 */ GRUB_KEYBOARD_KEY_NUMDOT, GRUB_KEYBOARD_KEY_NUM0,
|
||||||
/* 0x72 */ GRUB_KEYBOARD_KEY_NUM2, GRUB_KEYBOARD_KEY_NUM5,
|
/* 0x72 */ GRUB_KEYBOARD_KEY_NUM2, GRUB_KEYBOARD_KEY_NUM5,
|
||||||
/* 0x74 */ GRUB_KEYBOARD_KEY_NUM6, GRUB_KEYBOARD_KEY_NUM8,
|
/* 0x74 */ GRUB_KEYBOARD_KEY_NUM6, GRUB_KEYBOARD_KEY_NUM8,
|
||||||
/* 0x76 */ GRUB_KEYBOARD_KEY_ESCAPE, GRUB_KEYBOARD_KEY_NUM_LOCK,
|
/* 0x76 */ GRUB_KEYBOARD_KEY_ESCAPE, GRUB_KEYBOARD_KEY_NUM_LOCK,
|
||||||
|
|||||||
+98
-98
@@ -1,101 +1,101 @@
|
|||||||
{ "cmdline_cat", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x8851b0ee, 0x8851b0ee, 0xafb59f0b, 0xafb59f0b, 0x8c9b72f1, 0x8c9b72f1, 0x6eec5116, 0x6eec5116, 0xad82053e, 0xad82053e, 0x2eeae2ae, 0x2eeae2ae, 0x58cf8def, 0x58cf8def, 0x926f4d2f, 0x926f4d2f, 0xbd1c3236, 0xbd1c3236, 0x56012a95, 0x56012a95, 0x6d7c40ae, 0x6d7c40ae, 0xef750bc8, 0xef750bc8, 0x1080dd4a, 0x1080dd4a, 0xd7f9e5af, 0xd7f9e5af, 0x80b1b4a9, 0x80b1b4a9, 0x2c99415e, 0x2c99415e, 0x8d5761ff, 0x8d5761ff, 0xb964b489, 0xb964b489, 0x88a51f74, 0x88a51f74, 0x1da6c458, 0x1da6c458, 0x85e94025, 0x206ea54f, 0x7ee6c8fd, 0x7ee6c8fd, }, 45 },
|
{ "cmdline_cat", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x24dc7bce, 0x24dc7bce, 0x338542b, 0x338542b, 0x2016b9d1, 0x2016b9d1, 0xc2619a36, 0xc2619a36, 0x10fce1e, 0x10fce1e, 0x8267298e, 0x8267298e, 0xf44246cf, 0xf44246cf, 0x3ee2860f, 0x3ee2860f, 0x1191f916, 0x1191f916, 0xfa8ce1b5, 0xfa8ce1b5, 0xc1f18b8e, 0xc1f18b8e, 0x43f8c0e8, 0x43f8c0e8, 0xbc0d166a, 0xbc0d166a, 0x7b742e8f, 0x7b742e8f, 0x2c3c7f89, 0x2c3c7f89, 0x80148a7e, 0x80148a7e, 0x21daaadf, 0x21daaadf, 0x15e97fa9, 0x15e97fa9, 0x2428d454, 0x2428d454, 0xb12b0f78, 0xb12b0f78, 0x29648b05, 0x8ce36e6f, 0xd26b03dd, 0xd26b03dd, }, 45 },
|
||||||
{ "cmdline_cat", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x834b70a0, 0x834b70a0, 0xe7cc129f, 0xe7cc129f, 0x5ee2edc, 0x5ee2edc, 0xa1135cd7, 0xa1135cd7, 0xf7ce1f26, 0xf7ce1f26, 0xe9f803e8, 0xe9f803e8, 0x4b8f9724, 0x4b8f9724, 0x3fe3771a, 0x3fe3771a, 0x5584ee63, 0x5584ee63, 0xac193250, 0xac193250, 0x801f25f4, 0x801f25f4, 0x8d33aece, 0x8d33aece, 0xc6d95edc, 0xc6d95edc, 0xf121dee2, 0xf121dee2, 0x6ab10812, 0x6ab10812, 0x41a5b112, 0x41a5b112, 0xac6f712b, 0xac6f712b, 0x8aee7a19, 0x8aee7a19, 0xfe37c0ad, 0xfe37c0ad, 0x99c6a336, 0x99c6a336, 0x53b844c6, 0x73015447, 0x7a1a2254, 0x7a1a2254, }, 45 },
|
{ "cmdline_cat", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xd09d4d28, 0xd09d4d28, 0xb41a2f17, 0xb41a2f17, 0x56381354, 0x56381354, 0xf2c5615f, 0xf2c5615f, 0xa41822ae, 0xa41822ae, 0xba2e3e60, 0xba2e3e60, 0x1859aaac, 0x1859aaac, 0x6c354a92, 0x6c354a92, 0x652d3eb, 0x652d3eb, 0xffcf0fd8, 0xffcf0fd8, 0xd3c9187c, 0xd3c9187c, 0xdee59346, 0xdee59346, 0x950f6354, 0x950f6354, 0xa2f7e36a, 0xa2f7e36a, 0x3967359a, 0x3967359a, 0x12738c9a, 0x12738c9a, 0xffb94ca3, 0xffb94ca3, 0xd9384791, 0xd9384791, 0xade1fd25, 0xade1fd25, 0xca109ebe, 0xca109ebe, 0x6e794e, 0x20d769cf, 0x29cc1fdc, 0x29cc1fdc, }, 45 },
|
||||||
{ "cmdline_cat", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xb121c912, 0xb121c912, 0x635a8739, 0x635a8739, 0x8288cba6, 0x8288cba6, 0xf5589d0, 0xf5589d0, 0x471642b3, 0x471642b3, 0xfb4826cf, 0xfb4826cf, 0x8b1083cf, 0x8b1083cf, 0x738b0c94, 0x738b0c94, 0x859c41b0, 0x859c41b0, 0x7c8d1be9, 0x7c8d1be9, 0x5b685e40, 0x5b685e40, 0x9cf80d95, 0x9cf80d95, 0x3541f915, 0x3541f915, 0x582b8557, 0x582b8557, 0x24cf88f7, 0x24cf88f7, 0x9e0af23, 0x9e0af23, 0x1033164b, 0x1033164b, 0x70ba51e2, 0x70ba51e2, 0xb051585c, 0xb051585c, 0xe1389f04, 0xe1389f04, 0x308bbb74, 0xdc9e6805, 0x4ddcff9f, 0x4ddcff9f, }, 45 },
|
{ "cmdline_cat", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x6cfe9089, 0x6cfe9089, 0xbe85dea2, 0xbe85dea2, 0x5f57923d, 0x5f57923d, 0xd28ad04b, 0xd28ad04b, 0x9ac91b28, 0x9ac91b28, 0x26977f54, 0x26977f54, 0x56cfda54, 0x56cfda54, 0xae54550f, 0xae54550f, 0x5843182b, 0x5843182b, 0xa1524272, 0xa1524272, 0x86b707db, 0x86b707db, 0x4127540e, 0x4127540e, 0xe89ea08e, 0xe89ea08e, 0x85f4dccc, 0x85f4dccc, 0xf910d16c, 0xf910d16c, 0xd43ff6b8, 0xd43ff6b8, 0xcdec4fd0, 0xcdec4fd0, 0xad650879, 0xad650879, 0x6d8e01c7, 0x6d8e01c7, 0x3ce7c69f, 0x3ce7c69f, 0xed54e2ef, 0x141319e, 0x9003a604, 0x9003a604, }, 45 },
|
||||||
{ "cmdline_cat", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xac16e832, 0xac16e832, 0xbf6ab9c6, 0xbf6ab9c6, 0x1063e15a, 0x1063e15a, 0xf908e3ff, 0xf908e3ff, 0xcb37d841, 0xcb37d841, 0x9b8ffa7d, 0x9b8ffa7d, 0x38d2a26c, 0x38d2a26c, 0x6989f09b, 0x6989f09b, 0x481451e, 0x481451e, 0x17b3177, 0x17b3177, 0x3ea52aeb, 0x3ea52aeb, 0xc24de674, 0xc24de674, 0x4ab163cc, 0x4ab163cc, 0xc482b092, 0xc482b092, 0x55ffc7e2, 0x55ffc7e2, 0x3b4b34dd, 0x3b4b34dd, 0x9b1f047f, 0x9b1f047f, 0x3d42e414, 0x3d42e414, 0x35b2fb06, 0x35b2fb06, 0xb813b35f, 0xb813b35f, 0xc3ede6e0, 0xc35214c3, 0x340f0107, 0x340f0107, }, 45 },
|
{ "cmdline_cat", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x37f1b28e, 0x37f1b28e, 0x248de37a, 0x248de37a, 0x8b84bbe6, 0x8b84bbe6, 0x62efb943, 0x62efb943, 0x50d082fd, 0x50d082fd, 0x68a0c1, 0x68a0c1, 0xa335f8d0, 0xa335f8d0, 0xf26eaa27, 0xf26eaa27, 0x9f661fa2, 0x9f661fa2, 0x9a9c6bcb, 0x9a9c6bcb, 0xa5427057, 0xa5427057, 0x59aabcc8, 0x59aabcc8, 0xd1563970, 0xd1563970, 0x5f65ea2e, 0x5f65ea2e, 0xce189d5e, 0xce189d5e, 0xa0ac6e61, 0xa0ac6e61, 0xf85ec3, 0xf85ec3, 0xa6a5bea8, 0xa6a5bea8, 0xae55a1ba, 0xae55a1ba, 0x23f4e9e3, 0x23f4e9e3, 0x580abc5c, 0x58b54e7f, 0xafe85bbb, 0xafe85bbb, }, 45 },
|
||||||
{ "cmdline_cat", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x9c47caee, 0x9c47caee, 0x6c9c4f38, 0x6c9c4f38, 0x79c49615, 0x79c49615, 0x70fe9708, 0x70fe9708, 0x8e90c077, 0x8e90c077, 0xd8205b47, 0xd8205b47, 0xa34337e2, 0xa34337e2, 0xf4dffa53, 0xf4dffa53, 0x90a0779c, 0x90a0779c, 0x322820bb, 0x322820bb, 0x50e3383f, 0x50e3383f, 0x4a976e3e, 0x4a976e3e, 0x90b6f8d9, 0x90b6f8d9, 0x4058c301, 0x4058c301, 0x221a6810, 0x221a6810, 0x1f78a00e, 0x1f78a00e, 0x6a633d2c, 0x6a633d2c, 0xca177c65, 0xca177c65, 0xabb6c7f9, 0xabb6c7f9, 0x635a35e8, 0x635a35e8, 0x6da78f10, 0x53467ff8, 0xd037fdfa, 0xd037fdfa, }, 45 },
|
{ "cmdline_cat", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x6d4812ec, 0x6d4812ec, 0x9d93973a, 0x9d93973a, 0x88cb4e17, 0x88cb4e17, 0x81f14f0a, 0x81f14f0a, 0x7f9f1875, 0x7f9f1875, 0x292f8345, 0x292f8345, 0x524cefe0, 0x524cefe0, 0x5d02251, 0x5d02251, 0x61afaf9e, 0x61afaf9e, 0xc327f8b9, 0xc327f8b9, 0xa1ece03d, 0xa1ece03d, 0xbb98b63c, 0xbb98b63c, 0x61b920db, 0x61b920db, 0xb1571b03, 0xb1571b03, 0xd315b012, 0xd315b012, 0xee77780c, 0xee77780c, 0x9b6ce52e, 0x9b6ce52e, 0x3b18a467, 0x3b18a467, 0x5ab91ffb, 0x5ab91ffb, 0x9255edea, 0x9255edea, 0x9ca85712, 0xa249a7fa, 0x213825f8, 0x213825f8, }, 45 },
|
||||||
{ "cmdline_cat", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x2b6b8225, 0x2b6b8225, 0x83df9995, 0x83df9995, 0x5165ad0b, 0x5165ad0b, 0xe5a6f96d, 0xe5a6f96d, 0x798df957, 0x798df957, 0x8c0567e2, 0x8c0567e2, 0x5e5d7389, 0x5e5d7389, 0x47a39dd, 0x47a39dd, 0x894f44af, 0x894f44af, 0x1dff0a6, 0x1dff0a6, 0xf496e67b, 0xf496e67b, 0x29cb5702, 0x29cb5702, 0xeaf1387d, 0xeaf1387d, 0x4a9bf7, 0x4a9bf7, 0x11d20bee, 0x11d20bee, 0xa103dc2d, 0xa103dc2d, 0xd0265db9, 0xd0265db9, 0x42267334, 0x42267334, 0x96f85e8c, 0x96f85e8c, 0xa28eac49, 0xa28eac49, 0x4e660ae7, 0x70741b3, 0x183f2f2e, 0x183f2f2e, }, 45 },
|
{ "cmdline_cat", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x10bc4224, 0x10bc4224, 0xb8085994, 0xb8085994, 0x6ab26d0a, 0x6ab26d0a, 0xde71396c, 0xde71396c, 0x425a3956, 0x425a3956, 0xb7d2a7e3, 0xb7d2a7e3, 0x658ab388, 0x658ab388, 0x3fadf9dc, 0x3fadf9dc, 0xb29884ae, 0xb29884ae, 0x3a0830a7, 0x3a0830a7, 0xcf41267a, 0xcf41267a, 0x121c9703, 0x121c9703, 0xd126f87c, 0xd126f87c, 0x3b9d5bf6, 0x3b9d5bf6, 0x2a05cbef, 0x2a05cbef, 0x9ad41c2c, 0x9ad41c2c, 0xebf19db8, 0xebf19db8, 0x79f1b335, 0x79f1b335, 0xad2f9e8d, 0xad2f9e8d, 0x99596c48, 0x99596c48, 0x75b1cae6, 0x3cd081b2, 0x23e8ef2f, 0x23e8ef2f, }, 45 },
|
||||||
{ "cmdline_cat", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x77b51f44, 0x77b51f44, 0xc8097569, 0xc8097569, 0x769aee5f, 0x769aee5f, 0xa35e159, 0xa35e159, 0x87a6341f, 0x87a6341f, 0xb61d944b, 0xb61d944b, 0x8b109cb3, 0x8b109cb3, 0xed3fb3e, 0xed3fb3e, 0xd7cc6c3, 0xd7cc6c3, 0x52077f0d, 0x52077f0d, 0x9d86d17e, 0x9d86d17e, 0x5e487bb, 0x5e487bb, 0x3a00041b, 0x3a00041b, 0xcfdeaf9e, 0xcfdeaf9e, 0x3e40af89, 0x3e40af89, 0x5ec41ea9, 0x5ec41ea9, 0x6298e4e7, 0x6298e4e7, 0xfd67f90e, 0xfd67f90e, 0x5ab5dc32, 0x5ab5dc32, 0xdd3ad694, 0xdd3ad694, 0x391222b4, 0xd4a98b43, 0xeaa2f62, 0xeaa2f62, }, 45 },
|
{ "cmdline_cat", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x8920d2ff, 0x8920d2ff, 0x369cb8d2, 0x369cb8d2, 0x880f23e4, 0x880f23e4, 0xf4a02ce2, 0xf4a02ce2, 0x7933f9a4, 0x7933f9a4, 0x488859f0, 0x488859f0, 0x75855108, 0x75855108, 0xf0463685, 0xf0463685, 0xf3e90b78, 0xf3e90b78, 0xac92b2b6, 0xac92b2b6, 0x63131cc5, 0x63131cc5, 0xfb714a00, 0xfb714a00, 0xc495c9a0, 0xc495c9a0, 0x314b6225, 0x314b6225, 0xc0d56232, 0xc0d56232, 0xa051d312, 0xa051d312, 0x9c0d295c, 0x9c0d295c, 0x3f234b5, 0x3f234b5, 0xa4201189, 0xa4201189, 0x23af1b2f, 0x23af1b2f, 0xc787ef0f, 0x2a3c46f8, 0xf03fe2d9, 0xf03fe2d9, }, 45 },
|
||||||
{ "gfxterm_menu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x45b0713c, 0x237f9dbf, 0x45b0713c, 0x646bc7b, 0x59c36f00, 0x59c36f00, 0x7fd94135, 0x7fd94135, 0x7fd94135, 0x1592c53, 0x1592c53, 0x1592c53, 0x63af3981, 0x63af3981, 0x63af3981, 0x59c36f00, 0x646bc7b, 0x646bc7b, 0x59c36f00, }, 20 },
|
{ "gfxterm_menu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xdff707ef, 0xb938eb6c, 0xdff707ef, 0x9c01caa8, 0x59c36f00, 0x59c36f00, 0xd3548a15, 0xd3548a15, 0xd3548a15, 0xadd4e773, 0xadd4e773, 0xadd4e773, 0xcf22f2a1, 0xcf22f2a1, 0xcf22f2a1, 0x59c36f00, 0x9c01caa8, 0x9c01caa8, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_menu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x84abc7db, 0x20814063, 0x84abc7db, 0xaaae42a4, 0xaa4593fe, 0xaa4593fe, 0x2e88732f, 0x2e88732f, 0x2e88732f, 0x887d7e48, 0x887d7e48, 0x887d7e48, 0xa545d530, 0xa545d530, 0xa545d530, 0xaa4593fe, 0xaaae42a4, 0xaaae42a4, 0xaa4593fe, }, 20 },
|
{ "gfxterm_menu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x59f141e3, 0xfddbc65b, 0x59f141e3, 0x77f4c49c, 0xaa4593fe, 0xaa4593fe, 0x7d5e4ea7, 0x7d5e4ea7, 0x7d5e4ea7, 0xdbab43c0, 0xdbab43c0, 0xdbab43c0, 0xf693e8b8, 0xf693e8b8, 0xf693e8b8, 0xaa4593fe, 0x77f4c49c, 0x77f4c49c, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_menu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x5b85371a, 0xe10968c2, 0x5b85371a, 0x6925a9e, 0xc9cbf769, 0xc9cbf769, 0xda1c9f17, 0xda1c9f17, 0xda1c9f17, 0x24c45edb, 0x24c45edb, 0x24c45edb, 0xcd8ee1d3, 0xcd8ee1d3, 0xcd8ee1d3, 0xc9cbf769, 0x6925a9e, 0x6925a9e, 0xc9cbf769, }, 20 },
|
{ "gfxterm_menu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x9ac56bc2, 0x2049341a, 0x9ac56bc2, 0xc7d20646, 0xc9cbf769, 0xc9cbf769, 0x7c3c68c, 0x7c3c68c, 0x7c3c68c, 0xf91b0740, 0xf91b0740, 0xf91b0740, 0x1051b848, 0x1051b848, 0x1051b848, 0xc9cbf769, 0xc7d20646, 0xc7d20646, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x9130464d, 0x22904f7a, 0x9130464d, 0x3f660f95, 0x9813a416, 0x9813a416, 0xfb08d7cf, 0xfb08d7cf, 0xfb08d7cf, 0x6ad351fc, 0x6ad351fc, 0x6ad351fc, 0x73696c2c, 0x73696c2c, 0x73696c2c, 0x9813a416, 0x3f660f95, 0x3f660f95, 0x9813a416, }, 20 },
|
{ "gfxterm_menu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xd50b603, 0xbef0bf34, 0xd50b603, 0xa306ffdb, 0x9813a416, 0x9813a416, 0x60ef8d73, 0x60ef8d73, 0x60ef8d73, 0xf1340b40, 0xf1340b40, 0xf1340b40, 0xe88e3690, 0xe88e3690, 0xe88e3690, 0x9813a416, 0xa306ffdb, 0xa306ffdb, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x5185b14e, 0x4173aa2f, 0x5185b14e, 0x272384fd, 0x5fcf013d, 0x5fcf013d, 0x9e56a9e0, 0x9e56a9e0, 0x9e56a9e0, 0x4c46b196, 0x4c46b196, 0x4c46b196, 0x5a358e09, 0x5a358e09, 0x5a358e09, 0x5fcf013d, 0x272384fd, 0x272384fd, 0x5fcf013d, }, 20 },
|
{ "gfxterm_menu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x9408bd4d, 0x84fea62c, 0x9408bd4d, 0xe2ae88fe, 0x5fcf013d, 0x5fcf013d, 0x6f5971e2, 0x6f5971e2, 0x6f5971e2, 0xbd496994, 0xbd496994, 0xbd496994, 0xab3a560b, 0xab3a560b, 0xab3a560b, 0x5fcf013d, 0xe2ae88fe, 0xe2ae88fe, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x5cc0d3ef, 0x8b87731, 0x5cc0d3ef, 0x47c509e8, 0xdd28f52b, 0xdd28f52b, 0xe1579057, 0xe1579057, 0xe1579057, 0xc06b69b3, 0xc06b69b3, 0xc06b69b3, 0xbdd3a23f, 0xbdd3a23f, 0xbdd3a23f, 0xdd28f52b, 0x47c509e8, 0x47c509e8, 0xdd28f52b, }, 20 },
|
{ "gfxterm_menu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x8460b76a, 0xd01813b4, 0x8460b76a, 0x9f656d6d, 0xdd28f52b, 0xdd28f52b, 0xda805056, 0xda805056, 0xda805056, 0xfbbca9b2, 0xfbbca9b2, 0xfbbca9b2, 0x8604623e, 0x8604623e, 0x8604623e, 0xdd28f52b, 0x9f656d6d, 0x9f656d6d, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_menu", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xd1338a02, 0x7aa25dbf, 0xd1338a02, 0x2e8c9182, 0x43d1f34, 0x43d1f34, 0x6486f7c4, 0x6486f7c4, 0x6486f7c4, 0x1b8c5e6c, 0x1b8c5e6c, 0x1b8c5e6c, 0x82dd5bea, 0x82dd5bea, 0x82dd5bea, 0x43d1f34, 0x2e8c9182, 0x2e8c9182, 0x43d1f34, }, 20 },
|
{ "gfxterm_menu", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x115542af, 0xbac49512, 0x115542af, 0xeeea592f, 0x43d1f34, 0x43d1f34, 0x9a133a7f, 0x9a133a7f, 0x9a133a7f, 0xe51993d7, 0xe51993d7, 0xe51993d7, 0x7c489651, 0x7c489651, 0x7c489651, 0x43d1f34, 0xeeea592f, 0xeeea592f, 0x43d1f34, }, 20 },
|
||||||
{ "gfxmenu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x1027210c, 0x64e51c81, 0x1027210c, 0x45ca4a8a, 0x9a2e0d26, 0x2b88b6ce, 0x2b88b6ce, 0x2b88b6ce, 0x7750400e, 0x7750400e, 0x7750400e, 0x5ec88e9c, 0x5ec88e9c, 0x5ec88e9c, 0x59c36f00, 0x45ca4a8a, 0x45ca4a8a, }, 18 },
|
{ "gfxmenu", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x60e56714, 0x14275a99, 0x60e56714, 0x35080c92, 0x9a2e0d26, 0x35f491f9, 0x35f491f9, 0x35f491f9, 0x692c6739, 0x692c6739, 0x692c6739, 0x40b4a9ab, 0x40b4a9ab, 0x40b4a9ab, 0x59c36f00, 0x35080c92, 0x35080c92, }, 18 },
|
||||||
{ "gfxmenu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x8d12f697, 0xc5b32248, 0x8d12f697, 0x56720aa4, 0xa9d58ccd, 0xa1b1a1b5, 0xa1b1a1b5, 0xa1b1a1b5, 0xf4ee0bbf, 0xf4ee0bbf, 0xf4ee0bbf, 0x9dddc3f6, 0x9dddc3f6, 0x9dddc3f6, 0xaa4593fe, 0x56720aa4, 0x56720aa4, }, 18 },
|
{ "gfxmenu", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x33d94a8c, 0x7b789e53, 0x33d94a8c, 0xe8b9b6bf, 0xa9d58ccd, 0xeee84c5, 0xeee84c5, 0xeee84c5, 0x5bb12ecf, 0x5bb12ecf, 0x5bb12ecf, 0x3282e686, 0x3282e686, 0x3282e686, 0xaa4593fe, 0xe8b9b6bf, 0xe8b9b6bf, }, 18 },
|
||||||
{ "gfxmenu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xa5ec9f45, 0xdb7085d8, 0xa5ec9f45, 0x9caf1d3f, 0x5411be8b, 0xa07e74d3, 0xa07e74d3, 0xa07e74d3, 0xdfc0d247, 0xdfc0d247, 0xdfc0d247, 0x9db4b23f, 0x9db4b23f, 0x9db4b23f, 0xc9cbf769, 0x9caf1d3f, 0x9caf1d3f, }, 18 },
|
{ "gfxmenu", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xe4669404, 0x9afa8e99, 0xe4669404, 0xdd25167e, 0x5411be8b, 0x2cf5262a, 0x2cf5262a, 0x2cf5262a, 0x534b80be, 0x534b80be, 0x534b80be, 0x113fe0c6, 0x113fe0c6, 0x113fe0c6, 0xc9cbf769, 0xdd25167e, 0xdd25167e, }, 18 },
|
||||||
{ "gfxmenu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x1c3742c9, 0xce8e83bf, 0xeb96c838, 0xce8e83bf, 0x73cb3bc1, 0x740d78cf, 0x84312594, 0x84312594, 0x84312594, 0x6f94cfe8, 0x6f94cfe8, 0x6f94cfe8, 0x69dfcf18, 0x69dfcf18, 0x69dfcf18, 0x1c3742c9, 0x73cb3bc1, 0x73cb3bc1, }, 18 },
|
{ "gfxmenu", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x1c3742c9, 0x37ed1568, 0x12f55eef, 0x37ed1568, 0x8aa8ad16, 0x740d78cf, 0x7bd2e3a3, 0x7bd2e3a3, 0x7bd2e3a3, 0x907709df, 0x907709df, 0x907709df, 0x963c092f, 0x963c092f, 0x963c092f, 0x1c3742c9, 0x8aa8ad16, 0x8aa8ad16, }, 18 },
|
||||||
{ "gfxmenu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0x56a03e51, 0xee7d8d4b, 0x56a03e51, 0x5bdf9413, 0xbcda144c, 0x131c0760, 0x131c0760, 0x131c0760, 0x7c55db71, 0x7c55db71, 0x7c55db71, 0x71a34572, 0x71a34572, 0x71a34572, 0xcc5a7bed, 0x5bdf9413, 0x5bdf9413, }, 18 },
|
{ "gfxmenu", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0xcc5a7bed, 0xc5315ac9, 0x7dece9d3, 0xc5315ac9, 0xc84ef08b, 0xbcda144c, 0xd45c93dc, 0xd45c93dc, 0xd45c93dc, 0xbb154fcd, 0xbb154fcd, 0xbb154fcd, 0xb6e3d1ce, 0xb6e3d1ce, 0xb6e3d1ce, 0xcc5a7bed, 0xc84ef08b, 0xc84ef08b, }, 18 },
|
||||||
{ "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xef4a3312, 0xea8a9cf0, 0x8929e522, 0xea8a9cf0, 0x78f3dfbc, 0x5d55a141, 0xb9092e0b, 0xb9092e0b, 0xb9092e0b, 0x7fbb6a15, 0x7fbb6a15, 0x7fbb6a15, 0x6bdebaaa, 0x6bdebaaa, 0x6bdebaaa, 0xef4a3312, 0x78f3dfbc, 0x78f3dfbc, }, 18 },
|
{ "gfxmenu", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xef4a3312, 0x40a72ecd, 0x2304571f, 0x40a72ecd, 0xd2de6d81, 0x5d55a141, 0x304db662, 0x304db662, 0x304db662, 0xf6fff27c, 0xf6fff27c, 0xf6fff27c, 0xe29a22c3, 0xe29a22c3, 0xe29a22c3, 0xef4a3312, 0xd2de6d81, 0xd2de6d81, }, 18 },
|
||||||
{ "gfxmenu", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x54e48d80, 0x6dcf1d57, 0x925a4c8f, 0x6dcf1d57, 0x69005b38, 0x6d6bb4bc, 0x14f7c6b1, 0x14f7c6b1, 0x14f7c6b1, 0x95043060, 0x95043060, 0x95043060, 0x3a0890f, 0x3a0890f, 0x3a0890f, 0x54e48d80, 0x69005b38, 0x69005b38, }, 18 },
|
{ "gfxmenu", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x54e48d80, 0xe6143ead, 0x19816f75, 0xe6143ead, 0xe2db78c2, 0xa992f629, 0xe0ddd143, 0xe0ddd143, 0xe0ddd143, 0x612e2792, 0x612e2792, 0x612e2792, 0xf78a9efd, 0xf78a9efd, 0xf78a9efd, 0x54e48d80, 0xe2db78c2, 0xe2db78c2, }, 18 },
|
||||||
{ "gfxterm_ar", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x77ff5efc, 0x791fe364, 0x77ff5efc, 0x340993bb, 0x59c36f00, 0x59c36f00, 0x3908ca1e, 0x3908ca1e, 0x3908ca1e, 0x4788a778, 0x4788a778, 0x4788a778, 0x257eb2aa, 0x257eb2aa, 0x257eb2aa, 0x59c36f00, 0x340993bb, 0x340993bb, 0x59c36f00, }, 20 },
|
{ "gfxterm_ar", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x3d69d4f7, 0x5b2df52e, 0x3d69d4f7, 0x7e9f19b0, 0x59c36f00, 0x59c36f00, 0xaa418d14, 0xaa418d14, 0xaa418d14, 0xd4c1e072, 0xd4c1e072, 0xd4c1e072, 0xb637f5a0, 0xb637f5a0, 0xb637f5a0, 0x59c36f00, 0x7e9f19b0, 0x7e9f19b0, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_ar", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xb2d04b0f, 0x46cdbc23, 0xb2d04b0f, 0x9cd5ce70, 0xaa4593fe, 0xaa4593fe, 0x44bf6b37, 0x44bf6b37, 0x44bf6b37, 0xe24a6650, 0xe24a6650, 0xe24a6650, 0xcf72cd28, 0xcf72cd28, 0xcf72cd28, 0xaa4593fe, 0x9cd5ce70, 0x9cd5ce70, 0xaa4593fe, }, 20 },
|
{ "gfxterm_ar", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xea153935, 0xadda68ff, 0xea153935, 0xc410bc4a, 0xaa4593fe, 0xaa4593fe, 0x63090f39, 0x63090f39, 0x63090f39, 0xc5fc025e, 0xc5fc025e, 0xc5fc025e, 0xe8c4a926, 0xe8c4a926, 0xe8c4a926, 0xaa4593fe, 0xc410bc4a, 0xc410bc4a, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_ar", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x4bb823b8, 0x59349835, 0x4bb823b8, 0x16af4e3c, 0xc9cbf769, 0xc9cbf769, 0x2784b68e, 0x2784b68e, 0x2784b68e, 0xd95c7742, 0xd95c7742, 0xd95c7742, 0x3016c84a, 0x3016c84a, 0x3016c84a, 0xc9cbf769, 0x16af4e3c, 0x16af4e3c, 0xc9cbf769, }, 20 },
|
{ "gfxterm_ar", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xe677248f, 0x9a146b56, 0xe677248f, 0xbb60490b, 0xc9cbf769, 0xc9cbf769, 0xebd87b6a, 0xebd87b6a, 0xebd87b6a, 0x1500baa6, 0x1500baa6, 0x1500baa6, 0xfc4a05ae, 0xfc4a05ae, 0xfc4a05ae, 0xc9cbf769, 0xbb60490b, 0xbb60490b, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xb821e44, 0x16b3ac05, 0xb821e44, 0xa5d4579c, 0x9813a416, 0x9813a416, 0xca80d730, 0xca80d730, 0xca80d730, 0x5b5b5103, 0x5b5b5103, 0x5b5b5103, 0x42e16cd3, 0x42e16cd3, 0x42e16cd3, 0x9813a416, 0xa5d4579c, 0xa5d4579c, 0x9813a416, }, 20 },
|
{ "gfxterm_ar", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x2fe1d8b3, 0x344dc22f, 0x2fe1d8b3, 0x81b7916b, 0x9813a416, 0x9813a416, 0xb42009b, 0xb42009b, 0xb42009b, 0x9a9986a8, 0x9a9986a8, 0x9a9986a8, 0x8323bb78, 0x8323bb78, 0x8323bb78, 0x9813a416, 0x81b7916b, 0x81b7916b, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xbe0b9671, 0x7f6e98d0, 0xbe0b9671, 0xc8ada3c2, 0x5fcf013d, 0x5fcf013d, 0x57a0c67d, 0x57a0c67d, 0x57a0c67d, 0x85b0de0b, 0x85b0de0b, 0x85b0de0b, 0x93c3e194, 0x93c3e194, 0x93c3e194, 0x5fcf013d, 0xc8ada3c2, 0xc8ada3c2, 0x5fcf013d, }, 20 },
|
{ "gfxterm_ar", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x2f2ab760, 0x373afa93, 0x2f2ab760, 0x598c82d3, 0x5fcf013d, 0x5fcf013d, 0x8a9a15e2, 0x8a9a15e2, 0x8a9a15e2, 0x588a0d94, 0x588a0d94, 0x588a0d94, 0x4ef9320b, 0x4ef9320b, 0x4ef9320b, 0x5fcf013d, 0x598c82d3, 0x598c82d3, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x9f18b29e, 0x50e7d383, 0x9f18b29e, 0x841d6899, 0xdd28f52b, 0xdd28f52b, 0xd12092dc, 0xd12092dc, 0xd12092dc, 0xf01c6b38, 0xf01c6b38, 0xf01c6b38, 0x8da4a0b4, 0x8da4a0b4, 0x8da4a0b4, 0xdd28f52b, 0x841d6899, 0x841d6899, 0xdd28f52b, }, 20 },
|
{ "gfxterm_ar", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xb9de66a8, 0x2b705981, 0xb9de66a8, 0xa2dbbcaf, 0xdd28f52b, 0xdd28f52b, 0x971eb98b, 0x971eb98b, 0x971eb98b, 0xb622406f, 0xb622406f, 0xb622406f, 0xcb9a8be3, 0xcb9a8be3, 0xcb9a8be3, 0xdd28f52b, 0xa2dbbcaf, 0xa2dbbcaf, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_ar", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x4e8d4d8c, 0x3f32cb90, 0x4e8d4d8c, 0xb132560c, 0x43d1f34, 0x43d1f34, 0x1e7f303c, 0x1e7f303c, 0x1e7f303c, 0x61759994, 0x61759994, 0x61759994, 0xf8249c12, 0xf8249c12, 0xf8249c12, 0x43d1f34, 0xb132560c, 0xb132560c, 0x43d1f34, }, 20 },
|
{ "gfxterm_ar", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x84029f68, 0x7385ec77, 0x84029f68, 0x7bbd84e8, 0x43d1f34, 0x43d1f34, 0x73cb201f, 0x73cb201f, 0x73cb201f, 0xcc189b7, 0xcc189b7, 0xcc189b7, 0x95908c31, 0x95908c31, 0x95908c31, 0x43d1f34, 0x7bbd84e8, 0x7bbd84e8, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_cyr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x4f39b2c5, 0x37084023, 0x4f39b2c5, 0xccf7f82, 0x59c36f00, 0x59c36f00, 0xb5dad2e, 0xb5dad2e, 0xb5dad2e, 0x75ddc048, 0x75ddc048, 0x75ddc048, 0x172bd59a, 0x172bd59a, 0x172bd59a, 0x59c36f00, 0xccf7f82, 0xccf7f82, 0x59c36f00, }, 20 },
|
{ "gfxterm_cyr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xb2446469, 0xca75968f, 0xb2446469, 0xf1b2a92e, 0x59c36f00, 0x59c36f00, 0xc0eac671, 0xc0eac671, 0xc0eac671, 0xbe6aab17, 0xbe6aab17, 0xbe6aab17, 0xdc9cbec5, 0xdc9cbec5, 0xdc9cbec5, 0x59c36f00, 0xf1b2a92e, 0xf1b2a92e, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_cyr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xd5f24f8e, 0x76463f82, 0xd5f24f8e, 0xfbf7caf1, 0xaa4593fe, 0xaa4593fe, 0xb897c475, 0xb897c475, 0xb897c475, 0x1e62c912, 0x1e62c912, 0x1e62c912, 0x335a626a, 0x335a626a, 0x335a626a, 0xaa4593fe, 0xfbf7caf1, 0xfbf7caf1, 0xaa4593fe, }, 20 },
|
{ "gfxterm_cyr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xe219612c, 0x41ad1120, 0xe219612c, 0xcc1ce453, 0xaa4593fe, 0xaa4593fe, 0x1f05167, 0x1f05167, 0x1f05167, 0xa7055c00, 0xa7055c00, 0xa7055c00, 0x8a3df778, 0x8a3df778, 0x8a3df778, 0xaa4593fe, 0xcc1ce453, 0xcc1ce453, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_cyr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x8aa7c8c3, 0x28620e7e, 0x8aa7c8c3, 0xd7b0a547, 0xc9cbf769, 0xc9cbf769, 0x860f1899, 0x860f1899, 0x860f1899, 0x78d7d955, 0x78d7d955, 0x78d7d955, 0x919d665d, 0x919d665d, 0x919d665d, 0xc9cbf769, 0xd7b0a547, 0xd7b0a547, 0xc9cbf769, }, 20 },
|
{ "gfxterm_cyr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x9f3ca4a3, 0x3df9621e, 0x9f3ca4a3, 0xc22bc927, 0xc9cbf769, 0xc9cbf769, 0x8f0b71ba, 0x8f0b71ba, 0x8f0b71ba, 0x71d3b076, 0x71d3b076, 0x71d3b076, 0x98990f7e, 0x98990f7e, 0x98990f7e, 0xc9cbf769, 0xc22bc927, 0xc22bc927, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x89654b6, 0x26bab4dd, 0x89654b6, 0xa6c01d6e, 0x9813a416, 0x9813a416, 0xc67652d9, 0xc67652d9, 0xc67652d9, 0x57add4ea, 0x57add4ea, 0x57add4ea, 0x4e17e93a, 0x4e17e93a, 0x4e17e93a, 0x9813a416, 0xa6c01d6e, 0xa6c01d6e, 0x9813a416, }, 20 },
|
{ "gfxterm_cyr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x6b1e7755, 0x4532973e, 0x6b1e7755, 0xc5483e8d, 0x9813a416, 0x9813a416, 0xa279dbc8, 0xa279dbc8, 0xa279dbc8, 0x33a25dfb, 0x33a25dfb, 0x33a25dfb, 0x2a18602b, 0x2a18602b, 0x2a18602b, 0x9813a416, 0xc5483e8d, 0xc5483e8d, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x77945f28, 0xec3ce845, 0x77945f28, 0x1326a9b, 0x5fcf013d, 0x5fcf013d, 0xc8e6e12c, 0xc8e6e12c, 0xc8e6e12c, 0x1af6f95a, 0x1af6f95a, 0x1af6f95a, 0xc85c6c5, 0xc85c6c5, 0xc85c6c5, 0x5fcf013d, 0x1326a9b, 0x1326a9b, 0x5fcf013d, }, 20 },
|
{ "gfxterm_cyr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xa3774c63, 0x38dffb0e, 0xa3774c63, 0xd5d179d0, 0x5fcf013d, 0x5fcf013d, 0x28872666, 0x28872666, 0x28872666, 0xfa973e10, 0xfa973e10, 0xfa973e10, 0xece4018f, 0xece4018f, 0xece4018f, 0x5fcf013d, 0xd5d179d0, 0xd5d179d0, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x4450a5dc, 0xda479f49, 0x4450a5dc, 0x5f557fdb, 0xdd28f52b, 0xdd28f52b, 0xddfe9197, 0xddfe9197, 0xddfe9197, 0xfcc26873, 0xfcc26873, 0xfcc26873, 0x817aa3ff, 0x817aa3ff, 0x817aa3ff, 0xdd28f52b, 0x5f557fdb, 0x5f557fdb, 0xdd28f52b, }, 20 },
|
{ "gfxterm_cyr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xe9556aa5, 0x77425030, 0xe9556aa5, 0xf250b0a2, 0xdd28f52b, 0xdd28f52b, 0x938cfa6a, 0x938cfa6a, 0x938cfa6a, 0xb2b0038e, 0xb2b0038e, 0xb2b0038e, 0xcf08c802, 0xcf08c802, 0xcf08c802, 0xdd28f52b, 0xf250b0a2, 0xf250b0a2, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_cyr", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x409098da, 0x2e0890e, 0x409098da, 0xbf2f835a, 0x43d1f34, 0x43d1f34, 0x253d050e, 0x253d050e, 0x253d050e, 0x5a37aca6, 0x5a37aca6, 0x5a37aca6, 0xc366a920, 0xc366a920, 0xc366a920, 0x43d1f34, 0xbf2f835a, 0xbf2f835a, 0x43d1f34, }, 20 },
|
{ "gfxterm_cyr", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x9adc43d0, 0xd8ac5204, 0x9adc43d0, 0x65635850, 0x43d1f34, 0x43d1f34, 0xc182db12, 0xc182db12, 0xc182db12, 0xbe8872ba, 0xbe8872ba, 0xbe8872ba, 0x27d9773c, 0x27d9773c, 0x27d9773c, 0x43d1f34, 0x65635850, 0x65635850, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_heb", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x546aa9f1, 0x56bf26d0, 0x546aa9f1, 0x179c64b6, 0x59c36f00, 0x59c36f00, 0xa98ad4a1, 0xa98ad4a1, 0xa98ad4a1, 0xd70ab9c7, 0xd70ab9c7, 0xd70ab9c7, 0xb5fcac15, 0xb5fcac15, 0xb5fcac15, 0x59c36f00, 0x179c64b6, 0x179c64b6, 0x59c36f00, }, 20 },
|
{ "gfxterm_heb", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x7fd0187d, 0x7d05975c, 0x7fd0187d, 0x3c26d53a, 0x59c36f00, 0x59c36f00, 0xb4fad8de, 0xb4fad8de, 0xb4fad8de, 0xca7ab5b8, 0xca7ab5b8, 0xca7ab5b8, 0xa88ca06a, 0xa88ca06a, 0xa88ca06a, 0x59c36f00, 0x3c26d53a, 0x3c26d53a, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_heb", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x12592c97, 0xa10f7034, 0x12592c97, 0x3c5ca9e8, 0xaa4593fe, 0xaa4593fe, 0x2c3e194, 0x2c3e194, 0x2c3e194, 0xa436ecf3, 0xa436ecf3, 0xa436ecf3, 0x890e478b, 0x890e478b, 0x890e478b, 0xaa4593fe, 0x3c5ca9e8, 0x3c5ca9e8, 0xaa4593fe, }, 20 },
|
{ "gfxterm_heb", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x54f3fad9, 0xe7a5a67a, 0x54f3fad9, 0x7af67fa6, 0xaa4593fe, 0xaa4593fe, 0xcae58c6a, 0xcae58c6a, 0xcae58c6a, 0x6c10810d, 0x6c10810d, 0x6c10810d, 0x41282a75, 0x41282a75, 0x41282a75, 0xaa4593fe, 0x7af67fa6, 0x7af67fa6, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_heb", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xed5de42a, 0x5cf94e51, 0xed5de42a, 0xb04a89ae, 0xc9cbf769, 0xc9cbf769, 0xdd578210, 0xdd578210, 0xdd578210, 0x238f43dc, 0x238f43dc, 0x238f43dc, 0xcac5fcd4, 0xcac5fcd4, 0xcac5fcd4, 0xc9cbf769, 0xb04a89ae, 0xb04a89ae, 0xc9cbf769, }, 20 },
|
{ "gfxterm_heb", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x869916b8, 0x373dbcc3, 0x869916b8, 0xdb8e7b3c, 0xc9cbf769, 0xc9cbf769, 0xaa0c75c1, 0xaa0c75c1, 0xaa0c75c1, 0x54d4b40d, 0x54d4b40d, 0x54d4b40d, 0xbd9e0b05, 0xbd9e0b05, 0xbd9e0b05, 0xc9cbf769, 0xdb8e7b3c, 0xdb8e7b3c, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xbbc56f90, 0x4f643bbb, 0xbbc56f90, 0x15932648, 0x9813a416, 0x9813a416, 0x28aba4d1, 0x28aba4d1, 0x28aba4d1, 0xb97022e2, 0xb97022e2, 0xb97022e2, 0xa0ca1f32, 0xa0ca1f32, 0xa0ca1f32, 0x9813a416, 0x15932648, 0x15932648, 0x9813a416, }, 20 },
|
{ "gfxterm_heb", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xb2f32f4, 0xff8e66df, 0xb2f32f4, 0xa5797b2c, 0x9813a416, 0x9813a416, 0x9fc65347, 0x9fc65347, 0x9fc65347, 0xe1dd574, 0xe1dd574, 0xe1dd574, 0x17a7e8a4, 0x17a7e8a4, 0x17a7e8a4, 0x9813a416, 0xa5797b2c, 0xa5797b2c, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x43465d8c, 0x6399888a, 0x43465d8c, 0x35e0683f, 0x5fcf013d, 0x5fcf013d, 0x4895c207, 0x4895c207, 0x4895c207, 0x9a85da71, 0x9a85da71, 0x9a85da71, 0x8cf6e5ee, 0x8cf6e5ee, 0x8cf6e5ee, 0x5fcf013d, 0x35e0683f, 0x35e0683f, 0x5fcf013d, }, 20 },
|
{ "gfxterm_heb", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x26280874, 0x6f7dd72, 0x26280874, 0x508e3dc7, 0x5fcf013d, 0x5fcf013d, 0x197943fe, 0x197943fe, 0x197943fe, 0xcb695b88, 0xcb695b88, 0xcb695b88, 0xdd1a6417, 0xdd1a6417, 0xdd1a6417, 0x5fcf013d, 0x508e3dc7, 0x508e3dc7, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd1e7f231, 0xe67e195e, 0xd1e7f231, 0xcae22836, 0xdd28f52b, 0xdd28f52b, 0xe7ae9f08, 0xe7ae9f08, 0xe7ae9f08, 0xc69266ec, 0xc69266ec, 0xc69266ec, 0xbb2aad60, 0xbb2aad60, 0xbb2aad60, 0xdd28f52b, 0xcae22836, 0xcae22836, 0xdd28f52b, }, 20 },
|
{ "gfxterm_heb", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd23ae631, 0xe5a30d5e, 0xd23ae631, 0xc93f3c36, 0xdd28f52b, 0xdd28f52b, 0x7042f8c, 0x7042f8c, 0x7042f8c, 0x2638d668, 0x2638d668, 0x2638d668, 0x5b801de4, 0x5b801de4, 0x5b801de4, 0xdd28f52b, 0xc93f3c36, 0xc93f3c36, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_heb", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x793e58f4, 0x5f939386, 0x793e58f4, 0x86814374, 0x43d1f34, 0x43d1f34, 0x12b2b9c1, 0x12b2b9c1, 0x12b2b9c1, 0x6db81069, 0x6db81069, 0x6db81069, 0xf4e915ef, 0xf4e915ef, 0xf4e915ef, 0x43d1f34, 0x86814374, 0x86814374, 0x43d1f34, }, 20 },
|
{ "gfxterm_heb", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x8d469c0b, 0xabeb5779, 0x8d469c0b, 0x72f9878b, 0x43d1f34, 0x43d1f34, 0xd8397828, 0xd8397828, 0xd8397828, 0xa733d180, 0xa733d180, 0xa733d180, 0x3e62d406, 0x3e62d406, 0x3e62d406, 0x43d1f34, 0x72f9878b, 0x72f9878b, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_gre", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x226c0d75, 0x9e291f4f, 0x226c0d75, 0x619ac032, 0x59c36f00, 0x59c36f00, 0x6fb6253, 0x6fb6253, 0x6fb6253, 0x787b0f35, 0x787b0f35, 0x787b0f35, 0x1a8d1ae7, 0x1a8d1ae7, 0x1a8d1ae7, 0x59c36f00, 0x619ac032, 0x619ac032, 0x59c36f00, }, 20 },
|
{ "gfxterm_gre", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xd668f275, 0x6a2de04f, 0xd668f275, 0x959e3f32, 0x59c36f00, 0x59c36f00, 0xc43520a0, 0xc43520a0, 0xc43520a0, 0xbab54dc6, 0xbab54dc6, 0xbab54dc6, 0xd8435814, 0xd8435814, 0xd8435814, 0x59c36f00, 0x959e3f32, 0x959e3f32, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_gre", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x8355045, 0xfe058b68, 0x8355045, 0x2630d53a, 0xaa4593fe, 0xaa4593fe, 0x290a3822, 0x290a3822, 0x290a3822, 0x8fff3545, 0x8fff3545, 0x8fff3545, 0xa2c79e3d, 0xa2c79e3d, 0xa2c79e3d, 0xaa4593fe, 0x2630d53a, 0x2630d53a, 0xaa4593fe, }, 20 },
|
{ "gfxterm_gre", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xe170ffb5, 0x17402498, 0xe170ffb5, 0xcf757aca, 0xaa4593fe, 0xaa4593fe, 0x4ec32c62, 0x4ec32c62, 0x4ec32c62, 0xe8362105, 0xe8362105, 0xe8362105, 0xc50e8a7d, 0xc50e8a7d, 0xc50e8a7d, 0xaa4593fe, 0xcf757aca, 0xcf757aca, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_gre", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xc702fa59, 0x74086887, 0xc702fa59, 0x9a1597dd, 0xc9cbf769, 0xc9cbf769, 0x60295baa, 0x60295baa, 0x60295baa, 0x9ef19a66, 0x9ef19a66, 0x9ef19a66, 0x77bb256e, 0x77bb256e, 0x77bb256e, 0xc9cbf769, 0x9a1597dd, 0x9a1597dd, 0xc9cbf769, }, 20 },
|
{ "gfxterm_gre", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xf4aef2d6, 0x47a46008, 0xf4aef2d6, 0xa9b99f52, 0xc9cbf769, 0xc9cbf769, 0x4f1a5666, 0x4f1a5666, 0x4f1a5666, 0xb1c297aa, 0xb1c297aa, 0xb1c297aa, 0x588828a2, 0x588828a2, 0x588828a2, 0xc9cbf769, 0xa9b99f52, 0xa9b99f52, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x82385331, 0xf77eda42, 0x82385331, 0x2c6e1ae9, 0x9813a416, 0x9813a416, 0x140c0d1f, 0x140c0d1f, 0x140c0d1f, 0x85d78b2c, 0x85d78b2c, 0x85d78b2c, 0x9c6db6fc, 0x9c6db6fc, 0x9c6db6fc, 0x9813a416, 0x2c6e1ae9, 0x2c6e1ae9, 0x9813a416, }, 20 },
|
{ "gfxterm_gre", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xc2ed8f74, 0xb7ab0607, 0xc2ed8f74, 0x6cbbc6ac, 0x9813a416, 0x9813a416, 0x535e7ba8, 0x535e7ba8, 0x535e7ba8, 0xc285fd9b, 0xc285fd9b, 0xc285fd9b, 0xdb3fc04b, 0xdb3fc04b, 0xdb3fc04b, 0x9813a416, 0x6cbbc6ac, 0x6cbbc6ac, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x565d2d38, 0x34f757ec, 0x565d2d38, 0x20fb188b, 0x5fcf013d, 0x5fcf013d, 0x230bf123, 0x230bf123, 0x230bf123, 0xf11be955, 0xf11be955, 0xf11be955, 0xe768d6ca, 0xe768d6ca, 0xe768d6ca, 0x5fcf013d, 0x20fb188b, 0x20fb188b, 0x5fcf013d, }, 20 },
|
{ "gfxterm_gre", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xf62383d8, 0x9489f90c, 0xf62383d8, 0x8085b66b, 0x5fcf013d, 0x5fcf013d, 0xb7f78bc2, 0xb7f78bc2, 0xb7f78bc2, 0x65e793b4, 0x65e793b4, 0x65e793b4, 0x7394ac2b, 0x7394ac2b, 0x7394ac2b, 0x5fcf013d, 0x8085b66b, 0x8085b66b, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x632132a4, 0x4a8c90b2, 0x632132a4, 0x7824e8a3, 0xdd28f52b, 0xdd28f52b, 0xef2bffce, 0xef2bffce, 0xef2bffce, 0xce17062a, 0xce17062a, 0xce17062a, 0xb3afcda6, 0xb3afcda6, 0xb3afcda6, 0xdd28f52b, 0x7824e8a3, 0x7824e8a3, 0xdd28f52b, }, 20 },
|
{ "gfxterm_gre", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x753d8bc0, 0x5c9029d6, 0x753d8bc0, 0x6e3851c7, 0xdd28f52b, 0xdd28f52b, 0x1a40e22e, 0x1a40e22e, 0x1a40e22e, 0x3b7c1bca, 0x3b7c1bca, 0x3b7c1bca, 0x46c4d046, 0x46c4d046, 0x46c4d046, 0xdd28f52b, 0x6e3851c7, 0x6e3851c7, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_gre", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x461d4cfa, 0xfd3492c2, 0x461d4cfa, 0xb9a2577a, 0x43d1f34, 0x43d1f34, 0xfb72301f, 0xfb72301f, 0xfb72301f, 0x847899b7, 0x847899b7, 0x847899b7, 0x1d299c31, 0x1d299c31, 0x1d299c31, 0x43d1f34, 0xb9a2577a, 0xb9a2577a, 0x43d1f34, }, 20 },
|
{ "gfxterm_gre", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x62a774, 0xbb4b794c, 0x62a774, 0xffddbcf4, 0x43d1f34, 0x43d1f34, 0x83fede87, 0x83fede87, 0x83fede87, 0xfcf4772f, 0xfcf4772f, 0xfcf4772f, 0x65a572a9, 0x65a572a9, 0x65a572a9, 0x43d1f34, 0xffddbcf4, 0xffddbcf4, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_ru", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x82758f66, 0xbac387fd, 0x82758f66, 0xc1834221, 0x59c36f00, 0x59c36f00, 0x4877befe, 0x4877befe, 0x4877befe, 0x36f7d398, 0x36f7d398, 0x36f7d398, 0x5401c64a, 0x5401c64a, 0x5401c64a, 0x59c36f00, 0xc1834221, 0xc1834221, 0x59c36f00, }, 20 },
|
{ "gfxterm_ru", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x2edc6dc9, 0x166a6552, 0x2edc6dc9, 0x6d2aa08e, 0x59c36f00, 0x59c36f00, 0xd214e1a2, 0xd214e1a2, 0xd214e1a2, 0xac948cc4, 0xac948cc4, 0xac948cc4, 0xce629916, 0xce629916, 0xce629916, 0x59c36f00, 0x6d2aa08e, 0x6d2aa08e, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_ru", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x4500a591, 0x9a40cbd8, 0x4500a591, 0x6b0520ee, 0xaa4593fe, 0xaa4593fe, 0x16db2902, 0x16db2902, 0x16db2902, 0xb02e2465, 0xb02e2465, 0xb02e2465, 0x9d168f1d, 0x9d168f1d, 0x9d168f1d, 0xaa4593fe, 0x6b0520ee, 0x6b0520ee, 0xaa4593fe, }, 20 },
|
{ "gfxterm_ru", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xc12e1a21, 0x1e6e7468, 0xc12e1a21, 0xef2b9f5e, 0xaa4593fe, 0xaa4593fe, 0x1c792d02, 0x1c792d02, 0x1c792d02, 0xba8c2065, 0xba8c2065, 0xba8c2065, 0x97b48b1d, 0x97b48b1d, 0x97b48b1d, 0xaa4593fe, 0xef2b9f5e, 0xef2b9f5e, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_ru", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x3cd9ea11, 0x1244c852, 0x3cd9ea11, 0x61ce8795, 0xc9cbf769, 0xc9cbf769, 0x6b15d6f0, 0x6b15d6f0, 0x6b15d6f0, 0x95cd173c, 0x95cd173c, 0x95cd173c, 0x7c87a834, 0x7c87a834, 0x7c87a834, 0xc9cbf769, 0x61ce8795, 0x61ce8795, 0xc9cbf769, }, 20 },
|
{ "gfxterm_ru", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x510524f7, 0x7f9806b4, 0x510524f7, 0xc124973, 0xc9cbf769, 0xc9cbf769, 0x1a561d55, 0x1a561d55, 0x1a561d55, 0xe48edc99, 0xe48edc99, 0xe48edc99, 0xdc46391, 0xdc46391, 0xdc46391, 0xc9cbf769, 0xc124973, 0xc124973, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xc818f15f, 0xbaf13382, 0xc818f15f, 0x664eb887, 0x9813a416, 0x9813a416, 0x350fe990, 0x350fe990, 0x350fe990, 0xa4d46fa3, 0xa4d46fa3, 0xa4d46fa3, 0xbd6e5273, 0xbd6e5273, 0xbd6e5273, 0x9813a416, 0x664eb887, 0x664eb887, 0x9813a416, }, 20 },
|
{ "gfxterm_ru", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xa1ee6604, 0xd307a4d9, 0xa1ee6604, 0xfb82fdc, 0x9813a416, 0x9813a416, 0x5b7ed439, 0x5b7ed439, 0x5b7ed439, 0xcaa5520a, 0xcaa5520a, 0xcaa5520a, 0xd31f6fda, 0xd31f6fda, 0xd31f6fda, 0x9813a416, 0xfb82fdc, 0xfb82fdc, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xaa1dc81, 0x234341dd, 0xaa1dc81, 0x7c07e932, 0x5fcf013d, 0x5fcf013d, 0x969354c5, 0x969354c5, 0x969354c5, 0x44834cb3, 0x44834cb3, 0x44834cb3, 0x52f0732c, 0x52f0732c, 0x52f0732c, 0x5fcf013d, 0x7c07e932, 0x7c07e932, 0x5fcf013d, }, 20 },
|
{ "gfxterm_ru", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x4e2bb6a8, 0x67c92bf4, 0x4e2bb6a8, 0x388d831b, 0x5fcf013d, 0x5fcf013d, 0xe69beaed, 0xe69beaed, 0xe69beaed, 0x348bf29b, 0x348bf29b, 0x348bf29b, 0x22f8cd04, 0x22f8cd04, 0x22f8cd04, 0x5fcf013d, 0x388d831b, 0x388d831b, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd9aa4b29, 0x555fdda0, 0xd9aa4b29, 0xc2af912e, 0xdd28f52b, 0xdd28f52b, 0xe82cbfd, 0xe82cbfd, 0xe82cbfd, 0x2fbe3219, 0x2fbe3219, 0x2fbe3219, 0x5206f995, 0x5206f995, 0x5206f995, 0xdd28f52b, 0xc2af912e, 0xc2af912e, 0xdd28f52b, }, 20 },
|
{ "gfxterm_ru", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xeb6b461d, 0x679ed094, 0xeb6b461d, 0xf06e9c1a, 0xdd28f52b, 0xdd28f52b, 0xdf34624d, 0xdf34624d, 0xdf34624d, 0xfe089ba9, 0xfe089ba9, 0xfe089ba9, 0x83b05025, 0x83b05025, 0x83b05025, 0xdd28f52b, 0xf06e9c1a, 0xf06e9c1a, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_ru", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xfd4e19ff, 0x42807b86, 0xfd4e19ff, 0x2f1027f, 0x43d1f34, 0x43d1f34, 0x924dc5be, 0x924dc5be, 0x924dc5be, 0xed476c16, 0xed476c16, 0xed476c16, 0x74166990, 0x74166990, 0x74166990, 0x43d1f34, 0x2f1027f, 0x2f1027f, 0x43d1f34, }, 20 },
|
{ "gfxterm_ru", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xc486143c, 0x7b487645, 0xc486143c, 0x3b390fbc, 0x43d1f34, 0x43d1f34, 0x9576cd6b, 0x9576cd6b, 0x9576cd6b, 0xea7c64c3, 0xea7c64c3, 0xea7c64c3, 0x732d6145, 0x732d6145, 0x732d6145, 0x43d1f34, 0x3b390fbc, 0x3b390fbc, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_fr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x3a63a2e6, 0x118487d4, 0x3a63a2e6, 0x79956fa1, 0x59c36f00, 0x59c36f00, 0x389f4d2d, 0x389f4d2d, 0x389f4d2d, 0x461f204b, 0x461f204b, 0x461f204b, 0x24e93599, 0x24e93599, 0x24e93599, 0x59c36f00, 0x79956fa1, 0x79956fa1, 0x59c36f00, }, 20 },
|
{ "gfxterm_fr", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xa024d435, 0x8bc3f107, 0xa024d435, 0xe3d21972, 0x59c36f00, 0x59c36f00, 0x9412860d, 0x9412860d, 0x9412860d, 0xea92eb6b, 0xea92eb6b, 0xea92eb6b, 0x8864feb9, 0x8864feb9, 0x8864feb9, 0x59c36f00, 0xe3d21972, 0xe3d21972, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_fr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x62d33f4d, 0x9544a8f4, 0x62d33f4d, 0x4cd6ba32, 0xaa4593fe, 0xaa4593fe, 0xfb86a3a4, 0xfb86a3a4, 0xfb86a3a4, 0x5d73aec3, 0x5d73aec3, 0x5d73aec3, 0x704b05bb, 0x704b05bb, 0x704b05bb, 0xaa4593fe, 0x4cd6ba32, 0x4cd6ba32, 0xaa4593fe, }, 20 },
|
{ "gfxterm_fr", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xbf89b975, 0x481e2ecc, 0xbf89b975, 0x918c3c0a, 0xaa4593fe, 0xaa4593fe, 0xa8509e2c, 0xa8509e2c, 0xa8509e2c, 0xea5934b, 0xea5934b, 0xea5934b, 0x239d3833, 0x239d3833, 0x239d3833, 0xaa4593fe, 0x918c3c0a, 0x918c3c0a, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_fr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x8cc4b6dc, 0x1042c383, 0x8cc4b6dc, 0xd1d3db58, 0xc9cbf769, 0xc9cbf769, 0xeba8a32b, 0xeba8a32b, 0xeba8a32b, 0x157062e7, 0x157062e7, 0x157062e7, 0xfc3addef, 0xfc3addef, 0xfc3addef, 0xc9cbf769, 0xd1d3db58, 0xd1d3db58, 0xc9cbf769, }, 20 },
|
{ "gfxterm_fr", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x4d84ea04, 0xd1029f5b, 0x4d84ea04, 0x10938780, 0xc9cbf769, 0xc9cbf769, 0x3677fab0, 0x3677fab0, 0x3677fab0, 0xc8af3b7c, 0xc8af3b7c, 0xc8af3b7c, 0x21e58474, 0x21e58474, 0x21e58474, 0xc9cbf769, 0x10938780, 0x10938780, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x23f9afd, 0x465f5ecc, 0x23f9afd, 0xac69d325, 0x9813a416, 0x9813a416, 0xccf7a1e3, 0xccf7a1e3, 0xccf7a1e3, 0x5d2c27d0, 0x5d2c27d0, 0x5d2c27d0, 0x44961a00, 0x44961a00, 0x44961a00, 0x9813a416, 0xac69d325, 0xac69d325, 0x9813a416, }, 20 },
|
{ "gfxterm_fr", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x9e5f6ab3, 0xda3fae82, 0x9e5f6ab3, 0x3009236b, 0x9813a416, 0x9813a416, 0x5710fb5f, 0x5710fb5f, 0x5710fb5f, 0xc6cb7d6c, 0xc6cb7d6c, 0xc6cb7d6c, 0xdf7140bc, 0xdf7140bc, 0xdf7140bc, 0x9813a416, 0x3009236b, 0x3009236b, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xed796a26, 0x3132d083, 0xed796a26, 0x9bdf5f95, 0x5fcf013d, 0x5fcf013d, 0x42f66a49, 0x42f66a49, 0x42f66a49, 0x90e6723f, 0x90e6723f, 0x90e6723f, 0x86954da0, 0x86954da0, 0x86954da0, 0x5fcf013d, 0x9bdf5f95, 0x9bdf5f95, 0x5fcf013d, }, 20 },
|
{ "gfxterm_fr", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x28f46625, 0xf4bfdc80, 0x28f46625, 0x5e525396, 0x5fcf013d, 0x5fcf013d, 0xb3f9b24b, 0xb3f9b24b, 0xb3f9b24b, 0x61e9aa3d, 0x61e9aa3d, 0x61e9aa3d, 0x779a95a2, 0x779a95a2, 0x779a95a2, 0x5fcf013d, 0x5e525396, 0x5e525396, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x54b28785, 0x7fbbe762, 0x54b28785, 0x4fb75d82, 0xdd28f52b, 0xdd28f52b, 0x14b1cf29, 0x14b1cf29, 0x14b1cf29, 0x358d36cd, 0x358d36cd, 0x358d36cd, 0x4835fd41, 0x4835fd41, 0x4835fd41, 0xdd28f52b, 0x4fb75d82, 0x4fb75d82, 0xdd28f52b, }, 20 },
|
{ "gfxterm_fr", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x8c12e300, 0xa71b83e7, 0x8c12e300, 0x97173907, 0xdd28f52b, 0xdd28f52b, 0x2f660f28, 0x2f660f28, 0x2f660f28, 0xe5af6cc, 0xe5af6cc, 0xe5af6cc, 0x73e23d40, 0x73e23d40, 0x73e23d40, 0xdd28f52b, 0x97173907, 0x97173907, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_fr", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x7acc2669, 0xbf1a1d96, 0x7acc2669, 0x85733de9, 0x43d1f34, 0x43d1f34, 0x2cc1e8f4, 0x2cc1e8f4, 0x2cc1e8f4, 0x53cb415c, 0x53cb415c, 0x53cb415c, 0xca9a44da, 0xca9a44da, 0xca9a44da, 0x43d1f34, 0x85733de9, 0x85733de9, 0x43d1f34, }, 20 },
|
{ "gfxterm_fr", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xbaaaeec4, 0x7f7cd53b, 0xbaaaeec4, 0x4515f544, 0x43d1f34, 0x43d1f34, 0xd254254f, 0xd254254f, 0xd254254f, 0xad5e8ce7, 0xad5e8ce7, 0xad5e8ce7, 0x340f8961, 0x340f8961, 0x340f8961, 0x43d1f34, 0x4515f544, 0x4515f544, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_quot", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xf9511593, 0x9f9ef910, 0xf9511593, 0xbaa7d8d4, 0x59c36f00, 0x59c36f00, 0x7fd94135, 0x7fd94135, 0x7fd94135, 0x1592c53, 0x1592c53, 0x1592c53, 0x63af3981, 0x63af3981, 0x63af3981, 0x59c36f00, 0xbaa7d8d4, 0xbaa7d8d4, 0x59c36f00, }, 20 },
|
{ "gfxterm_quot", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x63166340, 0x5d98fc3, 0x63166340, 0x20e0ae07, 0x59c36f00, 0x59c36f00, 0xd3548a15, 0xd3548a15, 0xd3548a15, 0xadd4e773, 0xadd4e773, 0xadd4e773, 0xcf22f2a1, 0xcf22f2a1, 0xcf22f2a1, 0x59c36f00, 0x20e0ae07, 0x20e0ae07, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_quot", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x3dcbe25f, 0x99e165e7, 0x3dcbe25f, 0x13ce6720, 0xaa4593fe, 0xaa4593fe, 0x2e88732f, 0x2e88732f, 0x2e88732f, 0x887d7e48, 0x887d7e48, 0x887d7e48, 0xa545d530, 0xa545d530, 0xa545d530, 0xaa4593fe, 0x13ce6720, 0x13ce6720, 0xaa4593fe, }, 20 },
|
{ "gfxterm_quot", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xe0916467, 0x44bbe3df, 0xe0916467, 0xce94e118, 0xaa4593fe, 0xaa4593fe, 0x7d5e4ea7, 0x7d5e4ea7, 0x7d5e4ea7, 0xdbab43c0, 0xdbab43c0, 0xdbab43c0, 0xf693e8b8, 0xf693e8b8, 0xf693e8b8, 0xaa4593fe, 0xce94e118, 0xce94e118, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_quot", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xdbedc74c, 0x61619894, 0xdbedc74c, 0x86faaac8, 0xc9cbf769, 0xc9cbf769, 0xda1c9f17, 0xda1c9f17, 0xda1c9f17, 0x24c45edb, 0x24c45edb, 0x24c45edb, 0xcd8ee1d3, 0xcd8ee1d3, 0xcd8ee1d3, 0xc9cbf769, 0x86faaac8, 0x86faaac8, 0xc9cbf769, }, 20 },
|
{ "gfxterm_quot", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x1aad9b94, 0xa021c44c, 0x1aad9b94, 0x47baf610, 0xc9cbf769, 0xc9cbf769, 0x7c3c68c, 0x7c3c68c, 0x7c3c68c, 0xf91b0740, 0xf91b0740, 0xf91b0740, 0x1051b848, 0x1051b848, 0x1051b848, 0xc9cbf769, 0x47baf610, 0x47baf610, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x2411f56f, 0x97b1fc58, 0x2411f56f, 0x8a47bcb7, 0x9813a416, 0x9813a416, 0xfb08d7cf, 0xfb08d7cf, 0xfb08d7cf, 0x6ad351fc, 0x6ad351fc, 0x6ad351fc, 0x73696c2c, 0x73696c2c, 0x73696c2c, 0x9813a416, 0x8a47bcb7, 0x8a47bcb7, 0x9813a416, }, 20 },
|
{ "gfxterm_quot", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xb8710521, 0xbd10c16, 0xb8710521, 0x16274cf9, 0x9813a416, 0x9813a416, 0x60ef8d73, 0x60ef8d73, 0x60ef8d73, 0xf1340b40, 0xf1340b40, 0xf1340b40, 0xe88e3690, 0xe88e3690, 0xe88e3690, 0x9813a416, 0x16274cf9, 0x16274cf9, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x13a65fb6, 0x35044d7, 0x13a65fb6, 0x65006a05, 0x5fcf013d, 0x5fcf013d, 0x9e56a9e0, 0x9e56a9e0, 0x9e56a9e0, 0x4c46b196, 0x4c46b196, 0x4c46b196, 0x5a358e09, 0x5a358e09, 0x5a358e09, 0x5fcf013d, 0x65006a05, 0x65006a05, 0x5fcf013d, }, 20 },
|
{ "gfxterm_quot", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xd62b53b5, 0xc6dd48d4, 0xd62b53b5, 0xa08d6606, 0x5fcf013d, 0x5fcf013d, 0x6f5971e2, 0x6f5971e2, 0x6f5971e2, 0xbd496994, 0xbd496994, 0xbd496994, 0xab3a560b, 0xab3a560b, 0xab3a560b, 0x5fcf013d, 0xa08d6606, 0xa08d6606, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xc8f05290, 0x9c88f64e, 0xc8f05290, 0xd3f58897, 0xdd28f52b, 0xdd28f52b, 0xe1579057, 0xe1579057, 0xe1579057, 0xc06b69b3, 0xc06b69b3, 0xc06b69b3, 0xbdd3a23f, 0xbdd3a23f, 0xbdd3a23f, 0xdd28f52b, 0xd3f58897, 0xd3f58897, 0xdd28f52b, }, 20 },
|
{ "gfxterm_quot", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x10503615, 0x442892cb, 0x10503615, 0xb55ec12, 0xdd28f52b, 0xdd28f52b, 0xda805056, 0xda805056, 0xda805056, 0xfbbca9b2, 0xfbbca9b2, 0xfbbca9b2, 0x8604623e, 0x8604623e, 0x8604623e, 0xdd28f52b, 0xb55ec12, 0xb55ec12, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_quot", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x9cfbc80f, 0x376a1fb2, 0x9cfbc80f, 0x6344d38f, 0x43d1f34, 0x43d1f34, 0x6486f7c4, 0x6486f7c4, 0x6486f7c4, 0x1b8c5e6c, 0x1b8c5e6c, 0x1b8c5e6c, 0x82dd5bea, 0x82dd5bea, 0x82dd5bea, 0x43d1f34, 0x6344d38f, 0x6344d38f, 0x43d1f34, }, 20 },
|
{ "gfxterm_quot", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x5c9d00a2, 0xf70cd71f, 0x5c9d00a2, 0xa3221b22, 0x43d1f34, 0x43d1f34, 0x9a133a7f, 0x9a133a7f, 0x9a133a7f, 0xe51993d7, 0xe51993d7, 0xe51993d7, 0x7c489651, 0x7c489651, 0x7c489651, 0x43d1f34, 0xa3221b22, 0xa3221b22, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_piglatin", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xd327ca68, 0x9c977e8c, 0xd327ca68, 0x90d1072f, 0x59c36f00, 0x59c36f00, 0x71c9d9, 0x71c9d9, 0x71c9d9, 0x7ef1a4bf, 0x7ef1a4bf, 0x7ef1a4bf, 0x1c07b16d, 0x1c07b16d, 0x1c07b16d, 0x59c36f00, 0x90d1072f, 0x90d1072f, 0x59c36f00, }, 20 },
|
{ "gfxterm_piglatin", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xbc89067b, 0xf339b29f, 0xbc89067b, 0xff7fcb3c, 0x59c36f00, 0x59c36f00, 0x5915b839, 0x5915b839, 0x5915b839, 0x2795d55f, 0x2795d55f, 0x2795d55f, 0x4563c08d, 0x4563c08d, 0x4563c08d, 0x59c36f00, 0xff7fcb3c, 0xff7fcb3c, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_piglatin", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x2da3855b, 0x24c7b138, 0x2da3855b, 0x3a60024, 0xaa4593fe, 0xaa4593fe, 0x147ff249, 0x147ff249, 0x147ff249, 0xb28aff2e, 0xb28aff2e, 0xb28aff2e, 0x9fb25456, 0x9fb25456, 0x9fb25456, 0xaa4593fe, 0x3a60024, 0x3a60024, 0xaa4593fe, }, 20 },
|
{ "gfxterm_piglatin", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xb19b98f6, 0xb8ffac95, 0xb19b98f6, 0x9f9e1d89, 0xaa4593fe, 0xaa4593fe, 0x6cb5454, 0x6cb5454, 0x6cb5454, 0xa03e5933, 0xa03e5933, 0xa03e5933, 0x8d06f24b, 0x8d06f24b, 0x8d06f24b, 0xaa4593fe, 0x9f9e1d89, 0x9f9e1d89, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_piglatin", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x660ab3d9, 0xa75b45c4, 0x660ab3d9, 0x3b1dde5d, 0xc9cbf769, 0xc9cbf769, 0x5ff884f5, 0x5ff884f5, 0x5ff884f5, 0xa1204539, 0xa1204539, 0xa1204539, 0x486afa31, 0x486afa31, 0x486afa31, 0xc9cbf769, 0x3b1dde5d, 0x3b1dde5d, 0xc9cbf769, }, 20 },
|
{ "gfxterm_piglatin", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x133d7c3b, 0xd26c8a26, 0x133d7c3b, 0x4e2a11bf, 0xc9cbf769, 0xc9cbf769, 0x36504e54, 0x36504e54, 0x36504e54, 0xc8888f98, 0xc8888f98, 0xc8888f98, 0x21c23090, 0x21c23090, 0x21c23090, 0xc9cbf769, 0x4e2a11bf, 0x4e2a11bf, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x920957ee, 0xceebfd42, 0x920957ee, 0x3c5f1e36, 0x9813a416, 0x9813a416, 0xa917dbef, 0xa917dbef, 0xa917dbef, 0x38cc5ddc, 0x38cc5ddc, 0x38cc5ddc, 0x2176600c, 0x2176600c, 0x2176600c, 0x9813a416, 0x3c5f1e36, 0x3c5f1e36, 0x9813a416, }, 20 },
|
{ "gfxterm_piglatin", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xbfc94fbe, 0xe32be512, 0xbfc94fbe, 0x119f0666, 0x9813a416, 0x9813a416, 0x8350694d, 0x8350694d, 0x8350694d, 0x128bef7e, 0x128bef7e, 0x128bef7e, 0xb31d2ae, 0xb31d2ae, 0xb31d2ae, 0x9813a416, 0x119f0666, 0x119f0666, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x8298cd03, 0xfb88293a, 0x8298cd03, 0xf43ef8b0, 0x5fcf013d, 0x5fcf013d, 0x8f57f36b, 0x8f57f36b, 0x8f57f36b, 0x5d47eb1d, 0x5d47eb1d, 0x5d47eb1d, 0x4b34d482, 0x4b34d482, 0x4b34d482, 0x5fcf013d, 0xf43ef8b0, 0xf43ef8b0, 0x5fcf013d, }, 20 },
|
{ "gfxterm_piglatin", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x9cf25061, 0xe5e2b458, 0x9cf25061, 0xea5465d2, 0x5fcf013d, 0x5fcf013d, 0xa5bfba08, 0xa5bfba08, 0xa5bfba08, 0x77afa27e, 0x77afa27e, 0x77afa27e, 0x61dc9de1, 0x61dc9de1, 0x61dc9de1, 0x5fcf013d, 0xea5465d2, 0xea5465d2, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xd8bbc577, 0xb2c37549, 0xd8bbc577, 0xc3be1f70, 0xdd28f52b, 0xdd28f52b, 0xd8b598e, 0xd8b598e, 0xd8b598e, 0x2cb7a06a, 0x2cb7a06a, 0x2cb7a06a, 0x510f6be6, 0x510f6be6, 0x510f6be6, 0xdd28f52b, 0xc3be1f70, 0xc3be1f70, 0xdd28f52b, }, 20 },
|
{ "gfxterm_piglatin", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xc968ecc5, 0xa3105cfb, 0xc968ecc5, 0xd26d36c2, 0xdd28f52b, 0xdd28f52b, 0xff2fd4b8, 0xff2fd4b8, 0xff2fd4b8, 0xde132d5c, 0xde132d5c, 0xde132d5c, 0xa3abe6d0, 0xa3abe6d0, 0xa3abe6d0, 0xdd28f52b, 0xd26d36c2, 0xd26d36c2, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_piglatin", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x4d7993a1, 0xbeefcd88, 0x4d7993a1, 0xb2c68821, 0x43d1f34, 0x43d1f34, 0x1dbc7020, 0x1dbc7020, 0x1dbc7020, 0x62b6d988, 0x62b6d988, 0x62b6d988, 0xfbe7dc0e, 0xfbe7dc0e, 0xfbe7dc0e, 0x43d1f34, 0xb2c68821, 0xb2c68821, 0x43d1f34, }, 20 },
|
{ "gfxterm_piglatin", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xf17f3c, 0xf3672115, 0xf17f3c, 0xff4e64bc, 0x43d1f34, 0x43d1f34, 0x6ec799ab, 0x6ec799ab, 0x6ec799ab, 0x11cd3003, 0x11cd3003, 0x11cd3003, 0x889c3585, 0x889c3585, 0x889c3585, 0x43d1f34, 0xff4e64bc, 0xff4e64bc, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_ch", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x628b6f61, 0x50f94215, 0x628b6f61, 0x217da226, 0x59c36f00, 0x59c36f00, 0x5755be7f, 0x5755be7f, 0x5755be7f, 0x29d5d319, 0x29d5d319, 0x29d5d319, 0x4b23c6cb, 0x4b23c6cb, 0x4b23c6cb, 0x59c36f00, 0x217da226, 0x217da226, 0x59c36f00, }, 20 },
|
{ "gfxterm_ch", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x20f2a62b, 0x12808b5f, 0x20f2a62b, 0x63046b6c, 0x59c36f00, 0x59c36f00, 0x23e6cac6, 0x23e6cac6, 0x23e6cac6, 0x5d66a7a0, 0x5d66a7a0, 0x5d66a7a0, 0x3f90b272, 0x3f90b272, 0x3f90b272, 0x59c36f00, 0x63046b6c, 0x63046b6c, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_ch", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x9f82cd08, 0xbc67f78d, 0x9f82cd08, 0xb1874877, 0xaa4593fe, 0xaa4593fe, 0x4749512e, 0x4749512e, 0x4749512e, 0xe1bc5c49, 0xe1bc5c49, 0xe1bc5c49, 0xcc84f731, 0xcc84f731, 0xcc84f731, 0xaa4593fe, 0xb1874877, 0xb1874877, 0xaa4593fe, }, 20 },
|
{ "gfxterm_ch", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x52fcbd8f, 0x7119870a, 0x52fcbd8f, 0x7cf938f0, 0xaa4593fe, 0xaa4593fe, 0x4bb9a19, 0x4bb9a19, 0x4bb9a19, 0xa24e977e, 0xa24e977e, 0xa24e977e, 0x8f763c06, 0x8f763c06, 0x8f763c06, 0xaa4593fe, 0x7cf938f0, 0x7cf938f0, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_ch", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xbee47cfb, 0x88e98534, 0xbee47cfb, 0xe3f3117f, 0xc9cbf769, 0xc9cbf769, 0xe2396b15, 0xe2396b15, 0xe2396b15, 0x1ce1aad9, 0x1ce1aad9, 0x1ce1aad9, 0xf5ab15d1, 0xf5ab15d1, 0xf5ab15d1, 0xc9cbf769, 0xe3f3117f, 0xe3f3117f, 0xc9cbf769, }, 20 },
|
{ "gfxterm_ch", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xe4d74d3f, 0xd2dab4f0, 0xe4d74d3f, 0xb9c020bb, 0xc9cbf769, 0xc9cbf769, 0xa4955f92, 0xa4955f92, 0xa4955f92, 0x5a4d9e5e, 0x5a4d9e5e, 0x5a4d9e5e, 0xb3072156, 0xb3072156, 0xb3072156, 0xc9cbf769, 0xb9c020bb, 0xb9c020bb, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x2bfd5a83, 0xbe3c6f2f, 0x2bfd5a83, 0x85ab135b, 0x9813a416, 0x9813a416, 0xce30693b, 0xce30693b, 0xce30693b, 0x5febef08, 0x5febef08, 0x5febef08, 0x4651d2d8, 0x4651d2d8, 0x4651d2d8, 0x9813a416, 0x85ab135b, 0x85ab135b, 0x9813a416, }, 20 },
|
{ "gfxterm_ch", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xa1c2b9ec, 0x34038c40, 0xa1c2b9ec, 0xf94f034, 0x9813a416, 0x9813a416, 0x438820a6, 0x438820a6, 0x438820a6, 0xd253a695, 0xd253a695, 0xd253a695, 0xcbe99b45, 0xcbe99b45, 0xcbe99b45, 0x9813a416, 0xf94f034, 0xf94f034, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x1456f321, 0xc3a55992, 0x1456f321, 0x62f0c692, 0x5fcf013d, 0x5fcf013d, 0xbe3d534a, 0xbe3d534a, 0xbe3d534a, 0x6c2d4b3c, 0x6c2d4b3c, 0x6c2d4b3c, 0x7a5e74a3, 0x7a5e74a3, 0x7a5e74a3, 0x5fcf013d, 0x62f0c692, 0x62f0c692, 0x5fcf013d, }, 20 },
|
{ "gfxterm_ch", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x339cc65f, 0xe46f6cec, 0x339cc65f, 0x453af3ec, 0x5fcf013d, 0x5fcf013d, 0xad75b235, 0xad75b235, 0xad75b235, 0x7f65aa43, 0x7f65aa43, 0x7f65aa43, 0x691695dc, 0x691695dc, 0x691695dc, 0x5fcf013d, 0x453af3ec, 0x453af3ec, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xdcac6945, 0x43fbdf5a, 0xdcac6945, 0xc7a9b342, 0xdd28f52b, 0xdd28f52b, 0x274da20b, 0x274da20b, 0x274da20b, 0x6715bef, 0x6715bef, 0x6715bef, 0x7bc99063, 0x7bc99063, 0x7bc99063, 0xdd28f52b, 0xc7a9b342, 0xc7a9b342, 0xdd28f52b, }, 20 },
|
{ "gfxterm_ch", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x1c229a1a, 0x83752c05, 0x1c229a1a, 0x727401d, 0xdd28f52b, 0xdd28f52b, 0x4b4f5d0, 0x4b4f5d0, 0x4b4f5d0, 0x25880c34, 0x25880c34, 0x25880c34, 0x5830c7b8, 0x5830c7b8, 0x5830c7b8, 0xdd28f52b, 0x727401d, 0x727401d, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_ch", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x571e16b1, 0xb9f25c2, 0x571e16b1, 0xa8a10d31, 0x43d1f34, 0x43d1f34, 0x25dfb69d, 0x25dfb69d, 0x25dfb69d, 0x5ad51f35, 0x5ad51f35, 0x5ad51f35, 0xc3841ab3, 0xc3841ab3, 0xc3841ab3, 0x43d1f34, 0xa8a10d31, 0xa8a10d31, 0x43d1f34, }, 20 },
|
{ "gfxterm_ch", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x4d69e76c, 0x11e8d41f, 0x4d69e76c, 0xb2d6fcec, 0x43d1f34, 0x43d1f34, 0x15b4256, 0x15b4256, 0x15b4256, 0x7e51ebfe, 0x7e51ebfe, 0x7e51ebfe, 0xe700ee78, 0xe700ee78, 0xe700ee78, 0x43d1f34, 0xb2d6fcec, 0xb2d6fcec, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_red", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xec987771, 0x8a579bf2, 0xec987771, 0xbbb5c9af, 0x59c36f00, 0x59c36f00, 0x16780f43, 0x16780f43, 0x16780f43, 0x68f86225, 0x68f86225, 0x68f86225, 0xa0e77f7, 0xa0e77f7, 0xa0e77f7, 0x59c36f00, 0xbbb5c9af, 0xbbb5c9af, 0x59c36f00, }, 20 },
|
{ "gfxterm_red", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xecc0313, 0x6803ef90, 0xecc0313, 0x59e1bdcd, 0x59c36f00, 0x59c36f00, 0xbaf5c463, 0xbaf5c463, 0xbaf5c463, 0xc475a905, 0xc475a905, 0xc475a905, 0xa683bcd7, 0xa683bcd7, 0xa683bcd7, 0x59c36f00, 0x59e1bdcd, 0x59e1bdcd, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_red", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x97994d2c, 0x33b3ca94, 0x97994d2c, 0x273e977a, 0xaa4593fe, 0xaa4593fe, 0xa592c9d5, 0xa592c9d5, 0xa592c9d5, 0x367c4b2, 0x367c4b2, 0x367c4b2, 0x2e5f6fca, 0x2e5f6fca, 0x2e5f6fca, 0xaa4593fe, 0x273e977a, 0x273e977a, 0xaa4593fe, }, 20 },
|
{ "gfxterm_red", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xfb839522, 0x5fa9129a, 0xfb839522, 0x4b244f74, 0xaa4593fe, 0xaa4593fe, 0xf644f45d, 0xf644f45d, 0xf644f45d, 0x50b1f93a, 0x50b1f93a, 0x50b1f93a, 0x7d895242, 0x7d895242, 0x7d895242, 0xaa4593fe, 0x4b244f74, 0x4b244f74, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_red", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x5d2416aa, 0xe7a84972, 0x5d2416aa, 0x4d010804, 0xc9cbf769, 0xc9cbf769, 0x4e3a88a0, 0x4e3a88a0, 0x4e3a88a0, 0xb0e2496c, 0xb0e2496c, 0xb0e2496c, 0x59a8f664, 0x59a8f664, 0x59a8f664, 0xc9cbf769, 0x4d010804, 0x4d010804, 0xc9cbf769, }, 20 },
|
{ "gfxterm_red", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0xf84fee63, 0x42c3b1bb, 0xf84fee63, 0xe86af0cd, 0xc9cbf769, 0xc9cbf769, 0x93e5d13b, 0x93e5d13b, 0x93e5d13b, 0x6d3d10f7, 0x6d3d10f7, 0x6d3d10f7, 0x8477afff, 0x8477afff, 0x8477afff, 0xc9cbf769, 0xe86af0cd, 0xe86af0cd, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x1da65b43, 0xae065274, 0x1da65b43, 0x2dd7a76c, 0x9813a416, 0x9813a416, 0xf81d19f, 0xf81d19f, 0xf81d19f, 0x9e5a57ac, 0x9e5a57ac, 0x9e5a57ac, 0x87e06a7c, 0x87e06a7c, 0x87e06a7c, 0x9813a416, 0x2dd7a76c, 0x2dd7a76c, 0x9813a416, }, 20 },
|
{ "gfxterm_red", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xcbed2522, 0x784d2c15, 0xcbed2522, 0xfb9cd90d, 0x9813a416, 0x9813a416, 0x94668b23, 0x94668b23, 0x94668b23, 0x5bd0d10, 0x5bd0d10, 0x5bd0d10, 0x1c0730c0, 0x1c0730c0, 0x1c0730c0, 0x9813a416, 0xfb9cd90d, 0xfb9cd90d, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xea8a940e, 0xfa7c8f6f, 0xea8a940e, 0x448d7bfb, 0x5fcf013d, 0x5fcf013d, 0x47c22fa0, 0x47c22fa0, 0x47c22fa0, 0x95d237d6, 0x95d237d6, 0x95d237d6, 0x83a10849, 0x83a10849, 0x83a10849, 0x5fcf013d, 0x448d7bfb, 0x448d7bfb, 0x5fcf013d, }, 20 },
|
{ "gfxterm_red", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0xc1ca0a91, 0xd13c11f0, 0xc1ca0a91, 0x6fcde564, 0x5fcf013d, 0x5fcf013d, 0xb6cdf7a2, 0xb6cdf7a2, 0xb6cdf7a2, 0x64ddefd4, 0x64ddefd4, 0x64ddefd4, 0x72aed04b, 0x72aed04b, 0x72aed04b, 0x5fcf013d, 0x6fcde564, 0x6fcde564, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xc0ac44fa, 0x94d4e024, 0xc0ac44fa, 0x4ec88f20, 0xdd28f52b, 0xdd28f52b, 0x2422f542, 0x2422f542, 0x2422f542, 0x51e0ca6, 0x51e0ca6, 0x51e0ca6, 0x78a6c72a, 0x78a6c72a, 0x78a6c72a, 0xdd28f52b, 0x4ec88f20, 0x4ec88f20, 0xdd28f52b, }, 20 },
|
{ "gfxterm_red", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xca477228, 0x9e3fd6f6, 0xca477228, 0x4423b9f2, 0xdd28f52b, 0xdd28f52b, 0x1ff53543, 0x1ff53543, 0x1ff53543, 0x3ec9cca7, 0x3ec9cca7, 0x3ec9cca7, 0x4371072b, 0x4371072b, 0x4371072b, 0xdd28f52b, 0x4423b9f2, 0x4423b9f2, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_red", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x248f7655, 0x8f1ea1e8, 0x248f7655, 0xb3d7f0f5, 0x43d1f34, 0x43d1f34, 0x8c408c04, 0x8c408c04, 0x8c408c04, 0xf34a25ac, 0xf34a25ac, 0xf34a25ac, 0x6a1b202a, 0x6a1b202a, 0x6a1b202a, 0x43d1f34, 0xb3d7f0f5, 0xb3d7f0f5, 0x43d1f34, }, 20 },
|
{ "gfxterm_red", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0xfe345ca6, 0x55a58b1b, 0xfe345ca6, 0x696cda06, 0x43d1f34, 0x43d1f34, 0x72d541bf, 0x72d541bf, 0x72d541bf, 0xddfe817, 0xddfe817, 0xddfe817, 0x948eed91, 0x948eed91, 0x948eed91, 0x43d1f34, 0x696cda06, 0x696cda06, 0x43d1f34, }, 20 },
|
||||||
{ "gfxterm_high", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0xd6ba8f78, 0xb07563fb, 0xd6ba8f78, 0x6ef020b2, 0x59c36f00, 0x59c36f00, 0x7fd94135, 0x7fd94135, 0x7fd94135, 0x1592c53, 0x1592c53, 0x1592c53, 0x63af3981, 0x63af3981, 0x63af3981, 0x59c36f00, 0x6ef020b2, 0x6ef020b2, 0x59c36f00, }, 20 },
|
{ "gfxterm_high", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x59c36f00, 0x4cfdf9ab, 0x2a321528, 0x4cfdf9ab, 0xf4b75661, 0x59c36f00, 0x59c36f00, 0xd3548a15, 0xd3548a15, 0xd3548a15, 0xadd4e773, 0xadd4e773, 0xadd4e773, 0xcf22f2a1, 0xcf22f2a1, 0xcf22f2a1, 0x59c36f00, 0xf4b75661, 0xf4b75661, 0x59c36f00, }, 20 },
|
||||||
{ "gfxterm_high", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0xf5257f70, 0x510ff8c8, 0xf5257f70, 0x36a3b7ff, 0xaa4593fe, 0xaa4593fe, 0x2e88732f, 0x2e88732f, 0x2e88732f, 0x887d7e48, 0x887d7e48, 0x887d7e48, 0xa545d530, 0xa545d530, 0xa545d530, 0xaa4593fe, 0x36a3b7ff, 0x36a3b7ff, 0xaa4593fe, }, 20 },
|
{ "gfxterm_high", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0xaa4593fe, 0x287ff948, 0x8c557ef0, 0x287ff948, 0xebf931c7, 0xaa4593fe, 0xaa4593fe, 0x7d5e4ea7, 0x7d5e4ea7, 0x7d5e4ea7, 0xdbab43c0, 0xdbab43c0, 0xdbab43c0, 0xf693e8b8, 0xf693e8b8, 0xf693e8b8, 0xaa4593fe, 0xebf931c7, 0xebf931c7, 0xaa4593fe, }, 20 },
|
||||||
{ "gfxterm_high", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x9f8effb3, 0x2502a06b, 0x9f8effb3, 0xddeb038e, 0xc9cbf769, 0xc9cbf769, 0xda1c9f17, 0xda1c9f17, 0xda1c9f17, 0x24c45edb, 0x24c45edb, 0x24c45edb, 0xcd8ee1d3, 0xcd8ee1d3, 0xcd8ee1d3, 0xc9cbf769, 0xddeb038e, 0xddeb038e, 0xc9cbf769, }, 20 },
|
{ "gfxterm_high", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xc9cbf769, 0x5ecea36b, 0xe442fcb3, 0x5ecea36b, 0x1cab5f56, 0xc9cbf769, 0xc9cbf769, 0x7c3c68c, 0x7c3c68c, 0x7c3c68c, 0xf91b0740, 0xf91b0740, 0xf91b0740, 0x1051b848, 0x1051b848, 0x1051b848, 0xc9cbf769, 0x1cab5f56, 0x1cab5f56, 0xc9cbf769, }, 20 },
|
||||||
{ "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0x6aa72774, 0xd9072e43, 0x6aa72774, 0x24b4853d, 0x9813a416, 0x9813a416, 0xfb08d7cf, 0xfb08d7cf, 0xfb08d7cf, 0x6ad351fc, 0x6ad351fc, 0x6ad351fc, 0x73696c2c, 0x73696c2c, 0x73696c2c, 0x9813a416, 0x24b4853d, 0x24b4853d, 0x9813a416, }, 20 },
|
{ "gfxterm_high", 640, 480, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 640x480xrgba8888 */, (grub_uint32_t []) { 0x9813a416, 0xf6c7d73a, 0x4567de0d, 0xf6c7d73a, 0xb8d47573, 0x9813a416, 0x9813a416, 0x60ef8d73, 0x60ef8d73, 0x60ef8d73, 0xf1340b40, 0xf1340b40, 0xf1340b40, 0xe88e3690, 0xe88e3690, 0xe88e3690, 0x9813a416, 0xb8d47573, 0xb8d47573, 0x9813a416, }, 20 },
|
||||||
{ "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x936eb1d8, 0x8398aab9, 0x936eb1d8, 0x8beef, 0x5fcf013d, 0x5fcf013d, 0x9e56a9e0, 0x9e56a9e0, 0x9e56a9e0, 0x4c46b196, 0x4c46b196, 0x4c46b196, 0x5a358e09, 0x5a358e09, 0x5a358e09, 0x5fcf013d, 0x8beef, 0x8beef, 0x5fcf013d, }, 20 },
|
{ "gfxterm_high", 800, 600, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 800x600xrgba8888 */, (grub_uint32_t []) { 0x5fcf013d, 0x56e3bddb, 0x4615a6ba, 0x56e3bddb, 0xc585b2ec, 0x5fcf013d, 0x5fcf013d, 0x6f5971e2, 0x6f5971e2, 0x6f5971e2, 0xbd496994, 0xbd496994, 0xbd496994, 0xab3a560b, 0xab3a560b, 0xab3a560b, 0x5fcf013d, 0xc585b2ec, 0xc585b2ec, 0x5fcf013d, }, 20 },
|
||||||
{ "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0xdd4b9ec3, 0x89333a1d, 0xdd4b9ec3, 0x3acd5a9d, 0xdd28f52b, 0xdd28f52b, 0xe1579057, 0xe1579057, 0xe1579057, 0xc06b69b3, 0xc06b69b3, 0xc06b69b3, 0xbdd3a23f, 0xbdd3a23f, 0xbdd3a23f, 0xdd28f52b, 0x3acd5a9d, 0x3acd5a9d, 0xdd28f52b, }, 20 },
|
{ "gfxterm_high", 1024, 768, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 1024x768xrgba8888 */, (grub_uint32_t []) { 0xdd28f52b, 0x5ebfa46, 0x51935e98, 0x5ebfa46, 0xe26d3e18, 0xdd28f52b, 0xdd28f52b, 0xda805056, 0xda805056, 0xda805056, 0xfbbca9b2, 0xfbbca9b2, 0xfbbca9b2, 0x8604623e, 0x8604623e, 0x8604623e, 0xdd28f52b, 0xe26d3e18, 0xe26d3e18, 0xdd28f52b, }, 20 },
|
||||||
{ "gfxterm_high", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x89f37601, 0x2262a1bc, 0x89f37601, 0xf17b28ae, 0x43d1f34, 0x43d1f34, 0x6486f7c4, 0x6486f7c4, 0x6486f7c4, 0x1b8c5e6c, 0x1b8c5e6c, 0x1b8c5e6c, 0x82dd5bea, 0x82dd5bea, 0x82dd5bea, 0x43d1f34, 0xf17b28ae, 0xf17b28ae, 0x43d1f34, }, 20 },
|
{ "gfxterm_high", 2560, 1440, 0x1, 256, 32, 4, 16, 8, 8, 8, 0, 8, 24, 8 /* 2560x1440xrgba8888 */, (grub_uint32_t []) { 0x43d1f34, 0x4995beac, 0xe2046911, 0x4995beac, 0x311de003, 0x43d1f34, 0x43d1f34, 0x9a133a7f, 0x9a133a7f, 0x9a133a7f, 0xe51993d7, 0xe51993d7, 0xe51993d7, 0x7c489651, 0x7c489651, 0x7c489651, 0x43d1f34, 0x311de003, 0x311de003, 0x43d1f34, }, 20 },
|
||||||
{ "videotest", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x1368a483, 0x1368a483, 0x1368a483, 0x1368a483, 0x1368a483, }, 5 },
|
{ "videotest", 640, 480, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 640x480xi16 */, (grub_uint32_t []) { 0x1368a483, 0x1368a483, 0x1368a483, 0x1368a483, 0x1368a483, }, 5 },
|
||||||
{ "videotest", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0x7033079c, 0x7033079c, 0x7033079c, 0x7033079c, 0x7033079c, }, 5 },
|
{ "videotest", 800, 600, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 800x600xi16 */, (grub_uint32_t []) { 0x7033079c, 0x7033079c, 0x7033079c, 0x7033079c, 0x7033079c, }, 5 },
|
||||||
{ "videotest", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xff583fbf, 0xff583fbf, 0xff583fbf, 0xff583fbf, 0xff583fbf, }, 5 },
|
{ "videotest", 1024, 768, 0x2, 16, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0 /* 1024x768xi16 */, (grub_uint32_t []) { 0xff583fbf, 0xff583fbf, 0xff583fbf, 0xff583fbf, 0xff583fbf, }, 5 },
|
||||||
|
|||||||
@@ -26,23 +26,14 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_functional_test (grub_extcmd_context_t ctxt __attribute__ ((unused)),
|
grub_functional_test (grub_extcmd_context_t ctxt __attribute__ ((unused)),
|
||||||
int argc,
|
int argc __attribute__ ((unused)),
|
||||||
char **args)
|
char **args __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
grub_test_t test;
|
grub_test_t test;
|
||||||
int ok = 1;
|
int ok = 1;
|
||||||
int i;
|
|
||||||
|
|
||||||
FOR_LIST_ELEMENTS (test, grub_test_list)
|
FOR_LIST_ELEMENTS (test, grub_test_list)
|
||||||
{
|
{
|
||||||
if (argc != 0)
|
|
||||||
{
|
|
||||||
for (i = 0; i < argc; i++)
|
|
||||||
if (grub_strcmp(args[i], test->name) == 0)
|
|
||||||
break;
|
|
||||||
if (i == argc)
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
grub_errno = 0;
|
grub_errno = 0;
|
||||||
ok = ok && !grub_test_run (test);
|
ok = ok && !grub_test_run (test);
|
||||||
grub_errno = 0;
|
grub_errno = 0;
|
||||||
|
|||||||
@@ -25,10 +25,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
static grub_jmp_buf jmp_point;
|
static grub_jmp_buf jmp_point;
|
||||||
static int expected, ctr;
|
static int expected, ctr;
|
||||||
|
|
||||||
/* This fixes GCC7 "unintentional fallthrough" warning */
|
#pragma GCC diagnostic ignored "-Wmissing-noreturn"
|
||||||
static void jmp0 (void) __attribute__ ((noreturn));
|
|
||||||
static void jmp1 (void) __attribute__ ((noreturn));
|
|
||||||
static void jmp2 (void) __attribute__ ((noreturn));
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
jmp0 (void)
|
jmp0 (void)
|
||||||
|
|||||||
Loaded 100 of 204 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user