mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-27 09:39:22 +00:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
67a51e8e15 |
No files matched your search
+36
-49
@@ -1,4 +1,3 @@
|
|||||||
*~
|
|
||||||
00_header
|
00_header
|
||||||
10_*
|
10_*
|
||||||
20_linux_xen
|
20_linux_xen
|
||||||
@@ -7,13 +6,12 @@
|
|||||||
41_custom
|
41_custom
|
||||||
*.1
|
*.1
|
||||||
*.8
|
*.8
|
||||||
ABOUT-NLS
|
|
||||||
aclocal.m4
|
aclocal.m4
|
||||||
ahci_test
|
ahci_test
|
||||||
ascii.bitmaps
|
ascii.bitmaps
|
||||||
ascii.h
|
ascii.h
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
build-aux
|
build_env.mk
|
||||||
build-grub-gen-asciih
|
build-grub-gen-asciih
|
||||||
build-grub-gen-widthspec
|
build-grub-gen-widthspec
|
||||||
build-grub-mkfont
|
build-grub-mkfont
|
||||||
@@ -34,64 +32,48 @@ docs/*.info
|
|||||||
docs/stamp-vti
|
docs/stamp-vti
|
||||||
docs/version.texi
|
docs/version.texi
|
||||||
ehci_test
|
ehci_test
|
||||||
|
*.elf
|
||||||
example_grub_script_test
|
example_grub_script_test
|
||||||
example_scripted_test
|
example_scripted_test
|
||||||
example_unit_test
|
example_unit_test
|
||||||
*.exec
|
*.exec
|
||||||
*.exec.exe
|
|
||||||
fddboot_test
|
fddboot_test
|
||||||
genkernsyms.sh
|
genkernsyms.sh
|
||||||
gensymlist.sh
|
gensymlist.sh
|
||||||
gentrigtables
|
gentrigtables
|
||||||
gentrigtables.exe
|
|
||||||
gettext_strings_test
|
gettext_strings_test
|
||||||
/gnulib
|
|
||||||
grub-bin2h
|
grub-bin2h
|
||||||
/grub-bios-setup
|
grub-bios-setup
|
||||||
/grub-bios-setup.exe
|
|
||||||
grub_cmd_date
|
grub_cmd_date
|
||||||
grub_cmd_echo
|
grub_cmd_echo
|
||||||
grub_cmd_regexp
|
grub_cmd_regexp
|
||||||
grub_cmd_set_date
|
grub_cmd_set_date
|
||||||
grub_cmd_sleep
|
grub_cmd_sleep
|
||||||
/grub-editenv
|
grub-editenv
|
||||||
/grub-editenv.exe
|
|
||||||
grub-emu
|
grub-emu
|
||||||
grub-emu-lite
|
grub-emu-lite
|
||||||
grub-emu.exe
|
|
||||||
grub-emu-lite.exe
|
|
||||||
grub_emu_init.c
|
grub_emu_init.c
|
||||||
grub_emu_init.h
|
grub_emu_init.h
|
||||||
/grub-file
|
|
||||||
/grub-file.exe
|
|
||||||
grub-fstest
|
grub-fstest
|
||||||
grub-fstest.exe
|
|
||||||
grub_fstest_init.c
|
grub_fstest_init.c
|
||||||
grub_fstest_init.h
|
grub_fstest_init.h
|
||||||
grub_func_test
|
grub_func_test
|
||||||
grub-install
|
grub-install
|
||||||
grub-install.exe
|
|
||||||
grub-kbdcomp
|
grub-kbdcomp
|
||||||
/grub-macbless
|
|
||||||
/grub-macbless.exe
|
|
||||||
grub-macho2img
|
grub-macho2img
|
||||||
/grub-menulst2cfg
|
grub-menulst2cfg
|
||||||
/grub-menulst2cfg.exe
|
|
||||||
/grub-mk*
|
/grub-mk*
|
||||||
grub-mount
|
grub-mount
|
||||||
/grub-ofpathname
|
grub-ofpathname
|
||||||
/grub-ofpathname.exe
|
grub-pe2elf
|
||||||
grub-core/build-grub-pe2elf.exe
|
grub-probe
|
||||||
/grub-probe
|
|
||||||
/grub-probe.exe
|
|
||||||
grub_probe_init.c
|
grub_probe_init.c
|
||||||
grub_probe_init.h
|
grub_probe_init.h
|
||||||
/grub-reboot
|
grub-reboot
|
||||||
grub_script_blanklines
|
grub_script_blanklines
|
||||||
grub_script_blockarg
|
grub_script_blockarg
|
||||||
grub_script_break
|
grub_script_break
|
||||||
grub-script-check
|
grub-script-check
|
||||||
grub-script-check.exe
|
|
||||||
grub_script_check_init.c
|
grub_script_check_init.c
|
||||||
grub_script_check_init.h
|
grub_script_check_init.h
|
||||||
grub_script_comments
|
grub_script_comments
|
||||||
@@ -122,23 +104,19 @@ grub_script.tab.h
|
|||||||
grub_script.yy.c
|
grub_script.yy.c
|
||||||
grub_script.yy.h
|
grub_script.yy.h
|
||||||
grub-set-default
|
grub-set-default
|
||||||
|
grub-setup
|
||||||
grub_setup_init.c
|
grub_setup_init.c
|
||||||
grub_setup_init.h
|
grub_setup_init.h
|
||||||
grub-shell
|
grub-shell
|
||||||
grub-shell-tester
|
grub-shell-tester
|
||||||
grub-sparc64-setup
|
grub-sparc64-setup
|
||||||
grub-sparc64-setup.exe
|
|
||||||
/grub-syslinux2cfg
|
|
||||||
/grub-syslinux2cfg.exe
|
|
||||||
gzcompress_test
|
gzcompress_test
|
||||||
hddboot_test
|
hddboot_test
|
||||||
help_test
|
help_test
|
||||||
*.img
|
*.img
|
||||||
*.image
|
*.image
|
||||||
*.image.exe
|
|
||||||
include/grub/cpu
|
include/grub/cpu
|
||||||
include/grub/machine
|
include/grub/machine
|
||||||
INSTALL.grub
|
|
||||||
install-sh
|
install-sh
|
||||||
lib/libgcrypt-grub
|
lib/libgcrypt-grub
|
||||||
libgrub_a_init.c
|
libgrub_a_init.c
|
||||||
@@ -147,7 +125,6 @@ libgrub_a_init.c
|
|||||||
lzocompress_test
|
lzocompress_test
|
||||||
*.marker
|
*.marker
|
||||||
Makefile
|
Makefile
|
||||||
/m4
|
|
||||||
*.mod
|
*.mod
|
||||||
mod-*.c
|
mod-*.c
|
||||||
missing
|
missing
|
||||||
@@ -161,11 +138,7 @@ pata_test
|
|||||||
*.pp
|
*.pp
|
||||||
po/*.mo
|
po/*.mo
|
||||||
po/grub.pot
|
po/grub.pot
|
||||||
po/Makefile.in.in
|
|
||||||
po/Makevars
|
|
||||||
po/Makevars.template
|
|
||||||
po/POTFILES
|
po/POTFILES
|
||||||
po/Rules-quot
|
|
||||||
po/stamp-po
|
po/stamp-po
|
||||||
printf_test
|
printf_test
|
||||||
priority_queue_unit_test
|
priority_queue_unit_test
|
||||||
@@ -208,12 +181,28 @@ grub-core/gmodule.pl
|
|||||||
grub-core/grub.chrp
|
grub-core/grub.chrp
|
||||||
grub-core/modinfo.sh
|
grub-core/modinfo.sh
|
||||||
grub-core/*.module
|
grub-core/*.module
|
||||||
grub-core/*.module.exe
|
|
||||||
grub-core/*.pp
|
grub-core/*.pp
|
||||||
grub-core/kernel.img.bin
|
|
||||||
util/bash-completion.d/grub
|
util/bash-completion.d/grub
|
||||||
grub-core/lib/gnulib
|
grub-core/gnulib/alloca.h
|
||||||
grub-core/rs_decoder.h
|
grub-core/gnulib/arg-nonnull.h
|
||||||
|
grub-core/gnulib/c++defs.h
|
||||||
|
grub-core/gnulib/charset.alias
|
||||||
|
grub-core/gnulib/configmake.h
|
||||||
|
grub-core/gnulib/float.h
|
||||||
|
grub-core/gnulib/getopt.h
|
||||||
|
grub-core/gnulib/langinfo.h
|
||||||
|
grub-core/gnulib/ref-add.sed
|
||||||
|
grub-core/gnulib/ref-del.sed
|
||||||
|
grub-core/gnulib/stdio.h
|
||||||
|
grub-core/gnulib/stdlib.h
|
||||||
|
grub-core/gnulib/string.h
|
||||||
|
grub-core/gnulib/strings.h
|
||||||
|
grub-core/gnulib/sys
|
||||||
|
grub-core/gnulib/unistd.h
|
||||||
|
grub-core/gnulib/warn-on-use.h
|
||||||
|
grub-core/gnulib/wchar.h
|
||||||
|
grub-core/gnulib/wctype.h
|
||||||
|
grub-core/rs_decoder.S
|
||||||
widthspec.bin
|
widthspec.bin
|
||||||
widthspec.h
|
widthspec.h
|
||||||
docs/stamp-1
|
docs/stamp-1
|
||||||
@@ -227,11 +216,9 @@ include/grub/gcrypt/gcrypt.h
|
|||||||
include/grub/gcrypt/g10lib.h
|
include/grub/gcrypt/g10lib.h
|
||||||
po/POTFILES.in
|
po/POTFILES.in
|
||||||
po/POTFILES-shell.in
|
po/POTFILES-shell.in
|
||||||
/grub-glue-efi
|
grub-glue-efi
|
||||||
/grub-render-label
|
grub-render-label
|
||||||
/grub-glue-efi.exe
|
grub-core/gnulib/locale.h
|
||||||
/grub-render-label.exe
|
grub-core/gnulib/unitypes.h
|
||||||
/garbage-gen
|
grub-core/gnulib/uniwidth.h
|
||||||
/garbage-gen.exe
|
build-aux/test-driver
|
||||||
/grub-fs-tester
|
|
||||||
grub-core/build-grub-module-verifier
|
|
||||||
-108
@@ -1,108 +0,0 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0+
|
|
||||||
# Originally Copyright Roger Meier <r.meier@siemens.com>
|
|
||||||
# Adapted for GRUB by Alexander Graf <agraf@suse.de>
|
|
||||||
#
|
|
||||||
# Build GRUB on Travis CI - https://www.travis-ci.org/
|
|
||||||
#
|
|
||||||
|
|
||||||
dist: xenial
|
|
||||||
|
|
||||||
language: c
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- libsdl1.2-dev
|
|
||||||
- lzop
|
|
||||||
- ovmf
|
|
||||||
- python
|
|
||||||
- qemu-system
|
|
||||||
- unifont
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
# Include all cross toolchain paths, so we can just call them later down.
|
|
||||||
- PATH=/tmp/qemu-install/bin:/tmp/grub/bin:/usr/bin:/bin:/tmp/cross/gcc-8.1.0-nolibc/aarch64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/arm-linux-gnueabi/bin:/tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/mips64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/powerpc64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/riscv32-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/riscv64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/sparc64-linux/bin
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
# Install necessary toolchains based on $CROSS_TARGETS variable.
|
|
||||||
- mkdir /tmp/cross
|
|
||||||
# These give us binaries like /tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin/ia64-linux-gcc
|
|
||||||
- for i in $CROSS_TARGETS; do
|
|
||||||
( cd /tmp/cross; wget -t 3 -O - https://mirrors.kernel.org/pub/tools/crosstool/files/bin/x86_64/8.1.0/x86_64-gcc-8.1.0-nolibc-$i.tar.xz | tar xJ );
|
|
||||||
done
|
|
||||||
|
|
||||||
script:
|
|
||||||
# Comments must be outside the command strings below, or the Travis parser
|
|
||||||
# will get confused.
|
|
||||||
- ./autogen.sh
|
|
||||||
|
|
||||||
# Build all selected GRUB targets.
|
|
||||||
- for target in $GRUB_TARGETS; do
|
|
||||||
plat=${target#*-};
|
|
||||||
arch=${target%-*};
|
|
||||||
[ "$arch" = "arm64" ] && arch=aarch64-linux;
|
|
||||||
[ "$arch" = "arm" ] && arch=arm-linux-gnueabi;
|
|
||||||
[ "$arch" = "ia64" ] && arch=ia64-linux;
|
|
||||||
[ "$arch" = "mipsel" ] && arch=mips64-linux;
|
|
||||||
[ "$arch" = "powerpc" ] && arch=powerpc64-linux;
|
|
||||||
[ "$arch" = "riscv32" ] && arch=riscv32-linux;
|
|
||||||
[ "$arch" = "riscv64" ] && arch=riscv64-linux;
|
|
||||||
[ "$arch" = "sparc64" ] && arch=sparc64-linux;
|
|
||||||
echo "Building $target";
|
|
||||||
mkdir obj-$target;
|
|
||||||
JOBS=`getconf _NPROCESSORS_ONLN 2> /dev/null || echo 1`;
|
|
||||||
[ "$JOBS" == 1 ] || JOBS=$(($JOBS + 1));
|
|
||||||
( cd obj-$target && ../configure --target=$arch --with-platform=$plat --prefix=/tmp/grub && make -j$JOBS && make -j$JOBS install ) &> log || ( cat log; false );
|
|
||||||
done
|
|
||||||
|
|
||||||
# Our test canary.
|
|
||||||
- echo -e "insmod echo\\ninsmod reboot\\necho hello world\\nreboot" > grub.cfg
|
|
||||||
|
|
||||||
# Assemble images and possibly run them.
|
|
||||||
- for target in $GRUB_TARGETS; do grub-mkimage -c grub.cfg -p / -O $target -o grub-$target echo reboot normal; done
|
|
||||||
|
|
||||||
# Run images we know how to run.
|
|
||||||
- if [[ "$GRUB_TARGETS" == *"x86_64-efi"* ]]; then qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -m 512 -no-reboot -nographic -net nic -net user,tftp=.,bootfile=grub-x86_64-efi | tee grub.log && grep "hello world" grub.log; fi
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
# Each env setting here is a dedicated build.
|
|
||||||
- name: "x86_64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="x86_64-efi x86_64-xen"
|
|
||||||
- name: "i386"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="i386-coreboot i386-efi i386-ieee1275 i386-multiboot i386-pc i386-qemu i386-xen i386-xen_pvh"
|
|
||||||
- name: "powerpc"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="powerpc-ieee1275"
|
|
||||||
- CROSS_TARGETS="powerpc64-linux"
|
|
||||||
- name: "sparc64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="sparc64-ieee1275"
|
|
||||||
- CROSS_TARGETS="sparc64-linux"
|
|
||||||
- name: "ia64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="ia64-efi"
|
|
||||||
- CROSS_TARGETS="ia64-linux"
|
|
||||||
- name: "mips"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="mips-arc mipsel-arc mipsel-qemu_mips mips-qemu_mips"
|
|
||||||
- CROSS_TARGETS="mips64-linux"
|
|
||||||
- name: "arm"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="arm-coreboot arm-efi arm-uboot"
|
|
||||||
- CROSS_TARGETS="arm-linux-gnueabi"
|
|
||||||
- name: "arm64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="arm64-efi"
|
|
||||||
- CROSS_TARGETS="aarch64-linux"
|
|
||||||
- name: "riscv32"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="riscv32-efi"
|
|
||||||
- CROSS_TARGETS="riscv32-linux"
|
|
||||||
- name: "riscv64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="riscv64-efi"
|
|
||||||
- CROSS_TARGETS="riscv64-linux"
|
|
||||||
@@ -0,0 +1,223 @@
|
|||||||
|
1 Notes on the Free Translation Project
|
||||||
|
***************************************
|
||||||
|
|
||||||
|
Free software is going international! The Free Translation Project is
|
||||||
|
a way to get maintainers of free software, translators, and users all
|
||||||
|
together, so that free software will gradually become able to speak many
|
||||||
|
languages. A few packages already provide translations for their
|
||||||
|
messages.
|
||||||
|
|
||||||
|
If you found this `ABOUT-NLS' file inside a distribution, you may
|
||||||
|
assume that the distributed package does use GNU `gettext' internally,
|
||||||
|
itself available at your nearest GNU archive site. But you do _not_
|
||||||
|
need to install GNU `gettext' prior to configuring, installing or using
|
||||||
|
this package with messages translated.
|
||||||
|
|
||||||
|
Installers will find here some useful hints. These notes also
|
||||||
|
explain how users should proceed for getting the programs to use the
|
||||||
|
available translations. They tell how people wanting to contribute and
|
||||||
|
work on translations can contact the appropriate team.
|
||||||
|
|
||||||
|
When reporting bugs in the `intl/' directory or bugs which may be
|
||||||
|
related to internationalization, you should tell about the version of
|
||||||
|
`gettext' which is used. The information can be found in the
|
||||||
|
`intl/VERSION' file, in internationalized packages.
|
||||||
|
|
||||||
|
1.1 Quick configuration advice
|
||||||
|
==============================
|
||||||
|
|
||||||
|
If you want to exploit the full power of internationalization, you
|
||||||
|
should configure it using
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
|
||||||
|
to force usage of internationalizing routines provided within this
|
||||||
|
package, despite the existence of internationalizing capabilities in the
|
||||||
|
operating system where this package is being installed. So far, only
|
||||||
|
the `gettext' implementation in the GNU C library version 2 provides as
|
||||||
|
many features (such as locale alias, message inheritance, automatic
|
||||||
|
charset conversion or plural form handling) as the implementation here.
|
||||||
|
It is also not possible to offer this additional functionality on top
|
||||||
|
of a `catgets' implementation. Future versions of GNU `gettext' will
|
||||||
|
very likely convey even more functionality. So it might be a good idea
|
||||||
|
to change to GNU `gettext' as soon as possible.
|
||||||
|
|
||||||
|
So you need _not_ provide this option if you are using GNU libc 2 or
|
||||||
|
you have installed a recent copy of the GNU gettext package with the
|
||||||
|
included `libintl'.
|
||||||
|
|
||||||
|
1.2 INSTALL Matters
|
||||||
|
===================
|
||||||
|
|
||||||
|
Some packages are "localizable" when properly installed; the programs
|
||||||
|
they contain can be made to speak your own native language. Most such
|
||||||
|
packages use GNU `gettext'. Other packages have their own ways to
|
||||||
|
internationalization, predating GNU `gettext'.
|
||||||
|
|
||||||
|
By default, this package will be installed to allow translation of
|
||||||
|
messages. It will automatically detect whether the system already
|
||||||
|
provides the GNU `gettext' functions. If not, the included GNU
|
||||||
|
`gettext' library will be used. This library is wholly contained
|
||||||
|
within this package, usually in the `intl/' subdirectory, so prior
|
||||||
|
installation of the GNU `gettext' package is _not_ required.
|
||||||
|
Installers may use special options at configuration time for changing
|
||||||
|
the default behaviour. The commands:
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
./configure --disable-nls
|
||||||
|
|
||||||
|
will, respectively, bypass any pre-existing `gettext' to use the
|
||||||
|
internationalizing routines provided within this package, or else,
|
||||||
|
_totally_ disable translation of messages.
|
||||||
|
|
||||||
|
When you already have GNU `gettext' installed on your system and run
|
||||||
|
configure without an option for your new package, `configure' will
|
||||||
|
probably detect the previously built and installed `libintl.a' file and
|
||||||
|
will decide to use this. This might not be desirable. You should use
|
||||||
|
the more recent version of the GNU `gettext' library. I.e. if the file
|
||||||
|
`intl/VERSION' shows that the library which comes with this package is
|
||||||
|
more recent, you should use
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
|
||||||
|
to prevent auto-detection.
|
||||||
|
|
||||||
|
The configuration process will not test for the `catgets' function
|
||||||
|
and therefore it will not be used. The reason is that even an
|
||||||
|
emulation of `gettext' on top of `catgets' could not provide all the
|
||||||
|
extensions of the GNU `gettext' library.
|
||||||
|
|
||||||
|
Internationalized packages usually have many `po/LL.po' files, where
|
||||||
|
LL gives an ISO 639 two-letter code identifying the language. Unless
|
||||||
|
translations have been forbidden at `configure' time by using the
|
||||||
|
`--disable-nls' switch, all available translations are installed
|
||||||
|
together with the package. However, the environment variable `LINGUAS'
|
||||||
|
may be set, prior to configuration, to limit the installed set.
|
||||||
|
`LINGUAS' should then contain a space separated list of two-letter
|
||||||
|
codes, stating which languages are allowed.
|
||||||
|
|
||||||
|
1.3 Using This Package
|
||||||
|
======================
|
||||||
|
|
||||||
|
As a user, if your language has been installed for this package, you
|
||||||
|
only have to set the `LANG' environment variable to the appropriate
|
||||||
|
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
|
||||||
|
and `CC' is an ISO 3166 two-letter country code. For example, let's
|
||||||
|
suppose that you speak German and live in Germany. At the shell
|
||||||
|
prompt, merely execute `setenv LANG de_DE' (in `csh'),
|
||||||
|
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
|
||||||
|
This can be done from your `.login' or `.profile' file, once and for
|
||||||
|
all.
|
||||||
|
|
||||||
|
You might think that the country code specification is redundant.
|
||||||
|
But in fact, some languages have dialects in different countries. For
|
||||||
|
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
|
||||||
|
country code serves to distinguish the dialects.
|
||||||
|
|
||||||
|
The locale naming convention of `LL_CC', with `LL' denoting the
|
||||||
|
language and `CC' denoting the country, is the one use on systems based
|
||||||
|
on GNU libc. On other systems, some variations of this scheme are
|
||||||
|
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
|
||||||
|
locales supported by your system for your language by running the
|
||||||
|
command `locale -a | grep '^LL''.
|
||||||
|
|
||||||
|
Not all programs have translations for all languages. By default, an
|
||||||
|
English message is shown in place of a nonexistent translation. If you
|
||||||
|
understand other languages, you can set up a priority list of languages.
|
||||||
|
This is done through a different environment variable, called
|
||||||
|
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
|
||||||
|
for the purpose of message handling, but you still need to have `LANG'
|
||||||
|
set to the primary language; this is required by other parts of the
|
||||||
|
system libraries. For example, some Swedish users who would rather
|
||||||
|
read translations in German than English for when Swedish is not
|
||||||
|
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
|
||||||
|
|
||||||
|
Special advice for Norwegian users: The language code for Norwegian
|
||||||
|
bokma*l changed from `no' to `nb' recently (in 2003). During the
|
||||||
|
transition period, while some message catalogs for this language are
|
||||||
|
installed under `nb' and some older ones under `no', it's recommended
|
||||||
|
for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
|
||||||
|
older translations are used.
|
||||||
|
|
||||||
|
In the `LANGUAGE' environment variable, but not in the `LANG'
|
||||||
|
environment variable, `LL_CC' combinations can be abbreviated as `LL'
|
||||||
|
to denote the language's main dialect. For example, `de' is equivalent
|
||||||
|
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
|
||||||
|
(Portuguese as spoken in Portugal) in this context.
|
||||||
|
|
||||||
|
1.4 Translating Teams
|
||||||
|
=====================
|
||||||
|
|
||||||
|
For the Free Translation Project to be a success, we need interested
|
||||||
|
people who like their own language and write it well, and who are also
|
||||||
|
able to synergize with other translators speaking the same language.
|
||||||
|
Each translation team has its own mailing list. The up-to-date list of
|
||||||
|
teams can be found at the Free Translation Project's homepage,
|
||||||
|
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
|
||||||
|
area.
|
||||||
|
|
||||||
|
If you'd like to volunteer to _work_ at translating messages, you
|
||||||
|
should become a member of the translating team for your own language.
|
||||||
|
The subscribing address is _not_ the same as the list itself, it has
|
||||||
|
`-request' appended. For example, speakers of Swedish can send a
|
||||||
|
message to `sv-request@li.org', having this message body:
|
||||||
|
|
||||||
|
subscribe
|
||||||
|
|
||||||
|
Keep in mind that team members are expected to participate
|
||||||
|
_actively_ in translations, or at solving translational difficulties,
|
||||||
|
rather than merely lurking around. If your team does not exist yet and
|
||||||
|
you want to start one, or if you are unsure about what to do or how to
|
||||||
|
get started, please write to `translation@iro.umontreal.ca' to reach the
|
||||||
|
coordinator for all translator teams.
|
||||||
|
|
||||||
|
The English team is special. It works at improving and uniformizing
|
||||||
|
the terminology in use. Proven linguistic skills are praised more than
|
||||||
|
programming skills, here.
|
||||||
|
|
||||||
|
1.5 Available Packages
|
||||||
|
======================
|
||||||
|
|
||||||
|
Languages are not equally supported in all packages. The following
|
||||||
|
matrix shows the current state of internationalization, as of October
|
||||||
|
2006. The matrix shows, in regard of each package, for which languages
|
||||||
|
PO files have been submitted to translation coordination, with a
|
||||||
|
translation percentage of at least 50%.
|
||||||
|
|
||||||
|
# Matrix here is removed!
|
||||||
|
|
||||||
|
Some counters in the preceding matrix are higher than the number of
|
||||||
|
visible blocks let us expect. This is because a few extra PO files are
|
||||||
|
used for implementing regional variants of languages, or language
|
||||||
|
dialects.
|
||||||
|
|
||||||
|
For a PO file in the matrix above to be effective, the package to
|
||||||
|
which it applies should also have been internationalized and
|
||||||
|
distributed as such by its maintainer. There might be an observable
|
||||||
|
lag between the mere existence a PO file and its wide availability in a
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
If October 2006 seems to be old, you may fetch a more recent copy of
|
||||||
|
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
|
||||||
|
matrix with full percentage details can be found at
|
||||||
|
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
|
||||||
|
|
||||||
|
1.6 Using `gettext' in new packages
|
||||||
|
===================================
|
||||||
|
|
||||||
|
If you are writing a freely available program and want to
|
||||||
|
internationalize it you are welcome to use GNU `gettext' in your
|
||||||
|
package. Of course you have to respect the GNU Library General Public
|
||||||
|
License which covers the use of the GNU `gettext' library. This means
|
||||||
|
in particular that even non-free programs can use `libintl' as a shared
|
||||||
|
library, whereas only free software can use `libintl' as a static
|
||||||
|
library or use modified versions of `libintl'.
|
||||||
|
|
||||||
|
Once the sources are changed appropriately and the setup can handle
|
||||||
|
the use of `gettext' the only thing missing are the translations. The
|
||||||
|
Free Translation Project is also available for packages which are not
|
||||||
|
developed inside the GNU project. Therefore the information given above
|
||||||
|
applies also for every other Free Software Project. Contact
|
||||||
|
`translation@iro.umontreal.ca' to make the `.pot' files available to
|
||||||
|
the translation teams.
|
||||||
|
|
||||||
File diff suppressed because it is too large.
Load diff
@@ -13,23 +13,20 @@ configuring the GRUB.
|
|||||||
|
|
||||||
* GCC 4.1.3 or later
|
* GCC 4.1.3 or later
|
||||||
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)
|
|
||||||
for i386, x86_64, arm (including 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
|
||||||
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.
|
||||||
Note: clang 3.2 or later works for powerpc
|
Note: clang 3.2 or later works for powerpc
|
||||||
earlier versions not tested
|
earlier versions not tested
|
||||||
Note: clang 3.5 or later works for sparc64
|
Note: clang has no support for generating 64-bit sparc code and hence you
|
||||||
earlier versions return "error: unable to interface with target machine"
|
can't compile GRUB for sparc64 with clang
|
||||||
Note: clang has no support for ia64 and hence you can't compile GRUB
|
Note: clang has no support for ia64 and hence you can't compile GRUB
|
||||||
for ia64 with clang
|
for ia64 with clang
|
||||||
* GNU Make
|
* GNU Make
|
||||||
@@ -37,9 +34,7 @@ configuring the GRUB.
|
|||||||
* GNU gettext 0.17 or later
|
* GNU gettext 0.17 or later
|
||||||
* GNU binutils 2.9.1.0.23 or later
|
* GNU binutils 2.9.1.0.23 or later
|
||||||
* Flex 2.5.35 or later
|
* Flex 2.5.35 or later
|
||||||
* pkg-config
|
|
||||||
* Other standard GNU/Unix tools
|
* Other standard GNU/Unix tools
|
||||||
* a libc with large file support (e.g. glibc 2.1 or later)
|
|
||||||
|
|
||||||
On GNU/Linux, you also need:
|
On GNU/Linux, you also need:
|
||||||
|
|
||||||
@@ -53,15 +48,15 @@ For optional grub-emu features, you need:
|
|||||||
|
|
||||||
To build GRUB's graphical terminal (gfxterm), you need:
|
To build GRUB's graphical terminal (gfxterm), you need:
|
||||||
|
|
||||||
* FreeType 2.1.5 or later
|
* FreeType 2 or later
|
||||||
* GNU Unifont
|
* GNU Unifont
|
||||||
|
|
||||||
If you use a development snapshot or want to hack on GRUB you may
|
If you use a development snapshot or want to hack on GRUB you may
|
||||||
need the following.
|
need the following.
|
||||||
|
|
||||||
* Python 2.6 or later
|
* Python 2.6 or later
|
||||||
* Autoconf 2.63 or later
|
* Autoconf 2.60 or later
|
||||||
* Automake 1.11 or later
|
* Automake 1.10.1 or later
|
||||||
|
|
||||||
Prerequisites for make-check:
|
Prerequisites for make-check:
|
||||||
|
|
||||||
@@ -102,11 +97,7 @@ The simplest way to compile this package is:
|
|||||||
2. Skip this and following step if you use release tarball and proceed to
|
2. Skip this and following step if you use release tarball and proceed to
|
||||||
step 4. If you want translations type `./linguas.sh'.
|
step 4. If you want translations type `./linguas.sh'.
|
||||||
|
|
||||||
3. Type `./bootstrap'.
|
3. Type `./autogen.sh'.
|
||||||
|
|
||||||
* autogen.sh (called by bootstrap) uses python. By default the
|
|
||||||
invocation is "python", but it can be overridden by setting the
|
|
||||||
variable $PYTHON.
|
|
||||||
|
|
||||||
4. Type `./configure' to configure the package for your system.
|
4. Type `./configure' to configure the package for your system.
|
||||||
If you're using `csh' on an old version of System V, you might
|
If you're using `csh' on an old version of System V, you might
|
||||||
@@ -149,7 +140,7 @@ If build and host are different make check isn't available.
|
|||||||
If build and host are different man pages are not generated.
|
If build and host are different man pages are not generated.
|
||||||
|
|
||||||
As an example imagine you have a build system running on FreeBSD on sparc
|
As an example imagine you have a build system running on FreeBSD on sparc
|
||||||
which prepares packages for developers running amd64 GNU/Linux laptop and
|
which prepares packages for developpers running amd64 GNU/Linux laptop and
|
||||||
they need to make images for ARM board running U-boot. In this case:
|
they need to make images for ARM board running U-boot. In this case:
|
||||||
|
|
||||||
build=sparc64-freebsd
|
build=sparc64-freebsd
|
||||||
@@ -158,10 +149,10 @@ target=arm-uboot
|
|||||||
|
|
||||||
For this example the configure line might look like (more details below)
|
For this example the configure line might look like (more details below)
|
||||||
(some options are optional and included here for completeness but some rarely
|
(some options are optional and included here for completeness but some rarely
|
||||||
used options are omitted):
|
used options are omited):
|
||||||
|
|
||||||
./configure BUILD_CC=gcc BUILD_PKG_CONFIG=pkg-config --host=amd64-linux-gnu
|
./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu
|
||||||
CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" PKG_CONFIG=amd64-linux-gnu-pkg-config
|
CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config
|
||||||
--target=arm --with-platform=uboot TARGET_CC=arm-elf-gcc
|
--target=arm --with-platform=uboot TARGET_CC=arm-elf-gcc
|
||||||
TARGET_CFLAGS="-Os -march=armv6" TARGET_CCASFLAGS="-march=armv6"
|
TARGET_CFLAGS="-Os -march=armv6" TARGET_CCASFLAGS="-march=armv6"
|
||||||
TARGET_OBJCOPY="arm-elf-objcopy" TARGET_STRIP="arm-elf-strip"
|
TARGET_OBJCOPY="arm-elf-objcopy" TARGET_STRIP="arm-elf-strip"
|
||||||
@@ -177,16 +168,15 @@ corresponding platform are not needed for the platform in question.
|
|||||||
generate sin and cos tables.
|
generate sin and cos tables.
|
||||||
2. BUILD_CFLAGS= for C options for build.
|
2. BUILD_CFLAGS= for C options for build.
|
||||||
3. BUILD_CPPFLAGS= for C preprocessor options for build.
|
3. BUILD_CPPFLAGS= for C preprocessor options for build.
|
||||||
4. BUILD_LDFLAGS= for linker options for build.
|
4. BUILD_FREETYPE= for freetype-config for build (optional).
|
||||||
5. BUILD_PKG_CONFIG= for pkg-config for build (optional).
|
|
||||||
|
|
||||||
- For host
|
- For host
|
||||||
1. --host= to autoconf name of host.
|
1. --host= to autoconf name of host.
|
||||||
2. CC= for gcc able to compile for host
|
2. CC= for gcc able to compile for host
|
||||||
3. HOST_CFLAGS= for C options for host.
|
3. CFLAGS= for C options for host.
|
||||||
4. HOST_CPPFLAGS= for C preprocessor options for host.
|
4. CPPFLAGS= for C preprocessor options for host.
|
||||||
5. HOST_LDFLAGS= for linker options for host.
|
5. LDFLAGS= for linker options for host.
|
||||||
6. PKG_CONFIG= for pkg-config for host (optional).
|
6. FREETYPE= for freetype-config for host (optional).
|
||||||
7. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
|
7. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
|
||||||
8. Libfuse if any must be in standard linker folders (-lfuse) (optional).
|
8. Libfuse if any must be in standard linker folders (-lfuse) (optional).
|
||||||
9. Libzfs if any must be in standard linker folders (-lzfs) (optional).
|
9. Libzfs if any must be in standard linker folders (-lzfs) (optional).
|
||||||
@@ -206,9 +196,9 @@ corresponding platform are not needed for the platform in question.
|
|||||||
11. TARGET_RANLIB= for ranlib for target.
|
11. TARGET_RANLIB= for ranlib for target.
|
||||||
|
|
||||||
- Additionally for emu, for host and target.
|
- Additionally for emu, for host and target.
|
||||||
1. SDL is looked for in standard linker directories (-lSDL) (optional)
|
1. SDL is looked for in stadard linker directories (-lSDL) (optional)
|
||||||
2. libpciaccess is looked for in standard linker directories (-lpciaccess) (optional)
|
2. libpciaccess is looked for in stadard linker directories (-lpciaccess) (optional)
|
||||||
3. libusb is looked for in standard linker directories (-lusb) (optional)
|
3. libusb is looked for in stadard linker directories (-lusb) (optional)
|
||||||
|
|
||||||
- Platform-agnostic tools and data.
|
- Platform-agnostic tools and data.
|
||||||
1. make is the tool you execute after ./configure.
|
1. make is the tool you execute after ./configure.
|
||||||
|
|||||||
+84
-142
@@ -1,11 +1,7 @@
|
|||||||
AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
|
AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
|
||||||
|
|
||||||
DEPDIR = .deps-util
|
DEPDIR = .deps-util
|
||||||
SUBDIRS = grub-core/lib/gnulib .
|
SUBDIRS = grub-core/gnulib . grub-core po docs util/bash-completion.d
|
||||||
if COND_real_platform
|
|
||||||
SUBDIRS += grub-core
|
|
||||||
endif
|
|
||||||
SUBDIRS += po docs util/bash-completion.d
|
|
||||||
|
|
||||||
include $(top_srcdir)/conf/Makefile.common
|
include $(top_srcdir)/conf/Makefile.common
|
||||||
include $(top_srcdir)/conf/Makefile.extra-dist
|
include $(top_srcdir)/conf/Makefile.extra-dist
|
||||||
@@ -70,40 +66,35 @@ endif
|
|||||||
|
|
||||||
starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0
|
starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0
|
||||||
|
|
||||||
build-grub-mkfont$(BUILD_EXEEXT): util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c
|
build-grub-mkfont: util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS)
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs)
|
||||||
CLEANFILES += build-grub-mkfont$(BUILD_EXEEXT)
|
CLEANFILES += build-grub-mkfont
|
||||||
|
|
||||||
garbage-gen$(BUILD_EXEEXT): util/garbage-gen.c
|
garbage-gen: util/garbage-gen.c
|
||||||
$(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^
|
$(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $^
|
||||||
CLEANFILES += garbage-gen$(BUILD_EXEEXT)
|
CLEANFILES += garbage-gen
|
||||||
EXTRA_DIST += util/garbage-gen.c
|
EXTRA_DIST += util/garbage-gen.c
|
||||||
|
|
||||||
build-grub-gen-asciih$(BUILD_EXEEXT): util/grub-gen-asciih.c
|
build-grub-gen-asciih: util/grub-gen-asciih.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS) -Wall -Werror
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
||||||
CLEANFILES += build-grub-gen-asciih$(BUILD_EXEEXT)
|
CLEANFILES += build-grub-gen-asciih
|
||||||
|
|
||||||
build-grub-gen-widthspec$(BUILD_EXEEXT): util/grub-gen-widthspec.c
|
build-grub-gen-widthspec: util/grub-gen-widthspec.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS) -Wall -Werror
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
||||||
CLEANFILES += build-grub-gen-widthspec$(BUILD_EXEEXT)
|
CLEANFILES += build-grub-gen-widthspec
|
||||||
|
|
||||||
if COND_STARFIELD
|
if COND_STARFIELD
|
||||||
starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files)
|
starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files)
|
||||||
dejavu_10.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
dejavu_10.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -s 10 -o $@ $(DJVU_FONT_SOURCE)
|
./build-grub-mkfont -s 10 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
CLEANFILES += dejavu_10.pf2
|
dejavu_12.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
dejavu_12.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
./build-grub-mkfont -s 12 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -s 12 -o $@ $(DJVU_FONT_SOURCE)
|
dejavu_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
CLEANFILES += dejavu_12.pf2
|
./build-grub-mkfont -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
dejavu_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
./build-grub-mkfont -b -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
CLEANFILES += dejavu_14.pf2
|
dejavu_16.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
./build-grub-mkfont -s 16 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -b -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
|
||||||
CLEANFILES += dejavu_bold_14.pf2
|
|
||||||
dejavu_16.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -s 16 -o $@ $(DJVU_FONT_SOURCE)
|
|
||||||
CLEANFILES += dejavu_16.pf2
|
|
||||||
else
|
else
|
||||||
starfield_DATA =
|
starfield_DATA =
|
||||||
endif
|
endif
|
||||||
@@ -111,150 +102,141 @@ endif
|
|||||||
EXTRA_DIST += $(starfield_theme_files)
|
EXTRA_DIST += $(starfield_theme_files)
|
||||||
EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf
|
EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf
|
||||||
|
|
||||||
unicode.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
unicode.pf2: $(FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) || (rm -f $@; exit 1)
|
./build-grub-mkfont -o $@ $(FONT_SOURCE) || (rm -f $@; exit 1)
|
||||||
CLEANFILES += unicode.pf2
|
CLEANFILES += unicode.pf2
|
||||||
|
|
||||||
# Arrows and lines are needed to draw the menu, so always include them
|
# Arrows and lines are needed to draw the menu, so always include them
|
||||||
UNICODE_ARROWS=0x2190-0x2193
|
UNICODE_ARROWS=0x2190-0x2193
|
||||||
UNICODE_LINES=0x2501-0x251B
|
UNICODE_LINES=0x2501-0x251B
|
||||||
|
|
||||||
ascii.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
ascii.pf2: $(FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
||||||
CLEANFILES += ascii.pf2
|
CLEANFILES += ascii.pf2
|
||||||
|
|
||||||
euro.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
euro.pf2: $(FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
||||||
CLEANFILES += euro.pf2
|
CLEANFILES += euro.pf2
|
||||||
|
|
||||||
ascii.h: $(FONT_SOURCE) build-grub-gen-asciih$(BUILD_EXEEXT)
|
ascii.h: $(FONT_SOURCE) build-grub-gen-asciih
|
||||||
./build-grub-gen-asciih$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
./build-grub-gen-asciih $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += ascii.h
|
CLEANFILES += ascii.h
|
||||||
|
|
||||||
widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec$(BUILD_EXEEXT)
|
widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec
|
||||||
./build-grub-gen-widthspec$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
./build-grub-gen-widthspec $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += widthspec.h
|
CLEANFILES += widthspec.h
|
||||||
|
|
||||||
# Install config.h into platformdir
|
# Install config.h into platformdir
|
||||||
nodist_platform_HEADERS = config.h
|
platform_HEADERS = config.h
|
||||||
|
|
||||||
pkgdata_DATA += grub-mkconfig_lib
|
pkgdata_DATA += grub-mkconfig_lib
|
||||||
|
|
||||||
|
|
||||||
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 +295,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
|
||||||
@@ -352,41 +334,33 @@ bootcheck-ntldr: ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg grub-shell
|
|||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ntldr.bin=ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ntldr.bin=ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
|
|
||||||
if COND_i386_efi
|
if COND_i386_efi
|
||||||
# NetBSD has no support for finding ACPI on EFI
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_x86_64_efi
|
|
||||||
# NetBSD has no support for finding ACPI on EFI
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_i386_multiboot
|
|
||||||
# *BSD requires ACPI
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
if COND_i386_qemu
|
|
||||||
# *BSD requires ACPI
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
|
||||||
endif
|
|
||||||
|
|
||||||
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
|
if COND_x86_64_efi
|
||||||
# *BSD requires ACPI
|
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
|
||||||
#legacy protocol (linux16) makes early BIOS calls.
|
endif
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
|
||||||
|
if COND_i386_multiboot
|
||||||
|
# FreeBSD requires ACPI
|
||||||
|
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
|
||||||
|
endif
|
||||||
|
|
||||||
|
if COND_i386_coreboot
|
||||||
|
# Freebsd requires ACPI
|
||||||
|
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
|
||||||
|
endif
|
||||||
|
|
||||||
|
if COND_i386_qemu
|
||||||
|
# FreeBSD requires ACPI
|
||||||
|
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
|
||||||
endif
|
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.
|
||||||
#legacy protocol (linux16) makes early BIOS calls.
|
#legacy protocol makes early BIOS calls.
|
||||||
# 32-bit NetBSD crashes early on non-BIOS
|
# NetBSD crashes early on non-BIOS
|
||||||
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 bootcheck-pc-chainloader bootcheck-ntldr bootcheck-linux16-i386 bootcheck-linux16-x86_64 bootcheck-knetbsd-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 bootcheck-pc-chainloader bootcheck-ntldr bootcheck-linux16-i386 bootcheck-linux16-x86_64 bootcheck-knetbsd-i386
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -409,10 +383,12 @@ if COND_powerpc_ieee1275
|
|||||||
BOOTCHECKS = bootcheck-linux-ppc
|
BOOTCHECKS = bootcheck-linux-ppc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
|
|
||||||
.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \
|
.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \
|
||||||
bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \
|
bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \
|
||||||
bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \
|
bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \
|
||||||
bootcheck-linux-mips FORCE
|
bootcheck-linux-mips
|
||||||
|
|
||||||
# Randomly generated
|
# Randomly generated
|
||||||
SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d
|
SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d
|
||||||
@@ -422,16 +398,10 @@ BOOTCHECK_TIMEOUT=180
|
|||||||
bootcheck: $(BOOTCHECKS)
|
bootcheck: $(BOOTCHECKS)
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
FS_PAYLOAD_MODULES ?= $(shell cat grub-core/fs.lst)
|
default_payload.elf: grub-mkstandalone grub-mkimage
|
||||||
default_payload.elf: grub-mkstandalone grub-mkimage FORCE
|
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs 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' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
||||||
test -f $@ && rm $@ || true
|
|
||||||
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 $(FS_PAYLOAD_MODULES) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S
|
|
||||||
|
|
||||||
windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows
|
windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows
|
||||||
windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
||||||
test -d $(windowsdir) && rm -rf $(windowsdir) || true
|
test -d $(windowsdir) && rm -rf $(windowsdir) || true
|
||||||
@@ -450,38 +420,10 @@ windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
|||||||
for x in $(starfield_DATA); do \
|
for x in $(starfield_DATA); do \
|
||||||
cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \
|
cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \
|
||||||
done
|
done
|
||||||
for x in $(GRUB_WINDOWS_EXTRA_DIST); do \
|
|
||||||
cp -fp $$x $(windowsdir); \
|
|
||||||
done
|
|
||||||
|
|
||||||
windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip
|
windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip
|
||||||
windowszip: windowsdir
|
windowszip: windowsdir
|
||||||
test -f $(windowszip) && rm $(windowszip) || true
|
test -f $(windowszip) && rm $(windowszip) || true
|
||||||
zip -r $(windowszip) $(windowsdir)
|
zip -r $(windowszip) $(windowsdir)
|
||||||
rm -rf $(windowsdir)
|
|
||||||
|
|
||||||
EXTRA_DIST += linguas.sh
|
EXTRA_DIST += linguas.sh
|
||||||
|
|
||||||
changelog_start_date = 2015-01-23
|
|
||||||
gitlog_to_changelog = $(top_srcdir)/build-aux/gitlog-to-changelog
|
|
||||||
|
|
||||||
ChangeLog: FORCE
|
|
||||||
if test -d $(top_srcdir)/.git; then \
|
|
||||||
$(gitlog_to_changelog) --srcdir=$(top_srcdir) --since=$(changelog_start_date) > '$@.tmp'; \
|
|
||||||
rm -f '$@'; mv '$@.tmp' '$@'; \
|
|
||||||
else \
|
|
||||||
touch $@; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
EXTRA_DIST += ChangeLog ChangeLog-2015
|
|
||||||
|
|
||||||
syslinux_test: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg
|
|
||||||
|
|
||||||
# Mimic simplify_filename from grub-core/lib/syslinux_parse.c, so that we
|
|
||||||
# can predict its behaviour in tests. We have to pre-substitute this before
|
|
||||||
# calling config.status, as config.status offers no reliable way to hook in
|
|
||||||
# a command between setting ac_abs_top_srcdir and emitting output files.
|
|
||||||
tests/syslinux/ubuntu10.04_grub.cfg: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg.in
|
|
||||||
simplified_abs_top_srcdir=`echo "$(abs_top_srcdir)" | sed 's,//,/,g; s,/\./,/,g; :loop; s,/[^/][^/]*/\.\.\(/\|$$\),\1,; t loop'`; \
|
|
||||||
sed "s,@simplified_abs_top_srcdir@,$$simplified_abs_top_srcdir,g" $(srcdir)/tests/syslinux/ubuntu10.04_grub.cfg.in | $(top_builddir)/config.status --file=$@:-
|
|
||||||
CLEANFILES += tests/syslinux/ubuntu10.04_grub.cfg
|
|
||||||
+32
-143
@@ -48,13 +48,12 @@ library = {
|
|||||||
common = grub-core/partmap/gpt.c;
|
common = grub-core/partmap/gpt.c;
|
||||||
common = grub-core/partmap/msdos.c;
|
common = grub-core/partmap/msdos.c;
|
||||||
common = grub-core/fs/proc.c;
|
common = grub-core/fs/proc.c;
|
||||||
common = grub-core/fs/archelp.c;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
library = {
|
library = {
|
||||||
name = libgrubmods.a;
|
name = libgrubmods.a;
|
||||||
cflags = '-fno-builtin -Wno-undef';
|
cflags = '-fno-builtin -Wno-undef';
|
||||||
cppflags = '-I$(srcdir)/grub-core/lib/minilzo -I$(srcdir)/grub-core/lib/xzembed -I$(srcdir)/grub-core/lib/zstd -DMINILZO_HAVE_CONFIG_H';
|
cppflags = '-I$(top_srcdir)/grub-core/lib/minilzo -I$(srcdir)/grub-core/lib/xzembed -DMINILZO_HAVE_CONFIG_H';
|
||||||
|
|
||||||
common_nodist = grub_script.tab.c;
|
common_nodist = grub_script.tab.c;
|
||||||
common_nodist = grub_script.yy.c;
|
common_nodist = grub_script.yy.c;
|
||||||
@@ -63,7 +62,6 @@ library = {
|
|||||||
common_nodist = grub_script.tab.h;
|
common_nodist = grub_script.tab.h;
|
||||||
|
|
||||||
common = grub-core/commands/blocklist.c;
|
common = grub-core/commands/blocklist.c;
|
||||||
common = grub-core/commands/macbless.c;
|
|
||||||
common = grub-core/commands/xnu_uuid.c;
|
common = grub-core/commands/xnu_uuid.c;
|
||||||
common = grub-core/commands/testload.c;
|
common = grub-core/commands/testload.c;
|
||||||
common = grub-core/commands/ls.c;
|
common = grub-core/commands/ls.c;
|
||||||
@@ -92,6 +90,7 @@ library = {
|
|||||||
common = grub-core/fs/bfs.c;
|
common = grub-core/fs/bfs.c;
|
||||||
common = grub-core/fs/btrfs.c;
|
common = grub-core/fs/btrfs.c;
|
||||||
common = grub-core/fs/cbfs.c;
|
common = grub-core/fs/cbfs.c;
|
||||||
|
common = grub-core/fs/archelp.c;
|
||||||
common = grub-core/fs/cpio.c;
|
common = grub-core/fs/cpio.c;
|
||||||
common = grub-core/fs/cpio_be.c;
|
common = grub-core/fs/cpio_be.c;
|
||||||
common = grub-core/fs/odc.c;
|
common = grub-core/fs/odc.c;
|
||||||
@@ -99,7 +98,6 @@ library = {
|
|||||||
common = grub-core/fs/ext2.c;
|
common = grub-core/fs/ext2.c;
|
||||||
common = grub-core/fs/fat.c;
|
common = grub-core/fs/fat.c;
|
||||||
common = grub-core/fs/exfat.c;
|
common = grub-core/fs/exfat.c;
|
||||||
common = grub-core/fs/f2fs.c;
|
|
||||||
common = grub-core/fs/fshelp.c;
|
common = grub-core/fs/fshelp.c;
|
||||||
common = grub-core/fs/hfs.c;
|
common = grub-core/fs/hfs.c;
|
||||||
common = grub-core/fs/hfsplus.c;
|
common = grub-core/fs/hfsplus.c;
|
||||||
@@ -156,7 +154,6 @@ library = {
|
|||||||
common = grub-core/script/script.c;
|
common = grub-core/script/script.c;
|
||||||
common = grub-core/script/argv.c;
|
common = grub-core/script/argv.c;
|
||||||
common = grub-core/io/gzio.c;
|
common = grub-core/io/gzio.c;
|
||||||
common = grub-core/io/xzio.c;
|
|
||||||
common = grub-core/io/lzopio.c;
|
common = grub-core/io/lzopio.c;
|
||||||
common = grub-core/kern/ia64/dl_helper.c;
|
common = grub-core/kern/ia64/dl_helper.c;
|
||||||
common = grub-core/kern/arm/dl_helper.c;
|
common = grub-core/kern/arm/dl_helper.c;
|
||||||
@@ -165,15 +162,6 @@ library = {
|
|||||||
common = grub-core/lib/xzembed/xz_dec_bcj.c;
|
common = grub-core/lib/xzembed/xz_dec_bcj.c;
|
||||||
common = grub-core/lib/xzembed/xz_dec_lzma2.c;
|
common = grub-core/lib/xzembed/xz_dec_lzma2.c;
|
||||||
common = grub-core/lib/xzembed/xz_dec_stream.c;
|
common = grub-core/lib/xzembed/xz_dec_stream.c;
|
||||||
common = grub-core/lib/zstd/debug.c;
|
|
||||||
common = grub-core/lib/zstd/entropy_common.c;
|
|
||||||
common = grub-core/lib/zstd/error_private.c;
|
|
||||||
common = grub-core/lib/zstd/fse_decompress.c;
|
|
||||||
common = grub-core/lib/zstd/huf_decompress.c;
|
|
||||||
common = grub-core/lib/zstd/module.c;
|
|
||||||
common = grub-core/lib/zstd/xxhash.c;
|
|
||||||
common = grub-core/lib/zstd/zstd_common.c;
|
|
||||||
common = grub-core/lib/zstd/zstd_decompress.c;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
@@ -182,8 +170,6 @@ program = {
|
|||||||
|
|
||||||
common = util/grub-mkimage.c;
|
common = util/grub-mkimage.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/resolve.c;
|
common = util/resolve.c;
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
@@ -198,7 +184,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBLZMA)';
|
ldadd = '$(LIBLZMA)';
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
cppflags = '-DGRUB_PKGLIBDIR=\"$(pkglibdir)\"';
|
cppflags = '-DGRUB_PKGLIBDIR=\"$(pkglibdir)\"';
|
||||||
@@ -215,7 +201,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -230,7 +216,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -245,7 +231,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -261,7 +247,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -284,7 +270,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -300,7 +286,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) -lfuse';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) -lfuse';
|
||||||
condition = COND_GRUB_MOUNT;
|
condition = COND_GRUB_MOUNT;
|
||||||
};
|
};
|
||||||
@@ -312,14 +298,14 @@ program = {
|
|||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
|
|
||||||
cflags = '$(FREETYPE_CFLAGS)';
|
cflags = '$(freetype_cflags)';
|
||||||
cppflags = '-DGRUB_MKFONT=1';
|
cppflags = '-DGRUB_MKFONT=1';
|
||||||
|
|
||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(FREETYPE_LIBS)';
|
ldadd = '$(freetype_libs)';
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
condition = COND_GRUB_MKFONT;
|
condition = COND_GRUB_MKFONT;
|
||||||
};
|
};
|
||||||
@@ -337,7 +323,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -359,7 +345,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
cppflags = '-DGRUB_SETUP_FUNC=grub_util_bios_setup';
|
cppflags = '-DGRUB_SETUP_FUNC=grub_util_bios_setup';
|
||||||
};
|
};
|
||||||
@@ -379,7 +365,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
cppflags = '-DGRUB_SETUP_FUNC=grub_util_sparc_setup';
|
cppflags = '-DGRUB_SETUP_FUNC=grub_util_sparc_setup';
|
||||||
};
|
};
|
||||||
@@ -395,8 +381,8 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
@@ -410,25 +396,10 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
|
||||||
name = grub-macbless;
|
|
||||||
installdir = sbin;
|
|
||||||
mansection = 8;
|
|
||||||
common = util/grub-macbless.c;
|
|
||||||
common = grub-core/osdep/init.c;
|
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
|
||||||
|
|
||||||
ldadd = libgrubmods.a;
|
|
||||||
ldadd = libgrubgcry.a;
|
|
||||||
ldadd = libgrubkern.a;
|
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
|
||||||
};
|
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
common = util/grub.d/README;
|
common = util/grub.d/README;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
@@ -522,8 +493,6 @@ program = {
|
|||||||
common = util/render-label.c;
|
common = util/render-label.c;
|
||||||
common = util/glue-efi.c;
|
common = util/glue-efi.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -552,7 +521,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
|
|
||||||
condition = COND_HAVE_EXEC;
|
condition = COND_HAVE_EXEC;
|
||||||
@@ -566,8 +535,6 @@ program = {
|
|||||||
common = util/render-label.c;
|
common = util/render-label.c;
|
||||||
common = util/glue-efi.c;
|
common = util/glue-efi.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -577,7 +544,6 @@ program = {
|
|||||||
common = grub-core/osdep/platform.c;
|
common = grub-core/osdep/platform.c;
|
||||||
common = grub-core/osdep/platform_unix.c;
|
common = grub-core/osdep/platform_unix.c;
|
||||||
extra_dist = grub-core/osdep/linux/platform.c;
|
extra_dist = grub-core/osdep/linux/platform.c;
|
||||||
extra_dist = grub-core/osdep/windows/platform.c;
|
|
||||||
extra_dist = grub-core/osdep/basic/platform.c;
|
extra_dist = grub-core/osdep/basic/platform.c;
|
||||||
extra_dist = grub-core/osdep/basic/no_platform.c;
|
extra_dist = grub-core/osdep/basic/no_platform.c;
|
||||||
extra_dist = grub-core/osdep/unix/platform.c;
|
extra_dist = grub-core/osdep/unix/platform.c;
|
||||||
@@ -599,7 +565,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -611,8 +577,6 @@ program = {
|
|||||||
common = util/grub-install.c;
|
common = util/grub-install.c;
|
||||||
common = util/probe.c;
|
common = util/probe.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -626,11 +590,9 @@ program = {
|
|||||||
common = grub-core/osdep/blocklist.c;
|
common = grub-core/osdep/blocklist.c;
|
||||||
common = grub-core/osdep/config.c;
|
common = grub-core/osdep/config.c;
|
||||||
common = util/config.c;
|
common = util/config.c;
|
||||||
common = util/render-label.c;
|
|
||||||
common = grub-core/kern/emu/hostfs.c;
|
|
||||||
common = grub-core/disk/host.c;
|
|
||||||
|
|
||||||
common = util/resolve.c;
|
common = util/resolve.c;
|
||||||
|
enable = noemu;
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
|
|
||||||
@@ -638,7 +600,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -650,8 +612,6 @@ program = {
|
|||||||
common = util/grub-mknetdir.c;
|
common = util/grub-mknetdir.c;
|
||||||
|
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -674,7 +634,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -727,7 +687,7 @@ script = {
|
|||||||
name = grub-fs-tester;
|
name = grub-fs-tester;
|
||||||
common = tests/util/grub-fs-tester.in;
|
common = tests/util/grub-fs-tester.in;
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
dependencies = 'garbage-gen$(BUILD_EXEEXT)';
|
dependencies = garbage-gen;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
@@ -784,12 +744,6 @@ script = {
|
|||||||
common = tests/xfs_test.in;
|
common = tests/xfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
|
||||||
testcase;
|
|
||||||
name = f2fs_test;
|
|
||||||
common = tests/f2fs_test.in;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase;
|
testcase;
|
||||||
name = nilfs2_test;
|
name = nilfs2_test;
|
||||||
@@ -1175,24 +1129,6 @@ script = {
|
|||||||
common = tests/grub_cmd_tr.in;
|
common = tests/grub_cmd_tr.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
|
||||||
testcase;
|
|
||||||
name = file_filter_test;
|
|
||||||
common = tests/file_filter_test.in;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
|
||||||
testcase;
|
|
||||||
name = grub_cmd_test;
|
|
||||||
common = tests/grub_cmd_test.in;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
|
||||||
testcase;
|
|
||||||
name = syslinux_test;
|
|
||||||
common = tests/syslinux_test.in;
|
|
||||||
};
|
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
testcase;
|
testcase;
|
||||||
name = example_unit_test;
|
name = example_unit_test;
|
||||||
@@ -1204,7 +1140,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1219,7 +1155,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1234,7 +1170,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1250,7 +1186,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
condition = COND_HAVE_CXX;
|
condition = COND_HAVE_CXX;
|
||||||
};
|
};
|
||||||
@@ -1266,7 +1202,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1281,25 +1217,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
|
||||||
};
|
|
||||||
|
|
||||||
program = {
|
|
||||||
name = grub-syslinux2cfg;
|
|
||||||
mansection = 1;
|
|
||||||
common = util/grub-syslinux2cfg.c;
|
|
||||||
common = grub-core/lib/syslinux_parse.c;
|
|
||||||
common = grub-core/lib/getline.c;
|
|
||||||
common = grub-core/osdep/init.c;
|
|
||||||
common = grub-core/kern/emu/hostfs.c;
|
|
||||||
common = grub-core/disk/host.c;
|
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
|
||||||
|
|
||||||
ldadd = libgrubmods.a;
|
|
||||||
ldadd = libgrubgcry.a;
|
|
||||||
ldadd = libgrubkern.a;
|
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1315,7 +1233,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1333,35 +1251,6 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
|
||||||
};
|
|
||||||
|
|
||||||
program = {
|
|
||||||
name = grub-file;
|
|
||||||
mansection = 1;
|
|
||||||
|
|
||||||
common = util/grub-file.c;
|
|
||||||
common = util/render-label.c;
|
|
||||||
common = grub-core/commands/file.c;
|
|
||||||
common = grub-core/commands/file32.c;
|
|
||||||
common = grub-core/commands/file64.c;
|
|
||||||
common = grub-core/loader/i386/xen_file.c;
|
|
||||||
common = grub-core/loader/i386/xen_file32.c;
|
|
||||||
common = grub-core/loader/i386/xen_file64.c;
|
|
||||||
common = grub-core/io/offset.c;
|
|
||||||
common = grub-core/kern/elf.c;
|
|
||||||
common = grub-core/loader/lzss.c;
|
|
||||||
common = grub-core/loader/macho.c;
|
|
||||||
common = grub-core/loader/macho32.c;
|
|
||||||
common = grub-core/loader/macho64.c;
|
|
||||||
common = grub-core/kern/emu/hostfs.c;
|
|
||||||
common = grub-core/disk/host.c;
|
|
||||||
common = grub-core/osdep/init.c;
|
|
||||||
|
|
||||||
ldadd = libgrubmods.a;
|
|
||||||
ldadd = libgrubgcry.a;
|
|
||||||
ldadd = libgrubkern.a;
|
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
@@ -1,200 +1,3 @@
|
|||||||
New in 2.04:
|
|
||||||
|
|
||||||
* GCC 8 and 9 support.
|
|
||||||
* Gnulib integration overhaul.
|
|
||||||
* RISC-V support.
|
|
||||||
* Xen PVH support.
|
|
||||||
* Native UEFI secure boot support.
|
|
||||||
* UEFI TPM driver.
|
|
||||||
* New IEEE 1275 obdisk driver.
|
|
||||||
* Btrfs RAID 5 and RIAD 6 support.
|
|
||||||
* PARTUUID support.
|
|
||||||
* VLAN support.
|
|
||||||
* Native DHCP support.
|
|
||||||
* Many ARM and ARM64 fixes.
|
|
||||||
* Many SPARC fixes.
|
|
||||||
* Many IEEE 1275 fixes.
|
|
||||||
* ...and tons of other fixes and cleanups...
|
|
||||||
|
|
||||||
New in 2.02:
|
|
||||||
|
|
||||||
* New/improved filesystem and disk support:
|
|
||||||
* Big-endian UFS1.
|
|
||||||
* Experimental 64-bit ext2 support.
|
|
||||||
* Various fixes for non-512-byte sector devices.
|
|
||||||
* New `proc' filesystem framework, used by LUKS disks.
|
|
||||||
* Fix DM-RAID partition handling.
|
|
||||||
* New `nativedisk' command to switch from firmware to native disk drivers.
|
|
||||||
* Compressed HFS+.
|
|
||||||
* DragonFly BSD labels.
|
|
||||||
* CBFS (coreboot).
|
|
||||||
* Handle partitioned LVM properly.
|
|
||||||
* Use LVM UUIDs whenever possible.
|
|
||||||
* GPT PReP.
|
|
||||||
* New `progress' module that shows progress information while reading
|
|
||||||
files.
|
|
||||||
* ZFS features support.
|
|
||||||
* ZFS LZ4 support.
|
|
||||||
* XFS V5 format support.
|
|
||||||
* LVM RAID1 support.
|
|
||||||
|
|
||||||
* New/improved terminal and video support:
|
|
||||||
* Monochrome text (matching `hercules' in GRUB Legacy).
|
|
||||||
* Morse code output using system speaker.
|
|
||||||
* `spkmodem' output (simple data protocol using system speaker).
|
|
||||||
* Handle Japanese special keys.
|
|
||||||
* coreboot framebuffer.
|
|
||||||
* Serial on ARC.
|
|
||||||
* Native vt100 handling for grub-emu, replacing the use of the curses
|
|
||||||
library.
|
|
||||||
* New gfxmenu options for terminal window positioning, theme background
|
|
||||||
image handling, and scrollbar padding, plus `item_pixmap_style' and
|
|
||||||
`highlight_overlay'.
|
|
||||||
* Support several more image types (paletted and greyscale).
|
|
||||||
|
|
||||||
* Boot protocol improvements:
|
|
||||||
* Support Apple FAT binaries on non-Apple platforms.
|
|
||||||
* Improve FreeDOS direct loading support compatibility.
|
|
||||||
* Enable `linux16' on all x86 platforms, not just BIOS.
|
|
||||||
* New TrueCrypt ISO loader.
|
|
||||||
* multiboot2 boot-services EFI specification.
|
|
||||||
* multiboot2 EFI memory map specification.
|
|
||||||
* multiboot2 full-file specfication.
|
|
||||||
|
|
||||||
* New/improved network support:
|
|
||||||
* New variables `net_default_*' containing properties of the default
|
|
||||||
interface.
|
|
||||||
* Autoload `http' and `tftp' modules if necessary.
|
|
||||||
* Improve TFTP robustness.
|
|
||||||
* Parse `nd' disk names in GRUB Legacy configuration files.
|
|
||||||
* 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:
|
|
||||||
* CBFS support both in on-disk images (loopback) and flash.
|
|
||||||
* Ability to launch another payload from flash or disk
|
|
||||||
* Coreboot framebuffer
|
|
||||||
* CBMEMC support (both logging and inspecting logs)
|
|
||||||
* Command for inspecting coreboot timestamps (`coreboot_boottime').
|
|
||||||
* Command for inspecting coreboot tables (`lscoreboot').
|
|
||||||
* New target default_payload.elf.
|
|
||||||
* Increased maximal core size.
|
|
||||||
* Prefer pmtimer for TSC calibration.
|
|
||||||
|
|
||||||
* New/improved platform support:
|
|
||||||
* New `efifwsetup' and `lsefi' commands on EFI platforms.
|
|
||||||
* New `cmosdump' and `cmosset' commands on platforms with CMOS support.
|
|
||||||
* New command `pcidump' for PCI platforms.
|
|
||||||
* Improve opcode parsing in ACPI halt implementation.
|
|
||||||
* Use the TSC as a possible time source on i386-ieee1275.
|
|
||||||
* Merge PowerPC grub-mkrescue implementation with the common one.
|
|
||||||
* Support grub-mkrescue on i386-ieee1275, sparc64, bootinfo machines such
|
|
||||||
as pSeries, and mips-arc.
|
|
||||||
* Make grub-mkrescue better support Apple Intel Macs on CD.
|
|
||||||
* Enable GRUB Legacy configuration file parsing on EFI.
|
|
||||||
* Support halt for Loongson 2E.
|
|
||||||
* ARM U-Boot and EFI ports.
|
|
||||||
* Reorganise platform-dependent code in utilities to avoid #ifdef mess.
|
|
||||||
* AROS and Haiku support for userspace utilities.
|
|
||||||
* Xen PV port.
|
|
||||||
* Fix EFI stack alignment.
|
|
||||||
* ARM64 EFI port.
|
|
||||||
* On Linux, read partition start offsets from sysfs if possible.
|
|
||||||
* New grub-macbless utility, and better integration with Mac firmware in
|
|
||||||
grub-install.
|
|
||||||
* Support Yeeloong 3A.
|
|
||||||
* Add `cpuid --pae' option to detect Physical Address Extension on x86.
|
|
||||||
* Support for USB debug dongles.
|
|
||||||
* Support for *-emu on all platforms (previously only i386/x86_64 worked).
|
|
||||||
* Support *-emu on Windows.
|
|
||||||
* New platform `none' which builds only user level utilities. This is now
|
|
||||||
default if target CPU is not supported.
|
|
||||||
* Support for booting little-endian Linux kernel on powerpc.
|
|
||||||
* Support network boot with Oracle sun4v vnet devices.
|
|
||||||
* Added SAS disks to the IEEE 1275 Open Firmware device list.
|
|
||||||
* Try multiple methods for TSC (timestamp counter) calibration - PIT, pmtimer,
|
|
||||||
EFI Stall. If everything fails, use hardcoded frequency 800MHz.
|
|
||||||
* Support Hyper-V Gen2 platforms which lack PIT for TSC calibration.
|
|
||||||
* Map UEFI Persistent Memory to E820 persistent memory.
|
|
||||||
* New Xen loader on ARM64.
|
|
||||||
* Respect alignment requirement for block device IO buffers on EFI.
|
|
||||||
|
|
||||||
* Security:
|
|
||||||
* Add optional facility to enforce that all files read by the core image
|
|
||||||
from disk have a valid detached digital signature.
|
|
||||||
|
|
||||||
* Performance:
|
|
||||||
* Avoid costly division operations in many places.
|
|
||||||
* New boot time analysis framework (`./configure --enable-boot-time').
|
|
||||||
* Initialise USB ports in parallel.
|
|
||||||
* New `testspeed' command to test file read speed.
|
|
||||||
* Speed-up gfxterm by storing intermediate results in more compact format.
|
|
||||||
* Lazy LVM/mdraid scan.
|
|
||||||
* Disk hints.
|
|
||||||
|
|
||||||
* Scripting:
|
|
||||||
* New `eval' and `tr' commands.
|
|
||||||
* grub-script-check fails on scripts containing no commands.
|
|
||||||
|
|
||||||
* Installation and other utility improvements:
|
|
||||||
* Add option to compress files on installation or image creation.
|
|
||||||
* Using grub-reboot no longer requires setting `GRUB_DEFAULT=saved'.
|
|
||||||
* Support probing EFI System Partition (requires os-prober >= 1.58).
|
|
||||||
* Fix inconsistent use of `GRUB_CRYPTODISK_ENABLE' and
|
|
||||||
`GRUB_ENABLE_CRYPTODISK'; the latter is now used consistently.
|
|
||||||
* grub-mount handles symbolic links to directories.
|
|
||||||
* Support disabling submenus with `GRUB_DISABLE_SUBMENU' configuration key
|
|
||||||
for grub-mkconfig.
|
|
||||||
* grub-install, grub-mknetdir, grub-mkrescue, and grub-mkstandalone
|
|
||||||
rewritten in C. They should now work in supported non-Unix-like
|
|
||||||
environments.
|
|
||||||
* Native mingw support.
|
|
||||||
* Ability to install on EFI under windows.
|
|
||||||
* Reorganise timeout handling using new `timeout_style' environment
|
|
||||||
variable and `GRUB_TIMEOUT_STYLE' configuration key for grub-mkconfig.
|
|
||||||
Menu hotkeys pressed during a hidden timeout now boot the corresponding
|
|
||||||
menu entry immediately.
|
|
||||||
* New `file' command and grub-file utility to check file types.
|
|
||||||
* 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:
|
|
||||||
* Remove all uses of nested functions; GRUB no longer requires an
|
|
||||||
executable stack.
|
|
||||||
* Fix documentation build with Texinfo >= 5.1.
|
|
||||||
* More robust and documented cross-compiling support.
|
|
||||||
* Partial clang support for some platforms (experimental).
|
|
||||||
* Partial mingw64 x86_64-efi compile support (highly experimental).
|
|
||||||
* Partial mingw32 i386-* (other than already present i386-pc)
|
|
||||||
compile support (highly experimental).
|
|
||||||
* Support for grub-mkpasswd on Windows.
|
|
||||||
* Eliminate the use of AutoGen. This allowed some performance
|
|
||||||
improvements to the build system.
|
|
||||||
* Remove variable length arrays.
|
|
||||||
* OpenBSD compile and tools support (NetBSD and FreeBSD were already supported).
|
|
||||||
* Fix build with FreeType >= 2.5.1.
|
|
||||||
* Make gentpl.py compatible with Python 3. It now requires at least
|
|
||||||
Python 2.6.
|
|
||||||
* modinfo.sh contains build information now.
|
|
||||||
* Added many new tests to improve robustness.
|
|
||||||
* Target is built without libgcc now. Necessary builtins are reimplemented
|
|
||||||
directly. This removes requirement for target-specific runtime on build
|
|
||||||
system.
|
|
||||||
* emu libusb support removed (was broken and unmaintained).
|
|
||||||
* powerpc64le compile support.
|
|
||||||
* 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.
|
|
||||||
|
|
||||||
New in 2.00:
|
New in 2.00:
|
||||||
|
|
||||||
* Appearance:
|
* Appearance:
|
||||||
@@ -221,6 +24,7 @@ New in 2.00:
|
|||||||
* IEEE1275 serial.
|
* IEEE1275 serial.
|
||||||
* EFI serial.
|
* EFI serial.
|
||||||
* Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS.
|
* Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS.
|
||||||
|
* VBE on coreboot support.
|
||||||
|
|
||||||
* New filesystem, filters and disks formats:
|
* New filesystem, filters and disks formats:
|
||||||
* DVH partition map.
|
* DVH partition map.
|
||||||
@@ -244,7 +48,7 @@ New in 2.00:
|
|||||||
* multidevice, mirrored and raidz(2,3) ZFS support.
|
* multidevice, mirrored and raidz(2,3) ZFS support.
|
||||||
* RAID LVM (internal RAIDing) support.
|
* RAID LVM (internal RAIDing) support.
|
||||||
* ZFS crypto support.
|
* ZFS crypto support.
|
||||||
* ZLE, LZ4 and GZIP on ZFS support.
|
* ZLE and GZIP on ZFS support.
|
||||||
* Support ZFS up to 33.
|
* Support ZFS up to 33.
|
||||||
* HFS string is now treated like mac-roman and not UTF-8
|
* HFS string is now treated like mac-roman and not UTF-8
|
||||||
* HFS mtime support.
|
* HFS mtime support.
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ The URL is <http://www.gnu.org/software/grub/grub.html>.
|
|||||||
|
|
||||||
More extensive documentation is available in the Info manual,
|
More extensive documentation is available in the Info manual,
|
||||||
accessible using 'info grub' after building and installing GRUB 2.
|
accessible using 'info grub' after building and installing GRUB 2.
|
||||||
|
Please look at the GRUB Wiki <http://grub.enbug.org> for testing
|
||||||
|
procedures.
|
||||||
|
|
||||||
There are a number of important user-visible differences from the
|
There are a number of important user-visible differences from the
|
||||||
first version of GRUB, now known as GRUB Legacy. For a summary, please
|
first version of GRUB, now known as GRUB Legacy. For a summary, please
|
||||||
|
|||||||
@@ -7,3 +7,7 @@ glance. So write to <grub-devel@gnu.org> first.
|
|||||||
For bug tracking, refer to:
|
For bug tracking, refer to:
|
||||||
|
|
||||||
http://savannah.gnu.org/bugs/?group=grub
|
http://savannah.gnu.org/bugs/?group=grub
|
||||||
|
|
||||||
|
Our wiki also lists some areas that need work:
|
||||||
|
|
||||||
|
http://grub.enbug.org/
|
||||||
+83
-84
@@ -19,8 +19,6 @@ AC_DEFUN([grub_PROG_TARGET_CC],
|
|||||||
AC_CACHE_VAL(grub_cv_prog_target_cc,
|
AC_CACHE_VAL(grub_cv_prog_target_cc,
|
||||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||||
asm (".globl start; start:");
|
asm (".globl start; start:");
|
||||||
void __main (void);
|
|
||||||
void __main (void) {}
|
|
||||||
int main (void);
|
int main (void);
|
||||||
]], [[]])],
|
]], [[]])],
|
||||||
[grub_cv_prog_target_cc=yes],
|
[grub_cv_prog_target_cc=yes],
|
||||||
@@ -93,7 +91,7 @@ else
|
|||||||
fi
|
fi
|
||||||
grub_cv_prog_objcopy_absolute=yes
|
grub_cv_prog_objcopy_absolute=yes
|
||||||
for link_addr in 0x2000 0x8000 0x7C00; do
|
for link_addr in 0x2000 0x8000 0x7C00; do
|
||||||
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CFLAGS} ${TARGET_LDFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},$link_addr conftest.o -o conftest.exec]); then :
|
if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},$link_addr conftest.o -o conftest.exec]); then :
|
||||||
else
|
else
|
||||||
AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
|
AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
|
||||||
fi
|
fi
|
||||||
@@ -210,18 +208,87 @@ fi
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Mass confusion!
|
||||||
|
dnl Older versions of GAS interpret `.code16' to mean ``generate 32-bit
|
||||||
|
dnl instructions, but implicitly insert addr32 and data32 bytes so
|
||||||
|
dnl that the code works in real mode''.
|
||||||
|
dnl
|
||||||
|
dnl Newer versions of GAS interpret `.code16' to mean ``generate 16-bit
|
||||||
|
dnl instructions,'' which seems right. This requires the programmer
|
||||||
|
dnl to explicitly insert addr32 and data32 instructions when they want
|
||||||
|
dnl them.
|
||||||
|
dnl
|
||||||
|
dnl We only support the newer versions, because the old versions cause
|
||||||
|
dnl major pain, by requiring manual assembly to get 16-bit instructions into
|
||||||
|
dnl asm files.
|
||||||
|
AC_DEFUN([grub_I386_ASM_ADDR32],
|
||||||
|
[AC_REQUIRE([AC_PROG_CC])
|
||||||
|
AC_REQUIRE([grub_I386_ASM_PREFIX_REQUIREMENT])
|
||||||
|
AC_MSG_CHECKING([for .code16 addr32 assembler support])
|
||||||
|
AC_CACHE_VAL(grub_cv_i386_asm_addr32,
|
||||||
|
[cat > conftest.s.in <<\EOF
|
||||||
|
.code16
|
||||||
|
l1: @ADDR32@ movb %al, l1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
||||||
|
sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s
|
||||||
|
else
|
||||||
|
sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s
|
||||||
|
fi
|
||||||
|
|
||||||
|
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
||||||
|
grub_cv_i386_asm_addr32=yes
|
||||||
|
else
|
||||||
|
grub_cv_i386_asm_addr32=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f conftest*])
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$grub_cv_i386_asm_addr32])])
|
||||||
|
|
||||||
|
dnl Later versions of GAS requires that addr32 and data32 prefixes
|
||||||
|
dnl appear in the same lines as the instructions they modify, while
|
||||||
|
dnl earlier versions requires that they appear in separate lines.
|
||||||
|
AC_DEFUN([grub_I386_ASM_PREFIX_REQUIREMENT],
|
||||||
|
[AC_REQUIRE([AC_PROG_CC])
|
||||||
|
AC_MSG_CHECKING(dnl
|
||||||
|
[whether addr32 must be in the same line as the instruction])
|
||||||
|
AC_CACHE_VAL(grub_cv_i386_asm_prefix_requirement,
|
||||||
|
[cat > conftest.s <<\EOF
|
||||||
|
.code16
|
||||||
|
l1: addr32 movb %al, l1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
||||||
|
grub_cv_i386_asm_prefix_requirement=yes
|
||||||
|
else
|
||||||
|
grub_cv_i386_asm_prefix_requirement=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f conftest*])
|
||||||
|
|
||||||
|
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
||||||
|
grub_tmp_addr32="addr32"
|
||||||
|
grub_tmp_data32="data32"
|
||||||
|
else
|
||||||
|
grub_tmp_addr32="addr32;"
|
||||||
|
grub_tmp_data32="data32;"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ADDR32=$grub_tmp_addr32
|
||||||
|
DATA32=$grub_tmp_data32
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$grub_cv_i386_asm_prefix_requirement])])
|
||||||
|
|
||||||
|
|
||||||
dnl Check what symbol is defined as a bss start symbol.
|
dnl Check what symbol is defined as a bss start symbol.
|
||||||
dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
|
dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
|
||||||
AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
|
AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
|
||||||
[AC_REQUIRE([AC_PROG_CC])
|
[AC_REQUIRE([AC_PROG_CC])
|
||||||
AC_MSG_CHECKING([if __bss_start is defined by the compiler])
|
AC_MSG_CHECKING([if __bss_start is defined by the compiler])
|
||||||
AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol,
|
AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol,
|
||||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
|
||||||
asm (".globl start; start:");
|
|
||||||
void __main (void);
|
|
||||||
void __main (void) {}
|
|
||||||
int main (void);
|
|
||||||
]],
|
|
||||||
[[asm ("incl __bss_start")]])],
|
[[asm ("incl __bss_start")]])],
|
||||||
[grub_cv_check_uscore_uscore_bss_start_symbol=yes],
|
[grub_cv_check_uscore_uscore_bss_start_symbol=yes],
|
||||||
[grub_cv_check_uscore_uscore_bss_start_symbol=no])])
|
[grub_cv_check_uscore_uscore_bss_start_symbol=no])])
|
||||||
@@ -230,11 +297,7 @@ AC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol])
|
|||||||
|
|
||||||
AC_MSG_CHECKING([if edata is defined by the compiler])
|
AC_MSG_CHECKING([if edata is defined by the compiler])
|
||||||
AC_CACHE_VAL(grub_cv_check_edata_symbol,
|
AC_CACHE_VAL(grub_cv_check_edata_symbol,
|
||||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
|
||||||
asm (".globl start; start:");
|
|
||||||
void __main (void);
|
|
||||||
void __main (void) {}
|
|
||||||
int main (void);]],
|
|
||||||
[[asm ("incl edata")]])],
|
[[asm ("incl edata")]])],
|
||||||
[grub_cv_check_edata_symbol=yes],
|
[grub_cv_check_edata_symbol=yes],
|
||||||
[grub_cv_check_edata_symbol=no])])
|
[grub_cv_check_edata_symbol=no])])
|
||||||
@@ -243,11 +306,7 @@ AC_MSG_RESULT([$grub_cv_check_edata_symbol])
|
|||||||
|
|
||||||
AC_MSG_CHECKING([if _edata is defined by the compiler])
|
AC_MSG_CHECKING([if _edata is defined by the compiler])
|
||||||
AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol,
|
AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol,
|
||||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
|
||||||
asm (".globl start; start:");
|
|
||||||
void __main (void);
|
|
||||||
void __main (void) {}
|
|
||||||
int main (void);]],
|
|
||||||
[[asm ("incl _edata")]])],
|
[[asm ("incl _edata")]])],
|
||||||
[grub_cv_check_uscore_edata_symbol=yes],
|
[grub_cv_check_uscore_edata_symbol=yes],
|
||||||
[grub_cv_check_uscore_edata_symbol=no])])
|
[grub_cv_check_uscore_edata_symbol=no])])
|
||||||
@@ -271,11 +330,7 @@ AC_DEFUN([grub_CHECK_END_SYMBOL],
|
|||||||
[AC_REQUIRE([AC_PROG_CC])
|
[AC_REQUIRE([AC_PROG_CC])
|
||||||
AC_MSG_CHECKING([if end is defined by the compiler])
|
AC_MSG_CHECKING([if end is defined by the compiler])
|
||||||
AC_CACHE_VAL(grub_cv_check_end_symbol,
|
AC_CACHE_VAL(grub_cv_check_end_symbol,
|
||||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
|
||||||
asm (".globl start; start:");
|
|
||||||
void __main (void);
|
|
||||||
void __main (void) {}
|
|
||||||
int main (void);]],
|
|
||||||
[[asm ("incl end")]])],
|
[[asm ("incl end")]])],
|
||||||
[grub_cv_check_end_symbol=yes],
|
[grub_cv_check_end_symbol=yes],
|
||||||
[grub_cv_check_end_symbol=no])])
|
[grub_cv_check_end_symbol=no])])
|
||||||
@@ -284,11 +339,7 @@ AC_MSG_RESULT([$grub_cv_check_end_symbol])
|
|||||||
|
|
||||||
AC_MSG_CHECKING([if _end is defined by the compiler])
|
AC_MSG_CHECKING([if _end is defined by the compiler])
|
||||||
AC_CACHE_VAL(grub_cv_check_uscore_end_symbol,
|
AC_CACHE_VAL(grub_cv_check_uscore_end_symbol,
|
||||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
|
||||||
asm (".globl start; start:");
|
|
||||||
void __main (void);
|
|
||||||
void __main (void) {}
|
|
||||||
int main (void);]],
|
|
||||||
[[asm ("incl _end")]])],
|
[[asm ("incl _end")]])],
|
||||||
[grub_cv_check_uscore_end_symbol=yes],
|
[grub_cv_check_uscore_end_symbol=yes],
|
||||||
[grub_cv_check_uscore_end_symbol=no])])
|
[grub_cv_check_uscore_end_symbol=no])])
|
||||||
@@ -344,15 +395,15 @@ else
|
|||||||
[fi]
|
[fi]
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl Check if ln -s can handle directories properly (mingw).
|
dnl Check if ln can handle directories properly (mingw).
|
||||||
AC_DEFUN([grub_CHECK_LINK_DIR],[
|
AC_DEFUN([grub_CHECK_LINK_DIR],[
|
||||||
AC_MSG_CHECKING([whether ln -s can handle directories properly])
|
AC_MSG_CHECKING([whether ln can handle directories properly])
|
||||||
[mkdir testdir 2>/dev/null
|
[mkdir testdir 2>/dev/null
|
||||||
case $srcdir in
|
case $srcdir in
|
||||||
[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;;
|
[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;;
|
||||||
*) reldir=../$srcdir/include/grub/util ;;
|
*) reldir=../$srcdir/include/grub/util ;;
|
||||||
esac
|
esac
|
||||||
if ln -s $reldir testdir/util 2>/dev/null && rm -f testdir/util 2>/dev/null ; then]
|
if ln -s $reldir testdir/util 2>/dev/null ; then]
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
[link_dir=yes
|
[link_dir=yes
|
||||||
else
|
else
|
||||||
@@ -390,58 +441,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,20 +0,0 @@
|
|||||||
/* on arm clang doesn't support .arch directive */
|
|
||||||
|
|
||||||
.text
|
|
||||||
.syntax unified
|
|
||||||
|
|
||||||
#if !defined (__thumb2__)
|
|
||||||
.arch armv7a
|
|
||||||
.arm
|
|
||||||
#else
|
|
||||||
.arch armv7
|
|
||||||
.thumb
|
|
||||||
#endif
|
|
||||||
mcr p15, 0, r11, c7, c14, 2
|
|
||||||
|
|
||||||
/* clang restricts access to dsb/isb despite .arch */
|
|
||||||
dsb
|
|
||||||
isb
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
/* on x86 old clang doesn't support .code16
|
|
||||||
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
|
||||||
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
|
|
||||||
jmp far
|
|
||||||
.org 4
|
|
||||||
jmp nearer
|
|
||||||
.org 6
|
|
||||||
movl nearer, %ebx
|
|
||||||
.org 11
|
|
||||||
.space 100
|
|
||||||
nearer:
|
|
||||||
.space 200
|
|
||||||
far:
|
|
||||||
.byte 0
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
/* on x86 old clang doesn't support .code16 */
|
|
||||||
|
|
||||||
.code16
|
|
||||||
movb %al, %bl
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
/* on mips clang doesn't support privilegied instructions, doubleword store/load
|
|
||||||
and crashes with hand-written assembly
|
|
||||||
*/
|
|
||||||
|
|
||||||
.set mips3
|
|
||||||
sync
|
|
||||||
ld $t2, 0($t1)
|
|
||||||
|
|
||||||
a:
|
|
||||||
addiu $t1, $s0, (b - a)
|
|
||||||
b: nop
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
/* clang <= 3.3 doesn't handle most of ppc assembly, not even inline assembly
|
|
||||||
used by gcrypt */
|
|
||||||
/* Cache invalidation loop is a fair test. */
|
|
||||||
li 5, 0
|
|
||||||
1: icbi 5, 3
|
|
||||||
addi 5, 5, 32
|
|
||||||
cmpw 5, 4
|
|
||||||
blt 1b
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
.text
|
|
||||||
1:
|
|
||||||
/* A small list of examples of what clang doesn't support. */
|
|
||||||
clr %o0
|
|
||||||
lduw [%o4 + 4], %o4
|
|
||||||
and %o6, ~0xff, %o6
|
|
||||||
stw %o5, [%o3]
|
|
||||||
bne,pt %icc, 1b
|
|
||||||
nop
|
|
||||||
+9
-28
@@ -2,25 +2,17 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ ! -e grub-core/lib/gnulib/stdlib.in.h ]; then
|
|
||||||
echo "Gnulib not yet bootstrapped; run ./bootstrap instead." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set ${PYTHON} to plain 'python' if not set already
|
|
||||||
: ${PYTHON:=python}
|
|
||||||
|
|
||||||
export LC_COLLATE=C
|
export LC_COLLATE=C
|
||||||
unset LC_ALL
|
unset LC_ALL
|
||||||
|
|
||||||
find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' ! -ipath './gnulib/*' ! -iname './grub-core/lib/gnulib/*' |sort > po/POTFILES.in
|
find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' |sort > po/POTFILES.in
|
||||||
find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in
|
find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in
|
||||||
|
|
||||||
echo "Importing unicode..."
|
echo "Importing unicode..."
|
||||||
${PYTHON} util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
|
python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
|
||||||
|
|
||||||
echo "Importing libgcrypt..."
|
echo "Importing libgcrypt..."
|
||||||
${PYTHON} util/import_gcry.py grub-core/lib/libgcrypt/ grub-core
|
python util/import_gcry.py grub-core/lib/libgcrypt/ grub-core
|
||||||
sed -n -f util/import_gcrypth.sed < grub-core/lib/libgcrypt/src/gcrypt.h.in > include/grub/gcrypt/gcrypt.h
|
sed -n -f util/import_gcrypth.sed < grub-core/lib/libgcrypt/src/gcrypt.h.in > include/grub/gcrypt/gcrypt.h
|
||||||
if [ -f include/grub/gcrypt/g10lib.h ]; then
|
if [ -f include/grub/gcrypt/g10lib.h ]; then
|
||||||
rm include/grub/gcrypt/g10lib.h
|
rm include/grub/gcrypt/g10lib.h
|
||||||
@@ -28,14 +20,14 @@ fi
|
|||||||
if [ -d grub-core/lib/libgcrypt-grub/mpi/generic ]; then
|
if [ -d grub-core/lib/libgcrypt-grub/mpi/generic ]; then
|
||||||
rm -rf grub-core/lib/libgcrypt-grub/mpi/generic
|
rm -rf grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
fi
|
fi
|
||||||
cp grub-core/lib/libgcrypt-grub/src/g10lib.h include/grub/gcrypt/g10lib.h
|
ln -s ../../../grub-core/lib/libgcrypt-grub/src/g10lib.h include/grub/gcrypt/g10lib.h
|
||||||
cp -R grub-core/lib/libgcrypt/mpi/generic grub-core/lib/libgcrypt-grub/mpi/generic
|
cp -R grub-core/lib/libgcrypt/mpi/generic grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
|
|
||||||
for x in mpi-asm-defs.h mpih-add1.c mpih-sub1.c mpih-mul1.c mpih-mul2.c mpih-mul3.c mpih-lshift.c mpih-rshift.c; do
|
for x in mpi-asm-defs.h mpih-add1.c mpih-sub1.c mpih-mul1.c mpih-mul2.c mpih-mul3.c mpih-lshift.c mpih-rshift.c; do
|
||||||
if [ -h grub-core/lib/libgcrypt-grub/mpi/"$x" ] || [ -f grub-core/lib/libgcrypt-grub/mpi/"$x" ]; then
|
if [ -h grub-core/lib/libgcrypt-grub/mpi/"$x" ] || [ -f grub-core/lib/libgcrypt-grub/mpi/"$x" ]; then
|
||||||
rm grub-core/lib/libgcrypt-grub/mpi/"$x"
|
rm grub-core/lib/libgcrypt-grub/mpi/"$x"
|
||||||
fi
|
fi
|
||||||
cp grub-core/lib/libgcrypt-grub/mpi/generic/"$x" grub-core/lib/libgcrypt-grub/mpi/"$x"
|
ln -s generic/"$x" grub-core/lib/libgcrypt-grub/mpi/"$x"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Generating Automake input..."
|
echo "Generating Automake input..."
|
||||||
@@ -62,8 +54,8 @@ for extra in contrib/*/Makefile.core.def; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
${PYTHON} gentpl.py $UTIL_DEFS > Makefile.util.am
|
python gentpl.py $UTIL_DEFS > Makefile.util.am
|
||||||
${PYTHON} gentpl.py $CORE_DEFS > grub-core/Makefile.core.am
|
python gentpl.py $CORE_DEFS > grub-core/Makefile.core.am
|
||||||
|
|
||||||
for extra in contrib/*/Makefile.common; do
|
for extra in contrib/*/Makefile.common; do
|
||||||
if test -e "$extra"; then
|
if test -e "$extra"; then
|
||||||
@@ -87,17 +79,6 @@ done
|
|||||||
echo "Saving timestamps..."
|
echo "Saving timestamps..."
|
||||||
echo timestamp > stamp-h.in
|
echo timestamp > stamp-h.in
|
||||||
|
|
||||||
if [ -z "$FROM_BOOTSTRAP" ]; then
|
echo "Running autoreconf..."
|
||||||
# Unaided autoreconf is likely to install older versions of many files
|
autoreconf -vi
|
||||||
# than the ones provided by Gnulib, but in most cases this won't matter
|
|
||||||
# very much. This mode is provided so that you can run ./autogen.sh to
|
|
||||||
# regenerate the GRUB build system in an unpacked release tarball (perhaps
|
|
||||||
# after patching it), even on systems that don't have access to
|
|
||||||
# gnulib.git.
|
|
||||||
echo "Running autoreconf..."
|
|
||||||
cp -a INSTALL INSTALL.grub
|
|
||||||
autoreconf -vif
|
|
||||||
mv INSTALL.grub INSTALL
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
@@ -1,91 +0,0 @@
|
|||||||
# Bootstrap configuration.
|
|
||||||
|
|
||||||
# Copyright (C) 2006-2019 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
# This program 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.
|
|
||||||
|
|
||||||
# This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
|
|
||||||
GNULIB_REVISION=d271f868a8df9bbec29049d01e056481b7a1a263
|
|
||||||
|
|
||||||
# gnulib modules used by this package.
|
|
||||||
# mbswidth is used by gnulib-fix-width.diff's changes to argp rather than
|
|
||||||
# directly.
|
|
||||||
gnulib_modules="
|
|
||||||
argp
|
|
||||||
error
|
|
||||||
fnmatch
|
|
||||||
getdelim
|
|
||||||
getline
|
|
||||||
gettext-h
|
|
||||||
gitlog-to-changelog
|
|
||||||
mbswidth
|
|
||||||
progname
|
|
||||||
realloc-gnu
|
|
||||||
regex
|
|
||||||
save-cwd
|
|
||||||
"
|
|
||||||
|
|
||||||
gnulib_tool_option_extras="\
|
|
||||||
--no-conditional-dependencies \
|
|
||||||
--no-vc-files \
|
|
||||||
"
|
|
||||||
|
|
||||||
gnulib_name=libgnu
|
|
||||||
source_base=grub-core/lib/gnulib
|
|
||||||
gnulib_extra_files="
|
|
||||||
build-aux/install-sh
|
|
||||||
build-aux/mdate-sh
|
|
||||||
build-aux/texinfo.tex
|
|
||||||
build-aux/depcomp
|
|
||||||
build-aux/config.guess
|
|
||||||
build-aux/config.sub
|
|
||||||
"
|
|
||||||
|
|
||||||
# Additional xgettext options to use. Use "\\\newline" to break lines.
|
|
||||||
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
|
|
||||||
--from-code=UTF-8\\\
|
|
||||||
'
|
|
||||||
|
|
||||||
checkout_only_file=
|
|
||||||
copy=true
|
|
||||||
vc_ignore=
|
|
||||||
|
|
||||||
SKIP_PO=t
|
|
||||||
|
|
||||||
# Build prerequisites
|
|
||||||
buildreq="\
|
|
||||||
autoconf 2.63
|
|
||||||
automake 1.11
|
|
||||||
gettext 0.18.3
|
|
||||||
git 1.5.5
|
|
||||||
tar -
|
|
||||||
"
|
|
||||||
|
|
||||||
# bootstrap doesn't give us a reasonable way to stop Automake from
|
|
||||||
# overwriting this, so we just copy our version aside and put it back later.
|
|
||||||
cp -a INSTALL INSTALL.grub
|
|
||||||
|
|
||||||
bootstrap_post_import_hook () {
|
|
||||||
set -e
|
|
||||||
for patchname in fix-null-deref fix-width no-abort; do
|
|
||||||
patch -d grub-core/lib/gnulib -p2 \
|
|
||||||
< "grub-core/lib/gnulib-patches/$patchname.patch"
|
|
||||||
done
|
|
||||||
FROM_BOOTSTRAP=1 ./autogen.sh
|
|
||||||
set +e # bootstrap expects this
|
|
||||||
}
|
|
||||||
|
|
||||||
bootstrap_epilogue () {
|
|
||||||
mv INSTALL.grub INSTALL
|
|
||||||
}
|
|
||||||
Executable
+690
@@ -0,0 +1,690 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Output a system dependent set of variables, describing how to set the
|
||||||
|
# run time search path of shared libraries in an executable.
|
||||||
|
#
|
||||||
|
# Copyright 1996-2013 Free Software Foundation, Inc.
|
||||||
|
# Taken from GNU libtool, 2001
|
||||||
|
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation gives
|
||||||
|
# unlimited permission to copy and/or distribute it, with or without
|
||||||
|
# modifications, as long as this notice is preserved.
|
||||||
|
#
|
||||||
|
# The first argument passed to this file is the canonical host specification,
|
||||||
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||||
|
# or
|
||||||
|
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||||
|
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
|
||||||
|
# should be set by the caller.
|
||||||
|
#
|
||||||
|
# The set of defined variables is at the end of this script.
|
||||||
|
|
||||||
|
# Known limitations:
|
||||||
|
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
|
||||||
|
# than 256 bytes, otherwise the compiler driver will dump core. The only
|
||||||
|
# known workaround is to choose shorter directory names for the build
|
||||||
|
# directory and/or the installation directory.
|
||||||
|
|
||||||
|
# All known linkers require a '.a' archive for static linking (except MSVC,
|
||||||
|
# which needs '.lib').
|
||||||
|
libext=a
|
||||||
|
shrext=.so
|
||||||
|
|
||||||
|
host="$1"
|
||||||
|
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
||||||
|
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
||||||
|
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's _LT_CC_BASENAME.
|
||||||
|
|
||||||
|
for cc_temp in $CC""; do
|
||||||
|
case $cc_temp in
|
||||||
|
compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
|
||||||
|
distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
|
||||||
|
\-*) ;;
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's _LT_COMPILER_PIC.
|
||||||
|
|
||||||
|
wl=
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
wl='-Wl,'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
mingw* | cygwin* | pw32* | os2* | cegcc*)
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||||
|
case $cc_basename in
|
||||||
|
ecc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
icc* | ifort*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
lf95*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
nagfor*)
|
||||||
|
wl='-Wl,-Wl,,'
|
||||||
|
;;
|
||||||
|
pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
ccc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
xl* | bgxl* | bgf* | mpixl*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
como)
|
||||||
|
wl='-lopt='
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case `$CC -V 2>&1 | sed 5q` in
|
||||||
|
*Sun\ F* | *Sun*Fortran*)
|
||||||
|
wl=
|
||||||
|
;;
|
||||||
|
*Sun\ C*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
;;
|
||||||
|
*nto* | *qnx*)
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
rdos*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
case $cc_basename in
|
||||||
|
f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
|
||||||
|
wl='-Qoption ld '
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
wl='-Qoption ld '
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.2uw2* | sysv4.3*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
;;
|
||||||
|
sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
unicos*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
|
||||||
|
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
hardcode_direct=no
|
||||||
|
hardcode_minus_L=no
|
||||||
|
|
||||||
|
case "$host_os" in
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
if test "$GCC" != yes; then
|
||||||
|
with_gnu_ld=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
interix*)
|
||||||
|
# we just hope/assume this is gcc and not c89 (= MSVC++)
|
||||||
|
with_gnu_ld=yes
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
with_gnu_ld=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ld_shlibs=yes
|
||||||
|
if test "$with_gnu_ld" = yes; then
|
||||||
|
# Set some defaults for GNU ld with shared library support. These
|
||||||
|
# are reset later if shared libraries are not supported. Putting them
|
||||||
|
# here allows them to be overridden if necessary.
|
||||||
|
# Unlike libtool, we use -rpath here, not --rpath, since the documented
|
||||||
|
# option of GNU ld is called -rpath, not --rpath.
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
case "$host_os" in
|
||||||
|
aix[3-9]*)
|
||||||
|
# On AIX/PPC, the GNU linker is very broken
|
||||||
|
if test "$host_cpu" != ia64; then
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
case "$host_cpu" in
|
||||||
|
powerpc)
|
||||||
|
;;
|
||||||
|
m68k)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
haiku*)
|
||||||
|
;;
|
||||||
|
interix[3-9]*)
|
||||||
|
hardcode_direct=no
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
;;
|
||||||
|
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
|
||||||
|
ld_shlibs=no
|
||||||
|
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
|
||||||
|
case `$LD -v 2>&1` in
|
||||||
|
*\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if test "$ld_shlibs" = no; then
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
# Note: this linker hardcodes the directories in LIBPATH if there
|
||||||
|
# are no directories specified by -L.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
# Neither direct hardcoding nor static linking is supported with a
|
||||||
|
# broken collect2.
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
aix[4-9]*)
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
# On IA64, the linker does run time linking by default, so we don't
|
||||||
|
# have to do anything special.
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
else
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
# Test if we are trying to use run time linking or normal
|
||||||
|
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
|
||||||
|
# need to do runtime linking.
|
||||||
|
case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
|
||||||
|
for ld_flag in $LDFLAGS; do
|
||||||
|
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
|
||||||
|
aix_use_runtimelinking=yes
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_separator=':'
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
case $host_os in aix4.[012]|aix4.[012].*)
|
||||||
|
collect2name=`${CC} -print-prog-name=collect2`
|
||||||
|
if test -f "$collect2name" && \
|
||||||
|
strings "$collect2name" | grep resolve_lib_name >/dev/null
|
||||||
|
then
|
||||||
|
# We have reworked collect2
|
||||||
|
:
|
||||||
|
else
|
||||||
|
# We have old collect2
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
# Begin _LT_AC_SYS_LIBPATH_AIX.
|
||||||
|
echo 'int main () { return 0; }' > conftest.c
|
||||||
|
${CC} ${LDFLAGS} conftest.c -o conftest
|
||||||
|
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||||
|
}'`
|
||||||
|
if test -z "$aix_libpath"; then
|
||||||
|
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||||
|
}'`
|
||||||
|
fi
|
||||||
|
if test -z "$aix_libpath"; then
|
||||||
|
aix_libpath="/usr/lib:/lib"
|
||||||
|
fi
|
||||||
|
rm -f conftest.c conftest
|
||||||
|
# End _LT_AC_SYS_LIBPATH_AIX.
|
||||||
|
if test "$aix_use_runtimelinking" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||||
|
else
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
|
||||||
|
else
|
||||||
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
case "$host_cpu" in
|
||||||
|
powerpc)
|
||||||
|
;;
|
||||||
|
m68k)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
bsdi[45]*)
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec=' '
|
||||||
|
libext=lib
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
hardcode_direct=no
|
||||||
|
if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
freebsd2.2*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
freebsd2*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
freebsd* | dragonfly*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
hpux9*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
hpux10*)
|
||||||
|
if test "$with_gnu_ld" = no; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
hpux11*)
|
||||||
|
if test "$with_gnu_ld" = no; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
case $host_cpu in
|
||||||
|
hppa*64*|ia64*)
|
||||||
|
hardcode_direct=no
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
*nto* | *qnx*)
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
if test -f /usr/libexec/ld.so; then
|
||||||
|
hardcode_direct=yes
|
||||||
|
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
osf3*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
osf4* | osf5*)
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
else
|
||||||
|
# Both cc and cxx compiler support -rpath directly
|
||||||
|
hardcode_libdir_flag_spec='-rpath $libdir'
|
||||||
|
fi
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
sysv4)
|
||||||
|
case $host_vendor in
|
||||||
|
sni)
|
||||||
|
hardcode_direct=yes # is this really true???
|
||||||
|
;;
|
||||||
|
siemens)
|
||||||
|
hardcode_direct=no
|
||||||
|
;;
|
||||||
|
motorola)
|
||||||
|
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
sysv4.3*)
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
if test -d /usr/nec; then
|
||||||
|
ld_shlibs=yes
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
|
||||||
|
;;
|
||||||
|
sysv5* | sco3.2v5* | sco5v6*)
|
||||||
|
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
|
||||||
|
hardcode_libdir_separator=':'
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check dynamic linker characteristics
|
||||||
|
# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
|
||||||
|
# Unlike libtool.m4, here we don't care about _all_ names of the library, but
|
||||||
|
# only about the one the linker finds when passed -lNAME. This is the last
|
||||||
|
# element of library_names_spec in libtool.m4, or possibly two of them if the
|
||||||
|
# linker has special search rules.
|
||||||
|
library_names_spec= # the last element of library_names_spec in libtool.m4
|
||||||
|
libname_spec='lib$name'
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
library_names_spec='$libname.a'
|
||||||
|
;;
|
||||||
|
aix[4-9]*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
case "$host_cpu" in
|
||||||
|
powerpc*)
|
||||||
|
library_names_spec='$libname$shrext' ;;
|
||||||
|
m68k)
|
||||||
|
library_names_spec='$libname.a' ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
bsdi[45]*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
shrext=.dll
|
||||||
|
library_names_spec='$libname.dll.a $libname.lib'
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
shrext=.dylib
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
freebsd* | dragonfly*)
|
||||||
|
case "$host_os" in
|
||||||
|
freebsd[123]*)
|
||||||
|
library_names_spec='$libname$shrext$versuffix' ;;
|
||||||
|
*)
|
||||||
|
library_names_spec='$libname$shrext' ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
gnu*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
haiku*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
case $host_cpu in
|
||||||
|
ia64*)
|
||||||
|
shrext=.so
|
||||||
|
;;
|
||||||
|
hppa*64*)
|
||||||
|
shrext=.sl
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
shrext=.sl
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
interix[3-9]*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
case "$host_os" in
|
||||||
|
irix5* | nonstopux*)
|
||||||
|
libsuff= shlibsuff=
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case $LD in
|
||||||
|
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
|
||||||
|
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
|
||||||
|
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
|
||||||
|
*) libsuff= shlibsuff= ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
linux*oldld* | linux*aout* | linux*coff*)
|
||||||
|
;;
|
||||||
|
linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
knetbsd*-gnu)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
*nto* | *qnx*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
library_names_spec='$libname$shrext$versuffix'
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
libname_spec='$name'
|
||||||
|
shrext=.dll
|
||||||
|
library_names_spec='$libname.a'
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
rdos*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
library_names_spec='$libname$shrext$versuffix'
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.3*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
tpf*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
|
||||||
|
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
|
||||||
|
escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
|
||||||
|
LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
|
||||||
|
|
||||||
|
# How to pass a linker flag through the compiler.
|
||||||
|
wl="$escaped_wl"
|
||||||
|
|
||||||
|
# Static library suffix (normally "a").
|
||||||
|
libext="$libext"
|
||||||
|
|
||||||
|
# Shared library suffix (normally "so").
|
||||||
|
shlibext="$shlibext"
|
||||||
|
|
||||||
|
# Format of library name prefix.
|
||||||
|
libname_spec="$escaped_libname_spec"
|
||||||
|
|
||||||
|
# Library names that the linker finds when passed -lNAME.
|
||||||
|
library_names_spec="$escaped_library_names_spec"
|
||||||
|
|
||||||
|
# Flag to hardcode \$libdir into a binary during linking.
|
||||||
|
# This must work even if \$libdir does not exist.
|
||||||
|
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
|
||||||
|
|
||||||
|
# Whether we need a single -rpath flag with a separated argument.
|
||||||
|
hardcode_libdir_separator="$hardcode_libdir_separator"
|
||||||
|
|
||||||
|
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_direct="$hardcode_direct"
|
||||||
|
|
||||||
|
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_minus_L="$hardcode_minus_L"
|
||||||
|
|
||||||
|
EOF
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#if !defined _Noreturn && __STDC_VERSION__ < 201112
|
||||||
|
# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
|
||||||
|
|| 0x5110 <= __SUNPRO_C)
|
||||||
|
# define _Noreturn __attribute__ ((__noreturn__))
|
||||||
|
# elif 1200 <= _MSC_VER
|
||||||
|
# define _Noreturn __declspec (noreturn)
|
||||||
|
# else
|
||||||
|
# define _Noreturn
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
/* A C macro for declaring that specific arguments must not be NULL.
|
||||||
|
Copyright (C) 2009-2013 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program 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.
|
||||||
|
|
||||||
|
This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
|
||||||
|
that the values passed as arguments n, ..., m must be non-NULL pointers.
|
||||||
|
n = 1 stands for the first argument, n = 2 for the second argument etc. */
|
||||||
|
#ifndef _GL_ARG_NONNULL
|
||||||
|
# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
|
||||||
|
# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
|
||||||
|
# else
|
||||||
|
# define _GL_ARG_NONNULL(params)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,271 @@
|
|||||||
|
/* C++ compatible function declaration macros.
|
||||||
|
Copyright (C) 2010-2013 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program 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.
|
||||||
|
|
||||||
|
This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef _GL_CXXDEFS_H
|
||||||
|
#define _GL_CXXDEFS_H
|
||||||
|
|
||||||
|
/* The three most frequent use cases of these macros are:
|
||||||
|
|
||||||
|
* For providing a substitute for a function that is missing on some
|
||||||
|
platforms, but is declared and works fine on the platforms on which
|
||||||
|
it exists:
|
||||||
|
|
||||||
|
#if @GNULIB_FOO@
|
||||||
|
# if !@HAVE_FOO@
|
||||||
|
_GL_FUNCDECL_SYS (foo, ...);
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIAS_SYS (foo, ...);
|
||||||
|
_GL_CXXALIASWARN (foo);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
|
||||||
|
* For providing a replacement for a function that exists on all platforms,
|
||||||
|
but is broken/insufficient and needs to be replaced on some platforms:
|
||||||
|
|
||||||
|
#if @GNULIB_FOO@
|
||||||
|
# if @REPLACE_FOO@
|
||||||
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
|
# undef foo
|
||||||
|
# define foo rpl_foo
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (foo, ...);
|
||||||
|
_GL_CXXALIAS_RPL (foo, ...);
|
||||||
|
# else
|
||||||
|
_GL_CXXALIAS_SYS (foo, ...);
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIASWARN (foo);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
|
||||||
|
* For providing a replacement for a function that exists on some platforms
|
||||||
|
but is broken/insufficient and needs to be replaced on some of them and
|
||||||
|
is additionally either missing or undeclared on some other platforms:
|
||||||
|
|
||||||
|
#if @GNULIB_FOO@
|
||||||
|
# if @REPLACE_FOO@
|
||||||
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
|
# undef foo
|
||||||
|
# define foo rpl_foo
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (foo, ...);
|
||||||
|
_GL_CXXALIAS_RPL (foo, ...);
|
||||||
|
# else
|
||||||
|
# if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@
|
||||||
|
_GL_FUNCDECL_SYS (foo, ...);
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIAS_SYS (foo, ...);
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIASWARN (foo);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* _GL_EXTERN_C declaration;
|
||||||
|
performs the declaration with C linkage. */
|
||||||
|
#if defined __cplusplus
|
||||||
|
# define _GL_EXTERN_C extern "C"
|
||||||
|
#else
|
||||||
|
# define _GL_EXTERN_C extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
|
||||||
|
declares a replacement function, named rpl_func, with the given prototype,
|
||||||
|
consisting of return type, parameters, and attributes.
|
||||||
|
Example:
|
||||||
|
_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
|
||||||
|
_GL_ARG_NONNULL ((1)));
|
||||||
|
*/
|
||||||
|
#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
|
||||||
|
#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_EXTERN_C rettype rpl_func parameters_and_attributes
|
||||||
|
|
||||||
|
/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
|
||||||
|
declares the system function, named func, with the given prototype,
|
||||||
|
consisting of return type, parameters, and attributes.
|
||||||
|
Example:
|
||||||
|
_GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
|
||||||
|
_GL_ARG_NONNULL ((1)));
|
||||||
|
*/
|
||||||
|
#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_EXTERN_C rettype func parameters_and_attributes
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_RPL (func, rettype, parameters);
|
||||||
|
declares a C++ alias called GNULIB_NAMESPACE::func
|
||||||
|
that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
|
||||||
|
Example:
|
||||||
|
_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
|
||||||
|
*/
|
||||||
|
#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
|
||||||
|
_GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
rettype (*const func) parameters = ::rpl_func; \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
|
||||||
|
is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
|
||||||
|
except that the C function rpl_func may have a slightly different
|
||||||
|
declaration. A cast is used to silence the "invalid conversion" error
|
||||||
|
that would otherwise occur. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
rettype (*const func) parameters = \
|
||||||
|
reinterpret_cast<rettype(*)parameters>(::rpl_func); \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_SYS (func, rettype, parameters);
|
||||||
|
declares a C++ alias called GNULIB_NAMESPACE::func
|
||||||
|
that redirects to the system provided function func, if GNULIB_NAMESPACE
|
||||||
|
is defined.
|
||||||
|
Example:
|
||||||
|
_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
|
||||||
|
*/
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
/* If we were to write
|
||||||
|
rettype (*const func) parameters = ::func;
|
||||||
|
like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
|
||||||
|
better (remove an indirection through a 'static' pointer variable),
|
||||||
|
but then the _GL_CXXALIASWARN macro below would cause a warning not only
|
||||||
|
for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */
|
||||||
|
# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
static rettype (*func) parameters = ::func; \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
|
||||||
|
is like _GL_CXXALIAS_SYS (func, rettype, parameters);
|
||||||
|
except that the C function func may have a slightly different declaration.
|
||||||
|
A cast is used to silence the "invalid conversion" error that would
|
||||||
|
otherwise occur. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
static rettype (*func) parameters = \
|
||||||
|
reinterpret_cast<rettype(*)parameters>(::func); \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
|
||||||
|
is like _GL_CXXALIAS_SYS (func, rettype, parameters);
|
||||||
|
except that the C function is picked among a set of overloaded functions,
|
||||||
|
namely the one with rettype2 and parameters2. Two consecutive casts
|
||||||
|
are used to silence the "cannot find a match" and "invalid conversion"
|
||||||
|
errors that would otherwise occur. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
/* The outer cast must be a reinterpret_cast.
|
||||||
|
The inner cast: When the function is defined as a set of overloaded
|
||||||
|
functions, it works as a static_cast<>, choosing the designated variant.
|
||||||
|
When the function is defined as a single variant, it works as a
|
||||||
|
reinterpret_cast<>. The parenthesized cast syntax works both ways. */
|
||||||
|
# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
static rettype (*func) parameters = \
|
||||||
|
reinterpret_cast<rettype(*)parameters>( \
|
||||||
|
(rettype2(*)parameters2)(::func)); \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIASWARN (func);
|
||||||
|
causes a warning to be emitted when ::func is used but not when
|
||||||
|
GNULIB_NAMESPACE::func is used. func must be defined without overloaded
|
||||||
|
variants. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIASWARN(func) \
|
||||||
|
_GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
|
||||||
|
# define _GL_CXXALIASWARN_1(func,namespace) \
|
||||||
|
_GL_CXXALIASWARN_2 (func, namespace)
|
||||||
|
/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
|
||||||
|
we enable the warning only when not optimizing. */
|
||||||
|
# if !__OPTIMIZE__
|
||||||
|
# define _GL_CXXALIASWARN_2(func,namespace) \
|
||||||
|
_GL_WARN_ON_USE (func, \
|
||||||
|
"The symbol ::" #func " refers to the system function. " \
|
||||||
|
"Use " #namespace "::" #func " instead.")
|
||||||
|
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
|
||||||
|
# define _GL_CXXALIASWARN_2(func,namespace) \
|
||||||
|
extern __typeof__ (func) func
|
||||||
|
# else
|
||||||
|
# define _GL_CXXALIASWARN_2(func,namespace) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIASWARN(func) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
|
||||||
|
causes a warning to be emitted when the given overloaded variant of ::func
|
||||||
|
is used but not when GNULIB_NAMESPACE::func is used. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
|
||||||
|
GNULIB_NAMESPACE)
|
||||||
|
# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
|
||||||
|
_GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
|
||||||
|
/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
|
||||||
|
we enable the warning only when not optimizing. */
|
||||||
|
# if !__OPTIMIZE__
|
||||||
|
# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
|
||||||
|
_GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
|
||||||
|
"The symbol ::" #func " refers to the system function. " \
|
||||||
|
"Use " #namespace "::" #func " instead.")
|
||||||
|
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
|
||||||
|
# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
|
||||||
|
extern __typeof__ (func) func
|
||||||
|
# else
|
||||||
|
# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_CXXDEFS_H */
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
/* A C macro for emitting warnings if a function is used.
|
||||||
|
Copyright (C) 2010-2013 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program 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.
|
||||||
|
|
||||||
|
This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
|
||||||
|
for FUNCTION which will then trigger a compiler warning containing
|
||||||
|
the text of "literal string" anywhere that function is called, if
|
||||||
|
supported by the compiler. If the compiler does not support this
|
||||||
|
feature, the macro expands to an unused extern declaration.
|
||||||
|
|
||||||
|
This macro is useful for marking a function as a potential
|
||||||
|
portability trap, with the intent that "literal string" include
|
||||||
|
instructions on the replacement function that should be used
|
||||||
|
instead. However, one of the reasons that a function is a
|
||||||
|
portability trap is if it has the wrong signature. Declaring
|
||||||
|
FUNCTION with a different signature in C is a compilation error, so
|
||||||
|
this macro must use the same type as any existing declaration so
|
||||||
|
that programs that avoid the problematic FUNCTION do not fail to
|
||||||
|
compile merely because they included a header that poisoned the
|
||||||
|
function. But this implies that _GL_WARN_ON_USE is only safe to
|
||||||
|
use if FUNCTION is known to already have a declaration. Use of
|
||||||
|
this macro implies that there must not be any other macro hiding
|
||||||
|
the declaration of FUNCTION; but undefining FUNCTION first is part
|
||||||
|
of the poisoning process anyway (although for symbols that are
|
||||||
|
provided only via a macro, the result is a compilation error rather
|
||||||
|
than a warning containing "literal string"). Also note that in
|
||||||
|
C++, it is only safe to use if FUNCTION has no overloads.
|
||||||
|
|
||||||
|
For an example, it is possible to poison 'getline' by:
|
||||||
|
- adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
|
||||||
|
[getline]) in configure.ac, which potentially defines
|
||||||
|
HAVE_RAW_DECL_GETLINE
|
||||||
|
- adding this code to a header that wraps the system <stdio.h>:
|
||||||
|
#undef getline
|
||||||
|
#if HAVE_RAW_DECL_GETLINE
|
||||||
|
_GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
|
||||||
|
"not universally present; use the gnulib module getline");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
It is not possible to directly poison global variables. But it is
|
||||||
|
possible to write a wrapper accessor function, and poison that
|
||||||
|
(less common usage, like &environ, will cause a compilation error
|
||||||
|
rather than issue the nice warning, but the end result of informing
|
||||||
|
the developer about their portability problem is still achieved):
|
||||||
|
#if HAVE_RAW_DECL_ENVIRON
|
||||||
|
static char ***rpl_environ (void) { return &environ; }
|
||||||
|
_GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
|
||||||
|
# undef environ
|
||||||
|
# define environ (*rpl_environ ())
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
#ifndef _GL_WARN_ON_USE
|
||||||
|
|
||||||
|
# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
|
||||||
|
/* A compiler attribute is available in gcc versions 4.3.0 and later. */
|
||||||
|
# define _GL_WARN_ON_USE(function, message) \
|
||||||
|
extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
|
||||||
|
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
|
||||||
|
/* Verify the existence of the function. */
|
||||||
|
# define _GL_WARN_ON_USE(function, message) \
|
||||||
|
extern __typeof__ (function) function
|
||||||
|
# else /* Unsupported. */
|
||||||
|
# define _GL_WARN_ON_USE(function, message) \
|
||||||
|
_GL_WARN_EXTERN_C int _gl_warn_on_use
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
|
||||||
|
is like _GL_WARN_ON_USE (function, "string"), except that the function is
|
||||||
|
declared with the given prototype, consisting of return type, parameters,
|
||||||
|
and attributes.
|
||||||
|
This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
|
||||||
|
not work in this case. */
|
||||||
|
#ifndef _GL_WARN_ON_USE_CXX
|
||||||
|
# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
|
||||||
|
# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
|
||||||
|
extern rettype function parameters_and_attributes \
|
||||||
|
__attribute__ ((__warning__ (msg)))
|
||||||
|
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
|
||||||
|
/* Verify the existence of the function. */
|
||||||
|
# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
|
||||||
|
extern rettype function parameters_and_attributes
|
||||||
|
# else /* Unsupported. */
|
||||||
|
# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
|
||||||
|
_GL_WARN_EXTERN_C int _gl_warn_on_use
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_WARN_EXTERN_C declaration;
|
||||||
|
performs the declaration with C linkage. */
|
||||||
|
#ifndef _GL_WARN_EXTERN_C
|
||||||
|
# if defined __cplusplus
|
||||||
|
# define _GL_WARN_EXTERN_C extern "C"
|
||||||
|
# else
|
||||||
|
# define _GL_WARN_EXTERN_C extern
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
+26
-20
@@ -7,19 +7,20 @@ unexport LC_ALL
|
|||||||
|
|
||||||
# Platform specific options
|
# Platform specific options
|
||||||
if COND_sparc64_ieee1275
|
if COND_sparc64_ieee1275
|
||||||
LDFLAGS_PLATFORM = -Wl,-melf64_sparc
|
CFLAGS_PLATFORM += -mno-app-regs
|
||||||
|
LDFLAGS_PLATFORM = -Wl,-melf64_sparc -mno-relax
|
||||||
endif
|
endif
|
||||||
if COND_arm
|
if COND_arm
|
||||||
if !COND_emu
|
CFLAGS_PLATFORM += -mthumb-interwork
|
||||||
|
CCASFLAGS_PLATFORM = -mthumb-interwork
|
||||||
LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache
|
LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache
|
||||||
endif
|
endif
|
||||||
endif
|
|
||||||
if COND_arm64
|
if COND_arm64
|
||||||
CFLAGS_PLATFORM += -mcmodel=large
|
CFLAGS_PLATFORM += -mcmodel=large
|
||||||
endif
|
endif
|
||||||
if COND_powerpc_ieee1275
|
|
||||||
CFLAGS_PLATFORM += -mcpu=powerpc
|
#FIXME: discover and check XEN headers
|
||||||
endif
|
CPPFLAGS_XEN = -I/usr/include
|
||||||
|
|
||||||
# Other options
|
# Other options
|
||||||
|
|
||||||
@@ -30,23 +31,30 @@ CPPFLAGS_DEFAULT += -I$(top_builddir)
|
|||||||
CPPFLAGS_DEFAULT += -I$(top_srcdir)
|
CPPFLAGS_DEFAULT += -I$(top_srcdir)
|
||||||
CPPFLAGS_DEFAULT += -I$(top_srcdir)/include
|
CPPFLAGS_DEFAULT += -I$(top_srcdir)/include
|
||||||
CPPFLAGS_DEFAULT += -I$(top_builddir)/include
|
CPPFLAGS_DEFAULT += -I$(top_builddir)/include
|
||||||
|
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/include
|
||||||
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/
|
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/
|
||||||
CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1
|
CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1
|
||||||
BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT)
|
BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT)
|
||||||
|
|
||||||
CFLAGS_KERNEL = $(CFLAGS_PLATFORM) -ffreestanding
|
LDADD_KERNEL = $(TARGET_LIBGCC)
|
||||||
LDFLAGS_KERNEL = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC)
|
|
||||||
|
CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding
|
||||||
|
LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_LDFLAGS_STATIC_LIBGCC)
|
||||||
CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1
|
CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1
|
||||||
CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx
|
if COND_CYGWIN
|
||||||
|
STRIPFLAGS_KERNEL = -F elf32-i386 -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version
|
||||||
|
else
|
||||||
|
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .note.gnu.gold-version
|
||||||
|
endif
|
||||||
|
|
||||||
CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding
|
CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding
|
||||||
LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d
|
LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d
|
||||||
CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
||||||
CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
|
|
||||||
CFLAGS_IMAGE = $(CFLAGS_PLATFORM) -fno-builtin
|
CFLAGS_IMAGE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -fno-builtin
|
||||||
LDFLAGS_IMAGE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-S
|
LDFLAGS_IMAGE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-S
|
||||||
CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
||||||
CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
|
|
||||||
@@ -66,7 +74,7 @@ platformdir = $(pkglibdir)/$(target_cpu)-$(platform)
|
|||||||
starfielddir = $(pkgdatadir)/themes/starfield
|
starfielddir = $(pkgdatadir)/themes/starfield
|
||||||
|
|
||||||
CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion
|
CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion
|
||||||
CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/lib/gnulib -I$(top_srcdir)/grub-core/lib/gnulib
|
CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/gnulib -I$(top_srcdir)/grub-core/gnulib
|
||||||
|
|
||||||
CFLAGS_POSIX = -fno-builtin
|
CFLAGS_POSIX = -fno-builtin
|
||||||
CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap
|
CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap
|
||||||
@@ -86,11 +94,9 @@ CPPFLAGS_TERMINAL_LIST += '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST
|
|||||||
CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)'
|
CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)'
|
||||||
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)'
|
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)'
|
||||||
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)'
|
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)'
|
||||||
CPPFLAGS_FDT_LIST := '-Dgrub_fdtbus_register(...)=FDT_DRIVER_LIST_MARKER(__VA_ARGS__)'
|
|
||||||
CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \
|
CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \
|
||||||
$(CPPFLAGS_PARTTOOL_LIST) $(CPPFLAGS_PARTMAP_LIST) \
|
$(CPPFLAGS_PARTTOOL_LIST) $(CPPFLAGS_PARTMAP_LIST) \
|
||||||
$(CPPFLAGS_TERMINAL_LIST) $(CPPFLAGS_COMMAND_LIST) \
|
$(CPPFLAGS_TERMINAL_LIST) $(CPPFLAGS_COMMAND_LIST)
|
||||||
$(CPPFLAGS_FDT_LIST)
|
|
||||||
|
|
||||||
# Define these variables to calm down automake
|
# Define these variables to calm down automake
|
||||||
|
|
||||||
@@ -128,11 +134,11 @@ BUILT_SOURCES =
|
|||||||
|
|
||||||
.PRECIOUS: $(top_srcdir)/Makefile.util.am
|
.PRECIOUS: $(top_srcdir)/Makefile.util.am
|
||||||
$(top_srcdir)/Makefile.util.am: $(top_srcdir)/gentpl.py $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def
|
$(top_srcdir)/Makefile.util.am: $(top_srcdir)/gentpl.py $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def
|
||||||
$(PYTHON) $^ > $@.new || (rm -f $@.new; exit 1)
|
python $^ > $@.new || (rm -f $@.new; exit 1)
|
||||||
mv $@.new $@
|
mv $@.new $@
|
||||||
|
|
||||||
.PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am
|
.PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am
|
||||||
$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/gentpl.py $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def
|
$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/gentpl.py $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def
|
||||||
if [ "x$$GRUB_CONTRIB" != x ]; then echo "You need to run ./bootstrap manually." >&2; exit 1; fi
|
if [ "x$$GRUB_CONTRIB" != x ]; then echo "You need to run ./autogen.sh manually." >&2; exit 1; fi
|
||||||
$(PYTHON) $^ > $@.new || (rm -f $@.new; exit 1)
|
python $^ > $@.new || (rm -f $@.new; exit 1)
|
||||||
mv $@.new $@
|
mv $@.new $@
|
||||||
@@ -5,7 +5,6 @@ EXTRA_DIST += gentpl.py
|
|||||||
EXTRA_DIST += Makefile.util.def
|
EXTRA_DIST += Makefile.util.def
|
||||||
EXTRA_DIST += Makefile.utilgcry.def
|
EXTRA_DIST += Makefile.utilgcry.def
|
||||||
|
|
||||||
EXTRA_DIST += asm-tests
|
|
||||||
EXTRA_DIST += unicode
|
EXTRA_DIST += unicode
|
||||||
|
|
||||||
EXTRA_DIST += util/import_gcry.py
|
EXTRA_DIST += util/import_gcry.py
|
||||||
@@ -16,7 +15,7 @@ EXTRA_DIST += docs/autoiso.cfg
|
|||||||
EXTRA_DIST += docs/grub.cfg
|
EXTRA_DIST += docs/grub.cfg
|
||||||
EXTRA_DIST += docs/osdetect.cfg
|
EXTRA_DIST += docs/osdetect.cfg
|
||||||
|
|
||||||
EXTRA_DIST += conf/i386-cygwin-img-ld.sc
|
EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/Makefile.core.def
|
EXTRA_DIST += grub-core/Makefile.core.def
|
||||||
EXTRA_DIST += grub-core/Makefile.gcry.def
|
EXTRA_DIST += grub-core/Makefile.gcry.def
|
||||||
@@ -28,14 +27,16 @@ EXTRA_DIST += grub-core/gensymlist.sh
|
|||||||
EXTRA_DIST += grub-core/genemuinit.sh
|
EXTRA_DIST += grub-core/genemuinit.sh
|
||||||
EXTRA_DIST += grub-core/genemuinitheader.sh
|
EXTRA_DIST += grub-core/genemuinitheader.sh
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/lib/gnulib-patches/fix-null-deref.patch
|
EXTRA_DIST += grub-core/gnulib-fix-null-deref.diff
|
||||||
EXTRA_DIST += grub-core/lib/gnulib-patches/fix-width.patch
|
EXTRA_DIST += grub-core/gnulib-fix-width.diff
|
||||||
EXTRA_DIST += grub-core/lib/gnulib-patches/no-abort.patch
|
EXTRA_DIST += grub-core/gnulib-no-abort.diff
|
||||||
|
EXTRA_DIST += grub-core/gnulib-no-gets.diff
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/lib/libgcrypt
|
EXTRA_DIST += grub-core/lib/libgcrypt
|
||||||
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h')
|
EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h')
|
||||||
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib -name '*.h')
|
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib -name '*.h')
|
||||||
|
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/gnulib -name '*.h')
|
||||||
EXTRA_DIST += grub-core/efiemu/runtime/config.h
|
EXTRA_DIST += grub-core/efiemu/runtime/config.h
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/lib/LzmaDec.c
|
EXTRA_DIST += grub-core/lib/LzmaDec.c
|
||||||
@@ -49,13 +50,8 @@ EXTRA_DIST += util/import_gcrypth.sed
|
|||||||
EXTRA_DIST += util/bin2h.c
|
EXTRA_DIST += util/bin2h.c
|
||||||
EXTRA_DIST += util/grub-gen-asciih.c
|
EXTRA_DIST += util/grub-gen-asciih.c
|
||||||
EXTRA_DIST += util/grub-gen-widthspec.c
|
EXTRA_DIST += util/grub-gen-widthspec.c
|
||||||
EXTRA_DIST += util/grub-module-verifier.c
|
|
||||||
EXTRA_DIST += util/grub-module-verifier32.c
|
|
||||||
EXTRA_DIST += util/grub-module-verifier64.c
|
|
||||||
EXTRA_DIST += util/grub-module-verifierXX.c
|
|
||||||
EXTRA_DIST += util/grub-pe2elf.c
|
EXTRA_DIST += util/grub-pe2elf.c
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST += m4/gnulib-cache.m4
|
EXTRA_DIST += m4/gnulib-cache.m4
|
||||||
EXTRA_DIST += m4/glibc2.m4
|
EXTRA_DIST += m4/glibc2.m4
|
||||||
EXTRA_DIST += m4/gnulib-tool.m4
|
EXTRA_DIST += m4/gnulib-tool.m4
|
||||||
@@ -114,26 +110,3 @@ EXTRA_DIST += tests/dfly-mbr-mbexample.mbr.img.gz
|
|||||||
EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz
|
EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz
|
||||||
|
|
||||||
EXTRA_DIST += coreboot.cfg
|
EXTRA_DIST += coreboot.cfg
|
||||||
|
|
||||||
EXTRA_DIST += tests/file_filter/file
|
|
||||||
EXTRA_DIST += tests/file_filter/file.gz
|
|
||||||
EXTRA_DIST += tests/file_filter/file.gz.sig
|
|
||||||
EXTRA_DIST += tests/file_filter/file.lzop
|
|
||||||
EXTRA_DIST += tests/file_filter/file.lzop.sig
|
|
||||||
EXTRA_DIST += tests/file_filter/file.xz
|
|
||||||
EXTRA_DIST += tests/file_filter/file.xz.sig
|
|
||||||
EXTRA_DIST += tests/file_filter/keys
|
|
||||||
EXTRA_DIST += tests/file_filter/keys.pub
|
|
||||||
EXTRA_DIST += tests/file_filter/test.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/prompt.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/gfxboot.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/adtxt.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/exithelp.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/txt.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/menu.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/stdmenu.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/dtmenu.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/po4a.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg
|
|
||||||
EXTRA_DIST += tests/syslinux/ubuntu10.04_grub.cfg.in
|
|
||||||
@@ -5,8 +5,6 @@ SECTIONS
|
|||||||
.text :
|
.text :
|
||||||
{
|
{
|
||||||
start = . ;
|
start = . ;
|
||||||
_start = . ;
|
|
||||||
__start = . ;
|
|
||||||
*(.text)
|
*(.text)
|
||||||
etext = . ;
|
etext = . ;
|
||||||
}
|
}
|
||||||
@@ -35,8 +33,6 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
*(.edata)
|
*(.edata)
|
||||||
end = . ;
|
end = . ;
|
||||||
_end = . ;
|
|
||||||
__end = . ;
|
|
||||||
}
|
}
|
||||||
.stab :
|
.stab :
|
||||||
{
|
{
|
||||||
+10
-9
@@ -7,20 +7,11 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GCRYPT_NO_DEPRECATED 1
|
#define GCRYPT_NO_DEPRECATED 1
|
||||||
#define HAVE_MEMMOVE 1
|
|
||||||
|
|
||||||
/* Define to 1 to enable disk cache statistics. */
|
/* Define to 1 to enable disk cache statistics. */
|
||||||
#define DISK_CACHE_STATS @DISK_CACHE_STATS@
|
#define DISK_CACHE_STATS @DISK_CACHE_STATS@
|
||||||
#define BOOT_TIME_STATS @BOOT_TIME_STATS@
|
#define BOOT_TIME_STATS @BOOT_TIME_STATS@
|
||||||
|
|
||||||
/* We don't need those. */
|
|
||||||
#define MINILZO_CFG_SKIP_LZO_PTR 1
|
|
||||||
#define MINILZO_CFG_SKIP_LZO_UTIL 1
|
|
||||||
#define MINILZO_CFG_SKIP_LZO_STRING 1
|
|
||||||
#define MINILZO_CFG_SKIP_LZO_INIT 1
|
|
||||||
#define MINILZO_CFG_SKIP_LZO1X_1_COMPRESS 1
|
|
||||||
#define MINILZO_CFG_SKIP_LZO1X_DECOMPRESS 1
|
|
||||||
|
|
||||||
#if defined (GRUB_BUILD)
|
#if defined (GRUB_BUILD)
|
||||||
#undef ENABLE_NLS
|
#undef ENABLE_NLS
|
||||||
#define BUILD_SIZEOF_LONG @BUILD_SIZEOF_LONG@
|
#define BUILD_SIZEOF_LONG @BUILD_SIZEOF_LONG@
|
||||||
@@ -40,6 +31,10 @@
|
|||||||
#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@
|
#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@
|
||||||
/* Define if C symbols get an underscore after compilation. */
|
/* Define if C symbols get an underscore after compilation. */
|
||||||
#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@
|
#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@
|
||||||
|
/* Define it to \"addr32\" or \"addr32;\" to make GAS happy. */
|
||||||
|
#define ADDR32 @ADDR32@
|
||||||
|
/* Define it to \"data32\" or \"data32;\" to make GAS happy. */
|
||||||
|
#define DATA32 @DATA32@
|
||||||
/* Define it to one of __bss_start, edata and _edata. */
|
/* Define it to one of __bss_start, edata and _edata. */
|
||||||
#define BSS_START_SYMBOL @BSS_START_SYMBOL@
|
#define BSS_START_SYMBOL @BSS_START_SYMBOL@
|
||||||
/* Define it to either end or _end. */
|
/* Define it to either end or _end. */
|
||||||
@@ -56,6 +51,12 @@
|
|||||||
#define PACKAGE_NAME "@PACKAGE_NAME@"
|
#define PACKAGE_NAME "@PACKAGE_NAME@"
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
|
#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
|
||||||
|
/* Default boot directory name" */
|
||||||
|
#define GRUB_BOOT_DIR_NAME "@bootdirname@"
|
||||||
|
/* Default grub directory name */
|
||||||
|
#define GRUB_DIR_NAME "@grubdirname@"
|
||||||
|
/* Define to 1 if GCC generates calls to __register_frame_info(). */
|
||||||
|
#define NEED_REGISTER_FRAME_INFO @NEED_REGISTER_FRAME_INFO@
|
||||||
|
|
||||||
#define GRUB_TARGET_CPU "@GRUB_TARGET_CPU@"
|
#define GRUB_TARGET_CPU "@GRUB_TARGET_CPU@"
|
||||||
#define GRUB_PLATFORM "@GRUB_PLATFORM@"
|
#define GRUB_PLATFORM "@GRUB_PLATFORM@"
|
||||||
|
|||||||
+276
-631
File diff suppressed because it is too large.
Load diff
+19
-156
@@ -77,7 +77,6 @@ This edition documents version @value{VERSION}.
|
|||||||
* Coding style::
|
* Coding style::
|
||||||
* Finding your way around::
|
* Finding your way around::
|
||||||
* Contributing Changes::
|
* Contributing Changes::
|
||||||
* Updating External Code::
|
|
||||||
* Porting::
|
* Porting::
|
||||||
* Error Handling::
|
* Error Handling::
|
||||||
* Stack and heap size::
|
* Stack and heap size::
|
||||||
@@ -85,7 +84,6 @@ This edition documents version @value{VERSION}.
|
|||||||
* Video Subsystem::
|
* Video Subsystem::
|
||||||
* PFF2 Font File Format::
|
* PFF2 Font File Format::
|
||||||
* Graphical Menu Software Design::
|
* Graphical Menu Software Design::
|
||||||
* Verifiers framework::
|
|
||||||
* Copying This Manual:: Copying This Manual
|
* Copying This Manual:: Copying This Manual
|
||||||
* Index::
|
* Index::
|
||||||
@end menu
|
@end menu
|
||||||
@@ -110,16 +108,16 @@ The branches available are:
|
|||||||
|
|
||||||
@table @samp
|
@table @samp
|
||||||
@item master
|
@item master
|
||||||
Main development branch.
|
Main developpement branch.
|
||||||
@item grub-legacy
|
@item grub-legacy
|
||||||
GRUB 0.97 codebase. Kept for reference and legal reasons
|
GRUB 0.97 codebase. Kept for reference and legal reasons
|
||||||
@item multiboot
|
@item multiboot
|
||||||
Multiboot specfication
|
Multiboot specfication
|
||||||
@item multiboot2
|
@item multiboot2
|
||||||
Multiboot2 specfication
|
Multiboot2 specfication
|
||||||
@item developer branches
|
@item developper branches
|
||||||
Prefixed with developer name. Every developer of a team manages his own branches.
|
Prefixed with developper name. Every developper of a team manages his own branches.
|
||||||
Developer branches do not need changelog entries.
|
Developper branches do not need changelog entries.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
Once you have used @kbd{git clone} to fetch an initial copy of a branch, you
|
Once you have used @kbd{git clone} to fetch an initial copy of a branch, you
|
||||||
@@ -183,44 +181,38 @@ If a macro is global, its name must be prefixed with GRUB_ and must consist of o
|
|||||||
@section Comments
|
@section Comments
|
||||||
|
|
||||||
All comments shall be C-style comments, of the form @samp{/* @dots{} */}.
|
All comments shall be C-style comments, of the form @samp{/* @dots{} */}.
|
||||||
A comment can be placed immediately preceding the entity it describes or it
|
|
||||||
can be placed together with code, variable declarations, or other non-comment
|
Comments shall be placed only on a line by themselves. They shall not be placed together with code, variable declarations, or other non-comment entities. A comment should be placed immediately preceding the entity it describes.
|
||||||
entities. However, it is recommended to not mix various forms especially in
|
|
||||||
types/structs descriptions.
|
|
||||||
|
|
||||||
Acceptable:
|
Acceptable:
|
||||||
@example
|
@example
|
||||||
/* The page # that is the front buffer. */
|
/* The page # that is the front buffer. */
|
||||||
int displayed_page;
|
int displayed_page;
|
||||||
|
/* The page # that is the back buffer. */
|
||||||
|
int render_page;
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
Unacceptable:
|
||||||
@example
|
@example
|
||||||
|
int displayed_page; /* The page # that is the front buffer. */
|
||||||
int render_page; /* The page # that is the back buffer. */
|
int render_page; /* The page # that is the back buffer. */
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@node Multi-Line Comments
|
@node Multi-Line Comments
|
||||||
@section Multi-Line Comments
|
@section Multi-Line Comments
|
||||||
|
|
||||||
Comments spanning multiple lines shall be formatted with all lines after the
|
Comments spanning multiple lines shall be formatted with all lines after the first aligned with the first line.
|
||||||
first aligned with the first line. Asterisk characters should be repeated at
|
|
||||||
the start of each subsequent line.
|
Asterisk characters should not be repeated a the start of each subsequent line.
|
||||||
|
|
||||||
Acceptable:
|
Acceptable:
|
||||||
@example
|
@example
|
||||||
/*
|
|
||||||
* This is a comment
|
|
||||||
* which spans multiple lines.
|
|
||||||
* It is long.
|
|
||||||
*/
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Unacceptable:
|
|
||||||
@example
|
|
||||||
/* This is a comment
|
/* This is a comment
|
||||||
which spans multiple lines.
|
which spans multiple lines.
|
||||||
It is long. */
|
It is long. */
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
Unacceptable:
|
||||||
@example
|
@example
|
||||||
/*
|
/*
|
||||||
* This is a comment
|
* This is a comment
|
||||||
@@ -228,16 +220,7 @@ Unacceptable:
|
|||||||
* It is long. */
|
* It is long. */
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@example
|
The opening @samp{/*} and closing @samp{*/} should be placed together on a line with text.
|
||||||
/* This is a comment
|
|
||||||
* which spans multiple lines.
|
|
||||||
* It is long.
|
|
||||||
*/
|
|
||||||
@end example
|
|
||||||
|
|
||||||
In particular first unacceptable form makes comment difficult to distinguish
|
|
||||||
from the code itself. Especially if it contains the code snippets and/or is
|
|
||||||
long. So, its usage is disallowed.
|
|
||||||
|
|
||||||
@node Finding your way around
|
@node Finding your way around
|
||||||
@chapter Finding your way around
|
@chapter Finding your way around
|
||||||
@@ -245,12 +228,12 @@ long. So, its usage is disallowed.
|
|||||||
Here is a brief map of the GRUB code base.
|
Here is a brief map of the GRUB code base.
|
||||||
|
|
||||||
GRUB uses Autoconf and Automake, with most of the Automake input generated
|
GRUB uses Autoconf and Automake, with most of the Automake input generated
|
||||||
by a Python script. The top-level build rules are in @file{configure.ac},
|
by AutoGen. The top-level build rules are in @file{configure.ac},
|
||||||
@file{grub-core/Makefile.core.def}, and @file{Makefile.util.def}. Each
|
@file{grub-core/Makefile.core.def}, and @file{Makefile.util.def}. Each
|
||||||
block in a @file{*.def} file represents a build target, and specifies the
|
block in a @file{*.def} file represents a build target, and specifies the
|
||||||
source files used to build it on various platforms. The @file{*.def} files
|
source files used to build it on various platforms. The @file{*.def} files
|
||||||
are processed into Automake input by @file{gentpl.py} (which you only need
|
are processed into AutoGen input by @file{gentpl.py} (which you only need to
|
||||||
to look at if you are extending the build system). If you are adding a new
|
look at if you are extending the build system). If you are adding a new
|
||||||
module which follows an existing pattern, such as a new command or a new
|
module which follows an existing pattern, such as a new command or a new
|
||||||
filesystem implementation, it is usually easiest to grep
|
filesystem implementation, it is usually easiest to grep
|
||||||
@file{grub-core/Makefile.core.def} and @file{Makefile.util.def} for an
|
@file{grub-core/Makefile.core.def} and @file{Makefile.util.def} for an
|
||||||
@@ -482,69 +465,6 @@ If your intention is to just get started, please do not submit a inclusion
|
|||||||
request. Instead, please subscribe to the mailing list, and communicate first
|
request. Instead, please subscribe to the mailing list, and communicate first
|
||||||
(e.g. sending a patch, asking a question, commenting on another message...).
|
(e.g. sending a patch, asking a question, commenting on another message...).
|
||||||
|
|
||||||
@node Updating External Code
|
|
||||||
@chapter Updating external code
|
|
||||||
|
|
||||||
GRUB includes some code from other projects, and it is sometimes necessary
|
|
||||||
to update it.
|
|
||||||
|
|
||||||
@menu
|
|
||||||
* Gnulib::
|
|
||||||
@end menu
|
|
||||||
|
|
||||||
@node Gnulib
|
|
||||||
@section Gnulib
|
|
||||||
|
|
||||||
Gnulib is a source code library that provides basic functionality to
|
|
||||||
programs and libraries. Many software packages make use of Gnulib
|
|
||||||
to avoid reinventing the portability wheel.
|
|
||||||
|
|
||||||
GRUB imports Gnulib using its @command{bootstrap} utility, identifying a
|
|
||||||
particular Git commit in @file{bootstrap.conf}. To upgrade to a new Gnulib
|
|
||||||
commit, set @code{GNULIB_REVISION} in @file{bootstrap.conf} to the new commit
|
|
||||||
ID, then run @kbd{./bootstrap} and whatever else you need to make sure it
|
|
||||||
works. Check for changes to Gnulib's @file{NEWS} file between the old and new
|
|
||||||
commits; in some cases it will be necessary to adjust GRUB to match. You may
|
|
||||||
also need to update the patches in @file{grub-core/lib/gnulib-patches/}.
|
|
||||||
|
|
||||||
To add a new Gnulib module or remove one that is no longer needed, change
|
|
||||||
@code{gnulib_modules} in @file{bootstrap.conf}. Again, run @kbd{./bootstrap}
|
|
||||||
and whatever else you need to make sure it works.
|
|
||||||
|
|
||||||
Bootstrapping from an older distribution containing gettext version < 0.18.3,
|
|
||||||
will require a patch similar to this to be applied first before running the
|
|
||||||
@command{./bootstrap} utility:
|
|
||||||
|
|
||||||
@example
|
|
||||||
diff --git a/bootstrap.conf b/bootstrap.conf
|
|
||||||
index 988dda0..a3193a9 100644
|
|
||||||
--- a/bootstrap.conf
|
|
||||||
+++ b/bootstrap.conf
|
|
||||||
@@ -67,7 +67,7 @@ SKIP_PO=t
|
|
||||||
buildreq="\
|
|
||||||
autoconf 2.63
|
|
||||||
automake 1.11
|
|
||||||
-gettext 0.18.3
|
|
||||||
+gettext 0.17
|
|
||||||
git 1.5.5
|
|
||||||
tar -
|
|
||||||
"
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index 08b518f..99f5b36 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -362,7 +362,7 @@ AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
|
|
||||||
|
|
||||||
AC_GNU_SOURCE
|
|
||||||
AM_GNU_GETTEXT([external])
|
|
||||||
-AM_GNU_GETTEXT_VERSION([0.18.3])
|
|
||||||
+AM_GNU_GETTEXT_VERSION([0.17])
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
# Identify characteristics of the host architecture.
|
|
||||||
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@node Porting
|
@node Porting
|
||||||
@chapter Porting
|
@chapter Porting
|
||||||
|
|
||||||
@@ -751,7 +671,7 @@ is already present and you'll need to make it follow the existant code paths
|
|||||||
for your platform adding adjustments if necessary. When done compile:
|
for your platform adding adjustments if necessary. When done compile:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
./bootstrap
|
./autogen.sh
|
||||||
./configure --target=$cpu --with-platform=$platform TARGET_CC=.. OBJCOPY=... STRIP=...
|
./configure --target=$cpu --with-platform=$platform TARGET_CC=.. OBJCOPY=... STRIP=...
|
||||||
make > /dev/null
|
make > /dev/null
|
||||||
@end example
|
@end example
|
||||||
@@ -2029,63 +1949,6 @@ the graphics mode that was in use before @code{grub_video_setup()} was called
|
|||||||
might fix some of the problems.
|
might fix some of the problems.
|
||||||
|
|
||||||
|
|
||||||
@node Verifiers framework
|
|
||||||
@chapter Verifiers framework
|
|
||||||
|
|
||||||
To register your own verifier call @samp{grub_verifier_register} with a structure
|
|
||||||
pointing to your functions.
|
|
||||||
|
|
||||||
The interface is inspired by the hash interface with @samp{init}/@samp{write}/@samp{fini}.
|
|
||||||
|
|
||||||
There are essentially 2 ways of using it, hashing and whole-file verification.
|
|
||||||
|
|
||||||
With the hashing approach:
|
|
||||||
During @samp{init} you decide whether you want to check the given file and init context.
|
|
||||||
In @samp{write} you update your hashing state.
|
|
||||||
In @samp{fini} you check that the hash matches the expected value/passes some check/...
|
|
||||||
|
|
||||||
With whole-file verification:
|
|
||||||
During @samp{init} you decide whether you want to check the given file and init context.
|
|
||||||
In @samp{write} you verify the file and return an error if it fails.
|
|
||||||
You don't have @samp{fini}.
|
|
||||||
|
|
||||||
Additional @samp{verify_string} receives various strings like kernel parameters
|
|
||||||
to verify. Returning no error means successful verification and an error stops
|
|
||||||
the current action.
|
|
||||||
|
|
||||||
Detailed description of the API:
|
|
||||||
|
|
||||||
Every time a file is opened your @samp{init} function is called with file descriptor
|
|
||||||
and file type. Your function can have the following outcomes:
|
|
||||||
|
|
||||||
@itemize
|
|
||||||
|
|
||||||
@item returning no error and setting @samp{*flags} to @samp{GRUB_VERIFY_FLAGS_DEFER_AUTH}.
|
|
||||||
In this case verification is deferred to other active verifiers. Verification
|
|
||||||
fails if nobody cares or selected verifier fails.
|
|
||||||
|
|
||||||
@item returning no error and setting @samp{*flags} to @samp{GRUB_VERIFY_FLAGS_SKIP_VERIFICATION}.
|
|
||||||
In this case your verifier will not be called anymore and it is assumed to have
|
|
||||||
skipped verification.
|
|
||||||
|
|
||||||
@item returning no error and not setting @samp{*flags} to @samp{GRUB_VERIFY_FLAGS_SKIP_VERIFICATION}
|
|
||||||
In this case verification is done as described in the following section.
|
|
||||||
|
|
||||||
@item returning an error. Then opening of the file will fail due to failed verification.
|
|
||||||
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
In the third case your @samp{write} will be called with chunks of the file. If
|
|
||||||
you need the whole file in a single chunk then during @samp{init} set the bit
|
|
||||||
@samp{GRUB_VERIFY_FLAGS_SINGLE_CHUNK} in @samp{*flags}. During @samp{init} you
|
|
||||||
may set @samp{*context} if you need additional context. At every iteration you
|
|
||||||
may return an error and the file will be considered as having failed the
|
|
||||||
verification. If you return no error then verification continues.
|
|
||||||
|
|
||||||
Optionally at the end of the file @samp{fini}, if it exists, is called with just
|
|
||||||
the context. If you return no error during any of @samp{init}, @samp{write} and
|
|
||||||
@samp{fini} then the file is considered as having succeded verification.
|
|
||||||
|
|
||||||
@node Copying This Manual
|
@node Copying This Manual
|
||||||
@appendix Copying This Manual
|
@appendix Copying This Manual
|
||||||
|
|
||||||
|
|||||||
+47
-329
@@ -360,9 +360,8 @@ blocklist notation. The currently supported filesystem types are @dfn{Amiga
|
|||||||
Fast FileSystem (AFFS)}, @dfn{AtheOS fs}, @dfn{BeFS},
|
Fast FileSystem (AFFS)}, @dfn{AtheOS fs}, @dfn{BeFS},
|
||||||
@dfn{BtrFS} (including raid0, raid1, raid10, gzip and lzo),
|
@dfn{BtrFS} (including raid0, raid1, raid10, gzip and lzo),
|
||||||
@dfn{cpio} (little- and big-endian bin, odc and newc variants),
|
@dfn{cpio} (little- and big-endian bin, odc and newc variants),
|
||||||
@dfn{Linux ext2/ext3/ext4}, @dfn{DOS FAT12/FAT16/FAT32},
|
@dfn{Linux ext2/ext3/ext4}, @dfn{DOS FAT12/FAT16/FAT32}, @dfn{exFAT}, @dfn{HFS},
|
||||||
@dfn{exFAT}, @dfn{F2FS}, @dfn{HFS}, @dfn{HFS+},
|
@dfn{HFS+}, @dfn{ISO9660} (including Joliet, Rock-ridge and multi-chunk files),
|
||||||
@dfn{ISO9660} (including Joliet, Rock-ridge and multi-chunk files),
|
|
||||||
@dfn{JFS}, @dfn{Minix fs} (versions 1, 2 and 3), @dfn{nilfs2},
|
@dfn{JFS}, @dfn{Minix fs} (versions 1, 2 and 3), @dfn{nilfs2},
|
||||||
@dfn{NTFS} (including compression), @dfn{ReiserFS}, @dfn{ROMFS},
|
@dfn{NTFS} (including compression), @dfn{ReiserFS}, @dfn{ROMFS},
|
||||||
@dfn{Amiga Smart FileSystem (SFS)}, @dfn{Squash4}, @dfn{tar}, @dfn{UDF},
|
@dfn{Amiga Smart FileSystem (SFS)}, @dfn{Squash4}, @dfn{tar}, @dfn{UDF},
|
||||||
@@ -1215,7 +1214,6 @@ need to write the whole thing by hand.
|
|||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Simple configuration:: Recommended for most users
|
* Simple configuration:: Recommended for most users
|
||||||
* Root Identifcation Heuristics:: Summary on how the root file system is identified.
|
|
||||||
* Shell-like scripting:: For power users and developers
|
* Shell-like scripting:: For power users and developers
|
||||||
* Multi-boot manual config:: For non-standard multi-OS scenarios
|
* Multi-boot manual config:: For non-standard multi-OS scenarios
|
||||||
* Embedded configuration:: Embedding a configuration file into GRUB
|
* Embedded configuration:: Embedding a configuration file into GRUB
|
||||||
@@ -1400,25 +1398,6 @@ for all respectively normal entries.
|
|||||||
The values of these options replace the values of @samp{GRUB_CMDLINE_LINUX}
|
The values of these options replace the values of @samp{GRUB_CMDLINE_LINUX}
|
||||||
and @samp{GRUB_CMDLINE_LINUX_DEFAULT} for Linux and Xen menu entries.
|
and @samp{GRUB_CMDLINE_LINUX_DEFAULT} for Linux and Xen menu entries.
|
||||||
|
|
||||||
@item GRUB_EARLY_INITRD_LINUX_CUSTOM
|
|
||||||
@itemx GRUB_EARLY_INITRD_LINUX_STOCK
|
|
||||||
List of space-separated early initrd images to be loaded from @samp{/boot}.
|
|
||||||
This is for loading things like CPU microcode, firmware, ACPI tables, crypto
|
|
||||||
keys, and so on. These early images will be loaded in the order declared,
|
|
||||||
and all will be loaded before the actual functional initrd image.
|
|
||||||
|
|
||||||
@samp{GRUB_EARLY_INITRD_LINUX_STOCK} is for your distribution to declare
|
|
||||||
images that are provided by the distribution. It should not be modified
|
|
||||||
without understanding the consequences. They will be loaded first.
|
|
||||||
|
|
||||||
@samp{GRUB_EARLY_INITRD_LINUX_CUSTOM} is for your custom created images.
|
|
||||||
|
|
||||||
The default stock images are as follows, though they may be overridden by
|
|
||||||
your distribution:
|
|
||||||
@example
|
|
||||||
intel-uc.img intel-ucode.img amd-uc.img amd-ucode.img early_ucode.cpio microcode.cpio
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@item GRUB_DISABLE_LINUX_UUID
|
@item GRUB_DISABLE_LINUX_UUID
|
||||||
Normally, @command{grub-mkconfig} will generate menu entries that use
|
Normally, @command{grub-mkconfig} will generate menu entries that use
|
||||||
universally-unique identifiers (UUIDs) to identify the root filesystem to
|
universally-unique identifiers (UUIDs) to identify the root filesystem to
|
||||||
@@ -1426,17 +1405,6 @@ the Linux kernel, using a @samp{root=UUID=...} kernel parameter. This is
|
|||||||
usually more reliable, but in some cases it may not be appropriate. To
|
usually more reliable, but in some cases it may not be appropriate. To
|
||||||
disable the use of UUIDs, set this option to @samp{true}.
|
disable the use of UUIDs, set this option to @samp{true}.
|
||||||
|
|
||||||
@item GRUB_DISABLE_LINUX_PARTUUID
|
|
||||||
If @command{grub-mkconfig} cannot identify the root filesystem via its
|
|
||||||
universally-unique indentifier (UUID), @command{grub-mkconfig} can use the UUID
|
|
||||||
of the partition containing the filesystem to identify the root filesystem to
|
|
||||||
the Linux kernel via a @samp{root=PARTUUID=...} kernel parameter. This is not
|
|
||||||
as reliable as using the filesystem UUID, but is more reliable than using the
|
|
||||||
Linux device names. When @samp{GRUB_DISABLE_LINUX_PARTUUID} is set to
|
|
||||||
@samp{false}, the Linux kernel version must be 2.6.37 (3.10 for systems using
|
|
||||||
the MSDOS partition scheme) or newer. This option defaults to @samp{true}. To
|
|
||||||
enable the use of partition UUIDs, set this option to @samp{false}.
|
|
||||||
|
|
||||||
@item GRUB_DISABLE_RECOVERY
|
@item GRUB_DISABLE_RECOVERY
|
||||||
If this option is set to @samp{true}, disable the generation of recovery
|
If this option is set to @samp{true}, disable the generation of recovery
|
||||||
mode menu entries.
|
mode menu entries.
|
||||||
@@ -1568,53 +1536,6 @@ edit the scripts in @file{/etc/grub.d} directly.
|
|||||||
menu entries; simply type the menu entries you want to add at the end of
|
menu entries; simply type the menu entries you want to add at the end of
|
||||||
that file, making sure to leave at least the first two lines intact.
|
that file, making sure to leave at least the first two lines intact.
|
||||||
|
|
||||||
@node Root Identifcation Heuristics
|
|
||||||
@section Root Identifcation Heuristics
|
|
||||||
If the target operating system uses the Linux kernel, @command{grub-mkconfig}
|
|
||||||
attempts to identify the root file system via a heuristic algoirthm. This
|
|
||||||
algorithm selects the identification method of the root file system by
|
|
||||||
considering three factors. The first is if an initrd for the target operating
|
|
||||||
system is also present. The second is @samp{GRUB_DISABLE_LINUX_UUID} and if set
|
|
||||||
to @samp{true}, prevents @command{grub-mkconfig} from identifying the root file
|
|
||||||
system by its UUID. The third is @samp{GRUB_DISABLE_LINUX_PARTUUID} and if set
|
|
||||||
to @samp{true}, prevents @command{grub-mkconfig} from identifying the root file
|
|
||||||
system via the UUID of its enclosing partition. If the variables are assigned
|
|
||||||
any other value, that value is considered equivalent to @samp{false}. The
|
|
||||||
variables are also considered to be set to @samp{false} if they are not set.
|
|
||||||
|
|
||||||
When booting, the Linux kernel will delegate the task of mounting the root
|
|
||||||
filesystem to the initrd. Most initrd images determine the root file system by
|
|
||||||
checking the Linux kernel's command-line for the @samp{root} key and use its
|
|
||||||
value as the identification method of the root file system. To improve the
|
|
||||||
reliability of booting, most initrd images also allow the root file system to be
|
|
||||||
identified by its UUID. Because of this behavior, the @command{grub-mkconfig}
|
|
||||||
command will set @samp{root} to @samp{root=UUID=...} to provide the initrd with
|
|
||||||
the filesystem UUID of the root file system.
|
|
||||||
|
|
||||||
If no initrd is detected or @samp{GRUB_DISABLE_LINUX_UUID} is set to @samp{true}
|
|
||||||
then @command{grub-command} will identify the root filesystem by setting the
|
|
||||||
kernel command-line variable @samp{root} to @samp{root=PARTUUID=...} unless
|
|
||||||
@samp{GRUB_DISABLE_LINUX_PARTUUID} is also set to @samp{true}. If
|
|
||||||
@samp{GRUB_DISABLE_LINUX_PARTUUID} is also set to @samp{true},
|
|
||||||
@command{grub-command} will identify by its Linux device name.
|
|
||||||
|
|
||||||
The following table summarizes the behavior of the @command{grub-mkconfig}
|
|
||||||
command.
|
|
||||||
|
|
||||||
@multitable {detected} {GRUB_DISABLE_LINUX_PARTUUID} {GRUB_DISABLE_LINUX_UUID} {Linux Root}
|
|
||||||
@headitem Initrd detected @tab GRUB_DISABLE_LINUX_PARTUUID Set To @tab GRUB_DISABLE_LINUX_UUID Set To @tab Linux Root ID Method
|
|
||||||
@item false @tab false @tab false @tab part UUID
|
|
||||||
@item false @tab false @tab true @tab part UUID
|
|
||||||
@item false @tab true @tab false @tab dev name
|
|
||||||
@item false @tab true @tab true @tab dev name
|
|
||||||
@item true @tab false @tab false @tab fs UUID
|
|
||||||
@item true @tab false @tab true @tab part UUID
|
|
||||||
@item true @tab true @tab false @tab fs UUID
|
|
||||||
@item true @tab true @tab true @tab dev name
|
|
||||||
@end multitable
|
|
||||||
|
|
||||||
Remember, @samp{GRUB_DISABLE_LINUX_PARTUUID} and @samp{GRUB_DISABLE_LINUX_UUID}
|
|
||||||
are also considered to be set to @samp{false} when they are unset.
|
|
||||||
|
|
||||||
@node Shell-like scripting
|
@node Shell-like scripting
|
||||||
@section Writing full configuration files directly
|
@section Writing full configuration files directly
|
||||||
@@ -2525,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
|
||||||
@@ -2621,8 +2538,6 @@ team are:
|
|||||||
85:3
|
85:3
|
||||||
@item Asus EeePC 1005PE
|
@item Asus EeePC 1005PE
|
||||||
84:1 (unconfirmed)
|
84:1 (unconfirmed)
|
||||||
@item LENOVO ThinkPad T410s (2912W1C)
|
|
||||||
101:3
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
To take full advantage of this function, install GRUB into the MBR
|
To take full advantage of this function, install GRUB into the MBR
|
||||||
@@ -3123,8 +3038,6 @@ These variables have special meaning to GRUB.
|
|||||||
* cmdpath::
|
* cmdpath::
|
||||||
* color_highlight::
|
* color_highlight::
|
||||||
* color_normal::
|
* color_normal::
|
||||||
* config_directory::
|
|
||||||
* config_file::
|
|
||||||
* debug::
|
* debug::
|
||||||
* default::
|
* default::
|
||||||
* fallback::
|
* fallback::
|
||||||
@@ -3145,7 +3058,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::
|
||||||
@@ -3211,7 +3123,7 @@ This variable contains the ``highlight'' foreground and background terminal
|
|||||||
colors, separated by a slash (@samp{/}). Setting this variable changes
|
colors, separated by a slash (@samp{/}). Setting this variable changes
|
||||||
those colors. For the available color names, @pxref{color_normal}.
|
those colors. For the available color names, @pxref{color_normal}.
|
||||||
|
|
||||||
The default is @samp{black/light-gray}.
|
The default is @samp{black/white}.
|
||||||
|
|
||||||
|
|
||||||
@node color_normal
|
@node color_normal
|
||||||
@@ -3240,7 +3152,7 @@ those colors. Each color must be a name from the following list:
|
|||||||
@item white
|
@item white
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
The default is @samp{light-gray/black}.
|
The default is @samp{white/black}.
|
||||||
|
|
||||||
The color support support varies from terminal to terminal.
|
The color support support varies from terminal to terminal.
|
||||||
|
|
||||||
@@ -3268,22 +3180,6 @@ matching colors of first half.
|
|||||||
to support whole rgb24 palette but currently there is no compelling reason
|
to support whole rgb24 palette but currently there is no compelling reason
|
||||||
to go beyond the current 16 colors.
|
to go beyond the current 16 colors.
|
||||||
|
|
||||||
|
|
||||||
@node config_directory
|
|
||||||
@subsection config_directory
|
|
||||||
|
|
||||||
This variable is automatically set by GRUB to the directory part of
|
|
||||||
current configuration file name (@pxref{config_file}).
|
|
||||||
|
|
||||||
|
|
||||||
@node config_file
|
|
||||||
@subsection config_file
|
|
||||||
|
|
||||||
This variable is automatically set by GRUB to the name of configuration file that is being
|
|
||||||
processed by commands @command{configfile} (@pxref{configfile}) or @command{normal}
|
|
||||||
(@pxref{normal}). It is restored to the previous value when command completes.
|
|
||||||
|
|
||||||
|
|
||||||
@node debug
|
@node debug
|
||||||
@subsection debug
|
@subsection debug
|
||||||
|
|
||||||
@@ -3297,10 +3193,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:
|
||||||
|
|
||||||
@@ -3316,26 +3211,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}.
|
||||||
@@ -3509,12 +3402,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
|
||||||
|
|
||||||
@@ -3931,7 +3818,6 @@ you forget a command, you can run the command @command{help}
|
|||||||
* play:: Play a tune
|
* play:: Play a tune
|
||||||
* probe:: Retrieve device info
|
* probe:: Retrieve device info
|
||||||
* pxe_unload:: Unload the PXE environment
|
* pxe_unload:: Unload the PXE environment
|
||||||
* rdmsr:: Read values from model-specific registers
|
|
||||||
* read:: Read user input
|
* read:: Read user input
|
||||||
* reboot:: Reboot your computer
|
* reboot:: Reboot your computer
|
||||||
* regexp:: Test if regular expression matches string
|
* regexp:: Test if regular expression matches string
|
||||||
@@ -3953,10 +3839,6 @@ you forget a command, you can run the command @command{help}
|
|||||||
@comment * vbeinfo:: List available video modes
|
@comment * vbeinfo:: List available video modes
|
||||||
* verify_detached:: Verify detached digital signature
|
* verify_detached:: Verify detached digital signature
|
||||||
* videoinfo:: List available video modes
|
* videoinfo:: List available video modes
|
||||||
@comment * xen_*:: Xen boot commands for AArch64
|
|
||||||
* wrmsr:: Write values to model-specific registers
|
|
||||||
* xen_hypervisor:: Load xen hypervisor binary (only on AArch64)
|
|
||||||
* xen_module:: Load xen modules for xen hypervisor (only on AArch64)
|
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
@@ -4168,15 +4050,12 @@ after @command{configfile} returns.
|
|||||||
@node cpuid
|
@node cpuid
|
||||||
@subsection cpuid
|
@subsection cpuid
|
||||||
|
|
||||||
@deffn Command cpuid [-l] [-p]
|
@deffn Command cpuid [-l]
|
||||||
Check for CPU features. This command is only available on x86 systems.
|
Check for CPU features. This command is only available on x86 systems.
|
||||||
|
|
||||||
With the @option{-l} option, return true if the CPU supports long mode
|
With the @option{-l} option, return true if the CPU supports long mode
|
||||||
(64-bit).
|
(64-bit).
|
||||||
|
|
||||||
With the @option{-p} option, return true if the CPU supports Physical
|
|
||||||
Address Extension (PAE).
|
|
||||||
|
|
||||||
If invoked without options, this command currently behaves as if it had been
|
If invoked without options, this command currently behaves as if it had been
|
||||||
invoked with @option{-l}. This may change in the future.
|
invoked with @option{-l}. This may change in the future.
|
||||||
@end deffn
|
@end deffn
|
||||||
@@ -4724,7 +4603,7 @@ range 0-0xFF (prefix with @samp{0x} to enter it in hexadecimal).
|
|||||||
When enabled, this hides the selected partition by setting the @dfn{hidden}
|
When enabled, this hides the selected partition by setting the @dfn{hidden}
|
||||||
bit in its partition type code; when disabled, unhides the selected
|
bit in its partition type code; when disabled, unhides the selected
|
||||||
partition by clearing this bit. This is useful only when booting DOS or
|
partition by clearing this bit. This is useful only when booting DOS or
|
||||||
Windows and multiple primary FAT partitions exist in one disk. See also
|
Wwindows and multiple primary FAT partitions exist in one disk. See also
|
||||||
@ref{DOS/Windows}.
|
@ref{DOS/Windows}.
|
||||||
@end table
|
@end table
|
||||||
@end deffn
|
@end deffn
|
||||||
@@ -4787,24 +4666,6 @@ This command is only available on PC BIOS systems.
|
|||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
|
||||||
@node rdmsr
|
|
||||||
@subsection rdmsr
|
|
||||||
|
|
||||||
@deffn Command: rdmsr 0xADDR [-v VARNAME]
|
|
||||||
Read a model-specific register at address 0xADDR. If the parameter
|
|
||||||
@option{-v} is used and an environment variable @var{VARNAME} is
|
|
||||||
given, set that environment variable to the value that was read.
|
|
||||||
|
|
||||||
Please note that on SMP systems, reading from a MSR that has a
|
|
||||||
scope per hardware thread, implies that the value that is returned
|
|
||||||
only applies to the particular cpu/core/thread that runs the command.
|
|
||||||
|
|
||||||
Also, if you specify a reserved or unimplemented MSR address, it will
|
|
||||||
cause a general protection exception (which is not currently being handled)
|
|
||||||
and the system will reboot.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
|
|
||||||
@node read
|
@node read
|
||||||
@subsection read
|
@subsection read
|
||||||
|
|
||||||
@@ -5158,8 +5019,6 @@ the length of @var{string} is zero
|
|||||||
@var{expression} is false
|
@var{expression} is false
|
||||||
@item @var{expression1} @code{-a} @var{expression2}
|
@item @var{expression1} @code{-a} @var{expression2}
|
||||||
both @var{expression1} and @var{expression2} are true
|
both @var{expression1} and @var{expression2} are true
|
||||||
@item @var{expression1} @var{expression2}
|
|
||||||
both @var{expression1} and @var{expression2} are true. This syntax is not POSIX-compliant and is not recommended.
|
|
||||||
@item @var{expression1} @code{-o} @var{expression2}
|
@item @var{expression1} @code{-o} @var{expression2}
|
||||||
either @var{expression1} or @var{expression2} is true
|
either @var{expression1} or @var{expression2} is true
|
||||||
@end table
|
@end table
|
||||||
@@ -5243,44 +5102,6 @@ successfully. If validation fails, it is set to a non-zero value.
|
|||||||
List available video modes. If resolution is given, show only matching modes.
|
List available video modes. If resolution is given, show only matching modes.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@node wrmsr
|
|
||||||
@subsection wrmsr
|
|
||||||
|
|
||||||
@deffn Command: wrmsr 0xADDR 0xVALUE
|
|
||||||
Write a 0xVALUE to a model-specific register at address 0xADDR.
|
|
||||||
|
|
||||||
Please note that on SMP systems, writing to a MSR that has a scope
|
|
||||||
per hardware thread, implies that the value that is written
|
|
||||||
only applies to the particular cpu/core/thread that runs the command.
|
|
||||||
|
|
||||||
Also, if you specify a reserved or unimplemented MSR address, it will
|
|
||||||
cause a general protection exception (which is not currently being handled)
|
|
||||||
and the system will reboot.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@node xen_hypervisor
|
|
||||||
@subsection xen_hypervisor
|
|
||||||
|
|
||||||
@deffn Command xen_hypervisor file [arguments] @dots{}
|
|
||||||
Load a Xen hypervisor binary from @var{file}. The rest of the line is passed
|
|
||||||
verbatim as the @dfn{kernel command-line}. Any other binaries must be
|
|
||||||
reloaded after using this command.
|
|
||||||
This command is only available on AArch64 systems.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@node xen_module
|
|
||||||
@subsection xen_module
|
|
||||||
|
|
||||||
@deffn Command xen_module [--nounzip] file [arguments]
|
|
||||||
Load a module for xen hypervisor at the booting process of xen.
|
|
||||||
The rest of the line is passed verbatim as the module command line.
|
|
||||||
Modules should be loaded in the following order:
|
|
||||||
- dom0 kernel image
|
|
||||||
- dom0 ramdisk if present
|
|
||||||
- XSM policy if present
|
|
||||||
This command is only available on AArch64 systems.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@node Networking commands
|
@node Networking commands
|
||||||
@section The list of networking commands
|
@section The list of networking commands
|
||||||
|
|
||||||
@@ -5341,10 +5162,8 @@ by @var{shortname} which can be used to remove it (@pxref{net_del_route}).
|
|||||||
Perform configuration of @var{card} using DHCP protocol. If no card name
|
Perform configuration of @var{card} using DHCP protocol. If no card name
|
||||||
is specified, try to configure all existing cards. If configuration was
|
is specified, try to configure all existing cards. If configuration was
|
||||||
successful, interface with name @var{card}@samp{:dhcp} and configured
|
successful, interface with name @var{card}@samp{:dhcp} and configured
|
||||||
address is added to @var{card}.
|
address is added to @var{card}. If server provided gateway information in
|
||||||
@comment If server provided gateway information in
|
DHCP ACK packet, it is added as route entry with the name @var{card}@samp{:dhcp:gw}. Additionally the following DHCP options are recognized and processed:
|
||||||
@comment DHCP ACK packet, it is added as route entry with the name @var{card}@samp{:dhcp:gw}.
|
|
||||||
Additionally the following DHCP options are recognized and processed:
|
|
||||||
|
|
||||||
@table @samp
|
@table @samp
|
||||||
@item 1 (Subnet Mask)
|
@item 1 (Subnet Mask)
|
||||||
@@ -5470,7 +5289,7 @@ NTFS, JFS, UDF, HFS+, exFAT, long filenames in FAT, Joliet part of
|
|||||||
ISO9660 are treated as UTF-16 as per specification. AFS and BFS are read
|
ISO9660 are treated as UTF-16 as per specification. AFS and BFS are read
|
||||||
as UTF-8, again according to specification. BtrFS, cpio, tar, squash4, minix,
|
as UTF-8, again according to specification. BtrFS, cpio, tar, squash4, minix,
|
||||||
minix2, minix3, ROMFS, ReiserFS, XFS, ext2, ext3, ext4, FAT (short names),
|
minix2, minix3, ROMFS, ReiserFS, XFS, ext2, ext3, ext4, FAT (short names),
|
||||||
F2FS, RockRidge part of ISO9660, nilfs2, UFS1, UFS2 and ZFS are assumed
|
RockRidge part of ISO9660, nilfs2, UFS1, UFS2 and ZFS are assumed
|
||||||
to be UTF-8. This might be false on systems configured with legacy charset
|
to be UTF-8. This might be false on systems configured with legacy charset
|
||||||
but as long as the charset used is superset of ASCII you should be able to
|
but as long as the charset used is superset of ASCII you should be able to
|
||||||
access ASCII-named files. And it's recommended to configure your system to use
|
access ASCII-named files. And it's recommended to configure your system to use
|
||||||
@@ -5579,8 +5398,6 @@ environment variables and commands are listed in the same order.
|
|||||||
@menu
|
@menu
|
||||||
* Authentication and authorisation:: Users and access control
|
* Authentication and authorisation:: Users and access control
|
||||||
* Using digital signatures:: Booting digitally signed code
|
* Using digital signatures:: Booting digitally signed code
|
||||||
* UEFI secure boot and shim:: Booting digitally signed PE files
|
|
||||||
* Measured Boot:: Measuring boot components
|
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node Authentication and authorisation
|
@node Authentication and authorisation
|
||||||
@@ -5609,12 +5426,10 @@ In order to enable authentication support, the @samp{superusers} environment
|
|||||||
variable must be set to a list of usernames, separated by any of spaces,
|
variable must be set to a list of usernames, separated by any of spaces,
|
||||||
commas, semicolons, pipes, or ampersands. Superusers are permitted to use
|
commas, semicolons, pipes, or ampersands. Superusers are permitted to use
|
||||||
the GRUB command line, edit menu entries, and execute any menu entry. If
|
the GRUB command line, edit menu entries, and execute any menu entry. If
|
||||||
@samp{superusers} is set, then use of the command line and editing of menu
|
@samp{superusers} is set, then use of the command line is automatically
|
||||||
entries are automatically restricted to superusers. Setting @samp{superusers}
|
restricted to superusers.
|
||||||
to empty string effectively disables both access to CLI and editing of menu
|
|
||||||
entries.
|
|
||||||
|
|
||||||
Other users may be allowed to execute specific menu entries by giving a list of
|
Other users may be given access to specific menu entries by giving a list of
|
||||||
usernames (as above) using the @option{--users} option to the
|
usernames (as above) using the @option{--users} option to the
|
||||||
@samp{menuentry} command (@pxref{menuentry}). If the @option{--unrestricted}
|
@samp{menuentry} command (@pxref{menuentry}). If the @option{--unrestricted}
|
||||||
option is used for a menu entry, then that entry is unrestricted.
|
option is used for a menu entry, then that entry is unrestricted.
|
||||||
@@ -5743,57 +5558,6 @@ or BIOS) configuration to cause the machine to boot from a different
|
|||||||
(attacker-controlled) device. GRUB is at best only one link in a
|
(attacker-controlled) device. GRUB is at best only one link in a
|
||||||
secure boot chain.
|
secure boot chain.
|
||||||
|
|
||||||
@node UEFI secure boot and shim
|
|
||||||
@section UEFI secure boot and shim support
|
|
||||||
|
|
||||||
The GRUB, except the @command{chainloader} command, works with the UEFI secure
|
|
||||||
boot and the shim. This functionality is provided by the shim_lock module. It
|
|
||||||
is recommend to build in this and other required modules into the @file{core.img}.
|
|
||||||
All modules not stored in the @file{core.img} and the ACPI tables for the
|
|
||||||
@command{acpi} command have to be signed, e.g. using PGP. Additionally, the
|
|
||||||
@command{iorw}, the @command{memrw} and the @command{wrmsr} commands are
|
|
||||||
prohibited if the UEFI secure boot is enabled. This is done due to
|
|
||||||
security reasons. All above mentioned requirements are enforced by the
|
|
||||||
shim_lock module. And itself it is a persistent module which means that
|
|
||||||
it cannot be unloaded if it was loaded into the memory.
|
|
||||||
|
|
||||||
@node Measured Boot
|
|
||||||
@section Measuring boot components
|
|
||||||
|
|
||||||
If the tpm module is loaded and the platform has a Trusted Platform Module
|
|
||||||
installed, GRUB will log each command executed and each file loaded into the
|
|
||||||
TPM event log and extend the PCR values in the TPM correspondingly. All events
|
|
||||||
will be logged into the PCR described below with a type of EV_IPL and an
|
|
||||||
event description as described below.
|
|
||||||
|
|
||||||
@multitable @columnfractions 0.3 0.1 0.6
|
|
||||||
@headitem Event type @tab PCR @tab Description
|
|
||||||
@item Command
|
|
||||||
@tab 8
|
|
||||||
@tab All executed commands (including those from configuration files) will be
|
|
||||||
logged and measured as entered with a prefix of ``grub_cmd: ``
|
|
||||||
@item Kernel command line
|
|
||||||
@tab 8
|
|
||||||
@tab Any command line passed to a kernel will be logged and measured as entered
|
|
||||||
with a prefix of ``kernel_cmdline: ''
|
|
||||||
@item Module command line
|
|
||||||
@tab 8
|
|
||||||
@tab Any command line passed to a kernel module will be logged and measured as
|
|
||||||
entered with a prefix of ``module_cmdline: ``
|
|
||||||
@item Files
|
|
||||||
@tab 9
|
|
||||||
@tab Any file read by GRUB will be logged and measured with a descriptive text
|
|
||||||
corresponding to the filename.
|
|
||||||
@end multitable
|
|
||||||
|
|
||||||
GRUB will not measure its own @file{core.img} - it is expected that firmware
|
|
||||||
will carry this out. GRUB will also not perform any measurements until the
|
|
||||||
tpm module is loaded. As such it is recommended that the tpm module be built
|
|
||||||
into @file{core.img} in order to avoid a potential gap in measurement between
|
|
||||||
@file{core.img} being loaded and the tpm module being loaded.
|
|
||||||
|
|
||||||
Measured boot is currently only supported on EFI platforms.
|
|
||||||
|
|
||||||
@node Platform limitations
|
@node Platform limitations
|
||||||
@chapter Platform limitations
|
@chapter Platform limitations
|
||||||
|
|
||||||
@@ -5845,16 +5609,6 @@ BadRAM is the ability to mark some of the RAM as ``bad''. Note: due to protocol
|
|||||||
limitations mips-loongson (with Linux protocol)
|
limitations mips-loongson (with Linux protocol)
|
||||||
and mips-qemu_mips can use only memory up to first hole.
|
and mips-qemu_mips can use only memory up to first hole.
|
||||||
|
|
||||||
Bootlocation is ability of GRUB to automatically detect where it boots from.
|
|
||||||
``disk'' means the detection is limited to detecting the disk with partition
|
|
||||||
being discovered on install time. ``partition'' means that disk and partiton
|
|
||||||
can be automatically discovered. ``file'' means that boot image file name as
|
|
||||||
well as disk and partition can be discovered. For consistency default install ignores
|
|
||||||
partition and relies solely on disk detection. If no bootlocation discovery is available
|
|
||||||
or boot and grub-root disks are different, UUID is used instead. On ARC if no device
|
|
||||||
to install to is specified, UUID is used instead as well.
|
|
||||||
|
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@item @tab BIOS @tab Coreboot @tab Multiboot @tab Qemu
|
@item @tab BIOS @tab Coreboot @tab Multiboot @tab Qemu
|
||||||
@item video @tab yes @tab yes @tab yes @tab yes
|
@item video @tab yes @tab yes @tab yes @tab yes
|
||||||
@@ -5866,14 +5620,11 @@ to install to is specified, UUID is used instead as well.
|
|||||||
@item USB @tab yes @tab yes @tab yes @tab yes
|
@item USB @tab yes @tab yes @tab yes @tab yes
|
||||||
@item chainloader @tab local @tab yes @tab yes @tab no
|
@item chainloader @tab local @tab yes @tab yes @tab no
|
||||||
@item cpuid @tab partial @tab partial @tab partial @tab partial
|
@item cpuid @tab partial @tab partial @tab partial @tab partial
|
||||||
@item rdmsr @tab partial @tab partial @tab partial @tab partial
|
|
||||||
@item wrmsr @tab partial @tab partial @tab partial @tab partial
|
|
||||||
@item hints @tab guess @tab guess @tab guess @tab guess
|
@item hints @tab guess @tab guess @tab guess @tab guess
|
||||||
@item PCI @tab yes @tab yes @tab yes @tab yes
|
@item PCI @tab yes @tab yes @tab yes @tab yes
|
||||||
@item badram @tab yes @tab yes @tab yes @tab yes
|
@item badram @tab yes @tab yes @tab yes @tab yes
|
||||||
@item compression @tab always @tab pointless @tab no @tab no
|
@item compression @tab always @tab pointless @tab no @tab no
|
||||||
@item exit @tab yes @tab no @tab no @tab no
|
@item exit @tab yes @tab no @tab no @tab no
|
||||||
@item bootlocation @tab disk @tab no @tab no @tab no
|
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@@ -5887,14 +5638,11 @@ to install to is specified, UUID is used instead as well.
|
|||||||
@item USB @tab yes @tab yes @tab yes @tab no
|
@item USB @tab yes @tab yes @tab yes @tab no
|
||||||
@item chainloader @tab local @tab local @tab no @tab local
|
@item chainloader @tab local @tab local @tab no @tab local
|
||||||
@item cpuid @tab partial @tab partial @tab partial @tab no
|
@item cpuid @tab partial @tab partial @tab partial @tab no
|
||||||
@item rdmsr @tab partial @tab partial @tab partial @tab no
|
|
||||||
@item wrmsr @tab partial @tab partial @tab partial @tab no
|
|
||||||
@item hints @tab guess @tab guess @tab good @tab guess
|
@item hints @tab guess @tab guess @tab good @tab guess
|
||||||
@item PCI @tab yes @tab yes @tab yes @tab no
|
@item PCI @tab yes @tab yes @tab yes @tab no
|
||||||
@item badram @tab yes @tab yes @tab no @tab yes
|
@item badram @tab yes @tab yes @tab no @tab yes
|
||||||
@item compression @tab no @tab no @tab no @tab no
|
@item compression @tab no @tab no @tab no @tab no
|
||||||
@item exit @tab yes @tab yes @tab yes @tab yes
|
@item exit @tab yes @tab yes @tab yes @tab yes
|
||||||
@item bootlocation @tab file @tab file @tab file, ignored @tab file
|
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@@ -5908,35 +5656,29 @@ to install to is specified, UUID is used instead as well.
|
|||||||
@item USB @tab yes @tab no @tab no @tab no
|
@item USB @tab yes @tab no @tab no @tab no
|
||||||
@item chainloader @tab yes @tab no @tab no @tab no
|
@item chainloader @tab yes @tab no @tab no @tab no
|
||||||
@item cpuid @tab no @tab no @tab no @tab no
|
@item cpuid @tab no @tab no @tab no @tab no
|
||||||
@item rdmsr @tab no @tab no @tab no @tab no
|
|
||||||
@item wrmsr @tab no @tab no @tab no @tab no
|
|
||||||
@item hints @tab good @tab good @tab good @tab no
|
@item hints @tab good @tab good @tab good @tab no
|
||||||
@item PCI @tab yes @tab no @tab no @tab no
|
@item PCI @tab yes @tab no @tab no @tab no
|
||||||
@item badram @tab yes (*) @tab no @tab no @tab no
|
@item badram @tab yes (*) @tab no @tab no @tab no
|
||||||
@item compression @tab configurable @tab no @tab no @tab configurable
|
@item compression @tab configurable @tab no @tab no @tab configurable
|
||||||
@item exit @tab no @tab yes @tab yes @tab yes
|
@item exit @tab no @tab yes @tab yes @tab yes
|
||||||
@item bootlocation @tab no @tab partition @tab file @tab file (*)
|
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@item @tab MIPS qemu @tab emu @tab xen
|
@item @tab MIPS qemu @tab emu
|
||||||
@item video @tab no @tab yes @tab no
|
@item video @tab no @tab yes
|
||||||
@item console charset @tab CP437 @tab Unicode (*) @tab ASCII
|
@item console charset @tab CP437 @tab Unicode (*)
|
||||||
@item network @tab no @tab yes @tab no
|
@item network @tab no @tab yes
|
||||||
@item ATA/AHCI @tab yes @tab no @tab no
|
@item ATA/AHCI @tab yes @tab no
|
||||||
@item AT keyboard @tab yes @tab no @tab no
|
@item AT keyboard @tab yes @tab no
|
||||||
@item Speaker @tab no @tab no @tab no
|
@item Speaker @tab no @tab no
|
||||||
@item USB @tab N/A @tab yes @tab no
|
@item USB @tab N/A @tab yes
|
||||||
@item chainloader @tab yes @tab no @tab yes
|
@item chainloader @tab yes @tab no
|
||||||
@item cpuid @tab no @tab no @tab yes
|
@item cpuid @tab no @tab no
|
||||||
@item rdmsr @tab no @tab no @tab yes
|
@item hints @tab guess @tab no
|
||||||
@item wrmsr @tab no @tab no @tab yes
|
@item PCI @tab no @tab no
|
||||||
@item hints @tab guess @tab no @tab no
|
@item badram @tab yes (*) @tab no
|
||||||
@item PCI @tab no @tab no @tab no
|
@item compression @tab configurable @tab no
|
||||||
@item badram @tab yes (*) @tab no @tab no
|
@item exit @tab no @tab yes
|
||||||
@item compression @tab configurable @tab no @tab no
|
|
||||||
@item exit @tab no @tab yes @tab no
|
|
||||||
@item bootlocation @tab no @tab file @tab no
|
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@node Platform-specific operations
|
@node Platform-specific operations
|
||||||
@@ -6106,7 +5848,7 @@ Following variables must be defined:
|
|||||||
|
|
||||||
@multitable @columnfractions .30 .65
|
@multitable @columnfractions .30 .65
|
||||||
@item GRUB_PAYLOADS_DIR @tab directory containing the required kernels
|
@item GRUB_PAYLOADS_DIR @tab directory containing the required kernels
|
||||||
@item GRUB_CBFSTOOL @tab cbfstool from Coreboot package (for coreboot platform only)
|
@item GRUB_CBFSTOOL @tab cbfstoll from Coreboot package (for coreboot platform only)
|
||||||
@item GRUB_COREBOOT_ROM @tab empty Coreboot ROM
|
@item GRUB_COREBOOT_ROM @tab empty Coreboot ROM
|
||||||
@item GRUB_QEMU_OPTS @tab additional options to be supplied to QEMU
|
@item GRUB_QEMU_OPTS @tab additional options to be supplied to QEMU
|
||||||
@end multitable
|
@end multitable
|
||||||
@@ -6131,7 +5873,6 @@ Required files are:
|
|||||||
|
|
||||||
@menu
|
@menu
|
||||||
* GRUB only offers a rescue shell::
|
* GRUB only offers a rescue shell::
|
||||||
* Firmware stalls instead of booting GRUB::
|
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
@@ -6202,17 +5943,6 @@ support has not yet been added to GRUB.
|
|||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
|
|
||||||
@node Firmware stalls instead of booting GRUB
|
|
||||||
@section Firmware stalls instead of booting GRUB
|
|
||||||
|
|
||||||
The EFI implementation of some older MacBook laptops stalls when it gets
|
|
||||||
presented a grub-mkrescue ISO image for x86_64-efi target on an USB stick.
|
|
||||||
Affected are models of year 2010 or earlier. Workaround is to zeroize the
|
|
||||||
bytes 446 to 461 of the EFI partition, where mformat has put a partition table
|
|
||||||
entry which claims partition start at block 0. This change will not hamper
|
|
||||||
bootability on other machines.
|
|
||||||
|
|
||||||
|
|
||||||
@node Invoking grub-install
|
@node Invoking grub-install
|
||||||
@chapter Invoking grub-install
|
@chapter Invoking grub-install
|
||||||
|
|
||||||
@@ -6264,21 +5994,9 @@ mounted on
|
|||||||
Recheck the device map, even if @file{/boot/grub/device.map} already
|
Recheck the device map, even if @file{/boot/grub/device.map} already
|
||||||
exists. You should use this option whenever you add/remove a disk
|
exists. You should use this option whenever you add/remove a disk
|
||||||
into/from your computer.
|
into/from your computer.
|
||||||
|
|
||||||
@item --no-rs-codes
|
|
||||||
By default on x86 BIOS systems, @command{grub-install} will use some
|
|
||||||
extra space in the bootloader embedding area for Reed-Solomon
|
|
||||||
error-correcting codes. This enables GRUB to still boot successfully
|
|
||||||
if some blocks are corrupted. The exact amount of protection offered
|
|
||||||
is dependent on available space in the embedding area. R sectors of
|
|
||||||
redundancy can tolerate up to R/2 corrupted sectors. This
|
|
||||||
redundancy may be cumbersome if attempting to cryptographically
|
|
||||||
validate the contents of the bootloader embedding area, or in more
|
|
||||||
modern systems with GPT-style partition tables (@pxref{BIOS
|
|
||||||
installation}) where GRUB does not reside in any unpartitioned space
|
|
||||||
outside of the MBR. Disable the Reed-Solomon codes with this option.
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
||||||
@node Invoking grub-mkconfig
|
@node Invoking grub-mkconfig
|
||||||
@chapter Invoking grub-mkconfig
|
@chapter Invoking grub-mkconfig
|
||||||
|
|
||||||
@@ -6655,7 +6373,7 @@ just do:
|
|||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
Also, the latest version is available using Git. See
|
Also, the latest version is available using Bazaar. See
|
||||||
@uref{http://www.gnu.org/software/grub/grub-download.html} for more
|
@uref{http://www.gnu.org/software/grub/grub-download.html} for more
|
||||||
information.
|
information.
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
[NAME]
|
|
||||||
grub-file \- check file type
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
[NAME]
|
|
||||||
grub-macbless \- bless a mac file/directory
|
|
||||||
[SEE ALSO]
|
|
||||||
.BR grub-install (1)
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
[NAME]
|
|
||||||
grub-syslinux2cfg \- transform syslinux config into grub.cfg
|
|
||||||
[SEE ALSO]
|
|
||||||
.BR grub-menulst2cfg (8)
|
|
||||||
@@ -178,12 +178,6 @@ for dev in (*); do
|
|||||||
# uuid: filesystem UUID
|
# uuid: filesystem UUID
|
||||||
probe -s uuid -u $dev
|
probe -s uuid -u $dev
|
||||||
|
|
||||||
if test -f ($device)/isolinux/isolinux.cfg ; then
|
|
||||||
menuentry "ISOLINUX config (on $device)" $device {
|
|
||||||
set root=$2
|
|
||||||
syslinux_configfile -i /isolinux/isolinux.cfg
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then
|
if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then
|
||||||
menuentry "Windows Vista bootmgr (on $device)" $device {
|
menuentry "Windows Vista bootmgr (on $device)" $device {
|
||||||
set root=$2
|
set root=$2
|
||||||
|
|||||||
@@ -28,11 +28,10 @@ import re
|
|||||||
|
|
||||||
GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot",
|
GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot",
|
||||||
"i386_multiboot", "i386_ieee1275", "x86_64_efi",
|
"i386_multiboot", "i386_ieee1275", "x86_64_efi",
|
||||||
"i386_xen", "x86_64_xen", "i386_xen_pvh",
|
"i386_xen", "x86_64_xen",
|
||||||
"mips_loongson", "sparc64_ieee1275",
|
"mips_loongson", "sparc64_ieee1275",
|
||||||
"powerpc_ieee1275", "mips_arc", "ia64_efi",
|
"powerpc_ieee1275", "mips_arc", "ia64_efi",
|
||||||
"mips_qemu_mips", "arm_uboot", "arm_efi", "arm64_efi",
|
"mips_qemu_mips", "arm_uboot", "arm_efi", "arm64_efi" ]
|
||||||
"arm_coreboot", "riscv32_efi", "riscv64_efi" ]
|
|
||||||
|
|
||||||
GROUPS = {}
|
GROUPS = {}
|
||||||
|
|
||||||
@@ -45,18 +44,14 @@ GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"]
|
|||||||
GROUPS["mips"] = [ "mips_loongson", "mips_qemu_mips", "mips_arc" ]
|
GROUPS["mips"] = [ "mips_loongson", "mips_qemu_mips", "mips_arc" ]
|
||||||
GROUPS["sparc64"] = [ "sparc64_ieee1275" ]
|
GROUPS["sparc64"] = [ "sparc64_ieee1275" ]
|
||||||
GROUPS["powerpc"] = [ "powerpc_ieee1275" ]
|
GROUPS["powerpc"] = [ "powerpc_ieee1275" ]
|
||||||
GROUPS["arm"] = [ "arm_uboot", "arm_efi", "arm_coreboot" ]
|
GROUPS["arm"] = [ "arm_uboot", "arm_efi" ]
|
||||||
GROUPS["arm64"] = [ "arm64_efi" ]
|
GROUPS["arm64"] = [ "arm64_efi" ]
|
||||||
GROUPS["riscv32"] = [ "riscv32_efi" ]
|
|
||||||
GROUPS["riscv64"] = [ "riscv64_efi" ]
|
|
||||||
|
|
||||||
# Groups based on firmware
|
# Groups based on firmware
|
||||||
GROUPS["efi"] = [ "i386_efi", "x86_64_efi", "ia64_efi", "arm_efi", "arm64_efi",
|
GROUPS["efi"] = [ "i386_efi", "x86_64_efi", "ia64_efi", "arm_efi", "arm64_efi" ]
|
||||||
"riscv32_efi", "riscv64_efi" ]
|
|
||||||
GROUPS["ieee1275"] = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ]
|
GROUPS["ieee1275"] = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ]
|
||||||
GROUPS["uboot"] = [ "arm_uboot" ]
|
GROUPS["uboot"] = [ "arm_uboot" ]
|
||||||
GROUPS["xen"] = [ "i386_xen", "x86_64_xen" ]
|
GROUPS["xen"] = [ "i386_xen", "x86_64_xen" ]
|
||||||
GROUPS["coreboot"] = [ "i386_coreboot", "arm_coreboot" ]
|
|
||||||
|
|
||||||
# emu is a special case so many core functionality isn't needed on this platform
|
# emu is a special case so many core functionality isn't needed on this platform
|
||||||
GROUPS["noemu"] = GRUB_PLATFORMS[:]; GROUPS["noemu"].remove("emu")
|
GROUPS["noemu"] = GRUB_PLATFORMS[:]; GROUPS["noemu"].remove("emu")
|
||||||
@@ -66,28 +61,22 @@ GROUPS["cmos"] = GROUPS["x86"][:] + ["mips_loongson", "mips_qemu_mips",
|
|||||||
"sparc64_ieee1275", "powerpc_ieee1275"]
|
"sparc64_ieee1275", "powerpc_ieee1275"]
|
||||||
GROUPS["cmos"].remove("i386_efi"); GROUPS["cmos"].remove("x86_64_efi");
|
GROUPS["cmos"].remove("i386_efi"); GROUPS["cmos"].remove("x86_64_efi");
|
||||||
GROUPS["pci"] = GROUPS["x86"] + ["mips_loongson"]
|
GROUPS["pci"] = GROUPS["x86"] + ["mips_loongson"]
|
||||||
GROUPS["usb"] = GROUPS["pci"] + ["arm_coreboot"]
|
GROUPS["usb"] = GROUPS["pci"]
|
||||||
|
|
||||||
# If gfxterm is main output console integrate it into kernel
|
# If gfxterm is main output console integrate it into kernel
|
||||||
GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot", "arm_coreboot" ]
|
GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot" ]
|
||||||
GROUPS["videomodules"] = GRUB_PLATFORMS[:];
|
GROUPS["videomodules"] = GRUB_PLATFORMS[:];
|
||||||
for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i)
|
for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i)
|
||||||
|
|
||||||
# Similar for terminfo
|
# Similar for terminfo
|
||||||
GROUPS["terminfoinkernel"] = [ "emu", "mips_loongson", "mips_arc", "mips_qemu_mips", "i386_xen_pvh" ] + GROUPS["xen"] + GROUPS["ieee1275"] + GROUPS["uboot"];
|
GROUPS["terminfoinkernel"] = [ "emu", "mips_loongson", "mips_arc", "mips_qemu_mips" ] + GROUPS["xen"] + GROUPS["ieee1275"] + GROUPS["uboot"];
|
||||||
GROUPS["terminfomodule"] = GRUB_PLATFORMS[:];
|
GROUPS["terminfomodule"] = GRUB_PLATFORMS[:];
|
||||||
for i in GROUPS["terminfoinkernel"]: GROUPS["terminfomodule"].remove(i)
|
for i in GROUPS["terminfoinkernel"]: GROUPS["terminfomodule"].remove(i)
|
||||||
|
|
||||||
# Flattened Device Trees (FDT)
|
# Flattened Device Trees (FDT)
|
||||||
GROUPS["fdt"] = [ "arm64_efi", "arm_uboot", "arm_efi", "riscv32_efi", "riscv64_efi" ]
|
GROUPS["fdt"] = [ "arm64_efi", "arm_uboot", "arm_efi" ]
|
||||||
|
|
||||||
# Needs software helpers for division
|
# Miscelaneous groups schedulded to disappear in future
|
||||||
# Must match GRUB_DIVISION_IN_SOFTWARE in misc.h
|
|
||||||
GROUPS["softdiv"] = GROUPS["arm"] + ["ia64_efi"] + GROUPS["riscv32"]
|
|
||||||
GROUPS["no_softdiv"] = GRUB_PLATFORMS[:]
|
|
||||||
for i in GROUPS["softdiv"]: GROUPS["no_softdiv"].remove(i)
|
|
||||||
|
|
||||||
# Miscellaneous groups scheduled to disappear in future
|
|
||||||
GROUPS["i386_coreboot_multiboot_qemu"] = ["i386_coreboot", "i386_multiboot", "i386_qemu"]
|
GROUPS["i386_coreboot_multiboot_qemu"] = ["i386_coreboot", "i386_multiboot", "i386_qemu"]
|
||||||
GROUPS["nopc"] = GRUB_PLATFORMS[:]; GROUPS["nopc"].remove("i386_pc")
|
GROUPS["nopc"] = GRUB_PLATFORMS[:]; GROUPS["nopc"].remove("i386_pc")
|
||||||
|
|
||||||
@@ -611,7 +600,7 @@ def foreach_enabled_platform(defn, closure):
|
|||||||
# enable = emu;
|
# enable = emu;
|
||||||
# enable = i386;
|
# enable = i386;
|
||||||
# enable = mips_loongson;
|
# enable = mips_loongson;
|
||||||
# emu_condition = COND_GRUB_EMU_SDL;
|
# emu_condition = COND_GRUB_EMU_USB;
|
||||||
# };
|
# };
|
||||||
#
|
#
|
||||||
def under_platform_specific_conditionals(defn, platform, closure):
|
def under_platform_specific_conditionals(defn, platform, closure):
|
||||||
@@ -729,16 +718,11 @@ def kernel(defn, platform):
|
|||||||
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
||||||
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $< $@; \
|
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $< $@; \
|
||||||
elif test ! -z '$(TARGET_OBJ2ELF)'; then \
|
elif test ! -z '$(TARGET_OBJ2ELF)'; then \
|
||||||
$(TARGET_OBJ2ELF) $< $@ || (rm -f $@; exit 1); \
|
cp $< $@.bin; $(TARGET_OBJ2ELF) $@.bin && cp $@.bin $@ || (rm -f $@.bin; exit 1); \
|
||||||
else cp $< $@; fi""",
|
else cp $< $@; fi""",
|
||||||
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
||||||
$(TARGET_STRIP) -S -x $(""" + cname(defn) + """) -o $@.bin $<; \
|
$(TARGET_STRIP) -S -x $(""" + cname(defn) + """) -o $@.bin $<; \
|
||||||
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; \
|
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; \
|
||||||
rm -f $@.bin; \
|
|
||||||
elif test ! -z '$(TARGET_OBJ2ELF)'; then \
|
|
||||||
""" + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@.bin $< && \
|
|
||||||
$(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); \
|
|
||||||
rm -f $@.bin; \
|
|
||||||
else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \
|
else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \
|
||||||
fi"""))
|
fi"""))
|
||||||
|
|
||||||
@@ -766,7 +750,7 @@ def image(defn, platform):
|
|||||||
if test x$(TARGET_APPLE_LINKER) = x1; then \
|
if test x$(TARGET_APPLE_LINKER) = x1; then \
|
||||||
$(MACHO2IMG) $< $@; \
|
$(MACHO2IMG) $< $@; \
|
||||||
else \
|
else \
|
||||||
$(TARGET_OBJCOPY) $(""" + cname(defn) + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; \
|
$(TARGET_OBJCOPY) $(""" + cname(defn) + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@; \
|
||||||
fi
|
fi
|
||||||
""")
|
""")
|
||||||
|
|
||||||
@@ -841,20 +825,6 @@ def data(defn, platform):
|
|||||||
var_add("dist_" + installdir(defn) + "_DATA", platform_sources(defn, platform))
|
var_add("dist_" + installdir(defn) + "_DATA", platform_sources(defn, platform))
|
||||||
gvar_add("dist_noinst_DATA", extra_dist(defn))
|
gvar_add("dist_noinst_DATA", extra_dist(defn))
|
||||||
|
|
||||||
def transform_data(defn, platform):
|
|
||||||
name = defn['name']
|
|
||||||
|
|
||||||
var_add(installdir(defn) + "_DATA", name)
|
|
||||||
|
|
||||||
rule(name, "$(top_builddir)/config.status " + platform_sources(defn, platform) + platform_dependencies(defn, platform), """
|
|
||||||
(for x in """ + platform_sources(defn, platform) + """; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:-
|
|
||||||
chmod a+x """ + name + """
|
|
||||||
""")
|
|
||||||
|
|
||||||
gvar_add("CLEANFILES", name)
|
|
||||||
gvar_add("EXTRA_DIST", extra_dist(defn))
|
|
||||||
gvar_add("dist_noinst_DATA", platform_sources(defn, platform))
|
|
||||||
|
|
||||||
def script(defn, platform):
|
def script(defn, platform):
|
||||||
name = defn['name']
|
name = defn['name']
|
||||||
|
|
||||||
@@ -902,7 +872,6 @@ rules("library", library)
|
|||||||
rules("program", program)
|
rules("program", program)
|
||||||
rules("script", script)
|
rules("script", script)
|
||||||
rules("data", data)
|
rules("data", data)
|
||||||
rules("transform_data", transform_data)
|
|
||||||
|
|
||||||
write_output(section='decl')
|
write_output(section='decl')
|
||||||
write_output()
|
write_output()
|
||||||
+25
-93
@@ -26,26 +26,17 @@ CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin
|
|||||||
CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM)
|
CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM)
|
||||||
CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM)
|
||||||
|
|
||||||
build-grub-pep2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^
|
||||||
CLEANFILES += build-grub-pep2elf$(BUILD_EXEEXT)
|
|
||||||
|
|
||||||
build-grub-pe2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^
|
|
||||||
CLEANFILES += build-grub-pe2elf$(BUILD_EXEEXT)
|
|
||||||
|
|
||||||
# gentrigtables
|
# gentrigtables
|
||||||
gentrigtables$(BUILD_EXEEXT): gentrigtables.c
|
gentrigtables: gentrigtables.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM)
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< $(BUILD_LIBM)
|
||||||
CLEANFILES += gentrigtables$(BUILD_EXEEXT)
|
CLEANFILES += gentrigtables
|
||||||
|
|
||||||
build-grub-module-verifier$(BUILD_EXEEXT): $(top_srcdir)/util/grub-module-verifier.c $(top_srcdir)/util/grub-module-verifier32.c $(top_srcdir)/util/grub-module-verifier64.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-module-verifier\" $^
|
|
||||||
CLEANFILES += build-grub-module-verifier$(BUILD_EXEEXT)
|
|
||||||
|
|
||||||
# trigtables.c
|
# trigtables.c
|
||||||
trigtables.c: gentrigtables$(BUILD_EXEEXT) gentrigtables.c $(top_srcdir)/configure.ac
|
trigtables.c: gentrigtables gentrigtables.c $(top_srcdir)/configure.ac
|
||||||
./gentrigtables$(BUILD_EXEEXT) > $@
|
./gentrigtables > $@
|
||||||
CLEANFILES += trigtables.c
|
CLEANFILES += trigtables.c
|
||||||
|
|
||||||
# XXX Use Automake's LEX & YACC support
|
# XXX Use Automake's LEX & YACC support
|
||||||
@@ -80,11 +71,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h
|
||||||
if COND_emu
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt-emu.h
|
|
||||||
else
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt.h
|
|
||||||
endif
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h
|
||||||
@@ -92,6 +78,9 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h
|
||||||
|
if !COND_clang
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libgcc.h
|
||||||
|
endif
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h
|
||||||
|
|
||||||
if COND_i386_pc
|
if COND_i386_pc
|
||||||
@@ -101,44 +90,27 @@ KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/int.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_xen_pvh
|
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/int.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_i386_efi
|
if COND_i386_efi
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/coreboot/lbio.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/i386/pc/int.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_multiboot
|
if COND_i386_multiboot
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/i386/pc/int.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_qemu
|
if COND_i386_qemu
|
||||||
@@ -147,7 +119,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_ieee1275
|
if COND_i386_ieee1275
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
||||||
@@ -156,7 +127,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_xen
|
if COND_i386_xen
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
||||||
@@ -175,19 +145,15 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_x86_64_efi
|
if COND_x86_64_efi
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_ia64_efi
|
if COND_ia64_efi
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_mips
|
if COND_mips
|
||||||
@@ -203,6 +169,7 @@ endif
|
|||||||
if COND_mips_qemu_mips
|
if COND_mips_qemu_mips
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
|
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/cache.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/serial.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/serial.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
||||||
@@ -214,6 +181,7 @@ if COND_mips_loongson
|
|||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
|
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/time.h
|
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/time.h
|
||||||
|
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/cache.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
||||||
@@ -254,46 +222,17 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/uboot.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_arm_coreboot
|
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fdt.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/dma.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/coreboot/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fdtbus.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_arm_efi
|
if COND_arm_efi
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/efi/loader.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_arm64_efi
|
if COND_arm64_efi
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_riscv32_efi
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_riscv64_efi
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_emu
|
if COND_emu
|
||||||
@@ -306,6 +245,9 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
|||||||
if COND_GRUB_EMU_SDL
|
if COND_GRUB_EMU_SDL
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h
|
||||||
endif
|
endif
|
||||||
|
if COND_GRUB_EMU_USB
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libusb.h
|
||||||
|
endif
|
||||||
if COND_GRUB_EMU_PCI
|
if COND_GRUB_EMU_PCI
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h
|
||||||
endif
|
endif
|
||||||
@@ -321,7 +263,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
|
||||||
@@ -349,12 +291,12 @@ grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h
|
|||||||
kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h
|
kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h
|
||||||
grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h
|
grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h
|
||||||
|
|
||||||
grub_emu_init.h: genemuinitheader.sh $(MODULE_FILES)
|
grub_emu_init.h: genemuinitheader.sh $(MOD_FILES)
|
||||||
rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@
|
rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@
|
||||||
CLEANFILES += grub_emu_init.h
|
CLEANFILES += grub_emu_init.h
|
||||||
|
|
||||||
grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MODULE_FILES)
|
grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MOD_FILES)
|
||||||
rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@
|
rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@
|
||||||
CLEANFILES += grub_emu_init.c
|
CLEANFILES += grub_emu_init.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -401,16 +343,6 @@ terminal.lst: $(MARKER_FILES)
|
|||||||
platform_DATA += terminal.lst
|
platform_DATA += terminal.lst
|
||||||
CLEANFILES += terminal.lst
|
CLEANFILES += terminal.lst
|
||||||
|
|
||||||
fdt.lst: $(MARKER_FILES)
|
|
||||||
(for pp in $^; do \
|
|
||||||
b=`basename $$pp .marker`; \
|
|
||||||
sed -n \
|
|
||||||
-e "/FDT_DRIVER_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/i\1: $$b/;p;}" \
|
|
||||||
-e "/FDT_DRIVER_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/o\1: $$b/;p;}" $$pp; \
|
|
||||||
done) | sort -u > $@
|
|
||||||
platform_DATA += fdt.lst
|
|
||||||
CLEANFILES += fdt.lst
|
|
||||||
|
|
||||||
parttool.lst: $(MARKER_FILES)
|
parttool.lst: $(MARKER_FILES)
|
||||||
(for pp in $^; do \
|
(for pp in $^; do \
|
||||||
b=`basename $$pp .marker`; \
|
b=`basename $$pp .marker`; \
|
||||||
@@ -449,7 +381,7 @@ moddep.lst: syminfo.lst genmoddep.awk video.lst
|
|||||||
platform_DATA += moddep.lst
|
platform_DATA += moddep.lst
|
||||||
CLEANFILES += config.log syminfo.lst moddep.lst
|
CLEANFILES += config.log syminfo.lst moddep.lst
|
||||||
|
|
||||||
$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT) build-grub-module-verifier$(BUILD_EXEEXT)
|
$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT)
|
||||||
TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@
|
TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@
|
||||||
platform_DATA += $(MOD_FILES)
|
platform_DATA += $(MOD_FILES)
|
||||||
platform_DATA += modinfo.sh
|
platform_DATA += modinfo.sh
|
||||||
|
|||||||
+98
-348
@@ -1,43 +1,43 @@
|
|||||||
AutoGen definitions Makefile.tpl;
|
AutoGen definitions Makefile.tpl;
|
||||||
|
|
||||||
transform_data = {
|
script = {
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
name = gensyminfo.sh;
|
name = gensyminfo.sh;
|
||||||
common = gensyminfo.sh.in;
|
common = gensyminfo.sh.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
transform_data = {
|
script = {
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
name = genmod.sh;
|
name = genmod.sh;
|
||||||
common = genmod.sh.in;
|
common = genmod.sh.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
transform_data = {
|
script = {
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
name = modinfo.sh;
|
name = modinfo.sh;
|
||||||
common = modinfo.sh.in;
|
common = modinfo.sh.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
transform_data = {
|
script = {
|
||||||
installdir = platform;
|
installdir = platform;
|
||||||
name = gmodule.pl;
|
name = gmodule.pl;
|
||||||
common = gmodule.pl.in;
|
common = gmodule.pl.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
transform_data = {
|
script = {
|
||||||
installdir = platform;
|
installdir = platform;
|
||||||
name = gdb_grub;
|
name = gdb_grub;
|
||||||
common = gdb_grub.in;
|
common = gdb_grub.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
transform_data = {
|
script = {
|
||||||
installdir = platform;
|
installdir = platform;
|
||||||
name = grub.chrp;
|
name = grub.chrp;
|
||||||
common = boot/powerpc/grub.chrp.in;
|
common = boot/powerpc/grub.chrp.in;
|
||||||
enable = powerpc_ieee1275;
|
enable = powerpc_ieee1275;
|
||||||
};
|
};
|
||||||
|
|
||||||
transform_data = {
|
script = {
|
||||||
installdir = platform;
|
installdir = platform;
|
||||||
name = bootinfo.txt;
|
name = bootinfo.txt;
|
||||||
common = boot/powerpc/bootinfo.txt.in;
|
common = boot/powerpc/bootinfo.txt.in;
|
||||||
@@ -59,35 +59,28 @@ kernel = {
|
|||||||
ia64_efi_ldflags = '-Wl,-r,-d';
|
ia64_efi_ldflags = '-Wl,-r,-d';
|
||||||
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
|
x86_64_xen_ldflags = '-Wl,-Ttext=0';
|
||||||
|
x86_64_xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
i386_xen_ldflags = '-Wl,-Ttext=0';
|
||||||
|
i386_xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
|
||||||
arm_efi_ldflags = '-Wl,-r,-d';
|
arm_efi_ldflags = '-Wl,-r,-d';
|
||||||
arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
arm64_efi_ldflags = '-Wl,-r,-d';
|
arm64_efi_ldflags = '-Wl,-r,-d';
|
||||||
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
riscv32_efi_ldflags = '-Wl,-r,-d';
|
|
||||||
riscv32_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
|
||||||
|
|
||||||
riscv64_efi_ldflags = '-Wl,-r,-d';
|
|
||||||
riscv64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
|
||||||
|
|
||||||
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
||||||
i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
|
||||||
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
|
||||||
i386_coreboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
|
||||||
i386_coreboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
|
||||||
i386_multiboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
|
||||||
i386_multiboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
|
||||||
i386_ieee1275_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
|
||||||
i386_ieee1275_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x10000';
|
|
||||||
i386_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
|
||||||
i386_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
|
|
||||||
x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
|
||||||
x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
|
|
||||||
i386_xen_pvh_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
|
||||||
i386_xen_pvh_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x100000';
|
|
||||||
|
|
||||||
|
i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
|
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
|
||||||
|
|
||||||
|
ldadd = '$(LDADD_KERNEL)';
|
||||||
|
|
||||||
|
i386_coreboot_ldflags = '-Wl,-Ttext=0x8200';
|
||||||
|
i386_multiboot_ldflags = '-Wl,-Ttext=0x8200';
|
||||||
|
i386_ieee1275_ldflags = '-Wl,-Ttext=0x10000';
|
||||||
mips_loongson_ldflags = '-Wl,-Ttext,0x80200000';
|
mips_loongson_ldflags = '-Wl,-Ttext,0x80200000';
|
||||||
powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
|
powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
|
||||||
sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400';
|
sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400';
|
||||||
@@ -98,17 +91,14 @@ kernel = {
|
|||||||
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
||||||
emu_cflags = '$(CFLAGS_GNULIB)';
|
emu_cflags = '$(CFLAGS_GNULIB)';
|
||||||
emu_cppflags = '$(CPPFLAGS_GNULIB)';
|
emu_cppflags = '$(CPPFLAGS_GNULIB)';
|
||||||
arm_uboot_ldflags = '-Wl,-r,-d';
|
arm_uboot_ldflags = '-Wl,-Ttext=0x08000000';
|
||||||
arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
arm_coreboot_ldflags = '-Wl,-r,-d';
|
|
||||||
arm_coreboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
|
||||||
|
|
||||||
i386_pc_startup = kern/i386/pc/startup.S;
|
i386_pc_startup = kern/i386/pc/startup.S;
|
||||||
i386_efi_startup = kern/i386/efi/startup.S;
|
i386_efi_startup = kern/i386/efi/startup.S;
|
||||||
x86_64_efi_startup = kern/x86_64/efi/startup.S;
|
x86_64_efi_startup = kern/x86_64/efi/startup.S;
|
||||||
i386_xen_startup = kern/i386/xen/startup.S;
|
i386_xen_startup = kern/i386/xen/startup.S;
|
||||||
x86_64_xen_startup = kern/x86_64/xen/startup.S;
|
x86_64_xen_startup = kern/x86_64/xen/startup.S;
|
||||||
i386_xen_pvh_startup = kern/i386/xen/startup_pvh.S;
|
|
||||||
i386_qemu_startup = kern/i386/qemu/startup.S;
|
i386_qemu_startup = kern/i386/qemu/startup.S;
|
||||||
i386_ieee1275_startup = kern/i386/ieee1275/startup.S;
|
i386_ieee1275_startup = kern/i386/ieee1275/startup.S;
|
||||||
i386_coreboot_startup = kern/i386/coreboot/startup.S;
|
i386_coreboot_startup = kern/i386/coreboot/startup.S;
|
||||||
@@ -116,12 +106,9 @@ kernel = {
|
|||||||
mips_startup = kern/mips/startup.S;
|
mips_startup = kern/mips/startup.S;
|
||||||
sparc64_ieee1275_startup = kern/sparc64/ieee1275/crt0.S;
|
sparc64_ieee1275_startup = kern/sparc64/ieee1275/crt0.S;
|
||||||
powerpc_ieee1275_startup = kern/powerpc/ieee1275/startup.S;
|
powerpc_ieee1275_startup = kern/powerpc/ieee1275/startup.S;
|
||||||
arm_uboot_startup = kern/arm/startup.S;
|
arm_uboot_startup = kern/arm/uboot/startup.S;
|
||||||
arm_coreboot_startup = kern/arm/startup.S;
|
|
||||||
arm_efi_startup = kern/arm/efi/startup.S;
|
arm_efi_startup = kern/arm/efi/startup.S;
|
||||||
arm64_efi_startup = kern/arm64/efi/startup.S;
|
arm64_efi_startup = kern/arm64/efi/startup.S;
|
||||||
riscv32_efi_startup = kern/riscv/efi/startup.S;
|
|
||||||
riscv64_efi_startup = kern/riscv/efi/startup.S;
|
|
||||||
|
|
||||||
common = kern/command.c;
|
common = kern/command.c;
|
||||||
common = kern/corecmd.c;
|
common = kern/corecmd.c;
|
||||||
@@ -141,7 +128,6 @@ kernel = {
|
|||||||
common = kern/rescue_reader.c;
|
common = kern/rescue_reader.c;
|
||||||
common = kern/term.c;
|
common = kern/term.c;
|
||||||
|
|
||||||
noemu = kern/compiler-rt.c;
|
|
||||||
noemu = kern/mm.c;
|
noemu = kern/mm.c;
|
||||||
noemu = kern/time.c;
|
noemu = kern/time.c;
|
||||||
noemu = kern/generic/millisleep.c;
|
noemu = kern/generic/millisleep.c;
|
||||||
@@ -163,58 +149,28 @@ kernel = {
|
|||||||
uboot = kern/uboot/init.c;
|
uboot = kern/uboot/init.c;
|
||||||
uboot = kern/uboot/hw.c;
|
uboot = kern/uboot/hw.c;
|
||||||
uboot = term/uboot/console.c;
|
uboot = term/uboot/console.c;
|
||||||
arm_uboot = kern/arm/uboot/init.c;
|
|
||||||
arm_uboot = kern/arm/uboot/uboot.S;
|
|
||||||
|
|
||||||
arm_coreboot = kern/arm/coreboot/init.c;
|
|
||||||
arm_coreboot = kern/arm/coreboot/timer.c;
|
|
||||||
arm_coreboot = kern/arm/coreboot/coreboot.S;
|
|
||||||
arm_coreboot = lib/fdt.c;
|
|
||||||
arm_coreboot = bus/fdt.c;
|
|
||||||
arm_coreboot = term/ps2.c;
|
|
||||||
arm_coreboot = term/arm/pl050.c;
|
|
||||||
arm_coreboot = term/arm/cros.c;
|
|
||||||
arm_coreboot = term/arm/cros_ec.c;
|
|
||||||
arm_coreboot = bus/spi/rk3288_spi.c;
|
|
||||||
arm_coreboot = commands/keylayouts.c;
|
|
||||||
arm_coreboot = kern/arm/coreboot/dma.c;
|
|
||||||
|
|
||||||
terminfoinkernel = term/terminfo.c;
|
terminfoinkernel = term/terminfo.c;
|
||||||
terminfoinkernel = term/tparm.c;
|
terminfoinkernel = term/tparm.c;
|
||||||
terminfoinkernel = commands/extcmd.c;
|
terminfoinkernel = commands/extcmd.c;
|
||||||
terminfoinkernel = lib/arg.c;
|
terminfoinkernel = lib/arg.c;
|
||||||
|
|
||||||
softdiv = lib/division.c;
|
|
||||||
|
|
||||||
i386 = kern/i386/dl.c;
|
i386 = kern/i386/dl.c;
|
||||||
i386_xen = kern/i386/dl.c;
|
i386_xen = kern/i386/dl.c;
|
||||||
i386_xen_pvh = kern/i386/dl.c;
|
|
||||||
|
|
||||||
i386_coreboot = kern/i386/coreboot/init.c;
|
i386_coreboot = kern/i386/coreboot/init.c;
|
||||||
i386_multiboot = kern/i386/coreboot/init.c;
|
i386_multiboot = kern/i386/coreboot/init.c;
|
||||||
i386_qemu = kern/i386/qemu/init.c;
|
i386_qemu = kern/i386/qemu/init.c;
|
||||||
i386_coreboot_multiboot_qemu = term/i386/pc/vga_text.c;
|
i386_coreboot_multiboot_qemu = term/i386/pc/vga_text.c;
|
||||||
coreboot = video/coreboot/cbfb.c;
|
i386_coreboot = video/i386/coreboot/cbfb.c;
|
||||||
|
|
||||||
efi = disk/efi/efidisk.c;
|
efi = disk/efi/efidisk.c;
|
||||||
efi = kern/efi/efi.c;
|
efi = kern/efi/efi.c;
|
||||||
efi = kern/efi/init.c;
|
efi = kern/efi/init.c;
|
||||||
efi = kern/efi/mm.c;
|
efi = kern/efi/mm.c;
|
||||||
efi = term/efi/console.c;
|
efi = term/efi/console.c;
|
||||||
efi = kern/acpi.c;
|
|
||||||
efi = kern/efi/acpi.c;
|
|
||||||
i386_coreboot = kern/i386/pc/acpi.c;
|
|
||||||
i386_multiboot = kern/i386/pc/acpi.c;
|
|
||||||
i386_coreboot = kern/acpi.c;
|
|
||||||
i386_multiboot = kern/acpi.c;
|
|
||||||
|
|
||||||
x86 = kern/i386/tsc.c;
|
x86 = kern/i386/tsc.c;
|
||||||
x86 = kern/i386/tsc_pit.c;
|
|
||||||
i386_efi = kern/i386/efi/tsc.c;
|
|
||||||
x86_64_efi = kern/i386/efi/tsc.c;
|
|
||||||
i386_efi = kern/i386/tsc_pmtimer.c;
|
|
||||||
i386_coreboot = kern/i386/tsc_pmtimer.c;
|
|
||||||
x86_64_efi = kern/i386/tsc_pmtimer.c;
|
|
||||||
|
|
||||||
i386_efi = kern/i386/efi/init.c;
|
i386_efi = kern/i386/efi/init.c;
|
||||||
i386_efi = bus/pci.c;
|
i386_efi = bus/pci.c;
|
||||||
@@ -226,7 +182,6 @@ kernel = {
|
|||||||
x86_64_efi = bus/pci.c;
|
x86_64_efi = bus/pci.c;
|
||||||
|
|
||||||
xen = kern/i386/tsc.c;
|
xen = kern/i386/tsc.c;
|
||||||
xen = kern/i386/xen/tsc.c;
|
|
||||||
x86_64_xen = kern/x86_64/xen/hypercall.S;
|
x86_64_xen = kern/x86_64/xen/hypercall.S;
|
||||||
i386_xen = kern/i386/xen/hypercall.S;
|
i386_xen = kern/i386/xen/hypercall.S;
|
||||||
xen = kern/xen/init.c;
|
xen = kern/xen/init.c;
|
||||||
@@ -234,31 +189,15 @@ kernel = {
|
|||||||
xen = disk/xen/xendisk.c;
|
xen = disk/xen/xendisk.c;
|
||||||
xen = commands/boot.c;
|
xen = commands/boot.c;
|
||||||
|
|
||||||
i386_xen_pvh = commands/boot.c;
|
|
||||||
i386_xen_pvh = disk/xen/xendisk.c;
|
|
||||||
i386_xen_pvh = kern/i386/tsc.c;
|
|
||||||
i386_xen_pvh = kern/i386/xen/tsc.c;
|
|
||||||
i386_xen_pvh = kern/i386/xen/pvh.c;
|
|
||||||
i386_xen_pvh = kern/xen/init.c;
|
|
||||||
i386_xen_pvh = term/xen/console.c;
|
|
||||||
|
|
||||||
ia64_efi = kern/ia64/efi/startup.S;
|
ia64_efi = kern/ia64/efi/startup.S;
|
||||||
ia64_efi = kern/ia64/efi/init.c;
|
ia64_efi = kern/ia64/efi/init.c;
|
||||||
ia64_efi = kern/ia64/dl.c;
|
ia64_efi = kern/ia64/dl.c;
|
||||||
ia64_efi = kern/ia64/dl_helper.c;
|
ia64_efi = kern/ia64/dl_helper.c;
|
||||||
ia64_efi = kern/ia64/cache.c;
|
|
||||||
|
|
||||||
arm_efi = kern/arm/efi/init.c;
|
arm_efi = kern/arm/efi/init.c;
|
||||||
arm_efi = kern/efi/fdt.c;
|
arm_efi = kern/arm/efi/misc.c;
|
||||||
|
|
||||||
arm64_efi = kern/arm64/efi/init.c;
|
arm64_efi = kern/arm/efi/init.c;
|
||||||
arm64_efi = kern/efi/fdt.c;
|
|
||||||
|
|
||||||
riscv32_efi = kern/riscv/efi/init.c;
|
|
||||||
riscv32_efi = kern/efi/fdt.c;
|
|
||||||
|
|
||||||
riscv64_efi = kern/riscv/efi/init.c;
|
|
||||||
riscv64_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;
|
||||||
@@ -268,10 +207,8 @@ kernel = {
|
|||||||
i386_qemu = kern/vga_init.c;
|
i386_qemu = kern/vga_init.c;
|
||||||
i386_qemu = kern/i386/qemu/mmap.c;
|
i386_qemu = kern/i386/qemu/mmap.c;
|
||||||
|
|
||||||
coreboot = kern/coreboot/mmap.c;
|
i386_coreboot = kern/i386/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;
|
|
||||||
|
|
||||||
i386_multiboot = kern/i386/multiboot_mmap.c;
|
i386_multiboot = kern/i386/multiboot_mmap.c;
|
||||||
|
|
||||||
@@ -283,7 +220,6 @@ kernel = {
|
|||||||
mips_qemu_mips = term/ns8250.c;
|
mips_qemu_mips = term/ns8250.c;
|
||||||
mips_qemu_mips = term/serial.c;
|
mips_qemu_mips = term/serial.c;
|
||||||
mips_qemu_mips = term/at_keyboard.c;
|
mips_qemu_mips = term/at_keyboard.c;
|
||||||
mips_qemu_mips = term/ps2.c;
|
|
||||||
mips_qemu_mips = commands/boot.c;
|
mips_qemu_mips = commands/boot.c;
|
||||||
mips_qemu_mips = commands/keylayouts.c;
|
mips_qemu_mips = commands/keylayouts.c;
|
||||||
mips_qemu_mips = term/i386/pc/vga_text.c;
|
mips_qemu_mips = term/i386/pc/vga_text.c;
|
||||||
@@ -299,25 +235,21 @@ kernel = {
|
|||||||
mips_loongson = bus/pci.c;
|
mips_loongson = bus/pci.c;
|
||||||
mips_loongson = kern/mips/loongson/init.c;
|
mips_loongson = kern/mips/loongson/init.c;
|
||||||
mips_loongson = term/at_keyboard.c;
|
mips_loongson = term/at_keyboard.c;
|
||||||
mips_loongson = term/ps2.c;
|
|
||||||
mips_loongson = commands/boot.c;
|
mips_loongson = commands/boot.c;
|
||||||
mips_loongson = term/serial.c;
|
mips_loongson = term/serial.c;
|
||||||
mips_loongson = video/sm712.c;
|
mips_loongson = video/sm712.c;
|
||||||
mips_loongson = video/sis315pro.c;
|
mips_loongson = video/sis315pro.c;
|
||||||
mips_loongson = video/radeon_fuloong2e.c;
|
mips_loongson = video/radeon_fuloong2e.c;
|
||||||
mips_loongson = video/radeon_yeeloong3a.c;
|
|
||||||
extra_dist = video/sm712_init.c;
|
extra_dist = video/sm712_init.c;
|
||||||
extra_dist = video/sis315_init.c;
|
extra_dist = video/sis315_init.c;
|
||||||
mips_loongson = commands/keylayouts.c;
|
mips_loongson = commands/keylayouts.c;
|
||||||
|
|
||||||
powerpc_ieee1275 = kern/powerpc/cache.S;
|
powerpc_ieee1275 = kern/powerpc/cache.S;
|
||||||
powerpc_ieee1275 = kern/powerpc/dl.c;
|
powerpc_ieee1275 = kern/powerpc/dl.c;
|
||||||
powerpc_ieee1275 = kern/powerpc/compiler-rt.S;
|
|
||||||
|
|
||||||
sparc64_ieee1275 = kern/sparc64/cache.S;
|
sparc64_ieee1275 = kern/sparc64/cache.S;
|
||||||
sparc64_ieee1275 = kern/sparc64/dl.c;
|
sparc64_ieee1275 = kern/sparc64/dl.c;
|
||||||
sparc64_ieee1275 = kern/sparc64/ieee1275/ieee1275.c;
|
sparc64_ieee1275 = kern/sparc64/ieee1275/ieee1275.c;
|
||||||
sparc64_ieee1275 = disk/ieee1275/obdisk.c;
|
|
||||||
|
|
||||||
arm = kern/arm/dl.c;
|
arm = kern/arm/dl.c;
|
||||||
arm = kern/arm/dl_helper.c;
|
arm = kern/arm/dl_helper.c;
|
||||||
@@ -325,21 +257,13 @@ kernel = {
|
|||||||
arm = kern/arm/cache_armv7.S;
|
arm = kern/arm/cache_armv7.S;
|
||||||
extra_dist = kern/arm/cache.S;
|
extra_dist = kern/arm/cache.S;
|
||||||
arm = kern/arm/cache.c;
|
arm = kern/arm/cache.c;
|
||||||
arm = kern/arm/compiler-rt.S;
|
arm = kern/arm/misc.S;
|
||||||
|
|
||||||
arm64 = kern/arm64/cache.c;
|
arm64 = kern/arm64/cache.c;
|
||||||
arm64 = kern/arm64/cache_flush.S;
|
arm64 = kern/arm64/cache_flush.S;
|
||||||
arm64 = kern/arm64/dl.c;
|
arm64 = kern/arm64/dl.c;
|
||||||
arm64 = kern/arm64/dl_helper.c;
|
arm64 = kern/arm64/dl_helper.c;
|
||||||
|
|
||||||
riscv32 = kern/riscv/cache.c;
|
|
||||||
riscv32 = kern/riscv/cache_flush.S;
|
|
||||||
riscv32 = kern/riscv/dl.c;
|
|
||||||
|
|
||||||
riscv64 = kern/riscv/cache.c;
|
|
||||||
riscv64 = kern/riscv/cache_flush.S;
|
|
||||||
riscv64 = kern/riscv/dl.c;
|
|
||||||
|
|
||||||
emu = disk/host.c;
|
emu = disk/host.c;
|
||||||
emu = kern/emu/cache_s.S;
|
emu = kern/emu/cache_s.S;
|
||||||
emu = kern/emu/hostdisk.c;
|
emu = kern/emu/hostdisk.c;
|
||||||
@@ -358,9 +282,6 @@ kernel = {
|
|||||||
emu = osdep/emuconsole.c;
|
emu = osdep/emuconsole.c;
|
||||||
extra_dist = osdep/unix/emuconsole.c;
|
extra_dist = osdep/unix/emuconsole.c;
|
||||||
extra_dist = osdep/windows/emuconsole.c;
|
extra_dist = osdep/windows/emuconsole.c;
|
||||||
emu = osdep/dl.c;
|
|
||||||
extra_dist = osdep/unix/dl.c;
|
|
||||||
extra_dist = osdep/windows/dl.c;
|
|
||||||
emu = osdep/sleep.c;
|
emu = osdep/sleep.c;
|
||||||
emu = osdep/init.c;
|
emu = osdep/init.c;
|
||||||
emu = osdep/emunet.c;
|
emu = osdep/emunet.c;
|
||||||
@@ -395,7 +316,7 @@ program = {
|
|||||||
|
|
||||||
ldadd = 'kernel.exec$(EXEEXT)';
|
ldadd = 'kernel.exec$(EXEEXT)';
|
||||||
ldadd = '$(MODULE_FILES)';
|
ldadd = '$(MODULE_FILES)';
|
||||||
ldadd = 'lib/gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = 'gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
|
|
||||||
enable = emu;
|
enable = emu;
|
||||||
};
|
};
|
||||||
@@ -407,7 +328,7 @@ program = {
|
|||||||
emu_nodist = symlist.c;
|
emu_nodist = symlist.c;
|
||||||
|
|
||||||
ldadd = 'kernel.exec$(EXEEXT)';
|
ldadd = 'kernel.exec$(EXEEXT)';
|
||||||
ldadd = 'lib/gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = 'gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
|
|
||||||
enable = emu;
|
enable = emu;
|
||||||
};
|
};
|
||||||
@@ -425,14 +346,8 @@ image = {
|
|||||||
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
||||||
i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
||||||
|
|
||||||
/* The entry point for a.out binaries on sparc64 starts
|
sparc64_ieee1275_objcopyflags = '-O a.out-sunos-big';
|
||||||
at 0x4000. Since we are writing the 32 bytes long a.out
|
sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000';
|
||||||
header in the assembly code ourselves, we need to tell
|
|
||||||
the linker to adjust the start of the text segment to
|
|
||||||
0x4000 - 0x20 = 0x3fe0.
|
|
||||||
*/
|
|
||||||
sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x3fe0';
|
|
||||||
sparc64_ieee1275_objcopyflags = '-O binary';
|
|
||||||
|
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
@@ -461,10 +376,8 @@ image = {
|
|||||||
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00';
|
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00';
|
||||||
|
|
||||||
sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S;
|
sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S;
|
||||||
|
sparc64_ieee1275_objcopyflags = '-O a.out-sunos-big';
|
||||||
/* See comment for sparc64_ieee1275_ldflags above. */
|
sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000';
|
||||||
sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x3fe0';
|
|
||||||
sparc64_ieee1275_objcopyflags = '-O binary';
|
|
||||||
sparc64_ieee1275_cppflags = '-DCDBOOT=1';
|
sparc64_ieee1275_cppflags = '-DCDBOOT=1';
|
||||||
|
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
@@ -519,13 +432,13 @@ image = {
|
|||||||
common = lib/xzembed/xz_dec_bcj.c;
|
common = lib/xzembed/xz_dec_bcj.c;
|
||||||
common = lib/xzembed/xz_dec_lzma2.c;
|
common = lib/xzembed/xz_dec_lzma2.c;
|
||||||
common = lib/xzembed/xz_dec_stream.c;
|
common = lib/xzembed/xz_dec_stream.c;
|
||||||
common = kern/compiler-rt.c;
|
|
||||||
|
|
||||||
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1';
|
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/xzembed -DGRUB_EMBED_DECOMPRESSOR=1';
|
||||||
|
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
mips_ldflags = '-Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
mips_ldflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
||||||
cflags = '-Wno-unreachable-code';
|
ldadd = '$(TARGET_LIBGCC)';
|
||||||
|
cflags = '-Wno-unreachable-code $(TARGET_LDFLAGS_STATIC_LIBGCC)';
|
||||||
enable = mips;
|
enable = mips;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -537,7 +450,9 @@ image = {
|
|||||||
cppflags = '-DGRUB_EMBED_DECOMPRESSOR=1';
|
cppflags = '-DGRUB_EMBED_DECOMPRESSOR=1';
|
||||||
|
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
mips_ldflags = '-Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
mips_ldflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC) -Wl,-Ttext,$(TARGET_DECOMPRESSOR_LINK_ADDR)';
|
||||||
|
ldadd = '$(TARGET_LIBGCC)';
|
||||||
|
cflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC)';
|
||||||
enable = mips;
|
enable = mips;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -555,7 +470,7 @@ image = {
|
|||||||
name = fwstart;
|
name = fwstart;
|
||||||
mips_loongson = boot/mips/loongson/fwstart.S;
|
mips_loongson = boot/mips/loongson/fwstart.S;
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
ldflags = '-Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
|
ldflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC) $(TARGET_LIBGCC) -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
|
||||||
enable = mips_loongson;
|
enable = mips_loongson;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -563,7 +478,7 @@ image = {
|
|||||||
name = fwstart_fuloong2f;
|
name = fwstart_fuloong2f;
|
||||||
mips_loongson = boot/mips/loongson/fuloong2f.S;
|
mips_loongson = boot/mips/loongson/fuloong2f.S;
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
ldflags = '-Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
|
ldflags = '$(TARGET_LDFLAGS_STATIC_LIBGCC) $(TARGET_LIBGCC) -Wl,-N,-S,-Ttext,0xbfc00000,-Bstatic';
|
||||||
enable = mips_loongson;
|
enable = mips_loongson;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -585,6 +500,13 @@ module = {
|
|||||||
enable = x86;
|
enable = x86;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = libusb;
|
||||||
|
emu = bus/usb/emu/usb.c;
|
||||||
|
enable = emu;
|
||||||
|
condition = COND_GRUB_EMU_USB;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = lsspd;
|
name = lsspd;
|
||||||
mips_loongson = commands/mips/loongson/lsspd.c;
|
mips_loongson = commands/mips/loongson/lsspd.c;
|
||||||
@@ -599,6 +521,13 @@ module = {
|
|||||||
enable = usb;
|
enable = usb;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = emuusb;
|
||||||
|
common = bus/usb/usb.c;
|
||||||
|
enable = emu;
|
||||||
|
condition = COND_GRUB_EMU_USB;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = usbserial_common;
|
name = usbserial_common;
|
||||||
common = bus/usb/serial/common.c;
|
common = bus/usb/serial/common.c;
|
||||||
@@ -638,10 +567,7 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = ehci;
|
name = ehci;
|
||||||
common = bus/usb/ehci.c;
|
common = bus/usb/ehci.c;
|
||||||
arm_coreboot = bus/usb/ehci-fdt.c;
|
|
||||||
pci = bus/usb/ehci-pci.c;
|
|
||||||
enable = pci;
|
enable = pci;
|
||||||
enable = arm_coreboot;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -683,10 +609,16 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = lsxen;
|
name = lsxen;
|
||||||
common = commands/xen/lsxen.c;
|
common = commands/xen/lsxen.c;
|
||||||
|
cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
|
||||||
enable = xen;
|
enable = xen;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = check_nt_hiberfil;
|
||||||
|
common = commands/i386/nthibr.c;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = cmostest;
|
name = cmostest;
|
||||||
common = commands/i386/cmostest.c;
|
common = commands/i386/cmostest.c;
|
||||||
@@ -708,7 +640,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;
|
||||||
@@ -739,7 +670,7 @@ module = {
|
|||||||
name = regexp;
|
name = regexp;
|
||||||
common = commands/regexp.c;
|
common = commands/regexp.c;
|
||||||
common = commands/wildcard.c;
|
common = commands/wildcard.c;
|
||||||
common = lib/gnulib/regex.c;
|
common = gnulib/regex.c;
|
||||||
cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
|
cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
|
||||||
cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)';
|
cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)';
|
||||||
};
|
};
|
||||||
@@ -748,8 +679,10 @@ module = {
|
|||||||
name = acpi;
|
name = acpi;
|
||||||
|
|
||||||
common = commands/acpi.c;
|
common = commands/acpi.c;
|
||||||
i386_pc = kern/acpi.c;
|
efi = commands/efi/acpi.c;
|
||||||
i386_pc = kern/i386/pc/acpi.c;
|
i386_pc = commands/i386/pc/acpi.c;
|
||||||
|
i386_coreboot = commands/i386/pc/acpi.c;
|
||||||
|
i386_multiboot = commands/i386/pc/acpi.c;
|
||||||
|
|
||||||
enable = efi;
|
enable = efi;
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
@@ -822,9 +755,6 @@ module = {
|
|||||||
enable = arm_efi;
|
enable = arm_efi;
|
||||||
enable = arm64_efi;
|
enable = arm64_efi;
|
||||||
enable = arm_uboot;
|
enable = arm_uboot;
|
||||||
enable = arm_coreboot;
|
|
||||||
enable = riscv32_efi;
|
|
||||||
enable = riscv64_efi;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -846,7 +776,6 @@ module = {
|
|||||||
name = cpuid;
|
name = cpuid;
|
||||||
common = commands/i386/cpuid.c;
|
common = commands/i386/cpuid.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = i386_xen;
|
enable = i386_xen;
|
||||||
enable = x86_64_xen;
|
enable = x86_64_xen;
|
||||||
};
|
};
|
||||||
@@ -906,27 +835,29 @@ module = {
|
|||||||
i386_coreboot = lib/i386/halt.c;
|
i386_coreboot = lib/i386/halt.c;
|
||||||
i386_qemu = lib/i386/halt.c;
|
i386_qemu = lib/i386/halt.c;
|
||||||
xen = lib/xen/halt.c;
|
xen = lib/xen/halt.c;
|
||||||
i386_xen_pvh = lib/xen/halt.c;
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
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 = {
|
||||||
name = reboot;
|
name = reboot;
|
||||||
i386 = lib/i386/reboot.c;
|
i386 = lib/i386/reboot.c;
|
||||||
i386 = lib/i386/reboot_trampoline.S;
|
i386 = lib/i386/reboot_trampoline.S;
|
||||||
|
ia64_efi = lib/efi/reboot.c;
|
||||||
|
x86_64_efi = lib/efi/reboot.c;
|
||||||
|
arm_efi = lib/efi/reboot.c;
|
||||||
|
arm64_efi = lib/efi/reboot.c;
|
||||||
powerpc_ieee1275 = lib/ieee1275/reboot.c;
|
powerpc_ieee1275 = lib/ieee1275/reboot.c;
|
||||||
sparc64_ieee1275 = lib/ieee1275/reboot.c;
|
sparc64_ieee1275 = lib/ieee1275/reboot.c;
|
||||||
mips_arc = lib/mips/arc/reboot.c;
|
mips_arc = lib/mips/arc/reboot.c;
|
||||||
mips_loongson = lib/mips/loongson/reboot.c;
|
mips_loongson = lib/mips/loongson/reboot.c;
|
||||||
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;
|
||||||
i386_xen_pvh = lib/xen/reboot.c;
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
uboot = lib/uboot/reboot.c;
|
uboot = lib/uboot/reboot.c;
|
||||||
arm_coreboot = lib/dummy/reboot.c;
|
|
||||||
common = commands/reboot.c;
|
common = commands/reboot.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -936,26 +867,16 @@ module = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = pgp;
|
name = verify;
|
||||||
common = commands/pgp.c;
|
common = commands/verify.c;
|
||||||
cflags = '$(CFLAGS_POSIX)';
|
cflags = '$(CFLAGS_POSIX)';
|
||||||
cppflags = '-I$(srcdir)/lib/posix_wrap';
|
cppflags = '-I$(srcdir)/lib/posix_wrap';
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = verifiers;
|
|
||||||
common = commands/verifiers.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = shim_lock;
|
|
||||||
common = commands/efi/shim_lock.c;
|
|
||||||
enable = x86_64_efi;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = hdparm;
|
name = hdparm;
|
||||||
common = commands/hdparm.c;
|
common = commands/hdparm.c;
|
||||||
|
common = lib/hexdump.c;
|
||||||
enable = pci;
|
enable = pci;
|
||||||
enable = mips_qemu_mips;
|
enable = mips_qemu_mips;
|
||||||
};
|
};
|
||||||
@@ -1319,27 +1240,12 @@ module = {
|
|||||||
common = fs/bfs.c;
|
common = fs/bfs.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = zstd;
|
|
||||||
common = lib/zstd/debug.c;
|
|
||||||
common = lib/zstd/entropy_common.c;
|
|
||||||
common = lib/zstd/error_private.c;
|
|
||||||
common = lib/zstd/fse_decompress.c;
|
|
||||||
common = lib/zstd/huf_decompress.c;
|
|
||||||
common = lib/zstd/module.c;
|
|
||||||
common = lib/zstd/xxhash.c;
|
|
||||||
common = lib/zstd/zstd_common.c;
|
|
||||||
common = lib/zstd/zstd_decompress.c;
|
|
||||||
cflags = '$(CFLAGS_POSIX) -Wno-undef';
|
|
||||||
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/zstd';
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = btrfs;
|
name = btrfs;
|
||||||
common = fs/btrfs.c;
|
common = fs/btrfs.c;
|
||||||
common = lib/crc.c;
|
common = lib/crc.c;
|
||||||
cflags = '$(CFLAGS_POSIX) -Wno-undef';
|
cflags = '$(CFLAGS_POSIX) -Wno-undef';
|
||||||
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -I$(srcdir)/lib/zstd -DMINILZO_HAVE_CONFIG_H';
|
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H';
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1387,11 +1293,6 @@ module = {
|
|||||||
common = fs/exfat.c;
|
common = fs/exfat.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = f2fs;
|
|
||||||
common = fs/f2fs.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = fshelp;
|
name = fshelp;
|
||||||
common = fs/fshelp.c;
|
common = fs/fshelp.c;
|
||||||
@@ -1538,11 +1439,6 @@ module = {
|
|||||||
common = fs/zfs/zfsinfo.c;
|
common = fs/zfs/zfsinfo.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = macbless;
|
|
||||||
common = commands/macbless.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = pxe;
|
name = pxe;
|
||||||
i386_pc = net/drivers/i386/pc/pxe.c;
|
i386_pc = net/drivers/i386/pc/pxe.c;
|
||||||
@@ -1557,6 +1453,7 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = gfxmenu;
|
name = gfxmenu;
|
||||||
common = gfxmenu/gfxmenu.c;
|
common = gfxmenu/gfxmenu.c;
|
||||||
|
common = gfxmenu/model.c;
|
||||||
common = gfxmenu/view.c;
|
common = gfxmenu/view.c;
|
||||||
common = gfxmenu/font.c;
|
common = gfxmenu/font.c;
|
||||||
common = gfxmenu/icon_manager.c;
|
common = gfxmenu/icon_manager.c;
|
||||||
@@ -1619,18 +1516,12 @@ module = {
|
|||||||
x86 = lib/i386/relocator16.S;
|
x86 = lib/i386/relocator16.S;
|
||||||
x86 = lib/i386/relocator32.S;
|
x86 = lib/i386/relocator32.S;
|
||||||
x86 = lib/i386/relocator64.S;
|
x86 = lib/i386/relocator64.S;
|
||||||
i386_xen_pvh = lib/i386/relocator16.S;
|
|
||||||
i386_xen_pvh = lib/i386/relocator32.S;
|
|
||||||
i386_xen_pvh = lib/i386/relocator64.S;
|
|
||||||
i386 = lib/i386/relocator_asm.S;
|
i386 = lib/i386/relocator_asm.S;
|
||||||
i386_xen_pvh = lib/i386/relocator_asm.S;
|
|
||||||
x86_64 = lib/x86_64/relocator_asm.S;
|
x86_64 = lib/x86_64/relocator_asm.S;
|
||||||
i386_xen = lib/i386/relocator_asm.S;
|
i386_xen = lib/i386/relocator_asm.S;
|
||||||
x86_64_xen = lib/x86_64/relocator_asm.S;
|
x86_64_xen = lib/x86_64/relocator_asm.S;
|
||||||
x86 = lib/i386/relocator.c;
|
x86 = lib/i386/relocator.c;
|
||||||
x86 = lib/i386/relocator_common_c.c;
|
x86 = lib/i386/relocator_common_c.c;
|
||||||
i386_xen_pvh = lib/i386/relocator.c;
|
|
||||||
i386_xen_pvh = lib/i386/relocator_common_c.c;
|
|
||||||
ieee1275 = lib/ieee1275/relocator.c;
|
ieee1275 = lib/ieee1275/relocator.c;
|
||||||
efi = lib/efi/relocator.c;
|
efi = lib/efi/relocator.c;
|
||||||
mips = lib/mips/relocator_asm.S;
|
mips = lib/mips/relocator_asm.S;
|
||||||
@@ -1641,7 +1532,7 @@ 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;
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
|
||||||
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;
|
||||||
@@ -1649,7 +1540,6 @@ module = {
|
|||||||
enable = mips;
|
enable = mips;
|
||||||
enable = powerpc;
|
enable = powerpc;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = xen;
|
enable = xen;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1657,14 +1547,13 @@ 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;
|
|
||||||
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;
|
||||||
powerpc_ieee1275 = lib/ieee1275/cmos.c;
|
powerpc_ieee1275 = lib/ieee1275/cmos.c;
|
||||||
xen = lib/xen/datetime.c;
|
xen = lib/xen/datetime.c;
|
||||||
i386_xen_pvh = lib/xen/datetime.c;
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
|
||||||
mips_arc = lib/arc/datetime.c;
|
mips_arc = lib/arc/datetime.c;
|
||||||
enable = noemu;
|
enable = noemu;
|
||||||
@@ -1682,7 +1571,6 @@ module = {
|
|||||||
extra_dist = lib/ia64/longjmp.S;
|
extra_dist = lib/ia64/longjmp.S;
|
||||||
extra_dist = lib/arm/setjmp.S;
|
extra_dist = lib/arm/setjmp.S;
|
||||||
extra_dist = lib/arm64/setjmp.S;
|
extra_dist = lib/arm64/setjmp.S;
|
||||||
extra_dist = lib/riscv/setjmp.S;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1713,6 +1601,8 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = linux16;
|
name = linux16;
|
||||||
common = loader/i386/pc/linux.c;
|
common = loader/i386/pc/linux.c;
|
||||||
|
common = loader/linux.c;
|
||||||
|
common = lib/cmdline.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1722,14 +1612,6 @@ module = {
|
|||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = truecrypt;
|
|
||||||
i386_pc = loader/i386/pc/truecrypt.c;
|
|
||||||
enable = i386_pc;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = freedos;
|
name = freedos;
|
||||||
i386_pc = loader/i386/pc/freedos.c;
|
i386_pc = loader/i386/pc/freedos.c;
|
||||||
@@ -1747,99 +1629,54 @@ module = {
|
|||||||
cppflags = "-DGRUB_USE_MULTIBOOT2";
|
cppflags = "-DGRUB_USE_MULTIBOOT2";
|
||||||
|
|
||||||
common = loader/multiboot.c;
|
common = loader/multiboot.c;
|
||||||
|
common = lib/cmdline.c;
|
||||||
common = loader/multiboot_mbi2.c;
|
common = loader/multiboot_mbi2.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = mips;
|
enable = mips;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = multiboot;
|
name = multiboot;
|
||||||
common = loader/multiboot.c;
|
common = loader/multiboot.c;
|
||||||
|
common = lib/cmdline.c;
|
||||||
x86 = loader/i386/multiboot_mbi.c;
|
x86 = loader/i386/multiboot_mbi.c;
|
||||||
i386_xen_pvh = loader/i386/multiboot_mbi.c;
|
|
||||||
extra_dist = loader/multiboot_elfxx.c;
|
extra_dist = loader/multiboot_elfxx.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = xen_boot;
|
|
||||||
arm64 = loader/arm64/xen_boot.c;
|
|
||||||
enable = arm64;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = linux;
|
name = linux;
|
||||||
x86 = loader/i386/linux.c;
|
x86 = loader/i386/linux.c;
|
||||||
i386_xen_pvh = loader/i386/linux.c;
|
|
||||||
xen = loader/i386/xen.c;
|
xen = loader/i386/xen.c;
|
||||||
|
xen = loader/i386/xen_file.c;
|
||||||
|
xen = loader/i386/xen_file32.c;
|
||||||
|
xen = loader/i386/xen_file64.c;
|
||||||
|
extra_dist = loader/i386/xen_fileXX.c;
|
||||||
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
i386_pc = lib/i386/pc/vesa_modes_table.c;
|
i386_pc = lib/i386/pc/vesa_modes_table.c;
|
||||||
i386_xen_pvh = lib/i386/pc/vesa_modes_table.c;
|
|
||||||
mips = loader/mips/linux.c;
|
mips = loader/mips/linux.c;
|
||||||
powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c;
|
powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c;
|
||||||
sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c;
|
sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c;
|
||||||
ia64_efi = loader/ia64/efi/linux.c;
|
ia64_efi = loader/ia64/efi/linux.c;
|
||||||
arm_coreboot = loader/arm/linux.c;
|
arm = loader/arm/linux.c;
|
||||||
arm_efi = loader/arm64/linux.c;
|
arm = lib/fdt.c;
|
||||||
arm_uboot = loader/arm/linux.c;
|
|
||||||
arm64 = loader/arm64/linux.c;
|
|
||||||
riscv32 = loader/riscv/linux.c;
|
|
||||||
riscv64 = loader/riscv/linux.c;
|
|
||||||
common = loader/linux.c;
|
common = loader/linux.c;
|
||||||
common = lib/cmdline.c;
|
common = lib/cmdline.c;
|
||||||
enable = noemu;
|
enable = noemu;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = fdt;
|
|
||||||
efi = loader/efi/fdt.c;
|
|
||||||
common = lib/fdt.c;
|
|
||||||
enable = fdt;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = xnu;
|
name = xnu;
|
||||||
x86 = loader/xnu_resume.c;
|
x86 = loader/xnu_resume.c;
|
||||||
x86 = loader/i386/xnu.c;
|
x86 = loader/i386/xnu.c;
|
||||||
|
x86 = loader/macho32.c;
|
||||||
|
x86 = loader/macho64.c;
|
||||||
|
x86 = loader/macho.c;
|
||||||
x86 = loader/xnu.c;
|
x86 = loader/xnu.c;
|
||||||
|
x86 = loader/lzss.c;
|
||||||
|
|
||||||
/* Code is pretty generic but relies on RNG which
|
|
||||||
is available only on few platforms. It's not a
|
|
||||||
big deal as xnu needs ACPI anyway and we have
|
|
||||||
RNG on all platforms with ACPI.
|
|
||||||
*/
|
|
||||||
enable = i386_multiboot;
|
|
||||||
enable = i386_coreboot;
|
|
||||||
enable = i386_pc;
|
|
||||||
enable = i386_efi;
|
|
||||||
enable = x86_64_efi;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = random;
|
|
||||||
x86 = lib/i386/random.c;
|
|
||||||
common = lib/random.c;
|
|
||||||
|
|
||||||
i386_multiboot = kern/i386/tsc_pmtimer.c;
|
|
||||||
i386_coreboot = kern/i386/tsc_pmtimer.c;
|
|
||||||
i386_pc = kern/i386/tsc_pmtimer.c;
|
|
||||||
|
|
||||||
enable = i386_multiboot;
|
|
||||||
enable = i386_coreboot;
|
|
||||||
enable = i386_pc;
|
|
||||||
enable = i386_efi;
|
|
||||||
enable = x86_64_efi;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = macho;
|
|
||||||
|
|
||||||
common = loader/macho.c;
|
|
||||||
common = loader/macho32.c;
|
|
||||||
common = loader/macho64.c;
|
|
||||||
common = loader/lzss.c;
|
|
||||||
extra_dist = loader/machoXX.c;
|
extra_dist = loader/machoXX.c;
|
||||||
|
enable = x86;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1865,8 +1702,6 @@ module = {
|
|||||||
common = mmap/mmap.c;
|
common = mmap/mmap.c;
|
||||||
x86 = mmap/i386/uppermem.c;
|
x86 = mmap/i386/uppermem.c;
|
||||||
x86 = mmap/i386/mmap.c;
|
x86 = mmap/i386/mmap.c;
|
||||||
i386_xen_pvh = mmap/i386/uppermem.c;
|
|
||||||
i386_xen_pvh = mmap/i386/mmap.c;
|
|
||||||
|
|
||||||
i386_pc = mmap/i386/pc/mmap.c;
|
i386_pc = mmap/i386/pc/mmap.c;
|
||||||
i386_pc = mmap/i386/pc/mmap_helper.S;
|
i386_pc = mmap/i386/pc/mmap_helper.S;
|
||||||
@@ -1876,12 +1711,9 @@ module = {
|
|||||||
mips = mmap/mips/uppermem.c;
|
mips = mmap/mips/uppermem.c;
|
||||||
|
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = ia64_efi;
|
enable = ia64_efi;
|
||||||
enable = arm_efi;
|
enable = arm_efi;
|
||||||
enable = arm64_efi;
|
enable = arm64_efi;
|
||||||
enable = riscv32_efi;
|
|
||||||
enable = riscv64_efi;
|
|
||||||
enable = mips;
|
enable = mips;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1903,7 +1735,6 @@ module = {
|
|||||||
common = normal/term.c;
|
common = normal/term.c;
|
||||||
common = normal/context.c;
|
common = normal/context.c;
|
||||||
common = normal/charset.c;
|
common = normal/charset.c;
|
||||||
common = lib/getline.c;
|
|
||||||
|
|
||||||
common = script/main.c;
|
common = script/main.c;
|
||||||
common = script/script.c;
|
common = script/script.c;
|
||||||
@@ -1990,7 +1821,6 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = at_keyboard;
|
name = at_keyboard;
|
||||||
common = term/at_keyboard.c;
|
common = term/at_keyboard.c;
|
||||||
common = term/ps2.c;
|
|
||||||
enable = x86;
|
enable = x86;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2083,11 +1913,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;
|
||||||
@@ -2099,11 +1924,6 @@ module = {
|
|||||||
common = tests/signatures.h;
|
common = tests/signatures.h;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = sleep_test;
|
|
||||||
common = tests/sleep_test.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = xnu_uuid_test;
|
name = xnu_uuid_test;
|
||||||
common = tests/xnu_uuid_test.c;
|
common = tests/xnu_uuid_test.c;
|
||||||
@@ -2118,49 +1938,17 @@ module = {
|
|||||||
name = legacy_password_test;
|
name = legacy_password_test;
|
||||||
common = tests/legacy_password_test.c;
|
common = tests/legacy_password_test.c;
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = i386_efi;
|
enable = i386_efi;
|
||||||
enable = x86_64_efi;
|
enable = x86_64_efi;
|
||||||
enable = emu;
|
enable = emu;
|
||||||
enable = xen;
|
enable = xen;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = div;
|
|
||||||
common = lib/division.c;
|
|
||||||
enable = no_softdiv;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = div_test;
|
name = div_test;
|
||||||
common = tests/div_test.c;
|
common = tests/div_test.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = mul_test;
|
|
||||||
common = tests/mul_test.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = shift_test;
|
|
||||||
common = tests/shift_test.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = cmp_test;
|
|
||||||
common = tests/cmp_test.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = ctz_test;
|
|
||||||
common = tests/ctz_test.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = bswap_test;
|
|
||||||
common = tests/bswap_test.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = videotest_checksum;
|
name = videotest_checksum;
|
||||||
common = tests/videotest_checksum.c;
|
common = tests/videotest_checksum.c;
|
||||||
@@ -2317,19 +2105,12 @@ module = {
|
|||||||
xen = lib/i386/pc/vesa_modes_table.c;
|
xen = lib/i386/pc/vesa_modes_table.c;
|
||||||
|
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = i386_efi;
|
enable = i386_efi;
|
||||||
enable = x86_64_efi;
|
enable = x86_64_efi;
|
||||||
enable = emu;
|
enable = emu;
|
||||||
enable = xen;
|
enable = xen;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = syslinuxcfg;
|
|
||||||
common = lib/syslinux_parse.c;
|
|
||||||
common = commands/syslinuxcfg.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = test_blockarg;
|
name = test_blockarg;
|
||||||
common = tests/test_blockarg.c;
|
common = tests/test_blockarg.c;
|
||||||
@@ -2361,12 +2142,10 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = backtrace;
|
name = backtrace;
|
||||||
x86 = lib/i386/backtrace.c;
|
x86 = lib/i386/backtrace.c;
|
||||||
i386_xen_pvh = lib/i386/backtrace.c;
|
|
||||||
i386_xen = lib/i386/backtrace.c;
|
i386_xen = lib/i386/backtrace.c;
|
||||||
x86_64_xen = lib/i386/backtrace.c;
|
x86_64_xen = lib/i386/backtrace.c;
|
||||||
common = lib/backtrace.c;
|
common = lib/backtrace.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = i386_xen;
|
enable = i386_xen;
|
||||||
enable = x86_64_xen;
|
enable = x86_64_xen;
|
||||||
};
|
};
|
||||||
@@ -2465,13 +2244,6 @@ module = {
|
|||||||
common = commands/testspeed.c;
|
common = commands/testspeed.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = tpm;
|
|
||||||
common = commands/tpm.c;
|
|
||||||
efi = commands/efi/tpm.c;
|
|
||||||
enable = x86_64_efi;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = tr;
|
name = tr;
|
||||||
common = commands/tr.c;
|
common = commands/tr.c;
|
||||||
@@ -2481,25 +2253,3 @@ module = {
|
|||||||
name = progress;
|
name = progress;
|
||||||
common = lib/progress.c;
|
common = lib/progress.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = file;
|
|
||||||
common = commands/file.c;
|
|
||||||
common = commands/file32.c;
|
|
||||||
common = commands/file64.c;
|
|
||||||
extra_dist = commands/fileXX.c;
|
|
||||||
common = loader/i386/xen_file.c;
|
|
||||||
common = loader/i386/xen_file32.c;
|
|
||||||
common = loader/i386/xen_file64.c;
|
|
||||||
extra_dist = loader/i386/xen_fileXX.c;
|
|
||||||
};
|
|
||||||
module = {
|
|
||||||
name = rdmsr;
|
|
||||||
common = commands/i386/rdmsr.c;
|
|
||||||
enable = x86;
|
|
||||||
};
|
|
||||||
module = {
|
|
||||||
name = wrmsr;
|
|
||||||
common = commands/i386/wrmsr.c;
|
|
||||||
enable = x86;
|
|
||||||
};
|
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
#include <grub/decompressor.h>
|
#include <grub/decompressor.h>
|
||||||
|
|
||||||
void *
|
void *
|
||||||
grub_memset (void *s, int c, grub_size_t len)
|
memset (void *s, int c, grub_size_t len)
|
||||||
{
|
{
|
||||||
grub_uint8_t *ptr;
|
grub_uint8_t *ptr;
|
||||||
for (ptr = s; len; ptr++, len--)
|
for (ptr = s; len; ptr++, len--)
|
||||||
@@ -68,6 +68,15 @@ grub_memcmp (const void *s1, const void *s2, grub_size_t n)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int memcmp (const void *s1, const void *s2, grub_size_t n)
|
||||||
|
__attribute__ ((alias ("grub_memcmp")));
|
||||||
|
|
||||||
|
void *memmove (void *dest, const void *src, grub_size_t n)
|
||||||
|
__attribute__ ((alias ("grub_memmove")));
|
||||||
|
|
||||||
|
void *memcpy (void *dest, const void *src, grub_size_t n)
|
||||||
|
__attribute__ ((alias ("grub_memmove")));
|
||||||
|
|
||||||
void *grub_decompressor_scratch;
|
void *grub_decompressor_scratch;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -165,8 +165,8 @@ start:
|
|||||||
* this area.
|
* this area.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_BPB_START
|
. = _start + GRUB_BOOT_MACHINE_BPB_START
|
||||||
.org 4
|
. = _start + 4
|
||||||
#endif
|
#endif
|
||||||
#ifdef HYBRID_BOOT
|
#ifdef HYBRID_BOOT
|
||||||
floppy
|
floppy
|
||||||
@@ -174,23 +174,23 @@ start:
|
|||||||
scratch
|
scratch
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_BPB_END
|
. = _start + GRUB_BOOT_MACHINE_BPB_END
|
||||||
/*
|
/*
|
||||||
* End of BIOS parameter block.
|
* End of BIOS parameter block.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
LOCAL(kernel_address):
|
kernel_address:
|
||||||
.word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
.word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
||||||
|
|
||||||
#ifndef HYBRID_BOOT
|
#ifndef HYBRID_BOOT
|
||||||
.org GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
. = _start + GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
||||||
LOCAL(kernel_sector):
|
kernel_sector:
|
||||||
.long 1
|
.long 1
|
||||||
LOCAL(kernel_sector_high):
|
kernel_sector_high:
|
||||||
.long 0
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_BOOT_DRIVE
|
. = _start + GRUB_BOOT_MACHINE_BOOT_DRIVE
|
||||||
boot_drive:
|
boot_drive:
|
||||||
.byte 0xff /* the disk to load kernel from */
|
.byte 0xff /* the disk to load kernel from */
|
||||||
/* 0xff means use the boot drive */
|
/* 0xff means use the boot drive */
|
||||||
@@ -208,7 +208,7 @@ LOCAL(after_BPB):
|
|||||||
* possible boot drive. If GRUB is installed into a floppy,
|
* possible boot drive. If GRUB is installed into a floppy,
|
||||||
* this does nothing (only jump).
|
* this does nothing (only jump).
|
||||||
*/
|
*/
|
||||||
.org GRUB_BOOT_MACHINE_DRIVE_CHECK
|
. = _start + GRUB_BOOT_MACHINE_DRIVE_CHECK
|
||||||
boot_drive_check:
|
boot_drive_check:
|
||||||
jmp 3f /* grub-setup may overwrite this jump */
|
jmp 3f /* grub-setup may overwrite this jump */
|
||||||
testb $0x80, %dl
|
testb $0x80, %dl
|
||||||
@@ -275,7 +275,7 @@ real_start:
|
|||||||
andw $1, %cx
|
andw $1, %cx
|
||||||
jz LOCAL(chs_mode)
|
jz LOCAL(chs_mode)
|
||||||
|
|
||||||
LOCAL(lba_mode):
|
lba_mode:
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
movw %ax, 4(%si)
|
movw %ax, 4(%si)
|
||||||
|
|
||||||
@@ -290,9 +290,9 @@ LOCAL(lba_mode):
|
|||||||
movw $0x0010, (%si)
|
movw $0x0010, (%si)
|
||||||
|
|
||||||
/* the absolute address */
|
/* the absolute address */
|
||||||
movl LOCAL(kernel_sector), %ebx
|
movl kernel_sector, %ebx
|
||||||
movl %ebx, 8(%si)
|
movl %ebx, 8(%si)
|
||||||
movl LOCAL(kernel_sector_high), %ebx
|
movl kernel_sector_high, %ebx
|
||||||
movl %ebx, 12(%si)
|
movl %ebx, 12(%si)
|
||||||
|
|
||||||
/* the segment of buffer address */
|
/* the segment of buffer address */
|
||||||
@@ -361,13 +361,13 @@ LOCAL(final_init):
|
|||||||
|
|
||||||
setup_sectors:
|
setup_sectors:
|
||||||
/* load logical sector start (top half) */
|
/* load logical sector start (top half) */
|
||||||
movl LOCAL(kernel_sector_high), %eax
|
movl kernel_sector_high, %eax
|
||||||
|
|
||||||
orl %eax, %eax
|
orl %eax, %eax
|
||||||
jnz LOCAL(geometry_error)
|
jnz LOCAL(geometry_error)
|
||||||
|
|
||||||
/* load logical sector start (bottom half) */
|
/* load logical sector start (bottom half) */
|
||||||
movl LOCAL(kernel_sector), %eax
|
movl kernel_sector, %eax
|
||||||
|
|
||||||
/* zero %edx */
|
/* zero %edx */
|
||||||
xorl %edx, %edx
|
xorl %edx, %edx
|
||||||
@@ -452,7 +452,7 @@ LOCAL(copy_buffer):
|
|||||||
popa
|
popa
|
||||||
|
|
||||||
/* boot kernel */
|
/* boot kernel */
|
||||||
jmp *(LOCAL(kernel_address))
|
jmp *(kernel_address)
|
||||||
|
|
||||||
/* END OF MAIN LOOP */
|
/* END OF MAIN LOOP */
|
||||||
|
|
||||||
@@ -511,13 +511,13 @@ LOCAL(message):
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HYBRID_BOOT
|
#ifdef HYBRID_BOOT
|
||||||
.org 0x1b0
|
. = _start + 0x1b0
|
||||||
LOCAL(kernel_sector):
|
kernel_sector:
|
||||||
.long 1
|
.long 1
|
||||||
LOCAL(kernel_sector_high):
|
kernel_sector_high:
|
||||||
.long 0
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
.org GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
. = _start + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
||||||
nt_magic:
|
nt_magic:
|
||||||
.long 0
|
.long 0
|
||||||
.word 0
|
.word 0
|
||||||
@@ -528,7 +528,7 @@ nt_magic:
|
|||||||
* sneaky, huh?
|
* sneaky, huh?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_PART_START
|
. = _start + GRUB_BOOT_MACHINE_PART_START
|
||||||
|
|
||||||
#ifndef HYBRID_BOOT
|
#ifndef HYBRID_BOOT
|
||||||
floppy
|
floppy
|
||||||
@@ -536,7 +536,7 @@ nt_magic:
|
|||||||
scratch
|
scratch
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_PART_END
|
. = _start + GRUB_BOOT_MACHINE_PART_END
|
||||||
|
|
||||||
/* the last 2 bytes in the sector 0 contain the signature */
|
/* the last 2 bytes in the sector 0 contain the signature */
|
||||||
.word GRUB_BOOT_MACHINE_SIGNATURE
|
.word GRUB_BOOT_MACHINE_SIGNATURE
|
||||||
@@ -43,7 +43,7 @@ _start:
|
|||||||
LOCAL(next):
|
LOCAL(next):
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
.org 8
|
. = start + 8
|
||||||
|
|
||||||
bi_pvd:
|
bi_pvd:
|
||||||
.long 0 /* LBA of primary volume descriptor. */
|
.long 0 /* LBA of primary volume descriptor. */
|
||||||
@@ -168,6 +168,6 @@ err_noboot_msg:
|
|||||||
err_cdfail_msg:
|
err_cdfail_msg:
|
||||||
.ascii "cdrom read fails\0"
|
.ascii "cdrom read fails\0"
|
||||||
|
|
||||||
.org 0x7FF
|
. = start + 0x7FF
|
||||||
|
|
||||||
.byte 0
|
.byte 0
|
||||||
@@ -37,8 +37,8 @@
|
|||||||
start:
|
start:
|
||||||
_start:
|
_start:
|
||||||
/*
|
/*
|
||||||
* _start is loaded at 0x8000 and is jumped to with
|
* _start is loaded at 0x2000 and is jumped to with
|
||||||
* CS:IP 0:0x8000 in kernel.
|
* CS:IP 0:0x2000 in kernel.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -362,7 +362,7 @@ LOCAL(message):
|
|||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
|
|
||||||
.org 0x200 - GRUB_BOOT_MACHINE_LIST_SIZE
|
. = _start + 0x200 - GRUB_BOOT_MACHINE_LIST_SIZE
|
||||||
LOCAL(firstlist): /* this label has to be before the first list entry!!! */
|
LOCAL(firstlist): /* this label has to be before the first list entry!!! */
|
||||||
/* fill the first data listing with the default */
|
/* fill the first data listing with the default */
|
||||||
blocklist_default_start:
|
blocklist_default_start:
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ data_start:
|
|||||||
xorl %ebp, %ebp
|
xorl %ebp, %ebp
|
||||||
jmp LOCAL(linux_next)
|
jmp LOCAL(linux_next)
|
||||||
|
|
||||||
.org 0x1F1
|
. = data_start + 0x1F1
|
||||||
|
|
||||||
setup_sects:
|
setup_sects:
|
||||||
.byte CODE_SECTORS
|
.byte CODE_SECTORS
|
||||||
@@ -292,4 +292,4 @@ LOCAL(fail):
|
|||||||
err_int15_msg:
|
err_int15_msg:
|
||||||
.ascii "move memory fails\0"
|
.ascii "move memory fails\0"
|
||||||
|
|
||||||
.org (CODE_SECTORS * 512 + 512)
|
. = _start + CODE_SECTORS * 512
|
||||||
@@ -38,5 +38,5 @@ start:
|
|||||||
/* This region is a junk. Do you say that this is wasteful?
|
/* This region is a junk. Do you say that this is wasteful?
|
||||||
But I like that the memory layout of the body is consistent
|
But I like that the memory layout of the body is consistent
|
||||||
among different kernels rather than scamping just for 1.5KB. */
|
among different kernels rather than scamping just for 1.5KB. */
|
||||||
.org 0x8200 - 0x7C00 - 0x200 - 1
|
. = _start + 0x8200 - 0x7C00 - 0x200 - 1
|
||||||
.byte 0
|
.byte 0
|
||||||
@@ -50,23 +50,23 @@ LOCAL (base):
|
|||||||
* This is a special data area.
|
* This is a special data area.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
||||||
LOCAL(compressed_size):
|
LOCAL(compressed_size):
|
||||||
.long 0
|
.long 0
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
||||||
LOCAL(uncompressed_size):
|
LOCAL(uncompressed_size):
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
.org GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY
|
. = _start + GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY
|
||||||
reed_solomon_redundancy:
|
reed_solomon_redundancy:
|
||||||
.long 0
|
.long 0
|
||||||
.org GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH
|
. = _start + GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH
|
||||||
.short (LOCAL(reed_solomon_part) - _start)
|
.short (LOCAL(reed_solomon_part) - _start)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the area for all of the special variables.
|
* This is the area for all of the special variables.
|
||||||
*/
|
*/
|
||||||
.org GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE
|
. = _start + GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE
|
||||||
LOCAL(boot_dev):
|
LOCAL(boot_dev):
|
||||||
.byte 0xFF, 0xFF, 0xFF
|
.byte 0xFF, 0xFF, 0xFF
|
||||||
LOCAL(boot_drive):
|
LOCAL(boot_drive):
|
||||||
@@ -89,13 +89,13 @@ LOCAL (codestart):
|
|||||||
sti /* we're safe again */
|
sti /* we're safe again */
|
||||||
|
|
||||||
/* save the boot drive */
|
/* save the boot drive */
|
||||||
movb %dl, LOCAL(boot_drive)
|
ADDR32 movb %dl, LOCAL(boot_drive)
|
||||||
|
|
||||||
/* reset disk system (%ah = 0) */
|
/* reset disk system (%ah = 0) */
|
||||||
int $0x13
|
int $0x13
|
||||||
|
|
||||||
/* transition to protected mode */
|
/* transition to protected mode */
|
||||||
calll real_to_prot
|
DATA32 call real_to_prot
|
||||||
|
|
||||||
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
||||||
.code32
|
.code32
|
||||||
@@ -118,16 +118,7 @@ LOCAL (codestart):
|
|||||||
|
|
||||||
#include "../../../kern/i386/realmode.S"
|
#include "../../../kern/i386/realmode.S"
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* This is a workaround for clang adding a section containing only .addrsig
|
|
||||||
* Since clang itself is unable to assemble this pseudo-opcode, just replace
|
|
||||||
* it with .text
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#define addrsig text
|
|
||||||
#include <rs_decoder.h>
|
#include <rs_decoder.h>
|
||||||
#undef addrsig
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
@@ -158,7 +149,7 @@ gate_a20_try_bios:
|
|||||||
movw $0x2401, %ax
|
movw $0x2401, %ax
|
||||||
int $0x15
|
int $0x15
|
||||||
|
|
||||||
calll real_to_prot
|
DATA32 call real_to_prot
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
popl %ebp
|
popl %ebp
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ _start:
|
|||||||
|
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
.org GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR
|
. = _start + GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR
|
||||||
VARIABLE(grub_core_entry_addr)
|
VARIABLE(grub_core_entry_addr)
|
||||||
.long 0
|
.long 0
|
||||||
1:
|
1:
|
||||||
@@ -48,9 +48,8 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
/* Transition to protected mode. We use pushl to force generation
|
/* Transition to protected mode. We use pushl to force generation
|
||||||
of a flat return address. */
|
of a flat return address. */
|
||||||
pushl $1f
|
pushl $1f
|
||||||
jmp real_to_prot
|
DATA32 jmp real_to_prot
|
||||||
.code32
|
.code32
|
||||||
1:
|
|
||||||
/* Ensure A20 is enabled. We're in qemu, so control port A works
|
/* Ensure A20 is enabled. We're in qemu, so control port A works
|
||||||
and there is no need to wait since there is no real logic, it's
|
and there is no need to wait since there is no real logic, it's
|
||||||
all emulated. */
|
all emulated. */
|
||||||
@@ -58,7 +57,8 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
andb $(~0x03), %al
|
andb $(~0x03), %al
|
||||||
orb $0x02, %al
|
orb $0x02, %al
|
||||||
outb $0x92
|
outb $0x92
|
||||||
movl EXT_C(grub_core_entry_addr), %edx
|
1:
|
||||||
|
movl grub_core_entry_addr, %edx
|
||||||
jmp *%edx
|
jmp *%edx
|
||||||
|
|
||||||
#include "../../../kern/i386/realmode.S"
|
#include "../../../kern/i386/realmode.S"
|
||||||
@@ -66,9 +66,9 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
/* Intel, in its infinite wisdom, decided to put the i8086 entry point
|
/* Intel, in its infinite wisdom, decided to put the i8086 entry point
|
||||||
*right here* and this is why we need this kludge. */
|
*right here* and this is why we need this kludge. */
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_SIZE - 16
|
. = GRUB_BOOT_MACHINE_SIZE - 16
|
||||||
|
|
||||||
.code16
|
.code16
|
||||||
|
|
||||||
jmp _start
|
jmp _start
|
||||||
.org GRUB_BOOT_MACHINE_SIZE
|
. = GRUB_BOOT_MACHINE_SIZE
|
||||||
@@ -63,18 +63,18 @@ __start:
|
|||||||
This way we don't need to sacrifice a register for it. */
|
This way we don't need to sacrifice a register for it. */
|
||||||
retry_cs5536:
|
retry_cs5536:
|
||||||
/* We have only one bus (0). Function is 0. */
|
/* We have only one bus (0). Function is 0. */
|
||||||
lui $t0, %hi(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F)
|
lui $t0, %hi(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR)
|
||||||
lui $t1, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F)
|
lui $t1, %hi(GRUB_MACHINE_PCI_CONFSPACE)
|
||||||
lui $t3, %hi(GRUB_CS5536_PCIID)
|
lui $t3, %hi(GRUB_CS5536_PCIID)
|
||||||
addiu $t3, $t3, %lo(GRUB_CS5536_PCIID)
|
addiu $t3, $t3, %lo(GRUB_CS5536_PCIID)
|
||||||
ori $t4, $zero, 1
|
ori $t4, $zero, 1
|
||||||
1:
|
1:
|
||||||
andi $t4, $t4, ((1 << GRUB_PCI_NUM_DEVICES_2F) - 1)
|
andi $t4, $t4, ((1 << GRUB_PCI_NUM_DEVICES) - 1)
|
||||||
/* In case of failure try again. CS5536 may be slow to come up. */
|
/* In case of failure try again. CS5536 may be slow to come up. */
|
||||||
beql $t4, $zero, retry_cs5536
|
beql $t4, $zero, retry_cs5536
|
||||||
nop
|
nop
|
||||||
sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F) ($t0)
|
sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) ($t0)
|
||||||
lw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_PCI_REG_PCI_ID) ($t1)
|
lw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_PCI_REG_PCI_ID) ($t1)
|
||||||
bnel $t2, $t3, 1b
|
bnel $t2, $t3, 1b
|
||||||
sll $t4, $t4, 1
|
sll $t4, $t4, 1
|
||||||
|
|
||||||
@@ -86,9 +86,9 @@ retry_cs5536:
|
|||||||
move $a0, $t4
|
move $a0, $t4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F)
|
lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE)
|
||||||
li $t1, GRUB_CS5536_MSR_MAILBOX_CONFIG_ENABLED
|
li $t1, GRUB_CS5536_MSR_MAILBOX_CONFIG_ENABLED
|
||||||
sw $t1, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_CONFIG) ($t0)
|
sw $t1, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_CONFIG) ($t0)
|
||||||
|
|
||||||
/* Set GPIO LBAR. */
|
/* Set GPIO LBAR. */
|
||||||
lui $a0, %hi(GRUB_CS5536_MSR_GPIO_BAR)
|
lui $a0, %hi(GRUB_CS5536_MSR_GPIO_BAR)
|
||||||
@@ -121,21 +121,21 @@ retry_cs5536:
|
|||||||
bal message
|
bal message
|
||||||
addiu $a0, $a0, %lo(smbus_enabled)
|
addiu $a0, $a0, %lo(smbus_enabled)
|
||||||
|
|
||||||
lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS)
|
lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS)
|
||||||
|
|
||||||
/* Disable SMB. */
|
/* Disable SMB. */
|
||||||
sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0)
|
sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0)
|
||||||
|
|
||||||
/* Disable interrupts. */
|
/* Disable interrupts. */
|
||||||
sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1) ($t0)
|
sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1) ($t0)
|
||||||
|
|
||||||
/* Set as master. */
|
/* Set as master. */
|
||||||
sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_ADDR) ($t0)
|
sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_ADDR) ($t0)
|
||||||
|
|
||||||
/* Launch SMBus controller at slowest speed possible. */
|
/* Launch SMBus controller at slowest speed possible. */
|
||||||
ori $t1, $zero, 0xff
|
ori $t1, $zero, 0xff
|
||||||
sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL3) ($t0)
|
sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL3) ($t0)
|
||||||
sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0)
|
sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0)
|
||||||
|
|
||||||
/* Yeeloong and Fuloong2f have only one memory slot. */
|
/* Yeeloong and Fuloong2f have only one memory slot. */
|
||||||
/* Output first byte on serial for debugging. */
|
/* Output first byte on serial for debugging. */
|
||||||
@@ -162,7 +162,7 @@ retry_cs5536:
|
|||||||
|
|
||||||
b continue
|
b continue
|
||||||
|
|
||||||
.org GRUB_CPU_LOONGSON_FLASH_TLB_REFILL - GRUB_CPU_LOONGSON_FLASH_START
|
. = start + GRUB_CPU_LOONGSON_FLASH_TLB_REFILL - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
tlb_refill:
|
tlb_refill:
|
||||||
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
||||||
mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR
|
mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR
|
||||||
@@ -196,13 +196,13 @@ tlb_refill:
|
|||||||
b fatal
|
b fatal
|
||||||
addiu $a0, $a0, %lo(unhandled_tlb_refill)
|
addiu $a0, $a0, %lo(unhandled_tlb_refill)
|
||||||
|
|
||||||
.org GRUB_CPU_LOONGSON_FLASH_CACHE_ERROR - GRUB_CPU_LOONGSON_FLASH_START
|
. = start + GRUB_CPU_LOONGSON_FLASH_CACHE_ERROR - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
cache_error:
|
cache_error:
|
||||||
lui $a0, %hi(unhandled_cache_error)
|
lui $a0, %hi(unhandled_cache_error)
|
||||||
b fatal
|
b fatal
|
||||||
addiu $a0, $a0, %lo(unhandled_cache_error)
|
addiu $a0, $a0, %lo(unhandled_cache_error)
|
||||||
|
|
||||||
.org GRUB_CPU_LOONGSON_FLASH_OTHER_EXCEPTION - GRUB_CPU_LOONGSON_FLASH_START
|
. = start + GRUB_CPU_LOONGSON_FLASH_OTHER_EXCEPTION - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
other_exception:
|
other_exception:
|
||||||
mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE
|
mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE
|
||||||
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
||||||
@@ -237,8 +237,8 @@ other_exception:
|
|||||||
addiu $a0, $a0, %lo(unhandled_exception)
|
addiu $a0, $a0, %lo(unhandled_exception)
|
||||||
|
|
||||||
gpio_init:
|
gpio_init:
|
||||||
lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_GPIO)
|
lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO)
|
||||||
addiu $t0, $t0, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_GPIO)
|
addiu $t0, $t0, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO)
|
||||||
lui $t1, %hi (gpio_dump)
|
lui $t1, %hi (gpio_dump)
|
||||||
addiu $t1, $t1, %lo (gpio_dump)
|
addiu $t1, $t1, %lo (gpio_dump)
|
||||||
|
|
||||||
@@ -344,7 +344,7 @@ printhex:
|
|||||||
nop
|
nop
|
||||||
srl $t1, $a0, 28
|
srl $t1, $a0, 28
|
||||||
addiu $t1, $t1, -10
|
addiu $t1, $t1, -10
|
||||||
bltz $t1, 2f
|
blt $t1, $zero, 2f
|
||||||
sll $a0, $a0, 4
|
sll $a0, $a0, 4
|
||||||
addiu $t1, $t1, 'A'-10-'0'
|
addiu $t1, $t1, 'A'-10-'0'
|
||||||
2: addiu $t1, $t1, '0'+10
|
2: addiu $t1, $t1, '0'+10
|
||||||
@@ -368,18 +368,18 @@ self:
|
|||||||
Clobbered: $t0
|
Clobbered: $t0
|
||||||
*/
|
*/
|
||||||
wrmsr:
|
wrmsr:
|
||||||
lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F)
|
lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE)
|
||||||
sw $a0, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_ADDR) ($t0)
|
sw $a0, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_ADDR) ($t0)
|
||||||
sw $a1, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_DATA0) ($t0)
|
sw $a1, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_DATA0) ($t0)
|
||||||
jr $ra
|
jr $ra
|
||||||
sw $a2, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_DATA1) ($t0)
|
sw $a2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_DATA1) ($t0)
|
||||||
|
|
||||||
/* Wait for SMBus data or empty transmitter. */
|
/* Wait for SMBus data or empty transmitter. */
|
||||||
/* In: $a0 = exception handler. Out: none. Clobbered: $t0, $t1 */
|
/* In: $a0 = exception handler. Out: none. Clobbered: $t0, $t1 */
|
||||||
smbus_wait:
|
smbus_wait:
|
||||||
1:
|
1:
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE)
|
||||||
lb $t0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
lb $t0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
andi $t1, $t0, GRUB_CS5536_SMB_REG_STATUS_SDAST
|
andi $t1, $t0, GRUB_CS5536_SMB_REG_STATUS_SDAST
|
||||||
bne $t1, $zero, return
|
bne $t1, $zero, return
|
||||||
nop
|
nop
|
||||||
@@ -398,55 +398,55 @@ read_spd:
|
|||||||
move $t2, $a0
|
move $t2, $a0
|
||||||
move $t3, $ra
|
move $t3, $ra
|
||||||
lui $a0, %hi(read_spd_fail)
|
lui $a0, %hi(read_spd_fail)
|
||||||
addiu $a0, $a0, %lo(read_spd_fail)
|
addiu $a0, $a0, %hi(read_spd_fail)
|
||||||
|
|
||||||
/* Send START. */
|
/* Send START. */
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE)
|
||||||
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START
|
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START
|
||||||
bal smbus_wait
|
bal smbus_wait
|
||||||
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
|
|
||||||
/* Send device address. */
|
/* Send device address. */
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE)
|
||||||
sll $t1, $a1, 1
|
sll $t1, $a1, 1
|
||||||
bal smbus_wait
|
bal smbus_wait
|
||||||
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
|
|
||||||
/* Send ACK. */
|
/* Send ACK. */
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE)
|
||||||
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_ACK
|
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_ACK
|
||||||
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
|
|
||||||
/* Send byte address. */
|
/* Send byte address. */
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE)
|
||||||
bal smbus_wait
|
bal smbus_wait
|
||||||
sb $t2, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
sb $t2, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
|
|
||||||
/* Send START. */
|
/* Send START. */
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE)
|
||||||
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START
|
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START
|
||||||
bal smbus_wait
|
bal smbus_wait
|
||||||
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
|
|
||||||
/* Send device address. */
|
/* Send device address. */
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE)
|
||||||
sll $t1, $a1, 1
|
sll $t1, $a1, 1
|
||||||
ori $t1, $t1, 1
|
ori $t1, $t1, 1
|
||||||
bal smbus_wait
|
bal smbus_wait
|
||||||
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
|
|
||||||
/* Send STOP. */
|
/* Send STOP. */
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE)
|
||||||
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_STOP
|
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_STOP
|
||||||
bal smbus_wait
|
bal smbus_wait
|
||||||
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
|
|
||||||
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F)
|
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE)
|
||||||
lb $v0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
|
lb $v0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0)
|
||||||
jr $t3
|
jr $t3
|
||||||
andi $v0, $v0, 0xff
|
andi $v0, $v0, 0xff
|
||||||
read_spd_fail:
|
read_spd_fail:
|
||||||
@@ -547,7 +547,7 @@ gpio_dump:
|
|||||||
#endif
|
#endif
|
||||||
gpio_dump_end:
|
gpio_dump_end:
|
||||||
|
|
||||||
.p2align 3
|
.p2align
|
||||||
|
|
||||||
write_dumpreg:
|
write_dumpreg:
|
||||||
ld $t2, 0($t6)
|
ld $t2, 0($t6)
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
#include <grub/machine/memory.h>
|
#include <grub/machine/memory.h>
|
||||||
#include <grub/machine/kernel.h>
|
#include <grub/machine/kernel.h>
|
||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
#include <grub/mips/asm.h>
|
|
||||||
|
|
||||||
#define BASE_ADDR 8
|
#define BASE_ADDR 8
|
||||||
|
|
||||||
@@ -40,13 +39,13 @@ start:
|
|||||||
bal codestart
|
bal codestart
|
||||||
nop
|
nop
|
||||||
base:
|
base:
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
||||||
compressed_size:
|
compressed_size:
|
||||||
.long 0
|
.long 0
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
||||||
uncompressed_size:
|
uncompressed_size:
|
||||||
.long 0
|
.long 0
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR
|
||||||
uncompressed_addr:
|
uncompressed_addr:
|
||||||
.long 0
|
.long 0
|
||||||
codestart:
|
codestart:
|
||||||
@@ -119,50 +118,50 @@ parsestr:
|
|||||||
move $v0, $zero
|
move $v0, $zero
|
||||||
move $t3, $t1
|
move $t3, $t1
|
||||||
3:
|
3:
|
||||||
lb GRUB_ASM_T4, 0($t2)
|
lb $t4, 0($t2)
|
||||||
lb GRUB_ASM_T5, 0($t3)
|
lb $t5, 0($t3)
|
||||||
addiu $t2, $t2, 1
|
addiu $t2, $t2, 1
|
||||||
addiu $t3, $t3, 1
|
addiu $t3, $t3, 1
|
||||||
beq GRUB_ASM_T5, $zero, 1f
|
beq $t5, $zero, 1f
|
||||||
nop
|
nop
|
||||||
beq GRUB_ASM_T5, GRUB_ASM_T4, 3b
|
beq $t5, $t4, 3b
|
||||||
nop
|
nop
|
||||||
bne GRUB_ASM_T4, $zero, 1f
|
bne $t4, $zero, 1f
|
||||||
nop
|
nop
|
||||||
|
|
||||||
addiu $t3, $t3, 0xffff
|
addiu $t3, $t3, 0xffff
|
||||||
digcont:
|
digcont:
|
||||||
lb GRUB_ASM_T5, 0($t3)
|
lb $t5, 0($t3)
|
||||||
/* Substract '0' from digit. */
|
/* Substract '0' from digit. */
|
||||||
addiu GRUB_ASM_T5, GRUB_ASM_T5, 0xffd0
|
addiu $t5, $t5, 0xffd0
|
||||||
bltz GRUB_ASM_T5, 1f
|
bltz $t5, 1f
|
||||||
nop
|
nop
|
||||||
addiu GRUB_ASM_T4, GRUB_ASM_T5, 0xfff7
|
addiu $t4, $t5, 0xfff7
|
||||||
bgtz GRUB_ASM_T4, 1f
|
bgtz $t4, 1f
|
||||||
nop
|
nop
|
||||||
/* Multiply $v0 by 10 with bitshifts. */
|
/* Multiply $v0 by 10 with bitshifts. */
|
||||||
sll $v0, $v0, 1
|
sll $v0, $v0, 1
|
||||||
sll GRUB_ASM_T4, $v0, 2
|
sll $t4, $v0, 2
|
||||||
addu $v0, $v0, GRUB_ASM_T4
|
addu $v0, $v0, $t4
|
||||||
addu $v0, $v0, GRUB_ASM_T5
|
addu $v0, $v0, $t5
|
||||||
addiu $t3, $t3, 1
|
addiu $t3, $t3, 1
|
||||||
b digcont
|
b digcont
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
jr $ra
|
jr $ra
|
||||||
nop
|
nop
|
||||||
busclockstr: .asciz "busclock="
|
busclockstr: .asciiz "busclock="
|
||||||
cpuclockstr: .asciz "cpuclock="
|
cpuclockstr: .asciiz "cpuclock="
|
||||||
memsizestr: .asciz "memsize="
|
memsizestr: .asciiz "memsize="
|
||||||
highmemsizestr: .asciz "highmemsize="
|
highmemsizestr: .asciiz "highmemsize="
|
||||||
machtype_yeeloong_str1: .asciz "machtype=8.9"
|
machtype_yeeloong_str1: .asciiz "machtype=8.9"
|
||||||
machtype_yeeloong_str2: .asciz "machtype=lemote-yeeloong-"
|
machtype_yeeloong_str2: .asciiz "machtype=lemote-yeeloong-"
|
||||||
machtype_fuloong2f_str: .asciz "machtype=lemote-fuloong-2f"
|
machtype_fuloong2f_str: .asciiz "machtype=lemote-fuloong-2f"
|
||||||
machtype_fuloong2e_str: .asciz "machtype=lemote-fuloong-2e"
|
machtype_fuloong2e_str: .asciiz "machtype=lemote-fuloong-2e"
|
||||||
pmon_yeeloong_str: .asciz "PMON_VER=LM8"
|
pmon_yeeloong_str: .asciiz "PMON_VER=LM8"
|
||||||
pmon_fuloong2f_str: .asciz "PMON_VER=LM6"
|
pmon_fuloong2f_str: .asciiz "PMON_VER=LM6"
|
||||||
pmon_yeeloong_verstr: .asciz "Version=LM8"
|
pmon_yeeloong_verstr: .asciiz "Version=LM8"
|
||||||
pmon_fuloong2f_verstr: .asciz "Version=LM6"
|
pmon_fuloong2f_verstr: .asciiz "Version=LM6"
|
||||||
.p2align 2
|
.p2align 2
|
||||||
|
|
||||||
argdone:
|
argdone:
|
||||||
@@ -183,10 +182,10 @@ argdone:
|
|||||||
b argdone
|
b argdone
|
||||||
addiu $a1, $a1, 4
|
addiu $a1, $a1, 4
|
||||||
do_check:
|
do_check:
|
||||||
lb GRUB_ASM_T4, 0($t7)
|
lb $t4, 0($t7)
|
||||||
beq GRUB_ASM_T4, $zero, 1f
|
beq $t4, $zero, 1f
|
||||||
lb $t3, 0($t6)
|
lb $t3, 0($t6)
|
||||||
bne $t3, GRUB_ASM_T4, 2f
|
bne $t3, $t4, 2f
|
||||||
addiu $t6, $t6, 1
|
addiu $t6, $t6, 1
|
||||||
b do_check
|
b do_check
|
||||||
addiu $t7, $t7, 1
|
addiu $t7, $t7, 1
|
||||||
@@ -223,8 +222,8 @@ cmdlinedone:
|
|||||||
|
|
||||||
1:
|
1:
|
||||||
beq $t1, $t3, 2f
|
beq $t1, $t3, 2f
|
||||||
lb GRUB_ASM_T4, 0($t2)
|
lb $t4, 0($t2)
|
||||||
sb GRUB_ASM_T4, 0($t1)
|
sb $t4, 0($t1)
|
||||||
addiu $t1, $t1, 1
|
addiu $t1, $t1, 1
|
||||||
b 1b
|
b 1b
|
||||||
addiu $t2, $t2, 1
|
addiu $t2, $t2, 1
|
||||||
|
|||||||
@@ -21,24 +21,6 @@
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
.align 4
|
.align 4
|
||||||
/*
|
|
||||||
* We're writing the a.out header ourselves as newer
|
|
||||||
* upstream versions of binutils no longer support
|
|
||||||
* the a.out format on sparc64.
|
|
||||||
*
|
|
||||||
* The boot loader fits into 512 bytes with 32 bytes
|
|
||||||
* used for the a.out header, hence the text segment
|
|
||||||
* size is 512 - 32. There is no data segment and no
|
|
||||||
* code relocation, thus those fields remain zero.
|
|
||||||
*/
|
|
||||||
.word 0x1030107 /* Magic number. */
|
|
||||||
.word 512 - GRUB_BOOT_AOUT_HEADER_SIZE /* Size of text segment. */
|
|
||||||
.word 0 /* Size of initialized data. */
|
|
||||||
.word 0 /* Size of uninitialized data. */
|
|
||||||
.word 0 /* Size of symbol table || checksum. */
|
|
||||||
.word _start /* Entry point. */
|
|
||||||
.word 0 /* Size of text relocation. */
|
|
||||||
.word 0 /* Size of data relocation. */
|
|
||||||
.globl _start
|
.globl _start
|
||||||
_start:
|
_start:
|
||||||
/* OF CIF entry point arrives in %o4 */
|
/* OF CIF entry point arrives in %o4 */
|
||||||
@@ -48,7 +30,7 @@ pic_base:
|
|||||||
|
|
||||||
#ifndef CDBOOT
|
#ifndef CDBOOT
|
||||||
/* The offsets to these locations are defined by the
|
/* The offsets to these locations are defined by the
|
||||||
* GRUB_BOOT_MACHINE_foo macros in include/grub/sparc64/ieee1275/boot.h,
|
* GRUB_BOOT_MACHINE_foo macros in include/grub/sparc/ieee1275/boot.h,
|
||||||
* and grub-setup uses this to patch these next three values as needed.
|
* and grub-setup uses this to patch these next three values as needed.
|
||||||
*
|
*
|
||||||
* The boot_path will be the OF device path of the partition where the
|
* The boot_path will be the OF device path of the partition where the
|
||||||
@@ -58,23 +40,19 @@ pic_base:
|
|||||||
*
|
*
|
||||||
* After loading in that block we will execute it by jumping to the
|
* After loading in that block we will execute it by jumping to the
|
||||||
* load address plus the size of the prepended A.OUT header (32 bytes).
|
* load address plus the size of the prepended A.OUT header (32 bytes).
|
||||||
*
|
|
||||||
* Since this assembly code includes the 32 bytes long a.out header,
|
|
||||||
* we need to move the actual code entry point forward by the size
|
|
||||||
* of the a.out header, i.e. += GRUB_BOOT_AOUT_HEADER_SIZE.
|
|
||||||
*/
|
*/
|
||||||
.org GRUB_BOOT_MACHINE_BOOT_DEVPATH + GRUB_BOOT_AOUT_HEADER_SIZE
|
. = _start + GRUB_BOOT_MACHINE_BOOT_DEVPATH
|
||||||
boot_path:
|
boot_path:
|
||||||
.org GRUB_BOOT_MACHINE_KERNEL_BYTE + GRUB_BOOT_AOUT_HEADER_SIZE
|
. = _start + GRUB_BOOT_MACHINE_KERNEL_BYTE
|
||||||
boot_path_end:
|
|
||||||
kernel_byte: .xword (2 << 9)
|
kernel_byte: .xword (2 << 9)
|
||||||
|
boot_path_end:
|
||||||
kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
||||||
#else
|
#else
|
||||||
#define boot_path (_start + 512 + SCRATCH_PAD_BOOT_SIZE)
|
#define boot_path (_start + 512 + SCRATCH_PAD_BOOT_SIZE)
|
||||||
#define boot_path_end (_start + 1024)
|
#define boot_path_end (_start + 1024)
|
||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
|
|
||||||
.org 8 + GRUB_BOOT_AOUT_HEADER_SIZE
|
. = _start + 8
|
||||||
kernel_byte: .xword (2 << 9)
|
kernel_byte: .xword (2 << 9)
|
||||||
kernel_size: .word 512
|
kernel_size: .word 512
|
||||||
kernel_address: .word GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS
|
kernel_address: .word GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS
|
||||||
@@ -91,10 +69,6 @@ prom_seek_name: .asciz "seek"
|
|||||||
prom_read_name: .asciz "read"
|
prom_read_name: .asciz "read"
|
||||||
prom_exit_name: .asciz "exit"
|
prom_exit_name: .asciz "exit"
|
||||||
grub_name: .asciz "GRUB "
|
grub_name: .asciz "GRUB "
|
||||||
#ifdef CDBOOT
|
|
||||||
prom_close_name: .asciz "close"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define GRUB_NAME_LEN 5
|
#define GRUB_NAME_LEN 5
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
@@ -239,12 +213,6 @@ bootpath_known:
|
|||||||
call prom_call_3_1_o1
|
call prom_call_3_1_o1
|
||||||
#ifdef CDBOOT
|
#ifdef CDBOOT
|
||||||
LDUW_ABS(kernel_size, 0x00, %o3)
|
LDUW_ABS(kernel_size, 0x00, %o3)
|
||||||
|
|
||||||
GET_ABS(prom_close_name, %o0)
|
|
||||||
mov 1, %g1
|
|
||||||
mov 0, %o5
|
|
||||||
call prom_call
|
|
||||||
mov BOOTDEV_REG, %o1
|
|
||||||
#else
|
#else
|
||||||
mov 512, %o3
|
mov 512, %o3
|
||||||
#endif
|
#endif
|
||||||
@@ -256,7 +224,7 @@ bootpath_known:
|
|||||||
#else
|
#else
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
.org GRUB_BOOT_MACHINE_CODE_END
|
. = _start + GRUB_BOOT_MACHINE_CODE_END
|
||||||
|
|
||||||
/* the last 4 bytes in the sector 0 contain the signature */
|
/* the last 4 bytes in the sector 0 contain the signature */
|
||||||
.word GRUB_BOOT_MACHINE_SIGNATURE
|
.word GRUB_BOOT_MACHINE_SIGNATURE
|
||||||
@@ -136,7 +136,7 @@ lastlist:
|
|||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
|
|
||||||
.org (0x200 - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE)
|
. = _start + (0x200 - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE)
|
||||||
blocklist_default_start:
|
blocklist_default_start:
|
||||||
.word 0
|
.word 0
|
||||||
.word 2
|
.word 2
|
||||||
|
|||||||
+3
-80
@@ -30,66 +30,8 @@ static grub_addr_t addr_win[GRUB_MACHINE_PCI_NUM_WIN] =
|
|||||||
{GRUB_MACHINE_PCI_WIN1_ADDR, GRUB_MACHINE_PCI_WIN2_ADDR,
|
{GRUB_MACHINE_PCI_WIN1_ADDR, GRUB_MACHINE_PCI_WIN2_ADDR,
|
||||||
GRUB_MACHINE_PCI_WIN3_ADDR};
|
GRUB_MACHINE_PCI_WIN3_ADDR};
|
||||||
|
|
||||||
grub_bonito_type_t grub_bonito_type;
|
|
||||||
|
|
||||||
static volatile void *
|
|
||||||
config_addr (grub_pci_address_t addr)
|
|
||||||
{
|
|
||||||
if (grub_bonito_type == GRUB_BONITO_2F)
|
|
||||||
{
|
|
||||||
GRUB_MACHINE_PCI_CONF_CTRL_REG_2F = 1 << ((addr >> 11) & 0xf);
|
|
||||||
return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_2F
|
|
||||||
| (addr & 0x07ff));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
if (addr >> 16)
|
|
||||||
return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_3A_EXT | addr);
|
|
||||||
else
|
|
||||||
return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_3A | addr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_uint32_t
|
|
||||||
grub_pci_read (grub_pci_address_t addr)
|
|
||||||
{
|
|
||||||
return *(volatile grub_uint32_t *) config_addr (addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_uint16_t
|
|
||||||
grub_pci_read_word (grub_pci_address_t addr)
|
|
||||||
{
|
|
||||||
return *(volatile grub_uint16_t *) config_addr (addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_uint8_t
|
|
||||||
grub_pci_read_byte (grub_pci_address_t addr)
|
|
||||||
{
|
|
||||||
return *(volatile grub_uint8_t *) config_addr (addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_pci_write (grub_pci_address_t addr, grub_uint32_t data)
|
|
||||||
{
|
|
||||||
*(volatile grub_uint32_t *) config_addr (addr) = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data)
|
|
||||||
{
|
|
||||||
*(volatile grub_uint16_t *) config_addr (addr) = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data)
|
|
||||||
{
|
|
||||||
*(volatile grub_uint8_t *) config_addr (addr) = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
write_bases_2f (void)
|
write_bases (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
grub_uint32_t reg = 0;
|
grub_uint32_t reg = 0;
|
||||||
@@ -97,15 +39,13 @@ write_bases_2f (void)
|
|||||||
reg |= (((base_win[i] >> GRUB_MACHINE_PCI_WIN_SHIFT)
|
reg |= (((base_win[i] >> GRUB_MACHINE_PCI_WIN_SHIFT)
|
||||||
& GRUB_MACHINE_PCI_WIN_MASK)
|
& GRUB_MACHINE_PCI_WIN_MASK)
|
||||||
<< (i * GRUB_MACHINE_PCI_WIN_MASK_SIZE));
|
<< (i * GRUB_MACHINE_PCI_WIN_MASK_SIZE));
|
||||||
GRUB_MACHINE_PCI_IO_CTRL_REG_2F = reg;
|
GRUB_MACHINE_PCI_IO_CTRL_REG = reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
volatile void *
|
volatile void *
|
||||||
grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
|
grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
|
||||||
grub_addr_t base, grub_size_t size)
|
grub_addr_t base, grub_size_t size)
|
||||||
{
|
{
|
||||||
if (grub_bonito_type == GRUB_BONITO_2F)
|
|
||||||
{
|
|
||||||
int i;
|
int i;
|
||||||
grub_addr_t newbase;
|
grub_addr_t newbase;
|
||||||
|
|
||||||
@@ -126,25 +66,11 @@ grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
|
|||||||
{
|
{
|
||||||
usage_win[i]++;
|
usage_win[i]++;
|
||||||
base_win[i] = newbase;
|
base_win[i] = newbase;
|
||||||
write_bases_2f ();
|
write_bases ();
|
||||||
return (void *)
|
return (void *)
|
||||||
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
|
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
|
||||||
}
|
}
|
||||||
grub_fatal ("Out of PCI windows.");
|
grub_fatal ("Out of PCI windows.");
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int region = 0;
|
|
||||||
if (base >= 0x10000000
|
|
||||||
&& base + size <= 0x18000000)
|
|
||||||
region = 1;
|
|
||||||
if (base >= 0x1c000000
|
|
||||||
&& base + size <= 0x1f000000)
|
|
||||||
region = 2;
|
|
||||||
if (region == 0)
|
|
||||||
grub_fatal ("Attempt to map out of regions");
|
|
||||||
return (void *) (0xa0000000 | base);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
@@ -160,8 +86,6 @@ grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
|
|||||||
volatile void *mem,
|
volatile void *mem,
|
||||||
grub_size_t size __attribute__ ((unused)))
|
grub_size_t size __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
if (grub_bonito_type == GRUB_BONITO_2F)
|
|
||||||
{
|
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
||||||
if (usage_win[i] && addr_win[i]
|
if (usage_win[i] && addr_win[i]
|
||||||
@@ -172,5 +96,4 @@ grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
grub_fatal ("Tried to unmap not mapped region");
|
grub_fatal ("Tried to unmap not mapped region");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -55,8 +55,7 @@ grub_pci_device_map_range (grub_pci_device_t dev, grub_addr_t base,
|
|||||||
int err;
|
int err;
|
||||||
err = pci_device_map_range (dev, base, size, PCI_DEV_MAP_FLAG_WRITABLE, &addr);
|
err = pci_device_map_range (dev, base, size, PCI_DEV_MAP_FLAG_WRITABLE, &addr);
|
||||||
if (err)
|
if (err)
|
||||||
grub_util_error ("mapping 0x%llx failed (error %d)",
|
grub_util_error ("mapping 0x%x failed (error %d)\n", base, err);
|
||||||
(unsigned long long) base, err);
|
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,12 +66,12 @@ grub_pci_device_unmap_range (grub_pci_device_t dev, void *mem,
|
|||||||
pci_device_unmap_range (dev, mem, size);
|
pci_device_unmap_range (dev, mem, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_INIT (emupci)
|
GRUB_MOD_INIT (pci)
|
||||||
{
|
{
|
||||||
pci_system_init ();
|
pci_system_init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI (emupci)
|
GRUB_MOD_FINI (pci)
|
||||||
{
|
{
|
||||||
pci_system_cleanup ();
|
pci_system_cleanup ();
|
||||||
}
|
}
|
||||||
@@ -1,256 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2016 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/fdtbus.h>
|
|
||||||
#include <grub/fdt.h>
|
|
||||||
#include <grub/term.h>
|
|
||||||
|
|
||||||
static const void *dtb;
|
|
||||||
static grub_size_t root_address_cells, root_size_cells;
|
|
||||||
/* Pointer to this symbol signals invalid mapping. */
|
|
||||||
char grub_fdtbus_invalid_mapping[1];
|
|
||||||
|
|
||||||
struct grub_fdtbus_dev *devs;
|
|
||||||
struct grub_fdtbus_driver *drivers;
|
|
||||||
|
|
||||||
int
|
|
||||||
grub_fdtbus_is_compatible (const char *compat_string,
|
|
||||||
const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
grub_size_t compatible_size;
|
|
||||||
const char *compatible = grub_fdt_get_prop (dtb, dev->node, "compatible",
|
|
||||||
&compatible_size);
|
|
||||||
if (!compatible)
|
|
||||||
return 0;
|
|
||||||
const char *compatible_end = compatible + compatible_size;
|
|
||||||
while (compatible < compatible_end)
|
|
||||||
{
|
|
||||||
if (grub_strcmp (compat_string, compatible) == 0)
|
|
||||||
return 1;
|
|
||||||
compatible += grub_strlen (compatible) + 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
fdtbus_scan (struct grub_fdtbus_dev *parent)
|
|
||||||
{
|
|
||||||
int node;
|
|
||||||
for (node = grub_fdt_first_node (dtb, parent ? parent->node : 0); node >= 0;
|
|
||||||
node = grub_fdt_next_node (dtb, node))
|
|
||||||
{
|
|
||||||
struct grub_fdtbus_dev *dev;
|
|
||||||
struct grub_fdtbus_driver *driver;
|
|
||||||
dev = grub_zalloc (sizeof (*dev));
|
|
||||||
if (!dev)
|
|
||||||
{
|
|
||||||
grub_print_error ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dev->node = node;
|
|
||||||
dev->next = devs;
|
|
||||||
dev->parent = parent;
|
|
||||||
devs = dev;
|
|
||||||
FOR_LIST_ELEMENTS(driver, drivers)
|
|
||||||
if (!dev->driver && grub_fdtbus_is_compatible (driver->compatible, dev))
|
|
||||||
{
|
|
||||||
grub_dprintf ("fdtbus", "Attaching %s\n", driver->compatible);
|
|
||||||
if (driver->attach (dev) == GRUB_ERR_NONE)
|
|
||||||
{
|
|
||||||
grub_dprintf ("fdtbus", "Attached %s\n", driver->compatible);
|
|
||||||
dev->driver = driver;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
grub_print_error ();
|
|
||||||
}
|
|
||||||
fdtbus_scan (dev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_fdtbus_register (struct grub_fdtbus_driver *driver)
|
|
||||||
{
|
|
||||||
struct grub_fdtbus_dev *dev;
|
|
||||||
grub_dprintf ("fdtbus", "Registering %s\n", driver->compatible);
|
|
||||||
grub_list_push (GRUB_AS_LIST_P (&drivers),
|
|
||||||
GRUB_AS_LIST (driver));
|
|
||||||
for (dev = devs; dev; dev = dev->next)
|
|
||||||
if (!dev->driver && grub_fdtbus_is_compatible (driver->compatible, dev))
|
|
||||||
{
|
|
||||||
grub_dprintf ("fdtbus", "Attaching %s (%p)\n", driver->compatible, dev);
|
|
||||||
if (driver->attach (dev) == GRUB_ERR_NONE)
|
|
||||||
{
|
|
||||||
grub_dprintf ("fdtbus", "Attached %s\n", driver->compatible);
|
|
||||||
dev->driver = driver;
|
|
||||||
}
|
|
||||||
grub_print_error ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_fdtbus_unregister (struct grub_fdtbus_driver *driver)
|
|
||||||
{
|
|
||||||
grub_list_remove (GRUB_AS_LIST (driver));
|
|
||||||
struct grub_fdtbus_dev *dev;
|
|
||||||
for (dev = devs; dev; dev = dev->next)
|
|
||||||
if (dev->driver == driver)
|
|
||||||
{
|
|
||||||
if (driver->detach)
|
|
||||||
driver->detach(dev);
|
|
||||||
dev->driver = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_fdtbus_init (const void *dtb_in, grub_size_t size)
|
|
||||||
{
|
|
||||||
if (!dtb_in || grub_fdt_check_header (dtb_in, size) < 0)
|
|
||||||
grub_fatal ("invalid FDT");
|
|
||||||
dtb = dtb_in;
|
|
||||||
const grub_uint32_t *prop = grub_fdt_get_prop (dtb, 0, "#address-cells", 0);
|
|
||||||
if (prop)
|
|
||||||
root_address_cells = grub_be_to_cpu32 (*prop);
|
|
||||||
else
|
|
||||||
root_address_cells = 1;
|
|
||||||
|
|
||||||
prop = grub_fdt_get_prop (dtb, 0, "#size-cells", 0);
|
|
||||||
if (prop)
|
|
||||||
root_size_cells = grub_be_to_cpu32 (*prop);
|
|
||||||
else
|
|
||||||
root_size_cells = 1;
|
|
||||||
|
|
||||||
fdtbus_scan (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
get_address_cells (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
const grub_uint32_t *prop;
|
|
||||||
if (!dev)
|
|
||||||
return root_address_cells;
|
|
||||||
prop = grub_fdt_get_prop (dtb, dev->node, "#address-cells", 0);
|
|
||||||
if (prop)
|
|
||||||
return grub_be_to_cpu32 (*prop);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
get_size_cells (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
const grub_uint32_t *prop;
|
|
||||||
if (!dev)
|
|
||||||
return root_size_cells;
|
|
||||||
prop = grub_fdt_get_prop (dtb, dev->node, "#size-cells", 0);
|
|
||||||
if (prop)
|
|
||||||
return grub_be_to_cpu32 (*prop);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_uint64_t
|
|
||||||
get64 (const grub_uint32_t *reg, grub_size_t cells)
|
|
||||||
{
|
|
||||||
grub_uint64_t val = 0;
|
|
||||||
if (cells >= 1)
|
|
||||||
val = grub_be_to_cpu32 (reg[cells - 1]);
|
|
||||||
if (cells >= 2)
|
|
||||||
val |= ((grub_uint64_t) grub_be_to_cpu32 (reg[cells - 2])) << 32;
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static volatile void *
|
|
||||||
translate (const struct grub_fdtbus_dev *dev, const grub_uint32_t *reg)
|
|
||||||
{
|
|
||||||
volatile void *ret;
|
|
||||||
const grub_uint32_t *ranges;
|
|
||||||
grub_size_t ranges_size, cells_per_mapping;
|
|
||||||
grub_size_t parent_address_cells, child_address_cells, child_size_cells;
|
|
||||||
grub_size_t nmappings, i;
|
|
||||||
if (dev == 0)
|
|
||||||
{
|
|
||||||
grub_uint64_t val;
|
|
||||||
val = get64 (reg, root_address_cells);
|
|
||||||
if (sizeof (void *) == 4 && (val >> 32))
|
|
||||||
return grub_fdtbus_invalid_mapping;
|
|
||||||
return (void *) (grub_addr_t) val;
|
|
||||||
}
|
|
||||||
ranges = grub_fdt_get_prop (dtb, dev->node, "ranges", &ranges_size);
|
|
||||||
if (!ranges)
|
|
||||||
return grub_fdtbus_invalid_mapping;
|
|
||||||
if (ranges_size == 0)
|
|
||||||
return translate (dev->parent, reg);
|
|
||||||
parent_address_cells = get_address_cells (dev->parent);
|
|
||||||
child_address_cells = get_address_cells (dev);
|
|
||||||
child_size_cells = get_size_cells (dev);
|
|
||||||
cells_per_mapping = parent_address_cells + child_address_cells + child_size_cells;
|
|
||||||
nmappings = ranges_size / 4 / cells_per_mapping;
|
|
||||||
for (i = 0; i < nmappings; i++)
|
|
||||||
{
|
|
||||||
const grub_uint32_t *child_addr = &ranges[i * cells_per_mapping];
|
|
||||||
const grub_uint32_t *parent_addr = child_addr + child_address_cells;
|
|
||||||
grub_uint64_t child_size = get64 (parent_addr + parent_address_cells, child_size_cells);
|
|
||||||
|
|
||||||
if (child_address_cells > 2 && grub_memcmp (reg, child_addr, (child_address_cells - 2) * 4) != 0)
|
|
||||||
continue;
|
|
||||||
if (get64 (reg, child_address_cells) < get64 (child_addr, child_address_cells))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
grub_uint64_t offset = get64 (reg, child_address_cells) - get64 (child_addr, child_address_cells);
|
|
||||||
if (offset >= child_size)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ret = translate (dev->parent, parent_addr);
|
|
||||||
if (grub_fdtbus_is_mapping_valid (ret))
|
|
||||||
ret = (volatile char *) ret + offset;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
return grub_fdtbus_invalid_mapping;
|
|
||||||
}
|
|
||||||
|
|
||||||
volatile void *
|
|
||||||
grub_fdtbus_map_reg (const struct grub_fdtbus_dev *dev, int regno, grub_size_t *size)
|
|
||||||
{
|
|
||||||
grub_size_t address_cells, size_cells;
|
|
||||||
address_cells = get_address_cells (dev->parent);
|
|
||||||
size_cells = get_size_cells (dev->parent);
|
|
||||||
const grub_uint32_t *reg = grub_fdt_get_prop (dtb, dev->node, "reg", 0);
|
|
||||||
if (size && size_cells)
|
|
||||||
*size = reg[(address_cells + size_cells) * regno + address_cells];
|
|
||||||
if (size && !size_cells)
|
|
||||||
*size = 0;
|
|
||||||
return translate (dev->parent, reg + (address_cells + size_cells) * regno);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
grub_fdtbus_get_name (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
return grub_fdt_get_nodename (dtb, dev->node);
|
|
||||||
}
|
|
||||||
|
|
||||||
const void *
|
|
||||||
grub_fdtbus_get_prop (const struct grub_fdtbus_dev *dev,
|
|
||||||
const char *name,
|
|
||||||
grub_uint32_t *len)
|
|
||||||
{
|
|
||||||
return grub_fdt_get_prop (dtb, dev->node, name, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
const void *
|
|
||||||
grub_fdtbus_get_fdt (void)
|
|
||||||
{
|
|
||||||
return dtb;
|
|
||||||
}
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012 Google 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
|
|
||||||
* 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/time.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/fdtbus.h>
|
|
||||||
#include <grub/machine/kernel.h>
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
spi_send (const struct grub_fdtbus_dev *dev, const void *data, grub_size_t sz)
|
|
||||||
{
|
|
||||||
const grub_uint8_t *ptr = data, *end = ptr + sz;
|
|
||||||
volatile grub_uint32_t *spi = grub_fdtbus_map_reg (dev, 0, 0);
|
|
||||||
spi[2] = 0;
|
|
||||||
spi[1] = sz - 1;
|
|
||||||
spi[0] = ((1 << 18) | spi[0]) & ~(1 << 19);
|
|
||||||
spi[2] = 1;
|
|
||||||
while (ptr < end)
|
|
||||||
{
|
|
||||||
while (spi[9] & 2);
|
|
||||||
spi[256] = *ptr++;
|
|
||||||
}
|
|
||||||
while (spi[9] & 1);
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
spi_receive (const struct grub_fdtbus_dev *dev, void *data, grub_size_t sz)
|
|
||||||
{
|
|
||||||
grub_uint8_t *ptr = data, *end = ptr + sz;
|
|
||||||
volatile grub_uint32_t *spi = grub_fdtbus_map_reg (dev, 0, 0);
|
|
||||||
spi[2] = 0;
|
|
||||||
spi[1] = sz - 1;
|
|
||||||
spi[0] = ((1 << 19) | spi[0]) & ~(1 << 18);
|
|
||||||
spi[2] = 1;
|
|
||||||
while (ptr < end)
|
|
||||||
{
|
|
||||||
while (spi[9] & 8);
|
|
||||||
*ptr++ = spi[512];
|
|
||||||
}
|
|
||||||
while (spi[9] & 1);
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
spi_start (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
volatile grub_uint32_t *spi = grub_fdtbus_map_reg (dev, 0, 0);
|
|
||||||
spi[3] = 1;
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
spi_stop (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
volatile grub_uint32_t *spi = grub_fdtbus_map_reg (dev, 0, 0);
|
|
||||||
spi[3] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
spi_attach(const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
if (!grub_fdtbus_is_mapping_valid (grub_fdtbus_map_reg (dev, 0, 0)))
|
|
||||||
return GRUB_ERR_IO;
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct grub_fdtbus_driver spi =
|
|
||||||
{
|
|
||||||
.compatible = "rockchip,rk3288-spi",
|
|
||||||
.attach = spi_attach,
|
|
||||||
.send = spi_send,
|
|
||||||
.receive = spi_receive,
|
|
||||||
.start = spi_start,
|
|
||||||
.stop = spi_stop,
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_rk3288_spi_init (void)
|
|
||||||
{
|
|
||||||
grub_fdtbus_register (&spi);
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/* ehci.c - EHCI Support. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2011 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/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/usb.h>
|
|
||||||
#include <grub/fdtbus.h>
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
ehci_attach(const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci", "Found generic-ehci\n");
|
|
||||||
|
|
||||||
grub_ehci_init_device (grub_fdtbus_map_reg (dev, 0, 0));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct grub_fdtbus_driver ehci =
|
|
||||||
{
|
|
||||||
.compatible = "generic-ehci",
|
|
||||||
.attach = ehci_attach
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_ehci_pci_scan (void)
|
|
||||||
{
|
|
||||||
grub_fdtbus_register (&ehci);
|
|
||||||
}
|
|
||||||
@@ -1,208 +0,0 @@
|
|||||||
/* ehci.c - EHCI Support. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2011 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/pci.h>
|
|
||||||
#include <grub/cpu/pci.h>
|
|
||||||
#include <grub/cs5536.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/usb.h>
|
|
||||||
|
|
||||||
#define GRUB_EHCI_PCI_SBRN_REG 0x60
|
|
||||||
#define GRUB_EHCI_ADDR_MEM_MASK (~0xff)
|
|
||||||
|
|
||||||
/* USBLEGSUP bits and related OS OWNED byte offset */
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
GRUB_EHCI_BIOS_OWNED = (1 << 16),
|
|
||||||
GRUB_EHCI_OS_OWNED = (1 << 24)
|
|
||||||
};
|
|
||||||
|
|
||||||
/* PCI iteration function... */
|
|
||||||
static int
|
|
||||||
grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|
||||||
void *data __attribute__ ((unused)))
|
|
||||||
{
|
|
||||||
volatile grub_uint32_t *regs;
|
|
||||||
grub_uint32_t base, base_h;
|
|
||||||
grub_uint32_t eecp_offset;
|
|
||||||
grub_uint32_t usblegsup = 0;
|
|
||||||
grub_uint64_t maxtime;
|
|
||||||
grub_uint32_t interf;
|
|
||||||
grub_uint32_t subclass;
|
|
||||||
grub_uint32_t class;
|
|
||||||
grub_uint8_t release;
|
|
||||||
grub_uint32_t class_code;
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: begin\n");
|
|
||||||
|
|
||||||
if (pciid == GRUB_CS5536_PCIID)
|
|
||||||
{
|
|
||||||
grub_uint64_t basereg;
|
|
||||||
|
|
||||||
basereg = grub_cs5536_read_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE);
|
|
||||||
if (!(basereg & GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE))
|
|
||||||
{
|
|
||||||
/* Shouldn't happen. */
|
|
||||||
grub_dprintf ("ehci", "No EHCI address is assigned\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
base = (basereg & GRUB_CS5536_MSR_USB_BASE_ADDR_MASK);
|
|
||||||
basereg |= GRUB_CS5536_MSR_USB_BASE_BUS_MASTER;
|
|
||||||
basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_ENABLED;
|
|
||||||
basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_STATUS;
|
|
||||||
basereg &= ~GRUB_CS5536_MSR_USB_BASE_SMI_ENABLE;
|
|
||||||
grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE, basereg);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
grub_pci_address_t addr;
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
|
||||||
class_code = grub_pci_read (addr) >> 8;
|
|
||||||
interf = class_code & 0xFF;
|
|
||||||
subclass = (class_code >> 8) & 0xFF;
|
|
||||||
class = class_code >> 16;
|
|
||||||
|
|
||||||
/* If this is not an EHCI controller, just return. */
|
|
||||||
if (class != 0x0c || subclass != 0x03 || interf != 0x20)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: class OK\n");
|
|
||||||
|
|
||||||
/* Check Serial Bus Release Number */
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_EHCI_PCI_SBRN_REG);
|
|
||||||
release = grub_pci_read_byte (addr);
|
|
||||||
if (release != 0x20)
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: Wrong SBRN: %0x\n",
|
|
||||||
release);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: bus rev. num. OK\n");
|
|
||||||
|
|
||||||
/* Determine EHCI EHCC registers base address. */
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0);
|
|
||||||
base = grub_pci_read (addr);
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG1);
|
|
||||||
base_h = grub_pci_read (addr);
|
|
||||||
/* Stop if registers are mapped above 4G - GRUB does not currently
|
|
||||||
* work with registers mapped above 4G */
|
|
||||||
if (((base & GRUB_PCI_ADDR_MEM_TYPE_MASK) != GRUB_PCI_ADDR_MEM_TYPE_32)
|
|
||||||
&& (base_h != 0))
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI grub_ehci_pci_iter: registers above 4G are not supported\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
base &= GRUB_PCI_ADDR_MEM_MASK;
|
|
||||||
if (!base)
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI: EHCI is not mapped\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
|
||||||
grub_pci_write_word(addr,
|
|
||||||
GRUB_PCI_COMMAND_MEM_ENABLED
|
|
||||||
| GRUB_PCI_COMMAND_BUS_MASTER
|
|
||||||
| grub_pci_read_word(addr));
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: 32-bit EHCI OK\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: iobase of EHCC: %08x\n",
|
|
||||||
(base & GRUB_EHCI_ADDR_MEM_MASK));
|
|
||||||
|
|
||||||
regs = grub_pci_device_map_range (dev,
|
|
||||||
(base & GRUB_EHCI_ADDR_MEM_MASK),
|
|
||||||
0x100);
|
|
||||||
|
|
||||||
/* Is there EECP ? */
|
|
||||||
eecp_offset = (grub_le_to_cpu32 (regs[2]) >> 8) & 0xff;
|
|
||||||
|
|
||||||
/* Determine and change ownership. */
|
|
||||||
/* EECP offset valid in HCCPARAMS */
|
|
||||||
/* Ownership can be changed via EECP only */
|
|
||||||
if (pciid != GRUB_CS5536_PCIID && eecp_offset >= 0x40)
|
|
||||||
{
|
|
||||||
grub_pci_address_t pciaddr_eecp;
|
|
||||||
pciaddr_eecp = grub_pci_make_address (dev, eecp_offset);
|
|
||||||
|
|
||||||
usblegsup = grub_pci_read (pciaddr_eecp);
|
|
||||||
if (usblegsup & GRUB_EHCI_BIOS_OWNED)
|
|
||||||
{
|
|
||||||
grub_boot_time ("Taking ownership of EHCI controller");
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI grub_ehci_pci_iter: EHCI owned by: BIOS\n");
|
|
||||||
/* Ownership change - set OS_OWNED bit */
|
|
||||||
grub_pci_write (pciaddr_eecp, usblegsup | GRUB_EHCI_OS_OWNED);
|
|
||||||
/* Ensure PCI register is written */
|
|
||||||
grub_pci_read (pciaddr_eecp);
|
|
||||||
|
|
||||||
/* Wait for finish of ownership change, EHCI specification
|
|
||||||
* doesn't say how long it can take... */
|
|
||||||
maxtime = grub_get_time_ms () + 1000;
|
|
||||||
while ((grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED)
|
|
||||||
&& (grub_get_time_ms () < maxtime));
|
|
||||||
if (grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED)
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI grub_ehci_pci_iter: EHCI change ownership timeout");
|
|
||||||
/* Change ownership in "hard way" - reset BIOS ownership */
|
|
||||||
grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED);
|
|
||||||
/* Ensure PCI register is written */
|
|
||||||
grub_pci_read (pciaddr_eecp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (usblegsup & GRUB_EHCI_OS_OWNED)
|
|
||||||
/* XXX: What to do in this case - nothing ? Can it happen ? */
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: EHCI owned by: OS\n");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI grub_ehci_pci_iter: EHCI owned by: NONE\n");
|
|
||||||
/* XXX: What to do in this case ? Can it happen ?
|
|
||||||
* Is code below correct ? */
|
|
||||||
/* Ownership change - set OS_OWNED bit */
|
|
||||||
grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED);
|
|
||||||
/* Ensure PCI register is written */
|
|
||||||
grub_pci_read (pciaddr_eecp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable SMI, just to be sure. */
|
|
||||||
pciaddr_eecp = grub_pci_make_address (dev, eecp_offset + 4);
|
|
||||||
grub_pci_write (pciaddr_eecp, 0);
|
|
||||||
/* Ensure PCI register is written */
|
|
||||||
grub_pci_read (pciaddr_eecp);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "inithw: EHCI grub_ehci_pci_iter: ownership OK\n");
|
|
||||||
|
|
||||||
grub_ehci_init_device (regs);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_ehci_pci_scan (void)
|
|
||||||
{
|
|
||||||
grub_pci_iterate (grub_ehci_pci_iter, NULL);
|
|
||||||
}
|
|
||||||
+222
-103
@@ -22,11 +22,13 @@
|
|||||||
#include <grub/usb.h>
|
#include <grub/usb.h>
|
||||||
#include <grub/usbtrans.h>
|
#include <grub/usbtrans.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
|
#include <grub/pci.h>
|
||||||
|
#include <grub/cpu/pci.h>
|
||||||
|
#include <grub/cpu/io.h>
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
#include <grub/loader.h>
|
#include <grub/loader.h>
|
||||||
|
#include <grub/cs5536.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
#include <grub/dma.h>
|
|
||||||
#include <grub/cache.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
@@ -36,6 +38,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
* - is not supporting interrupt transfers
|
* - is not supporting interrupt transfers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define GRUB_EHCI_PCI_SBRN_REG 0x60
|
||||||
|
|
||||||
/* Capability registers offsets */
|
/* Capability registers offsets */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -49,6 +53,7 @@ enum
|
|||||||
#define GRUB_EHCI_EECP_MASK (0xff << 8)
|
#define GRUB_EHCI_EECP_MASK (0xff << 8)
|
||||||
#define GRUB_EHCI_EECP_SHIFT 8
|
#define GRUB_EHCI_EECP_SHIFT 8
|
||||||
|
|
||||||
|
#define GRUB_EHCI_ADDR_MEM_MASK (~0xff)
|
||||||
#define GRUB_EHCI_POINTER_MASK (~0x1f)
|
#define GRUB_EHCI_POINTER_MASK (~0x1f)
|
||||||
|
|
||||||
/* Capability register SPARAMS bits */
|
/* Capability register SPARAMS bits */
|
||||||
@@ -79,6 +84,13 @@ enum
|
|||||||
|
|
||||||
#define GRUB_EHCI_QH_EMPTY 1
|
#define GRUB_EHCI_QH_EMPTY 1
|
||||||
|
|
||||||
|
/* USBLEGSUP bits and related OS OWNED byte offset */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
GRUB_EHCI_BIOS_OWNED = (1 << 16),
|
||||||
|
GRUB_EHCI_OS_OWNED = (1 << 24)
|
||||||
|
};
|
||||||
|
|
||||||
/* Operational registers offsets */
|
/* Operational registers offsets */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -325,21 +337,6 @@ struct grub_ehci
|
|||||||
|
|
||||||
static struct grub_ehci *ehci;
|
static struct grub_ehci *ehci;
|
||||||
|
|
||||||
static void
|
|
||||||
sync_all_caches (struct grub_ehci *e)
|
|
||||||
{
|
|
||||||
if (!e)
|
|
||||||
return;
|
|
||||||
if (e->td_virt)
|
|
||||||
grub_arch_sync_dma_caches (e->td_virt, sizeof (struct grub_ehci_td) *
|
|
||||||
GRUB_EHCI_N_TD);
|
|
||||||
if (e->qh_virt)
|
|
||||||
grub_arch_sync_dma_caches (e->qh_virt, sizeof (struct grub_ehci_qh) *
|
|
||||||
GRUB_EHCI_N_QH);
|
|
||||||
if (e->framelist_virt)
|
|
||||||
grub_arch_sync_dma_caches (e->framelist_virt, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* EHCC registers access functions */
|
/* EHCC registers access functions */
|
||||||
static inline grub_uint32_t
|
static inline grub_uint32_t
|
||||||
grub_ehci_ehcc_read32 (struct grub_ehci *e, grub_uint32_t addr)
|
grub_ehci_ehcc_read32 (struct grub_ehci *e, grub_uint32_t addr)
|
||||||
@@ -440,12 +437,9 @@ grub_ehci_reset (struct grub_ehci *e)
|
|||||||
{
|
{
|
||||||
grub_uint64_t maxtime;
|
grub_uint64_t maxtime;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "reset\n");
|
|
||||||
|
|
||||||
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
||||||
GRUB_EHCI_CMD_HC_RESET);
|
GRUB_EHCI_CMD_HC_RESET
|
||||||
|
| grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
||||||
/* Ensure command is written */
|
/* Ensure command is written */
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND);
|
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND);
|
||||||
/* XXX: How long time could take reset of HC ? */
|
/* XXX: How long time could take reset of HC ? */
|
||||||
@@ -461,24 +455,116 @@ grub_ehci_reset (struct grub_ehci *e)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* PCI iteration function... */
|
/* PCI iteration function... */
|
||||||
void
|
static int
|
||||||
grub_ehci_init_device (volatile void *regs)
|
grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
||||||
|
void *data __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
|
grub_uint8_t release;
|
||||||
|
grub_uint32_t class_code;
|
||||||
|
grub_uint32_t interf;
|
||||||
|
grub_uint32_t subclass;
|
||||||
|
grub_uint32_t class;
|
||||||
|
grub_uint32_t base, base_h;
|
||||||
struct grub_ehci *e;
|
struct grub_ehci *e;
|
||||||
|
grub_uint32_t eecp_offset;
|
||||||
grub_uint32_t fp;
|
grub_uint32_t fp;
|
||||||
int i;
|
int i;
|
||||||
|
grub_uint32_t usblegsup = 0;
|
||||||
|
grub_uint64_t maxtime;
|
||||||
grub_uint32_t n_ports;
|
grub_uint32_t n_ports;
|
||||||
grub_uint8_t caplen;
|
grub_uint8_t caplen;
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: begin\n");
|
||||||
|
|
||||||
|
if (pciid == GRUB_CS5536_PCIID)
|
||||||
|
{
|
||||||
|
grub_uint64_t basereg;
|
||||||
|
|
||||||
|
basereg = grub_cs5536_read_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE);
|
||||||
|
if (!(basereg & GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE))
|
||||||
|
{
|
||||||
|
/* Shouldn't happen. */
|
||||||
|
grub_dprintf ("ehci", "No EHCI address is assigned\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
base = (basereg & GRUB_CS5536_MSR_USB_BASE_ADDR_MASK);
|
||||||
|
basereg |= GRUB_CS5536_MSR_USB_BASE_BUS_MASTER;
|
||||||
|
basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_ENABLED;
|
||||||
|
basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_STATUS;
|
||||||
|
basereg &= ~GRUB_CS5536_MSR_USB_BASE_SMI_ENABLE;
|
||||||
|
grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE, basereg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grub_pci_address_t addr;
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
||||||
|
class_code = grub_pci_read (addr) >> 8;
|
||||||
|
interf = class_code & 0xFF;
|
||||||
|
subclass = (class_code >> 8) & 0xFF;
|
||||||
|
class = class_code >> 16;
|
||||||
|
|
||||||
|
/* If this is not an EHCI controller, just return. */
|
||||||
|
if (class != 0x0c || subclass != 0x03 || interf != 0x20)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: class OK\n");
|
||||||
|
|
||||||
|
/* Check Serial Bus Release Number */
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_EHCI_PCI_SBRN_REG);
|
||||||
|
release = grub_pci_read_byte (addr);
|
||||||
|
if (release != 0x20)
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: Wrong SBRN: %0x\n",
|
||||||
|
release);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: bus rev. num. OK\n");
|
||||||
|
|
||||||
|
/* Determine EHCI EHCC registers base address. */
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0);
|
||||||
|
base = grub_pci_read (addr);
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG1);
|
||||||
|
base_h = grub_pci_read (addr);
|
||||||
|
/* Stop if registers are mapped above 4G - GRUB does not currently
|
||||||
|
* work with registers mapped above 4G */
|
||||||
|
if (((base & GRUB_PCI_ADDR_MEM_TYPE_MASK) != GRUB_PCI_ADDR_MEM_TYPE_32)
|
||||||
|
&& (base_h != 0))
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI grub_ehci_pci_iter: registers above 4G are not supported\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
base &= GRUB_PCI_ADDR_MEM_MASK;
|
||||||
|
if (!base)
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI: EHCI is not mapped\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
||||||
|
grub_pci_write_word(addr,
|
||||||
|
GRUB_PCI_COMMAND_MEM_ENABLED
|
||||||
|
| GRUB_PCI_COMMAND_BUS_MASTER
|
||||||
|
| grub_pci_read_word(addr));
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: 32-bit EHCI OK\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* Allocate memory for the controller and fill basic values. */
|
/* Allocate memory for the controller and fill basic values. */
|
||||||
e = grub_zalloc (sizeof (*e));
|
e = grub_zalloc (sizeof (*e));
|
||||||
if (!e)
|
if (!e)
|
||||||
return;
|
return 1;
|
||||||
e->framelist_chunk = NULL;
|
e->framelist_chunk = NULL;
|
||||||
e->td_chunk = NULL;
|
e->td_chunk = NULL;
|
||||||
e->qh_chunk = NULL;
|
e->qh_chunk = NULL;
|
||||||
e->iobase_ehcc = regs;
|
e->iobase_ehcc = grub_pci_device_map_range (dev,
|
||||||
|
(base & GRUB_EHCI_ADDR_MEM_MASK),
|
||||||
|
0x100);
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: iobase of EHCC: %08x\n",
|
||||||
|
(base & GRUB_EHCI_ADDR_MEM_MASK));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CAPLEN: %02x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CAPLEN: %02x\n",
|
||||||
grub_ehci_ehcc_read8 (e, GRUB_EHCI_EHCC_CAPLEN));
|
grub_ehci_ehcc_read8 (e, GRUB_EHCI_EHCC_CAPLEN));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: VERSION: %04x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: VERSION: %04x\n",
|
||||||
@@ -494,7 +580,7 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
if (caplen & (sizeof (grub_uint32_t) - 1))
|
if (caplen & (sizeof (grub_uint32_t) - 1))
|
||||||
{
|
{
|
||||||
grub_dprintf ("ehci", "Unaligned caplen\n");
|
grub_dprintf ("ehci", "Unaligned caplen\n");
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
e->iobase = ((volatile grub_uint32_t *) e->iobase_ehcc
|
e->iobase = ((volatile grub_uint32_t *) e->iobase_ehcc
|
||||||
+ (caplen / sizeof (grub_uint32_t)));
|
+ (caplen / sizeof (grub_uint32_t)));
|
||||||
@@ -504,8 +590,8 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
grub_dprintf ("ehci",
|
grub_dprintf ("ehci",
|
||||||
"EHCI grub_ehci_pci_iter: iobase of oper. regs: %08llxx\n",
|
"EHCI grub_ehci_pci_iter: iobase of oper. regs: %08x\n",
|
||||||
(unsigned long long) (grub_addr_t) e->iobase_ehcc + caplen);
|
(base & GRUB_EHCI_ADDR_MEM_MASK) + caplen);
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n",
|
||||||
@@ -521,6 +607,10 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG));
|
grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG));
|
||||||
|
|
||||||
|
/* Is there EECP ? */
|
||||||
|
eecp_offset = (grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_CPARAMS)
|
||||||
|
& GRUB_EHCI_EECP_MASK) >> GRUB_EHCI_EECP_SHIFT;
|
||||||
|
|
||||||
/* Check format of data structures requested by EHCI */
|
/* Check format of data structures requested by EHCI */
|
||||||
/* XXX: In fact it is not used at any place, it is prepared for future
|
/* XXX: In fact it is not used at any place, it is prepared for future
|
||||||
* This implementation uses 32-bits pointers only */
|
* This implementation uses 32-bits pointers only */
|
||||||
@@ -580,23 +670,23 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
for (i = 0; i < (GRUB_EHCI_N_TD - 1); i++)
|
for (i = 0; i < (GRUB_EHCI_N_TD - 1); i++)
|
||||||
{
|
{
|
||||||
e->td_virt[i].link_td = e->td_phys + (i + 1) * sizeof (struct grub_ehci_td);
|
e->td_virt[i].link_td = e->td_phys + (i + 1) * sizeof (struct grub_ehci_td);
|
||||||
e->td_virt[i].next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
e->td_virt[i].next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
e->td_virt[i].alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
e->td_virt[i].alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
}
|
}
|
||||||
e->td_virt[GRUB_EHCI_N_TD - 1].next_td =
|
e->td_virt[GRUB_EHCI_N_TD - 1].next_td =
|
||||||
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
e->td_virt[GRUB_EHCI_N_TD - 1].alt_next_td =
|
e->td_virt[GRUB_EHCI_N_TD - 1].alt_next_td =
|
||||||
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
e->tdfree_virt = e->td_virt;
|
e->tdfree_virt = e->td_virt;
|
||||||
/* Set Terminate in first QH, which is used in framelist */
|
/* Set Terminate in first QH, which is used in framelist */
|
||||||
e->qh_virt[0].qh_hptr = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH);
|
e->qh_virt[0].qh_hptr = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH);
|
||||||
e->qh_virt[0].td_overlay.next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
e->qh_virt[0].td_overlay.next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
e->qh_virt[0].td_overlay.alt_next_td =
|
e->qh_virt[0].td_overlay.alt_next_td =
|
||||||
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
/* Also set Halted bit in token */
|
/* Also set Halted bit in token */
|
||||||
e->qh_virt[0].td_overlay.token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
|
e->qh_virt[0].td_overlay.token = grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED);
|
||||||
/* Set the H bit in first QH used for AL */
|
/* Set the H bit in first QH used for AL */
|
||||||
e->qh_virt[1].ep_char = grub_cpu_to_le32_compile_time (GRUB_EHCI_H);
|
e->qh_virt[1].ep_char = grub_cpu_to_le32 (GRUB_EHCI_H);
|
||||||
/* Set Terminate into TD in rest of QHs and set horizontal link
|
/* Set Terminate into TD in rest of QHs and set horizontal link
|
||||||
* pointer to itself - these QHs will be used for asynchronous
|
* pointer to itself - these QHs will be used for asynchronous
|
||||||
* schedule and they should have valid value in horiz. link */
|
* schedule and they should have valid value in horiz. link */
|
||||||
@@ -607,12 +697,12 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
e->qh_chunk) &
|
e->qh_chunk) &
|
||||||
GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH);
|
GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH);
|
||||||
e->qh_virt[i].td_overlay.next_td =
|
e->qh_virt[i].td_overlay.next_td =
|
||||||
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
e->qh_virt[i].td_overlay.alt_next_td =
|
e->qh_virt[i].td_overlay.alt_next_td =
|
||||||
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
/* Also set Halted bit in token */
|
/* Also set Halted bit in token */
|
||||||
e->qh_virt[i].td_overlay.token =
|
e->qh_virt[i].td_overlay.token =
|
||||||
grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
|
grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note: QH 0 and QH 1 are reserved and must not be used anywhere.
|
/* Note: QH 0 and QH 1 are reserved and must not be used anywhere.
|
||||||
@@ -624,6 +714,65 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: QH/TD init. OK\n");
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: QH/TD init. OK\n");
|
||||||
|
|
||||||
|
/* Determine and change ownership. */
|
||||||
|
/* EECP offset valid in HCCPARAMS */
|
||||||
|
/* Ownership can be changed via EECP only */
|
||||||
|
if (pciid != GRUB_CS5536_PCIID && eecp_offset >= 0x40)
|
||||||
|
{
|
||||||
|
grub_pci_address_t pciaddr_eecp;
|
||||||
|
pciaddr_eecp = grub_pci_make_address (dev, eecp_offset);
|
||||||
|
|
||||||
|
usblegsup = grub_pci_read (pciaddr_eecp);
|
||||||
|
if (usblegsup & GRUB_EHCI_BIOS_OWNED)
|
||||||
|
{
|
||||||
|
grub_boot_time ("Taking ownership of EHCI controller");
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI grub_ehci_pci_iter: EHCI owned by: BIOS\n");
|
||||||
|
/* Ownership change - set OS_OWNED bit */
|
||||||
|
grub_pci_write (pciaddr_eecp, usblegsup | GRUB_EHCI_OS_OWNED);
|
||||||
|
/* Ensure PCI register is written */
|
||||||
|
grub_pci_read (pciaddr_eecp);
|
||||||
|
|
||||||
|
/* Wait for finish of ownership change, EHCI specification
|
||||||
|
* doesn't say how long it can take... */
|
||||||
|
maxtime = grub_get_time_ms () + 1000;
|
||||||
|
while ((grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED)
|
||||||
|
&& (grub_get_time_ms () < maxtime));
|
||||||
|
if (grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED)
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI grub_ehci_pci_iter: EHCI change ownership timeout");
|
||||||
|
/* Change ownership in "hard way" - reset BIOS ownership */
|
||||||
|
grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED);
|
||||||
|
/* Ensure PCI register is written */
|
||||||
|
grub_pci_read (pciaddr_eecp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (usblegsup & GRUB_EHCI_OS_OWNED)
|
||||||
|
/* XXX: What to do in this case - nothing ? Can it happen ? */
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: EHCI owned by: OS\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI grub_ehci_pci_iter: EHCI owned by: NONE\n");
|
||||||
|
/* XXX: What to do in this case ? Can it happen ?
|
||||||
|
* Is code below correct ? */
|
||||||
|
/* Ownership change - set OS_OWNED bit */
|
||||||
|
grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED);
|
||||||
|
/* Ensure PCI register is written */
|
||||||
|
grub_pci_read (pciaddr_eecp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable SMI, just to be sure. */
|
||||||
|
pciaddr_eecp = grub_pci_make_address (dev, eecp_offset + 4);
|
||||||
|
grub_pci_write (pciaddr_eecp, 0);
|
||||||
|
/* Ensure PCI register is written */
|
||||||
|
grub_pci_read (pciaddr_eecp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "inithw: EHCI grub_ehci_pci_iter: ownership OK\n");
|
||||||
|
|
||||||
/* Now we can setup EHCI (maybe...) */
|
/* Now we can setup EHCI (maybe...) */
|
||||||
|
|
||||||
/* Check if EHCI is halted and halt it if not */
|
/* Check if EHCI is halted and halt it if not */
|
||||||
@@ -691,13 +840,11 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
e->next = ehci;
|
e->next = ehci;
|
||||||
ehci = e;
|
ehci = e;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: OK at all\n");
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: OK at all\n");
|
||||||
|
|
||||||
grub_dprintf ("ehci",
|
grub_dprintf ("ehci",
|
||||||
"EHCI grub_ehci_pci_iter: iobase of oper. regs: %08llx\n",
|
"EHCI grub_ehci_pci_iter: iobase of oper. regs: %08x\n",
|
||||||
(unsigned long long) (grub_addr_t) regs);
|
(base & GRUB_EHCI_ADDR_MEM_MASK));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n",
|
||||||
@@ -713,7 +860,7 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG));
|
grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG));
|
||||||
|
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (e)
|
if (e)
|
||||||
@@ -727,7 +874,7 @@ fail:
|
|||||||
}
|
}
|
||||||
grub_free (e);
|
grub_free (e);
|
||||||
|
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -844,7 +991,7 @@ grub_ehci_find_qh (struct grub_ehci *e, grub_usb_transfer_t transfer)
|
|||||||
target = ((transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) |
|
target = ((transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) |
|
||||||
transfer->devaddr) & GRUB_EHCI_TARGET_MASK;
|
transfer->devaddr) & GRUB_EHCI_TARGET_MASK;
|
||||||
target = grub_cpu_to_le32 (target);
|
target = grub_cpu_to_le32 (target);
|
||||||
mask = grub_cpu_to_le32_compile_time (GRUB_EHCI_TARGET_MASK);
|
mask = grub_cpu_to_le32 (GRUB_EHCI_TARGET_MASK);
|
||||||
|
|
||||||
/* low speed interrupt transfers are linked to the periodic */
|
/* low speed interrupt transfers are linked to the periodic */
|
||||||
/* schedule, everything else to the asynchronous schedule */
|
/* schedule, everything else to the asynchronous schedule */
|
||||||
@@ -873,7 +1020,6 @@ grub_ehci_find_qh (struct grub_ehci *e, grub_usb_transfer_t transfer)
|
|||||||
/* Found proper existing (and linked) QH, do setup of QH */
|
/* Found proper existing (and linked) QH, do setup of QH */
|
||||||
grub_dprintf ("ehci", "find_qh: found, QH=%p\n", qh_iter);
|
grub_dprintf ("ehci", "find_qh: found, QH=%p\n", qh_iter);
|
||||||
grub_ehci_setup_qh (qh_iter, transfer);
|
grub_ehci_setup_qh (qh_iter, transfer);
|
||||||
sync_all_caches (e);
|
|
||||||
return qh_iter;
|
return qh_iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -975,7 +1121,7 @@ grub_ehci_free_tds (struct grub_ehci *e, grub_ehci_td_t td,
|
|||||||
token = grub_le_to_cpu32 (td->token);
|
token = grub_le_to_cpu32 (td->token);
|
||||||
to_transfer = (token & GRUB_EHCI_TOTAL_MASK) >> GRUB_EHCI_TOTAL_OFF;
|
to_transfer = (token & GRUB_EHCI_TOTAL_MASK) >> GRUB_EHCI_TOTAL_OFF;
|
||||||
|
|
||||||
/* Check state of TD - if it did not transfer
|
/* Check state of TD - if it did not transfered
|
||||||
* whole data then set last_trans - it should be last executed TD
|
* whole data then set last_trans - it should be last executed TD
|
||||||
* in case when something went wrong. */
|
* in case when something went wrong. */
|
||||||
if (transfer && (td->size != to_transfer))
|
if (transfer && (td->size != to_transfer))
|
||||||
@@ -1054,7 +1200,7 @@ grub_ehci_transaction (struct grub_ehci *e,
|
|||||||
grub_memset ((void *) td, 0, sizeof (struct grub_ehci_td));
|
grub_memset ((void *) td, 0, sizeof (struct grub_ehci_td));
|
||||||
|
|
||||||
/* Don't point to any TD yet, just terminate. */
|
/* Don't point to any TD yet, just terminate. */
|
||||||
td->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
td->next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
/* Set alternate pointer. When short packet occurs, alternate TD
|
/* Set alternate pointer. When short packet occurs, alternate TD
|
||||||
* will not be really fetched because it is not active. But don't
|
* will not be really fetched because it is not active. But don't
|
||||||
* forget, EHCI will try to fetch alternate TD every scan of AL
|
* forget, EHCI will try to fetch alternate TD every scan of AL
|
||||||
@@ -1143,28 +1289,16 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
grub_ehci_td_t td_prev = NULL;
|
grub_ehci_td_t td_prev = NULL;
|
||||||
int i;
|
int i;
|
||||||
struct grub_ehci_transfer_controller_data *cdata;
|
struct grub_ehci_transfer_controller_data *cdata;
|
||||||
grub_uint32_t status;
|
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* Check if EHCI is running and AL is enabled */
|
/* Check if EHCI is running and AL is enabled */
|
||||||
status = grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS);
|
if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)
|
||||||
if ((status & GRUB_EHCI_ST_HC_HALTED) != 0)
|
& GRUB_EHCI_ST_HC_HALTED) != 0)
|
||||||
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
||||||
{
|
|
||||||
grub_dprintf ("ehci", "setup_transfer: halted, status = 0x%x\n",
|
|
||||||
status);
|
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)
|
||||||
status = grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS);
|
|
||||||
if ((status
|
|
||||||
& (GRUB_EHCI_ST_AS_STATUS | GRUB_EHCI_ST_PS_STATUS)) == 0)
|
& (GRUB_EHCI_ST_AS_STATUS | GRUB_EHCI_ST_PS_STATUS)) == 0)
|
||||||
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
||||||
{
|
|
||||||
grub_dprintf ("ehci", "setup_transfer: no AS/PS, status = 0x%x\n",
|
|
||||||
status);
|
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate memory for controller transfer data. */
|
/* Allocate memory for controller transfer data. */
|
||||||
cdata = grub_malloc (sizeof (*cdata));
|
cdata = grub_malloc (sizeof (*cdata));
|
||||||
@@ -1176,7 +1310,6 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->qh_virt = grub_ehci_find_qh (e, transfer);
|
cdata->qh_virt = grub_ehci_find_qh (e, transfer);
|
||||||
if (!cdata->qh_virt)
|
if (!cdata->qh_virt)
|
||||||
{
|
{
|
||||||
grub_dprintf ("ehci", "setup_transfer: no QH\n");
|
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
@@ -1186,16 +1319,15 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->td_alt_virt = grub_ehci_alloc_td (e);
|
cdata->td_alt_virt = grub_ehci_alloc_td (e);
|
||||||
if (!cdata->td_alt_virt)
|
if (!cdata->td_alt_virt)
|
||||||
{
|
{
|
||||||
grub_dprintf ("ehci", "setup_transfer: no TDs\n");
|
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
/* Fill whole alternate TD by zeros (= inactive) and set
|
/* Fill whole alternate TD by zeros (= inactive) and set
|
||||||
* Terminate bits and Halt bit */
|
* Terminate bits and Halt bit */
|
||||||
grub_memset ((void *) cdata->td_alt_virt, 0, sizeof (struct grub_ehci_td));
|
grub_memset ((void *) cdata->td_alt_virt, 0, sizeof (struct grub_ehci_td));
|
||||||
cdata->td_alt_virt->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
cdata->td_alt_virt->next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
cdata->td_alt_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
cdata->td_alt_virt->alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
cdata->td_alt_virt->token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
|
cdata->td_alt_virt->token = grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED);
|
||||||
|
|
||||||
/* Allocate appropriate number of TDs and set */
|
/* Allocate appropriate number of TDs and set */
|
||||||
for (i = 0; i < transfer->transcnt; i++)
|
for (i = 0; i < transfer->transcnt; i++)
|
||||||
@@ -1213,7 +1345,6 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_tds (e, cdata->td_first_virt, NULL, &actual);
|
grub_ehci_free_tds (e, cdata->td_first_virt, NULL, &actual);
|
||||||
|
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
grub_dprintf ("ehci", "setup_transfer: no TD\n");
|
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1233,7 +1364,7 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->td_last_virt = td;
|
cdata->td_last_virt = td;
|
||||||
cdata->td_last_phys = grub_dma_virt2phys (td, e->td_chunk);
|
cdata->td_last_phys = grub_dma_virt2phys (td, e->td_chunk);
|
||||||
/* Last TD should not have set alternate TD */
|
/* Last TD should not have set alternate TD */
|
||||||
cdata->td_last_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
cdata->td_last_virt->alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
|
|
||||||
grub_dprintf ("ehci", "setup_transfer: cdata=%p, qh=%p\n",
|
grub_dprintf ("ehci", "setup_transfer: cdata=%p, qh=%p\n",
|
||||||
cdata,cdata->qh_virt);
|
cdata,cdata->qh_virt);
|
||||||
@@ -1246,16 +1377,14 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
/* Start transfer: */
|
/* Start transfer: */
|
||||||
/* Unlink possible alternate pointer in QH */
|
/* Unlink possible alternate pointer in QH */
|
||||||
cdata->qh_virt->td_overlay.alt_next_td =
|
cdata->qh_virt->td_overlay.alt_next_td =
|
||||||
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
||||||
/* Link new TDs with QH via next_td */
|
/* Link new TDs with QH via next_td */
|
||||||
cdata->qh_virt->td_overlay.next_td =
|
cdata->qh_virt->td_overlay.next_td =
|
||||||
grub_cpu_to_le32 (grub_dma_virt2phys
|
grub_cpu_to_le32 (grub_dma_virt2phys
|
||||||
(cdata->td_first_virt, e->td_chunk));
|
(cdata->td_first_virt, e->td_chunk));
|
||||||
/* Reset Active and Halted bits in QH to activate Advance Queue,
|
/* Reset Active and Halted bits in QH to activate Advance Queue,
|
||||||
* i.e. reset token */
|
* i.e. reset token */
|
||||||
cdata->qh_virt->td_overlay.token = grub_cpu_to_le32_compile_time (0);
|
cdata->qh_virt->td_overlay.token = grub_cpu_to_le32 (0);
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* Finito */
|
/* Finito */
|
||||||
transfer->controller_data = cdata;
|
transfer->controller_data = cdata;
|
||||||
@@ -1279,9 +1408,9 @@ grub_ehci_pre_finish_transfer (grub_usb_transfer_t transfer)
|
|||||||
* safely manipulate with QH TD part. */
|
* safely manipulate with QH TD part. */
|
||||||
cdata->qh_virt->td_overlay.token = (cdata->qh_virt->td_overlay.token
|
cdata->qh_virt->td_overlay.token = (cdata->qh_virt->td_overlay.token
|
||||||
|
|
|
|
||||||
grub_cpu_to_le32_compile_time
|
grub_cpu_to_le32
|
||||||
(GRUB_EHCI_STATUS_HALTED)) &
|
(GRUB_EHCI_STATUS_HALTED)) &
|
||||||
grub_cpu_to_le32_compile_time (~GRUB_EHCI_STATUS_ACTIVE);
|
grub_cpu_to_le32 (~GRUB_EHCI_STATUS_ACTIVE);
|
||||||
|
|
||||||
/* Print debug data here if necessary */
|
/* Print debug data here if necessary */
|
||||||
|
|
||||||
@@ -1305,8 +1434,6 @@ grub_ehci_parse_notrun (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* Additionally, do something with EHCI to make it running (what?) */
|
/* Additionally, do something with EHCI to make it running (what?) */
|
||||||
/* Try enable EHCI and AL */
|
/* Try enable EHCI and AL */
|
||||||
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
||||||
@@ -1342,8 +1469,6 @@ grub_ehci_parse_halt (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* Evaluation of error code - currently we don't have GRUB USB error
|
/* Evaluation of error code - currently we don't have GRUB USB error
|
||||||
* codes for some EHCI states, GRUB_USB_ERR_DATA is used for them.
|
* codes for some EHCI states, GRUB_USB_ERR_DATA is used for them.
|
||||||
* Order of evaluation is critical, specially bubble/stall. */
|
* Order of evaluation is critical, specially bubble/stall. */
|
||||||
@@ -1377,8 +1502,6 @@ grub_ehci_parse_success (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1390,9 +1513,7 @@ grub_ehci_check_transfer (grub_usb_controller_t dev,
|
|||||||
struct grub_ehci *e = dev->data;
|
struct grub_ehci *e = dev->data;
|
||||||
struct grub_ehci_transfer_controller_data *cdata =
|
struct grub_ehci_transfer_controller_data *cdata =
|
||||||
transfer->controller_data;
|
transfer->controller_data;
|
||||||
grub_uint32_t token, token_ftd;
|
grub_uint32_t token;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
grub_dprintf ("ehci",
|
grub_dprintf ("ehci",
|
||||||
"check_transfer: EHCI STATUS=%08x, cdata=%p, qh=%p\n",
|
"check_transfer: EHCI STATUS=%08x, cdata=%p, qh=%p\n",
|
||||||
@@ -1420,18 +1541,13 @@ grub_ehci_check_transfer (grub_usb_controller_t dev,
|
|||||||
return grub_ehci_parse_notrun (dev, transfer, actual);
|
return grub_ehci_parse_notrun (dev, transfer, actual);
|
||||||
|
|
||||||
token = grub_le_to_cpu32 (cdata->qh_virt->td_overlay.token);
|
token = grub_le_to_cpu32 (cdata->qh_virt->td_overlay.token);
|
||||||
/* If the transfer consist from only one TD, we should check */
|
|
||||||
/* if the TD was really executed and deactivated - to prevent */
|
|
||||||
/* false detection of transfer finish. */
|
|
||||||
token_ftd = grub_le_to_cpu32 (cdata->td_first_virt->token);
|
|
||||||
|
|
||||||
/* Detect QH halted */
|
/* Detect QH halted */
|
||||||
if ((token & GRUB_EHCI_STATUS_HALTED) != 0)
|
if ((token & GRUB_EHCI_STATUS_HALTED) != 0)
|
||||||
return grub_ehci_parse_halt (dev, transfer, actual);
|
return grub_ehci_parse_halt (dev, transfer, actual);
|
||||||
|
|
||||||
/* Detect QH not active - QH is not active and no next TD */
|
/* Detect QH not active - QH is not active and no next TD */
|
||||||
if (token && ((token & GRUB_EHCI_STATUS_ACTIVE) == 0)
|
if ((token & GRUB_EHCI_STATUS_ACTIVE) == 0)
|
||||||
&& ((token_ftd & GRUB_EHCI_STATUS_ACTIVE) == 0))
|
|
||||||
{
|
{
|
||||||
/* It could be finish at all or short packet condition */
|
/* It could be finish at all or short packet condition */
|
||||||
if ((grub_le_to_cpu32 (cdata->qh_virt->td_overlay.next_td)
|
if ((grub_le_to_cpu32 (cdata->qh_virt->td_overlay.next_td)
|
||||||
@@ -1460,9 +1576,6 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
int i;
|
int i;
|
||||||
grub_uint64_t maxtime;
|
grub_uint64_t maxtime;
|
||||||
grub_uint32_t qh_phys;
|
grub_uint32_t qh_phys;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
grub_uint32_t interrupt =
|
grub_uint32_t interrupt =
|
||||||
cdata->qh_virt->ep_cap & GRUB_EHCI_SMASK_MASK;
|
cdata->qh_virt->ep_cap & GRUB_EHCI_SMASK_MASK;
|
||||||
|
|
||||||
@@ -1482,7 +1595,6 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_tds (e, cdata->td_first_virt, transfer, &actual);
|
grub_ehci_free_tds (e, cdata->td_first_virt, transfer, &actual);
|
||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
sync_all_caches (e);
|
|
||||||
grub_dprintf ("ehci", "cancel_transfer: end - EHCI not running\n");
|
grub_dprintf ("ehci", "cancel_transfer: end - EHCI not running\n");
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
@@ -1505,8 +1617,6 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
/* Unlink QH from AL */
|
/* Unlink QH from AL */
|
||||||
e->qh_virt[i].qh_hptr = cdata->qh_virt->qh_hptr;
|
e->qh_virt[i].qh_hptr = cdata->qh_virt->qh_hptr;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* If this is an interrupt transfer, we just wait for the periodic
|
/* If this is an interrupt transfer, we just wait for the periodic
|
||||||
* schedule to advance a few times and then assume that the EHCI
|
* schedule to advance a few times and then assume that the EHCI
|
||||||
* controller has read the updated QH. */
|
* controller has read the updated QH. */
|
||||||
@@ -1561,8 +1671,6 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
|
|
||||||
grub_dprintf ("ehci", "cancel_transfer: end\n");
|
grub_dprintf ("ehci", "cancel_transfer: end\n");
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1664,6 +1772,11 @@ grub_ehci_detect_dev (grub_usb_controller_t dev, int port, int *changed)
|
|||||||
|
|
||||||
status = grub_ehci_port_read (e, port);
|
status = grub_ehci_port_read (e, port);
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "detect_dev: EHCI STATUS: %08x\n",
|
||||||
|
grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS));
|
||||||
|
grub_dprintf ("ehci", "detect_dev: iobase=%p, port=%d, status=0x%02x\n",
|
||||||
|
e->iobase, port, status);
|
||||||
|
|
||||||
/* Connect Status Change bit - it detects change of connection */
|
/* Connect Status Change bit - it detects change of connection */
|
||||||
if (status & GRUB_EHCI_PORT_CONNECT_CH)
|
if (status & GRUB_EHCI_PORT_CONNECT_CH)
|
||||||
{
|
{
|
||||||
@@ -1724,6 +1837,12 @@ grub_ehci_detect_dev (grub_usb_controller_t dev, int port, int *changed)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
grub_ehci_inithw (void)
|
||||||
|
{
|
||||||
|
grub_pci_iterate (grub_ehci_pci_iter, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_ehci_restore_hw (void)
|
grub_ehci_restore_hw (void)
|
||||||
{
|
{
|
||||||
@@ -1824,7 +1943,7 @@ GRUB_MOD_INIT (ehci)
|
|||||||
grub_stop_disk_firmware ();
|
grub_stop_disk_firmware ();
|
||||||
|
|
||||||
grub_boot_time ("Initing EHCI hardware");
|
grub_boot_time ("Initing EHCI hardware");
|
||||||
grub_ehci_pci_scan ();
|
grub_ehci_inithw ();
|
||||||
grub_boot_time ("Registering EHCI driver");
|
grub_boot_time ("Registering EHCI driver");
|
||||||
grub_usb_controller_dev_register (&usb_controller);
|
grub_usb_controller_dev_register (&usb_controller);
|
||||||
grub_boot_time ("EHCI driver registered");
|
grub_boot_time ("EHCI driver registered");
|
||||||
|
|||||||
@@ -0,0 +1,203 @@
|
|||||||
|
/* usb.c -- libusb USB support for GRUB. */
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2008 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 <config.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
|
#include <grub/mm.h>
|
||||||
|
#include <usb.h>
|
||||||
|
#include <grub/usb.h>
|
||||||
|
#include <grub/dl.h>
|
||||||
|
|
||||||
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
|
||||||
|
static struct grub_usb_controller_dev usb_controller =
|
||||||
|
{
|
||||||
|
.name = "libusb"
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct grub_usb_device *grub_usb_devs[128];
|
||||||
|
|
||||||
|
struct usb_bus *busses;
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_libusb_devices (void)
|
||||||
|
|
||||||
|
{
|
||||||
|
struct usb_bus *bus;
|
||||||
|
int last = 0;
|
||||||
|
|
||||||
|
busses = usb_get_busses();
|
||||||
|
|
||||||
|
for (bus = busses; bus; bus = bus->next)
|
||||||
|
{
|
||||||
|
struct usb_device *usbdev;
|
||||||
|
struct grub_usb_device *dev;
|
||||||
|
|
||||||
|
for (usbdev = bus->devices; usbdev; usbdev = usbdev->next)
|
||||||
|
{
|
||||||
|
struct usb_device_descriptor *desc = &usbdev->descriptor;
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
|
if (! desc->bcdUSB)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
dev = grub_malloc (sizeof (*dev));
|
||||||
|
if (! dev)
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
dev->data = usbdev;
|
||||||
|
|
||||||
|
/* Fill in all descriptors. */
|
||||||
|
err = grub_usb_device_initialize (dev);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Register the device. */
|
||||||
|
grub_usb_devs[last++] = dev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return GRUB_USB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
grub_usb_poll_devices (void)
|
||||||
|
{
|
||||||
|
/* TODO: recheck grub_usb_devs */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
grub_usb_iterate (grub_usb_iterate_hook_t hook, void *hook_data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 128; i++)
|
||||||
|
{
|
||||||
|
if (grub_usb_devs[i])
|
||||||
|
{
|
||||||
|
if (hook (grub_usb_devs[i], hook_data))
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_usb_err_t
|
||||||
|
grub_usb_root_hub (grub_usb_controller_t controller __attribute__((unused)))
|
||||||
|
{
|
||||||
|
return GRUB_USB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_usb_err_t
|
||||||
|
grub_usb_control_msg (grub_usb_device_t dev, grub_uint8_t reqtype,
|
||||||
|
grub_uint8_t request, grub_uint16_t value,
|
||||||
|
grub_uint16_t idx, grub_size_t size, char *data)
|
||||||
|
{
|
||||||
|
usb_dev_handle *devh;
|
||||||
|
struct usb_device *d = dev->data;
|
||||||
|
|
||||||
|
devh = usb_open (d);
|
||||||
|
if (usb_control_msg (devh, reqtype, request,
|
||||||
|
value, idx, data, size, 20) < 0)
|
||||||
|
{
|
||||||
|
usb_close (devh);
|
||||||
|
return GRUB_USB_ERR_STALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
usb_close (devh);
|
||||||
|
|
||||||
|
return GRUB_USB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_usb_err_t
|
||||||
|
grub_usb_bulk_read (grub_usb_device_t dev,
|
||||||
|
int endpoint, grub_size_t size, char *data)
|
||||||
|
{
|
||||||
|
usb_dev_handle *devh;
|
||||||
|
struct usb_device *d = dev->data;
|
||||||
|
|
||||||
|
devh = usb_open (d);
|
||||||
|
if (usb_claim_interface (devh, 0) < 1)
|
||||||
|
{
|
||||||
|
usb_close (devh);
|
||||||
|
return GRUB_USB_ERR_STALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usb_bulk_read (devh, endpoint, data, size, 20) < 1)
|
||||||
|
{
|
||||||
|
usb_close (devh);
|
||||||
|
return GRUB_USB_ERR_STALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
usb_release_interface (devh, 0);
|
||||||
|
usb_close (devh);
|
||||||
|
|
||||||
|
return GRUB_USB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_usb_err_t
|
||||||
|
grub_usb_bulk_write (grub_usb_device_t dev,
|
||||||
|
int endpoint, grub_size_t size, char *data)
|
||||||
|
{
|
||||||
|
usb_dev_handle *devh;
|
||||||
|
struct usb_device *d = dev->data;
|
||||||
|
|
||||||
|
devh = usb_open (d);
|
||||||
|
if (usb_claim_interface (devh, 0) < 0)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (usb_bulk_write (devh, endpoint, data, size, 20) < 0)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
if (usb_release_interface (devh, 0) < 0)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
|
usb_close (devh);
|
||||||
|
|
||||||
|
return GRUB_USB_ERR_NONE;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
usb_close (devh);
|
||||||
|
return GRUB_USB_ERR_STALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
GRUB_MOD_INIT (libusb)
|
||||||
|
{
|
||||||
|
usb_init();
|
||||||
|
usb_find_busses();
|
||||||
|
usb_find_devices();
|
||||||
|
|
||||||
|
if (grub_libusb_devices ())
|
||||||
|
return;
|
||||||
|
|
||||||
|
grub_usb_controller_dev_register (&usb_controller);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GRUB_MOD_FINI (libusb)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
@@ -47,7 +47,7 @@ struct grub_ohci_hcca
|
|||||||
grub_uint32_t donehead;
|
grub_uint32_t donehead;
|
||||||
|
|
||||||
grub_uint8_t reserved[116];
|
grub_uint8_t reserved[116];
|
||||||
} GRUB_PACKED;
|
} __attribute__((packed));
|
||||||
|
|
||||||
/* OHCI General Transfer Descriptor */
|
/* OHCI General Transfer Descriptor */
|
||||||
struct grub_ohci_td
|
struct grub_ohci_td
|
||||||
@@ -64,7 +64,7 @@ struct grub_ohci_td
|
|||||||
* physical address in CPU endian */
|
* physical address in CPU endian */
|
||||||
grub_uint32_t tr_index; /* index of TD in transfer */
|
grub_uint32_t tr_index; /* index of TD in transfer */
|
||||||
grub_uint8_t pad[8 - sizeof (volatile struct grub_ohci_td *)]; /* padding to 32 bytes */
|
grub_uint8_t pad[8 - sizeof (volatile struct grub_ohci_td *)]; /* padding to 32 bytes */
|
||||||
} GRUB_PACKED;
|
} __attribute__((packed));
|
||||||
|
|
||||||
/* OHCI Endpoint Descriptor. */
|
/* OHCI Endpoint Descriptor. */
|
||||||
struct grub_ohci_ed
|
struct grub_ohci_ed
|
||||||
@@ -73,7 +73,7 @@ struct grub_ohci_ed
|
|||||||
grub_uint32_t td_tail;
|
grub_uint32_t td_tail;
|
||||||
grub_uint32_t td_head;
|
grub_uint32_t td_head;
|
||||||
grub_uint32_t next_ed;
|
grub_uint32_t next_ed;
|
||||||
} GRUB_PACKED;
|
} __attribute__((packed));
|
||||||
|
|
||||||
typedef volatile struct grub_ohci_td *grub_ohci_td_t;
|
typedef volatile struct grub_ohci_td *grub_ohci_td_t;
|
||||||
typedef volatile struct grub_ohci_ed *grub_ohci_ed_t;
|
typedef volatile struct grub_ohci_ed *grub_ohci_ed_t;
|
||||||
@@ -314,7 +314,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
grub_memset ((void *) o->ed_ctrl, 0, sizeof (struct grub_ohci_ed)
|
grub_memset ((void *) o->ed_ctrl, 0, sizeof (struct grub_ohci_ed)
|
||||||
* GRUB_OHCI_CTRL_EDS);
|
* GRUB_OHCI_CTRL_EDS);
|
||||||
for (j=0; j < GRUB_OHCI_CTRL_EDS; j++)
|
for (j=0; j < GRUB_OHCI_CTRL_EDS; j++)
|
||||||
o->ed_ctrl[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
o->ed_ctrl[j].target = grub_cpu_to_le32 (1 << 14); /* skip */
|
||||||
|
|
||||||
grub_dprintf ("ohci", "EDs-C: chunk=%p, virt=%p, phys=0x%02x\n",
|
grub_dprintf ("ohci", "EDs-C: chunk=%p, virt=%p, phys=0x%02x\n",
|
||||||
o->ed_ctrl_chunk, o->ed_ctrl, o->ed_ctrl_addr);
|
o->ed_ctrl_chunk, o->ed_ctrl, o->ed_ctrl_addr);
|
||||||
@@ -329,7 +329,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
/* Preset EDs */
|
/* Preset EDs */
|
||||||
grub_memset ((void*)o->ed_bulk, 0, sizeof(struct grub_ohci_ed) * GRUB_OHCI_BULK_EDS);
|
grub_memset ((void*)o->ed_bulk, 0, sizeof(struct grub_ohci_ed) * GRUB_OHCI_BULK_EDS);
|
||||||
for (j=0; j < GRUB_OHCI_BULK_EDS; j++)
|
for (j=0; j < GRUB_OHCI_BULK_EDS; j++)
|
||||||
o->ed_bulk[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
o->ed_bulk[j].target = grub_cpu_to_le32 (1 << 14); /* skip */
|
||||||
|
|
||||||
grub_dprintf ("ohci", "EDs-B: chunk=%p, virt=%p, phys=0x%02x\n",
|
grub_dprintf ("ohci", "EDs-B: chunk=%p, virt=%p, phys=0x%02x\n",
|
||||||
o->ed_bulk_chunk, o->ed_bulk, o->ed_bulk_addr);
|
o->ed_bulk_chunk, o->ed_bulk, o->ed_bulk_addr);
|
||||||
@@ -750,10 +750,7 @@ grub_ohci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
{
|
{
|
||||||
cdata->td_head_virt = grub_ohci_alloc_td (o);
|
cdata->td_head_virt = grub_ohci_alloc_td (o);
|
||||||
if (!cdata->td_head_virt)
|
if (!cdata->td_head_virt)
|
||||||
{
|
|
||||||
grub_free (cdata);
|
|
||||||
return GRUB_USB_ERR_INTERNAL; /* We don't need de-allocate ED */
|
return GRUB_USB_ERR_INTERNAL; /* We don't need de-allocate ED */
|
||||||
}
|
|
||||||
/* We can set td_head only when ED is not active, i.e.
|
/* We can set td_head only when ED is not active, i.e.
|
||||||
* when it is newly allocated. */
|
* when it is newly allocated. */
|
||||||
cdata->ed_virt->td_head
|
cdata->ed_virt->td_head
|
||||||
@@ -1352,10 +1349,10 @@ grub_ohci_fini_hw (int noreturn __attribute__ ((unused)))
|
|||||||
/* Set skip in all EDs */
|
/* Set skip in all EDs */
|
||||||
if (o->ed_bulk)
|
if (o->ed_bulk)
|
||||||
for (i=0; i < GRUB_OHCI_BULK_EDS; i++)
|
for (i=0; i < GRUB_OHCI_BULK_EDS; i++)
|
||||||
o->ed_bulk[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
o->ed_bulk[i].target |= grub_cpu_to_le32 (1 << 14); /* skip */
|
||||||
if (o->ed_ctrl)
|
if (o->ed_ctrl)
|
||||||
for (i=0; i < GRUB_OHCI_CTRL_EDS; i++)
|
for (i=0; i < GRUB_OHCI_CTRL_EDS; i++)
|
||||||
o->ed_ctrl[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
o->ed_ctrl[i].target |= grub_cpu_to_le32 (1 << 14); /* skip */
|
||||||
|
|
||||||
/* We should wait for next SOF to be sure that all EDs are
|
/* We should wait for next SOF to be sure that all EDs are
|
||||||
* unaccessed by OHCI. But OHCI can be non-functional, so
|
* unaccessed by OHCI. But OHCI can be non-functional, so
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ struct grub_pl2303_config
|
|||||||
grub_uint8_t stop_bits;
|
grub_uint8_t stop_bits;
|
||||||
grub_uint8_t parity;
|
grub_uint8_t parity;
|
||||||
grub_uint8_t word_len;
|
grub_uint8_t word_len;
|
||||||
} GRUB_PACKED;
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
real_config (struct grub_serial_port *port)
|
real_config (struct grub_serial_port *port)
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ struct grub_uhci_qh
|
|||||||
/* Queue heads are aligned on 16 bytes, pad so a queue head is 16
|
/* Queue heads are aligned on 16 bytes, pad so a queue head is 16
|
||||||
bytes so we can store many in a 4K page. */
|
bytes so we can store many in a 4K page. */
|
||||||
grub_uint8_t pad[8];
|
grub_uint8_t pad[8];
|
||||||
} GRUB_PACKED;
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
/* UHCI Transfer Descriptor. */
|
/* UHCI Transfer Descriptor. */
|
||||||
struct grub_uhci_td
|
struct grub_uhci_td
|
||||||
@@ -129,7 +129,7 @@ struct grub_uhci_td
|
|||||||
|
|
||||||
/* 3 additional 32 bits words reserved for the Host Controller Driver. */
|
/* 3 additional 32 bits words reserved for the Host Controller Driver. */
|
||||||
grub_uint32_t data[3];
|
grub_uint32_t data[3];
|
||||||
} GRUB_PACKED;
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
typedef volatile struct grub_uhci_td *grub_uhci_td_t;
|
typedef volatile struct grub_uhci_td *grub_uhci_td_t;
|
||||||
typedef volatile struct grub_uhci_qh *grub_uhci_qh_t;
|
typedef volatile struct grub_uhci_qh *grub_uhci_qh_t;
|
||||||
@@ -625,7 +625,9 @@ grub_uhci_check_transfer (grub_usb_controller_t dev,
|
|||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (errtd && !(errtd->ctrl_status & (1 << 23)))
|
grub_dprintf ("uhci", "t status=0x%02x\n", errtd->ctrl_status);
|
||||||
|
|
||||||
|
if (!(errtd->ctrl_status & (1 << 23)))
|
||||||
{
|
{
|
||||||
grub_usb_err_t err = GRUB_USB_ERR_NONE;
|
grub_usb_err_t err = GRUB_USB_ERR_NONE;
|
||||||
|
|
||||||
|
|||||||
@@ -18,13 +18,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/dma.h>
|
#include <grub/pci.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/usb.h>
|
#include <grub/usb.h>
|
||||||
#include <grub/usbtrans.h>
|
#include <grub/usbtrans.h>
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
#include <grub/cache.h>
|
|
||||||
|
|
||||||
|
|
||||||
static inline unsigned int
|
static inline unsigned int
|
||||||
@@ -32,7 +31,7 @@ grub_usb_bulk_maxpacket (grub_usb_device_t dev,
|
|||||||
struct grub_usb_desc_endp *endpoint)
|
struct grub_usb_desc_endp *endpoint)
|
||||||
{
|
{
|
||||||
/* Use the maximum packet size given in the endpoint descriptor. */
|
/* Use the maximum packet size given in the endpoint descriptor. */
|
||||||
if (dev->initialized && endpoint && (unsigned int) endpoint->maxpacket)
|
if (dev->initialized && endpoint)
|
||||||
return endpoint->maxpacket;
|
return endpoint->maxpacket;
|
||||||
|
|
||||||
return 64;
|
return 64;
|
||||||
@@ -102,8 +101,6 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
data_addr = grub_dma_get_phys (data_chunk);
|
data_addr = grub_dma_get_phys (data_chunk);
|
||||||
grub_memcpy ((char *) data, data_in, size);
|
grub_memcpy ((char *) data, data_in, size);
|
||||||
|
|
||||||
grub_arch_sync_dma_caches (data, size);
|
|
||||||
|
|
||||||
grub_dprintf ("usb",
|
grub_dprintf ("usb",
|
||||||
"control: reqtype=0x%02x req=0x%02x val=0x%02x idx=0x%02x size=%lu\n",
|
"control: reqtype=0x%02x req=0x%02x val=0x%02x idx=0x%02x size=%lu\n",
|
||||||
reqtype, request, value, index, (unsigned long)size);
|
reqtype, request, value, index, (unsigned long)size);
|
||||||
@@ -164,8 +161,6 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
setupdata->value = value;
|
setupdata->value = value;
|
||||||
setupdata->index = index;
|
setupdata->index = index;
|
||||||
setupdata->length = size;
|
setupdata->length = size;
|
||||||
grub_arch_sync_dma_caches (setupdata, sizeof (*setupdata));
|
|
||||||
|
|
||||||
transfer->transactions[0].size = sizeof (*setupdata);
|
transfer->transactions[0].size = sizeof (*setupdata);
|
||||||
transfer->transactions[0].pid = GRUB_USB_TRANSFER_TYPE_SETUP;
|
transfer->transactions[0].pid = GRUB_USB_TRANSFER_TYPE_SETUP;
|
||||||
transfer->transactions[0].data = setupdata_addr;
|
transfer->transactions[0].data = setupdata_addr;
|
||||||
@@ -207,13 +202,11 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
grub_free (transfer->transactions);
|
grub_free (transfer->transactions);
|
||||||
|
|
||||||
grub_free (transfer);
|
grub_free (transfer);
|
||||||
|
grub_dma_free (data_chunk);
|
||||||
grub_dma_free (setupdata_chunk);
|
grub_dma_free (setupdata_chunk);
|
||||||
|
|
||||||
grub_arch_sync_dma_caches (data, size0);
|
|
||||||
grub_memcpy (data_in, (char *) data, size0);
|
grub_memcpy (data_in, (char *) data, size0);
|
||||||
|
|
||||||
grub_dma_free (data_chunk);
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,10 +236,7 @@ grub_usb_bulk_setup_readwrite (grub_usb_device_t dev,
|
|||||||
data = grub_dma_get_virt (data_chunk);
|
data = grub_dma_get_virt (data_chunk);
|
||||||
data_addr = grub_dma_get_phys (data_chunk);
|
data_addr = grub_dma_get_phys (data_chunk);
|
||||||
if (type == GRUB_USB_TRANSFER_TYPE_OUT)
|
if (type == GRUB_USB_TRANSFER_TYPE_OUT)
|
||||||
{
|
|
||||||
grub_memcpy ((char *) data, data_in, size);
|
grub_memcpy ((char *) data, data_in, size);
|
||||||
grub_arch_sync_dma_caches (data, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create a transfer. */
|
/* Create a transfer. */
|
||||||
transfer = grub_malloc (sizeof (struct grub_usb_transfer));
|
transfer = grub_malloc (sizeof (struct grub_usb_transfer));
|
||||||
@@ -316,17 +306,13 @@ grub_usb_bulk_finish_readwrite (grub_usb_transfer_t transfer)
|
|||||||
dev->toggle[transfer->endpoint] = toggle;
|
dev->toggle[transfer->endpoint] = toggle;
|
||||||
|
|
||||||
if (transfer->dir == GRUB_USB_TRANSFER_TYPE_IN)
|
if (transfer->dir == GRUB_USB_TRANSFER_TYPE_IN)
|
||||||
{
|
|
||||||
grub_arch_sync_dma_caches (grub_dma_get_virt (transfer->data_chunk),
|
|
||||||
transfer->size + 1);
|
|
||||||
grub_memcpy (transfer->data, (void *)
|
grub_memcpy (transfer->data, (void *)
|
||||||
grub_dma_get_virt (transfer->data_chunk),
|
grub_dma_get_virt (transfer->data_chunk),
|
||||||
transfer->size + 1);
|
transfer->size + 1);
|
||||||
}
|
|
||||||
|
|
||||||
grub_free (transfer->transactions);
|
grub_free (transfer->transactions);
|
||||||
grub_dma_free (transfer->data_chunk);
|
|
||||||
grub_free (transfer);
|
grub_free (transfer);
|
||||||
|
grub_dma_free (transfer->data_chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_usb_err_t
|
static grub_usb_err_t
|
||||||
|
|||||||
+23
-19
@@ -61,6 +61,18 @@ static const struct grub_arg_option options[] = {
|
|||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Simple checksum by summing all bytes. Used by ACPI and SMBIOS. */
|
||||||
|
grub_uint8_t
|
||||||
|
grub_byte_checksum (void *base, grub_size_t size)
|
||||||
|
{
|
||||||
|
grub_uint8_t *ptr;
|
||||||
|
grub_uint8_t ret = 0;
|
||||||
|
for (ptr = (grub_uint8_t *) base; ptr < ((grub_uint8_t *) base) + size;
|
||||||
|
ptr++)
|
||||||
|
ret += *ptr;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* rev1 is 1 if ACPIv1 is to be generated, 0 otherwise.
|
/* rev1 is 1 if ACPIv1 is to be generated, 0 otherwise.
|
||||||
rev2 contains the revision of ACPIv2+ to generate or 0 if none. */
|
rev2 contains the revision of ACPIv2+ to generate or 0 if none. */
|
||||||
static int rev1, rev2;
|
static int rev1, rev2;
|
||||||
@@ -119,8 +131,6 @@ grub_acpi_get_rsdpv1 (void)
|
|||||||
return grub_machine_acpi_get_rsdpv1 ();
|
return grub_machine_acpi_get_rsdpv1 ();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__i386__) || defined (__x86_64__)
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
iszero (grub_uint8_t *reg, int size)
|
iszero (grub_uint8_t *reg, int size)
|
||||||
{
|
{
|
||||||
@@ -131,6 +141,7 @@ iszero (grub_uint8_t *reg, int size)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined (__i386__) || defined (__x86_64__)
|
||||||
/* Context for grub_acpi_create_ebda. */
|
/* Context for grub_acpi_create_ebda. */
|
||||||
struct grub_acpi_create_ebda_ctx {
|
struct grub_acpi_create_ebda_ctx {
|
||||||
int ebda_len;
|
int ebda_len;
|
||||||
@@ -168,10 +179,8 @@ grub_acpi_create_ebda (void)
|
|||||||
struct grub_acpi_rsdp_v20 *v2;
|
struct grub_acpi_rsdp_v20 *v2;
|
||||||
|
|
||||||
ebda = (grub_uint8_t *) (grub_addr_t) ((*((grub_uint16_t *)0x40e)) << 4);
|
ebda = (grub_uint8_t *) (grub_addr_t) ((*((grub_uint16_t *)0x40e)) << 4);
|
||||||
grub_dprintf ("acpi", "EBDA @%p\n", ebda);
|
|
||||||
if (ebda)
|
if (ebda)
|
||||||
ebda_kb_len = *(grub_uint16_t *) ebda;
|
ebda_kb_len = *(grub_uint16_t *) ebda;
|
||||||
grub_dprintf ("acpi", "EBDA length 0x%x\n", ebda_kb_len);
|
|
||||||
if (ebda_kb_len > 16)
|
if (ebda_kb_len > 16)
|
||||||
ebda_kb_len = 0;
|
ebda_kb_len = 0;
|
||||||
ctx.ebda_len = (ebda_kb_len + 1) << 10;
|
ctx.ebda_len = (ebda_kb_len + 1) << 10;
|
||||||
@@ -218,7 +227,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target);
|
grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target);
|
||||||
v2inebda = target;
|
v2inebda = target;
|
||||||
target += v2->length;
|
target += v2->length;
|
||||||
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1);
|
||||||
v2 = 0;
|
v2 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -237,7 +246,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target);
|
grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target);
|
||||||
v1inebda = target;
|
v1inebda = target;
|
||||||
target += sizeof (struct grub_acpi_rsdp_v10);
|
target += sizeof (struct grub_acpi_rsdp_v10);
|
||||||
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1);
|
||||||
v1 = 0;
|
v1 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -256,7 +265,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_memcpy (target, v2, v2->length);
|
grub_memcpy (target, v2, v2->length);
|
||||||
v2inebda = target;
|
v2inebda = target;
|
||||||
target += v2->length;
|
target += v2->length;
|
||||||
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1);
|
||||||
v2 = 0;
|
v2 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -273,7 +282,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10));
|
grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10));
|
||||||
v1inebda = target;
|
v1inebda = target;
|
||||||
target += sizeof (struct grub_acpi_rsdp_v10);
|
target += sizeof (struct grub_acpi_rsdp_v10);
|
||||||
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1);
|
||||||
v1 = 0;
|
v1 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -297,7 +306,7 @@ grub_acpi_create_ebda (void)
|
|||||||
*target = 0;
|
*target = 0;
|
||||||
|
|
||||||
grub_dprintf ("acpi", "Switching EBDA\n");
|
grub_dprintf ("acpi", "Switching EBDA\n");
|
||||||
(*((grub_uint16_t *) 0x40e)) = ((grub_addr_t) targetebda) >> 4;
|
(*((grub_uint16_t *) 0x40e)) = ((long)targetebda) >> 4;
|
||||||
grub_dprintf ("acpi", "EBDA switched\n");
|
grub_dprintf ("acpi", "EBDA switched\n");
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
@@ -485,8 +494,6 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
if (! rsdp)
|
if (! rsdp)
|
||||||
rsdp = grub_machine_acpi_get_rsdpv1 ();
|
rsdp = grub_machine_acpi_get_rsdpv1 ();
|
||||||
|
|
||||||
grub_dprintf ("acpi", "RSDP @%p\n", rsdp);
|
|
||||||
|
|
||||||
if (rsdp)
|
if (rsdp)
|
||||||
{
|
{
|
||||||
grub_uint32_t *entry_ptr;
|
grub_uint32_t *entry_ptr;
|
||||||
@@ -593,9 +600,6 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
if (! table->addr)
|
if (! table->addr)
|
||||||
{
|
{
|
||||||
free_tables ();
|
free_tables ();
|
||||||
grub_free (exclude);
|
|
||||||
grub_free (load_only);
|
|
||||||
grub_free (table);
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
table->next = acpi_tables;
|
table->next = acpi_tables;
|
||||||
@@ -635,7 +639,7 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
grub_size_t size;
|
grub_size_t size;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
file = grub_file_open (args[i], GRUB_FILE_TYPE_ACPI_TABLE);
|
file = grub_file_open (args[i]);
|
||||||
if (! file)
|
if (! file)
|
||||||
{
|
{
|
||||||
free_tables ();
|
free_tables ();
|
||||||
@@ -761,10 +765,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
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,6 @@
|
|||||||
|
|
||||||
#define grub_dprintf(cond, args...) printf ( args )
|
#define grub_dprintf(cond, args...) printf ( args )
|
||||||
#define grub_printf printf
|
#define grub_printf printf
|
||||||
#define grub_util_fopen fopen
|
|
||||||
#define grub_memcmp memcmp
|
|
||||||
typedef uint64_t grub_uint64_t;
|
typedef uint64_t grub_uint64_t;
|
||||||
typedef uint32_t grub_uint32_t;
|
typedef uint32_t grub_uint32_t;
|
||||||
typedef uint16_t grub_uint16_t;
|
typedef uint16_t grub_uint16_t;
|
||||||
@@ -137,49 +135,6 @@ skip_data_ref_object (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline grub_uint32_t
|
|
||||||
skip_term (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|
||||||
{
|
|
||||||
grub_uint32_t add;
|
|
||||||
const grub_uint8_t *ptr0 = ptr;
|
|
||||||
|
|
||||||
switch(*ptr)
|
|
||||||
{
|
|
||||||
case GRUB_ACPI_OPCODE_ADD:
|
|
||||||
case GRUB_ACPI_OPCODE_AND:
|
|
||||||
case GRUB_ACPI_OPCODE_CONCAT:
|
|
||||||
case GRUB_ACPI_OPCODE_CONCATRES:
|
|
||||||
case GRUB_ACPI_OPCODE_DIVIDE:
|
|
||||||
case GRUB_ACPI_OPCODE_INDEX:
|
|
||||||
case GRUB_ACPI_OPCODE_LSHIFT:
|
|
||||||
case GRUB_ACPI_OPCODE_MOD:
|
|
||||||
case GRUB_ACPI_OPCODE_MULTIPLY:
|
|
||||||
case GRUB_ACPI_OPCODE_NAND:
|
|
||||||
case GRUB_ACPI_OPCODE_NOR:
|
|
||||||
case GRUB_ACPI_OPCODE_OR:
|
|
||||||
case GRUB_ACPI_OPCODE_RSHIFT:
|
|
||||||
case GRUB_ACPI_OPCODE_SUBTRACT:
|
|
||||||
case GRUB_ACPI_OPCODE_TOSTRING:
|
|
||||||
case GRUB_ACPI_OPCODE_XOR:
|
|
||||||
/*
|
|
||||||
* Parameters for these opcodes: TermArg, TermArg Target, see ACPI
|
|
||||||
* spec r5.0, page 828f.
|
|
||||||
*/
|
|
||||||
ptr++;
|
|
||||||
ptr += add = skip_term (ptr, end);
|
|
||||||
if (!add)
|
|
||||||
return 0;
|
|
||||||
ptr += add = skip_term (ptr, end);
|
|
||||||
if (!add)
|
|
||||||
return 0;
|
|
||||||
ptr += skip_name_string (ptr, end);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return skip_data_ref_object (ptr, end);
|
|
||||||
}
|
|
||||||
return ptr - ptr0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline grub_uint32_t
|
static inline grub_uint32_t
|
||||||
skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
||||||
{
|
{
|
||||||
@@ -201,10 +156,10 @@ skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|||||||
ptr++;
|
ptr++;
|
||||||
ptr += skip_name_string (ptr, end);
|
ptr += skip_name_string (ptr, end);
|
||||||
ptr++;
|
ptr++;
|
||||||
ptr += add = skip_term (ptr, end);
|
ptr += add = skip_data_ref_object (ptr, end);
|
||||||
if (!add)
|
if (!add)
|
||||||
return 0;
|
return 0;
|
||||||
ptr += add = skip_term (ptr, end);
|
ptr += add = skip_data_ref_object (ptr, end);
|
||||||
if (!add)
|
if (!add)
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
@@ -225,7 +180,6 @@ skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|||||||
return ptr - ptr0;
|
return ptr - ptr0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
||||||
grub_uint8_t *scope, int scope_len)
|
grub_uint8_t *scope, int scope_len)
|
||||||
@@ -248,7 +202,6 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
if (!add)
|
if (!add)
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
case GRUB_ACPI_OPCODE_CREATE_DWORD_FIELD:
|
|
||||||
case GRUB_ACPI_OPCODE_CREATE_WORD_FIELD:
|
case GRUB_ACPI_OPCODE_CREATE_WORD_FIELD:
|
||||||
case GRUB_ACPI_OPCODE_CREATE_BYTE_FIELD:
|
case GRUB_ACPI_OPCODE_CREATE_BYTE_FIELD:
|
||||||
{
|
{
|
||||||
@@ -261,8 +214,8 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
}
|
}
|
||||||
case GRUB_ACPI_OPCODE_NAME:
|
case GRUB_ACPI_OPCODE_NAME:
|
||||||
ptr++;
|
ptr++;
|
||||||
if ((!scope || grub_memcmp (scope, "\\", scope_len) == 0) &&
|
if ((!scope || memcmp (scope, "\\", scope_len) == 0) &&
|
||||||
(grub_memcmp (ptr, "_S5_", 4) == 0 || grub_memcmp (ptr, "\\_S5_", 4) == 0))
|
(memcmp (ptr, "_S5_", 4) == 0 || memcmp (ptr, "\\_S5_", 4) == 0))
|
||||||
{
|
{
|
||||||
int ll;
|
int ll;
|
||||||
grub_uint8_t *ptr2 = ptr;
|
grub_uint8_t *ptr2 = ptr;
|
||||||
@@ -297,17 +250,6 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
if (!add)
|
if (!add)
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
case GRUB_ACPI_OPCODE_ALIAS:
|
|
||||||
ptr++;
|
|
||||||
/* We need to skip two name strings */
|
|
||||||
ptr += add = skip_name_string (ptr, end);
|
|
||||||
if (!add)
|
|
||||||
return -1;
|
|
||||||
ptr += add = skip_name_string (ptr, end);
|
|
||||||
if (!add)
|
|
||||||
return -1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GRUB_ACPI_OPCODE_SCOPE:
|
case GRUB_ACPI_OPCODE_SCOPE:
|
||||||
{
|
{
|
||||||
int scope_sleep_type;
|
int scope_sleep_type;
|
||||||
|
|||||||
@@ -121,8 +121,8 @@ grub_cmd_blocklist (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"));
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_PRINT_BLOCKLIST
|
grub_file_filter_disable_compression ();
|
||||||
| GRUB_FILE_TYPE_NO_DECOMPRESS);
|
file = grub_file_open (args[0]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ GRUB_MOD_INIT(boottime)
|
|||||||
{
|
{
|
||||||
cmd_boottime =
|
cmd_boottime =
|
||||||
grub_register_command ("boottime", grub_cmd_boottime,
|
grub_register_command ("boottime", grub_cmd_boottime,
|
||||||
0, N_("Show boot time statistics."));
|
0, N_("Get boot time statistics."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(boottime)
|
GRUB_MOD_FINI(boottime)
|
||||||
|
|||||||
@@ -23,8 +23,6 @@
|
|||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_rescue_cmd_info (struct grub_command *cmd __attribute__ ((unused)),
|
grub_rescue_cmd_info (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc __attribute__ ((unused)),
|
int argc __attribute__ ((unused)),
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ grub_cmd_cat (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
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"));
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_CAT);
|
file = grub_file_open (args[0]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
@@ -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 ();
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ grub_cmd_cmp (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_printf_ (N_("Compare file `%s' with `%s':\n"), args[0],
|
grub_printf_ (N_("Compare file `%s' with `%s':\n"), args[0],
|
||||||
args[1]);
|
args[1]);
|
||||||
|
|
||||||
file1 = grub_file_open (args[0], GRUB_FILE_TYPE_CMP);
|
file1 = grub_file_open (args[0]);
|
||||||
file2 = grub_file_open (args[1], GRUB_FILE_TYPE_CMP);
|
file2 = grub_file_open (args[1]);
|
||||||
if (! file1 || ! file2)
|
if (! file1 || ! file2)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
|||||||
@@ -26,14 +26,14 @@ struct grub_acpi_rsdp_v10 *
|
|||||||
grub_machine_acpi_get_rsdpv1 (void)
|
grub_machine_acpi_get_rsdpv1 (void)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
static grub_efi_packed_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
|
static grub_efi_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
|
||||||
|
|
||||||
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
||||||
{
|
{
|
||||||
grub_efi_packed_guid_t *guid =
|
grub_efi_guid_t *guid =
|
||||||
&grub_efi_system_table->configuration_table[i].vendor_guid;
|
&grub_efi_system_table->configuration_table[i].vendor_guid;
|
||||||
|
|
||||||
if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_packed_guid_t)))
|
if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_guid_t)))
|
||||||
return (struct grub_acpi_rsdp_v10 *)
|
return (struct grub_acpi_rsdp_v10 *)
|
||||||
grub_efi_system_table->configuration_table[i].vendor_table;
|
grub_efi_system_table->configuration_table[i].vendor_table;
|
||||||
}
|
}
|
||||||
@@ -44,14 +44,14 @@ struct grub_acpi_rsdp_v20 *
|
|||||||
grub_machine_acpi_get_rsdpv2 (void)
|
grub_machine_acpi_get_rsdpv2 (void)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
static grub_efi_packed_guid_t acpi20_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
|
static grub_efi_guid_t acpi20_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
|
||||||
|
|
||||||
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
||||||
{
|
{
|
||||||
grub_efi_packed_guid_t *guid =
|
grub_efi_guid_t *guid =
|
||||||
&grub_efi_system_table->configuration_table[i].vendor_guid;
|
&grub_efi_system_table->configuration_table[i].vendor_guid;
|
||||||
|
|
||||||
if (! grub_memcmp (guid, &acpi20_guid, sizeof (grub_efi_packed_guid_t)))
|
if (! grub_memcmp (guid, &acpi20_guid, sizeof (grub_efi_guid_t)))
|
||||||
return (struct grub_acpi_rsdp_v20 *)
|
return (struct grub_acpi_rsdp_v20 *)
|
||||||
grub_efi_system_table->configuration_table[i].vendor_table;
|
grub_efi_system_table->configuration_table[i].vendor_table;
|
||||||
}
|
}
|
||||||
@@ -105,7 +105,7 @@ fake_bios_data (int use_rom)
|
|||||||
smbios = 0;
|
smbios = 0;
|
||||||
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
||||||
{
|
{
|
||||||
grub_efi_packed_guid_t *guid =
|
grub_efi_guid_t *guid =
|
||||||
&grub_efi_system_table->configuration_table[i].vendor_guid;
|
&grub_efi_system_table->configuration_table[i].vendor_guid;
|
||||||
|
|
||||||
if (! grub_memcmp (guid, &acpi2_guid, sizeof (grub_efi_guid_t)))
|
if (! grub_memcmp (guid, &acpi2_guid, sizeof (grub_efi_guid_t)))
|
||||||
@@ -169,7 +169,7 @@ grub_cmd_loadbios (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
{
|
{
|
||||||
file = grub_file_open (argv[1], GRUB_FILE_TYPE_VBE_DUMP);
|
file = grub_file_open (argv[1]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
@@ -183,7 +183,7 @@ grub_cmd_loadbios (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
file = grub_file_open (argv[0], GRUB_FILE_TYPE_VBE_DUMP);
|
file = grub_file_open (argv[0]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ grub_cmd_lsefi (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_efi_handle_t handle = handles[i];
|
grub_efi_handle_t handle = handles[i];
|
||||||
grub_efi_status_t status;
|
grub_efi_status_t status;
|
||||||
grub_efi_uintn_t num_protocols;
|
grub_efi_uintn_t num_protocols;
|
||||||
grub_efi_packed_guid_t **protocols;
|
grub_efi_guid_t **protocols;
|
||||||
grub_efi_device_path_t *dp;
|
grub_efi_device_path_t *dp;
|
||||||
|
|
||||||
grub_printf ("Handle %p\n", handle);
|
grub_printf ("Handle %p\n", handle);
|
||||||
@@ -109,10 +109,8 @@ grub_cmd_lsefi (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
status = efi_call_3 (grub_efi_system_table->boot_services->protocols_per_handle,
|
status = efi_call_3 (grub_efi_system_table->boot_services->protocols_per_handle,
|
||||||
handle, &protocols, &num_protocols);
|
handle, &protocols, &num_protocols);
|
||||||
if (status != GRUB_EFI_SUCCESS) {
|
if (status != GRUB_EFI_SUCCESS)
|
||||||
grub_printf ("Unable to retrieve protocols\n");
|
grub_printf ("Unable to retrieve protocols\n");
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (j = 0; j < num_protocols; j++)
|
for (j = 0; j < num_protocols; j++)
|
||||||
{
|
{
|
||||||
for (k = 0; k < ARRAY_SIZE (known_protocols); k++)
|
for (k = 0; k < ARRAY_SIZE (known_protocols); k++)
|
||||||
|
|||||||
@@ -74,8 +74,7 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
"ACPI-nvs",
|
"ACPI-nvs",
|
||||||
"MMIO ",
|
"MMIO ",
|
||||||
"IO-ports",
|
"IO-ports",
|
||||||
"PAL-code",
|
"PAL-code"
|
||||||
"persist ",
|
|
||||||
};
|
};
|
||||||
if (desc->type < ARRAY_SIZE (types_str))
|
if (desc->type < ARRAY_SIZE (types_str))
|
||||||
grub_printf ("%s ", types_str[desc->type]);
|
grub_printf ("%s ", types_str[desc->type]);
|
||||||
@@ -88,29 +87,21 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
desc->physical_start + (desc->num_pages << 12) - 1,
|
desc->physical_start + (desc->num_pages << 12) - 1,
|
||||||
desc->num_pages);
|
desc->num_pages);
|
||||||
|
|
||||||
size = desc->num_pages << 12; /* 4 KiB page size */
|
size = desc->num_pages;
|
||||||
/*
|
size <<= (12 - 10);
|
||||||
* Since size is a multiple of 4 KiB, no need to handle units
|
if (size < 1024)
|
||||||
* of just Bytes (which would use a mask of 0x3ff).
|
grub_printf (" %4" PRIuGRUB_UINT64_T "KB", size);
|
||||||
*
|
|
||||||
* 14 characters would support the largest possible number of 4 KiB
|
|
||||||
* pages that are not a multiple of larger units (e.g., MiB):
|
|
||||||
* 17592186044415 (0xffffff_fffff000), but that uses a lot of
|
|
||||||
* whitespace for a rare case. 6 characters usually suffices;
|
|
||||||
* columns will be off if not, but this is preferable to rounding.
|
|
||||||
*/
|
|
||||||
if (size & 0xfffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "KiB", size >> 10);
|
|
||||||
else if (size & 0x3fffffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "MiB", size >> 20);
|
|
||||||
else if (size & 0xffffffffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "GiB", size >> 30);
|
|
||||||
else if (size & 0x3ffffffffffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "TiB", size >> 40);
|
|
||||||
else if (size & 0xfffffffffffffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "PiB", size >> 50);
|
|
||||||
else
|
else
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "EiB", size >> 60);
|
{
|
||||||
|
size /= 1024;
|
||||||
|
if (size < 1024)
|
||||||
|
grub_printf (" %4" PRIuGRUB_UINT64_T "MB", size);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size /= 1024;
|
||||||
|
grub_printf (" %4" PRIuGRUB_UINT64_T "GB", size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
attr = desc->attribute;
|
attr = desc->attribute;
|
||||||
if (attr & GRUB_EFI_MEMORY_RUNTIME)
|
if (attr & GRUB_EFI_MEMORY_RUNTIME)
|
||||||
@@ -131,12 +122,6 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_printf (" RP");
|
grub_printf (" RP");
|
||||||
if (attr & GRUB_EFI_MEMORY_XP)
|
if (attr & GRUB_EFI_MEMORY_XP)
|
||||||
grub_printf (" XP");
|
grub_printf (" XP");
|
||||||
if (attr & GRUB_EFI_MEMORY_NV)
|
|
||||||
grub_printf (" NV");
|
|
||||||
if (attr & GRUB_EFI_MEMORY_MORE_RELIABLE)
|
|
||||||
grub_printf (" MR");
|
|
||||||
if (attr & GRUB_EFI_MEMORY_RO)
|
|
||||||
grub_printf (" RO");
|
|
||||||
|
|
||||||
grub_printf ("\n");
|
grub_printf ("\n");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,20 +37,10 @@ static const struct guid_mapping guid_mappings[] =
|
|||||||
{
|
{
|
||||||
{ GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"},
|
{ GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"},
|
||||||
{ GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"},
|
{ GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"},
|
||||||
{ GRUB_EFI_CRC32_GUIDED_SECTION_EXTRACTION_GUID,
|
|
||||||
"CRC32 GUIDED SECTION EXTRACTION"},
|
|
||||||
{ GRUB_EFI_DEBUG_IMAGE_INFO_TABLE_GUID, "DEBUG IMAGE INFO"},
|
|
||||||
{ GRUB_EFI_DXE_SERVICES_TABLE_GUID, "DXE SERVICES"},
|
|
||||||
{ GRUB_EFI_HCDP_TABLE_GUID, "HCDP"},
|
|
||||||
{ GRUB_EFI_HOB_LIST_GUID, "HOB LIST"},
|
|
||||||
{ GRUB_EFI_LZMA_CUSTOM_DECOMPRESS_GUID, "LZMA CUSTOM DECOMPRESS"},
|
|
||||||
{ GRUB_EFI_MEMORY_TYPE_INFORMATION_GUID, "MEMORY TYPE INFO"},
|
|
||||||
{ GRUB_EFI_MPS_TABLE_GUID, "MPS"},
|
|
||||||
{ GRUB_EFI_SAL_TABLE_GUID, "SAL"},
|
{ GRUB_EFI_SAL_TABLE_GUID, "SAL"},
|
||||||
{ GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"},
|
{ GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"},
|
||||||
{ GRUB_EFI_SYSTEM_RESOURCE_TABLE_GUID, "SYSTEM RESOURCE TABLE"},
|
{ GRUB_EFI_MPS_TABLE_GUID, "MPS"},
|
||||||
{ GRUB_EFI_TIANO_CUSTOM_DECOMPRESS_GUID, "TIANO CUSTOM DECOMPRESS"},
|
{ GRUB_EFI_HCDP_TABLE_GUID, "HCDP"}
|
||||||
{ GRUB_EFI_TSC_FREQUENCY_GUID, "TSC FREQUENCY"},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -62,7 +52,6 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
grub_efi_configuration_table_t *t;
|
grub_efi_configuration_table_t *t;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
grub_printf ("Address: %p\n", st);
|
|
||||||
grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n",
|
grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n",
|
||||||
st->hdr.signature, st->hdr.revision);
|
st->hdr.signature, st->hdr.revision);
|
||||||
{
|
{
|
||||||
@@ -82,7 +71,7 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
grub_printf (", Version=%x\n", st->firmware_revision);
|
grub_printf (", Version=%x\n", st->firmware_revision);
|
||||||
|
|
||||||
grub_printf ("%lld tables:\n", (long long) st->num_table_entries);
|
grub_printf ("%ld tables:\n", st->num_table_entries);
|
||||||
t = st->configuration_table;
|
t = st->configuration_table;
|
||||||
for (i = 0; i < st->num_table_entries; i++)
|
for (i = 0; i < st->num_table_entries; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ disp_sal (void *table)
|
|||||||
{
|
{
|
||||||
struct grub_efi_sal_system_table *t = table;
|
struct grub_efi_sal_system_table *t = table;
|
||||||
void *desc;
|
void *desc;
|
||||||
grub_uint32_t len, l, i;
|
grub_uint32_t len, l;
|
||||||
|
|
||||||
grub_printf ("SAL rev: %02x, signature: %x, len:%x\n",
|
grub_printf ("SAL rev: %02x, signature: %x, len:%x\n",
|
||||||
t->sal_rev, t->signature, t->total_table_len);
|
t->sal_rev, t->signature, t->total_table_len);
|
||||||
@@ -44,9 +44,7 @@ disp_sal (void *table)
|
|||||||
|
|
||||||
desc = t->entries;
|
desc = t->entries;
|
||||||
len = t->total_table_len - sizeof (struct grub_efi_sal_system_table);
|
len = t->total_table_len - sizeof (struct grub_efi_sal_system_table);
|
||||||
if (t->total_table_len <= sizeof (struct grub_efi_sal_system_table))
|
while (len > 0)
|
||||||
return;
|
|
||||||
for (i = 0; i < t->entry_count; i++)
|
|
||||||
{
|
{
|
||||||
switch (*(grub_uint8_t *) desc)
|
switch (*(grub_uint8_t *) desc)
|
||||||
{
|
{
|
||||||
@@ -125,8 +123,6 @@ disp_sal (void *table)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
desc = (grub_uint8_t *)desc + l;
|
desc = (grub_uint8_t *)desc + l;
|
||||||
if (len <= l)
|
|
||||||
return;
|
|
||||||
len -= l;
|
len -= l;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -139,12 +135,12 @@ grub_cmd_lssal (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
const grub_efi_system_table_t *st = grub_efi_system_table;
|
const grub_efi_system_table_t *st = grub_efi_system_table;
|
||||||
grub_efi_configuration_table_t *t = st->configuration_table;
|
grub_efi_configuration_table_t *t = st->configuration_table;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
grub_efi_packed_guid_t guid = GRUB_EFI_SAL_TABLE_GUID;
|
grub_efi_guid_t guid = GRUB_EFI_SAL_TABLE_GUID;
|
||||||
|
|
||||||
for (i = 0; i < st->num_table_entries; i++)
|
for (i = 0; i < st->num_table_entries; i++)
|
||||||
{
|
{
|
||||||
if (grub_memcmp (&guid, &t->vendor_guid,
|
if (grub_memcmp (&guid, &t->vendor_guid,
|
||||||
sizeof (grub_efi_packed_guid_t)) == 0)
|
sizeof (grub_efi_guid_t)) == 0)
|
||||||
{
|
{
|
||||||
disp_sal (t->vendor_table);
|
disp_sal (t->vendor_table);
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|||||||
@@ -1,142 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2017 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/>.
|
|
||||||
*
|
|
||||||
* EFI shim lock verifier.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/dl.h>
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/err.h>
|
|
||||||
#include <grub/file.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/verify.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
|
||||||
|
|
||||||
#define GRUB_EFI_SHIM_LOCK_GUID \
|
|
||||||
{ 0x605dab50, 0xe046, 0x4300, \
|
|
||||||
{ 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23 } \
|
|
||||||
}
|
|
||||||
|
|
||||||
struct grub_efi_shim_lock_protocol
|
|
||||||
{
|
|
||||||
grub_efi_status_t
|
|
||||||
(*verify) (void *buffer, grub_uint32_t size);
|
|
||||||
};
|
|
||||||
typedef struct grub_efi_shim_lock_protocol grub_efi_shim_lock_protocol_t;
|
|
||||||
|
|
||||||
static grub_efi_guid_t shim_lock_guid = GRUB_EFI_SHIM_LOCK_GUID;
|
|
||||||
static grub_efi_shim_lock_protocol_t *sl;
|
|
||||||
|
|
||||||
/* List of modules which cannot be loaded if UEFI secure boot mode is enabled. */
|
|
||||||
static const char * const disabled_mods[] = {"iorw", "memrw", "wrmsr", NULL};
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
shim_lock_init (grub_file_t io, enum grub_file_type type,
|
|
||||||
void **context __attribute__ ((unused)),
|
|
||||||
enum grub_verify_flags *flags)
|
|
||||||
{
|
|
||||||
const char *b, *e;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
*flags = GRUB_VERIFY_FLAGS_SKIP_VERIFICATION;
|
|
||||||
|
|
||||||
if (!sl)
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
|
|
||||||
switch (type & GRUB_FILE_TYPE_MASK)
|
|
||||||
{
|
|
||||||
case GRUB_FILE_TYPE_GRUB_MODULE:
|
|
||||||
/* Establish GRUB module name. */
|
|
||||||
b = grub_strrchr (io->name, '/');
|
|
||||||
e = grub_strrchr (io->name, '.');
|
|
||||||
|
|
||||||
b = b ? (b + 1) : io->name;
|
|
||||||
e = e ? e : io->name + grub_strlen (io->name);
|
|
||||||
e = (e > b) ? e : io->name + grub_strlen (io->name);
|
|
||||||
|
|
||||||
for (i = 0; disabled_mods[i]; i++)
|
|
||||||
if (!grub_strncmp (b, disabled_mods[i], grub_strlen (b) - grub_strlen (e)))
|
|
||||||
{
|
|
||||||
grub_error (GRUB_ERR_ACCESS_DENIED,
|
|
||||||
N_("module cannot be loaded in UEFI secure boot mode: %s"),
|
|
||||||
io->name);
|
|
||||||
return GRUB_ERR_ACCESS_DENIED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Fall through. */
|
|
||||||
|
|
||||||
case GRUB_FILE_TYPE_ACPI_TABLE:
|
|
||||||
case GRUB_FILE_TYPE_DEVICE_TREE_IMAGE:
|
|
||||||
*flags = GRUB_VERIFY_FLAGS_DEFER_AUTH;
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
|
|
||||||
case GRUB_FILE_TYPE_LINUX_KERNEL:
|
|
||||||
case GRUB_FILE_TYPE_MULTIBOOT_KERNEL:
|
|
||||||
case GRUB_FILE_TYPE_BSD_KERNEL:
|
|
||||||
case GRUB_FILE_TYPE_XNU_KERNEL:
|
|
||||||
case GRUB_FILE_TYPE_PLAN9_KERNEL:
|
|
||||||
for (i = 0; disabled_mods[i]; i++)
|
|
||||||
if (grub_dl_get (disabled_mods[i]))
|
|
||||||
{
|
|
||||||
grub_error (GRUB_ERR_ACCESS_DENIED,
|
|
||||||
N_("cannot boot due to dangerous module in memory: %s"),
|
|
||||||
disabled_mods[i]);
|
|
||||||
return GRUB_ERR_ACCESS_DENIED;
|
|
||||||
}
|
|
||||||
|
|
||||||
*flags = GRUB_VERIFY_FLAGS_SINGLE_CHUNK;
|
|
||||||
|
|
||||||
/* Fall through. */
|
|
||||||
|
|
||||||
default:
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
shim_lock_write (void *context __attribute__ ((unused)), void *buf, grub_size_t size)
|
|
||||||
{
|
|
||||||
if (sl->verify (buf, size) != GRUB_EFI_SUCCESS)
|
|
||||||
return grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad shim signature"));
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct grub_file_verifier shim_lock =
|
|
||||||
{
|
|
||||||
.name = "shim_lock",
|
|
||||||
.init = shim_lock_init,
|
|
||||||
.write = shim_lock_write
|
|
||||||
};
|
|
||||||
|
|
||||||
GRUB_MOD_INIT(shim_lock)
|
|
||||||
{
|
|
||||||
sl = grub_efi_locate_protocol (&shim_lock_guid, 0);
|
|
||||||
grub_verifier_register (&shim_lock);
|
|
||||||
|
|
||||||
if (!sl)
|
|
||||||
return;
|
|
||||||
|
|
||||||
grub_dl_set_persistent (mod);
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI(shim_lock)
|
|
||||||
{
|
|
||||||
grub_verifier_unregister (&shim_lock);
|
|
||||||
}
|
|
||||||
@@ -1,333 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2018 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/>.
|
|
||||||
*
|
|
||||||
* EFI TPM support code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/err.h>
|
|
||||||
#include <grub/i18n.h>
|
|
||||||
#include <grub/efi/api.h>
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/efi/tpm.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/tpm.h>
|
|
||||||
#include <grub/term.h>
|
|
||||||
|
|
||||||
typedef TCG_PCR_EVENT grub_tpm_event_t;
|
|
||||||
|
|
||||||
static grub_efi_guid_t tpm_guid = EFI_TPM_GUID;
|
|
||||||
static grub_efi_guid_t tpm2_guid = EFI_TPM2_GUID;
|
|
||||||
|
|
||||||
static grub_efi_handle_t *grub_tpm_handle;
|
|
||||||
static grub_uint8_t grub_tpm_version;
|
|
||||||
|
|
||||||
static grub_int8_t tpm1_present = -1;
|
|
||||||
static grub_int8_t tpm2_present = -1;
|
|
||||||
|
|
||||||
static grub_efi_boolean_t
|
|
||||||
grub_tpm1_present (grub_efi_tpm_protocol_t *tpm)
|
|
||||||
{
|
|
||||||
grub_efi_status_t status;
|
|
||||||
TCG_EFI_BOOT_SERVICE_CAPABILITY caps;
|
|
||||||
grub_uint32_t flags;
|
|
||||||
grub_efi_physical_address_t eventlog, lastevent;
|
|
||||||
|
|
||||||
if (tpm1_present != -1)
|
|
||||||
return (grub_efi_boolean_t) tpm1_present;
|
|
||||||
|
|
||||||
caps.Size = (grub_uint8_t) sizeof (caps);
|
|
||||||
|
|
||||||
status = efi_call_5 (tpm->status_check, tpm, &caps, &flags, &eventlog,
|
|
||||||
&lastevent);
|
|
||||||
|
|
||||||
if (status != GRUB_EFI_SUCCESS || caps.TPMDeactivatedFlag
|
|
||||||
|| !caps.TPMPresentFlag)
|
|
||||||
return tpm1_present = 0;
|
|
||||||
|
|
||||||
return tpm1_present = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_efi_boolean_t
|
|
||||||
grub_tpm2_present (grub_efi_tpm2_protocol_t *tpm)
|
|
||||||
{
|
|
||||||
grub_efi_status_t status;
|
|
||||||
EFI_TCG2_BOOT_SERVICE_CAPABILITY caps;
|
|
||||||
|
|
||||||
caps.Size = (grub_uint8_t) sizeof (caps);
|
|
||||||
|
|
||||||
if (tpm2_present != -1)
|
|
||||||
return (grub_efi_boolean_t) tpm2_present;
|
|
||||||
|
|
||||||
status = efi_call_2 (tpm->get_capability, tpm, &caps);
|
|
||||||
|
|
||||||
if (status != GRUB_EFI_SUCCESS || !caps.TPMPresentFlag)
|
|
||||||
return tpm2_present = 0;
|
|
||||||
|
|
||||||
return tpm2_present = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_efi_boolean_t
|
|
||||||
grub_tpm_handle_find (grub_efi_handle_t *tpm_handle,
|
|
||||||
grub_efi_uint8_t *protocol_version)
|
|
||||||
{
|
|
||||||
grub_efi_handle_t *handles;
|
|
||||||
grub_efi_uintn_t num_handles;
|
|
||||||
|
|
||||||
if (grub_tpm_handle != NULL)
|
|
||||||
{
|
|
||||||
*tpm_handle = grub_tpm_handle;
|
|
||||||
*protocol_version = grub_tpm_version;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &tpm_guid, NULL,
|
|
||||||
&num_handles);
|
|
||||||
if (handles && num_handles > 0)
|
|
||||||
{
|
|
||||||
grub_tpm_handle = handles[0];
|
|
||||||
*tpm_handle = handles[0];
|
|
||||||
grub_tpm_version = 1;
|
|
||||||
*protocol_version = 1;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &tpm2_guid, NULL,
|
|
||||||
&num_handles);
|
|
||||||
if (handles && num_handles > 0)
|
|
||||||
{
|
|
||||||
grub_tpm_handle = handles[0];
|
|
||||||
*tpm_handle = handles[0];
|
|
||||||
grub_tpm_version = 2;
|
|
||||||
*protocol_version = 2;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_tpm1_execute (grub_efi_handle_t tpm_handle,
|
|
||||||
PassThroughToTPM_InputParamBlock *inbuf,
|
|
||||||
PassThroughToTPM_OutputParamBlock *outbuf)
|
|
||||||
{
|
|
||||||
grub_efi_status_t status;
|
|
||||||
grub_efi_tpm_protocol_t *tpm;
|
|
||||||
grub_uint32_t inhdrsize = sizeof (*inbuf) - sizeof (inbuf->TPMOperandIn);
|
|
||||||
grub_uint32_t outhdrsize =
|
|
||||||
sizeof (*outbuf) - sizeof (outbuf->TPMOperandOut);
|
|
||||||
|
|
||||||
tpm = grub_efi_open_protocol (tpm_handle, &tpm_guid,
|
|
||||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
|
||||||
|
|
||||||
if (!grub_tpm1_present (tpm))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* UEFI TPM protocol takes the raw operand block, no param block header. */
|
|
||||||
status = efi_call_5 (tpm->pass_through_to_tpm, tpm,
|
|
||||||
inbuf->IPBLength - inhdrsize, inbuf->TPMOperandIn,
|
|
||||||
outbuf->OPBLength - outhdrsize, outbuf->TPMOperandOut);
|
|
||||||
|
|
||||||
switch (status)
|
|
||||||
{
|
|
||||||
case GRUB_EFI_SUCCESS:
|
|
||||||
return 0;
|
|
||||||
case GRUB_EFI_DEVICE_ERROR:
|
|
||||||
return grub_error (GRUB_ERR_IO, N_("Command failed"));
|
|
||||||
case GRUB_EFI_INVALID_PARAMETER:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid parameter"));
|
|
||||||
case GRUB_EFI_BUFFER_TOO_SMALL:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("Output buffer too small"));
|
|
||||||
case GRUB_EFI_NOT_FOUND:
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("TPM unavailable"));
|
|
||||||
default:
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("Unknown TPM error"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_tpm2_execute (grub_efi_handle_t tpm_handle,
|
|
||||||
PassThroughToTPM_InputParamBlock *inbuf,
|
|
||||||
PassThroughToTPM_OutputParamBlock *outbuf)
|
|
||||||
{
|
|
||||||
grub_efi_status_t status;
|
|
||||||
grub_efi_tpm2_protocol_t *tpm;
|
|
||||||
grub_uint32_t inhdrsize = sizeof (*inbuf) - sizeof (inbuf->TPMOperandIn);
|
|
||||||
grub_uint32_t outhdrsize =
|
|
||||||
sizeof (*outbuf) - sizeof (outbuf->TPMOperandOut);
|
|
||||||
|
|
||||||
tpm = grub_efi_open_protocol (tpm_handle, &tpm2_guid,
|
|
||||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
|
||||||
|
|
||||||
if (!grub_tpm2_present (tpm))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* UEFI TPM protocol takes the raw operand block, no param block header. */
|
|
||||||
status = efi_call_5 (tpm->submit_command, tpm,
|
|
||||||
inbuf->IPBLength - inhdrsize, inbuf->TPMOperandIn,
|
|
||||||
outbuf->OPBLength - outhdrsize, outbuf->TPMOperandOut);
|
|
||||||
|
|
||||||
switch (status)
|
|
||||||
{
|
|
||||||
case GRUB_EFI_SUCCESS:
|
|
||||||
return 0;
|
|
||||||
case GRUB_EFI_DEVICE_ERROR:
|
|
||||||
return grub_error (GRUB_ERR_IO, N_("Command failed"));
|
|
||||||
case GRUB_EFI_INVALID_PARAMETER:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid parameter"));
|
|
||||||
case GRUB_EFI_BUFFER_TOO_SMALL:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("Output buffer too small"));
|
|
||||||
case GRUB_EFI_NOT_FOUND:
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("TPM unavailable"));
|
|
||||||
default:
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("Unknown TPM error"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_err_t
|
|
||||||
grub_tpm_execute (PassThroughToTPM_InputParamBlock *inbuf,
|
|
||||||
PassThroughToTPM_OutputParamBlock *outbuf)
|
|
||||||
{
|
|
||||||
grub_efi_handle_t tpm_handle;
|
|
||||||
grub_uint8_t protocol_version;
|
|
||||||
|
|
||||||
/* Absence of a TPM isn't a failure. */
|
|
||||||
if (!grub_tpm_handle_find (&tpm_handle, &protocol_version))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (protocol_version == 1)
|
|
||||||
return grub_tpm1_execute (tpm_handle, inbuf, outbuf);
|
|
||||||
else
|
|
||||||
return grub_tpm2_execute (tpm_handle, inbuf, outbuf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_tpm1_log_event (grub_efi_handle_t tpm_handle, unsigned char *buf,
|
|
||||||
grub_size_t size, grub_uint8_t pcr,
|
|
||||||
const char *description)
|
|
||||||
{
|
|
||||||
grub_tpm_event_t *event;
|
|
||||||
grub_efi_status_t status;
|
|
||||||
grub_efi_tpm_protocol_t *tpm;
|
|
||||||
grub_efi_physical_address_t lastevent;
|
|
||||||
grub_uint32_t algorithm;
|
|
||||||
grub_uint32_t eventnum = 0;
|
|
||||||
|
|
||||||
tpm = grub_efi_open_protocol (tpm_handle, &tpm_guid,
|
|
||||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
|
||||||
|
|
||||||
if (!grub_tpm1_present (tpm))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
event = grub_zalloc (sizeof (*event) + grub_strlen (description) + 1);
|
|
||||||
if (!event)
|
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
|
||||||
N_("cannot allocate TPM event buffer"));
|
|
||||||
|
|
||||||
event->PCRIndex = pcr;
|
|
||||||
event->EventType = EV_IPL;
|
|
||||||
event->EventSize = grub_strlen (description) + 1;
|
|
||||||
grub_memcpy (event->Event, description, event->EventSize);
|
|
||||||
|
|
||||||
algorithm = TCG_ALG_SHA;
|
|
||||||
status = efi_call_7 (tpm->log_extend_event, tpm, (grub_addr_t) buf, (grub_uint64_t) size,
|
|
||||||
algorithm, event, &eventnum, &lastevent);
|
|
||||||
|
|
||||||
switch (status)
|
|
||||||
{
|
|
||||||
case GRUB_EFI_SUCCESS:
|
|
||||||
return 0;
|
|
||||||
case GRUB_EFI_DEVICE_ERROR:
|
|
||||||
return grub_error (GRUB_ERR_IO, N_("Command failed"));
|
|
||||||
case GRUB_EFI_INVALID_PARAMETER:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid parameter"));
|
|
||||||
case GRUB_EFI_BUFFER_TOO_SMALL:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("Output buffer too small"));
|
|
||||||
case GRUB_EFI_NOT_FOUND:
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("TPM unavailable"));
|
|
||||||
default:
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("Unknown TPM error"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_tpm2_log_event (grub_efi_handle_t tpm_handle, unsigned char *buf,
|
|
||||||
grub_size_t size, grub_uint8_t pcr,
|
|
||||||
const char *description)
|
|
||||||
{
|
|
||||||
EFI_TCG2_EVENT *event;
|
|
||||||
grub_efi_status_t status;
|
|
||||||
grub_efi_tpm2_protocol_t *tpm;
|
|
||||||
|
|
||||||
tpm = grub_efi_open_protocol (tpm_handle, &tpm2_guid,
|
|
||||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
|
||||||
|
|
||||||
if (!grub_tpm2_present (tpm))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
event =
|
|
||||||
grub_zalloc (sizeof (EFI_TCG2_EVENT) + grub_strlen (description) + 1);
|
|
||||||
if (!event)
|
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
|
||||||
N_("cannot allocate TPM event buffer"));
|
|
||||||
|
|
||||||
event->Header.HeaderSize = sizeof (EFI_TCG2_EVENT_HEADER);
|
|
||||||
event->Header.HeaderVersion = 1;
|
|
||||||
event->Header.PCRIndex = pcr;
|
|
||||||
event->Header.EventType = EV_IPL;
|
|
||||||
event->Size =
|
|
||||||
sizeof (*event) - sizeof (event->Event) + grub_strlen (description) + 1;
|
|
||||||
grub_memcpy (event->Event, description, grub_strlen (description) + 1);
|
|
||||||
|
|
||||||
status = efi_call_5 (tpm->hash_log_extend_event, tpm, 0, (grub_addr_t) buf,
|
|
||||||
(grub_uint64_t) size, event);
|
|
||||||
|
|
||||||
switch (status)
|
|
||||||
{
|
|
||||||
case GRUB_EFI_SUCCESS:
|
|
||||||
return 0;
|
|
||||||
case GRUB_EFI_DEVICE_ERROR:
|
|
||||||
return grub_error (GRUB_ERR_IO, N_("Command failed"));
|
|
||||||
case GRUB_EFI_INVALID_PARAMETER:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid parameter"));
|
|
||||||
case GRUB_EFI_BUFFER_TOO_SMALL:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("Output buffer too small"));
|
|
||||||
case GRUB_EFI_NOT_FOUND:
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("TPM unavailable"));
|
|
||||||
default:
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("Unknown TPM error"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_err_t
|
|
||||||
grub_tpm_log_event (unsigned char *buf, grub_size_t size, grub_uint8_t pcr,
|
|
||||||
const char *description)
|
|
||||||
{
|
|
||||||
grub_efi_handle_t tpm_handle;
|
|
||||||
grub_efi_uint8_t protocol_version;
|
|
||||||
|
|
||||||
if (!grub_tpm_handle_find (&tpm_handle, &protocol_version))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (protocol_version == 1)
|
|
||||||
return grub_tpm1_log_event (tpm_handle, buf, size, pcr, description);
|
|
||||||
else
|
|
||||||
return grub_tpm2_log_event (tpm_handle, buf, size, pcr, description);
|
|
||||||
}
|
|
||||||
@@ -1,692 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 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/dl.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/env.h>
|
|
||||||
#include <grub/command.h>
|
|
||||||
#include <grub/extcmd.h>
|
|
||||||
#include <grub/i18n.h>
|
|
||||||
#include <grub/file.h>
|
|
||||||
#include <grub/elf.h>
|
|
||||||
#include <grub/xen_file.h>
|
|
||||||
#include <grub/efi/pe32.h>
|
|
||||||
#include <grub/arm/linux.h>
|
|
||||||
#include <grub/arm64/linux.h>
|
|
||||||
#include <grub/i386/linux.h>
|
|
||||||
#include <grub/xnu.h>
|
|
||||||
#include <grub/machoload.h>
|
|
||||||
#include <grub/fileid.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
|
||||||
|
|
||||||
static const struct grub_arg_option options[] = {
|
|
||||||
{"is-i386-xen-pae-domu", 0, 0,
|
|
||||||
N_("Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel"),
|
|
||||||
0, 0},
|
|
||||||
{"is-x86_64-xen-domu", 0, 0,
|
|
||||||
N_("Check if FILE can be booted as x86_64 Xen unprivileged guest kernel"), 0, 0},
|
|
||||||
{"is-x86-xen-dom0", 0, 0,
|
|
||||||
N_("Check if FILE can be used as Xen x86 privileged guest kernel"), 0, 0},
|
|
||||||
{"is-x86-multiboot", 0, 0,
|
|
||||||
N_("Check if FILE can be used as x86 multiboot kernel"), 0, 0},
|
|
||||||
{"is-x86-multiboot2", 0, 0,
|
|
||||||
N_("Check if FILE can be used as x86 multiboot2 kernel"), 0, 0},
|
|
||||||
{"is-arm-linux", 0, 0,
|
|
||||||
N_("Check if FILE is ARM Linux"), 0, 0},
|
|
||||||
{"is-arm64-linux", 0, 0,
|
|
||||||
N_("Check if FILE is ARM64 Linux"), 0, 0},
|
|
||||||
{"is-ia64-linux", 0, 0,
|
|
||||||
N_("Check if FILE is IA64 Linux"), 0, 0},
|
|
||||||
{"is-mips-linux", 0, 0,
|
|
||||||
N_("Check if FILE is MIPS Linux"), 0, 0},
|
|
||||||
{"is-mipsel-linux", 0, 0,
|
|
||||||
N_("Check if FILE is MIPSEL Linux"), 0, 0},
|
|
||||||
{"is-sparc64-linux", 0, 0,
|
|
||||||
N_("Check if FILE is SPARC64 Linux"), 0, 0},
|
|
||||||
{"is-powerpc-linux", 0, 0,
|
|
||||||
N_("Check if FILE is POWERPC Linux"), 0, 0},
|
|
||||||
{"is-x86-linux", 0, 0,
|
|
||||||
N_("Check if FILE is x86 Linux"), 0, 0},
|
|
||||||
{"is-x86-linux32", 0, 0,
|
|
||||||
N_("Check if FILE is x86 Linux supporting 32-bit protocol"), 0, 0},
|
|
||||||
{"is-x86-kfreebsd", 0, 0,
|
|
||||||
N_("Check if FILE is x86 kFreeBSD"), 0, 0},
|
|
||||||
{"is-i386-kfreebsd", 0, 0,
|
|
||||||
N_("Check if FILE is i386 kFreeBSD"), 0, 0},
|
|
||||||
{"is-x86_64-kfreebsd", 0, 0,
|
|
||||||
N_("Check if FILE is x86_64 kFreeBSD"), 0, 0},
|
|
||||||
|
|
||||||
{"is-x86-knetbsd", 0, 0,
|
|
||||||
N_("Check if FILE is x86 kNetBSD"), 0, 0},
|
|
||||||
{"is-i386-knetbsd", 0, 0,
|
|
||||||
N_("Check if FILE is i386 kNetBSD"), 0, 0},
|
|
||||||
{"is-x86_64-knetbsd", 0, 0,
|
|
||||||
N_("Check if FILE is x86_64 kNetBSD"), 0, 0},
|
|
||||||
|
|
||||||
{"is-i386-efi", 0, 0,
|
|
||||||
N_("Check if FILE is i386 EFI file"), 0, 0},
|
|
||||||
{"is-x86_64-efi", 0, 0,
|
|
||||||
N_("Check if FILE is x86_64 EFI file"), 0, 0},
|
|
||||||
{"is-ia64-efi", 0, 0,
|
|
||||||
N_("Check if FILE is IA64 EFI file"), 0, 0},
|
|
||||||
{"is-arm64-efi", 0, 0,
|
|
||||||
N_("Check if FILE is ARM64 EFI file"), 0, 0},
|
|
||||||
{"is-arm-efi", 0, 0,
|
|
||||||
N_("Check if FILE is ARM EFI file"), 0, 0},
|
|
||||||
{"is-riscv32-efi", 0, 0,
|
|
||||||
N_("Check if FILE is RISC-V 32bit EFI file"), 0, 0},
|
|
||||||
{"is-riscv64-efi", 0, 0,
|
|
||||||
N_("Check if FILE is RISC-V 64bit EFI file"), 0, 0},
|
|
||||||
{"is-hibernated-hiberfil", 0, 0,
|
|
||||||
N_("Check if FILE is hiberfil.sys in hibernated state"), 0, 0},
|
|
||||||
{"is-x86_64-xnu", 0, 0,
|
|
||||||
N_("Check if FILE is x86_64 XNU (Mac OS X kernel)"), 0, 0},
|
|
||||||
{"is-i386-xnu", 0, 0,
|
|
||||||
N_("Check if FILE is i386 XNU (Mac OS X kernel)"), 0, 0},
|
|
||||||
{"is-xnu-hibr", 0, 0,
|
|
||||||
N_("Check if FILE is XNU (Mac OS X kernel) hibernated image"), 0, 0},
|
|
||||||
{"is-x86-bios-bootsector", 0, 0,
|
|
||||||
N_("Check if FILE is BIOS bootsector"), 0, 0},
|
|
||||||
{0, 0, 0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
IS_PAE_DOMU,
|
|
||||||
IS_64_DOMU,
|
|
||||||
IS_DOM0,
|
|
||||||
IS_MULTIBOOT,
|
|
||||||
IS_MULTIBOOT2,
|
|
||||||
IS_ARM_LINUX,
|
|
||||||
IS_ARM64_LINUX,
|
|
||||||
IS_IA64_LINUX,
|
|
||||||
IS_MIPS_LINUX,
|
|
||||||
IS_MIPSEL_LINUX,
|
|
||||||
IS_SPARC64_LINUX,
|
|
||||||
IS_POWERPC_LINUX,
|
|
||||||
IS_X86_LINUX,
|
|
||||||
IS_X86_LINUX32,
|
|
||||||
IS_X86_KFREEBSD,
|
|
||||||
IS_X86_KFREEBSD32,
|
|
||||||
IS_X86_KFREEBSD64,
|
|
||||||
IS_X86_KNETBSD,
|
|
||||||
IS_X86_KNETBSD32,
|
|
||||||
IS_X86_KNETBSD64,
|
|
||||||
IS_32_EFI,
|
|
||||||
IS_64_EFI,
|
|
||||||
IS_IA_EFI,
|
|
||||||
IS_ARM64_EFI,
|
|
||||||
IS_ARM_EFI,
|
|
||||||
IS_RISCV_EFI,
|
|
||||||
IS_HIBERNATED,
|
|
||||||
IS_XNU64,
|
|
||||||
IS_XNU32,
|
|
||||||
IS_XNU_HIBR,
|
|
||||||
IS_BIOS_BOOTSECTOR,
|
|
||||||
OPT_TYPE_MIN = IS_PAE_DOMU,
|
|
||||||
OPT_TYPE_MAX = IS_BIOS_BOOTSECTOR
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|
||||||
{
|
|
||||||
grub_file_t file = 0;
|
|
||||||
grub_elf_t elf = 0;
|
|
||||||
grub_err_t err;
|
|
||||||
int type = -1, i;
|
|
||||||
int ret = 0;
|
|
||||||
grub_macho_t macho = 0;
|
|
||||||
|
|
||||||
if (argc == 0)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
|
||||||
for (i = OPT_TYPE_MIN; i <= OPT_TYPE_MAX; i++)
|
|
||||||
if (ctxt->state[i].set)
|
|
||||||
{
|
|
||||||
if (type == -1)
|
|
||||||
{
|
|
||||||
type = i;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "multiple types specified");
|
|
||||||
}
|
|
||||||
if (type == -1)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no type specified");
|
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_XNU_KERNEL);
|
|
||||||
if (!file)
|
|
||||||
return grub_errno;
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case IS_BIOS_BOOTSECTOR:
|
|
||||||
{
|
|
||||||
grub_uint16_t sig;
|
|
||||||
if (grub_file_size (file) != 512)
|
|
||||||
break;
|
|
||||||
if (grub_file_seek (file, 510) == (grub_size_t) -1)
|
|
||||||
break;
|
|
||||||
if (grub_file_read (file, &sig, 2) != 2)
|
|
||||||
break;
|
|
||||||
if (sig != grub_cpu_to_le16_compile_time (0xaa55))
|
|
||||||
break;
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_IA64_LINUX:
|
|
||||||
{
|
|
||||||
Elf64_Ehdr ehdr;
|
|
||||||
|
|
||||||
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|
|
||||||
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|
|
||||||
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|
|
||||||
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|
|
||||||
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|
|
||||||
|| ehdr.e_version != EV_CURRENT)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_CLASS] != ELFCLASS64
|
|
||||||
|| ehdr.e_ident[EI_DATA] != ELFDATA2LSB
|
|
||||||
|| ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_IA_64))
|
|
||||||
break;
|
|
||||||
|
|
||||||
ret = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IS_SPARC64_LINUX:
|
|
||||||
{
|
|
||||||
Elf64_Ehdr ehdr;
|
|
||||||
|
|
||||||
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|
|
||||||
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|
|
||||||
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|
|
||||||
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|
|
||||||
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|
|
||||||
|| ehdr.e_version != EV_CURRENT)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_CLASS] != ELFCLASS64
|
|
||||||
|| ehdr.e_ident[EI_DATA] != ELFDATA2MSB)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_SPARCV9)
|
|
||||||
|| ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC))
|
|
||||||
break;
|
|
||||||
|
|
||||||
ret = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IS_POWERPC_LINUX:
|
|
||||||
{
|
|
||||||
Elf32_Ehdr ehdr;
|
|
||||||
|
|
||||||
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|
|
||||||
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|
|
||||||
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|
|
||||||
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|
|
||||||
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|
|
||||||
|| ehdr.e_version != EV_CURRENT)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_DATA] != ELFDATA2MSB
|
|
||||||
|| (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_PPC)
|
|
||||||
&& ehdr.e_machine !=
|
|
||||||
grub_cpu_to_le16_compile_time (EM_PPC64)))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC)
|
|
||||||
&& ehdr.e_type != grub_cpu_to_be16_compile_time (ET_DYN))
|
|
||||||
break;
|
|
||||||
|
|
||||||
ret = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IS_MIPS_LINUX:
|
|
||||||
{
|
|
||||||
Elf32_Ehdr ehdr;
|
|
||||||
|
|
||||||
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|
|
||||||
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|
|
||||||
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|
|
||||||
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|
|
||||||
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|
|
||||||
|| ehdr.e_version != EV_CURRENT)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_DATA] != ELFDATA2MSB
|
|
||||||
|| ehdr.e_machine != grub_cpu_to_be16_compile_time (EM_MIPS)
|
|
||||||
|| ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC))
|
|
||||||
break;
|
|
||||||
|
|
||||||
ret = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IS_X86_KNETBSD:
|
|
||||||
case IS_X86_KNETBSD32:
|
|
||||||
case IS_X86_KNETBSD64:
|
|
||||||
{
|
|
||||||
int is32, is64;
|
|
||||||
|
|
||||||
elf = grub_elf_file (file, file->name);
|
|
||||||
|
|
||||||
if (elf->ehdr.ehdr32.e_type != grub_cpu_to_le16_compile_time (ET_EXEC)
|
|
||||||
|| elf->ehdr.ehdr32.e_ident[EI_DATA] != ELFDATA2LSB)
|
|
||||||
break;
|
|
||||||
|
|
||||||
is32 = grub_elf_is_elf32 (elf);
|
|
||||||
is64 = grub_elf_is_elf64 (elf);
|
|
||||||
if (!is32 && !is64)
|
|
||||||
break;
|
|
||||||
if (!is32 && type == IS_X86_KNETBSD32)
|
|
||||||
break;
|
|
||||||
if (!is64 && type == IS_X86_KNETBSD64)
|
|
||||||
break;
|
|
||||||
if (is64)
|
|
||||||
ret = grub_file_check_netbsd64 (elf);
|
|
||||||
if (is32)
|
|
||||||
ret = grub_file_check_netbsd32 (elf);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IS_X86_KFREEBSD:
|
|
||||||
case IS_X86_KFREEBSD32:
|
|
||||||
case IS_X86_KFREEBSD64:
|
|
||||||
{
|
|
||||||
Elf32_Ehdr ehdr;
|
|
||||||
int is32, is64;
|
|
||||||
|
|
||||||
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|
|
||||||
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|
|
||||||
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|
|
||||||
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|
|
||||||
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|
|
||||||
|| ehdr.e_version != EV_CURRENT)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_type != grub_cpu_to_le16_compile_time (ET_EXEC)
|
|
||||||
|| ehdr.e_ident[EI_DATA] != ELFDATA2LSB)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
|
|
||||||
break;
|
|
||||||
|
|
||||||
is32 = (ehdr.e_machine == grub_cpu_to_le16_compile_time (EM_386)
|
|
||||||
&& ehdr.e_ident[EI_CLASS] == ELFCLASS32);
|
|
||||||
is64 = (ehdr.e_machine == grub_cpu_to_le16_compile_time (EM_X86_64)
|
|
||||||
&& ehdr.e_ident[EI_CLASS] == ELFCLASS64);
|
|
||||||
if (!is32 && !is64)
|
|
||||||
break;
|
|
||||||
if (!is32 && (type == IS_X86_KFREEBSD32 || type == IS_X86_KNETBSD32))
|
|
||||||
break;
|
|
||||||
if (!is64 && (type == IS_X86_KFREEBSD64 || type == IS_X86_KNETBSD64))
|
|
||||||
break;
|
|
||||||
ret = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
case IS_MIPSEL_LINUX:
|
|
||||||
{
|
|
||||||
Elf32_Ehdr ehdr;
|
|
||||||
|
|
||||||
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|
|
||||||
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|
|
||||||
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|
|
||||||
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|
|
||||||
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|
|
||||||
|| ehdr.e_version != EV_CURRENT)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_MIPS)
|
|
||||||
|| ehdr.e_type != grub_cpu_to_le16_compile_time (ET_EXEC))
|
|
||||||
break;
|
|
||||||
|
|
||||||
ret = 1;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_ARM_LINUX:
|
|
||||||
{
|
|
||||||
struct linux_arm_kernel_header lh;
|
|
||||||
|
|
||||||
if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
|
|
||||||
break;
|
|
||||||
/* Short forward branch in A32 state (for Raspberry pi kernels). */
|
|
||||||
if (lh.code0 == grub_cpu_to_le32_compile_time (0xea000006))
|
|
||||||
{
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lh.magic ==
|
|
||||||
grub_cpu_to_le32_compile_time (GRUB_LINUX_ARM_MAGIC_SIGNATURE))
|
|
||||||
{
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_ARM64_LINUX:
|
|
||||||
{
|
|
||||||
struct linux_arm64_kernel_header lh;
|
|
||||||
|
|
||||||
if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (lh.magic ==
|
|
||||||
grub_cpu_to_le32_compile_time (GRUB_LINUX_ARM64_MAGIC_SIGNATURE))
|
|
||||||
{
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_PAE_DOMU ... IS_DOM0:
|
|
||||||
{
|
|
||||||
struct grub_xen_file_info xen_inf;
|
|
||||||
elf = grub_xen_file (file);
|
|
||||||
if (!elf)
|
|
||||||
break;
|
|
||||||
err = grub_xen_get_info (elf, &xen_inf);
|
|
||||||
if (err)
|
|
||||||
break;
|
|
||||||
/* Unfortuntely no way to check if kernel supports dom0. */
|
|
||||||
if (type == IS_DOM0)
|
|
||||||
ret = 1;
|
|
||||||
if (type == IS_PAE_DOMU)
|
|
||||||
ret = (xen_inf.arch == GRUB_XEN_FILE_I386_PAE
|
|
||||||
|| xen_inf.arch == GRUB_XEN_FILE_I386_PAE_BIMODE);
|
|
||||||
if (type == IS_64_DOMU)
|
|
||||||
ret = (xen_inf.arch == GRUB_XEN_FILE_X86_64);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_MULTIBOOT:
|
|
||||||
case IS_MULTIBOOT2:
|
|
||||||
{
|
|
||||||
grub_uint32_t *buffer;
|
|
||||||
grub_ssize_t len;
|
|
||||||
grub_size_t search_size;
|
|
||||||
grub_uint32_t *header;
|
|
||||||
grub_uint32_t magic;
|
|
||||||
grub_size_t step;
|
|
||||||
|
|
||||||
if (type == IS_MULTIBOOT2)
|
|
||||||
{
|
|
||||||
search_size = 32768;
|
|
||||||
magic = grub_cpu_to_le32_compile_time (0xe85250d6);
|
|
||||||
step = 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
search_size = 8192;
|
|
||||||
magic = grub_cpu_to_le32_compile_time (0x1BADB002);
|
|
||||||
step = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer = grub_malloc (search_size);
|
|
||||||
if (!buffer)
|
|
||||||
break;
|
|
||||||
|
|
||||||
len = grub_file_read (file, buffer, search_size);
|
|
||||||
if (len < 32)
|
|
||||||
{
|
|
||||||
grub_free (buffer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Look for the multiboot header in the buffer. The header should
|
|
||||||
be at least 12 bytes and aligned on a 4-byte boundary. */
|
|
||||||
for (header = buffer;
|
|
||||||
((char *) header <=
|
|
||||||
(char *) buffer + len - (type == IS_MULTIBOOT2 ? 16 : 12));
|
|
||||||
header += step)
|
|
||||||
{
|
|
||||||
if (header[0] == magic
|
|
||||||
&& !(grub_le_to_cpu32 (header[0])
|
|
||||||
+ grub_le_to_cpu32 (header[1])
|
|
||||||
+ grub_le_to_cpu32 (header[2])
|
|
||||||
+ (type == IS_MULTIBOOT2
|
|
||||||
? grub_le_to_cpu32 (header[3]) : 0)))
|
|
||||||
{
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_free (buffer);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_X86_LINUX32:
|
|
||||||
case IS_X86_LINUX:
|
|
||||||
{
|
|
||||||
struct linux_i386_kernel_header lh;
|
|
||||||
if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
|
|
||||||
break;
|
|
||||||
if (lh.boot_flag != grub_cpu_to_le16_compile_time (0xaa55))
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (lh.setup_sects > GRUB_LINUX_MAX_SETUP_SECTS)
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* FIXME: some really old kernels (< 1.3.73) will fail this. */
|
|
||||||
if (lh.header !=
|
|
||||||
grub_cpu_to_le32_compile_time (GRUB_LINUX_I386_MAGIC_SIGNATURE)
|
|
||||||
|| grub_le_to_cpu16 (lh.version) < 0x0200)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (type == IS_X86_LINUX)
|
|
||||||
{
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* FIXME: 2.03 is not always good enough (Linux 2.4 can be 2.03 and
|
|
||||||
still not support 32-bit boot. */
|
|
||||||
if (lh.header !=
|
|
||||||
grub_cpu_to_le32_compile_time (GRUB_LINUX_I386_MAGIC_SIGNATURE)
|
|
||||||
|| grub_le_to_cpu16 (lh.version) < 0x0203)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (!(lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL))
|
|
||||||
break;
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_HIBERNATED:
|
|
||||||
{
|
|
||||||
grub_uint8_t hibr_file_magic[4];
|
|
||||||
if (grub_file_read (file, &hibr_file_magic, sizeof (hibr_file_magic))
|
|
||||||
!= sizeof (hibr_file_magic))
|
|
||||||
break;
|
|
||||||
if (grub_memcmp ("hibr", hibr_file_magic, sizeof (hibr_file_magic)) ==
|
|
||||||
0
|
|
||||||
|| grub_memcmp ("HIBR", hibr_file_magic,
|
|
||||||
sizeof (hibr_file_magic)) == 0)
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_XNU64:
|
|
||||||
case IS_XNU32:
|
|
||||||
{
|
|
||||||
macho = grub_macho_open (args[0], GRUB_FILE_TYPE_XNU_KERNEL,
|
|
||||||
(type == IS_XNU64));
|
|
||||||
if (!macho)
|
|
||||||
break;
|
|
||||||
/* FIXME: more checks? */
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_XNU_HIBR:
|
|
||||||
{
|
|
||||||
struct grub_xnu_hibernate_header hibhead;
|
|
||||||
if (grub_file_read (file, &hibhead, sizeof (hibhead))
|
|
||||||
!= sizeof (hibhead))
|
|
||||||
break;
|
|
||||||
if (hibhead.magic !=
|
|
||||||
grub_cpu_to_le32_compile_time (GRUB_XNU_HIBERNATE_MAGIC))
|
|
||||||
break;
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case IS_32_EFI:
|
|
||||||
case IS_64_EFI:
|
|
||||||
case IS_IA_EFI:
|
|
||||||
case IS_ARM64_EFI:
|
|
||||||
case IS_ARM_EFI:
|
|
||||||
case IS_RISCV_EFI:
|
|
||||||
{
|
|
||||||
char signature[4];
|
|
||||||
grub_uint32_t pe_offset;
|
|
||||||
struct grub_pe32_coff_header coff_head;
|
|
||||||
|
|
||||||
if (grub_file_read (file, signature, 2) != 2)
|
|
||||||
break;
|
|
||||||
if (signature[0] != 'M' || signature[1] != 'Z')
|
|
||||||
break;
|
|
||||||
if ((grub_ssize_t) grub_file_seek (file, 0x3c) == -1)
|
|
||||||
break;
|
|
||||||
if (grub_file_read (file, &pe_offset, 4) != 4)
|
|
||||||
break;
|
|
||||||
if ((grub_ssize_t) grub_file_seek (file, grub_le_to_cpu32 (pe_offset))
|
|
||||||
== -1)
|
|
||||||
break;
|
|
||||||
if (grub_file_read (file, signature, 4) != 4)
|
|
||||||
break;
|
|
||||||
if (signature[0] != 'P' || signature[1] != 'E'
|
|
||||||
|| signature[2] != '\0' || signature[3] != '\0')
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (grub_file_read (file, &coff_head, sizeof (coff_head))
|
|
||||||
!= sizeof (coff_head))
|
|
||||||
break;
|
|
||||||
if (type == IS_32_EFI
|
|
||||||
&& coff_head.machine !=
|
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_I386))
|
|
||||||
break;
|
|
||||||
if (type == IS_64_EFI
|
|
||||||
&& coff_head.machine !=
|
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_X86_64))
|
|
||||||
break;
|
|
||||||
if (type == IS_IA_EFI
|
|
||||||
&& coff_head.machine !=
|
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_IA64))
|
|
||||||
break;
|
|
||||||
if (type == IS_ARM64_EFI
|
|
||||||
&& coff_head.machine !=
|
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARM64))
|
|
||||||
break;
|
|
||||||
if (type == IS_ARM_EFI
|
|
||||||
&& coff_head.machine !=
|
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARMTHUMB_MIXED))
|
|
||||||
break;
|
|
||||||
if (type == IS_RISCV_EFI
|
|
||||||
&& coff_head.machine !=
|
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_RISCV64))
|
|
||||||
/* TODO: Determine bitness dynamically */
|
|
||||||
break;
|
|
||||||
if (type == IS_IA_EFI || type == IS_64_EFI || type == IS_ARM64_EFI ||
|
|
||||||
type == IS_RISCV_EFI)
|
|
||||||
{
|
|
||||||
struct grub_pe64_optional_header o64;
|
|
||||||
if (grub_file_read (file, &o64, sizeof (o64)) != sizeof (o64))
|
|
||||||
break;
|
|
||||||
if (o64.magic !=
|
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_PE64_MAGIC))
|
|
||||||
break;
|
|
||||||
if (o64.subsystem !=
|
|
||||||
grub_cpu_to_le16_compile_time
|
|
||||||
(GRUB_PE32_SUBSYSTEM_EFI_APPLICATION))
|
|
||||||
break;
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (type == IS_32_EFI || type == IS_ARM_EFI)
|
|
||||||
{
|
|
||||||
struct grub_pe32_optional_header o32;
|
|
||||||
if (grub_file_read (file, &o32, sizeof (o32)) != sizeof (o32))
|
|
||||||
break;
|
|
||||||
if (o32.magic !=
|
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_PE32_MAGIC))
|
|
||||||
break;
|
|
||||||
if (o32.subsystem !=
|
|
||||||
grub_cpu_to_le16_compile_time
|
|
||||||
(GRUB_PE32_SUBSYSTEM_EFI_APPLICATION))
|
|
||||||
break;
|
|
||||||
ret = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (elf)
|
|
||||||
grub_elf_close (elf);
|
|
||||||
else if (macho)
|
|
||||||
grub_macho_close (macho);
|
|
||||||
else if (file)
|
|
||||||
grub_file_close (file);
|
|
||||||
|
|
||||||
if (!ret && (grub_errno == GRUB_ERR_BAD_OS || grub_errno == GRUB_ERR_NONE))
|
|
||||||
/* TRANSLATORS: it's a standalone boolean value,
|
|
||||||
opposite of "true". */
|
|
||||||
grub_error (GRUB_ERR_TEST_FAILURE, N_("false"));
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_extcmd_t cmd;
|
|
||||||
|
|
||||||
GRUB_MOD_INIT(file)
|
|
||||||
{
|
|
||||||
cmd = grub_register_extcmd ("file", grub_cmd_file, 0,
|
|
||||||
N_("OPTIONS FILE"),
|
|
||||||
N_("Check if FILE is of specified type."),
|
|
||||||
options);
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI(file)
|
|
||||||
{
|
|
||||||
grub_unregister_extcmd (cmd);
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
#define GRUB_TARGET_WORDSIZE 32
|
|
||||||
#define XX 32
|
|
||||||
#define ehdrXX ehdr32
|
|
||||||
#define grub_file_check_netbsdXX grub_file_check_netbsd32
|
|
||||||
#include "fileXX.c"
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
#define GRUB_TARGET_WORDSIZE 64
|
|
||||||
#define XX 64
|
|
||||||
#define ehdrXX ehdr64
|
|
||||||
#define grub_file_check_netbsdXX grub_file_check_netbsd64
|
|
||||||
#include "fileXX.c"
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 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/fileid.h>
|
|
||||||
#include <grub/elfload.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
|
||||||
|
|
||||||
int
|
|
||||||
grub_file_check_netbsdXX (grub_elf_t elf)
|
|
||||||
{
|
|
||||||
Elf_Shdr *s, *s0;
|
|
||||||
|
|
||||||
grub_size_t shnum = elf->ehdr.ehdrXX.e_shnum;
|
|
||||||
grub_size_t shentsize = elf->ehdr.ehdrXX.e_shentsize;
|
|
||||||
grub_size_t shsize = shnum * shentsize;
|
|
||||||
grub_off_t stroff;
|
|
||||||
|
|
||||||
if (!shnum || !shentsize)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
s0 = grub_malloc (shsize);
|
|
||||||
if (!s0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_shoff) == (grub_off_t) -1)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
if (grub_file_read (elf->file, s0, shsize) != (grub_ssize_t) shsize)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
s = (Elf_Shdr *) ((char *) s0 + elf->ehdr.ehdrXX.e_shstrndx * shentsize);
|
|
||||||
stroff = s->sh_offset;
|
|
||||||
|
|
||||||
for (s = s0; s < (Elf_Shdr *) ((char *) s0 + shnum * shentsize);
|
|
||||||
s = (Elf_Shdr *) ((char *) s + shentsize))
|
|
||||||
{
|
|
||||||
char name[sizeof(".note.netbsd.ident")];
|
|
||||||
grub_memset (name, 0, sizeof (name));
|
|
||||||
if (grub_file_seek (elf->file, stroff + s->sh_name) == (grub_off_t) -1)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
if (grub_file_read (elf->file, name, sizeof (name)) != (grub_ssize_t) sizeof (name))
|
|
||||||
{
|
|
||||||
if (grub_errno)
|
|
||||||
goto fail;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (grub_memcmp (name, ".note.netbsd.ident",
|
|
||||||
sizeof(".note.netbsd.ident")) != 0)
|
|
||||||
continue;
|
|
||||||
grub_free (s0);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
fail:
|
|
||||||
grub_free (s0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -101,7 +101,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check if it is valid. */
|
/* Check if it is valid. */
|
||||||
if (mbr.signature != grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE))
|
if (mbr.signature != grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE))
|
||||||
{
|
{
|
||||||
grub_device_close (dev);
|
grub_device_close (dev);
|
||||||
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
|
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
|
||||||
@@ -216,7 +216,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
first_sector--;
|
first_sector--;
|
||||||
mbr.entries[0].flag = 0;
|
mbr.entries[0].flag = 0;
|
||||||
mbr.entries[0].type = GRUB_PC_PARTITION_TYPE_GPT_DISK;
|
mbr.entries[0].type = GRUB_PC_PARTITION_TYPE_GPT_DISK;
|
||||||
mbr.entries[0].start = grub_cpu_to_le32_compile_time (1);
|
mbr.entries[0].start = grub_cpu_to_le32 (1);
|
||||||
lba_to_chs (1,
|
lba_to_chs (1,
|
||||||
&(mbr.entries[0].start_sector),
|
&(mbr.entries[0].start_sector),
|
||||||
&(mbr.entries[0].start_cylinder),
|
&(mbr.entries[0].start_cylinder),
|
||||||
@@ -227,7 +227,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
&(mbr.entries[0].end_head));
|
&(mbr.entries[0].end_head));
|
||||||
mbr.entries[0].length = grub_cpu_to_le32 (first_sector);
|
mbr.entries[0].length = grub_cpu_to_le32 (first_sector);
|
||||||
|
|
||||||
mbr.signature = grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE);
|
mbr.signature = grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE);
|
||||||
|
|
||||||
if (grub_disk_write (dev->disk, 0, 0, sizeof (mbr), &mbr))
|
if (grub_disk_write (dev->disk, 0, 0, sizeof (mbr), &mbr))
|
||||||
{
|
{
|
||||||
@@ -235,8 +235,6 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_device_close (dev);
|
|
||||||
|
|
||||||
grub_printf_ (N_("New MBR is written to `%s'\n"), args[0]);
|
grub_printf_ (N_("New MBR is written to `%s'\n"), args[0]);
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ check_list (const gcry_md_spec_t *hash, const char *hashfilename,
|
|||||||
if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN)
|
if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN)
|
||||||
return grub_error (GRUB_ERR_BUG, "mdlen is too long");
|
return grub_error (GRUB_ERR_BUG, "mdlen is too long");
|
||||||
|
|
||||||
hashlist = grub_file_open (hashfilename, GRUB_FILE_TYPE_HASHLIST);
|
hashlist = grub_file_open (hashfilename);
|
||||||
if (!hashlist)
|
if (!hashlist)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
@@ -141,15 +141,17 @@ check_list (const gcry_md_spec_t *hash, const char *hashfilename,
|
|||||||
filename = grub_xasprintf ("%s/%s", prefix, p);
|
filename = grub_xasprintf ("%s/%s", prefix, p);
|
||||||
if (!filename)
|
if (!filename)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
file = grub_file_open (filename, GRUB_FILE_TYPE_TO_HASH
|
if (!uncompress)
|
||||||
| (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS
|
grub_file_filter_disable_compression ();
|
||||||
: GRUB_FILE_TYPE_NONE));
|
file = grub_file_open (filename);
|
||||||
grub_free (filename);
|
grub_free (filename);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
file = grub_file_open (p, GRUB_FILE_TYPE_TO_HASH
|
{
|
||||||
| (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS
|
if (!uncompress)
|
||||||
: GRUB_FILE_TYPE_NONE));
|
grub_file_filter_disable_compression ();
|
||||||
|
file = grub_file_open (p);
|
||||||
|
}
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
grub_file_close (hashlist);
|
grub_file_close (hashlist);
|
||||||
@@ -240,9 +242,9 @@ grub_cmd_hashsum (struct grub_extcmd_context *ctxt,
|
|||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
unsigned j;
|
unsigned j;
|
||||||
file = grub_file_open (args[i], GRUB_FILE_TYPE_TO_HASH
|
if (!uncompress)
|
||||||
| (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS
|
grub_file_filter_disable_compression ();
|
||||||
: GRUB_FILE_TYPE_NONE));
|
file = grub_file_open (args[i]);
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
if (!keep)
|
if (!keep)
|
||||||
|
|||||||
@@ -328,9 +328,7 @@ 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);
|
|
||||||
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ grub_cmd_hexdump (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
{
|
{
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_HEXCAT);
|
file = grub_file_open (args[0]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ GRUB_MOD_INIT(cmosdump)
|
|||||||
{
|
{
|
||||||
cmd = grub_register_command ("cmosdump", grub_cmd_cmosdump,
|
cmd = grub_register_command ("cmosdump", grub_cmd_cmosdump,
|
||||||
0,
|
0,
|
||||||
N_("Show raw dump of the CMOS contents."));
|
N_("Dump CMOS contents."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(cmosdump)
|
GRUB_MOD_FINI(cmosdump)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static grub_err_t
|
|||||||
grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int byte = 0, bit = 0;
|
int byte, bit;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t value;
|
grub_uint8_t value;
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ static grub_err_t
|
|||||||
grub_cmd_cmosclean (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_cmosclean (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int byte = 0, bit = 0;
|
int byte, bit;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t value;
|
grub_uint8_t value;
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ static grub_err_t
|
|||||||
grub_cmd_cmosset (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_cmosset (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int byte = 0, bit = 0;
|
int byte, bit;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t value;
|
grub_uint8_t value;
|
||||||
|
|
||||||
@@ -109,10 +109,9 @@ GRUB_MOD_INIT(cmostest)
|
|||||||
N_("Test bit at BYTE:BIT in CMOS."));
|
N_("Test bit at BYTE:BIT in CMOS."));
|
||||||
cmd_clean = grub_register_command ("cmosclean", grub_cmd_cmosclean,
|
cmd_clean = grub_register_command ("cmosclean", grub_cmd_cmosclean,
|
||||||
N_("BYTE:BIT"),
|
N_("BYTE:BIT"),
|
||||||
N_("Clear bit at BYTE:BIT in CMOS."));
|
N_("Clean bit at BYTE:BIT in CMOS."));
|
||||||
cmd_set = grub_register_command ("cmosset", grub_cmd_cmosset,
|
cmd_set = grub_register_command ("cmosset", grub_cmd_cmosset,
|
||||||
N_("BYTE:BIT"),
|
N_("BYTE:BIT"),
|
||||||
/* TRANSLATORS: A bit may be either set (1) or clear (0). */
|
|
||||||
N_("Set bit at BYTE:BIT in CMOS."));
|
N_("Set bit at BYTE:BIT in CMOS."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/coreboot/lbio.h>
|
#include <grub/i386/coreboot/lbio.h>
|
||||||
#include <grub/i386/tsc.h>
|
#include <grub/i386/tsc.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
@@ -39,17 +39,9 @@ static const char *descs[] = {
|
|||||||
[2] = "before RAM init",
|
[2] = "before RAM init",
|
||||||
[3] = "after RAM init",
|
[3] = "after RAM init",
|
||||||
[4] = "end of romstage",
|
[4] = "end of romstage",
|
||||||
[5] = "start of verified boot",
|
|
||||||
[6] = "end of verified boot",
|
|
||||||
[8] = "start of RAM copy",
|
[8] = "start of RAM copy",
|
||||||
[9] = "end of RAM copy",
|
[9] = "end of RAM copy",
|
||||||
[10] = "start of ramstage",
|
[10] = "start of ramstage",
|
||||||
[11] = "start of bootblock",
|
|
||||||
[12] = "end of bootblock",
|
|
||||||
[13] = "starting to load romstage",
|
|
||||||
[14] = "finished loading romstage",
|
|
||||||
[15] = "starting LZMA decompress (ignore for x86)",
|
|
||||||
[16] = "finished LZMA decompress (ignore for x86)",
|
|
||||||
[30] = "device enumerate",
|
[30] = "device enumerate",
|
||||||
[40] = "device configure",
|
[40] = "device configure",
|
||||||
[50] = "device enable",
|
[50] = "device enable",
|
||||||
@@ -117,7 +109,7 @@ GRUB_MOD_INIT(cbtime)
|
|||||||
{
|
{
|
||||||
cmd_boottime =
|
cmd_boottime =
|
||||||
grub_register_command ("coreboot_boottime", grub_cmd_coreboot_boottime,
|
grub_register_command ("coreboot_boottime", grub_cmd_coreboot_boottime,
|
||||||
0, N_("Show coreboot boot time statistics."));
|
0, N_("Get coreboot boot time statistics."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(cbtime)
|
GRUB_MOD_FINI(cbtime)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/coreboot/lbio.h>
|
#include <grub/i386/coreboot/lbio.h>
|
||||||
#include <grub/i386/tsc.h>
|
#include <grub/i386/tsc.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|||||||
@@ -34,38 +34,19 @@ static const struct grub_arg_option options[] =
|
|||||||
/* TRANSLATORS: "(default)" at the end means that this option is used if
|
/* TRANSLATORS: "(default)" at the end means that this option is used if
|
||||||
no argument is specified. */
|
no argument is specified. */
|
||||||
{"long-mode", 'l', 0, N_("Check if CPU supports 64-bit (long) mode (default)."), 0, 0},
|
{"long-mode", 'l', 0, N_("Check if CPU supports 64-bit (long) mode (default)."), 0, 0},
|
||||||
{"pae", 'p', 0, N_("Check if CPU supports Physical Address Extension."), 0, 0},
|
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
#define bit_LM (1 << 29)
|
||||||
{
|
|
||||||
MODE_LM = 0,
|
|
||||||
MODE_PAE = 1
|
|
||||||
};
|
|
||||||
|
|
||||||
enum
|
unsigned char grub_cpuid_has_longmode = 0;
|
||||||
{
|
|
||||||
bit_PAE = (1 << 6),
|
|
||||||
};
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
bit_LM = (1 << 29)
|
|
||||||
};
|
|
||||||
|
|
||||||
unsigned char grub_cpuid_has_longmode = 0, grub_cpuid_has_pae = 0;
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_cpuid (grub_extcmd_context_t ctxt,
|
grub_cmd_cpuid (grub_extcmd_context_t ctxt __attribute__ ((unused)),
|
||||||
int argc __attribute__ ((unused)),
|
int argc __attribute__ ((unused)),
|
||||||
char **args __attribute__ ((unused)))
|
char **args __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
int val = 0;
|
return grub_cpuid_has_longmode ? GRUB_ERR_NONE
|
||||||
if (ctxt->state[MODE_PAE].set)
|
|
||||||
val = grub_cpuid_has_pae;
|
|
||||||
else
|
|
||||||
val = grub_cpuid_has_longmode;
|
|
||||||
return val ? GRUB_ERR_NONE
|
|
||||||
/* TRANSLATORS: it's a standalone boolean value,
|
/* TRANSLATORS: it's a standalone boolean value,
|
||||||
opposite of "true". */
|
opposite of "true". */
|
||||||
: grub_error (GRUB_ERR_TEST_FAILURE, N_("false"));
|
: grub_error (GRUB_ERR_TEST_FAILURE, N_("false"));
|
||||||
@@ -78,7 +59,6 @@ GRUB_MOD_INIT(cpuid)
|
|||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
/* grub-emu */
|
/* grub-emu */
|
||||||
grub_cpuid_has_longmode = 1;
|
grub_cpuid_has_longmode = 1;
|
||||||
grub_cpuid_has_pae = 1;
|
|
||||||
#else
|
#else
|
||||||
unsigned int eax, ebx, ecx, edx;
|
unsigned int eax, ebx, ecx, edx;
|
||||||
unsigned int max_level;
|
unsigned int max_level;
|
||||||
@@ -99,12 +79,6 @@ GRUB_MOD_INIT(cpuid)
|
|||||||
if (max_level == 0)
|
if (max_level == 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if (max_level >= 1)
|
|
||||||
{
|
|
||||||
grub_cpuid (1, eax, ebx, ecx, edx);
|
|
||||||
grub_cpuid_has_pae = !!(edx & bit_PAE);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_cpuid (0x80000000, eax, ebx, ecx, edx);
|
grub_cpuid (0x80000000, eax, ebx, ecx, edx);
|
||||||
ext_level = eax;
|
ext_level = eax;
|
||||||
if (ext_level < 0x80000000)
|
if (ext_level < 0x80000000)
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/* nthibr.c - tests whether an MS Windows system partition is hibernated */
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2013 Peter Lustig
|
||||||
|
* Copyright (C) 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/types.h>
|
||||||
|
#include <grub/mm.h>
|
||||||
|
#include <grub/file.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
|
#include <grub/dl.h>
|
||||||
|
#include <grub/command.h>
|
||||||
|
#include <grub/err.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_cmd_nthibr (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
int argc, char **args)
|
||||||
|
{
|
||||||
|
grub_uint8_t hibr_file_magic[4];
|
||||||
|
grub_file_t hibr_file = 0;
|
||||||
|
|
||||||
|
if (argc != 1)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
|
||||||
|
|
||||||
|
hibr_file = grub_file_open (args[0]);
|
||||||
|
if (!hibr_file)
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
/* Try to read magic number of 'hiberfil.sys' */
|
||||||
|
if (grub_file_read (hibr_file, hibr_file_magic,
|
||||||
|
sizeof (hibr_file_magic))
|
||||||
|
!= (grub_ssize_t) sizeof (hibr_file_magic))
|
||||||
|
{
|
||||||
|
if (!grub_errno)
|
||||||
|
grub_error (GRUB_ERR_TEST_FAILURE, "false");
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(grub_memcmp ("hibr", hibr_file_magic, sizeof (hibr_file_magic)) == 0
|
||||||
|
|| grub_memcmp ("HIBR", hibr_file_magic, sizeof (hibr_file_magic)) == 0))
|
||||||
|
grub_error (GRUB_ERR_TEST_FAILURE, "false");
|
||||||
|
|
||||||
|
exit:
|
||||||
|
grub_file_close (hibr_file);
|
||||||
|
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_command_t cmd;
|
||||||
|
|
||||||
|
GRUB_MOD_INIT (check_nt_hiberfil)
|
||||||
|
{
|
||||||
|
cmd = grub_register_command ("check_nt_hiberfil", grub_cmd_nthibr,
|
||||||
|
N_("FILE"),
|
||||||
|
N_("Test whether a hiberfil.sys is "
|
||||||
|
"in hibernated state."));
|
||||||
|
}
|
||||||
|
|
||||||
|
GRUB_MOD_FINI (check_nt_hiberfil)
|
||||||
|
{
|
||||||
|
grub_unregister_command (cmd);
|
||||||
|
}
|
||||||
@@ -29,15 +29,14 @@ grub_machine_acpi_get_rsdpv1 (void)
|
|||||||
grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
|
grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
|
||||||
ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
|
ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
|
||||||
ebda_len = * (grub_uint16_t *) ebda;
|
ebda_len = * (grub_uint16_t *) ebda;
|
||||||
if (! ebda_len) /* FIXME do we really need this check? */
|
if (! ebda_len)
|
||||||
goto scan_bios;
|
return 0;
|
||||||
for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
|
for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
|
||||||
if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
|
if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
|
||||||
&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
|
&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
|
||||||
&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision == 0)
|
&& ((struct grub_acpi_rsdp_v10 *) ptr)->revision == 0)
|
||||||
return (struct grub_acpi_rsdp_v10 *) ptr;
|
return (struct grub_acpi_rsdp_v10 *) ptr;
|
||||||
|
|
||||||
scan_bios:
|
|
||||||
grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
|
grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
|
||||||
for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
|
for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
|
||||||
ptr += 16)
|
ptr += 16)
|
||||||
@@ -57,8 +56,8 @@ grub_machine_acpi_get_rsdpv2 (void)
|
|||||||
grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
|
grub_dprintf ("acpi", "Looking for RSDP. Scanning EBDA\n");
|
||||||
ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
|
ebda = (grub_uint8_t *) ((* ((grub_uint16_t *) 0x40e)) << 4);
|
||||||
ebda_len = * (grub_uint16_t *) ebda;
|
ebda_len = * (grub_uint16_t *) ebda;
|
||||||
if (! ebda_len) /* FIXME do we really need this check? */
|
if (! ebda_len)
|
||||||
goto scan_bios;
|
return 0;
|
||||||
for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
|
for (ptr = ebda; ptr < ebda + 0x400; ptr += 16)
|
||||||
if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
|
if (grub_memcmp (ptr, GRUB_RSDP_SIGNATURE, GRUB_RSDP_SIGNATURE_SIZE) == 0
|
||||||
&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
|
&& grub_byte_checksum (ptr, sizeof (struct grub_acpi_rsdp_v10)) == 0
|
||||||
@@ -68,7 +67,6 @@ grub_machine_acpi_get_rsdpv2 (void)
|
|||||||
== 0)
|
== 0)
|
||||||
return (struct grub_acpi_rsdp_v20 *) ptr;
|
return (struct grub_acpi_rsdp_v20 *) ptr;
|
||||||
|
|
||||||
scan_bios:
|
|
||||||
grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
|
grub_dprintf ("acpi", "Looking for RSDP. Scanning BIOS\n");
|
||||||
for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
|
for (ptr = (grub_uint8_t *) 0xe0000; ptr < (grub_uint8_t *) 0x100000;
|
||||||
ptr += 16)
|
ptr += 16)
|
||||||
@@ -74,7 +74,7 @@ typedef struct drivemap_node
|
|||||||
grub_uint8_t redirto;
|
grub_uint8_t redirto;
|
||||||
} drivemap_node_t;
|
} drivemap_node_t;
|
||||||
|
|
||||||
typedef struct GRUB_PACKED int13map_node
|
typedef struct __attribute__ ((packed)) int13map_node
|
||||||
{
|
{
|
||||||
grub_uint8_t disknum;
|
grub_uint8_t disknum;
|
||||||
grub_uint8_t mapto;
|
grub_uint8_t mapto;
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_uint32_t tempo;
|
grub_uint32_t tempo;
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_AUDIO);
|
file = grub_file_open (args[0]);
|
||||||
|
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
@@ -107,14 +107,6 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!tempo)
|
|
||||||
{
|
|
||||||
grub_file_close (file);
|
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"),
|
|
||||||
args[0]);
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
tempo = grub_le_to_cpu32 (tempo);
|
tempo = grub_le_to_cpu32 (tempo);
|
||||||
grub_dprintf ("play","tempo = %d\n", tempo);
|
grub_dprintf ("play","tempo = %d\n", tempo);
|
||||||
|
|
||||||
@@ -139,13 +131,6 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
tempo = grub_strtoul (args[0], &end, 0);
|
tempo = grub_strtoul (args[0], &end, 0);
|
||||||
|
|
||||||
if (!tempo)
|
|
||||||
{
|
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"),
|
|
||||||
args[0]);
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*end)
|
if (*end)
|
||||||
/* Was not a number either, assume it was supposed to be a file name. */
|
/* Was not a number either, assume it was supposed to be a file name. */
|
||||||
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]);
|
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]);
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ find_key_code (char *key)
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
|
for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
|
||||||
{
|
{
|
||||||
if (keysym_table[i].unshifted_name
|
if (keysym_table[i].unshifted_name
|
||||||
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
||||||
@@ -311,7 +311,7 @@ find_ascii_code (char *key)
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
|
for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
|
||||||
{
|
{
|
||||||
if (keysym_table[i].unshifted_name
|
if (keysym_table[i].unshifted_name
|
||||||
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
||||||
@@ -352,13 +352,15 @@ grub_cmd_sendkey (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
|
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i = 0; i < ARRAY_SIZE(simple_flag_offsets); i++)
|
for (i = 0; i < sizeof (simple_flag_offsets)
|
||||||
|
/ sizeof (simple_flag_offsets[0]); i++)
|
||||||
grub_sendkey_set_simple_flag (simple_flag_offsets[i],
|
grub_sendkey_set_simple_flag (simple_flag_offsets[i],
|
||||||
grub_sendkey_parse_op(state[i]));
|
grub_sendkey_parse_op(state[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set noled. */
|
/* Set noled. */
|
||||||
noled = (state[ARRAY_SIZE(simple_flag_offsets)].set);
|
noled = (state[sizeof (simple_flag_offsets)
|
||||||
|
/ sizeof (simple_flag_offsets[0])].set);
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
/* rdmsr.c - Read CPU model-specific registers. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2019 Free Software Foundation, Inc.
|
|
||||||
* Based on gcc/gcc/config/i386/driver-i386.c
|
|
||||||
*
|
|
||||||
* 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/dl.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/env.h>
|
|
||||||
#include <grub/command.h>
|
|
||||||
#include <grub/extcmd.h>
|
|
||||||
#include <grub/i18n.h>
|
|
||||||
#include <grub/i386/cpuid.h>
|
|
||||||
#include <grub/i386/rdmsr.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE("GPLv3+");
|
|
||||||
|
|
||||||
static grub_extcmd_t cmd_read;
|
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
|
||||||
{
|
|
||||||
{0, 'v', 0, N_("Save read value into variable VARNAME."),
|
|
||||||
N_("VARNAME"), ARG_TYPE_STRING},
|
|
||||||
{0, 0, 0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_cmd_msr_read (grub_extcmd_context_t ctxt, int argc, char **argv)
|
|
||||||
{
|
|
||||||
grub_uint32_t manufacturer[3], max_cpuid, a, b, c, features, addr;
|
|
||||||
grub_uint64_t value;
|
|
||||||
char *ptr;
|
|
||||||
char buf[sizeof("1122334455667788")];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The CPUID instruction should be used to determine whether MSRs
|
|
||||||
* are supported. (CPUID.01H:EDX[5] = 1)
|
|
||||||
*/
|
|
||||||
if (! grub_cpu_is_cpuid_supported ())
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
grub_cpuid (0, max_cpuid, manufacturer[0], manufacturer[2], manufacturer[1]);
|
|
||||||
|
|
||||||
if (max_cpuid < 1)
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
grub_cpuid (1, a, b, c, features);
|
|
||||||
|
|
||||||
if (!(features & (1 << 5)))
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
if (argc != 1)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
|
|
||||||
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
ptr = argv[0];
|
|
||||||
addr = grub_strtoul (ptr, &ptr, 0);
|
|
||||||
|
|
||||||
if (grub_errno != GRUB_ERR_NONE)
|
|
||||||
return grub_errno;
|
|
||||||
if (*ptr != '\0')
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid argument"));
|
|
||||||
|
|
||||||
value = grub_msr_read (addr);
|
|
||||||
|
|
||||||
if (ctxt->state[0].set)
|
|
||||||
{
|
|
||||||
grub_snprintf (buf, sizeof(buf), "%llx", (unsigned long long) value);
|
|
||||||
grub_env_set (ctxt->state[0].arg, buf);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
grub_printf ("0x%llx\n", (unsigned long long) value);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_INIT(rdmsr)
|
|
||||||
{
|
|
||||||
cmd_read = grub_register_extcmd ("rdmsr", grub_cmd_msr_read, 0, N_("ADDR"),
|
|
||||||
N_("Read a CPU model specific register."),
|
|
||||||
options);
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI(rdmsr)
|
|
||||||
{
|
|
||||||
grub_unregister_extcmd (cmd_read);
|
|
||||||
}
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
/* wrmsr.c - Write CPU model-specific registers. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2019 Free Software Foundation, Inc.
|
|
||||||
* Based on gcc/gcc/config/i386/driver-i386.c
|
|
||||||
*
|
|
||||||
* 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/dl.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/env.h>
|
|
||||||
#include <grub/command.h>
|
|
||||||
#include <grub/extcmd.h>
|
|
||||||
#include <grub/i18n.h>
|
|
||||||
#include <grub/i386/cpuid.h>
|
|
||||||
#include <grub/i386/wrmsr.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE("GPLv3+");
|
|
||||||
|
|
||||||
static grub_command_t cmd_write;
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_cmd_msr_write (grub_command_t cmd __attribute__ ((unused)), int argc, char **argv)
|
|
||||||
{
|
|
||||||
grub_uint32_t manufacturer[3], max_cpuid, a, b, c, features, addr;
|
|
||||||
grub_uint64_t value;
|
|
||||||
char *ptr;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The CPUID instruction should be used to determine whether MSRs
|
|
||||||
* are supported. (CPUID.01H:EDX[5] = 1)
|
|
||||||
*/
|
|
||||||
if (!grub_cpu_is_cpuid_supported ())
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
grub_cpuid (0, max_cpuid, manufacturer[0], manufacturer[2], manufacturer[1]);
|
|
||||||
|
|
||||||
if (max_cpuid < 1)
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
grub_cpuid (1, a, b, c, features);
|
|
||||||
|
|
||||||
if (!(features & (1 << 5)))
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
if (argc != 2)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected"));
|
|
||||||
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
ptr = argv[0];
|
|
||||||
addr = grub_strtoul (ptr, &ptr, 0);
|
|
||||||
|
|
||||||
if (grub_errno != GRUB_ERR_NONE)
|
|
||||||
return grub_errno;
|
|
||||||
if (*ptr != '\0')
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid argument"));
|
|
||||||
|
|
||||||
ptr = argv[1];
|
|
||||||
value = grub_strtoull (ptr, &ptr, 0);
|
|
||||||
|
|
||||||
if (grub_errno != GRUB_ERR_NONE)
|
|
||||||
return grub_errno;
|
|
||||||
if (*ptr != '\0')
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid argument"));
|
|
||||||
|
|
||||||
grub_msr_write (addr, value);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_INIT(wrmsr)
|
|
||||||
{
|
|
||||||
cmd_write = grub_register_command ("wrmsr", grub_cmd_msr_write, N_("ADDR VALUE"),
|
|
||||||
N_("Write a value to a CPU model specific register."));
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI(wrmsr)
|
|
||||||
{
|
|
||||||
grub_unregister_command (cmd_write);
|
|
||||||
}
|
|
||||||
@@ -40,7 +40,7 @@ static struct grub_keyboard_layout layout_us = {
|
|||||||
/* 0x10 */ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
|
/* 0x10 */ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
|
||||||
/* 0x18 */ 'u', 'v', 'w', 'x', 'y', 'z', '1', '2',
|
/* 0x18 */ 'u', 'v', 'w', 'x', 'y', 'z', '1', '2',
|
||||||
/* 0x20 */ '3', '4', '5', '6', '7', '8', '9', '0',
|
/* 0x20 */ '3', '4', '5', '6', '7', '8', '9', '0',
|
||||||
/* 0x28 */ '\n', GRUB_TERM_ESC, GRUB_TERM_BACKSPACE, GRUB_TERM_TAB, ' ', '-', '=', '[',
|
/* 0x28 */ '\n', '\e', '\b', '\t', ' ', '-', '=', '[',
|
||||||
/* According to usage table 0x31 should be mapped to '/'
|
/* According to usage table 0x31 should be mapped to '/'
|
||||||
but testing with real keyboard shows that 0x32 is remapped to '/'.
|
but testing with real keyboard shows that 0x32 is remapped to '/'.
|
||||||
Map 0x31 to 0.
|
Map 0x31 to 0.
|
||||||
@@ -82,8 +82,8 @@ static struct grub_keyboard_layout layout_us = {
|
|||||||
/* 0x10 */ 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
|
/* 0x10 */ 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
|
||||||
/* 0x18 */ 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@',
|
/* 0x18 */ 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@',
|
||||||
/* 0x20 */ '#', '$', '%', '^', '&', '*', '(', ')',
|
/* 0x20 */ '#', '$', '%', '^', '&', '*', '(', ')',
|
||||||
/* 0x28 */ '\n' | GRUB_TERM_SHIFT, GRUB_TERM_ESC | GRUB_TERM_SHIFT,
|
/* 0x28 */ '\n' | GRUB_TERM_SHIFT, '\e' | GRUB_TERM_SHIFT,
|
||||||
/* 0x2a */ GRUB_TERM_BACKSPACE | GRUB_TERM_SHIFT, GRUB_TERM_TAB | GRUB_TERM_SHIFT,
|
/* 0x2a */ '\b' | GRUB_TERM_SHIFT, '\t' | GRUB_TERM_SHIFT,
|
||||||
/* 0x2c */ ' ' | GRUB_TERM_SHIFT, '_', '+', '{',
|
/* 0x2c */ ' ' | GRUB_TERM_SHIFT, '_', '+', '{',
|
||||||
/* According to usage table 0x31 should be mapped to '/'
|
/* According to usage table 0x31 should be mapped to '/'
|
||||||
but testing with real keyboard shows that 0x32 is remapped to '/'.
|
but testing with real keyboard shows that 0x32 is remapped to '/'.
|
||||||
@@ -173,10 +173,8 @@ grub_term_map_key (grub_keyboard_key_t code, int status)
|
|||||||
|
|
||||||
key = map_key_core (code, status, &alt_gr_consumed);
|
key = map_key_core (code, status, &alt_gr_consumed);
|
||||||
|
|
||||||
if (key == 0 || key == GRUB_TERM_SHIFT) {
|
if (key == 0 || key == GRUB_TERM_SHIFT)
|
||||||
grub_printf ("Unknown key 0x%x detected\n", code);
|
grub_printf ("Unknown key 0x%x detected\n", code);
|
||||||
return GRUB_TERM_NO_KEY;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (status & GRUB_TERM_STATUS_CAPS)
|
if (status & GRUB_TERM_STATUS_CAPS)
|
||||||
{
|
{
|
||||||
@@ -220,7 +218,7 @@ grub_cmd_keymap (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
else
|
else
|
||||||
filename = argv[0];
|
filename = argv[0];
|
||||||
|
|
||||||
file = grub_file_open (filename, GRUB_FILE_TYPE_KEYBOARD_LAYOUT);
|
file = grub_file_open (filename);
|
||||||
if (! file)
|
if (! file)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|||||||
@@ -55,22 +55,16 @@ legacy_file (const char *filename)
|
|||||||
if (!suffix)
|
if (!suffix)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
file = grub_file_open (filename, GRUB_FILE_TYPE_CONFIG);
|
file = grub_file_open (filename);
|
||||||
if (! file)
|
if (! file)
|
||||||
{
|
|
||||||
grub_free (suffix);
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
|
||||||
|
|
||||||
menu = grub_env_get_menu ();
|
menu = grub_env_get_menu ();
|
||||||
if (! menu)
|
if (! menu)
|
||||||
{
|
{
|
||||||
menu = grub_zalloc (sizeof (*menu));
|
menu = grub_zalloc (sizeof (*menu));
|
||||||
if (! menu)
|
if (! menu)
|
||||||
{
|
|
||||||
grub_free (suffix);
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
|
||||||
|
|
||||||
grub_env_set_menu (menu);
|
grub_env_set_menu (menu);
|
||||||
}
|
}
|
||||||
@@ -83,7 +77,6 @@ legacy_file (const char *filename)
|
|||||||
if (!buf && grub_errno)
|
if (!buf && grub_errno)
|
||||||
{
|
{
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
grub_free (suffix);
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,8 +173,6 @@ legacy_file (const char *filename)
|
|||||||
if (!args)
|
if (!args)
|
||||||
{
|
{
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
grub_free (suffix);
|
|
||||||
grub_free (entrysrc);
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
args[0] = entryname;
|
args[0] = entryname;
|
||||||
@@ -253,7 +244,6 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
struct grub_command *cmd;
|
struct grub_command *cmd;
|
||||||
char **cutargs;
|
char **cutargs;
|
||||||
int cutargc;
|
int cutargc;
|
||||||
grub_err_t err = GRUB_ERR_NONE;
|
|
||||||
|
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
@@ -315,8 +305,6 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
||||||
|
|
||||||
cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1));
|
cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1));
|
||||||
if (!cutargs)
|
|
||||||
return grub_errno;
|
|
||||||
cutargc = argc - 1;
|
cutargc = argc - 1;
|
||||||
grub_memcpy (cutargs + 1, args + 2, sizeof (cutargs[0]) * (argc - 2));
|
grub_memcpy (cutargs + 1, args + 2, sizeof (cutargs[0]) * (argc - 2));
|
||||||
cutargs[0] = args[0];
|
cutargs[0] = args[0];
|
||||||
@@ -326,17 +314,13 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
/* First try Linux. */
|
/* First try Linux. */
|
||||||
if (kernel_type == GUESS_IT || kernel_type == LINUX)
|
if (kernel_type == GUESS_IT || kernel_type == LINUX)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_MACHINE_PCBIOS
|
|
||||||
cmd = grub_command_find ("linux16");
|
cmd = grub_command_find ("linux16");
|
||||||
#else
|
|
||||||
cmd = grub_command_find ("linux");
|
|
||||||
#endif
|
|
||||||
if (cmd)
|
if (cmd)
|
||||||
{
|
{
|
||||||
if (!(cmd->func) (cmd, cutargc, cutargs))
|
if (!(cmd->func) (cmd, cutargc, cutargs))
|
||||||
{
|
{
|
||||||
kernel_type = LINUX;
|
kernel_type = LINUX;
|
||||||
goto out;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -351,7 +335,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, argc, args))
|
if (!(cmd->func) (cmd, argc, args))
|
||||||
{
|
{
|
||||||
kernel_type = MULTIBOOT;
|
kernel_type = MULTIBOOT;
|
||||||
goto out;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -388,8 +372,6 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (part && grub_strcmp (part->partmap->name, "msdos") == 0)
|
if (part && grub_strcmp (part->partmap->name, "msdos") == 0)
|
||||||
bsd_slice = part->number;
|
bsd_slice = part->number;
|
||||||
}
|
}
|
||||||
if (dev)
|
|
||||||
grub_device_close (dev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* k*BSD didn't really work well with grub-legacy. */
|
/* k*BSD didn't really work well with grub-legacy. */
|
||||||
@@ -416,7 +398,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, cutargc, cutargs))
|
if (!(cmd->func) (cmd, cutargc, cutargs))
|
||||||
{
|
{
|
||||||
kernel_type = KFREEBSD;
|
kernel_type = KFREEBSD;
|
||||||
goto out;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -425,8 +407,6 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
char **bsdargs;
|
char **bsdargs;
|
||||||
int bsdargc;
|
int bsdargc;
|
||||||
char bsddevname[sizeof ("wdXXXXXXXXXXXXY")];
|
char bsddevname[sizeof ("wdXXXXXXXXXXXXY")];
|
||||||
int found = 0;
|
|
||||||
|
|
||||||
if (bsd_device == -1)
|
if (bsd_device == -1)
|
||||||
{
|
{
|
||||||
bsdargs = cutargs;
|
bsdargs = cutargs;
|
||||||
@@ -437,11 +417,6 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
char rbuf[3] = "-r";
|
char rbuf[3] = "-r";
|
||||||
bsdargc = cutargc + 2;
|
bsdargc = cutargc + 2;
|
||||||
bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc);
|
bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc);
|
||||||
if (!bsdargs)
|
|
||||||
{
|
|
||||||
err = grub_errno;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
grub_memcpy (bsdargs, args, argc * sizeof (bsdargs[0]));
|
grub_memcpy (bsdargs, args, argc * sizeof (bsdargs[0]));
|
||||||
bsdargs[argc] = rbuf;
|
bsdargs[argc] = rbuf;
|
||||||
bsdargs[argc + 1] = bsddevname;
|
bsdargs[argc + 1] = bsddevname;
|
||||||
@@ -457,8 +432,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
||||||
{
|
{
|
||||||
kernel_type = KNETBSD;
|
kernel_type = KNETBSD;
|
||||||
found = 1;
|
return GRUB_ERR_NONE;
|
||||||
goto free_bsdargs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -471,28 +445,20 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
||||||
{
|
{
|
||||||
kernel_type = KOPENBSD;
|
kernel_type = KOPENBSD;
|
||||||
found = 1;
|
return GRUB_ERR_NONE;
|
||||||
goto free_bsdargs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
free_bsdargs:
|
|
||||||
if (bsdargs != cutargs)
|
if (bsdargs != cutargs)
|
||||||
grub_free (bsdargs);
|
grub_free (bsdargs);
|
||||||
if (found)
|
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (0);
|
while (0);
|
||||||
|
|
||||||
err = grub_error (GRUB_ERR_BAD_OS, "couldn't load file %s",
|
return grub_error (GRUB_ERR_BAD_OS, "couldn't load file %s",
|
||||||
args[0]);
|
args[0]);
|
||||||
out:
|
|
||||||
grub_free (cutargs);
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -503,21 +469,12 @@ grub_cmd_legacy_initrd (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
if (kernel_type == LINUX)
|
if (kernel_type == LINUX)
|
||||||
{
|
{
|
||||||
#ifdef GRUB_MACHINE_PCBIOS
|
|
||||||
cmd = grub_command_find ("initrd16");
|
cmd = grub_command_find ("initrd16");
|
||||||
#else
|
|
||||||
cmd = grub_command_find ("initrd");
|
|
||||||
#endif
|
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
||||||
#ifdef GRUB_MACHINE_PCBIOS
|
"initrd16");
|
||||||
"initrd16"
|
|
||||||
#else
|
|
||||||
"initrd"
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
|
|
||||||
return cmd->func (cmd, argc ? 1 : 0, args);
|
return cmd->func (cmd, argc, args);
|
||||||
}
|
}
|
||||||
if (kernel_type == MULTIBOOT)
|
if (kernel_type == MULTIBOOT)
|
||||||
{
|
{
|
||||||
@@ -553,17 +510,15 @@ grub_cmd_legacy_initrdnounzip (struct grub_command *mycmd __attribute__ ((unused
|
|||||||
char **newargs;
|
char **newargs;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
char nounzipbuf[10] = "--nounzip";
|
char nounzipbuf[10] = "--nounzip";
|
||||||
|
|
||||||
cmd = grub_command_find ("module");
|
|
||||||
if (!cmd)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
|
||||||
"module");
|
|
||||||
|
|
||||||
newargs = grub_malloc ((argc + 1) * sizeof (newargs[0]));
|
newargs = grub_malloc ((argc + 1) * sizeof (newargs[0]));
|
||||||
if (!newargs)
|
if (!newargs)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0]));
|
grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0]));
|
||||||
newargs[0] = nounzipbuf;
|
newargs[0] = nounzipbuf;
|
||||||
|
cmd = grub_command_find ("module");
|
||||||
|
if (!cmd)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
||||||
|
"module");
|
||||||
|
|
||||||
err = cmd->func (cmd, argc + 1, newargs);
|
err = cmd->func (cmd, argc + 1, newargs);
|
||||||
grub_free (newargs);
|
grub_free (newargs);
|
||||||
@@ -612,7 +567,7 @@ check_password_md5_real (const char *entered,
|
|||||||
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
||||||
digest = GRUB_MD_MD5->read (ctx);
|
digest = GRUB_MD_MD5->read (ctx);
|
||||||
GRUB_MD_MD5->final (ctx);
|
GRUB_MD_MD5->final (ctx);
|
||||||
grub_memcpy (alt_result, digest, MD5_HASHLEN);
|
memcpy (alt_result, digest, MD5_HASHLEN);
|
||||||
|
|
||||||
GRUB_MD_MD5->init (ctx);
|
GRUB_MD_MD5->init (ctx);
|
||||||
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
||||||
@@ -628,7 +583,7 @@ check_password_md5_real (const char *entered,
|
|||||||
|
|
||||||
for (i = 0; i < 1000; i++)
|
for (i = 0; i < 1000; i++)
|
||||||
{
|
{
|
||||||
grub_memcpy (alt_result, digest, 16);
|
memcpy (alt_result, digest, 16);
|
||||||
|
|
||||||
GRUB_MD_MD5->init (ctx);
|
GRUB_MD_MD5->init (ctx);
|
||||||
if ((i & 1) != 0)
|
if ((i & 1) != 0)
|
||||||
|
|||||||
Loaded 100 of 1136 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user