merge mainline into newenv
This commit is contained in:
commit
61c501a941
415 changed files with 17977 additions and 6997 deletions
|
@ -35,6 +35,7 @@ grub_fstest_init.c
|
||||||
grub_fstest_init.h
|
grub_fstest_init.h
|
||||||
grub-install
|
grub-install
|
||||||
grub-mk*
|
grub-mk*
|
||||||
|
grub-pbkdf2
|
||||||
grub-pe2elf
|
grub-pe2elf
|
||||||
grub-probe
|
grub-probe
|
||||||
grub_probe_init.c
|
grub_probe_init.c
|
||||||
|
|
50
Makefile.in
50
Makefile.in
|
@ -1,6 +1,6 @@
|
||||||
# -*- makefile -*-
|
# -*- makefile -*-
|
||||||
#
|
#
|
||||||
# Copyright (C) 1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc.
|
# Copyright (C) 1994,1995,1996,1997,1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This Makefile.in is free software; the author
|
# This Makefile.in is free software; the author
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -41,6 +41,9 @@ includedir = @includedir@
|
||||||
pkgdatadir = $(datadir)/`echo @PACKAGE_TARNAME@ | sed '$(transform)'`
|
pkgdatadir = $(datadir)/`echo @PACKAGE_TARNAME@ | sed '$(transform)'`
|
||||||
pkglibdir = $(libdir)/`echo @PACKAGE_TARNAME@/$(target_cpu)-$(platform) | sed '$(transform)'`
|
pkglibdir = $(libdir)/`echo @PACKAGE_TARNAME@/$(target_cpu)-$(platform) | sed '$(transform)'`
|
||||||
|
|
||||||
|
# Internationalization library.
|
||||||
|
LIBINTL = @LIBINTL@
|
||||||
|
|
||||||
XGETTEXT = @XGETTEXT@
|
XGETTEXT = @XGETTEXT@
|
||||||
MSGMERGE = @MSGMERGE@
|
MSGMERGE = @MSGMERGE@
|
||||||
MSGFMT = @MSGFMT@
|
MSGFMT = @MSGFMT@
|
||||||
|
@ -72,10 +75,12 @@ MKDIR_P = @MKDIR_P@
|
||||||
|
|
||||||
mkinstalldirs = $(srcdir)/mkinstalldirs
|
mkinstalldirs = $(srcdir)/mkinstalldirs
|
||||||
|
|
||||||
|
LIBS = @LIBS@ $(LIBINTL)
|
||||||
|
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
ASFLAGS = @ASFLAGS@
|
ASFLAGS = @ASFLAGS@
|
||||||
LDFLAGS = @LDFLAGS@
|
LDFLAGS = @LDFLAGS@ $(LIBS)
|
||||||
CPPFLAGS = @CPPFLAGS@ -I$(builddir) -I$(builddir)/include -I$(srcdir)/gnulib -I$(srcdir)/include -Wall -W \
|
CPPFLAGS = @CPPFLAGS@ -I$(builddir) -I$(builddir)/include -I$(srcdir)/gnulib -I$(srcdir)/include -Wall -W \
|
||||||
-DGRUB_LIBDIR=\"$(pkglibdir)\" -DLOCALEDIR=\"$(localedir)\"
|
-DGRUB_LIBDIR=\"$(pkglibdir)\" -DLOCALEDIR=\"$(localedir)\"
|
||||||
TARGET_CC = @TARGET_CC@
|
TARGET_CC = @TARGET_CC@
|
||||||
|
@ -162,6 +167,8 @@ ifeq ($(platform), emu)
|
||||||
include $(srcdir)/conf/any-emu.mk
|
include $(srcdir)/conf/any-emu.mk
|
||||||
else
|
else
|
||||||
include $(srcdir)/conf/$(target_cpu)-$(platform).mk
|
include $(srcdir)/conf/$(target_cpu)-$(platform).mk
|
||||||
|
# For tests.
|
||||||
|
include $(srcdir)/conf/tests.mk
|
||||||
# For external modules.
|
# For external modules.
|
||||||
-include $(wildcard $(GRUB_CONTRIB)/*/conf/common.mk)
|
-include $(wildcard $(GRUB_CONTRIB)/*/conf/common.mk)
|
||||||
endif
|
endif
|
||||||
|
@ -169,7 +176,7 @@ endif
|
||||||
### General targets.
|
### General targets.
|
||||||
|
|
||||||
CLEANFILES += $(pkglib_DATA) $(pkgdata_DATA) po/*.mo
|
CLEANFILES += $(pkglib_DATA) $(pkgdata_DATA) po/*.mo
|
||||||
pkglib_DATA += moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst
|
pkglib_DATA += moddep.lst command.lst fs.lst partmap.lst parttool.lst handler.lst video.lst crypto.lst terminal.lst
|
||||||
moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep.awk
|
moddep.lst: $(DEFSYMFILES) $(UNDSYMFILES) genmoddep.awk
|
||||||
cat $(DEFSYMFILES) /dev/null \
|
cat $(DEFSYMFILES) /dev/null \
|
||||||
| $(AWK) -f $(srcdir)/genmoddep.awk $(UNDSYMFILES) > $@ \
|
| $(AWK) -f $(srcdir)/genmoddep.awk $(UNDSYMFILES) > $@ \
|
||||||
|
@ -187,12 +194,18 @@ partmap.lst: $(PARTMAPFILES)
|
||||||
handler.lst: $(HANDLERFILES)
|
handler.lst: $(HANDLERFILES)
|
||||||
cat $^ /dev/null | sort > $@
|
cat $^ /dev/null | sort > $@
|
||||||
|
|
||||||
|
terminal.lst: $(TERMINALFILES)
|
||||||
|
cat $^ /dev/null | sort > $@
|
||||||
|
|
||||||
parttool.lst: $(PARTTOOLFILES)
|
parttool.lst: $(PARTTOOLFILES)
|
||||||
cat $^ /dev/null | sort | uniq > $@
|
cat $^ /dev/null | sort | uniq > $@
|
||||||
|
|
||||||
video.lst: $(VIDEOFILES)
|
video.lst: $(VIDEOFILES)
|
||||||
cat $^ /dev/null | sort | uniq > $@
|
cat $^ /dev/null | sort | uniq > $@
|
||||||
|
|
||||||
|
crypto.lst: lib/libgcrypt-grub/cipher/crypto.lst
|
||||||
|
cp $^ $@
|
||||||
|
|
||||||
ifneq (true, $(MAKEINFO))
|
ifneq (true, $(MAKEINFO))
|
||||||
info_INFOS += docs/grub.info
|
info_INFOS += docs/grub.info
|
||||||
endif
|
endif
|
||||||
|
@ -223,7 +236,7 @@ else
|
||||||
|
|
||||||
ifeq ($(enable_grub_mkfont),yes)
|
ifeq ($(enable_grub_mkfont),yes)
|
||||||
|
|
||||||
pkgdata_DATA += unicode.pf2 ascii.pf2
|
pkgdata_DATA += unicode.pf2 ascii.pf2 ascii.h
|
||||||
|
|
||||||
# Arrows and lines are needed to draw the menu, so we always include them
|
# Arrows and lines are needed to draw the menu, so we always include them
|
||||||
UNICODE_ARROWS=0x2190-0x2193
|
UNICODE_ARROWS=0x2190-0x2193
|
||||||
|
@ -234,6 +247,14 @@ unicode.pf2: $(FONT_SOURCE) grub-mkfont
|
||||||
|
|
||||||
ascii.pf2: $(FONT_SOURCE) grub-mkfont
|
ascii.pf2: $(FONT_SOURCE) grub-mkfont
|
||||||
$(builddir)/grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES)
|
$(builddir)/grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES)
|
||||||
|
|
||||||
|
ascii.bitmaps: $(FONT_SOURCE) grub-mkfont
|
||||||
|
$(builddir)/grub-mkfont --ascii-bitmaps -o $@ $(FONT_SOURCE)
|
||||||
|
|
||||||
|
ascii.h: ascii.bitmaps grub-bin2h
|
||||||
|
$(builddir)/grub-bin2h ascii_bitmaps < $< > $@
|
||||||
|
|
||||||
|
TARGET_CFLAGS += -DUSE_ASCII_FAILBACK=1
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -450,7 +471,26 @@ distcheck: dist
|
||||||
@echo "$(distdir).tar.gz is ready for distribution" | \
|
@echo "$(distdir).tar.gz is ready for distribution" | \
|
||||||
sed 'h;s/./=/g;p;x;p;x'
|
sed 'h;s/./=/g;p;x;p;x'
|
||||||
|
|
||||||
check:
|
check: all $(UNIT_TESTS) $(FUNCTIONAL_TESTS) $(SCRIPTED_TESTS)
|
||||||
|
@list="$(UNIT_TESTS)"; \
|
||||||
|
for file in $$list; do \
|
||||||
|
$(builddir)/$$file; \
|
||||||
|
done
|
||||||
|
@list="$(FUNCTIONAL_TESTS)"; \
|
||||||
|
for file in $$list; do \
|
||||||
|
mod=`basename $$file .mod`; \
|
||||||
|
echo "insmod functional_test; insmod $$mod; functional_test" \
|
||||||
|
| $(builddir)/grub-shell; \
|
||||||
|
done
|
||||||
|
@list="$(SCRIPTED_TESTS)"; \
|
||||||
|
for file in $$list; do \
|
||||||
|
echo "$$file:"; \
|
||||||
|
if $(builddir)/$$file; then \
|
||||||
|
echo "$$file: PASS"; \
|
||||||
|
else \
|
||||||
|
echo "$$file: FAIL"; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
|
||||||
.SUFFIX:
|
.SUFFIX:
|
||||||
.SUFFIX: .c .o .S .d
|
.SUFFIX: .c .o .S .d
|
||||||
|
|
|
@ -18,7 +18,7 @@ AC_DEFUN(grub_PROG_TARGET_CC,
|
||||||
[AC_MSG_CHECKING([whether target compiler is working])
|
[AC_MSG_CHECKING([whether target compiler is working])
|
||||||
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: nop");
|
asm (".globl start; start:");
|
||||||
int main (void);
|
int main (void);
|
||||||
]], [[]])],
|
]], [[]])],
|
||||||
[grub_cv_prog_target_cc=yes],
|
[grub_cv_prog_target_cc=yes],
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* -*-Asm-*- */
|
/* -*-Asm-*- */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 1999,2000,2001,2002,2005,2006,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 1999,2000,2001,2002,2005,2006,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* -*-Asm-*- */
|
/* -*-Asm-*- */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
* Copyright (C) 2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 1999,2000,2001,2002,2006,2007 Free Software Foundation, Inc.
|
* Copyright (C) 1999,2000,2001,2002,2006,2007,2009,2010 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -370,7 +370,7 @@ blocklist_default_start:
|
||||||
the start of the disk, sector 0 */
|
the start of the disk, sector 0 */
|
||||||
.long 2, 0
|
.long 2, 0
|
||||||
blocklist_default_len:
|
blocklist_default_len:
|
||||||
/* this is the number of sectors to read the command "install"
|
/* this is the number of sectors to read. grub-mkimage
|
||||||
will fill this up */
|
will fill this up */
|
||||||
.word 0
|
.word 0
|
||||||
blocklist_default_seg:
|
blocklist_default_seg:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* -*-Asm-*- */
|
/* -*-Asm-*- */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -185,7 +185,7 @@ real_code_2:
|
||||||
call LOCAL(move_memory)
|
call LOCAL(move_memory)
|
||||||
|
|
||||||
/* Check for multiboot signature. */
|
/* Check for multiboot signature. */
|
||||||
cmpl $MULTIBOOT_MAGIC, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_DATA_END)
|
cmpl $MULTIBOOT_HEADER_MAGIC, %ss:(DATA_ADDR + GRUB_KERNEL_MACHINE_DATA_END)
|
||||||
jz 1f
|
jz 1f
|
||||||
|
|
||||||
movl (ramdisk_image - start), %esi
|
movl (ramdisk_image - start), %esi
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2000,2005,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2000,2005,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
90
bus/bonito.c
Normal file
90
bus/bonito.c
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
/* bonito.c - PCI bonito interface. */
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2009 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/misc.h>
|
||||||
|
|
||||||
|
static grub_uint32_t base_win[GRUB_MACHINE_PCI_NUM_WIN];
|
||||||
|
static const grub_size_t sizes_win[GRUB_MACHINE_PCI_NUM_WIN] =
|
||||||
|
{GRUB_MACHINE_PCI_WIN1_SIZE, GRUB_MACHINE_PCI_WIN_SIZE,
|
||||||
|
GRUB_MACHINE_PCI_WIN_SIZE};
|
||||||
|
/* Usage counters. */
|
||||||
|
static int usage_win[GRUB_MACHINE_PCI_NUM_WIN];
|
||||||
|
static grub_addr_t addr_win[GRUB_MACHINE_PCI_NUM_WIN] =
|
||||||
|
{GRUB_MACHINE_PCI_WIN1_ADDR, GRUB_MACHINE_PCI_WIN2_ADDR,
|
||||||
|
GRUB_MACHINE_PCI_WIN3_ADDR};
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
write_bases (void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
grub_uint32_t reg = 0;
|
||||||
|
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
||||||
|
reg |= (((base_win[i] >> GRUB_MACHINE_PCI_WIN_SHIFT)
|
||||||
|
& GRUB_MACHINE_PCI_WIN_MASK)
|
||||||
|
>> (i * GRUB_MACHINE_PCI_WIN_MASK_SIZE));
|
||||||
|
GRUB_MACHINE_PCI_IO_CTRL_REG = reg;
|
||||||
|
}
|
||||||
|
|
||||||
|
volatile void *
|
||||||
|
grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
|
||||||
|
grub_addr_t base, grub_size_t size)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
grub_addr_t newbase;
|
||||||
|
|
||||||
|
/* First try already used registers. */
|
||||||
|
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
||||||
|
if (usage_win[i] && base_win[i] <= base
|
||||||
|
&& base_win[i] + sizes_win[i] > base + size)
|
||||||
|
{
|
||||||
|
usage_win[i]++;
|
||||||
|
return (void *)
|
||||||
|
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
|
||||||
|
}
|
||||||
|
/* Map new register. */
|
||||||
|
newbase = base & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK;
|
||||||
|
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
||||||
|
if (!usage_win[i] && newbase <= base
|
||||||
|
&& newbase + sizes_win[i] > base + size)
|
||||||
|
{
|
||||||
|
usage_win[i]++;
|
||||||
|
base_win[i] = newbase;
|
||||||
|
write_bases ();
|
||||||
|
return (void *)
|
||||||
|
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
|
||||||
|
}
|
||||||
|
grub_fatal ("Out of PCI windows.");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
|
||||||
|
volatile void *mem __attribute__ ((unused)),
|
||||||
|
grub_size_t size __attribute__ ((unused)))
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
||||||
|
if (usage_win[i] && addr_win[i]
|
||||||
|
== (((grub_addr_t) mem) & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK))
|
||||||
|
{
|
||||||
|
usage_win[i]--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
grub_fatal ("Tried to unmap not mapped region");
|
||||||
|
}
|
12
bus/pci.c
12
bus/pci.c
|
@ -1,7 +1,7 @@
|
||||||
/* pci.c - Generic PCI interfaces. */
|
/* pci.c - Generic PCI interfaces. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2007 Free Software Foundation, Inc.
|
* Copyright (C) 2007,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -24,7 +24,7 @@ grub_pci_address_t
|
||||||
grub_pci_make_address (grub_pci_device_t dev, int reg)
|
grub_pci_make_address (grub_pci_device_t dev, int reg)
|
||||||
{
|
{
|
||||||
return (1 << 31) | (dev.bus << 16) | (dev.device << 11)
|
return (1 << 31) | (dev.bus << 16) | (dev.device << 11)
|
||||||
| (dev.function << 8) | (reg << 2);
|
| (dev.function << 8) | reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -35,13 +35,13 @@ grub_pci_iterate (grub_pci_iteratefunc_t hook)
|
||||||
grub_pci_id_t id;
|
grub_pci_id_t id;
|
||||||
grub_uint32_t hdr;
|
grub_uint32_t hdr;
|
||||||
|
|
||||||
for (dev.bus = 0; dev.bus < 256; dev.bus++)
|
for (dev.bus = 0; dev.bus < GRUB_PCI_NUM_BUS; dev.bus++)
|
||||||
{
|
{
|
||||||
for (dev.device = 0; dev.device < 32; dev.device++)
|
for (dev.device = 0; dev.device < GRUB_PCI_NUM_DEVICES; dev.device++)
|
||||||
{
|
{
|
||||||
for (dev.function = 0; dev.function < 8; dev.function++)
|
for (dev.function = 0; dev.function < 8; dev.function++)
|
||||||
{
|
{
|
||||||
addr = grub_pci_make_address (dev, 0);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_PCI_ID);
|
||||||
id = grub_pci_read (addr);
|
id = grub_pci_read (addr);
|
||||||
|
|
||||||
/* Check if there is a device present. */
|
/* Check if there is a device present. */
|
||||||
|
@ -54,7 +54,7 @@ grub_pci_iterate (grub_pci_iteratefunc_t hook)
|
||||||
/* Probe only func = 0 if the device if not multifunction */
|
/* Probe only func = 0 if the device if not multifunction */
|
||||||
if (dev.function == 0)
|
if (dev.function == 0)
|
||||||
{
|
{
|
||||||
addr = grub_pci_make_address (dev, 3);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CACHELINE);
|
||||||
hdr = grub_pci_read (addr);
|
hdr = grub_pci_read (addr);
|
||||||
if (!(hdr & 0x800000))
|
if (!(hdr & 0x800000))
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -126,7 +126,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev,
|
||||||
grub_uint32_t revision;
|
grub_uint32_t revision;
|
||||||
grub_uint32_t frame_interval;
|
grub_uint32_t frame_interval;
|
||||||
|
|
||||||
addr = grub_pci_make_address (dev, 2);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
||||||
class_code = grub_pci_read (addr) >> 8;
|
class_code = grub_pci_read (addr) >> 8;
|
||||||
|
|
||||||
interf = class_code & 0xFF;
|
interf = class_code & 0xFF;
|
||||||
|
@ -138,7 +138,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Determine IO base address. */
|
/* Determine IO base address. */
|
||||||
addr = grub_pci_make_address (dev, 4);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0);
|
||||||
base = grub_pci_read (addr);
|
base = grub_pci_read (addr);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -150,7 +150,7 @@ grub_uhci_pci_iter (grub_pci_device_t dev,
|
||||||
struct grub_uhci *u;
|
struct grub_uhci *u;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
addr = grub_pci_make_address (dev, 2);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
||||||
class_code = grub_pci_read (addr) >> 8;
|
class_code = grub_pci_read (addr) >> 8;
|
||||||
|
|
||||||
interf = class_code & 0xFF;
|
interf = class_code & 0xFF;
|
||||||
|
@ -162,7 +162,7 @@ grub_uhci_pci_iter (grub_pci_device_t dev,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Determine IO base address. */
|
/* Determine IO base address. */
|
||||||
addr = grub_pci_make_address (dev, 8);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG4);
|
||||||
base = grub_pci_read (addr);
|
base = grub_pci_read (addr);
|
||||||
/* Stop if there is no IO space base address defined. */
|
/* Stop if there is no IO space base address defined. */
|
||||||
if (! (base & 1))
|
if (! (base & 1))
|
||||||
|
|
|
@ -50,7 +50,7 @@ grub_usb_hub_add_dev (grub_usb_controller_t controller, grub_usb_speed_t speed)
|
||||||
}
|
}
|
||||||
if (i == 128)
|
if (i == 128)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_IO, "Can't assign address to USB device");
|
grub_error (GRUB_ERR_IO, "can't assign address to USB device");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/machine/memory.h>
|
#include <grub/machine/memory.h>
|
||||||
#include <grub/memory.h>
|
#include <grub/memory.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_EFI
|
#ifdef GRUB_MACHINE_EFI
|
||||||
#include <grub/efi/efi.h>
|
#include <grub/efi/efi.h>
|
||||||
|
@ -36,23 +37,23 @@
|
||||||
|
|
||||||
static const struct grub_arg_option options[] = {
|
static const struct grub_arg_option options[] = {
|
||||||
{"exclude", 'x', 0,
|
{"exclude", 'x', 0,
|
||||||
"Don't load host tables specified by comma-separated list.",
|
N_("Don't load host tables specified by comma-separated list."),
|
||||||
0, ARG_TYPE_STRING},
|
0, ARG_TYPE_STRING},
|
||||||
{"load-only", 'n', 0,
|
{"load-only", 'n', 0,
|
||||||
"Load only tables specified by comma-separated list.", 0, ARG_TYPE_STRING},
|
N_("Load only tables specified by comma-separated list."), 0, ARG_TYPE_STRING},
|
||||||
{"v1", '1', 0, "Expose v1 tables.", 0, ARG_TYPE_NONE},
|
{"v1", '1', 0, N_("Expose v1 tables."), 0, ARG_TYPE_NONE},
|
||||||
{"v2", '2', 0, "Expose v2 and v3 tables.", 0, ARG_TYPE_NONE},
|
{"v2", '2', 0, N_("Expose v2 and v3 tables."), 0, ARG_TYPE_NONE},
|
||||||
{"oemid", 'o', 0, "Set OEMID of RSDP, XSDT and RSDT.", 0, ARG_TYPE_STRING},
|
{"oemid", 'o', 0, N_("Set OEMID of RSDP, XSDT and RSDT."), 0, ARG_TYPE_STRING},
|
||||||
{"oemtable", 't', 0,
|
{"oemtable", 't', 0,
|
||||||
"Set OEMTABLE ID of RSDP, XSDT and RSDT.", 0, ARG_TYPE_STRING},
|
N_("Set OEMTABLE ID of RSDP, XSDT and RSDT."), 0, ARG_TYPE_STRING},
|
||||||
{"oemtablerev", 'r', 0,
|
{"oemtablerev", 'r', 0,
|
||||||
"Set OEMTABLE revision of RSDP, XSDT and RSDT.", 0, ARG_TYPE_INT},
|
N_("Set OEMTABLE revision of RSDP, XSDT and RSDT."), 0, ARG_TYPE_INT},
|
||||||
{"oemtablecreator", 'c', 0,
|
{"oemtablecreator", 'c', 0,
|
||||||
"Set creator field of RSDP, XSDT and RSDT.", 0, ARG_TYPE_STRING},
|
N_("Set creator field of RSDP, XSDT and RSDT."), 0, ARG_TYPE_STRING},
|
||||||
{"oemtablecreatorrev", 'd', 0,
|
{"oemtablecreatorrev", 'd', 0,
|
||||||
"Set creator revision of RSDP, XSDT and RSDT.", 0, ARG_TYPE_INT},
|
N_("Set creator revision of RSDP, XSDT and RSDT."), 0, ARG_TYPE_INT},
|
||||||
{"no-ebda", 'e', 0, "Don't update EBDA. May fix failures or hangs on some."
|
{"no-ebda", 'e', 0, N_("Don't update EBDA. May fix failures or hangs on some."
|
||||||
" BIOSes but makes it ineffective with OS not receiving RSDP from GRUB.",
|
" BIOSes but makes it ineffective with OS not receiving RSDP from GRUB."),
|
||||||
0, ARG_TYPE_NONE},
|
0, ARG_TYPE_NONE},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
@ -228,7 +229,7 @@ grub_acpi_create_ebda (void)
|
||||||
sizeof (struct grub_acpi_rsdp_v10)) == 0)
|
sizeof (struct grub_acpi_rsdp_v10)) == 0)
|
||||||
{
|
{
|
||||||
grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10));
|
grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10));
|
||||||
grub_dprintf ("acpi", "Copying rsdpv2 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 *) ((((long) target - 1) | 0xf) + 1);
|
target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1);
|
||||||
|
@ -277,7 +278,7 @@ grub_acpi_create_ebda (void)
|
||||||
{
|
{
|
||||||
grub_mmap_unregister (mmapregion);
|
grub_mmap_unregister (mmapregion);
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||||
"Couldn't find suitable spot in EBDA");
|
"couldn't find suitable spot in EBDA");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove any other RSDT. */
|
/* Remove any other RSDT. */
|
||||||
|
@ -551,7 +552,7 @@ grub_cmd_acpi (struct grub_extcmd *cmd,
|
||||||
grub_free (exclude);
|
grub_free (exclude);
|
||||||
grub_free (load_only);
|
grub_free (load_only);
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||||
"Couldn't allocate table");
|
"couldn't allocate table");
|
||||||
}
|
}
|
||||||
grub_memcpy (table_dsdt, dsdt, dsdt->length);
|
grub_memcpy (table_dsdt, dsdt, dsdt->length);
|
||||||
}
|
}
|
||||||
|
@ -578,7 +579,7 @@ grub_cmd_acpi (struct grub_extcmd *cmd,
|
||||||
grub_free (exclude);
|
grub_free (exclude);
|
||||||
grub_free (load_only);
|
grub_free (load_only);
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||||
"Couldn't allocate table structure");
|
"couldn't allocate table structure");
|
||||||
}
|
}
|
||||||
table->size = curtable->length;
|
table->size = curtable->length;
|
||||||
table->addr = grub_malloc (table->size);
|
table->addr = grub_malloc (table->size);
|
||||||
|
@ -587,7 +588,7 @@ grub_cmd_acpi (struct grub_extcmd *cmd,
|
||||||
{
|
{
|
||||||
free_tables ();
|
free_tables ();
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||||
"Couldn't allocate table");
|
"couldn't allocate table");
|
||||||
}
|
}
|
||||||
table->next = acpi_tables;
|
table->next = acpi_tables;
|
||||||
acpi_tables = table;
|
acpi_tables = table;
|
||||||
|
@ -674,7 +675,7 @@ grub_cmd_acpi (struct grub_extcmd *cmd,
|
||||||
{
|
{
|
||||||
free_tables ();
|
free_tables ();
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||||
"Couldn't allocate table structure");
|
"couldn't allocate table structure");
|
||||||
}
|
}
|
||||||
|
|
||||||
table->size = size;
|
table->size = size;
|
||||||
|
@ -709,7 +710,7 @@ grub_cmd_acpi (struct grub_extcmd *cmd,
|
||||||
{
|
{
|
||||||
free_tables ();
|
free_tables ();
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||||
"Couldn't allocate space for ACPI tables");
|
"couldn't allocate space for ACPI tables");
|
||||||
}
|
}
|
||||||
|
|
||||||
setup_common_tables ();
|
setup_common_tables ();
|
||||||
|
@ -759,11 +760,11 @@ GRUB_MOD_INIT(acpi)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("acpi", grub_cmd_acpi,
|
cmd = grub_register_extcmd ("acpi", grub_cmd_acpi,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
"acpi [-1|-2] [--exclude=table1,table2|"
|
N_("[-1|-2] [--exclude=TABLE1,TABLE2|"
|
||||||
"--load-only=table1,table2] filename1 "
|
"--load-only=table1,table2] FILE1"
|
||||||
" [filename2] [...]",
|
" [FILE2] [...]"),
|
||||||
"Load host acpi tables and tables "
|
N_("Load host ACPI tables and tables "
|
||||||
"specified by arguments.",
|
"specified by arguments."),
|
||||||
options);
|
options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
#include <grub/partition.h>
|
#include <grub/partition.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_blocklist (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_blocklist (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
@ -87,7 +88,7 @@ grub_cmd_blocklist (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
|
||||||
if (! file->device->disk)
|
if (! file->device->disk)
|
||||||
return grub_error (GRUB_ERR_BAD_DEVICE,
|
return grub_error (GRUB_ERR_BAD_DEVICE,
|
||||||
"this command is available only for disk devices.");
|
"this command is available only for disk devices");
|
||||||
|
|
||||||
if (file->device->disk->partition)
|
if (file->device->disk->partition)
|
||||||
part_start = grub_partition_get_start (file->device->disk->partition);
|
part_start = grub_partition_get_start (file->device->disk->partition);
|
||||||
|
@ -110,7 +111,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(blocklist)
|
GRUB_MOD_INIT(blocklist)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("blocklist", grub_cmd_blocklist,
|
cmd = grub_register_command ("blocklist", grub_cmd_blocklist,
|
||||||
"blocklist FILE", "Print a block list.");
|
N_("FILE"), N_("Print a block list."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(blocklist)
|
GRUB_MOD_FINI(blocklist)
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <grub/loader.h>
|
#include <grub/loader.h>
|
||||||
#include <grub/kernel.h>
|
#include <grub/kernel.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t (*grub_loader_boot_func) (void);
|
static grub_err_t (*grub_loader_boot_func) (void);
|
||||||
static grub_err_t (*grub_loader_unload_func) (void);
|
static grub_err_t (*grub_loader_unload_func) (void);
|
||||||
|
@ -186,7 +187,7 @@ GRUB_MOD_INIT(boot)
|
||||||
{
|
{
|
||||||
cmd_boot =
|
cmd_boot =
|
||||||
grub_register_command ("boot", grub_cmd_boot,
|
grub_register_command ("boot", grub_cmd_boot,
|
||||||
0, "Boot an operating system.");
|
0, N_("Boot an operating system."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(boot)
|
GRUB_MOD_FINI(boot)
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/gzio.h>
|
#include <grub/gzio.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_cat (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_cat (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
@ -78,7 +79,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(cat)
|
GRUB_MOD_INIT(cat)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command_p1 ("cat", grub_cmd_cat,
|
cmd = grub_register_command_p1 ("cat", grub_cmd_cat,
|
||||||
"cat FILE", "Show the contents of a file.");
|
N_("FILE"), N_("Show the contents of a file."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(cat)
|
GRUB_MOD_FINI(cat)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* cmd.c - command to cmp an operating system */
|
/* cmd.c - command to cmp an operating system */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2003,2005,2006,2007 Free Software Foundation, Inc.
|
* Copyright (C) 2003,2005,2006,2007,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -23,6 +23,7 @@
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/gzio.h>
|
#include <grub/gzio.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
#define BUFFER_SIZE 512
|
#define BUFFER_SIZE 512
|
||||||
|
|
||||||
|
@ -109,7 +110,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(cmp)
|
GRUB_MOD_INIT(cmp)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("cmp", grub_cmd_cmp,
|
cmd = grub_register_command ("cmp", grub_cmd_cmp,
|
||||||
"cmp FILE1 FILE2", "Compare two files.");
|
N_("FILE1 FILE2"), N_("Compare two files."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(cmp)
|
GRUB_MOD_FINI(cmp)
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/normal.h>
|
#include <grub/normal.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_source (grub_command_t cmd, int argc, char **args)
|
grub_cmd_source (grub_command_t cmd, int argc, char **args)
|
||||||
|
@ -53,16 +54,16 @@ GRUB_MOD_INIT(configfile)
|
||||||
{
|
{
|
||||||
cmd_configfile =
|
cmd_configfile =
|
||||||
grub_register_command ("configfile", grub_cmd_source,
|
grub_register_command ("configfile", grub_cmd_source,
|
||||||
"configfile FILE", "Load another config file.");
|
N_("FILE"), N_("Load another config file."));
|
||||||
cmd_source =
|
cmd_source =
|
||||||
grub_register_command ("source", grub_cmd_source,
|
grub_register_command ("source", grub_cmd_source,
|
||||||
"source FILE",
|
N_("FILE"),
|
||||||
"Load another config file without changing context."
|
N_("Load another config file without changing context.")
|
||||||
);
|
);
|
||||||
cmd_dot =
|
cmd_dot =
|
||||||
grub_register_command (".", grub_cmd_source,
|
grub_register_command (".", grub_cmd_source,
|
||||||
". FILE",
|
N_("FILE"),
|
||||||
"Load another config file without changing context."
|
N_("Load another config file without changing context.")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* crc.c - command to calculate the crc32 checksum of a file */
|
/* crc.c - command to calculate the crc32 checksum of a file */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
* Copyright (C) 2008,2010 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -23,6 +23,7 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/lib/crc.h>
|
#include <grub/lib/crc.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_crc (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_crc (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
@ -45,10 +46,13 @@ grub_cmd_crc (grub_command_t cmd __attribute__ ((unused)),
|
||||||
while ((size = grub_file_read (file, buf, sizeof (buf))) > 0)
|
while ((size = grub_file_read (file, buf, sizeof (buf))) > 0)
|
||||||
crc = grub_getcrc32 (crc, buf, size);
|
crc = grub_getcrc32 (crc, buf, size);
|
||||||
|
|
||||||
grub_file_close (file);
|
if (grub_errno)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
grub_printf ("%08x\n", crc);
|
grub_printf ("%08x\n", crc);
|
||||||
|
|
||||||
|
fail:
|
||||||
|
grub_file_close (file);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,8 +61,8 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(crc)
|
GRUB_MOD_INIT(crc)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("crc", grub_cmd_crc,
|
cmd = grub_register_command ("crc", grub_cmd_crc,
|
||||||
"crc FILE",
|
N_("FILE"),
|
||||||
"Calculate the crc32 checksum of a file.");
|
N_("Calculate the crc32 checksum of a file."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(crc)
|
GRUB_MOD_FINI(crc)
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/datetime.h>
|
#include <grub/datetime.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
#define GRUB_DATETIME_SET_YEAR 1
|
#define GRUB_DATETIME_SET_YEAR 1
|
||||||
#define GRUB_DATETIME_SET_MONTH 2
|
#define GRUB_DATETIME_SET_MONTH 2
|
||||||
|
@ -135,8 +136,8 @@ GRUB_MOD_INIT(date)
|
||||||
{
|
{
|
||||||
cmd =
|
cmd =
|
||||||
grub_register_command ("date", grub_cmd_date,
|
grub_register_command ("date", grub_cmd_date,
|
||||||
"date [[year-]month-day] [hour:minute[:second]]",
|
N_("[[year-]month-day] [hour:minute[:second]]"),
|
||||||
"Command to display/set current datetime.");
|
N_("Command to display/set current datetime."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(date)
|
GRUB_MOD_FINI(date)
|
||||||
|
|
|
@ -20,11 +20,12 @@
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{0, 'n', 0, "Do not output the trailing newline.", 0, 0},
|
{0, 'n', 0, N_("Do not output the trailing newline."), 0, 0},
|
||||||
{0, 'e', 0, "Enable interpretation of backslash escapes.", 0, 0},
|
{0, 'e', 0, N_("Enable interpretation of backslash escapes."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -113,7 +114,7 @@ static grub_extcmd_t cmd;
|
||||||
GRUB_MOD_INIT(echo)
|
GRUB_MOD_INIT(echo)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("echo", grub_cmd_echo, GRUB_COMMAND_FLAG_BOTH,
|
cmd = grub_register_extcmd ("echo", grub_cmd_echo, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"echo [-e|-n] STRING", "Display a line of text.",
|
N_("[-e|-n] STRING"), N_("Display a line of text."),
|
||||||
options);
|
options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <grub/file.h>
|
#include <grub/file.h>
|
||||||
#include <grub/pci.h>
|
#include <grub/pci.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static struct grub_video_patch
|
static struct grub_video_patch
|
||||||
{
|
{
|
||||||
|
@ -42,7 +43,7 @@ scan_card (grub_pci_device_t dev, grub_pci_id_t pciid)
|
||||||
{
|
{
|
||||||
grub_pci_address_t addr;
|
grub_pci_address_t addr;
|
||||||
|
|
||||||
addr = grub_pci_make_address (dev, 2);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
||||||
if (grub_pci_read_byte (addr + 3) == 0x3)
|
if (grub_pci_read_byte (addr + 3) == 0x3)
|
||||||
{
|
{
|
||||||
struct grub_video_patch *p = video_patches;
|
struct grub_video_patch *p = video_patches;
|
||||||
|
@ -99,7 +100,7 @@ static grub_command_t cmd_fixvideo;
|
||||||
GRUB_MOD_INIT(fixvideo)
|
GRUB_MOD_INIT(fixvideo)
|
||||||
{
|
{
|
||||||
cmd_fixvideo = grub_register_command ("fix_video", grub_cmd_fixvideo,
|
cmd_fixvideo = grub_register_command ("fix_video", grub_cmd_fixvideo,
|
||||||
0, "Fix video problem.");
|
0, N_("Fix video problem."));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <grub/efi/efi.h>
|
#include <grub/efi/efi.h>
|
||||||
#include <grub/pci.h>
|
#include <grub/pci.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_efi_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
|
static grub_efi_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
|
||||||
static grub_efi_guid_t acpi2_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
|
static grub_efi_guid_t acpi2_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
|
||||||
|
@ -50,7 +51,8 @@ enable_rom_area (void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
addr = grub_pci_make_address (dev, 36);
|
/* FIXME: should be macroified. */
|
||||||
|
addr = grub_pci_make_address (dev, 144);
|
||||||
grub_pci_write_byte (addr++, 0x30);
|
grub_pci_write_byte (addr++, 0x30);
|
||||||
grub_pci_write_byte (addr++, 0x33);
|
grub_pci_write_byte (addr++, 0x33);
|
||||||
grub_pci_write_byte (addr++, 0x33);
|
grub_pci_write_byte (addr++, 0x33);
|
||||||
|
@ -76,7 +78,8 @@ lock_rom_area (void)
|
||||||
grub_pci_address_t addr;
|
grub_pci_address_t addr;
|
||||||
grub_pci_device_t dev = { .bus = 0, .device = 0, .function = 0};
|
grub_pci_device_t dev = { .bus = 0, .device = 0, .function = 0};
|
||||||
|
|
||||||
addr = grub_pci_make_address (dev, 36);
|
/* FIXME: should be macroified. */
|
||||||
|
addr = grub_pci_make_address (dev, 144);
|
||||||
grub_pci_write_byte (addr++, 0x10);
|
grub_pci_write_byte (addr++, 0x10);
|
||||||
grub_pci_write_byte (addr++, 0x11);
|
grub_pci_write_byte (addr++, 0x11);
|
||||||
grub_pci_write_byte (addr++, 0x11);
|
grub_pci_write_byte (addr++, 0x11);
|
||||||
|
@ -160,7 +163,7 @@ grub_cmd_loadbios (grub_command_t cmd __attribute__ ((unused)),
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
if (argc == 0)
|
if (argc == 0)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "No rom image specified");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no ROM image specified");
|
||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
{
|
{
|
||||||
|
@ -169,7 +172,7 @@ grub_cmd_loadbios (grub_command_t cmd __attribute__ ((unused)),
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
if (file->size != 4)
|
if (file->size != 4)
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid int10 dump size");
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid int10 dump size");
|
||||||
else
|
else
|
||||||
grub_file_read (file, (void *) 0x40, 4);
|
grub_file_read (file, (void *) 0x40, 4);
|
||||||
|
|
||||||
|
@ -184,7 +187,7 @@ grub_cmd_loadbios (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
|
||||||
size = file->size;
|
size = file->size;
|
||||||
if ((size < 0x10000) || (size > 0x40000))
|
if ((size < 0x10000) || (size > 0x40000))
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid bios dump size");
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid bios dump size");
|
||||||
else if (enable_rom_area ())
|
else if (enable_rom_area ())
|
||||||
{
|
{
|
||||||
grub_file_read (file, (void *) VBIOS_ADDR, size);
|
grub_file_read (file, (void *) VBIOS_ADDR, size);
|
||||||
|
@ -201,11 +204,11 @@ static grub_command_t cmd_fakebios, cmd_loadbios;
|
||||||
GRUB_MOD_INIT(loadbios)
|
GRUB_MOD_INIT(loadbios)
|
||||||
{
|
{
|
||||||
cmd_fakebios = grub_register_command ("fakebios", grub_cmd_fakebios,
|
cmd_fakebios = grub_register_command ("fakebios", grub_cmd_fakebios,
|
||||||
0, "Fake bios.");
|
0, N_("Fake BIOS."));
|
||||||
|
|
||||||
cmd_loadbios = grub_register_command ("loadbios", grub_cmd_loadbios,
|
cmd_loadbios = grub_register_command ("loadbios", grub_cmd_loadbios,
|
||||||
"loadbios BIOS_DUMP [INT10_DUMP]",
|
"BIOS_DUMP [INT10_DUMP]",
|
||||||
"Load bios dump.");
|
N_("Load BIOS dump."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(loadbios)
|
GRUB_MOD_FINI(loadbios)
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/fs.h>
|
#include <grub/fs.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
/* Convert a LBA address to a CHS address in the INT 13 format. */
|
/* Convert a LBA address to a CHS address in the INT 13 format. */
|
||||||
/* Taken from grub1. */
|
/* Taken from grub1. */
|
||||||
|
@ -240,13 +241,13 @@ GRUB_MOD_INIT(gptsync)
|
||||||
{
|
{
|
||||||
(void) mod; /* To stop warning. */
|
(void) mod; /* To stop warning. */
|
||||||
cmd = grub_register_command ("gptsync", grub_cmd_gptsync,
|
cmd = grub_register_command ("gptsync", grub_cmd_gptsync,
|
||||||
"gptsync DEVICE [PARTITION[+/-[TYPE]]] ...",
|
N_("DEVICE [PARTITION[+/-[TYPE]]] ..."),
|
||||||
"Fill hybrid MBR of GPT drive DEVICE. "
|
N_("Fill hybrid MBR of GPT drive DEVICE. "
|
||||||
"specified partitions will be a part "
|
"specified partitions will be a part "
|
||||||
"of hybrid mbr. Up to 3 partitions are "
|
"of hybrid mbr. Up to 3 partitions are "
|
||||||
"allowed. TYPE is an MBR type. "
|
"allowed. TYPE is an MBR type. "
|
||||||
"+ means that partition is active. "
|
"+ means that partition is active. "
|
||||||
"Only one partition can be active.");
|
"Only one partition can be active."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(gptsync)
|
GRUB_MOD_FINI(gptsync)
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_halt (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_halt (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
@ -35,8 +36,8 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(halt)
|
GRUB_MOD_INIT(halt)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("halt", grub_cmd_halt,
|
cmd = grub_register_command ("halt", grub_cmd_halt,
|
||||||
0, "Halts the computer. This command does not"
|
0, N_("Halts the computer. This command does"
|
||||||
" work on all firmware implementations.");
|
" not work on all firmware implementations."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(halt)
|
GRUB_MOD_FINI(halt)
|
||||||
|
|
|
@ -23,12 +23,12 @@
|
||||||
#include <grub/term.h>
|
#include <grub/term.h>
|
||||||
#include <grub/handler.h>
|
#include <grub/handler.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_handler (struct grub_command *cmd,
|
grub_cmd_handler (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char **args)
|
int argc, char **args)
|
||||||
{
|
{
|
||||||
char *class_name;
|
|
||||||
void *curr_item = 0;
|
void *curr_item = 0;
|
||||||
grub_handler_class_t head;
|
grub_handler_class_t head;
|
||||||
|
|
||||||
|
@ -43,23 +43,19 @@ grub_cmd_handler (struct grub_command *cmd,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
class_name = (grub_strcmp (cmd->name, "handler")) ? (char *) cmd->name : 0;
|
|
||||||
|
|
||||||
head = grub_handler_class_list;
|
head = grub_handler_class_list;
|
||||||
if ((argc == 0) && (class_name == 0))
|
if (argc == 0)
|
||||||
{
|
{
|
||||||
grub_list_iterate (GRUB_AS_LIST (head), (grub_list_hook_t) list_item);
|
grub_list_iterate (GRUB_AS_LIST (head), (grub_list_hook_t) list_item);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
char *class_name;
|
||||||
grub_handler_class_t class;
|
grub_handler_class_t class;
|
||||||
|
|
||||||
if (class_name == 0)
|
|
||||||
{
|
|
||||||
class_name = args[0];
|
class_name = args[0];
|
||||||
argc--;
|
argc--;
|
||||||
args++;
|
args++;
|
||||||
}
|
|
||||||
|
|
||||||
class = grub_named_list_find (GRUB_AS_NAMED_LIST (head), class_name);
|
class = grub_named_list_find (GRUB_AS_NAMED_LIST (head), class_name);
|
||||||
if (! class)
|
if (! class)
|
||||||
|
@ -89,27 +85,17 @@ grub_cmd_handler (struct grub_command *cmd,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_command_t cmd_handler, cmd_terminal_input, cmd_terminal_output;
|
static grub_command_t cmd_handler;
|
||||||
|
|
||||||
GRUB_MOD_INIT(handler)
|
GRUB_MOD_INIT(handler)
|
||||||
{
|
{
|
||||||
cmd_handler =
|
cmd_handler =
|
||||||
grub_register_command ("handler", grub_cmd_handler,
|
grub_register_command ("handler", grub_cmd_handler,
|
||||||
"handler [class [handler]]",
|
N_("[class [handler]]"),
|
||||||
"List or select a handler.");
|
N_("List or select a handler."));
|
||||||
cmd_terminal_input =
|
|
||||||
grub_register_command ("terminal_input", grub_cmd_handler,
|
|
||||||
"terminal_input [handler]",
|
|
||||||
"List or select an input terminal.");
|
|
||||||
cmd_terminal_output =
|
|
||||||
grub_register_command ("terminal_output", grub_cmd_handler,
|
|
||||||
"terminal_output [handler]",
|
|
||||||
"List or select an output terminal.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(handler)
|
GRUB_MOD_FINI(handler)
|
||||||
{
|
{
|
||||||
grub_unregister_command (cmd_handler);
|
grub_unregister_command (cmd_handler);
|
||||||
grub_unregister_command (cmd_terminal_input);
|
|
||||||
grub_unregister_command (cmd_terminal_output);
|
|
||||||
}
|
}
|
||||||
|
|
276
commands/hashsum.c
Normal file
276
commands/hashsum.c
Normal file
|
@ -0,0 +1,276 @@
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2009 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/extcmd.h>
|
||||||
|
#include <grub/file.h>
|
||||||
|
#include <grub/disk.h>
|
||||||
|
#include <grub/mm.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
|
#include <grub/crypto.h>
|
||||||
|
#include <grub/normal.h>
|
||||||
|
|
||||||
|
static const struct grub_arg_option options[] = {
|
||||||
|
{"hash", 'h', 0, "Specify hash to use.", "HASH", ARG_TYPE_STRING},
|
||||||
|
{"check", 'c', 0, "Check hash list file.", "FILE", ARG_TYPE_STRING},
|
||||||
|
{"prefix", 'p', 0, "Base directory for hash list.", "DIRECTORY",
|
||||||
|
ARG_TYPE_STRING},
|
||||||
|
{"keep-going", 'k', 0, "Don't stop after first error.", 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct { const char *name; const char *hashname; } aliases[] =
|
||||||
|
{
|
||||||
|
{"sha256sum", "sha256"},
|
||||||
|
{"sha512sum", "sha512"},
|
||||||
|
{"md5sum", "md5"},
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
hextoval (char c)
|
||||||
|
{
|
||||||
|
if (c >= '0' && c <= '9')
|
||||||
|
return c - '0';
|
||||||
|
if (c >= 'a' && c <= 'f')
|
||||||
|
return c - 'a' + 10;
|
||||||
|
if (c >= 'A' && c <= 'F')
|
||||||
|
return c - 'A' + 10;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
hash_file (grub_file_t file, const gcry_md_spec_t *hash, void *result)
|
||||||
|
{
|
||||||
|
grub_uint8_t context[hash->contextsize];
|
||||||
|
char *readbuf[4096];
|
||||||
|
|
||||||
|
grub_memset (context, 0, sizeof (context));
|
||||||
|
hash->init (context);
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
grub_ssize_t r;
|
||||||
|
r = grub_file_read (file, readbuf, sizeof (readbuf));
|
||||||
|
if (r < 0)
|
||||||
|
return grub_errno;
|
||||||
|
if (r == 0)
|
||||||
|
break;
|
||||||
|
hash->write (context, readbuf, r);
|
||||||
|
}
|
||||||
|
hash->final (context);
|
||||||
|
grub_memcpy (result, hash->read (context), hash->mdlen);
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
check_list (const gcry_md_spec_t *hash, const char *hashfilename,
|
||||||
|
const char *prefix, int keep)
|
||||||
|
{
|
||||||
|
grub_file_t hashlist, file;
|
||||||
|
char *buf = NULL;
|
||||||
|
grub_uint8_t expected[hash->mdlen];
|
||||||
|
grub_uint8_t actual[hash->mdlen];
|
||||||
|
grub_err_t err;
|
||||||
|
unsigned i;
|
||||||
|
unsigned unread = 0, mismatch = 0;
|
||||||
|
|
||||||
|
hashlist = grub_file_open (hashfilename);
|
||||||
|
if (!hashlist)
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
while (grub_free (buf), (buf = grub_file_getline (hashlist)))
|
||||||
|
{
|
||||||
|
const char *p = buf;
|
||||||
|
for (i = 0; i < hash->mdlen; i++)
|
||||||
|
{
|
||||||
|
int high, low;
|
||||||
|
high = hextoval (*p++);
|
||||||
|
low = hextoval (*p++);
|
||||||
|
if (high < 0 || low < 0)
|
||||||
|
return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list");
|
||||||
|
expected[i] = (high << 4) | low;
|
||||||
|
}
|
||||||
|
if (*p++ != ' ' || *p++ != ' ')
|
||||||
|
return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list");
|
||||||
|
if (prefix)
|
||||||
|
{
|
||||||
|
char *filename;
|
||||||
|
|
||||||
|
filename = grub_xasprintf ("%s/%s", prefix, p);
|
||||||
|
if (!filename)
|
||||||
|
return grub_errno;
|
||||||
|
file = grub_file_open (filename);
|
||||||
|
grub_free (filename);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
file = grub_file_open (p);
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
grub_file_close (hashlist);
|
||||||
|
grub_free (buf);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
err = hash_file (file, hash, actual);
|
||||||
|
grub_file_close (file);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_printf ("%s: READ ERROR\n", p);
|
||||||
|
if (!keep)
|
||||||
|
{
|
||||||
|
grub_file_close (hashlist);
|
||||||
|
grub_free (buf);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
grub_print_error ();
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
unread++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (grub_crypto_memcmp (expected, actual, hash->mdlen) != 0)
|
||||||
|
{
|
||||||
|
grub_printf ("%s: HASH MISMATCH\n", p);
|
||||||
|
if (!keep)
|
||||||
|
{
|
||||||
|
grub_file_close (hashlist);
|
||||||
|
grub_free (buf);
|
||||||
|
return grub_error (GRUB_ERR_TEST_FAILURE,
|
||||||
|
"hash of '%s' mismatches", p);
|
||||||
|
}
|
||||||
|
mismatch++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
grub_printf ("%s: OK\n", p);
|
||||||
|
}
|
||||||
|
if (mismatch || unread)
|
||||||
|
return grub_error (GRUB_ERR_TEST_FAILURE,
|
||||||
|
"%d files couldn't be read and hash "
|
||||||
|
"of %d files mismatches", unread, mismatch);
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_cmd_hashsum (struct grub_extcmd *cmd,
|
||||||
|
int argc, char **args)
|
||||||
|
{
|
||||||
|
struct grub_arg_list *state = cmd->state;
|
||||||
|
const char *hashname = NULL;
|
||||||
|
const char *prefix = NULL;
|
||||||
|
const gcry_md_spec_t *hash;
|
||||||
|
unsigned i;
|
||||||
|
int keep = state[3].set;
|
||||||
|
unsigned unread = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE (aliases); i++)
|
||||||
|
if (grub_strcmp (cmd->cmd->name, aliases[i].name) == 0)
|
||||||
|
hashname = aliases[i].hashname;
|
||||||
|
if (state[0].set)
|
||||||
|
hashname = state[0].arg;
|
||||||
|
|
||||||
|
if (!hashname)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no hash specified");
|
||||||
|
|
||||||
|
hash = grub_crypto_lookup_md_by_name (hashname);
|
||||||
|
if (!hash)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "unknown hash");
|
||||||
|
|
||||||
|
if (state[2].set)
|
||||||
|
prefix = state[2].arg;
|
||||||
|
|
||||||
|
if (state[1].set)
|
||||||
|
{
|
||||||
|
if (argc != 0)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
"--check is incompatible with file list");
|
||||||
|
return check_list (hash, state[1].arg, prefix, keep);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < (unsigned) argc; i++)
|
||||||
|
{
|
||||||
|
grub_uint8_t result[hash->mdlen];
|
||||||
|
grub_file_t file;
|
||||||
|
grub_err_t err;
|
||||||
|
unsigned j;
|
||||||
|
file = grub_file_open (args[i]);
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
if (!keep)
|
||||||
|
return grub_errno;
|
||||||
|
grub_print_error ();
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
unread++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
err = hash_file (file, hash, result);
|
||||||
|
grub_file_close (file);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
if (!keep)
|
||||||
|
return err;
|
||||||
|
grub_print_error ();
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
unread++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (j = 0; j < hash->mdlen; j++)
|
||||||
|
grub_printf ("%02x", result[j]);
|
||||||
|
grub_printf (" %s\n", args[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unread)
|
||||||
|
return grub_error (GRUB_ERR_TEST_FAILURE, "%d files couldn't be read.",
|
||||||
|
unread);
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_extcmd_t cmd, cmd_md5, cmd_sha256, cmd_sha512;
|
||||||
|
|
||||||
|
GRUB_MOD_INIT(hashsum)
|
||||||
|
{
|
||||||
|
cmd = grub_register_extcmd ("hashsum", grub_cmd_hashsum,
|
||||||
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
|
"hashsum -h HASH [-c FILE [-p PREFIX]] "
|
||||||
|
"[FILE1 [FILE2 ...]]",
|
||||||
|
"Compute or check hash checksum.",
|
||||||
|
options);
|
||||||
|
cmd_md5 = grub_register_extcmd ("md5sum", grub_cmd_hashsum,
|
||||||
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
|
"md5sum [-c FILE [-p PREFIX]] "
|
||||||
|
"[FILE1 [FILE2 ...]]",
|
||||||
|
"Compute or check hash checksum.",
|
||||||
|
options);
|
||||||
|
cmd_sha256 = grub_register_extcmd ("sha256sum", grub_cmd_hashsum,
|
||||||
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
|
"sha256sum [-c FILE [-p PREFIX]] "
|
||||||
|
"[FILE1 [FILE2 ...]]",
|
||||||
|
"Compute or check hash checksum.",
|
||||||
|
options);
|
||||||
|
cmd_sha512 = grub_register_extcmd ("sha512sum", grub_cmd_hashsum,
|
||||||
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
|
"sha512sum [-c FILE [-p PREFIX]] "
|
||||||
|
"[FILE1 [FILE2 ...]]",
|
||||||
|
"Compute or check hash checksum.",
|
||||||
|
options);
|
||||||
|
}
|
||||||
|
|
||||||
|
GRUB_MOD_FINI(hashsum)
|
||||||
|
{
|
||||||
|
grub_unregister_extcmd (cmd);
|
||||||
|
grub_unregister_extcmd (cmd_md5);
|
||||||
|
grub_unregister_extcmd (cmd_sha256);
|
||||||
|
grub_unregister_extcmd (cmd_sha512);
|
||||||
|
}
|
|
@ -24,29 +24,30 @@
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/lib/hexdump.h>
|
#include <grub/lib/hexdump.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] = {
|
static const struct grub_arg_option options[] = {
|
||||||
{"apm", 'B', 0, "Set Advanced Power Management\n"
|
{"apm", 'B', 0, N_("Set Advanced Power Management\n"
|
||||||
"(1=low, ..., 254=high, 255=off).",
|
"(1=low, ..., 254=high, 255=off)."),
|
||||||
0, ARG_TYPE_INT},
|
0, ARG_TYPE_INT},
|
||||||
{"power", 'C', 0, "Check power mode.", 0, ARG_TYPE_NONE},
|
{"power", 'C', 0, N_("Check power mode."), 0, ARG_TYPE_NONE},
|
||||||
{"security-freeze", 'F', 0, "Freeze ATA security settings until reset.",
|
{"security-freeze", 'F', 0, N_("Freeze ATA security settings until reset."),
|
||||||
0, ARG_TYPE_NONE},
|
0, ARG_TYPE_NONE},
|
||||||
{"health", 'H', 0, "Check SMART health status.", 0, ARG_TYPE_NONE},
|
{"health", 'H', 0, N_("Check SMART health status."), 0, ARG_TYPE_NONE},
|
||||||
{"aam", 'M', 0, "Set Automatic Acoustic Management\n"
|
{"aam", 'M', 0, N_("Set Automatic Acoustic Management\n"
|
||||||
"(0=off, 128=quiet, ..., 254=fast).",
|
"(0=off, 128=quiet, ..., 254=fast)."),
|
||||||
0, ARG_TYPE_INT},
|
0, ARG_TYPE_INT},
|
||||||
{"standby-timeout", 'S', 0, "Set standby timeout\n"
|
{"standby-timeout", 'S', 0, N_("Set standby timeout\n"
|
||||||
"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...).",
|
"(0=off, 1=5s, 2=10s, ..., 240=20m, 241=30m, ...)."),
|
||||||
0, ARG_TYPE_INT},
|
0, ARG_TYPE_INT},
|
||||||
{"standby", 'y', 0, "Set drive to standby mode.", 0, ARG_TYPE_NONE},
|
{"standby", 'y', 0, N_("Set drive to standby mode."), 0, ARG_TYPE_NONE},
|
||||||
{"sleep", 'Y', 0, "Set drive to sleep mode.", 0, ARG_TYPE_NONE},
|
{"sleep", 'Y', 0, N_("Set drive to sleep mode."), 0, ARG_TYPE_NONE},
|
||||||
{"identify", 'i', 0, "Print drive identity and settings.",
|
{"identify", 'i', 0, N_("Print drive identity and settings."),
|
||||||
0, ARG_TYPE_NONE},
|
0, ARG_TYPE_NONE},
|
||||||
{"dumpid", 'I', 0, "Dump contents of ATA IDENTIFY sector.",
|
{"dumpid", 'I', 0, N_("Dump contents of ATA IDENTIFY sector."),
|
||||||
0, ARG_TYPE_NONE},
|
0, ARG_TYPE_NONE},
|
||||||
{"smart", -1, 0, "Disable/enable SMART (0/1).", 0, ARG_TYPE_INT},
|
{"smart", -1, 0, N_("Disable/enable SMART (0/1)."), 0, ARG_TYPE_INT},
|
||||||
{"quiet", 'q', 0, "Do not print messages.", 0, ARG_TYPE_NONE},
|
{"quiet", 'q', 0, N_("Do not print messages."), 0, ARG_TYPE_NONE},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -410,8 +411,8 @@ GRUB_MOD_INIT(hdparm)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("hdparm", grub_cmd_hdparm,
|
cmd = grub_register_extcmd ("hdparm", grub_cmd_hdparm,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
"hdparm [OPTIONS] DISK",
|
N_("[OPTIONS] DISK"),
|
||||||
"Get/set ATA disk parameters.", options);
|
N_("Get/set ATA disk parameters."), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(hdparm)
|
GRUB_MOD_FINI(hdparm)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* help.c - command to show a help text. */
|
/* help.c - command to show a help text. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2005,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2005,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -21,6 +21,10 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/term.h>
|
#include <grub/term.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
#include <grub/mm.h>
|
||||||
|
#include <grub/normal.h>
|
||||||
|
#include <grub/charset.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_help (grub_extcmd_t ext __attribute__ ((unused)), int argc,
|
grub_cmd_help (grub_extcmd_t ext __attribute__ ((unused)), int argc,
|
||||||
|
@ -37,18 +41,49 @@ grub_cmd_help (grub_extcmd_t ext __attribute__ ((unused)), int argc,
|
||||||
if ((cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE) &&
|
if ((cmd->prio & GRUB_PRIO_LIST_FLAG_ACTIVE) &&
|
||||||
(cmd->flags & GRUB_COMMAND_FLAG_CMDLINE))
|
(cmd->flags & GRUB_COMMAND_FLAG_CMDLINE))
|
||||||
{
|
{
|
||||||
char description[GRUB_TERM_WIDTH / 2];
|
struct grub_term_output *term;
|
||||||
int desclen = grub_strlen (cmd->summary);
|
const char *summary_translated = _(cmd->summary);
|
||||||
|
char *command_help;
|
||||||
|
grub_uint32_t *unicode_command_help;
|
||||||
|
grub_uint32_t *unicode_last_position;
|
||||||
|
|
||||||
/* Make a string with a length of GRUB_TERM_WIDTH / 2 - 1 filled
|
command_help = grub_xasprintf ("%s %s", cmd->name, summary_translated);
|
||||||
with the description followed by spaces. */
|
if (!command_help)
|
||||||
grub_memset (description, ' ', GRUB_TERM_WIDTH / 2 - 1);
|
return 1;
|
||||||
description[GRUB_TERM_WIDTH / 2 - 1] = '\0';
|
|
||||||
grub_memcpy (description, cmd->summary,
|
|
||||||
(desclen < GRUB_TERM_WIDTH / 2 - 1
|
|
||||||
? desclen : GRUB_TERM_WIDTH / 2 - 1));
|
|
||||||
|
|
||||||
grub_printf ("%s%s", description, (cnt++) % 2 ? "\n" : " ");
|
grub_utf8_to_ucs4_alloc (command_help, &unicode_command_help,
|
||||||
|
&unicode_last_position);
|
||||||
|
|
||||||
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
|
{
|
||||||
|
unsigned stringwidth;
|
||||||
|
grub_uint32_t *unicode_last_screen_position;
|
||||||
|
|
||||||
|
unicode_last_screen_position = unicode_command_help;
|
||||||
|
|
||||||
|
stringwidth = 0;
|
||||||
|
|
||||||
|
while (unicode_last_screen_position < unicode_last_position &&
|
||||||
|
stringwidth < ((grub_term_width (term) / 2) - 2))
|
||||||
|
{
|
||||||
|
stringwidth
|
||||||
|
+= grub_term_getcharwidth (term,
|
||||||
|
*unicode_last_screen_position);
|
||||||
|
unicode_last_screen_position++;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_print_ucs4 (unicode_command_help,
|
||||||
|
unicode_last_screen_position, term);
|
||||||
|
if (!(cnt % 2))
|
||||||
|
grub_print_spaces (term, grub_term_width (term) / 2
|
||||||
|
- stringwidth);
|
||||||
|
}
|
||||||
|
if (cnt % 2)
|
||||||
|
grub_printf ("\n");
|
||||||
|
cnt++;
|
||||||
|
|
||||||
|
grub_free (command_help);
|
||||||
|
grub_free (unicode_command_help);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -65,15 +100,19 @@ grub_cmd_help (grub_extcmd_t ext __attribute__ ((unused)), int argc,
|
||||||
if (cmd->flags & GRUB_COMMAND_FLAG_EXTCMD)
|
if (cmd->flags & GRUB_COMMAND_FLAG_EXTCMD)
|
||||||
grub_arg_show_help ((grub_extcmd_t) cmd->data);
|
grub_arg_show_help ((grub_extcmd_t) cmd->data);
|
||||||
else
|
else
|
||||||
grub_printf ("Usage: %s\n%s\b", cmd->summary,
|
grub_printf ("%s %s %s\n%s\b", _("Usage:"), cmd->name, _(cmd->summary),
|
||||||
cmd->description);
|
_(cmd->description));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc == 0)
|
if (argc == 0)
|
||||||
|
{
|
||||||
grub_command_iterate (print_command_info);
|
grub_command_iterate (print_command_info);
|
||||||
|
if (!(cnt % 2))
|
||||||
|
grub_printf ("\n");
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -94,8 +133,8 @@ GRUB_MOD_INIT(help)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("help", grub_cmd_help,
|
cmd = grub_register_extcmd ("help", grub_cmd_help,
|
||||||
GRUB_COMMAND_FLAG_CMDLINE,
|
GRUB_COMMAND_FLAG_CMDLINE,
|
||||||
"help [PATTERN ...]",
|
N_("[PATTERN ...]"),
|
||||||
"Show a help message.", 0);
|
N_("Show a help message."), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(help)
|
GRUB_MOD_FINI(help)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* hexdump.c - command to dump the contents of a file or memory */
|
/* hexdump.c - command to dump the contents of a file or memory */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -24,11 +24,12 @@
|
||||||
#include <grub/gzio.h>
|
#include <grub/gzio.h>
|
||||||
#include <grub/lib/hexdump.h>
|
#include <grub/lib/hexdump.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] = {
|
static const struct grub_arg_option options[] = {
|
||||||
{"skip", 's', 0, "Skip offset bytes from the beginning of file.", 0,
|
{"skip", 's', 0, N_("Skip offset bytes from the beginning of file."), 0,
|
||||||
ARG_TYPE_INT},
|
ARG_TYPE_INT},
|
||||||
{"length", 'n', 0, "Read only LENGTH bytes.", 0, ARG_TYPE_INT},
|
{"length", 'n', 0, N_("Read only LENGTH bytes."), 0, ARG_TYPE_INT},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -121,8 +122,8 @@ GRUB_MOD_INIT (hexdump)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("hexdump", grub_cmd_hexdump,
|
cmd = grub_register_extcmd ("hexdump", grub_cmd_hexdump,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
"hexdump [OPTIONS] FILE_OR_DEVICE",
|
N_("[OPTIONS] FILE_OR_DEVICE"),
|
||||||
"Dump the contents of a file or memory.",
|
N_("Dump the contents of a file or memory."),
|
||||||
options);
|
options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
#include <grub/i386/cpuid.h>
|
#include <grub/i386/cpuid.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
#define cpuid(num,a,b,c,d) \
|
#define cpuid(num,a,b,c,d) \
|
||||||
asm volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" \
|
asm volatile ("xchgl %%ebx, %1; cpuid; xchgl %%ebx, %1" \
|
||||||
|
@ -33,7 +34,7 @@
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"long-mode", 'l', 0, "Check for long mode flag (default).", 0, 0},
|
{"long-mode", 'l', 0, N_("Check for long mode flag (default)."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -88,7 +89,7 @@ done:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
cmd = grub_register_extcmd ("cpuid", grub_cmd_cpuid, GRUB_COMMAND_FLAG_BOTH,
|
cmd = grub_register_extcmd ("cpuid", grub_cmd_cpuid, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"cpuid [-l]", "Check for CPU features.", options);
|
"[-l]", N_("Check for CPU features."), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(cpuid)
|
GRUB_MOD_FINI(cpuid)
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/machine/memory.h>
|
#include <grub/machine/memory.h>
|
||||||
#include <grub/machine/biosnum.h>
|
#include <grub/machine/biosnum.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
|
|
||||||
/* Real mode IVT slot (seg:off far pointer) for interrupt 0x13. */
|
/* Real mode IVT slot (seg:off far pointer) for interrupt 0x13. */
|
||||||
|
@ -33,9 +34,9 @@ static grub_uint32_t *const int13slot = UINT_TO_PTR (4 * 0x13);
|
||||||
|
|
||||||
/* Remember to update enum opt_idxs accordingly. */
|
/* Remember to update enum opt_idxs accordingly. */
|
||||||
static const struct grub_arg_option options[] = {
|
static const struct grub_arg_option options[] = {
|
||||||
{"list", 'l', 0, "Show the current mappings.", 0, 0},
|
{"list", 'l', 0, N_("Show the current mappings."), 0, 0},
|
||||||
{"reset", 'r', 0, "Reset all mappings to the default values.", 0, 0},
|
{"reset", 'r', 0, N_("Reset all mappings to the default values."), 0, 0},
|
||||||
{"swap", 's', 0, "Perform both direct and reverse mappings.", 0, 0},
|
{"swap", 's', 0, N_("Perform both direct and reverse mappings."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -308,7 +309,7 @@ install_int13_handler (int noret __attribute__ ((unused)))
|
||||||
GRUB_MACHINE_MEMORY_RESERVED,
|
GRUB_MACHINE_MEMORY_RESERVED,
|
||||||
GRUB_MMAP_MALLOC_LOW);
|
GRUB_MMAP_MALLOC_LOW);
|
||||||
if (! handler_base)
|
if (! handler_base)
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY, "Could not reserve "
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't reserve "
|
||||||
"memory for the int13h handler");
|
"memory for the int13h handler");
|
||||||
|
|
||||||
/* Copy int13h handler bundle to reserved area. */
|
/* Copy int13h handler bundle to reserved area. */
|
||||||
|
@ -403,8 +404,8 @@ GRUB_MOD_INIT (drivemap)
|
||||||
cmd = grub_register_extcmd ("drivemap", grub_cmd_drivemap,
|
cmd = grub_register_extcmd ("drivemap", grub_cmd_drivemap,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
"drivemap"
|
"drivemap"
|
||||||
" -l | -r | [-s] grubdev osdisk",
|
N_("-l | -r | [-s] grubdev osdisk."),
|
||||||
"Manage the BIOS drive mappings.",
|
N_("Manage the BIOS drive mappings."),
|
||||||
options);
|
options);
|
||||||
drivemap_hook =
|
drivemap_hook =
|
||||||
grub_loader_register_preboot_hook (&install_int13_handler,
|
grub_loader_register_preboot_hook (&install_int13_handler,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* halt.c - command to halt the computer. */
|
/* halt.c - command to halt the computer. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2005,2007 Free Software Foundation, Inc.
|
* Copyright (C) 2005,2007,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -20,10 +20,11 @@
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"no-apm", 'n', 0, "Do not use APM to halt the computer.", 0, 0},
|
{"no-apm", 'n', 0, N_("Do not use APM to halt the computer."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -46,8 +47,8 @@ static grub_extcmd_t cmd;
|
||||||
GRUB_MOD_INIT(halt)
|
GRUB_MOD_INIT(halt)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("halt", grub_cmd_halt, GRUB_COMMAND_FLAG_BOTH,
|
cmd = grub_register_extcmd ("halt", grub_cmd_halt, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"halt [-n]",
|
"[-n]",
|
||||||
"Halt the system, if possible using APM.",
|
N_("Halt the system, if possible using APM."),
|
||||||
options);
|
options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* play.c - command to play a tune */
|
/* play.c - command to play a tune */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2005,2007 Free Software Foundation, Inc.
|
* Copyright (C) 2005,2007,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -27,6 +27,7 @@
|
||||||
#include <grub/machine/time.h>
|
#include <grub/machine/time.h>
|
||||||
#include <grub/cpu/io.h>
|
#include <grub/cpu/io.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
#define BASE_TEMPO 120
|
#define BASE_TEMPO 120
|
||||||
|
|
||||||
|
@ -207,7 +208,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(play)
|
GRUB_MOD_INIT(play)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("play", grub_cmd_play,
|
cmd = grub_register_command ("play", grub_cmd_play,
|
||||||
"play FILE", "Play a tune.");
|
N_("FILE"), N_("Play a tune."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(play)
|
GRUB_MOD_FINI(play)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* pxe.c - command to control the pxe driver */
|
/* pxe.c - command to control the pxe driver */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
* Copyright (C) 2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -21,79 +21,32 @@
|
||||||
#include <grub/err.h>
|
#include <grub/err.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/machine/pxe.h>
|
#include <grub/machine/pxe.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
static const struct grub_arg_option options[] =
|
|
||||||
{
|
|
||||||
{"info", 'i', 0, "Show PXE information.", 0, 0},
|
|
||||||
{"bsize", 'b', 0, "Set PXE block size.", 0, ARG_TYPE_INT},
|
|
||||||
{"unload", 'u', 0, "Unload PXE stack.", 0, 0},
|
|
||||||
{0, 0, 0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
print_ip (grub_uint32_t ip)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
grub_printf ("%d.", ip & 0xFF);
|
|
||||||
ip >>= 8;
|
|
||||||
}
|
|
||||||
grub_printf ("%d", ip);
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_pxe (grub_extcmd_t cmd, int argc __attribute__ ((unused)),
|
grub_cmd_pxe_unload (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
int argc __attribute__ ((unused)),
|
||||||
char **args __attribute__ ((unused)))
|
char **args __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
struct grub_arg_list *state = cmd->state;
|
|
||||||
|
|
||||||
if (! grub_pxe_pxenv)
|
if (! grub_pxe_pxenv)
|
||||||
return grub_error (GRUB_ERR_FILE_NOT_FOUND, "no pxe environment");
|
return grub_error (GRUB_ERR_FILE_NOT_FOUND, "no pxe environment");
|
||||||
|
|
||||||
if (state[1].set)
|
|
||||||
{
|
|
||||||
int size;
|
|
||||||
|
|
||||||
size = grub_strtoul (state[1].arg, 0, 0);
|
|
||||||
if (size < GRUB_PXE_MIN_BLKSIZE)
|
|
||||||
size = GRUB_PXE_MIN_BLKSIZE;
|
|
||||||
else if (size > GRUB_PXE_MAX_BLKSIZE)
|
|
||||||
size = GRUB_PXE_MAX_BLKSIZE;
|
|
||||||
|
|
||||||
grub_pxe_blksize = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (state[0].set)
|
|
||||||
{
|
|
||||||
grub_printf ("blksize : %d\n", grub_pxe_blksize);
|
|
||||||
grub_printf ("client ip : ");
|
|
||||||
print_ip (grub_pxe_your_ip);
|
|
||||||
grub_printf ("\nserver ip : ");
|
|
||||||
print_ip (grub_pxe_server_ip);
|
|
||||||
grub_printf ("\ngateway ip : ");
|
|
||||||
print_ip (grub_pxe_gateway_ip);
|
|
||||||
grub_printf ("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (state[2].set)
|
|
||||||
grub_pxe_unload ();
|
grub_pxe_unload ();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_extcmd_t cmd;
|
static grub_command_t cmd;
|
||||||
|
|
||||||
GRUB_MOD_INIT(pxecmd)
|
GRUB_MOD_INIT(pxecmd)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("pxe", grub_cmd_pxe, GRUB_COMMAND_FLAG_BOTH,
|
cmd = grub_register_command ("pxe_unload", grub_cmd_pxe_unload,
|
||||||
"pxe [-i|-b|-u]",
|
0,
|
||||||
"Command to control the PXE device.", options);
|
N_("Unload PXE environment."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(pxecmd)
|
GRUB_MOD_FINI(pxecmd)
|
||||||
{
|
{
|
||||||
grub_unregister_extcmd (cmd);
|
grub_unregister_command (cmd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* vbeinfo.c - command to list compatible VBE video modes. */
|
/* vbeinfo.c - command to list compatible VBE video modes. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2005,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2005,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -24,6 +24,7 @@
|
||||||
#include <grub/machine/vbe.h>
|
#include <grub/machine/vbe.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
real2pm (grub_vbe_farptr_t ptr)
|
real2pm (grub_vbe_farptr_t ptr)
|
||||||
|
@ -175,7 +176,7 @@ GRUB_MOD_INIT(vbeinfo)
|
||||||
{
|
{
|
||||||
cmd =
|
cmd =
|
||||||
grub_register_command ("vbeinfo", grub_cmd_vbeinfo, 0,
|
grub_register_command ("vbeinfo", grub_cmd_vbeinfo, 0,
|
||||||
"List compatible VESA BIOS extension video modes.");
|
N_("List compatible VESA BIOS extension video modes."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(vbeinfo)
|
GRUB_MOD_FINI(vbeinfo)
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <grub/machine/init.h>
|
#include <grub/machine/init.h>
|
||||||
#include <grub/machine/vbe.h>
|
#include <grub/machine/vbe.h>
|
||||||
#include <grub/err.h>
|
#include <grub/err.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_vbetest (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_vbetest (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
@ -168,7 +169,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(vbetest)
|
GRUB_MOD_INIT(vbetest)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("vbetest", grub_cmd_vbetest,
|
cmd = grub_register_command ("vbetest", grub_cmd_vbetest,
|
||||||
0, "Test VESA BIOS Extension 2.0+ support.");
|
0, N_("Test VESA BIOS Extension 2.0+ support."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(vbetest)
|
GRUB_MOD_FINI(vbetest)
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <grub/term.h>
|
#include <grub/term.h>
|
||||||
#include <grub/ieee1275/ieee1275.h>
|
#include <grub/ieee1275/ieee1275.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_suspend (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_suspend (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
@ -39,7 +40,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(ieee1275_suspend)
|
GRUB_MOD_INIT(ieee1275_suspend)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("suspend", grub_cmd_suspend,
|
cmd = grub_register_command ("suspend", grub_cmd_suspend,
|
||||||
0, "Return to Open Firmware prompt.");
|
0, N_("Return to Open Firmware prompt."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(ieee1275_suspend)
|
GRUB_MOD_FINI(ieee1275_suspend)
|
||||||
|
|
|
@ -21,12 +21,13 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
#include <grub/term.h>
|
#include <grub/term.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"shift", 's', 0, "Check Shift key.", 0, 0},
|
{"shift", 's', 0, N_("Check Shift key."), 0, 0},
|
||||||
{"ctrl", 'c', 0, "Check Control key.", 0, 0},
|
{"ctrl", 'c', 0, N_("Check Control key."), 0, 0},
|
||||||
{"alt", 'a', 0, "Check Alt key.", 0, 0},
|
{"alt", 'a', 0, N_("Check Alt key."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -48,13 +49,24 @@ grub_cmd_keystatus (grub_extcmd_t cmd,
|
||||||
if (state[2].set)
|
if (state[2].set)
|
||||||
expect_mods |= GRUB_TERM_STATUS_ALT;
|
expect_mods |= GRUB_TERM_STATUS_ALT;
|
||||||
|
|
||||||
|
grub_dprintf ("keystatus", "expect_mods: %d\n", expect_mods);
|
||||||
|
|
||||||
/* Without arguments, just check whether getkeystatus is supported at
|
/* Without arguments, just check whether getkeystatus is supported at
|
||||||
all. */
|
all. */
|
||||||
if (!grub_cur_term_input->getkeystatus)
|
if (expect_mods == 0)
|
||||||
|
{
|
||||||
|
grub_term_input_t term;
|
||||||
|
int nterms = 0;
|
||||||
|
|
||||||
|
FOR_ACTIVE_TERM_INPUTS (term)
|
||||||
|
if (!term->getkeystatus)
|
||||||
|
return grub_error (GRUB_ERR_TEST_FAILURE, "false");
|
||||||
|
else
|
||||||
|
nterms++;
|
||||||
|
if (!nterms)
|
||||||
return grub_error (GRUB_ERR_TEST_FAILURE, "false");
|
return grub_error (GRUB_ERR_TEST_FAILURE, "false");
|
||||||
grub_dprintf ("keystatus", "expect_mods: %d\n", expect_mods);
|
|
||||||
if (!expect_mods)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
mods = grub_getkeystatus ();
|
mods = grub_getkeystatus ();
|
||||||
grub_dprintf ("keystatus", "mods: %d\n", mods);
|
grub_dprintf ("keystatus", "mods: %d\n", mods);
|
||||||
|
@ -70,8 +82,8 @@ GRUB_MOD_INIT(keystatus)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("keystatus", grub_cmd_keystatus,
|
cmd = grub_register_extcmd ("keystatus", grub_cmd_keystatus,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
"keystatus [--shift] [--ctrl] [--alt]",
|
N_("[--shift] [--ctrl] [--alt]"),
|
||||||
"Check key modifier status.",
|
N_("Check key modifier status."),
|
||||||
options);
|
options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* loadenv.c - command to load/save environment variable. */
|
/* loadenv.c - command to load/save environment variable. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2008,2009 Free Software Foundation, Inc.
|
* Copyright (C) 2008,2009,2010 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -26,10 +26,11 @@
|
||||||
#include <grub/partition.h>
|
#include <grub/partition.h>
|
||||||
#include <grub/lib/envblk.h>
|
#include <grub/lib/envblk.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"file", 'f', 0, "Specify filename.", 0, ARG_TYPE_PATHNAME},
|
{"file", 'f', 0, N_("Specify filename."), 0, ARG_TYPE_PATHNAME},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -195,7 +196,7 @@ free_blocklists (struct blocklist *p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static grub_err_t
|
||||||
check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
||||||
grub_file_t file)
|
grub_file_t file)
|
||||||
{
|
{
|
||||||
|
@ -218,8 +219,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
||||||
{
|
{
|
||||||
/* This might be actually valid, but it is unbelievable that
|
/* This might be actually valid, but it is unbelievable that
|
||||||
any filesystem makes such a silly allocation. */
|
any filesystem makes such a silly allocation. */
|
||||||
grub_error (GRUB_ERR_BAD_FS, "malformed file");
|
return grub_error (GRUB_ERR_BAD_FS, "malformed file");
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,8 +229,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
||||||
if (total_length != grub_file_size (file))
|
if (total_length != grub_file_size (file))
|
||||||
{
|
{
|
||||||
/* Maybe sparse, unallocated sectors. No way in GRUB. */
|
/* Maybe sparse, unallocated sectors. No way in GRUB. */
|
||||||
grub_error (GRUB_ERR_BAD_FILE_TYPE, "sparse file not allowed");
|
return grub_error (GRUB_ERR_BAD_FILE_TYPE, "sparse file not allowed");
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* One more sanity check. Re-read all sectors by blocklists, and compare
|
/* One more sanity check. Re-read all sectors by blocklists, and compare
|
||||||
|
@ -248,16 +247,13 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
||||||
|
|
||||||
if (grub_disk_read (disk, p->sector - part_start,
|
if (grub_disk_read (disk, p->sector - part_start,
|
||||||
p->offset, p->length, blockbuf))
|
p->offset, p->length, blockbuf))
|
||||||
return 0;
|
return grub_errno;
|
||||||
|
|
||||||
if (grub_memcmp (buf + index, blockbuf, p->length) != 0)
|
if (grub_memcmp (buf + index, blockbuf, p->length) != 0)
|
||||||
{
|
return grub_error (GRUB_ERR_FILE_READ_ERROR, "invalid blocklist");
|
||||||
grub_error (GRUB_ERR_FILE_READ_ERROR, "invalid blocklist");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -328,7 +324,7 @@ grub_cmd_save_env (grub_extcmd_t cmd, int argc, char **args)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! argc)
|
if (! argc)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "No variable is specified");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no variable is specified");
|
||||||
|
|
||||||
file = open_envblk_file ((state[0].set) ? state[0].arg : 0);
|
file = open_envblk_file ((state[0].set) ? state[0].arg : 0);
|
||||||
if (! file)
|
if (! file)
|
||||||
|
@ -346,7 +342,7 @@ grub_cmd_save_env (grub_extcmd_t cmd, int argc, char **args)
|
||||||
if (! envblk)
|
if (! envblk)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (! check_blocklists (envblk, head, file))
|
if (check_blocklists (envblk, head, file))
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
while (argc)
|
while (argc)
|
||||||
|
@ -384,20 +380,20 @@ GRUB_MOD_INIT(loadenv)
|
||||||
cmd_load =
|
cmd_load =
|
||||||
grub_register_extcmd ("load_env", grub_cmd_load_env,
|
grub_register_extcmd ("load_env", grub_cmd_load_env,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
"load_env [-f FILE]",
|
N_("[-f FILE]"),
|
||||||
"Load variables from environment block file.",
|
N_("Load variables from environment block file."),
|
||||||
options);
|
options);
|
||||||
cmd_list =
|
cmd_list =
|
||||||
grub_register_extcmd ("list_env", grub_cmd_list_env,
|
grub_register_extcmd ("list_env", grub_cmd_list_env,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
"list_env [-f FILE]",
|
N_("[-f FILE]"),
|
||||||
"List variables from environment block file.",
|
N_("List variables from environment block file."),
|
||||||
options);
|
options);
|
||||||
cmd_save =
|
cmd_save =
|
||||||
grub_register_extcmd ("save_env", grub_cmd_save_env,
|
grub_register_extcmd ("save_env", grub_cmd_save_env,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
"save_env [-f FILE] variable_name [...]",
|
N_("[-f FILE] variable_name [...]"),
|
||||||
"Save variables to environment block file.",
|
N_("Save variables to environment block file."),
|
||||||
options);
|
options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* ls.c - command to list files and devices */
|
/* ls.c - command to list files and devices */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2003,2005,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2003,2005,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -30,12 +30,13 @@
|
||||||
#include <grub/normal.h>
|
#include <grub/normal.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
#include <grub/datetime.h>
|
#include <grub/datetime.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"long", 'l', 0, "Show a long list with more detailed information.", 0, 0},
|
{"long", 'l', 0, N_("Show a long list with more detailed information."), 0, 0},
|
||||||
{"human-readable", 'h', 0, "Print sizes in a human readable format.", 0, 0},
|
{"human-readable", 'h', 0, N_("Print sizes in a human readable format."), 0, 0},
|
||||||
{"all", 'a', 0, "List all files.", 0, 0},
|
{"all", 'a', 0, N_("List all files."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -86,7 +87,7 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human)
|
||||||
int print_files_long (const char *filename,
|
int print_files_long (const char *filename,
|
||||||
const struct grub_dirhook_info *info)
|
const struct grub_dirhook_info *info)
|
||||||
{
|
{
|
||||||
char pathname[grub_strlen (dirname) + grub_strlen (filename) + 1];
|
char *pathname;
|
||||||
|
|
||||||
if ((! all) && (filename[0] == '.'))
|
if ((! all) && (filename[0] == '.'))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -96,9 +97,12 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human)
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
|
|
||||||
if (dirname[grub_strlen (dirname) - 1] == '/')
|
if (dirname[grub_strlen (dirname) - 1] == '/')
|
||||||
grub_sprintf (pathname, "%s%s", dirname, filename);
|
pathname = grub_xasprintf ("%s%s", dirname, filename);
|
||||||
else
|
else
|
||||||
grub_sprintf (pathname, "%s/%s", dirname, filename);
|
pathname = grub_xasprintf ("%s/%s", dirname, filename);
|
||||||
|
|
||||||
|
if (!pathname)
|
||||||
|
return 1;
|
||||||
|
|
||||||
/* XXX: For ext2fs symlinks are detected as files while they
|
/* XXX: For ext2fs symlinks are detected as files while they
|
||||||
should be reported as directories. */
|
should be reported as directories. */
|
||||||
|
@ -130,7 +134,8 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human)
|
||||||
grub_uint32_t whole, fraction;
|
grub_uint32_t whole, fraction;
|
||||||
|
|
||||||
whole = grub_divmod64 (fsize, 100, &fraction);
|
whole = grub_divmod64 (fsize, 100, &fraction);
|
||||||
grub_sprintf (buf, "%u.%02u%c", whole, fraction,
|
grub_snprintf (buf, sizeof (buf),
|
||||||
|
"%u.%02u%c", whole, fraction,
|
||||||
grub_human_sizes[units]);
|
grub_human_sizes[units]);
|
||||||
grub_printf ("%-12s", buf);
|
grub_printf ("%-12s", buf);
|
||||||
}
|
}
|
||||||
|
@ -260,8 +265,8 @@ static grub_extcmd_t cmd;
|
||||||
GRUB_MOD_INIT(ls)
|
GRUB_MOD_INIT(ls)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("ls", grub_cmd_ls, GRUB_COMMAND_FLAG_BOTH,
|
cmd = grub_register_extcmd ("ls", grub_cmd_ls, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"ls [-l|-h|-a] [FILE]",
|
N_("[-l|-h|-a] [FILE]"),
|
||||||
"List devices and files.", options);
|
N_("List devices and files."), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(ls)
|
GRUB_MOD_FINI(ls)
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_lsmmap (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_lsmmap (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
@ -43,7 +44,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(lsmmap)
|
GRUB_MOD_INIT(lsmmap)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("lsmmap", grub_cmd_lsmmap,
|
cmd = grub_register_command ("lsmmap", grub_cmd_lsmmap,
|
||||||
0, "List memory map provided by firmware.");
|
0, N_("List memory map provided by firmware."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(lsmmap)
|
GRUB_MOD_FINI(lsmmap)
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
struct grub_pci_classname
|
struct grub_pci_classname
|
||||||
{
|
{
|
||||||
|
@ -134,7 +135,7 @@ grub_lspci_iter (grub_pci_device_t dev, grub_pci_id_t pciid)
|
||||||
grub_printf ("%02x:%02x.%x %04x:%04x", grub_pci_get_bus (dev),
|
grub_printf ("%02x:%02x.%x %04x:%04x", grub_pci_get_bus (dev),
|
||||||
grub_pci_get_device (dev), grub_pci_get_function (dev),
|
grub_pci_get_device (dev), grub_pci_get_function (dev),
|
||||||
pciid & 0xFFFF, pciid >> 16);
|
pciid & 0xFFFF, pciid >> 16);
|
||||||
addr = grub_pci_make_address (dev, 2);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
||||||
class = grub_pci_read (addr);
|
class = grub_pci_read (addr);
|
||||||
|
|
||||||
/* Lookup the class name, if there isn't a specific one,
|
/* Lookup the class name, if there isn't a specific one,
|
||||||
|
@ -155,14 +156,14 @@ grub_lspci_iter (grub_pci_device_t dev, grub_pci_id_t pciid)
|
||||||
|
|
||||||
if (iospace)
|
if (iospace)
|
||||||
{
|
{
|
||||||
reg = 4;
|
reg = GRUB_PCI_REG_ADDRESSES;
|
||||||
while (reg < 10)
|
while (reg < GRUB_PCI_REG_CIS_POINTER)
|
||||||
{
|
{
|
||||||
grub_uint64_t space;
|
grub_uint64_t space;
|
||||||
addr = grub_pci_make_address (dev, reg);
|
addr = grub_pci_make_address (dev, reg);
|
||||||
space = grub_pci_read (addr);
|
space = grub_pci_read (addr);
|
||||||
|
|
||||||
reg++;
|
reg += sizeof (grub_uint32_t);
|
||||||
|
|
||||||
if (space == 0)
|
if (space == 0)
|
||||||
continue;
|
continue;
|
||||||
|
@ -170,7 +171,9 @@ grub_lspci_iter (grub_pci_device_t dev, grub_pci_id_t pciid)
|
||||||
switch (space & GRUB_PCI_ADDR_SPACE_MASK)
|
switch (space & GRUB_PCI_ADDR_SPACE_MASK)
|
||||||
{
|
{
|
||||||
case GRUB_PCI_ADDR_SPACE_IO:
|
case GRUB_PCI_ADDR_SPACE_IO:
|
||||||
grub_printf ("\tIO space %d at 0x%llx\n", (reg - 1) - 4,
|
grub_printf ("\tIO space %d at 0x%llx\n",
|
||||||
|
(unsigned) ((reg - GRUB_PCI_REG_ADDRESSES)
|
||||||
|
/ sizeof (grub_uint32_t)) - 1,
|
||||||
(unsigned long long)
|
(unsigned long long)
|
||||||
(space & GRUB_PCI_ADDR_IO_MASK));
|
(space & GRUB_PCI_ADDR_IO_MASK));
|
||||||
break;
|
break;
|
||||||
|
@ -180,9 +183,11 @@ grub_lspci_iter (grub_pci_device_t dev, grub_pci_id_t pciid)
|
||||||
{
|
{
|
||||||
addr = grub_pci_make_address (dev, reg);
|
addr = grub_pci_make_address (dev, reg);
|
||||||
space |= ((grub_uint64_t) grub_pci_read (addr)) << 32;
|
space |= ((grub_uint64_t) grub_pci_read (addr)) << 32;
|
||||||
reg++;
|
reg += sizeof (grub_uint32_t);
|
||||||
grub_printf ("\t64-bit memory space %d at 0x%016llx [%s]\n",
|
grub_printf ("\t64-bit memory space %d at 0x%016llx [%s]\n",
|
||||||
(reg - 2) - 4, (unsigned long long)
|
(unsigned) ((reg - GRUB_PCI_REG_ADDRESSES)
|
||||||
|
/ sizeof (grub_uint32_t)) - 2,
|
||||||
|
(unsigned long long)
|
||||||
(space & GRUB_PCI_ADDR_MEM_MASK),
|
(space & GRUB_PCI_ADDR_MEM_MASK),
|
||||||
space & GRUB_PCI_ADDR_MEM_PREFETCH
|
space & GRUB_PCI_ADDR_MEM_PREFETCH
|
||||||
? "prefetchable" : "non-prefetchable");
|
? "prefetchable" : "non-prefetchable");
|
||||||
|
@ -190,7 +195,9 @@ grub_lspci_iter (grub_pci_device_t dev, grub_pci_id_t pciid)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
grub_printf ("\t32-bit memory space %d at 0x%016llx [%s]\n",
|
grub_printf ("\t32-bit memory space %d at 0x%016llx [%s]\n",
|
||||||
(reg - 1) - 4, (unsigned long long)
|
(unsigned) ((reg - GRUB_PCI_REG_ADDRESSES)
|
||||||
|
/ sizeof (grub_uint32_t)) - 1,
|
||||||
|
(unsigned long long)
|
||||||
(space & GRUB_PCI_ADDR_MEM_MASK),
|
(space & GRUB_PCI_ADDR_MEM_MASK),
|
||||||
space & GRUB_PCI_ADDR_MEM_PREFETCH
|
space & GRUB_PCI_ADDR_MEM_PREFETCH
|
||||||
? "prefetchable" : "non-prefetchable");
|
? "prefetchable" : "non-prefetchable");
|
||||||
|
@ -218,7 +225,7 @@ static grub_extcmd_t cmd;
|
||||||
GRUB_MOD_INIT(lspci)
|
GRUB_MOD_INIT(lspci)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("lspci", grub_cmd_lspci, GRUB_COMMAND_FLAG_BOTH,
|
cmd = grub_register_extcmd ("lspci", grub_cmd_lspci, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"lspci [-i]", "List PCI devices.", options);
|
"[-i]", N_("List PCI devices."), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(lspci)
|
GRUB_MOD_FINI(lspci)
|
||||||
|
|
109
commands/memrw.c
109
commands/memrw.c
|
@ -19,28 +19,53 @@
|
||||||
|
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/command.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/env.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_command_t cmd_read_byte, cmd_read_word, cmd_read_dword;
|
static grub_extcmd_t cmd_read_byte, cmd_read_word, cmd_read_dword;
|
||||||
static grub_command_t cmd_write_byte, cmd_write_word, cmd_write_dword;
|
static grub_command_t cmd_write_byte, cmd_write_word, cmd_write_dword;
|
||||||
|
|
||||||
|
static const struct grub_arg_option options[] =
|
||||||
|
{
|
||||||
|
{0, 'v', 0, N_("Save read value into variable VARNAME."),
|
||||||
|
"VARNAME", ARG_TYPE_STRING},
|
||||||
|
{0, 0, 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_read (grub_command_t cmd, int argc, char **argv)
|
grub_cmd_read (grub_extcmd_t cmd, int argc, char **argv)
|
||||||
{
|
{
|
||||||
grub_target_addr_t addr;
|
grub_target_addr_t addr;
|
||||||
grub_uint32_t value;
|
grub_uint32_t value = 0;
|
||||||
|
char buf[sizeof ("XXXXXXXX")];
|
||||||
|
|
||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid number of arguments");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid number of arguments");
|
||||||
|
|
||||||
addr = grub_strtoul (argv[0], 0, 0);
|
addr = grub_strtoul (argv[0], 0, 0);
|
||||||
if (cmd->name[5] == 'd')
|
switch (cmd->cmd->name[sizeof ("read_") - 1])
|
||||||
value = *((grub_uint32_t *) addr);
|
{
|
||||||
else if (cmd->name[5] == 'w')
|
case 'd':
|
||||||
value = *((grub_uint16_t *) addr);
|
value = *((volatile grub_uint32_t *) addr);
|
||||||
else
|
break;
|
||||||
value = *((grub_uint8_t *) addr);
|
|
||||||
|
|
||||||
|
case 'w':
|
||||||
|
value = *((volatile grub_uint16_t *) addr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'b':
|
||||||
|
value = *((volatile grub_uint8_t *) addr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmd->state[0].set)
|
||||||
|
{
|
||||||
|
grub_snprintf (buf, sizeof (buf), "%x", value);
|
||||||
|
grub_env_set (cmd->state[0].arg, buf);
|
||||||
|
}
|
||||||
|
else
|
||||||
grub_printf ("0x%x\n", value);
|
grub_printf ("0x%x\n", value);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -51,18 +76,42 @@ grub_cmd_write (grub_command_t cmd, int argc, char **argv)
|
||||||
{
|
{
|
||||||
grub_target_addr_t addr;
|
grub_target_addr_t addr;
|
||||||
grub_uint32_t value;
|
grub_uint32_t value;
|
||||||
|
grub_uint32_t mask = 0xffffffff;
|
||||||
|
|
||||||
if (argc != 2)
|
if (argc != 2 && argc != 3)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Invalid number of arguments");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid number of arguments");
|
||||||
|
|
||||||
addr = grub_strtoul (argv[0], 0, 0);
|
addr = grub_strtoul (argv[0], 0, 0);
|
||||||
value = grub_strtoul (argv[1], 0, 0);
|
value = grub_strtoul (argv[1], 0, 0);
|
||||||
if (cmd->name[6] == 'd')
|
if (argc == 3)
|
||||||
*((grub_uint32_t *) addr) = value;
|
mask = grub_strtoul (argv[2], 0, 0);
|
||||||
else if (cmd->name[6] == 'w')
|
value &= mask;
|
||||||
*((grub_uint16_t *) addr) = (grub_uint16_t) value;
|
switch (cmd->name[sizeof ("write_") - 1])
|
||||||
|
{
|
||||||
|
case 'd':
|
||||||
|
if (mask != 0xffffffff)
|
||||||
|
*((volatile grub_uint32_t *) addr)
|
||||||
|
= (*((volatile grub_uint32_t *) addr) & ~mask) | value;
|
||||||
else
|
else
|
||||||
*((grub_uint8_t *) addr) = (grub_uint8_t) value;
|
*((volatile grub_uint32_t *) addr) = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'w':
|
||||||
|
if ((mask & 0xffff) != 0xffff)
|
||||||
|
*((volatile grub_uint16_t *) addr)
|
||||||
|
= (*((volatile grub_uint16_t *) addr) & ~mask) | value;
|
||||||
|
else
|
||||||
|
*((volatile grub_uint16_t *) addr) = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'b':
|
||||||
|
if ((mask & 0xff) != 0xff)
|
||||||
|
*((volatile grub_uint8_t *) addr)
|
||||||
|
= (*((volatile grub_uint8_t *) addr) & ~mask) | value;
|
||||||
|
else
|
||||||
|
*((volatile grub_uint8_t *) addr) = value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -70,30 +119,30 @@ grub_cmd_write (grub_command_t cmd, int argc, char **argv)
|
||||||
GRUB_MOD_INIT(memrw)
|
GRUB_MOD_INIT(memrw)
|
||||||
{
|
{
|
||||||
cmd_read_byte =
|
cmd_read_byte =
|
||||||
grub_register_command ("read_byte", grub_cmd_read,
|
grub_register_extcmd ("read_byte", grub_cmd_read, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"read_byte ADDR", "Read byte from ADDR.");
|
N_("ADDR"), N_("Read byte from ADDR."), options);
|
||||||
cmd_read_word =
|
cmd_read_word =
|
||||||
grub_register_command ("read_word", grub_cmd_read,
|
grub_register_extcmd ("read_word", grub_cmd_read, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"read_word ADDR", "Read word from ADDR.");
|
N_("ADDR"), N_("Read word from ADDR."), options);
|
||||||
cmd_read_dword =
|
cmd_read_dword =
|
||||||
grub_register_command ("read_dword", grub_cmd_read,
|
grub_register_extcmd ("read_dword", grub_cmd_read, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"read_dword ADDR", "Read dword from ADDR.");
|
N_("ADDR"), N_("Read dword from ADDR."), options);
|
||||||
cmd_write_byte =
|
cmd_write_byte =
|
||||||
grub_register_command ("write_byte", grub_cmd_write,
|
grub_register_command ("write_byte", grub_cmd_write,
|
||||||
"write_byte ADDR VALUE", "Write byte VALUE to ADDR.");
|
N_("ADDR VALUE [MASK]"), N_("Write byte VALUE to ADDR."));
|
||||||
cmd_write_word =
|
cmd_write_word =
|
||||||
grub_register_command ("write_word", grub_cmd_write,
|
grub_register_command ("write_word", grub_cmd_write,
|
||||||
"write_word ADDR VALUE", "Write word VALUE to ADDR.");
|
N_("ADDR VALUE [MASK]"), N_("Write word VALUE to ADDR."));
|
||||||
cmd_write_dword =
|
cmd_write_dword =
|
||||||
grub_register_command ("write_dword", grub_cmd_write,
|
grub_register_command ("write_dword", grub_cmd_write,
|
||||||
"write_dword ADDR VALUE", "Write dword VALUE to ADDR.");
|
N_("ADDR VALUE [MASK]"), N_("Write dword VALUE to ADDR."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(memrw)
|
GRUB_MOD_FINI(memrw)
|
||||||
{
|
{
|
||||||
grub_unregister_command (cmd_read_byte);
|
grub_unregister_extcmd (cmd_read_byte);
|
||||||
grub_unregister_command (cmd_read_word);
|
grub_unregister_extcmd (cmd_read_word);
|
||||||
grub_unregister_command (cmd_read_dword);
|
grub_unregister_extcmd (cmd_read_dword);
|
||||||
grub_unregister_command (cmd_write_byte);
|
grub_unregister_command (cmd_write_byte);
|
||||||
grub_unregister_command (cmd_write_word);
|
grub_unregister_command (cmd_write_word);
|
||||||
grub_unregister_command (cmd_write_dword);
|
grub_unregister_command (cmd_write_dword);
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <grub/term.h>
|
#include <grub/term.h>
|
||||||
#include <grub/loader.h>
|
#include <grub/loader.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
/* cat FILE */
|
/* cat FILE */
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
|
@ -354,28 +355,28 @@ GRUB_MOD_INIT(minicmd)
|
||||||
{
|
{
|
||||||
cmd_cat =
|
cmd_cat =
|
||||||
grub_register_command ("cat", grub_mini_cmd_cat,
|
grub_register_command ("cat", grub_mini_cmd_cat,
|
||||||
"cat FILE", "Show the contents of a file.");
|
N_("FILE"), N_("Show the contents of a file."));
|
||||||
cmd_help =
|
cmd_help =
|
||||||
grub_register_command ("help", grub_mini_cmd_help,
|
grub_register_command ("help", grub_mini_cmd_help,
|
||||||
0, "Show this message.");
|
0, N_("Show this message."));
|
||||||
cmd_root =
|
cmd_root =
|
||||||
grub_register_command ("root", grub_mini_cmd_root,
|
grub_register_command ("root", grub_mini_cmd_root,
|
||||||
"root [DEVICE]", "Set the root device.");
|
N_("[DEVICE]"), N_("Set the root device."));
|
||||||
cmd_dump =
|
cmd_dump =
|
||||||
grub_register_command ("dump", grub_mini_cmd_dump,
|
grub_register_command ("dump", grub_mini_cmd_dump,
|
||||||
"dump ADDR", "Dump memory.");
|
N_("ADDR"), N_("Dump memory."));
|
||||||
cmd_rmmod =
|
cmd_rmmod =
|
||||||
grub_register_command ("rmmod", grub_mini_cmd_rmmod,
|
grub_register_command ("rmmod", grub_mini_cmd_rmmod,
|
||||||
"rmmod MODULE", "Remove a module.");
|
N_("MODULE"), N_("Remove a module."));
|
||||||
cmd_lsmod =
|
cmd_lsmod =
|
||||||
grub_register_command ("lsmod", grub_mini_cmd_lsmod,
|
grub_register_command ("lsmod", grub_mini_cmd_lsmod,
|
||||||
0, "Show loaded modules.");
|
0, N_("Show loaded modules."));
|
||||||
cmd_exit =
|
cmd_exit =
|
||||||
grub_register_command ("exit", grub_mini_cmd_exit,
|
grub_register_command ("exit", grub_mini_cmd_exit,
|
||||||
0, "Exit from GRUB.");
|
0, N_("Exit from GRUB."));
|
||||||
cmd_clear =
|
cmd_clear =
|
||||||
grub_register_command ("clear", grub_mini_cmd_clear,
|
grub_register_command ("clear", grub_mini_cmd_clear,
|
||||||
0, "Clear the screen.");
|
0, N_("Clear the screen."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(minicmd)
|
GRUB_MOD_FINI(minicmd)
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <grub/partition.h>
|
#include <grub/partition.h>
|
||||||
#include <grub/parttool.h>
|
#include <grub/parttool.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static struct grub_parttool *parts = 0;
|
static struct grub_parttool *parts = 0;
|
||||||
static int curhandle = 0;
|
static int curhandle = 0;
|
||||||
|
@ -182,12 +183,11 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
|
||||||
{
|
{
|
||||||
char *filename;
|
char *filename;
|
||||||
|
|
||||||
filename = grub_malloc (grub_strlen (prefix) + sizeof ("/parttool.lst"));
|
filename = grub_xasprintf ("%s/parttool.lst", prefix);
|
||||||
if (filename)
|
if (filename)
|
||||||
{
|
{
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
|
|
||||||
grub_sprintf (filename, "%s/parttool.lst", prefix);
|
|
||||||
file = grub_file_open (filename);
|
file = grub_file_open (filename);
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
|
@ -322,7 +322,7 @@ GRUB_MOD_INIT(parttool)
|
||||||
{
|
{
|
||||||
mymod = mod;
|
mymod = mod;
|
||||||
cmd = grub_register_command ("parttool", grub_cmd_parttool,
|
cmd = grub_register_command ("parttool", grub_cmd_parttool,
|
||||||
"parttool PARTITION COMMANDS",
|
N_("PARTITION COMMANDS"),
|
||||||
helpmsg);
|
helpmsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,27 +17,22 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/auth.h>
|
#include <grub/auth.h>
|
||||||
|
#include <grub/crypto.h>
|
||||||
#include <grub/list.h>
|
#include <grub/list.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/normal.h>
|
#include <grub/normal.h>
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_dl_t my_mod;
|
static grub_dl_t my_mod;
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
check_password (const char *user,
|
check_password (const char *user, const char *entered,
|
||||||
void *password)
|
void *password)
|
||||||
{
|
{
|
||||||
char entered[1024];
|
if (grub_crypto_memcmp (entered, password, GRUB_AUTH_MAX_PASSLEN) != 0)
|
||||||
|
|
||||||
grub_memset (entered, 0, sizeof (entered));
|
|
||||||
|
|
||||||
if (!GRUB_GET_PASSWORD (entered, sizeof (entered) - 1))
|
|
||||||
return GRUB_ACCESS_DENIED;
|
|
||||||
|
|
||||||
if (grub_auth_strcmp (entered, password) != 0)
|
|
||||||
return GRUB_ACCESS_DENIED;
|
return GRUB_ACCESS_DENIED;
|
||||||
|
|
||||||
grub_auth_authenticate (user);
|
grub_auth_authenticate (user);
|
||||||
|
@ -51,13 +46,18 @@ grub_cmd_password (grub_command_t cmd __attribute__ ((unused)),
|
||||||
{
|
{
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
char *pass;
|
char *pass;
|
||||||
|
int copylen;
|
||||||
|
|
||||||
if (argc != 2)
|
if (argc != 2)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Two arguments expected.");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "two arguments expected");
|
||||||
|
|
||||||
pass = grub_strdup (args[1]);
|
pass = grub_zalloc (GRUB_AUTH_MAX_PASSLEN);
|
||||||
if (!pass)
|
if (!pass)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
copylen = grub_strlen (args[1]);
|
||||||
|
if (copylen >= GRUB_AUTH_MAX_PASSLEN)
|
||||||
|
copylen = GRUB_AUTH_MAX_PASSLEN - 1;
|
||||||
|
grub_memcpy (pass, args[1], copylen);
|
||||||
|
|
||||||
err = grub_auth_register_authentication (args[0], check_password, pass);
|
err = grub_auth_register_authentication (args[0], check_password, pass);
|
||||||
if (err)
|
if (err)
|
||||||
|
@ -75,9 +75,9 @@ GRUB_MOD_INIT(password)
|
||||||
{
|
{
|
||||||
my_mod = mod;
|
my_mod = mod;
|
||||||
cmd = grub_register_command ("password", grub_cmd_password,
|
cmd = grub_register_command ("password", grub_cmd_password,
|
||||||
"password USER PASSWORD",
|
N_("USER PASSWORD"),
|
||||||
"Set user password (plaintext). "
|
N_("Set user password (plaintext). "
|
||||||
"Unrecommended and insecure.");
|
"Unrecommended and insecure."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(password)
|
GRUB_MOD_FINI(password)
|
||||||
|
|
196
commands/password_pbkdf2.c
Normal file
196
commands/password_pbkdf2.c
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2009 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/auth.h>
|
||||||
|
#include <grub/crypto.h>
|
||||||
|
#include <grub/list.h>
|
||||||
|
#include <grub/mm.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
|
#include <grub/env.h>
|
||||||
|
#include <grub/normal.h>
|
||||||
|
#include <grub/dl.h>
|
||||||
|
|
||||||
|
static grub_dl_t my_mod;
|
||||||
|
|
||||||
|
struct pbkdf2_password
|
||||||
|
{
|
||||||
|
grub_uint8_t *salt;
|
||||||
|
grub_size_t saltlen;
|
||||||
|
unsigned int c;
|
||||||
|
grub_uint8_t *expected;
|
||||||
|
grub_size_t buflen;
|
||||||
|
};
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
check_password (const char *user, const char *entered, void *pin)
|
||||||
|
{
|
||||||
|
grub_uint8_t *buf;
|
||||||
|
struct pbkdf2_password *pass = pin;
|
||||||
|
gcry_err_code_t err;
|
||||||
|
|
||||||
|
buf = grub_malloc (pass->buflen);
|
||||||
|
if (!buf)
|
||||||
|
return grub_crypto_gcry_error (GPG_ERR_OUT_OF_MEMORY);
|
||||||
|
|
||||||
|
err = grub_crypto_pbkdf2 (GRUB_MD_SHA512, (grub_uint8_t *) entered,
|
||||||
|
grub_strlen (entered),
|
||||||
|
pass->salt, pass->saltlen, pass->c,
|
||||||
|
buf, pass->buflen);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_free (buf);
|
||||||
|
return grub_crypto_gcry_error (err);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grub_crypto_memcmp (buf, pass->expected, pass->buflen) != 0)
|
||||||
|
return GRUB_ACCESS_DENIED;
|
||||||
|
|
||||||
|
grub_auth_authenticate (user);
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
hex2val (char hex)
|
||||||
|
{
|
||||||
|
if ('0' <= hex && hex <= '9')
|
||||||
|
return hex - '0';
|
||||||
|
if ('a' <= hex && hex <= 'f')
|
||||||
|
return hex - 'a' + 10;
|
||||||
|
if ('A' <= hex && hex <= 'F')
|
||||||
|
return hex - 'A' + 10;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_cmd_password (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
int argc, char **args)
|
||||||
|
{
|
||||||
|
grub_err_t err;
|
||||||
|
char *ptr, *ptr2;
|
||||||
|
grub_uint8_t *ptro;
|
||||||
|
struct pbkdf2_password *pass;
|
||||||
|
|
||||||
|
if (argc != 2)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Two arguments expected.");
|
||||||
|
|
||||||
|
if (grub_memcmp (args[1], "grub.pbkdf2.sha512.",
|
||||||
|
sizeof ("grub.pbkdf2.sha512.") - 1) != 0)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Incorrect PBKDF2 password.");
|
||||||
|
|
||||||
|
ptr = args[1] + sizeof ("grub.pbkdf2.sha512.") - 1;
|
||||||
|
|
||||||
|
pass = grub_malloc (sizeof (*pass));
|
||||||
|
if (!pass)
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
pass->c = grub_strtoul (ptr, &ptr, 0);
|
||||||
|
if (*ptr != '.')
|
||||||
|
{
|
||||||
|
grub_free (pass);
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Incorrect PBKDF2 password.");
|
||||||
|
}
|
||||||
|
ptr++;
|
||||||
|
|
||||||
|
ptr2 = grub_strchr (ptr, '.');
|
||||||
|
if (!ptr2 || ((ptr2 - ptr) & 1) || grub_strlen (ptr2 + 1) & 1)
|
||||||
|
{
|
||||||
|
grub_free (pass);
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Incorrect PBKDF2 password.");
|
||||||
|
}
|
||||||
|
|
||||||
|
pass->saltlen = (ptr2 - ptr) >> 1;
|
||||||
|
pass->buflen = grub_strlen (ptr2 + 1) >> 1;
|
||||||
|
ptro = pass->salt = grub_malloc (pass->saltlen);
|
||||||
|
if (!ptro)
|
||||||
|
{
|
||||||
|
grub_free (pass);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
while (ptr < ptr2)
|
||||||
|
{
|
||||||
|
int hex1, hex2;
|
||||||
|
hex1 = hex2val (*ptr);
|
||||||
|
ptr++;
|
||||||
|
hex2 = hex2val (*ptr);
|
||||||
|
ptr++;
|
||||||
|
if (hex1 < 0 || hex2 < 0)
|
||||||
|
{
|
||||||
|
grub_free (pass->salt);
|
||||||
|
grub_free (pass);
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
"Incorrect PBKDF2 password.");
|
||||||
|
}
|
||||||
|
|
||||||
|
*ptro = (hex1 << 4) | hex2;
|
||||||
|
ptro++;
|
||||||
|
}
|
||||||
|
|
||||||
|
ptro = pass->expected = grub_malloc (pass->buflen);
|
||||||
|
if (!ptro)
|
||||||
|
{
|
||||||
|
grub_free (pass->salt);
|
||||||
|
grub_free (pass);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
ptr = ptr2 + 1;
|
||||||
|
ptr2 += grub_strlen (ptr2);
|
||||||
|
while (ptr < ptr2)
|
||||||
|
{
|
||||||
|
int hex1, hex2;
|
||||||
|
hex1 = hex2val (*ptr);
|
||||||
|
ptr++;
|
||||||
|
hex2 = hex2val (*ptr);
|
||||||
|
ptr++;
|
||||||
|
if (hex1 < 0 || hex2 < 0)
|
||||||
|
{
|
||||||
|
grub_free (pass->expected);
|
||||||
|
grub_free (pass->salt);
|
||||||
|
grub_free (pass);
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
"Incorrect PBKDF2 password.");
|
||||||
|
}
|
||||||
|
|
||||||
|
*ptro = (hex1 << 4) | hex2;
|
||||||
|
ptro++;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = grub_auth_register_authentication (args[0], check_password, pass);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
grub_free (pass);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
grub_dl_ref (my_mod);
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_command_t cmd;
|
||||||
|
|
||||||
|
GRUB_MOD_INIT(password_pbkdf2)
|
||||||
|
{
|
||||||
|
my_mod = mod;
|
||||||
|
cmd = grub_register_command ("password_pbkdf2", grub_cmd_password,
|
||||||
|
"password_pbkdf2 USER PBKDF2_PASSWORD",
|
||||||
|
"Set user password (PBKDF2). ");
|
||||||
|
}
|
||||||
|
|
||||||
|
GRUB_MOD_FINI(password_pbkdf2)
|
||||||
|
{
|
||||||
|
grub_unregister_command (cmd);
|
||||||
|
}
|
|
@ -30,16 +30,17 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"set", 's', GRUB_ARG_OPTION_OPTIONAL,
|
{"set", 's', GRUB_ARG_OPTION_OPTIONAL,
|
||||||
"Set a variable to return value.", "VAR", ARG_TYPE_STRING},
|
N_("Set a variable to return value."), "VAR", ARG_TYPE_STRING},
|
||||||
{"driver", 'd', 0, "Determine driver.", 0, 0},
|
{"driver", 'd', 0, N_("Determine driver."), 0, 0},
|
||||||
{"partmap", 'p', 0, "Determine partition map type.", 0, 0},
|
{"partmap", 'p', 0, N_("Determine partition map type."), 0, 0},
|
||||||
{"fs", 'f', 0, "Determine filesystem type.", 0, 0},
|
{"fs", 'f', 0, N_("Determine filesystem type."), 0, 0},
|
||||||
{"fs-uuid", 'u', 0, "Determine filesystem UUID.", 0, 0},
|
{"fs-uuid", 'u', 0, N_("Determine filesystem UUID."), 0, 0},
|
||||||
{"label", 'l', 0, "Determine filesystem label.", 0, 0},
|
{"label", 'l', 0, N_("Determine filesystem label."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -150,8 +151,8 @@ static grub_extcmd_t cmd;
|
||||||
GRUB_MOD_INIT (probe)
|
GRUB_MOD_INIT (probe)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("probe", grub_cmd_probe, GRUB_COMMAND_FLAG_BOTH,
|
cmd = grub_register_extcmd ("probe", grub_cmd_probe, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"probe [DEVICE]",
|
N_("[DEVICE]"),
|
||||||
"Retrieve device info.", options);
|
N_("Retrieve device info."), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI (probe)
|
GRUB_MOD_FINI (probe)
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <grub/term.h>
|
#include <grub/term.h>
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
grub_getline (void)
|
grub_getline (void)
|
||||||
|
@ -79,8 +80,8 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(read)
|
GRUB_MOD_INIT(read)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("read", grub_cmd_read,
|
cmd = grub_register_command ("read", grub_cmd_read,
|
||||||
"read [ENVVAR]",
|
N_("[ENVVAR]"),
|
||||||
"Set variable with user input.");
|
N_("Set variable with user input."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(read)
|
GRUB_MOD_FINI(read)
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_reboot (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_reboot (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
@ -35,7 +36,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(reboot)
|
GRUB_MOD_INIT(reboot)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("reboot", grub_cmd_reboot,
|
cmd = grub_register_command ("reboot", grub_cmd_reboot,
|
||||||
0, "Reboot the computer.");
|
0, N_("Reboot the computer."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(reboot)
|
GRUB_MOD_FINI(reboot)
|
||||||
|
|
|
@ -25,32 +25,14 @@
|
||||||
#include <grub/device.h>
|
#include <grub/device.h>
|
||||||
#include <grub/file.h>
|
#include <grub/file.h>
|
||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/search.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
void
|
||||||
{
|
FUNC_NAME (const char *key, const char *var, int no_floppy)
|
||||||
{"file", 'f', 0, "Search devices by a file.", 0, 0},
|
|
||||||
{"label", 'l', 0, "Search devices by a filesystem label.", 0, 0},
|
|
||||||
{"fs-uuid", 'u', 0, "Search devices by a filesystem UUID.", 0, 0},
|
|
||||||
{"set", 's', GRUB_ARG_OPTION_OPTIONAL, "Set a variable to the first device found.", "VAR", ARG_TYPE_STRING},
|
|
||||||
{"no-floppy", 'n', 0, "Do not probe any floppy drive.", 0, 0},
|
|
||||||
{0, 0, 0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
enum options
|
|
||||||
{
|
|
||||||
SEARCH_FILE,
|
|
||||||
SEARCH_LABEL,
|
|
||||||
SEARCH_FS_UUID,
|
|
||||||
SEARCH_SET,
|
|
||||||
SEARCH_NO_FLOPPY,
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
search_fs (const char *key, const char *var, int no_floppy, enum options type)
|
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
char *buf = NULL;
|
|
||||||
grub_fs_autoload_hook_t saved_autoload;
|
grub_fs_autoload_hook_t saved_autoload;
|
||||||
|
|
||||||
auto int iterate_device (const char *name);
|
auto int iterate_device (const char *name);
|
||||||
|
@ -63,48 +45,46 @@ search_fs (const char *key, const char *var, int no_floppy, enum options type)
|
||||||
name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
|
name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (type == SEARCH_FILE)
|
#ifdef DO_SEARCH_FILE
|
||||||
{
|
{
|
||||||
grub_size_t len;
|
char *buf;
|
||||||
char *p;
|
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
|
|
||||||
len = grub_strlen (name) + 2 + grub_strlen (key) + 1;
|
buf = grub_xasprintf ("(%s)%s", name, key);
|
||||||
p = grub_realloc (buf, len);
|
if (! buf)
|
||||||
if (! p)
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
buf = p;
|
|
||||||
grub_sprintf (buf, "(%s)%s", name, key);
|
|
||||||
|
|
||||||
file = grub_file_open (buf);
|
file = grub_file_open (buf);
|
||||||
if (file)
|
if (file)
|
||||||
{
|
{
|
||||||
found = 1;
|
found = 1;
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
}
|
}
|
||||||
|
grub_free (buf);
|
||||||
}
|
}
|
||||||
else
|
#else
|
||||||
{
|
{
|
||||||
/* type is SEARCH_FS_UUID or SEARCH_LABEL */
|
/* SEARCH_FS_UUID or SEARCH_LABEL */
|
||||||
grub_device_t dev;
|
grub_device_t dev;
|
||||||
grub_fs_t fs;
|
grub_fs_t fs;
|
||||||
int (*compare_fn) (const char *, const char *);
|
|
||||||
char *quid;
|
char *quid;
|
||||||
|
|
||||||
dev = grub_device_open (name);
|
dev = grub_device_open (name);
|
||||||
if (dev)
|
if (dev)
|
||||||
{
|
{
|
||||||
fs = grub_fs_probe (dev);
|
fs = grub_fs_probe (dev);
|
||||||
compare_fn =
|
|
||||||
(type == SEARCH_FS_UUID) ? grub_strcasecmp : grub_strcmp;
|
|
||||||
|
|
||||||
if (fs && ((type == SEARCH_FS_UUID) ? fs->uuid : fs->label))
|
#ifdef DO_SEARCH_FS_UUID
|
||||||
|
#define compare_fn grub_strcasecmp
|
||||||
|
#define read_fn uuid
|
||||||
|
#else
|
||||||
|
#define compare_fn grub_strcmp
|
||||||
|
#define read_fn label
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (fs && fs->read_fn)
|
||||||
{
|
{
|
||||||
if (type == SEARCH_FS_UUID)
|
fs->read_fn (dev, &quid);
|
||||||
fs->uuid (dev, &quid);
|
|
||||||
else
|
|
||||||
fs->label (dev, &quid);
|
|
||||||
|
|
||||||
if (grub_errno == GRUB_ERR_NONE && quid)
|
if (grub_errno == GRUB_ERR_NONE && quid)
|
||||||
{
|
{
|
||||||
|
@ -118,6 +98,7 @@ search_fs (const char *key, const char *var, int no_floppy, enum options type)
|
||||||
grub_device_close (dev);
|
grub_device_close (dev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (found)
|
if (found)
|
||||||
{
|
{
|
||||||
|
@ -149,52 +130,45 @@ search_fs (const char *key, const char *var, int no_floppy, enum options type)
|
||||||
else
|
else
|
||||||
grub_device_iterate (iterate_device);
|
grub_device_iterate (iterate_device);
|
||||||
|
|
||||||
grub_free (buf);
|
|
||||||
|
|
||||||
if (grub_errno == GRUB_ERR_NONE && count == 0)
|
if (grub_errno == GRUB_ERR_NONE && count == 0)
|
||||||
grub_error (GRUB_ERR_FILE_NOT_FOUND, "no such device: %s", key);
|
grub_error (GRUB_ERR_FILE_NOT_FOUND, "no such device: %s", key);
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_search (grub_extcmd_t cmd, int argc, char **args)
|
grub_cmd_do_search (grub_command_t cmd __attribute__ ((unused)), int argc,
|
||||||
|
char **args)
|
||||||
{
|
{
|
||||||
struct grub_arg_list *state = cmd->state;
|
|
||||||
const char *var = 0;
|
|
||||||
|
|
||||||
if (argc == 0)
|
if (argc == 0)
|
||||||
return grub_error (GRUB_ERR_INVALID_COMMAND, "no argument specified");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no argument specified");
|
||||||
|
|
||||||
if (state[SEARCH_SET].set)
|
FUNC_NAME (args[0], argc == 1 ? 0 : args[1], 0);
|
||||||
var = state[SEARCH_SET].arg ? state[SEARCH_SET].arg : "root";
|
|
||||||
|
|
||||||
if (state[SEARCH_LABEL].set)
|
|
||||||
search_fs (args[0], var, state[SEARCH_NO_FLOPPY].set, SEARCH_LABEL);
|
|
||||||
else if (state[SEARCH_FS_UUID].set)
|
|
||||||
search_fs (args[0], var, state[SEARCH_NO_FLOPPY].set, SEARCH_FS_UUID);
|
|
||||||
else if (state[SEARCH_FILE].set)
|
|
||||||
search_fs (args[0], var, state[SEARCH_NO_FLOPPY].set, SEARCH_FILE);
|
|
||||||
else
|
|
||||||
return grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
|
|
||||||
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_extcmd_t cmd;
|
static grub_command_t cmd;
|
||||||
|
|
||||||
GRUB_MOD_INIT(search)
|
#ifdef DO_SEARCH_FILE
|
||||||
|
GRUB_MOD_INIT(search_file)
|
||||||
|
#elif defined (DO_SEARCH_FS_UUID)
|
||||||
|
GRUB_MOD_INIT(search_fs_uuid)
|
||||||
|
#else
|
||||||
|
GRUB_MOD_INIT(search_fs_label)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
cmd =
|
cmd =
|
||||||
grub_register_extcmd ("search", grub_cmd_search,
|
grub_register_command (COMMAND_NAME, grub_cmd_do_search,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
N_("NAME [VARIABLE]"),
|
||||||
"search [-f|-l|-u|-s|-n] NAME",
|
HELP_MESSAGE);
|
||||||
"Search devices by file, filesystem label or filesystem UUID."
|
|
||||||
" If --set is specified, the first device found is"
|
|
||||||
" set to a variable. If no variable name is"
|
|
||||||
" specified, \"root\" is used.",
|
|
||||||
options);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(search)
|
#ifdef DO_SEARCH_FILE
|
||||||
|
GRUB_MOD_FINI(search_file)
|
||||||
|
#elif defined (DO_SEARCH_FS_UUID)
|
||||||
|
GRUB_MOD_FINI(search_fs_uuid)
|
||||||
|
#else
|
||||||
|
GRUB_MOD_FINI(search_fs_label)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
grub_unregister_extcmd (cmd);
|
grub_unregister_command (cmd);
|
||||||
}
|
}
|
||||||
|
|
6
commands/search_file.c
Normal file
6
commands/search_file.c
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#define DO_SEARCH_FILE 1
|
||||||
|
#define FUNC_NAME grub_search_fs_file
|
||||||
|
#define COMMAND_NAME "search.file"
|
||||||
|
#define SEARCH_TARGET "file"
|
||||||
|
#define HELP_MESSAGE N_("Search devices by file. If VARIABLE is specified, the first device found is set to a variable.")
|
||||||
|
#include "search.c"
|
6
commands/search_label.c
Normal file
6
commands/search_label.c
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#define DO_SEARCH_FS_LABEL 1
|
||||||
|
#define FUNC_NAME grub_search_label
|
||||||
|
#define COMMAND_NAME "search.fs_label"
|
||||||
|
#define SEARCH_TARGET "filesystem label"
|
||||||
|
#define HELP_MESSAGE N_("Search devices by label. If VARIABLE is specified, the first device found is set to a variable.")
|
||||||
|
#include "search.c"
|
6
commands/search_uuid.c
Normal file
6
commands/search_uuid.c
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#define DO_SEARCH_FS_UUID 1
|
||||||
|
#define FUNC_NAME grub_search_fs_uuid
|
||||||
|
#define COMMAND_NAME "search.fs_uuid"
|
||||||
|
#define SEARCH_TARGET "filesystem UUID"
|
||||||
|
#define HELP_MESSAGE N_("Search devices by UUID. If VARIABLE is specified, the first device found is set to a variable.")
|
||||||
|
#include "search.c"
|
95
commands/search_wrap.c
Normal file
95
commands/search_wrap.c
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
/* search.c - search devices based on a file or a filesystem label */
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2005,2007,2008,2009 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/misc.h>
|
||||||
|
#include <grub/mm.h>
|
||||||
|
#include <grub/err.h>
|
||||||
|
#include <grub/dl.h>
|
||||||
|
#include <grub/env.h>
|
||||||
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/search.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
|
static const struct grub_arg_option options[] =
|
||||||
|
{
|
||||||
|
{"file", 'f', 0, N_("Search devices by a file."), 0, 0},
|
||||||
|
{"label", 'l', 0, N_("Search devices by a filesystem label."),
|
||||||
|
0, 0},
|
||||||
|
{"fs-uuid", 'u', 0, N_("Search devices by a filesystem UUID."),
|
||||||
|
0, 0},
|
||||||
|
{"set", 's', GRUB_ARG_OPTION_OPTIONAL,
|
||||||
|
N_("Set a variable to the first device found."), "VAR", ARG_TYPE_STRING},
|
||||||
|
{"no-floppy", 'n', 0, N_("Do not probe any floppy drive."), 0, 0},
|
||||||
|
{0, 0, 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
enum options
|
||||||
|
{
|
||||||
|
SEARCH_FILE,
|
||||||
|
SEARCH_LABEL,
|
||||||
|
SEARCH_FS_UUID,
|
||||||
|
SEARCH_SET,
|
||||||
|
SEARCH_NO_FLOPPY,
|
||||||
|
};
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_cmd_search (grub_extcmd_t cmd, int argc, char **args)
|
||||||
|
{
|
||||||
|
struct grub_arg_list *state = cmd->state;
|
||||||
|
const char *var = 0;
|
||||||
|
|
||||||
|
if (argc == 0)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no argument specified");
|
||||||
|
|
||||||
|
if (state[SEARCH_SET].set)
|
||||||
|
var = state[SEARCH_SET].arg ? state[SEARCH_SET].arg : "root";
|
||||||
|
|
||||||
|
if (state[SEARCH_LABEL].set)
|
||||||
|
grub_search_label (args[0], var, state[SEARCH_NO_FLOPPY].set);
|
||||||
|
else if (state[SEARCH_FS_UUID].set)
|
||||||
|
grub_search_fs_uuid (args[0], var, state[SEARCH_NO_FLOPPY].set);
|
||||||
|
else if (state[SEARCH_FILE].set)
|
||||||
|
grub_search_fs_file (args[0], var, state[SEARCH_NO_FLOPPY].set);
|
||||||
|
else
|
||||||
|
return grub_error (GRUB_ERR_INVALID_COMMAND, "unspecified search type");
|
||||||
|
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_extcmd_t cmd;
|
||||||
|
|
||||||
|
GRUB_MOD_INIT(search)
|
||||||
|
{
|
||||||
|
cmd =
|
||||||
|
grub_register_extcmd ("search", grub_cmd_search,
|
||||||
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
|
N_("search [-f|-l|-u|-s|-n] NAME"),
|
||||||
|
N_("Search devices by file, filesystem label"
|
||||||
|
" or filesystem UUID."
|
||||||
|
" If --set is specified, the first device found is"
|
||||||
|
" set to a variable. If no variable name is"
|
||||||
|
" specified, \"root\" is used."),
|
||||||
|
options);
|
||||||
|
}
|
||||||
|
|
||||||
|
GRUB_MOD_FINI(search)
|
||||||
|
{
|
||||||
|
grub_unregister_extcmd (cmd);
|
||||||
|
}
|
340
commands/setpci.c
Normal file
340
commands/setpci.c
Normal file
|
@ -0,0 +1,340 @@
|
||||||
|
/* lspci.c - List PCI devices. */
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2008, 2009 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/dl.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/env.h>
|
||||||
|
#include <grub/mm.h>
|
||||||
|
|
||||||
|
struct pci_register
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
grub_uint16_t addr;
|
||||||
|
unsigned size;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct pci_register pci_registers[] =
|
||||||
|
{
|
||||||
|
{"VENDOR_ID", GRUB_PCI_REG_VENDOR , 2},
|
||||||
|
{"DEVICE_ID", GRUB_PCI_REG_DEVICE , 2},
|
||||||
|
{"COMMAND", GRUB_PCI_REG_COMMAND , 2},
|
||||||
|
{"STATUS", GRUB_PCI_REG_STATUS , 2},
|
||||||
|
{"REVISION", GRUB_PCI_REG_REVISION , 1},
|
||||||
|
{"CLASS_PROG", GRUB_PCI_REG_CLASS + 1 , 1},
|
||||||
|
{"CLASS_DEVICE", GRUB_PCI_REG_CLASS + 2 , 2},
|
||||||
|
{"CACHE_LINE_SIZE", GRUB_PCI_REG_CACHELINE , 1},
|
||||||
|
{"LATENCY_TIMER", GRUB_PCI_REG_LAT_TIMER , 1},
|
||||||
|
{"HEADER_TYPE", GRUB_PCI_REG_HEADER_TYPE , 1},
|
||||||
|
{"BIST", GRUB_PCI_REG_BIST , 1},
|
||||||
|
{"BASE_ADDRESS_0", GRUB_PCI_REG_ADDRESS_REG0, 4},
|
||||||
|
{"BASE_ADDRESS_1", GRUB_PCI_REG_ADDRESS_REG1, 4},
|
||||||
|
{"BASE_ADDRESS_2", GRUB_PCI_REG_ADDRESS_REG2, 4},
|
||||||
|
{"BASE_ADDRESS_3", GRUB_PCI_REG_ADDRESS_REG3, 4},
|
||||||
|
{"BASE_ADDRESS_4", GRUB_PCI_REG_ADDRESS_REG4, 4},
|
||||||
|
{"BASE_ADDRESS_5", GRUB_PCI_REG_ADDRESS_REG5, 4},
|
||||||
|
{"CARDBUS_CIS", GRUB_PCI_REG_CIS_POINTER , 4},
|
||||||
|
{"SUBVENDOR_ID", GRUB_PCI_REG_SUBVENDOR , 2},
|
||||||
|
{"SUBSYSTEM_ID", GRUB_PCI_REG_SUBSYSTEM , 2},
|
||||||
|
{"ROM_ADDRESS", GRUB_PCI_REG_ROM_ADDRESS , 4},
|
||||||
|
{"CAP_POINTER", GRUB_PCI_REG_CAP_POINTER , 1},
|
||||||
|
{"INTERRUPT_LINE", GRUB_PCI_REG_IRQ_LINE , 1},
|
||||||
|
{"INTERRUPT_PIN", GRUB_PCI_REG_IRQ_PIN , 1},
|
||||||
|
{"MIN_GNT", GRUB_PCI_REG_MIN_GNT , 1},
|
||||||
|
{"MAX_LAT", GRUB_PCI_REG_MIN_GNT , 1},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct grub_arg_option options[] =
|
||||||
|
{
|
||||||
|
{0, 'd', 0, "Select device by vendor and device IDs.",
|
||||||
|
"[vendor]:[device]", ARG_TYPE_STRING},
|
||||||
|
{0, 's', 0, "Select device by its position on the bus.",
|
||||||
|
"[bus]:[slot][.func]", ARG_TYPE_STRING},
|
||||||
|
{0, 'v', 0, "Save read value into variable VARNAME.",
|
||||||
|
"VARNAME", ARG_TYPE_STRING},
|
||||||
|
{0, 0, 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static grub_uint32_t pciid_check_mask, pciid_check_value;
|
||||||
|
static int bus, device, function;
|
||||||
|
static int check_bus, check_device, check_function;
|
||||||
|
static grub_uint32_t write_mask, regwrite;
|
||||||
|
static int regsize;
|
||||||
|
static grub_uint16_t regaddr;
|
||||||
|
static const char *varname;
|
||||||
|
|
||||||
|
static int NESTED_FUNC_ATTR
|
||||||
|
grub_setpci_iter (grub_pci_device_t dev, grub_pci_id_t pciid)
|
||||||
|
{
|
||||||
|
grub_uint32_t regval = 0;
|
||||||
|
grub_pci_address_t addr;
|
||||||
|
|
||||||
|
if ((pciid & pciid_check_mask) != pciid_check_value)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (check_bus && grub_pci_get_bus (dev) != bus)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (check_device && grub_pci_get_device (dev) != device)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (check_function && grub_pci_get_function (dev) != device)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
addr = grub_pci_make_address (dev, regaddr);
|
||||||
|
|
||||||
|
switch (regsize)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
regval = grub_pci_read_byte (addr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
regval = grub_pci_read_word (addr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
regval = grub_pci_read (addr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (varname)
|
||||||
|
{
|
||||||
|
char buf[sizeof ("XXXXXXXX")];
|
||||||
|
grub_snprintf (buf, sizeof (buf), "%x", regval);
|
||||||
|
grub_env_set (varname, buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!write_mask)
|
||||||
|
{
|
||||||
|
grub_printf ("Register %x of %d:%d.%d is %x\n", regaddr,
|
||||||
|
grub_pci_get_bus (dev),
|
||||||
|
grub_pci_get_device (dev),
|
||||||
|
grub_pci_get_function (dev),
|
||||||
|
regval);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
regval = (regval & ~write_mask) | regwrite;
|
||||||
|
|
||||||
|
switch (regsize)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
grub_pci_write_byte (addr, regval);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
grub_pci_write_word (addr, regval);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
grub_pci_write (addr, regval);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_cmd_setpci (grub_extcmd_t cmd, int argc, char **argv)
|
||||||
|
{
|
||||||
|
const char *ptr;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
pciid_check_value = 0;
|
||||||
|
pciid_check_mask = 0;
|
||||||
|
|
||||||
|
if (cmd->state[0].set)
|
||||||
|
{
|
||||||
|
ptr = cmd->state[0].arg;
|
||||||
|
pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff);
|
||||||
|
if (grub_errno == GRUB_ERR_BAD_NUMBER)
|
||||||
|
{
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
ptr = cmd->state[0].arg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pciid_check_mask |= 0xffff;
|
||||||
|
if (grub_errno)
|
||||||
|
return grub_errno;
|
||||||
|
if (*ptr != ':')
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Colon expected.");
|
||||||
|
ptr++;
|
||||||
|
pciid_check_value |= (grub_strtoul (ptr, (char **) &ptr, 16) & 0xffff)
|
||||||
|
<< 16;
|
||||||
|
if (grub_errno == GRUB_ERR_BAD_NUMBER)
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
else
|
||||||
|
pciid_check_mask |= 0xffff0000;
|
||||||
|
}
|
||||||
|
|
||||||
|
pciid_check_value &= pciid_check_mask;
|
||||||
|
|
||||||
|
check_bus = check_device = check_function = 0;
|
||||||
|
|
||||||
|
if (cmd->state[1].set)
|
||||||
|
{
|
||||||
|
const char *optr;
|
||||||
|
|
||||||
|
ptr = cmd->state[1].arg;
|
||||||
|
optr = ptr;
|
||||||
|
bus = grub_strtoul (ptr, (char **) &ptr, 16);
|
||||||
|
if (grub_errno == GRUB_ERR_BAD_NUMBER)
|
||||||
|
{
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
ptr = optr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
check_bus = 1;
|
||||||
|
if (grub_errno)
|
||||||
|
return grub_errno;
|
||||||
|
if (*ptr != ':')
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Colon expected.");
|
||||||
|
ptr++;
|
||||||
|
optr = ptr;
|
||||||
|
device = grub_strtoul (ptr, (char **) &ptr, 16);
|
||||||
|
if (grub_errno == GRUB_ERR_BAD_NUMBER)
|
||||||
|
{
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
ptr = optr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
check_device = 1;
|
||||||
|
if (*ptr == '.')
|
||||||
|
{
|
||||||
|
ptr++;
|
||||||
|
function = grub_strtoul (ptr, (char **) &ptr, 16);
|
||||||
|
if (grub_errno)
|
||||||
|
return grub_errno;
|
||||||
|
check_function = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmd->state[2].set)
|
||||||
|
varname = cmd->state[2].arg;
|
||||||
|
else
|
||||||
|
varname = NULL;
|
||||||
|
|
||||||
|
write_mask = 0;
|
||||||
|
|
||||||
|
if (argc == 0)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Command expected.");
|
||||||
|
|
||||||
|
if (argc > 1)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Only one command is supported.");
|
||||||
|
|
||||||
|
ptr = argv[0];
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE (pci_registers); i++)
|
||||||
|
{
|
||||||
|
if (grub_strncmp (ptr, pci_registers[i].name,
|
||||||
|
grub_strlen (pci_registers[i].name)) == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i == ARRAY_SIZE (pci_registers))
|
||||||
|
{
|
||||||
|
regsize = 0;
|
||||||
|
regaddr = grub_strtoul (ptr, (char **) &ptr, 16);
|
||||||
|
if (grub_errno)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown register");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
regaddr = pci_registers[i].addr;
|
||||||
|
regsize = pci_registers[i].size;
|
||||||
|
ptr += grub_strlen (pci_registers[i].name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grub_errno)
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
if (*ptr == '+')
|
||||||
|
{
|
||||||
|
ptr++;
|
||||||
|
regaddr += grub_strtoul (ptr, (char **) &ptr, 16);
|
||||||
|
if (grub_errno)
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grub_memcmp (ptr, ".L", sizeof (".L") - 1) == 0
|
||||||
|
|| grub_memcmp (ptr, ".l", sizeof (".l") - 1) == 0)
|
||||||
|
{
|
||||||
|
regsize = 4;
|
||||||
|
ptr += sizeof (".l") - 1;
|
||||||
|
}
|
||||||
|
else if (grub_memcmp (ptr, ".W", sizeof (".W") - 1) == 0
|
||||||
|
|| grub_memcmp (ptr, ".w", sizeof (".w") - 1) == 0)
|
||||||
|
{
|
||||||
|
regsize = 2;
|
||||||
|
ptr += sizeof (".w") - 1;
|
||||||
|
}
|
||||||
|
else if (grub_memcmp (ptr, ".B", sizeof (".B") - 1) == 0
|
||||||
|
|| grub_memcmp (ptr, ".b", sizeof (".b") - 1) == 0)
|
||||||
|
{
|
||||||
|
regsize = 1;
|
||||||
|
ptr += sizeof (".b") - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!regsize)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
"Unknown register size.");
|
||||||
|
|
||||||
|
write_mask = 0;
|
||||||
|
if (*ptr == '=')
|
||||||
|
{
|
||||||
|
ptr++;
|
||||||
|
regwrite = grub_strtoul (ptr, (char **) &ptr, 16);
|
||||||
|
if (grub_errno)
|
||||||
|
return grub_errno;
|
||||||
|
write_mask = 0xffffffff;
|
||||||
|
if (*ptr == ':')
|
||||||
|
{
|
||||||
|
ptr++;
|
||||||
|
write_mask = grub_strtoul (ptr, (char **) &ptr, 16);
|
||||||
|
if (grub_errno)
|
||||||
|
return grub_errno;
|
||||||
|
write_mask = 0xffffffff;
|
||||||
|
}
|
||||||
|
regwrite &= write_mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (write_mask && varname)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
"Option -v isn't valid for writes.");
|
||||||
|
|
||||||
|
grub_pci_iterate (grub_setpci_iter);
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_extcmd_t cmd;
|
||||||
|
|
||||||
|
GRUB_MOD_INIT(setpci)
|
||||||
|
{
|
||||||
|
cmd = grub_register_extcmd ("setpci", grub_cmd_setpci, GRUB_COMMAND_FLAG_BOTH,
|
||||||
|
"setpci [-s POSITION] [-d DEVICE] [-v VAR] "
|
||||||
|
"[REGISTER][=VALUE[:MASK]]",
|
||||||
|
"Manipulate PCI devices.", options);
|
||||||
|
}
|
||||||
|
|
||||||
|
GRUB_MOD_FINI(setpci)
|
||||||
|
{
|
||||||
|
grub_unregister_extcmd (cmd);
|
||||||
|
}
|
|
@ -24,20 +24,21 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/machine/time.h>
|
#include <grub/machine/time.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"verbose", 'v', 0, "Verbose countdown.", 0, 0},
|
{"verbose", 'v', 0, N_("Verbose countdown."), 0, 0},
|
||||||
{"interruptible", 'i', 0, "Interruptible with ESC.", 0, 0},
|
{"interruptible", 'i', 0, N_("Interruptible with ESC."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static grub_uint8_t x, y;
|
static grub_uint16_t *pos;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_print (int n)
|
do_print (int n)
|
||||||
{
|
{
|
||||||
grub_gotoxy (x, y);
|
grub_term_restore_pos (pos);
|
||||||
/* NOTE: Do not remove the trailing space characters.
|
/* NOTE: Do not remove the trailing space characters.
|
||||||
They are required to clear the line. */
|
They are required to clear the line. */
|
||||||
grub_printf ("%d ", n);
|
grub_printf ("%d ", n);
|
||||||
|
@ -63,7 +64,6 @@ static grub_err_t
|
||||||
grub_cmd_sleep (grub_extcmd_t cmd, int argc, char **args)
|
grub_cmd_sleep (grub_extcmd_t cmd, int argc, char **args)
|
||||||
{
|
{
|
||||||
struct grub_arg_list *state = cmd->state;
|
struct grub_arg_list *state = cmd->state;
|
||||||
grub_uint16_t xy;
|
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
|
@ -77,9 +77,7 @@ grub_cmd_sleep (grub_extcmd_t cmd, int argc, char **args)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
xy = grub_getxy ();
|
pos = grub_term_save_pos ();
|
||||||
x = xy >> 8;
|
|
||||||
y = xy & 0xff;
|
|
||||||
|
|
||||||
for (; n; n--)
|
for (; n; n--)
|
||||||
{
|
{
|
||||||
|
@ -105,8 +103,8 @@ static grub_extcmd_t cmd;
|
||||||
GRUB_MOD_INIT(sleep)
|
GRUB_MOD_INIT(sleep)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("sleep", grub_cmd_sleep, GRUB_COMMAND_FLAG_BOTH,
|
cmd = grub_register_extcmd ("sleep", grub_cmd_sleep, GRUB_COMMAND_FLAG_BOTH,
|
||||||
"sleep NUMBER_OF_SECONDS",
|
N_("NUMBER_OF_SECONDS"),
|
||||||
"Wait for a specified number of seconds.",
|
N_("Wait for a specified number of seconds."),
|
||||||
options);
|
options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
368
commands/terminal.c
Normal file
368
commands/terminal.c
Normal file
|
@ -0,0 +1,368 @@
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2009,2010 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/mm.h>
|
||||||
|
#include <grub/dl.h>
|
||||||
|
#include <grub/command.h>
|
||||||
|
#include <grub/term.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
|
|
||||||
|
struct grub_term_autoload *grub_term_input_autoload = NULL;
|
||||||
|
struct grub_term_autoload *grub_term_output_autoload = NULL;
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_cmd_terminal_input (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
int argc, char **args)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
grub_term_input_t term;
|
||||||
|
struct grub_term_autoload *aut;
|
||||||
|
|
||||||
|
if (argc == 0)
|
||||||
|
{
|
||||||
|
grub_puts_ (N_ ("Active input terminals:"));
|
||||||
|
FOR_ACTIVE_TERM_INPUTS(term)
|
||||||
|
grub_printf ("%s ", term->name);
|
||||||
|
grub_printf ("\n");
|
||||||
|
grub_puts_ (N_ ("Available input terminals:"));
|
||||||
|
FOR_DISABLED_TERM_INPUTS(term)
|
||||||
|
grub_printf ("%s ", term->name);
|
||||||
|
/* This is quadratic but we don't expect mode than 30 terminal
|
||||||
|
modules ever. */
|
||||||
|
for (aut = grub_term_input_autoload; aut; aut = aut->next)
|
||||||
|
{
|
||||||
|
FOR_DISABLED_TERM_INPUTS(term)
|
||||||
|
if (grub_strcmp (term->name, aut->name) == 0)
|
||||||
|
break;
|
||||||
|
if (!term)
|
||||||
|
FOR_ACTIVE_TERM_INPUTS(term)
|
||||||
|
if (grub_strcmp (term->name, aut->name) == 0)
|
||||||
|
break;
|
||||||
|
if (!term)
|
||||||
|
grub_printf ("%s ", aut->name);
|
||||||
|
}
|
||||||
|
grub_printf ("\n");
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
if (grub_strcmp (args[0], "--append") == 0
|
||||||
|
|| grub_strcmp (args[0], "--remove") == 0)
|
||||||
|
i++;
|
||||||
|
|
||||||
|
if (i == argc)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_ ("no terminal specified"));
|
||||||
|
|
||||||
|
for (; i < argc; i++)
|
||||||
|
{
|
||||||
|
int again = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
FOR_DISABLED_TERM_INPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term == 0)
|
||||||
|
FOR_ACTIVE_TERM_INPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term)
|
||||||
|
break;
|
||||||
|
if (again)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "unknown terminal '%s'\n",
|
||||||
|
args[i]);
|
||||||
|
for (aut = grub_term_input_autoload; aut; aut = aut->next)
|
||||||
|
if (grub_strcmp (args[i], aut->name) == 0)
|
||||||
|
{
|
||||||
|
grub_dl_t mod;
|
||||||
|
mod = grub_dl_load (aut->modname);
|
||||||
|
if (mod)
|
||||||
|
grub_dl_ref (mod);
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!aut)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "unknown terminal '%s'\n",
|
||||||
|
args[i]);
|
||||||
|
again = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grub_strcmp (args[0], "--append") == 0)
|
||||||
|
{
|
||||||
|
for (i = 1; i < argc; i++)
|
||||||
|
{
|
||||||
|
FOR_DISABLED_TERM_INPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term)
|
||||||
|
{
|
||||||
|
if (term->init && term->init () != GRUB_ERR_NONE)
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
grub_list_remove (GRUB_AS_LIST_P (&(grub_term_inputs_disabled)),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
grub_list_push (GRUB_AS_LIST_P (&grub_term_inputs),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grub_strcmp (args[0], "--remove") == 0)
|
||||||
|
{
|
||||||
|
for (i = 1; i < argc; i++)
|
||||||
|
{
|
||||||
|
FOR_ACTIVE_TERM_INPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term)
|
||||||
|
{
|
||||||
|
if (!term->next && term == grub_term_inputs)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
"can't remove the last terminal");
|
||||||
|
grub_list_remove (GRUB_AS_LIST_P (&(grub_term_inputs)),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
if (term->fini)
|
||||||
|
term->fini ();
|
||||||
|
grub_list_push (GRUB_AS_LIST_P (&grub_term_inputs_disabled),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
{
|
||||||
|
FOR_DISABLED_TERM_INPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term)
|
||||||
|
{
|
||||||
|
if (term->init && term->init () != GRUB_ERR_NONE)
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
grub_list_remove (GRUB_AS_LIST_P (&(grub_term_inputs_disabled)),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
grub_list_push (GRUB_AS_LIST_P (&grub_term_inputs),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FOR_ACTIVE_TERM_INPUTS(term)
|
||||||
|
{
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (i == argc)
|
||||||
|
{
|
||||||
|
if (!term->next && term == grub_term_inputs)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
"can't remove the last terminal");
|
||||||
|
grub_list_remove (GRUB_AS_LIST_P (&(grub_term_inputs)),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
if (term->fini)
|
||||||
|
term->fini ();
|
||||||
|
grub_list_push (GRUB_AS_LIST_P (&grub_term_inputs_disabled),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
grub_cmd_terminal_output (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
int argc, char **args)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
grub_term_output_t term;
|
||||||
|
struct grub_term_autoload *aut;
|
||||||
|
|
||||||
|
if (argc == 0)
|
||||||
|
{
|
||||||
|
grub_puts_ (N_ ("Active output terminals:"));
|
||||||
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
|
grub_printf ("%s ", term->name);
|
||||||
|
grub_printf ("\n");
|
||||||
|
grub_puts_ (N_ ("Available output terminals:"));
|
||||||
|
FOR_DISABLED_TERM_OUTPUTS(term)
|
||||||
|
grub_printf ("%s ", term->name);
|
||||||
|
/* This is quadratic but we don't expect mode than 30 terminal
|
||||||
|
modules ever. */
|
||||||
|
for (aut = grub_term_output_autoload; aut; aut = aut->next)
|
||||||
|
{
|
||||||
|
FOR_DISABLED_TERM_OUTPUTS(term)
|
||||||
|
if (grub_strcmp (term->name, aut->name) == 0)
|
||||||
|
break;
|
||||||
|
if (!term)
|
||||||
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
|
if (grub_strcmp (term->name, aut->name) == 0)
|
||||||
|
break;
|
||||||
|
if (!term)
|
||||||
|
grub_printf ("%s ", aut->name);
|
||||||
|
}
|
||||||
|
grub_printf ("\n");
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
i = 0;
|
||||||
|
|
||||||
|
if (grub_strcmp (args[0], "--append") == 0
|
||||||
|
|| grub_strcmp (args[0], "--remove") == 0)
|
||||||
|
i++;
|
||||||
|
|
||||||
|
if (i == argc)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_ ("no terminal specified"));
|
||||||
|
|
||||||
|
for (; i < argc; i++)
|
||||||
|
{
|
||||||
|
int again = 0;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
FOR_DISABLED_TERM_OUTPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term == 0)
|
||||||
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term)
|
||||||
|
break;
|
||||||
|
if (again)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "unknown terminal '%s'\n",
|
||||||
|
args[i]);
|
||||||
|
for (aut = grub_term_output_autoload; aut; aut = aut->next)
|
||||||
|
if (grub_strcmp (args[i], aut->name) == 0)
|
||||||
|
{
|
||||||
|
grub_dl_t mod;
|
||||||
|
mod = grub_dl_load (aut->modname);
|
||||||
|
if (mod)
|
||||||
|
grub_dl_ref (mod);
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!aut)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "unknown terminal '%s'\n",
|
||||||
|
args[i]);
|
||||||
|
again = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grub_strcmp (args[0], "--append") == 0)
|
||||||
|
{
|
||||||
|
for (i = 1; i < argc; i++)
|
||||||
|
{
|
||||||
|
FOR_DISABLED_TERM_OUTPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term)
|
||||||
|
{
|
||||||
|
if (term->init && term->init () != GRUB_ERR_NONE)
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
grub_list_remove (GRUB_AS_LIST_P (&(grub_term_outputs_disabled)),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
grub_list_push (GRUB_AS_LIST_P (&grub_term_outputs),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grub_strcmp (args[0], "--remove") == 0)
|
||||||
|
{
|
||||||
|
for (i = 1; i < argc; i++)
|
||||||
|
{
|
||||||
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term)
|
||||||
|
{
|
||||||
|
if (!term->next && term == grub_term_outputs)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
"can't remove the last terminal");
|
||||||
|
grub_list_remove (GRUB_AS_LIST_P (&(grub_term_outputs)),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
if (term->fini)
|
||||||
|
term->fini ();
|
||||||
|
grub_list_push (GRUB_AS_LIST_P (&grub_term_outputs_disabled),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
{
|
||||||
|
FOR_DISABLED_TERM_OUTPUTS(term)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (term)
|
||||||
|
{
|
||||||
|
if (term->init && term->init () != GRUB_ERR_NONE)
|
||||||
|
return grub_errno;
|
||||||
|
|
||||||
|
grub_list_remove (GRUB_AS_LIST_P (&(grub_term_outputs_disabled)),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
grub_list_push (GRUB_AS_LIST_P (&grub_term_outputs),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
|
{
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
if (grub_strcmp (args[i], term->name) == 0)
|
||||||
|
break;
|
||||||
|
if (i == argc)
|
||||||
|
{
|
||||||
|
if (!term->next && term == grub_term_outputs)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
|
"can't remove the last terminal");
|
||||||
|
grub_list_remove (GRUB_AS_LIST_P (&(grub_term_outputs)),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
if (term->fini)
|
||||||
|
term->fini ();
|
||||||
|
grub_list_push (GRUB_AS_LIST_P (&grub_term_outputs_disabled),
|
||||||
|
GRUB_AS_LIST (term));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_command_t cmd_terminal_input, cmd_terminal_output;
|
||||||
|
|
||||||
|
GRUB_MOD_INIT(terminal)
|
||||||
|
{
|
||||||
|
cmd_terminal_input =
|
||||||
|
grub_register_command ("terminal_input", grub_cmd_terminal_input,
|
||||||
|
"[--append|--remove] "
|
||||||
|
"[TERMINAL1] [TERMINAL2] ...",
|
||||||
|
"List or select an input terminal.");
|
||||||
|
cmd_terminal_output =
|
||||||
|
grub_register_command ("terminal_output", grub_cmd_terminal_output,
|
||||||
|
"[--append|--remove] "
|
||||||
|
"[TERMINAL1] [TERMINAL2] ...",
|
||||||
|
"List or select an output terminal.");
|
||||||
|
}
|
||||||
|
|
||||||
|
GRUB_MOD_FINI(terminal)
|
||||||
|
{
|
||||||
|
grub_unregister_command (cmd_terminal_input);
|
||||||
|
grub_unregister_command (cmd_terminal_output);
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
/* test.c -- The test command.. */
|
/* test.c -- The test command.. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2005,2007 Free Software Foundation, Inc.
|
* Copyright (C) 2005,2007,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -25,6 +25,7 @@
|
||||||
#include <grub/device.h>
|
#include <grub/device.h>
|
||||||
#include <grub/file.h>
|
#include <grub/file.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
/* A simple implementation for signed numbers. */
|
/* A simple implementation for signed numbers. */
|
||||||
static int
|
static int
|
||||||
|
@ -420,9 +421,9 @@ static grub_command_t cmd_1, cmd_2;
|
||||||
GRUB_MOD_INIT(test)
|
GRUB_MOD_INIT(test)
|
||||||
{
|
{
|
||||||
cmd_1 = grub_register_command ("[", grub_cmd_test,
|
cmd_1 = grub_register_command ("[", grub_cmd_test,
|
||||||
"[ EXPRESSION ]", "Evaluate an expression.");
|
N_("EXPRESSION ]"), N_("Evaluate an expression."));
|
||||||
cmd_2 = grub_register_command ("test", grub_cmd_test,
|
cmd_2 = grub_register_command ("test", grub_cmd_test,
|
||||||
"test EXPRESSION", "Evaluate an expression.");
|
N_("EXPRESSION"), N_("Evaluate an expression."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(test)
|
GRUB_MOD_FINI(test)
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_true (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_true (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
|
@ -43,10 +44,10 @@ GRUB_MOD_INIT(true)
|
||||||
{
|
{
|
||||||
cmd_true =
|
cmd_true =
|
||||||
grub_register_command ("true", grub_cmd_true,
|
grub_register_command ("true", grub_cmd_true,
|
||||||
0, "Do nothing, successfully.");
|
0, N_("Do nothing, successfully."));
|
||||||
cmd_false =
|
cmd_false =
|
||||||
grub_register_command ("false", grub_cmd_false,
|
grub_register_command ("false", grub_cmd_false,
|
||||||
0, "Do nothing, unsuccessfully.");
|
0, N_("Do nothing, unsuccessfully."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(true)
|
GRUB_MOD_FINI(true)
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/usb.h>
|
#include <grub/usb.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static const char *usb_classes[] =
|
static const char *usb_classes[] =
|
||||||
{
|
{
|
||||||
|
@ -195,7 +196,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(usbtest)
|
GRUB_MOD_INIT(usbtest)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("usb", grub_cmd_usbtest,
|
cmd = grub_register_command ("usb", grub_cmd_usbtest,
|
||||||
0, "Test USB support.");
|
0, N_("Test USB support."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(usbtest)
|
GRUB_MOD_FINI(usbtest)
|
||||||
|
|
|
@ -24,15 +24,14 @@
|
||||||
#include <grub/font.h>
|
#include <grub/font.h>
|
||||||
#include <grub/term.h>
|
#include <grub/term.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_videotest (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_videotest (grub_command_t cmd __attribute__ ((unused)),
|
||||||
int argc __attribute__ ((unused)),
|
int argc __attribute__ ((unused)),
|
||||||
char **args __attribute__ ((unused)))
|
char **args __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
if (grub_video_set_mode ("1024x768;800x600;640x480", 0) != GRUB_ERR_NONE)
|
grub_err_t err;
|
||||||
return grub_errno;
|
|
||||||
|
|
||||||
grub_video_color_t color;
|
grub_video_color_t color;
|
||||||
unsigned int x;
|
unsigned int x;
|
||||||
unsigned int y;
|
unsigned int y;
|
||||||
|
@ -49,6 +48,10 @@ grub_cmd_videotest (grub_command_t cmd __attribute__ ((unused)),
|
||||||
const char *str;
|
const char *str;
|
||||||
int texty;
|
int texty;
|
||||||
|
|
||||||
|
err = grub_video_set_mode ("auto", GRUB_VIDEO_MODE_TYPE_PURE_TEXT, 0);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
grub_video_get_viewport (&x, &y, &width, &height);
|
grub_video_get_viewport (&x, &y, &width, &height);
|
||||||
|
|
||||||
grub_video_create_render_target (&text_layer, width, height,
|
grub_video_create_render_target (&text_layer, width, height,
|
||||||
|
@ -71,7 +74,7 @@ grub_cmd_videotest (grub_command_t cmd __attribute__ ((unused)),
|
||||||
sanssmall = grub_font_get ("Helvetica 8");
|
sanssmall = grub_font_get ("Helvetica 8");
|
||||||
fixed = grub_font_get ("Fixed 20");
|
fixed = grub_font_get ("Fixed 20");
|
||||||
if (! sansbig || ! sans || ! sanssmall || ! fixed)
|
if (! sansbig || ! sans || ! sanssmall || ! fixed)
|
||||||
return grub_error (GRUB_ERR_BAD_FONT, "No font loaded.");
|
return grub_error (GRUB_ERR_BAD_FONT, "no font loaded");
|
||||||
|
|
||||||
glyph = grub_font_get_glyph (fixed, '*');
|
glyph = grub_font_get_glyph (fixed, '*');
|
||||||
grub_font_draw_glyph (glyph, color, 200 ,0);
|
grub_font_draw_glyph (glyph, color, 200 ,0);
|
||||||
|
@ -152,12 +155,13 @@ grub_cmd_videotest (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
|
||||||
grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY);
|
grub_video_set_active_render_target (GRUB_VIDEO_RENDER_TARGET_DISPLAY);
|
||||||
|
|
||||||
for (i = 0; i < 255; i++)
|
for (i = 0; i < 5; i++)
|
||||||
{
|
{
|
||||||
color = grub_video_map_rgb (i, 33, 77);
|
color = grub_video_map_rgb (i, 33, 77);
|
||||||
grub_video_fill_rect (color, 0, 0, width, height);
|
grub_video_fill_rect (color, 0, 0, width, height);
|
||||||
grub_video_blit_render_target (text_layer, GRUB_VIDEO_BLIT_BLEND, 0, 0,
|
grub_video_blit_render_target (text_layer, GRUB_VIDEO_BLIT_BLEND, 0, 0,
|
||||||
0, 0, width, height);
|
0, 0, width, height);
|
||||||
|
grub_video_swap_buffers ();
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_getkey ();
|
grub_getkey ();
|
||||||
|
@ -178,7 +182,7 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT(videotest)
|
GRUB_MOD_INIT(videotest)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("videotest", grub_cmd_videotest,
|
cmd = grub_register_command ("videotest", grub_cmd_videotest,
|
||||||
0, "Test video subsystem.");
|
0, N_("Test video subsystem."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(videotest)
|
GRUB_MOD_FINI(videotest)
|
||||||
|
|
|
@ -31,12 +31,8 @@
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
struct tohash
|
#include <grub/crypto.h>
|
||||||
{
|
|
||||||
grub_uint8_t prefix[16];
|
|
||||||
grub_uint64_t serial;
|
|
||||||
} __attribute__ ((packed));
|
|
||||||
|
|
||||||
/* This prefix is used by xnu and boot-132 to hash
|
/* This prefix is used by xnu and boot-132 to hash
|
||||||
together with volume serial. */
|
together with volume serial. */
|
||||||
|
@ -44,312 +40,28 @@ static grub_uint8_t hash_prefix[16]
|
||||||
= {0xB3, 0xE2, 0x0F, 0x39, 0xF2, 0x92, 0x11, 0xD6,
|
= {0xB3, 0xE2, 0x0F, 0x39, 0xF2, 0x92, 0x11, 0xD6,
|
||||||
0x97, 0xA4, 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC};
|
0x97, 0xA4, 0x00, 0x30, 0x65, 0x43, 0xEC, 0xAC};
|
||||||
|
|
||||||
#define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) )
|
|
||||||
#define ror(x,n) ( ((x) >> (n)) | ((x) << (32-(n))) )
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
grub_uint32_t A,B,C,D; /* chaining variables */
|
|
||||||
grub_uint32_t nblocks;
|
|
||||||
grub_uint8_t buf[64];
|
|
||||||
int count;
|
|
||||||
} MD5_CONTEXT;
|
|
||||||
|
|
||||||
static void
|
|
||||||
md5_init( void *context )
|
|
||||||
{
|
|
||||||
MD5_CONTEXT *ctx = context;
|
|
||||||
|
|
||||||
ctx->A = 0x67452301;
|
|
||||||
ctx->B = 0xefcdab89;
|
|
||||||
ctx->C = 0x98badcfe;
|
|
||||||
ctx->D = 0x10325476;
|
|
||||||
|
|
||||||
ctx->nblocks = 0;
|
|
||||||
ctx->count = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* These are the four functions used in the four steps of the MD5 algorithm
|
|
||||||
and defined in the RFC 1321. The first function is a little bit optimized
|
|
||||||
(as found in Colin Plumbs public domain implementation). */
|
|
||||||
/* #define FF(b, c, d) ((b & c) | (~b & d)) */
|
|
||||||
#define FF(b, c, d) (d ^ (b & (c ^ d)))
|
|
||||||
#define FG(b, c, d) FF (d, b, c)
|
|
||||||
#define FH(b, c, d) (b ^ c ^ d)
|
|
||||||
#define FI(b, c, d) (c ^ (b | ~d))
|
|
||||||
|
|
||||||
|
|
||||||
/****************
|
|
||||||
* transform n*64 grub_uint8_ts
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
transform ( MD5_CONTEXT *ctx, const unsigned char *data )
|
|
||||||
{
|
|
||||||
grub_uint32_t correct_words[16];
|
|
||||||
register grub_uint32_t A = ctx->A;
|
|
||||||
register grub_uint32_t B = ctx->B;
|
|
||||||
register grub_uint32_t C = ctx->C;
|
|
||||||
register grub_uint32_t D = ctx->D;
|
|
||||||
grub_uint32_t *cwp = correct_words;
|
|
||||||
|
|
||||||
#ifdef GRUB_CPU_WORDS_BIGENDIAN
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
const grub_uint32_t *p = (const grub_uint32_t *) data;
|
|
||||||
|
|
||||||
for (i = 0; i < 16; i++)
|
|
||||||
correct_words[i] = grub_le_to_cpu32 (p[i]);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
grub_memcpy (correct_words, data, 64);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define OP(a, b, c, d, s, T) \
|
|
||||||
do \
|
|
||||||
{ \
|
|
||||||
a += FF (b, c, d) + (*cwp++) + T; \
|
|
||||||
a = rol(a, s); \
|
|
||||||
a += b; \
|
|
||||||
} \
|
|
||||||
while (0)
|
|
||||||
|
|
||||||
/* Before we start, one word about the strange constants.
|
|
||||||
They are defined in RFC 1321 as
|
|
||||||
|
|
||||||
T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Round 1. */
|
|
||||||
OP (A, B, C, D, 7, 0xd76aa478);
|
|
||||||
OP (D, A, B, C, 12, 0xe8c7b756);
|
|
||||||
OP (C, D, A, B, 17, 0x242070db);
|
|
||||||
OP (B, C, D, A, 22, 0xc1bdceee);
|
|
||||||
OP (A, B, C, D, 7, 0xf57c0faf);
|
|
||||||
OP (D, A, B, C, 12, 0x4787c62a);
|
|
||||||
OP (C, D, A, B, 17, 0xa8304613);
|
|
||||||
OP (B, C, D, A, 22, 0xfd469501);
|
|
||||||
OP (A, B, C, D, 7, 0x698098d8);
|
|
||||||
OP (D, A, B, C, 12, 0x8b44f7af);
|
|
||||||
OP (C, D, A, B, 17, 0xffff5bb1);
|
|
||||||
OP (B, C, D, A, 22, 0x895cd7be);
|
|
||||||
OP (A, B, C, D, 7, 0x6b901122);
|
|
||||||
OP (D, A, B, C, 12, 0xfd987193);
|
|
||||||
OP (C, D, A, B, 17, 0xa679438e);
|
|
||||||
OP (B, C, D, A, 22, 0x49b40821);
|
|
||||||
|
|
||||||
#undef OP
|
|
||||||
#define OP(f, a, b, c, d, k, s, T) \
|
|
||||||
do \
|
|
||||||
{ \
|
|
||||||
a += f (b, c, d) + correct_words[k] + T; \
|
|
||||||
a = rol(a, s); \
|
|
||||||
a += b; \
|
|
||||||
} \
|
|
||||||
while (0)
|
|
||||||
|
|
||||||
/* Round 2. */
|
|
||||||
OP (FG, A, B, C, D, 1, 5, 0xf61e2562);
|
|
||||||
OP (FG, D, A, B, C, 6, 9, 0xc040b340);
|
|
||||||
OP (FG, C, D, A, B, 11, 14, 0x265e5a51);
|
|
||||||
OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa);
|
|
||||||
OP (FG, A, B, C, D, 5, 5, 0xd62f105d);
|
|
||||||
OP (FG, D, A, B, C, 10, 9, 0x02441453);
|
|
||||||
OP (FG, C, D, A, B, 15, 14, 0xd8a1e681);
|
|
||||||
OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8);
|
|
||||||
OP (FG, A, B, C, D, 9, 5, 0x21e1cde6);
|
|
||||||
OP (FG, D, A, B, C, 14, 9, 0xc33707d6);
|
|
||||||
OP (FG, C, D, A, B, 3, 14, 0xf4d50d87);
|
|
||||||
OP (FG, B, C, D, A, 8, 20, 0x455a14ed);
|
|
||||||
OP (FG, A, B, C, D, 13, 5, 0xa9e3e905);
|
|
||||||
OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8);
|
|
||||||
OP (FG, C, D, A, B, 7, 14, 0x676f02d9);
|
|
||||||
OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a);
|
|
||||||
|
|
||||||
/* Round 3. */
|
|
||||||
OP (FH, A, B, C, D, 5, 4, 0xfffa3942);
|
|
||||||
OP (FH, D, A, B, C, 8, 11, 0x8771f681);
|
|
||||||
OP (FH, C, D, A, B, 11, 16, 0x6d9d6122);
|
|
||||||
OP (FH, B, C, D, A, 14, 23, 0xfde5380c);
|
|
||||||
OP (FH, A, B, C, D, 1, 4, 0xa4beea44);
|
|
||||||
OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9);
|
|
||||||
OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60);
|
|
||||||
OP (FH, B, C, D, A, 10, 23, 0xbebfbc70);
|
|
||||||
OP (FH, A, B, C, D, 13, 4, 0x289b7ec6);
|
|
||||||
OP (FH, D, A, B, C, 0, 11, 0xeaa127fa);
|
|
||||||
OP (FH, C, D, A, B, 3, 16, 0xd4ef3085);
|
|
||||||
OP (FH, B, C, D, A, 6, 23, 0x04881d05);
|
|
||||||
OP (FH, A, B, C, D, 9, 4, 0xd9d4d039);
|
|
||||||
OP (FH, D, A, B, C, 12, 11, 0xe6db99e5);
|
|
||||||
OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8);
|
|
||||||
OP (FH, B, C, D, A, 2, 23, 0xc4ac5665);
|
|
||||||
|
|
||||||
/* Round 4. */
|
|
||||||
OP (FI, A, B, C, D, 0, 6, 0xf4292244);
|
|
||||||
OP (FI, D, A, B, C, 7, 10, 0x432aff97);
|
|
||||||
OP (FI, C, D, A, B, 14, 15, 0xab9423a7);
|
|
||||||
OP (FI, B, C, D, A, 5, 21, 0xfc93a039);
|
|
||||||
OP (FI, A, B, C, D, 12, 6, 0x655b59c3);
|
|
||||||
OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92);
|
|
||||||
OP (FI, C, D, A, B, 10, 15, 0xffeff47d);
|
|
||||||
OP (FI, B, C, D, A, 1, 21, 0x85845dd1);
|
|
||||||
OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f);
|
|
||||||
OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0);
|
|
||||||
OP (FI, C, D, A, B, 6, 15, 0xa3014314);
|
|
||||||
OP (FI, B, C, D, A, 13, 21, 0x4e0811a1);
|
|
||||||
OP (FI, A, B, C, D, 4, 6, 0xf7537e82);
|
|
||||||
OP (FI, D, A, B, C, 11, 10, 0xbd3af235);
|
|
||||||
OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb);
|
|
||||||
OP (FI, B, C, D, A, 9, 21, 0xeb86d391);
|
|
||||||
|
|
||||||
/* Put checksum in context given as argument. */
|
|
||||||
ctx->A += A;
|
|
||||||
ctx->B += B;
|
|
||||||
ctx->C += C;
|
|
||||||
ctx->D += D;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The routine updates the message-digest context to
|
|
||||||
* account for the presence of each of the characters inBuf[0..inLen-1]
|
|
||||||
* in the message whose digest is being computed.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
md5_write( void *context, const void *inbuf_arg , grub_size_t inlen)
|
|
||||||
{
|
|
||||||
const unsigned char *inbuf = inbuf_arg;
|
|
||||||
MD5_CONTEXT *hd = context;
|
|
||||||
|
|
||||||
if( hd->count == 64 ) /* flush the buffer */
|
|
||||||
{
|
|
||||||
transform( hd, hd->buf );
|
|
||||||
// _gcry_burn_stack (80+6*sizeof(void*));
|
|
||||||
hd->count = 0;
|
|
||||||
hd->nblocks++;
|
|
||||||
}
|
|
||||||
if( !inbuf )
|
|
||||||
return;
|
|
||||||
|
|
||||||
if( hd->count )
|
|
||||||
{
|
|
||||||
for( ; inlen && hd->count < 64; inlen-- )
|
|
||||||
hd->buf[hd->count++] = *inbuf++;
|
|
||||||
md5_write( hd, NULL, 0 );
|
|
||||||
if( !inlen )
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// _gcry_burn_stack (80+6*sizeof(void*));
|
|
||||||
|
|
||||||
while( inlen >= 64 )
|
|
||||||
{
|
|
||||||
transform( hd, inbuf );
|
|
||||||
hd->count = 0;
|
|
||||||
hd->nblocks++;
|
|
||||||
inlen -= 64;
|
|
||||||
inbuf += 64;
|
|
||||||
}
|
|
||||||
for( ; inlen && hd->count < 64; inlen-- )
|
|
||||||
hd->buf[hd->count++] = *inbuf++;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* The routine final terminates the message-digest computation and
|
|
||||||
* ends with the desired message digest in mdContext->digest[0...15].
|
|
||||||
* The handle is prepared for a new MD5 cycle.
|
|
||||||
* Returns 16 grub_uint8_ts representing the digest.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
md5_final( void *context)
|
|
||||||
{
|
|
||||||
MD5_CONTEXT *hd = context;
|
|
||||||
grub_uint32_t t, msb, lsb;
|
|
||||||
grub_uint32_t *p;
|
|
||||||
|
|
||||||
md5_write(hd, NULL, 0); /* flush */;
|
|
||||||
|
|
||||||
t = hd->nblocks;
|
|
||||||
/* multiply by 64 to make a grub_uint8_t count */
|
|
||||||
lsb = t << 6;
|
|
||||||
msb = t >> 26;
|
|
||||||
/* add the count */
|
|
||||||
t = lsb;
|
|
||||||
if( (lsb += hd->count) < t )
|
|
||||||
msb++;
|
|
||||||
/* multiply by 8 to make a bit count */
|
|
||||||
t = lsb;
|
|
||||||
lsb <<= 3;
|
|
||||||
msb <<= 3;
|
|
||||||
msb |= t >> 29;
|
|
||||||
|
|
||||||
if( hd->count < 56 ) /* enough room */
|
|
||||||
{
|
|
||||||
hd->buf[hd->count++] = 0x80; /* pad */
|
|
||||||
while( hd->count < 56 )
|
|
||||||
hd->buf[hd->count++] = 0; /* pad */
|
|
||||||
}
|
|
||||||
else /* need one extra block */
|
|
||||||
{
|
|
||||||
hd->buf[hd->count++] = 0x80; /* pad character */
|
|
||||||
while( hd->count < 64 )
|
|
||||||
hd->buf[hd->count++] = 0;
|
|
||||||
md5_write(hd, NULL, 0); /* flush */;
|
|
||||||
grub_memset(hd->buf, 0, 56 ); /* fill next block with zeroes */
|
|
||||||
}
|
|
||||||
/* append the 64 bit count */
|
|
||||||
hd->buf[56] = lsb ;
|
|
||||||
hd->buf[57] = lsb >> 8;
|
|
||||||
hd->buf[58] = lsb >> 16;
|
|
||||||
hd->buf[59] = lsb >> 24;
|
|
||||||
hd->buf[60] = msb ;
|
|
||||||
hd->buf[61] = msb >> 8;
|
|
||||||
hd->buf[62] = msb >> 16;
|
|
||||||
hd->buf[63] = msb >> 24;
|
|
||||||
transform( hd, hd->buf );
|
|
||||||
// _gcry_burn_stack (80+6*sizeof(void*));
|
|
||||||
|
|
||||||
p = (grub_uint32_t *) hd->buf;
|
|
||||||
#define X(a) do { *p = grub_le_to_cpu32 (hd->a); p++; } while (0)
|
|
||||||
X(A);
|
|
||||||
X(B);
|
|
||||||
X(C);
|
|
||||||
X(D);
|
|
||||||
#undef X
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GRUB2 Crypto Interface
|
|
||||||
* Written by Michael Gorven
|
|
||||||
*/
|
|
||||||
static grub_err_t
|
|
||||||
md5 (const char *in, grub_size_t insize, char *out)
|
|
||||||
{
|
|
||||||
MD5_CONTEXT hd;
|
|
||||||
|
|
||||||
md5_init (&hd);
|
|
||||||
md5_write (&hd, in, insize);
|
|
||||||
md5_final (&hd);
|
|
||||||
grub_memcpy (out, hd.buf, 16);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_xnu_uuid (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_xnu_uuid (grub_command_t cmd __attribute__ ((unused)),
|
||||||
int argc, char **args)
|
int argc, char **args)
|
||||||
{
|
{
|
||||||
struct tohash hashme;
|
grub_uint64_t serial;
|
||||||
grub_uint8_t xnu_uuid[16];
|
grub_uint8_t *xnu_uuid;
|
||||||
char uuid_string[sizeof ("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")];
|
char uuid_string[sizeof ("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")];
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
grub_uint8_t ctx[GRUB_MD_MD5->contextsize];
|
||||||
|
|
||||||
if (argc < 1)
|
if (argc < 1)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "UUID required");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "UUID required");
|
||||||
|
|
||||||
hashme.serial = grub_cpu_to_be64 (grub_strtoull (args[0], 0, 16));
|
serial = grub_cpu_to_be64 (grub_strtoull (args[0], 0, 16));
|
||||||
grub_memcpy (hashme.prefix, hash_prefix, sizeof (hashme.prefix));
|
|
||||||
|
|
||||||
md5 ((char *) &hashme, sizeof (hashme), (char *) xnu_uuid);
|
GRUB_MD_MD5->init (&ctx);
|
||||||
grub_sprintf (uuid_string,
|
GRUB_MD_MD5->write (&ctx, hash_prefix, sizeof (hash_prefix));
|
||||||
|
GRUB_MD_MD5->write (&ctx, &serial, sizeof (serial));
|
||||||
|
GRUB_MD_MD5->final (&ctx);
|
||||||
|
xnu_uuid = GRUB_MD_MD5->read (&ctx);
|
||||||
|
|
||||||
|
grub_snprintf (uuid_string, sizeof (uuid_string),
|
||||||
"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
||||||
(unsigned int) xnu_uuid[0], (unsigned int) xnu_uuid[1],
|
(unsigned int) xnu_uuid[0], (unsigned int) xnu_uuid[1],
|
||||||
(unsigned int) xnu_uuid[2], (unsigned int) xnu_uuid[3],
|
(unsigned int) xnu_uuid[2], (unsigned int) xnu_uuid[3],
|
||||||
|
@ -377,9 +89,9 @@ static grub_command_t cmd;
|
||||||
GRUB_MOD_INIT (xnu_uuid)
|
GRUB_MOD_INIT (xnu_uuid)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("xnu_uuid", grub_cmd_xnu_uuid,
|
cmd = grub_register_command ("xnu_uuid", grub_cmd_xnu_uuid,
|
||||||
"xnu_uuid GRUBUUID [VARNAME]",
|
N_("GRUBUUID [VARNAME]"),
|
||||||
"Transform 64-bit UUID to format "
|
N_("Transform 64-bit UUID to format "
|
||||||
"suitable for xnu.");
|
"suitable for XNU."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI (xnu_uuid)
|
GRUB_MOD_FINI (xnu_uuid)
|
||||||
|
|
|
@ -8,7 +8,9 @@ util/grub-emu.c_DEPENDENCIES = grub_emu_init.h
|
||||||
grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
|
grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
|
||||||
commands/configfile.c commands/echo.c commands/help.c \
|
commands/configfile.c commands/echo.c commands/help.c \
|
||||||
commands/handler.c commands/ls.c commands/test.c \
|
commands/handler.c commands/ls.c commands/test.c \
|
||||||
commands/search.c commands/blocklist.c commands/hexdump.c \
|
commands/search_wrap.c commands/search_file.c \
|
||||||
|
commands/search_label.c commands/search_uuid.c \
|
||||||
|
commands/blocklist.c commands/hexdump.c \
|
||||||
lib/hexdump.c commands/halt.c commands/reboot.c \
|
lib/hexdump.c commands/halt.c commands/reboot.c \
|
||||||
lib/envblk.c commands/loadenv.c \
|
lib/envblk.c commands/loadenv.c \
|
||||||
commands/gptsync.c commands/probe.c commands/xnu_uuid.c \
|
commands/gptsync.c commands/probe.c commands/xnu_uuid.c \
|
||||||
|
@ -21,13 +23,14 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
|
||||||
kern/err.c kern/list.c kern/handler.c \
|
kern/err.c kern/list.c kern/handler.c \
|
||||||
kern/command.c kern/corecmd.c commands/extcmd.c kern/file.c \
|
kern/command.c kern/corecmd.c commands/extcmd.c kern/file.c \
|
||||||
kern/fs.c commands/boot.c kern/main.c kern/misc.c kern/parser.c \
|
kern/fs.c commands/boot.c kern/main.c kern/misc.c kern/parser.c \
|
||||||
kern/partition.c kern/reader.c kern/term.c \
|
kern/partition.c kern/term.c \
|
||||||
kern/rescue_reader.c kern/rescue_parser.c \
|
kern/rescue_reader.c kern/rescue_parser.c \
|
||||||
lib/arg.c normal/cmdline.c normal/datetime.c normal/misc.c \
|
lib/arg.c normal/cmdline.c normal/datetime.c normal/misc.c \
|
||||||
normal/handler.c normal/auth.c normal/autofs.c \
|
normal/handler.c normal/auth.c lib/crypto.c normal/autofs.c \
|
||||||
normal/completion.c normal/main.c normal/color.c \
|
normal/completion.c normal/main.c normal/color.c \
|
||||||
normal/menu.c normal/menu_entry.c normal/menu_viewer.c \
|
normal/menu.c normal/menu_entry.c \
|
||||||
normal/menu_text.c normal/context.c \
|
normal/menu_text.c normal/crypto.c normal/term.c \
|
||||||
|
commands/terminal.c normal/context.c lib/charset.c \
|
||||||
script/main.c script/execute.c script/function.c \
|
script/main.c script/execute.c script/function.c \
|
||||||
script/lexer.c script/script.c grub_script.tab.c \
|
script/lexer.c script/script.c grub_script.tab.c \
|
||||||
partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
|
partmap/amiga.c partmap/apple.c partmap/msdos.c partmap/sun.c \
|
||||||
|
@ -45,7 +48,10 @@ grub_emu_SOURCES = commands/minicmd.c commands/cat.c commands/cmp.c \
|
||||||
disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \
|
disk/raid.c disk/raid5_recover.c disk/raid6_recover.c \
|
||||||
disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \
|
disk/mdraid_linux.c disk/dmraid_nvidia.c disk/lvm.c \
|
||||||
commands/parttool.c parttool/msdospart.c \
|
commands/parttool.c parttool/msdospart.c \
|
||||||
|
lib/libgcrypt-grub/cipher/md5.c \
|
||||||
grub_emu_init.c gnulib/progname.c
|
grub_emu_init.c gnulib/progname.c
|
||||||
|
grub_emu_CFLAGS += -Wno-missing-field-initializers -Wno-error -I$(srcdir)/lib/libgcrypt_wrap
|
||||||
|
|
||||||
|
|
||||||
ifeq ($(target_cpu), i386)
|
ifeq ($(target_cpu), i386)
|
||||||
grub_emu_SOURCES += commands/i386/cpuid.c
|
grub_emu_SOURCES += commands/i386/cpuid.c
|
||||||
|
@ -92,3 +98,6 @@ endif
|
||||||
grub_script.tab.c grub_script.tab.h: script/parser.y
|
grub_script.tab.c grub_script.tab.h: script/parser.y
|
||||||
$(YACC) -d -p grub_script_yy -b grub_script $(srcdir)/script/parser.y
|
$(YACC) -d -p grub_script_yy -b grub_script $(srcdir)/script/parser.y
|
||||||
DISTCLEANFILES += grub_script.tab.c grub_script.tab.h
|
DISTCLEANFILES += grub_script.tab.c grub_script.tab.h
|
||||||
|
|
||||||
|
bin_UTILITIES += grub-bin2h
|
||||||
|
grub_bin2h_SOURCES = gnulib/progname.c util/bin2h.c
|
||||||
|
|
112
conf/common.rmk
112
conf/common.rmk
|
@ -88,11 +88,35 @@ endif
|
||||||
bin_UTILITIES += grub-mkrelpath
|
bin_UTILITIES += grub-mkrelpath
|
||||||
grub_mkrelpath_SOURCES = gnulib/progname.c util/grub-mkrelpath.c util/misc.c
|
grub_mkrelpath_SOURCES = gnulib/progname.c util/grub-mkrelpath.c util/misc.c
|
||||||
|
|
||||||
|
bin_UTILITIES += grub-bin2h
|
||||||
|
grub_bin2h_SOURCES = gnulib/progname.c util/bin2h.c
|
||||||
|
|
||||||
|
# For grub-script-check.
|
||||||
|
bin_UTILITIES += grub-script-check
|
||||||
|
util/grub-script-check.c_DEPENDENCIES = grub_script_check_init.h
|
||||||
|
grub_script_check_SOURCES = gnulib/progname.c util/grub-script-check.c util/misc.c \
|
||||||
|
script/main.c script/script.c script/function.c script/lexer.c \
|
||||||
|
kern/handler.c kern/err.c kern/parser.c kern/list.c \
|
||||||
|
kern/misc.c kern/env.c grub_script_check_init.c grub_script.tab.c
|
||||||
|
|
||||||
# For the parser.
|
# For the parser.
|
||||||
grub_script.tab.c grub_script.tab.h: script/parser.y
|
grub_script.tab.c grub_script.tab.h: script/parser.y
|
||||||
$(YACC) -d -p grub_script_yy -b grub_script $(srcdir)/script/parser.y
|
$(YACC) -d -p grub_script_yy -b grub_script $(srcdir)/script/parser.y
|
||||||
DISTCLEANFILES += grub_script.tab.c grub_script.tab.h
|
DISTCLEANFILES += grub_script.tab.c grub_script.tab.h
|
||||||
|
|
||||||
|
# For grub-script-check.
|
||||||
|
grub_script_check_init.lst: geninit.sh $(filter-out grub_script_check_init.c,$(grub_script_check_SOURCES))
|
||||||
|
rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@
|
||||||
|
DISTCLEANFILES += grub_script_check_init.lst
|
||||||
|
|
||||||
|
grub_script_check_init.h: grub_script_check_init.lst $(filter-out grub_script_check_init.c,$(grub_script_check_SOURCES)) geninitheader.sh
|
||||||
|
rm -f $@; sh $(srcdir)/geninitheader.sh $< > $@
|
||||||
|
DISTCLEANFILES += grub_script_check_init.h
|
||||||
|
|
||||||
|
grub_script_check_init.c: grub_script_check_init.lst $(filter-out grub_script_check_init.c,$(grub_script_check_SOURCES)) geninit.sh
|
||||||
|
rm -f $@; sh $(srcdir)/geninit.sh $< $(filter %.c,$^) > $@
|
||||||
|
DISTCLEANFILES += grub_script_check_init.c
|
||||||
|
|
||||||
# For grub-probe.
|
# For grub-probe.
|
||||||
grub_probe_init.lst: geninit.sh $(filter-out grub_probe_init.c,$(grub_probe_SOURCES))
|
grub_probe_init.lst: geninit.sh $(filter-out grub_probe_init.c,$(grub_probe_SOURCES))
|
||||||
rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@
|
rm -f $@; grep GRUB_MOD_INIT $(filter %.c,$^) /dev/null > $@
|
||||||
|
@ -185,6 +209,20 @@ CLEANFILES += $(grub-mkconfig_SCRIPTS)
|
||||||
|
|
||||||
grub-mkconfig_DATA += util/grub.d/README
|
grub-mkconfig_DATA += util/grub.d/README
|
||||||
|
|
||||||
|
# For grub-set-default.
|
||||||
|
grub-set-default: util/grub-set-default.in config.status
|
||||||
|
./config.status --file=$@:$<
|
||||||
|
chmod +x $@
|
||||||
|
sbin_SCRIPTS += grub-set-default
|
||||||
|
CLEANFILES += grub-set-default
|
||||||
|
|
||||||
|
# For grub-reboot.
|
||||||
|
grub-reboot: util/grub-reboot.in config.status
|
||||||
|
./config.status --file=$@:$<
|
||||||
|
chmod +x $@
|
||||||
|
sbin_SCRIPTS += grub-reboot
|
||||||
|
CLEANFILES += grub-reboot
|
||||||
|
|
||||||
# Filing systems.
|
# Filing systems.
|
||||||
pkglib_MODULES += fshelp.mod fat.mod ufs1.mod ufs2.mod ext2.mod ntfs.mod \
|
pkglib_MODULES += fshelp.mod fat.mod ufs1.mod ufs2.mod ext2.mod ntfs.mod \
|
||||||
ntfscomp.mod minix.mod hfs.mod jfs.mod iso9660.mod xfs.mod \
|
ntfscomp.mod minix.mod hfs.mod jfs.mod iso9660.mod xfs.mod \
|
||||||
|
@ -381,7 +419,7 @@ scsi_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
# Commands.
|
# Commands.
|
||||||
pkglib_MODULES += minicmd.mod extcmd.mod hello.mod handler.mod \
|
pkglib_MODULES += minicmd.mod extcmd.mod hello.mod handler.mod \
|
||||||
ls.mod cmp.mod cat.mod help.mod search.mod loopback.mod \
|
ls.mod cmp.mod cat.mod help.mod search.mod loopback.mod \
|
||||||
fs_file.mod fs_uuid.mod configfile.mod echo.mod \
|
configfile.mod echo.mod \
|
||||||
terminfo.mod test.mod blocklist.mod hexdump.mod \
|
terminfo.mod test.mod blocklist.mod hexdump.mod \
|
||||||
read.mod sleep.mod loadenv.mod crc.mod parttool.mod \
|
read.mod sleep.mod loadenv.mod crc.mod parttool.mod \
|
||||||
msdospart.mod memrw.mod normal.mod sh.mod \
|
msdospart.mod memrw.mod normal.mod sh.mod \
|
||||||
|
@ -454,10 +492,27 @@ help_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
help_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
help_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For search.mod.
|
# For search.mod.
|
||||||
search_mod_SOURCES = commands/search.c
|
search_mod_SOURCES = commands/search_wrap.c
|
||||||
search_mod_CFLAGS = $(COMMON_CFLAGS)
|
search_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
search_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
search_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
pkglib_MODULES += search_fs_file.mod search_fs_uuid.mod search_label.mod
|
||||||
|
|
||||||
|
# For search.mod.
|
||||||
|
search_fs_file_mod_SOURCES = commands/search_file.c
|
||||||
|
search_fs_file_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
search_fs_file_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For search.mod.
|
||||||
|
search_label_mod_SOURCES = commands/search_label.c
|
||||||
|
search_label_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
search_label_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For search.mod.
|
||||||
|
search_fs_uuid_mod_SOURCES = commands/search_uuid.c
|
||||||
|
search_fs_uuid_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
search_fs_uuid_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For test.mod.
|
# For test.mod.
|
||||||
test_mod_SOURCES = commands/test.c
|
test_mod_SOURCES = commands/test.c
|
||||||
test_mod_CFLAGS = $(COMMON_CFLAGS)
|
test_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
@ -468,16 +523,6 @@ loopback_mod_SOURCES = disk/loopback.c
|
||||||
loopback_mod_CFLAGS = $(COMMON_CFLAGS)
|
loopback_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
loopback_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
loopback_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For fs_file.mod
|
|
||||||
fs_file_mod_SOURCES = disk/fs_file.c
|
|
||||||
fs_file_mod_CFLAGS = $(COMMON_CFLAGS)
|
|
||||||
fs_file_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
|
||||||
|
|
||||||
# For fs_uuid.mod
|
|
||||||
fs_uuid_mod_SOURCES = disk/fs_uuid.c
|
|
||||||
fs_uuid_mod_CFLAGS = $(COMMON_CFLAGS)
|
|
||||||
fs_uuid_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
|
||||||
|
|
||||||
# For configfile.mod
|
# For configfile.mod
|
||||||
configfile_mod_SOURCES = commands/configfile.c
|
configfile_mod_SOURCES = commands/configfile.c
|
||||||
configfile_mod_CFLAGS = $(COMMON_CFLAGS)
|
configfile_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
@ -542,8 +587,8 @@ keystatus_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
normal_mod_SOURCES = normal/main.c normal/cmdline.c normal/dyncmd.c \
|
normal_mod_SOURCES = normal/main.c normal/cmdline.c normal/dyncmd.c \
|
||||||
normal/auth.c normal/autofs.c normal/handler.c \
|
normal/auth.c normal/autofs.c normal/handler.c \
|
||||||
normal/color.c normal/completion.c normal/datetime.c normal/menu.c \
|
normal/color.c normal/completion.c normal/datetime.c normal/menu.c \
|
||||||
normal/menu_entry.c normal/menu_text.c normal/menu_viewer.c \
|
normal/menu_entry.c normal/menu_text.c \
|
||||||
normal/misc.c normal/context.c
|
normal/misc.c normal/crypto.c normal/term.c normal/context.c
|
||||||
normal_mod_CFLAGS = $(COMMON_CFLAGS)
|
normal_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
normal_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
normal_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
@ -555,7 +600,7 @@ sh_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# Common Video Subsystem specific modules.
|
# Common Video Subsystem specific modules.
|
||||||
pkglib_MODULES += video.mod videotest.mod bitmap.mod tga.mod jpeg.mod \
|
pkglib_MODULES += video.mod videotest.mod bitmap.mod tga.mod jpeg.mod \
|
||||||
png.mod font.mod gfxterm.mod video_fb.mod
|
png.mod gfxterm.mod video_fb.mod
|
||||||
|
|
||||||
# For video.mod.
|
# For video.mod.
|
||||||
video_mod_SOURCES = video/video.c
|
video_mod_SOURCES = video/video.c
|
||||||
|
@ -592,7 +637,10 @@ png_mod_SOURCES = video/readers/png.c
|
||||||
png_mod_CFLAGS = $(COMMON_CFLAGS)
|
png_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
png_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
png_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For font.mod.
|
pkglib_MODULES += font.mod
|
||||||
|
ifneq (, $(FONT_SOURCE))
|
||||||
|
font/font.c_DEPENDENCIES = ascii.h
|
||||||
|
endif
|
||||||
font_mod_SOURCES = font/font_cmd.c font/font.c
|
font_mod_SOURCES = font/font_cmd.c font/font.c
|
||||||
font_mod_CFLAGS = $(COMMON_CFLAGS)
|
font_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
font_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
font_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
@ -643,3 +691,35 @@ pkglib_MODULES += charset.mod
|
||||||
charset_mod_SOURCES = lib/charset.c
|
charset_mod_SOURCES = lib/charset.c
|
||||||
charset_mod_CFLAGS = $(COMMON_CFLAGS)
|
charset_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
charset_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
charset_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
pkglib_MODULES += terminal.mod
|
||||||
|
terminal_mod_SOURCES = commands/terminal.c
|
||||||
|
terminal_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
terminal_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
pkglib_MODULES += crypto.mod
|
||||||
|
crypto_mod_SOURCES = lib/crypto.c
|
||||||
|
crypto_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
crypto_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
pkglib_MODULES += hashsum.mod
|
||||||
|
hashsum_mod_SOURCES = commands/hashsum.c
|
||||||
|
hashsum_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
hashsum_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
pkglib_MODULES += pbkdf2.mod
|
||||||
|
pbkdf2_mod_SOURCES = lib/pbkdf2.c
|
||||||
|
pbkdf2_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
pbkdf2_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For password_pbkdf2.mod.
|
||||||
|
pkglib_MODULES += password_pbkdf2.mod
|
||||||
|
password_pbkdf2_mod_SOURCES = commands/password_pbkdf2.c
|
||||||
|
password_pbkdf2_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
password_pbkdf2_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
bin_UTILITIES += grub-mkpasswd-pbkdf2
|
||||||
|
grub_mkpasswd_pbkdf2_SOURCES = gnulib/progname.c util/grub-mkpasswd-pbkdf2.c lib/crypto.c lib/libgcrypt-grub/cipher/sha512.c lib/pbkdf2.c util/misc.c kern/err.c
|
||||||
|
grub_mkpasswd_pbkdf2_CFLAGS += -Wno-missing-field-initializers -Wno-error -I$(srcdir)/lib/libgcrypt_wrap -DGRUB_MKPASSWD=1
|
||||||
|
|
||||||
|
include $(srcdir)/conf/gcry.mk
|
||||||
|
|
|
@ -21,7 +21,7 @@ kernel_img_SOURCES = kern/i386/coreboot/startup.S \
|
||||||
kern/i386/halt.c \
|
kern/i386/halt.c \
|
||||||
kern/main.c kern/device.c \
|
kern/main.c kern/device.c \
|
||||||
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
||||||
kern/misc.c kern/mm.c kern/reader.c kern/term.c \
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
kern/rescue_parser.c kern/rescue_reader.c \
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
||||||
kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \
|
kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \
|
||||||
|
@ -54,9 +54,11 @@ boot_img_LDFLAGS = $(COMMON_LDFLAGS) $(TARGET_IMG_LDFLAGS)$(GRUB_BOOT_MACHINE_LI
|
||||||
boot_img_FORMAT = binary
|
boot_img_FORMAT = binary
|
||||||
|
|
||||||
bin_UTILITIES += grub-mkimage
|
bin_UTILITIES += grub-mkimage
|
||||||
grub_mkimage_SOURCES = util/i386/pc/grub-mkimage.c util/misc.c \
|
grub_mkimage_SOURCES = util/grub-mkrawimage.c util/misc.c \
|
||||||
util/resolve.c gnulib/progname.c
|
util/resolve.c gnulib/progname.c
|
||||||
grub_mkimage_CFLAGS = -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)
|
grub_mkimage_CFLAGS = -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)
|
||||||
|
util/grub-mkrawimage.c_DEPENDENCIES = Makefile
|
||||||
|
|
||||||
|
|
||||||
pkglib_IMAGES += kernel.img
|
pkglib_IMAGES += kernel.img
|
||||||
kernel_img_SOURCES = kern/i386/qemu/startup.S \
|
kernel_img_SOURCES = kern/i386/qemu/startup.S \
|
||||||
|
@ -66,7 +68,7 @@ kernel_img_SOURCES = kern/i386/qemu/startup.S \
|
||||||
kern/i386/halt.c \
|
kern/i386/halt.c \
|
||||||
kern/main.c kern/device.c \
|
kern/main.c kern/device.c \
|
||||||
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
||||||
kern/misc.c kern/mm.c kern/reader.c kern/term.c \
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
kern/rescue_parser.c kern/rescue_reader.c \
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
||||||
kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \
|
kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \
|
||||||
|
@ -104,7 +106,7 @@ bin_SCRIPTS += grub-mkrescue
|
||||||
grub_mkrescue_SOURCES = util/grub-mkrescue.in
|
grub_mkrescue_SOURCES = util/grub-mkrescue.in
|
||||||
|
|
||||||
# Modules.
|
# Modules.
|
||||||
pkglib_MODULES = linux.mod multiboot.mod \
|
pkglib_MODULES = linux.mod \
|
||||||
aout.mod play.mod serial.mod \
|
aout.mod play.mod serial.mod \
|
||||||
memdisk.mod pci.mod lspci.mod reboot.mod \
|
memdisk.mod pci.mod lspci.mod reboot.mod \
|
||||||
halt.mod datetime.mod date.mod datehook.mod \
|
halt.mod datetime.mod date.mod datehook.mod \
|
||||||
|
@ -138,20 +140,10 @@ halt_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For serial.mod.
|
# For serial.mod.
|
||||||
serial_mod_SOURCES = term/i386/pc/serial.c
|
serial_mod_SOURCES = term/serial.c
|
||||||
serial_mod_CFLAGS = $(COMMON_CFLAGS)
|
serial_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
serial_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
serial_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For multiboot.mod.
|
|
||||||
multiboot_mod_SOURCES = loader/i386/multiboot.c \
|
|
||||||
loader/i386/multiboot_helper.S \
|
|
||||||
loader/i386/pc/multiboot2.c \
|
|
||||||
loader/multiboot2.c \
|
|
||||||
loader/multiboot_loader.c
|
|
||||||
multiboot_mod_CFLAGS = $(COMMON_CFLAGS)
|
|
||||||
multiboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
|
||||||
multiboot_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
|
||||||
|
|
||||||
# For aout.mod.
|
# For aout.mod.
|
||||||
aout_mod_SOURCES = loader/aout.c
|
aout_mod_SOURCES = loader/aout.c
|
||||||
aout_mod_CFLAGS = $(COMMON_CFLAGS)
|
aout_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
@ -185,7 +177,7 @@ lspci_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
lspci_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
lspci_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For datetime.mod
|
# For datetime.mod
|
||||||
datetime_mod_SOURCES = lib/i386/datetime.c
|
datetime_mod_SOURCES = lib/cmos_datetime.c
|
||||||
datetime_mod_CFLAGS = $(COMMON_CFLAGS)
|
datetime_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
datetime_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
datetime_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
|
|
@ -30,16 +30,17 @@ sbin_SCRIPTS = grub-install
|
||||||
grub_install_SOURCES = util/i386/efi/grub-install.in
|
grub_install_SOURCES = util/i386/efi/grub-install.in
|
||||||
|
|
||||||
# Modules.
|
# Modules.
|
||||||
pkglib_MODULES = kernel.img chain.mod appleldr.mod \
|
pkglib_PROGRAMS = kernel.img
|
||||||
|
pkglib_MODULES = chain.mod appleldr.mod \
|
||||||
linux.mod halt.mod reboot.mod pci.mod lspci.mod \
|
linux.mod halt.mod reboot.mod pci.mod lspci.mod \
|
||||||
datetime.mod date.mod datehook.mod loadbios.mod \
|
datetime.mod date.mod datehook.mod loadbios.mod \
|
||||||
fixvideo.mod mmap.mod acpi.mod
|
fixvideo.mod mmap.mod acpi.mod
|
||||||
|
|
||||||
# For kernel.img.
|
# For kernel.img.
|
||||||
kernel_img_EXPORTS = no
|
kernel_img_RELOCATABLE = yes
|
||||||
kernel_img_SOURCES = kern/i386/efi/startup.S kern/main.c kern/device.c \
|
kernel_img_SOURCES = kern/i386/efi/startup.S kern/main.c kern/device.c \
|
||||||
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
||||||
kern/misc.c kern/mm.c kern/reader.c kern/term.c \
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
kern/rescue_parser.c kern/rescue_reader.c \
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
kern/$(target_cpu)/dl.c kern/i386/efi/init.c kern/parser.c kern/partition.c \
|
kern/$(target_cpu)/dl.c kern/i386/efi/init.c kern/parser.c kern/partition.c \
|
||||||
kern/env.c symlist.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c \
|
kern/env.c symlist.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c \
|
||||||
|
|
|
@ -19,7 +19,7 @@ kernel_img_SOURCES = kern/i386/ieee1275/startup.S \
|
||||||
kern/ieee1275/cmain.c kern/ieee1275/openfw.c \
|
kern/ieee1275/cmain.c kern/ieee1275/openfw.c \
|
||||||
kern/main.c kern/device.c \
|
kern/main.c kern/device.c \
|
||||||
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
||||||
kern/misc.c kern/mm.c kern/reader.c kern/term.c \
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
kern/rescue_parser.c kern/rescue_reader.c \
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \
|
kern/$(target_cpu)/dl.c kern/parser.c kern/partition.c \
|
||||||
kern/env.c \
|
kern/env.c \
|
||||||
|
@ -92,7 +92,7 @@ halt_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For serial.mod.
|
# For serial.mod.
|
||||||
serial_mod_SOURCES = term/i386/pc/serial.c
|
serial_mod_SOURCES = term/serial.c
|
||||||
serial_mod_CFLAGS = $(COMMON_CFLAGS)
|
serial_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
serial_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
serial_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ lspci_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
lspci_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
lspci_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For datetime.mod
|
# For datetime.mod
|
||||||
datetime_mod_SOURCES = lib/i386/datetime.c
|
datetime_mod_SOURCES = lib/cmos_datetime.c
|
||||||
datetime_mod_CFLAGS = $(COMMON_CFLAGS)
|
datetime_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
datetime_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
datetime_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ kernel_img_SOURCES = kern/i386/pc/startup.S \
|
||||||
kern/i386/misc.S \
|
kern/i386/misc.S \
|
||||||
kern/main.c kern/device.c \
|
kern/main.c kern/device.c \
|
||||||
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
||||||
kern/misc.c kern/mm.c kern/reader.c kern/term.c \
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
kern/rescue_parser.c kern/rescue_reader.c \
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
kern/time.c kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
||||||
kern/$(target_cpu)/dl.c kern/i386/pc/init.c kern/i386/pc/mmap.c \
|
kern/$(target_cpu)/dl.c kern/i386/pc/init.c kern/i386/pc/mmap.c \
|
||||||
|
@ -85,10 +85,10 @@ bin_UTILITIES = grub-mkimage
|
||||||
sbin_UTILITIES = grub-setup
|
sbin_UTILITIES = grub-setup
|
||||||
|
|
||||||
# For grub-mkimage.
|
# For grub-mkimage.
|
||||||
grub_mkimage_SOURCES = gnulib/progname.c util/i386/pc/grub-mkimage.c util/misc.c \
|
grub_mkimage_SOURCES = gnulib/progname.c util/grub-mkrawimage.c util/misc.c \
|
||||||
util/resolve.c lib/LzmaEnc.c lib/LzFind.c
|
util/resolve.c lib/LzmaEnc.c lib/LzFind.c
|
||||||
grub_mkimage_CFLAGS = -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)
|
grub_mkimage_CFLAGS = -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(GRUB_KERNEL_MACHINE_LINK_ADDR)
|
||||||
util/i386/pc/grub-mkimage.c_DEPENDENCIES = Makefile
|
util/grub-mkrawimage.c_DEPENDENCIES = Makefile
|
||||||
|
|
||||||
# For grub-setup.
|
# For grub-setup.
|
||||||
util/i386/pc/grub-setup.c_DEPENDENCIES = grub_setup_init.h
|
util/i386/pc/grub-setup.c_DEPENDENCIES = grub_setup_init.h
|
||||||
|
@ -116,11 +116,8 @@ grub_install_SOURCES = util/grub-install.in
|
||||||
bin_SCRIPTS += grub-mkrescue
|
bin_SCRIPTS += grub-mkrescue
|
||||||
grub_mkrescue_SOURCES = util/grub-mkrescue.in
|
grub_mkrescue_SOURCES = util/grub-mkrescue.in
|
||||||
|
|
||||||
bin_SCRIPTS += grub-mkfloppy
|
|
||||||
grub_mkfloppy_SOURCES = util/i386/pc/grub-mkfloppy.in
|
|
||||||
|
|
||||||
pkglib_MODULES = biosdisk.mod chain.mod \
|
pkglib_MODULES = biosdisk.mod chain.mod \
|
||||||
multiboot.mod reboot.mod halt.mod \
|
reboot.mod halt.mod \
|
||||||
vbe.mod vbetest.mod vbeinfo.mod play.mod serial.mod \
|
vbe.mod vbetest.mod vbeinfo.mod play.mod serial.mod \
|
||||||
vga.mod memdisk.mod pci.mod lspci.mod \
|
vga.mod memdisk.mod pci.mod lspci.mod \
|
||||||
aout.mod bsd.mod pxe.mod pxecmd.mod datetime.mod date.mod \
|
aout.mod bsd.mod pxe.mod pxecmd.mod datetime.mod date.mod \
|
||||||
|
@ -201,20 +198,10 @@ halt_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For serial.mod.
|
# For serial.mod.
|
||||||
serial_mod_SOURCES = term/i386/pc/serial.c
|
serial_mod_SOURCES = term/serial.c
|
||||||
serial_mod_CFLAGS = $(COMMON_CFLAGS)
|
serial_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
serial_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
serial_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For multiboot.mod.
|
|
||||||
multiboot_mod_SOURCES = loader/i386/multiboot.c \
|
|
||||||
loader/i386/multiboot_helper.S \
|
|
||||||
loader/i386/pc/multiboot2.c \
|
|
||||||
loader/multiboot2.c \
|
|
||||||
loader/multiboot_loader.c
|
|
||||||
multiboot_mod_CFLAGS = $(COMMON_CFLAGS)
|
|
||||||
multiboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
|
||||||
multiboot_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
|
||||||
|
|
||||||
# For vbe.mod.
|
# For vbe.mod.
|
||||||
vbe_mod_SOURCES = video/i386/pc/vbe.c
|
vbe_mod_SOURCES = video/i386/pc/vbe.c
|
||||||
vbe_mod_CFLAGS = $(COMMON_CFLAGS)
|
vbe_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
@ -307,7 +294,7 @@ pxecmd_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
pxecmd_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
pxecmd_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For datetime.mod
|
# For datetime.mod
|
||||||
datetime_mod_SOURCES = lib/i386/datetime.c
|
datetime_mod_SOURCES = lib/cmos_datetime.c
|
||||||
datetime_mod_CFLAGS = $(COMMON_CFLAGS)
|
datetime_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
datetime_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
datetime_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ cpuid_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
cpuid_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
cpuid_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
pkglib_MODULES += at_keyboard.mod
|
pkglib_MODULES += at_keyboard.mod
|
||||||
at_keyboard_mod_SOURCES = term/i386/pc/at_keyboard.c
|
at_keyboard_mod_SOURCES = term/at_keyboard.c
|
||||||
at_keyboard_mod_CFLAGS = $(COMMON_CFLAGS)
|
at_keyboard_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
at_keyboard_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
at_keyboard_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
@ -25,3 +25,25 @@ pkglib_MODULES += ata.mod
|
||||||
ata_mod_SOURCES = disk/ata.c
|
ata_mod_SOURCES = disk/ata.c
|
||||||
ata_mod_CFLAGS = $(COMMON_CFLAGS)
|
ata_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
ata_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
ata_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For setpci.mod
|
||||||
|
pkglib_MODULES += setpci.mod
|
||||||
|
setpci_mod_SOURCES = commands/setpci.c
|
||||||
|
setpci_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
setpci_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
pkglib_MODULES += multiboot.mod
|
||||||
|
multiboot_mod_SOURCES = loader/i386/multiboot.c \
|
||||||
|
loader/i386/multiboot_mbi.c \
|
||||||
|
loader/multiboot_loader.c
|
||||||
|
multiboot_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
multiboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
multiboot_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
||||||
|
|
||||||
|
pkglib_MODULES += multiboot2.mod
|
||||||
|
multiboot2_mod_SOURCES = loader/i386/multiboot.c \
|
||||||
|
loader/i386/multiboot_mbi.c \
|
||||||
|
loader/multiboot_loader.c
|
||||||
|
multiboot2_mod_CFLAGS = $(COMMON_CFLAGS) -DGRUB_USE_MULTIBOOT2
|
||||||
|
multiboot2_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
multiboot2_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
||||||
|
|
23
conf/mips-qemu-mips.rmk
Normal file
23
conf/mips-qemu-mips.rmk
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# -*- makefile -*-
|
||||||
|
LINK_BASE = 0x80010000
|
||||||
|
target_machine=qemu-mips
|
||||||
|
COMMON_CFLAGS += -march=mips3
|
||||||
|
COMMON_ASFLAGS += -march=mips3
|
||||||
|
include $(srcdir)/conf/mips.mk
|
||||||
|
|
||||||
|
pkglib_IMAGES = kernel.img
|
||||||
|
kernel_img_SOURCES = kern/$(target_cpu)/startup.S \
|
||||||
|
kern/main.c kern/device.c kern/$(target_cpu)/init.c \
|
||||||
|
kern/$(target_cpu)/$(target_machine)/init.c \
|
||||||
|
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
|
||||||
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
|
kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
||||||
|
kern/parser.c kern/partition.c kern/env.c kern/$(target_cpu)/dl.c \
|
||||||
|
kern/generic/millisleep.c kern/generic/rtc_get_time_ms.c kern/time.c \
|
||||||
|
symlist.c kern/$(target_cpu)/cache.S
|
||||||
|
kernel_img_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
kernel_img_ASFLAGS = $(COMMON_ASFLAGS)
|
||||||
|
kernel_img_LDFLAGS = $(COMMON_LDFLAGS) -static-libgcc -lgcc \
|
||||||
|
-Wl,-N,-S,-Ttext,$(LINK_BASE),-Bstatic
|
||||||
|
kernel_img_FORMAT = binary
|
79
conf/mips-yeeloong.rmk
Normal file
79
conf/mips-yeeloong.rmk
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
# -*- makefile -*-
|
||||||
|
LINK_BASE = 0x80200000
|
||||||
|
target_machine=yeeloong
|
||||||
|
COMMON_CFLAGS += -march=mips3
|
||||||
|
COMMON_ASFLAGS += -march=mips3
|
||||||
|
include $(srcdir)/conf/mips.mk
|
||||||
|
|
||||||
|
pkglib_IMAGES = kernel.img
|
||||||
|
kernel_img_SOURCES = kern/$(target_cpu)/startup.S \
|
||||||
|
kern/main.c kern/device.c kern/$(target_cpu)/init.c \
|
||||||
|
kern/$(target_cpu)/$(target_machine)/init.c \
|
||||||
|
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
|
||||||
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
|
kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
||||||
|
kern/parser.c kern/partition.c kern/env.c kern/$(target_cpu)/dl.c \
|
||||||
|
kern/generic/millisleep.c kern/generic/rtc_get_time_ms.c kern/time.c \
|
||||||
|
kern/$(target_cpu)/cache.S \
|
||||||
|
\
|
||||||
|
term/at_keyboard.c \
|
||||||
|
font/font_cmd.c font/font.c io/bufio.c \
|
||||||
|
video/video.c video/fb/video_fb.c video/fb/fbblit.c \
|
||||||
|
video/fb/fbfill.c video/fb/fbutil.c video/bitmap.c \
|
||||||
|
video/sm712.c bus/pci.c bus/bonito.c \
|
||||||
|
term/gfxterm.c commands/extcmd.c lib/arg.c \
|
||||||
|
symlist.c
|
||||||
|
kernel_img_CFLAGS = $(COMMON_CFLAGS) -DUSE_ASCII_FAILBACK
|
||||||
|
kernel_img_ASFLAGS = $(COMMON_ASFLAGS)
|
||||||
|
kernel_img_LDFLAGS = $(COMMON_LDFLAGS) -static-libgcc -lgcc \
|
||||||
|
-Wl,-N,-S,-Ttext,$(LINK_BASE),-Bstatic
|
||||||
|
kernel_img_FORMAT = binary
|
||||||
|
|
||||||
|
# For ata.mod.
|
||||||
|
pkglib_MODULES += ata.mod
|
||||||
|
ata_mod_SOURCES = disk/ata.c
|
||||||
|
ata_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
ata_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For lspci.mod
|
||||||
|
pkglib_MODULES += lspci.mod
|
||||||
|
lspci_mod_SOURCES = commands/lspci.c
|
||||||
|
lspci_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
lspci_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For ata_pthru.mod.
|
||||||
|
pkglib_MODULES += ata_pthru.mod
|
||||||
|
ata_pthru_mod_SOURCES = disk/ata_pthru.c
|
||||||
|
ata_pthru_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
ata_pthru_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For mmap.mod.
|
||||||
|
pkglib_MODULES += mmap.mod
|
||||||
|
mmap_mod_SOURCES = mmap/mmap.c mmap/mips/yeeloong/uppermem.c
|
||||||
|
mmap_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
mmap_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
mmap_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
||||||
|
|
||||||
|
# For datetime.mod
|
||||||
|
pkglib_MODULES += datetime.mod
|
||||||
|
datetime_mod_SOURCES = lib/cmos_datetime.c
|
||||||
|
datetime_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
datetime_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For date.mod
|
||||||
|
pkglib_MODULES += date.mod
|
||||||
|
date_mod_SOURCES = commands/date.c
|
||||||
|
date_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
date_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For datehook.mod
|
||||||
|
pkglib_MODULES += datehook.mod
|
||||||
|
datehook_mod_SOURCES = hook/datehook.c
|
||||||
|
datehook_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
datehook_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
|
||||||
|
sbin_SCRIPTS += grub-install
|
||||||
|
grub_install_SOURCES = util/grub-install.in
|
||||||
|
|
82
conf/mips.rmk
Normal file
82
conf/mips.rmk
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
|
||||||
|
# -*- makefile -*-
|
||||||
|
|
||||||
|
COMMON_ASFLAGS += -nostdinc
|
||||||
|
COMMON_CFLAGS += -ffreestanding -mexplicit-relocs -mflush-func=grub_cpu_flush_cache
|
||||||
|
COMMON_LDFLAGS += -nostdlib
|
||||||
|
|
||||||
|
# Used by various components. These rules need to precede them.
|
||||||
|
script/lexer.c_DEPENDENCIES = grub_script.tab.h
|
||||||
|
|
||||||
|
# Images.
|
||||||
|
|
||||||
|
MOSTLYCLEANFILES += symlist.c kernel_syms.lst
|
||||||
|
DEFSYMFILES += kernel_syms.lst
|
||||||
|
|
||||||
|
kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
|
||||||
|
env.h err.h file.h fs.h kernel.h misc.h mm.h net.h parser.h reader.h \
|
||||||
|
symbol.h term.h time.h types.h loader.h partition.h \
|
||||||
|
msdos_partition.h machine/kernel.h handler.h list.h \
|
||||||
|
command.h machine/memory.h cpu/libgcc.h cpu/cache.h i18n.h
|
||||||
|
|
||||||
|
ifeq ($(platform), yeeloong)
|
||||||
|
kernel_img_HEADERS += pci.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
symlist.c: $(addprefix include/grub/,$(kernel_img_HEADERS)) config.h gensymlist.sh
|
||||||
|
/bin/sh gensymlist.sh $(filter %.h,$^) > $@ || (rm -f $@; exit 1)
|
||||||
|
|
||||||
|
kernel_syms.lst: $(addprefix include/grub/,$(kernel_img_HEADERS)) config.h genkernsyms.sh
|
||||||
|
/bin/sh genkernsyms.sh $(filter %.h,$^) > $@ || (rm -f $@; exit 1)
|
||||||
|
|
||||||
|
# Scripts.
|
||||||
|
sbin_SCRIPTS =
|
||||||
|
bin_SCRIPTS =
|
||||||
|
|
||||||
|
# For grub-mkimage.
|
||||||
|
bin_UTILITIES += grub-mkimage
|
||||||
|
grub_mkimage_SOURCES = gnulib/progname.c util/grub-mkrawimage.c util/misc.c \
|
||||||
|
util/resolve.c lib/LzmaEnc.c lib/LzFind.c
|
||||||
|
grub_mkimage_CFLAGS = -DGRUB_KERNEL_MACHINE_LINK_ADDR=$(LINK_BASE)
|
||||||
|
util/grub-mkrawimage.c_DEPENDENCIES = Makefile
|
||||||
|
|
||||||
|
# Modules.
|
||||||
|
pkglib_MODULES = memdisk.mod \
|
||||||
|
lsmmap.mod
|
||||||
|
|
||||||
|
# For boot.mod.
|
||||||
|
pkglib_MODULES += boot.mod
|
||||||
|
boot_mod_SOURCES = commands/boot.c lib/i386/pc/biosnum.c
|
||||||
|
boot_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
boot_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For memdisk.mod.
|
||||||
|
memdisk_mod_SOURCES = disk/memdisk.c
|
||||||
|
memdisk_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
memdisk_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For lsmmap.mod
|
||||||
|
lsmmap_mod_SOURCES = commands/lsmmap.c
|
||||||
|
lsmmap_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
lsmmap_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For serial.mod.
|
||||||
|
pkglib_MODULES += serial.mod
|
||||||
|
serial_mod_SOURCES = term/serial.c
|
||||||
|
serial_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
serial_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# For relocator.mod.
|
||||||
|
pkglib_MODULES += relocator.mod
|
||||||
|
relocator_mod_SOURCES = lib/$(target_cpu)/relocator.c lib/$(target_cpu)/relocator_asm.S
|
||||||
|
relocator_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
relocator_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
||||||
|
relocator_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
pkglib_MODULES += linux.mod
|
||||||
|
linux_mod_SOURCES = loader/$(target_cpu)/linux.c
|
||||||
|
linux_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
linux_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
||||||
|
linux_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
include $(srcdir)/conf/common.mk
|
|
@ -31,7 +31,7 @@ pkglib_PROGRAMS = kernel.img
|
||||||
kernel_img_SOURCES = kern/powerpc/ieee1275/startup.S kern/ieee1275/cmain.c \
|
kernel_img_SOURCES = kern/powerpc/ieee1275/startup.S kern/ieee1275/cmain.c \
|
||||||
kern/ieee1275/ieee1275.c kern/main.c kern/device.c \
|
kern/ieee1275/ieee1275.c kern/main.c kern/device.c \
|
||||||
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
|
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
|
||||||
kern/misc.c kern/mm.c kern/reader.c kern/term.c \
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
kern/rescue_parser.c kern/rescue_reader.c \
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
||||||
kern/ieee1275/init.c \
|
kern/ieee1275/init.c \
|
||||||
|
@ -61,7 +61,6 @@ pkglib_MODULES = halt.mod \
|
||||||
linux.mod \
|
linux.mod \
|
||||||
reboot.mod \
|
reboot.mod \
|
||||||
suspend.mod \
|
suspend.mod \
|
||||||
multiboot.mod \
|
|
||||||
memdisk.mod \
|
memdisk.mod \
|
||||||
lsmmap.mod
|
lsmmap.mod
|
||||||
|
|
||||||
|
@ -91,13 +90,6 @@ halt_mod_SOURCES = commands/halt.c
|
||||||
halt_mod_CFLAGS = $(COMMON_CFLAGS)
|
halt_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
halt_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For multiboot.mod
|
|
||||||
multiboot_mod_SOURCES = loader/ieee1275/multiboot2.c \
|
|
||||||
loader/multiboot2.c \
|
|
||||||
loader/multiboot_loader.c
|
|
||||||
multiboot_mod_CFLAGS = $(COMMON_CFLAGS)
|
|
||||||
multiboot_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
|
||||||
|
|
||||||
# For memdisk.mod.
|
# For memdisk.mod.
|
||||||
memdisk_mod_SOURCES = disk/memdisk.c
|
memdisk_mod_SOURCES = disk/memdisk.c
|
||||||
memdisk_mod_CFLAGS = $(COMMON_CFLAGS)
|
memdisk_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
|
|
@ -35,7 +35,7 @@ kernel_img_HEADERS = boot.h cache.h device.h disk.h dl.h elf.h elfload.h \
|
||||||
kernel_img_SOURCES = kern/sparc64/ieee1275/crt0.S kern/ieee1275/cmain.c \
|
kernel_img_SOURCES = kern/sparc64/ieee1275/crt0.S kern/ieee1275/cmain.c \
|
||||||
kern/ieee1275/ieee1275.c kern/main.c kern/device.c \
|
kern/ieee1275/ieee1275.c kern/main.c kern/device.c \
|
||||||
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
|
kern/disk.c kern/dl.c kern/err.c kern/file.c kern/fs.c \
|
||||||
kern/misc.c kern/mm.c kern/reader.c kern/term.c \
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
kern/rescue_parser.c kern/rescue_reader.c \
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
kern/list.c kern/handler.c kern/command.c kern/corecmd.c \
|
||||||
kern/sparc64/ieee1275/ieee1275.c \
|
kern/sparc64/ieee1275/ieee1275.c \
|
||||||
|
@ -93,7 +93,7 @@ grub_ofpathname_SOURCES = util/sparc64/ieee1275/grub-ofpathname.c \
|
||||||
sbin_SCRIPTS = grub-install
|
sbin_SCRIPTS = grub-install
|
||||||
|
|
||||||
# For grub-install.
|
# For grub-install.
|
||||||
grub_install_SOURCES = util/sparc64/ieee1275/grub-install.in
|
grub_install_SOURCES = util/grub-install.in
|
||||||
|
|
||||||
# Modules.
|
# Modules.
|
||||||
pkglib_MODULES = halt.mod \
|
pkglib_MODULES = halt.mod \
|
||||||
|
|
50
conf/tests.rmk
Normal file
50
conf/tests.rmk
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
# -*- makefile -*-
|
||||||
|
|
||||||
|
# For grub-shell
|
||||||
|
grub-shell: tests/util/grub-shell.in config.status
|
||||||
|
./config.status --file=$@:$<
|
||||||
|
chmod +x $@
|
||||||
|
check_SCRIPTS += grub-shell
|
||||||
|
CLEANFILES += grub-shell
|
||||||
|
|
||||||
|
# For grub-shell-tester
|
||||||
|
grub-shell-tester: tests/util/grub-shell-tester.in config.status
|
||||||
|
./config.status --file=$@:$<
|
||||||
|
chmod +x $@
|
||||||
|
check_SCRIPTS += grub-shell-tester
|
||||||
|
CLEANFILES += grub-shell-tester
|
||||||
|
|
||||||
|
pkglib_MODULES += functional_test.mod
|
||||||
|
functional_test_mod_SOURCES = tests/lib/functional_test.c tests/lib/test.c
|
||||||
|
functional_test_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
|
functional_test_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# Rules for unit tests
|
||||||
|
check_UTILITIES += example_unit_test
|
||||||
|
example_unit_test_SOURCES = tests/example_unit_test.c kern/list.c kern/misc.c tests/lib/test.c tests/lib/unit_test.c
|
||||||
|
example_unit_test_CFLAGS = -Wno-format
|
||||||
|
|
||||||
|
# Rules for functional tests
|
||||||
|
pkglib_MODULES += example_functional_test.mod
|
||||||
|
example_functional_test_mod_SOURCES = tests/example_functional_test.c
|
||||||
|
example_functional_test_mod_CFLAGS = -Wno-format $(COMMON_CFLAGS)
|
||||||
|
example_functional_test_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
|
# Rules for scripted tests
|
||||||
|
check_SCRIPTS += example_scripted_test
|
||||||
|
example_scripted_test_SOURCES = tests/example_scripted_test.in
|
||||||
|
|
||||||
|
check_SCRIPTS += example_grub_script_test
|
||||||
|
example_grub_script_test_SOURCES = tests/example_grub_script_test.in
|
||||||
|
|
||||||
|
|
||||||
|
# List of tests to execute on "make check"
|
||||||
|
SCRIPTED_TESTS = example_scripted_test
|
||||||
|
SCRIPTED_TESTS += example_grub_script_test
|
||||||
|
UNIT_TESTS = example_unit_test
|
||||||
|
FUNCTIONAL_TESTS = example_functional_test.mod
|
||||||
|
|
||||||
|
# dependencies between tests and testing-tools
|
||||||
|
$(SCRIPTED_TESTS): grub-shell grub-shell-tester
|
||||||
|
$(FUNCTIONAL_TESTS): functional_test.mod
|
||||||
|
|
|
@ -29,17 +29,18 @@ sbin_SCRIPTS = grub-install
|
||||||
grub_install_SOURCES = util/i386/efi/grub-install.in
|
grub_install_SOURCES = util/i386/efi/grub-install.in
|
||||||
|
|
||||||
# Modules.
|
# Modules.
|
||||||
pkglib_MODULES = kernel.img chain.mod appleldr.mod \
|
pkglib_PROGRAMS = kernel.img
|
||||||
|
pkglib_MODULES = chain.mod appleldr.mod \
|
||||||
halt.mod reboot.mod linux.mod pci.mod lspci.mod \
|
halt.mod reboot.mod linux.mod pci.mod lspci.mod \
|
||||||
datetime.mod date.mod datehook.mod loadbios.mod \
|
datetime.mod date.mod datehook.mod loadbios.mod \
|
||||||
fixvideo.mod mmap.mod acpi.mod ata.mod
|
fixvideo.mod mmap.mod acpi.mod
|
||||||
|
|
||||||
# For kernel.img.
|
# For kernel.img.
|
||||||
kernel_img_EXPORTS = no
|
kernel_img_RELOCATABLE = yes
|
||||||
kernel_img_SOURCES = kern/x86_64/efi/startup.S kern/x86_64/efi/callwrap.S \
|
kernel_img_SOURCES = kern/x86_64/efi/startup.S kern/x86_64/efi/callwrap.S \
|
||||||
kern/main.c kern/device.c \
|
kern/main.c kern/device.c \
|
||||||
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
kern/disk.c kern/dl.c kern/file.c kern/fs.c kern/err.c \
|
||||||
kern/misc.c kern/mm.c kern/reader.c kern/term.c \
|
kern/misc.c kern/mm.c kern/term.c \
|
||||||
kern/rescue_parser.c kern/rescue_reader.c \
|
kern/rescue_parser.c kern/rescue_reader.c \
|
||||||
kern/$(target_cpu)/dl.c kern/i386/efi/init.c kern/parser.c kern/partition.c \
|
kern/$(target_cpu)/dl.c kern/i386/efi/init.c kern/parser.c kern/partition.c \
|
||||||
kern/env.c symlist.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c \
|
kern/env.c symlist.c kern/efi/efi.c kern/efi/init.c kern/efi/mm.c \
|
||||||
|
@ -77,11 +78,6 @@ acpi_mod_SOURCES = commands/acpi.c commands/efi/acpi.c
|
||||||
acpi_mod_CFLAGS = $(COMMON_CFLAGS)
|
acpi_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
acpi_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
acpi_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
|
|
||||||
# For ata.mod
|
|
||||||
ata_mod_SOURCES = disk/ata.c
|
|
||||||
ata_mod_CFLAGS = $(COMMON_CFLAGS)
|
|
||||||
ata_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
|
||||||
|
|
||||||
# For mmap.mod.
|
# For mmap.mod.
|
||||||
mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c \
|
mmap_mod_SOURCES = mmap/mmap.c mmap/i386/uppermem.c mmap/i386/mmap.c \
|
||||||
mmap/efi/mmap.c
|
mmap/efi/mmap.c
|
||||||
|
@ -166,10 +162,5 @@ xnu_mod_CFLAGS = $(COMMON_CFLAGS)
|
||||||
xnu_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
xnu_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
||||||
xnu_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
xnu_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
||||||
|
|
||||||
pkglib_MODULES += relocator.mod
|
include $(srcdir)/conf/i386.mk
|
||||||
relocator_mod_SOURCES = lib/i386/relocator.c lib/i386/relocator_asm.S lib/i386/relocator_backward.S
|
|
||||||
relocator_mod_CFLAGS = $(COMMON_CFLAGS)
|
|
||||||
relocator_mod_ASFLAGS = $(COMMON_ASFLAGS)
|
|
||||||
relocator_mod_LDFLAGS = $(COMMON_LDFLAGS)
|
|
||||||
|
|
||||||
include $(srcdir)/conf/common.mk
|
include $(srcdir)/conf/common.mk
|
||||||
|
|
672
config.rpath
Executable file
672
config.rpath
Executable file
|
@ -0,0 +1,672 @@
|
||||||
|
#! /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-2008 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,'
|
||||||
|
;;
|
||||||
|
darwin*)
|
||||||
|
case $cc_basename in
|
||||||
|
xlc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
mingw* | cygwin* | pw32* | os2* | cegcc*)
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
;;
|
||||||
|
linux* | k*bsd*-gnu)
|
||||||
|
case $cc_basename in
|
||||||
|
ecc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
icc* | ifort*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
lf95*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
pgcc | pgf77 | pgf90)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
ccc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
como)
|
||||||
|
wl='-lopt='
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case `$CC -V 2>&1 | sed 5q` in
|
||||||
|
*Sun\ C*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
rdos*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
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*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
|
||||||
|
# that the semantics of dynamic libraries on AmigaOS, at least up
|
||||||
|
# to version 4, is to share data among multiple programs linked
|
||||||
|
# with the same dynamic library. Since this doesn't match the
|
||||||
|
# behavior of shared libraries on other platforms, we cannot use
|
||||||
|
# them.
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
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
|
||||||
|
;;
|
||||||
|
interix[3-9]*)
|
||||||
|
hardcode_direct=no
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
;;
|
||||||
|
gnu* | linux* | k*bsd*-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*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
# see comment about different semantics on the GNU ld section
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
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 test "$GCC" = yes ; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
case $cc_basename in
|
||||||
|
xlc*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
freebsd1*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
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=:
|
||||||
|
;;
|
||||||
|
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*)
|
||||||
|
library_names_spec='$libname.a'
|
||||||
|
;;
|
||||||
|
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'
|
||||||
|
;;
|
||||||
|
freebsd1*)
|
||||||
|
;;
|
||||||
|
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'
|
||||||
|
;;
|
||||||
|
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)
|
||||||
|
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'
|
||||||
|
;;
|
||||||
|
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
|
43
configure.ac
43
configure.ac
|
@ -1,6 +1,6 @@
|
||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc.
|
# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This configure.ac is free software; the author
|
# This configure.ac is free software; the author
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
@ -44,9 +44,24 @@ AC_CANONICAL_TARGET
|
||||||
# Program name transformations
|
# Program name transformations
|
||||||
AC_ARG_PROGRAM
|
AC_ARG_PROGRAM
|
||||||
|
|
||||||
|
# Optimization flag. Allow user to override.
|
||||||
|
if test "x$TARGET_CFLAGS" = x; then
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS -Os"
|
||||||
|
fi
|
||||||
|
|
||||||
case "$target_cpu" in
|
case "$target_cpu" in
|
||||||
i[[3456]]86) target_cpu=i386 ;;
|
i[[3456]]86) target_cpu=i386 ;;
|
||||||
sparc) target_cpu=sparc64 ;;
|
sparc) target_cpu=sparc64 ;;
|
||||||
|
mipsel|mips64el)
|
||||||
|
target_cpu=mips;
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPSEL=1";
|
||||||
|
CFLAGS="$CFLAGS -DGRUB_CPU_MIPSEL=1";
|
||||||
|
;;
|
||||||
|
mips|mips64)
|
||||||
|
target_cpu=mips;
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPS=1";
|
||||||
|
CFLAGS="$CFLAGS -DGRUB_CPU_MIPS=1";
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Specify the platform (such as firmware).
|
# Specify the platform (such as firmware).
|
||||||
|
@ -64,6 +79,7 @@ if test "x$with_platform" = x; then
|
||||||
powerpc-*) platform=ieee1275 ;;
|
powerpc-*) platform=ieee1275 ;;
|
||||||
powerpc64-*) platform=ieee1275 ;;
|
powerpc64-*) platform=ieee1275 ;;
|
||||||
sparc64-*) platform=ieee1275 ;;
|
sparc64-*) platform=ieee1275 ;;
|
||||||
|
mips-*) platform=yeeloong ;;
|
||||||
*) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;;
|
*) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
|
@ -90,6 +106,8 @@ case "$target_cpu"-"$platform" in
|
||||||
i386-qemu) ;;
|
i386-qemu) ;;
|
||||||
powerpc-ieee1275) ;;
|
powerpc-ieee1275) ;;
|
||||||
sparc64-ieee1275) ;;
|
sparc64-ieee1275) ;;
|
||||||
|
mips-qemu-mips) ;;
|
||||||
|
mips-yeeloong) ;;
|
||||||
*-emu) ;;
|
*-emu) ;;
|
||||||
*) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
|
*) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
|
||||||
esac
|
esac
|
||||||
|
@ -120,6 +138,8 @@ case "$platform" in
|
||||||
qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;;
|
qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;;
|
||||||
pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;;
|
pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;;
|
||||||
emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;;
|
emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;;
|
||||||
|
yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
|
||||||
|
qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
|
||||||
esac
|
esac
|
||||||
CFLAGS="$CFLAGS $machine_CFLAGS"
|
CFLAGS="$CFLAGS $machine_CFLAGS"
|
||||||
TARGET_ASFLAGS="$TARGET_ASFLAGS $machine_CFLAGS"
|
TARGET_ASFLAGS="$TARGET_ASFLAGS $machine_CFLAGS"
|
||||||
|
@ -148,7 +168,7 @@ if test "x$YACC" = x; then
|
||||||
AC_MSG_ERROR([bison is not found])
|
AC_MSG_ERROR([bison is not found])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for file in /usr/src/unifont.bdf /usr/share/fonts/X11/misc/unifont.pcf.gz ; do
|
for file in /usr/src/unifont.bdf /usr/share/fonts/X11/misc/unifont.pcf.gz /usr/share/fonts/unifont/unifont.pcf.gz; do
|
||||||
if test -e $file ; then
|
if test -e $file ; then
|
||||||
AC_SUBST([FONT_SOURCE], [$file])
|
AC_SUBST([FONT_SOURCE], [$file])
|
||||||
break
|
break
|
||||||
|
@ -173,7 +193,7 @@ AC_PROG_CC
|
||||||
test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
|
test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
|
||||||
|
|
||||||
AC_GNU_SOURCE
|
AC_GNU_SOURCE
|
||||||
AM_GNU_GETTEXT
|
AM_GNU_GETTEXT([external])
|
||||||
AC_SYS_LARGEFILE
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
# Identify characteristics of the host architecture.
|
# Identify characteristics of the host architecture.
|
||||||
|
@ -242,24 +262,10 @@ CPPFLAGS="$TARGET_CPPFLAGS"
|
||||||
LDFLAGS="$TARGET_LDFLAGS"
|
LDFLAGS="$TARGET_LDFLAGS"
|
||||||
LIBS=""
|
LIBS=""
|
||||||
|
|
||||||
if test "x$TARGET_CFLAGS" = x; then
|
|
||||||
# debug flags.
|
# debug flags.
|
||||||
TARGET_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes \
|
TARGET_CFLAGS="$TARGET_CFLAGS -Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes \
|
||||||
-Wundef -Wstrict-prototypes -g"
|
-Wundef -Wstrict-prototypes -g"
|
||||||
|
|
||||||
# optimization flags.
|
|
||||||
AC_CACHE_CHECK([whether optimization for size works], grub_cv_cc_Os, [
|
|
||||||
CFLAGS=-Os
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
|
||||||
[grub_cv_cc_Os=yes],
|
|
||||||
[grub_cv_cc_Os=no])
|
|
||||||
])
|
|
||||||
if test "x$grub_cv_cc_Os" = xyes; then
|
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -Os"
|
|
||||||
else
|
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -O2 -fno-strength-reduce -fno-unroll-loops"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Force no alignment to save space on i386.
|
# Force no alignment to save space on i386.
|
||||||
if test "x$target_cpu" = xi386; then
|
if test "x$target_cpu" = xi386; then
|
||||||
AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
|
AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
|
||||||
|
@ -296,7 +302,6 @@ if test "x$TARGET_CFLAGS" = x; then
|
||||||
if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
|
if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
|
TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
grub_apple_target_cc
|
grub_apple_target_cc
|
||||||
if test x$grub_cv_apple_target_cc = xyes ; then
|
if test x$grub_cv_apple_target_cc = xyes ; then
|
||||||
|
|
68
disk/ata.c
68
disk/ata.c
|
@ -26,8 +26,8 @@
|
||||||
#include <grub/scsi.h>
|
#include <grub/scsi.h>
|
||||||
|
|
||||||
/* At the moment, only two IDE ports are supported. */
|
/* At the moment, only two IDE ports are supported. */
|
||||||
static const int grub_ata_ioaddress[] = { 0x1f0, 0x170 };
|
static const grub_port_t grub_ata_ioaddress[] = { 0x1f0, 0x170 };
|
||||||
static const int grub_ata_ioaddress2[] = { 0x3f6, 0x376 };
|
static const grub_port_t grub_ata_ioaddress2[] = { 0x3f6, 0x376 };
|
||||||
|
|
||||||
static struct grub_ata_device *grub_ata_devices;
|
static struct grub_ata_device *grub_ata_devices;
|
||||||
|
|
||||||
|
@ -347,8 +347,8 @@ grub_ata_device_initialize (int port, int device, int addr, int addr2)
|
||||||
/* Setup the device information. */
|
/* Setup the device information. */
|
||||||
dev->port = port;
|
dev->port = port;
|
||||||
dev->device = device;
|
dev->device = device;
|
||||||
dev->ioaddress = addr;
|
dev->ioaddress = addr + GRUB_MACHINE_PCI_IO_BASE;
|
||||||
dev->ioaddress2 = addr2;
|
dev->ioaddress2 = addr2 + GRUB_MACHINE_PCI_IO_BASE;
|
||||||
dev->next = NULL;
|
dev->next = NULL;
|
||||||
|
|
||||||
grub_ata_regset (dev, GRUB_ATA_REG_DISK, dev->device << 4);
|
grub_ata_regset (dev, GRUB_ATA_REG_DISK, dev->device << 4);
|
||||||
|
@ -389,7 +389,7 @@ grub_ata_device_initialize (int port, int device, int addr, int addr2)
|
||||||
|
|
||||||
static int NESTED_FUNC_ATTR
|
static int NESTED_FUNC_ATTR
|
||||||
grub_ata_pciinit (grub_pci_device_t dev,
|
grub_ata_pciinit (grub_pci_device_t dev,
|
||||||
grub_pci_id_t pciid __attribute__((unused)))
|
grub_pci_id_t pciid)
|
||||||
{
|
{
|
||||||
static int compat_use[2] = { 0 };
|
static int compat_use[2] = { 0 };
|
||||||
grub_pci_address_t addr;
|
grub_pci_address_t addr;
|
||||||
|
@ -400,19 +400,34 @@ grub_ata_pciinit (grub_pci_device_t dev,
|
||||||
int regb;
|
int regb;
|
||||||
int i;
|
int i;
|
||||||
static int controller = 0;
|
static int controller = 0;
|
||||||
|
int cs5536 = 0;
|
||||||
|
int nports = 2;
|
||||||
|
|
||||||
/* Read class. */
|
/* Read class. */
|
||||||
addr = grub_pci_make_address (dev, 2);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
||||||
class = grub_pci_read (addr);
|
class = grub_pci_read (addr);
|
||||||
|
|
||||||
|
/* AMD CS5536 Southbridge. */
|
||||||
|
if (pciid == 0x208f1022)
|
||||||
|
{
|
||||||
|
cs5536 = 1;
|
||||||
|
nports = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check if this class ID matches that of a PCI IDE Controller. */
|
/* Check if this class ID matches that of a PCI IDE Controller. */
|
||||||
if (class >> 16 != 0x0101)
|
if (!cs5536 && (class >> 16 != 0x0101))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < nports; i++)
|
||||||
{
|
{
|
||||||
/* Set to 0 when the channel operated in compatibility mode. */
|
/* Set to 0 when the channel operated in compatibility mode. */
|
||||||
int compat = (class >> (8 + 2 * i)) & 1;
|
int compat;
|
||||||
|
|
||||||
|
/* We don't support non-compatibility mode for CS5536. */
|
||||||
|
if (cs5536)
|
||||||
|
compat = 0;
|
||||||
|
else
|
||||||
|
compat = (class >> (8 + 2 * i)) & 1;
|
||||||
|
|
||||||
rega = 0;
|
rega = 0;
|
||||||
regb = 0;
|
regb = 0;
|
||||||
|
@ -429,9 +444,12 @@ grub_ata_pciinit (grub_pci_device_t dev,
|
||||||
{
|
{
|
||||||
/* Read the BARs, which either contain a mmapped IO address
|
/* Read the BARs, which either contain a mmapped IO address
|
||||||
or the IO port address. */
|
or the IO port address. */
|
||||||
addr = grub_pci_make_address (dev, 4 + 2 * i);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESSES
|
||||||
|
+ sizeof (grub_uint64_t) * i);
|
||||||
bar1 = grub_pci_read (addr);
|
bar1 = grub_pci_read (addr);
|
||||||
addr = grub_pci_make_address (dev, 5 + 2 * i);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESSES
|
||||||
|
+ sizeof (grub_uint64_t) * i
|
||||||
|
+ sizeof (grub_uint32_t));
|
||||||
bar2 = grub_pci_read (addr);
|
bar2 = grub_pci_read (addr);
|
||||||
|
|
||||||
/* Check if the BARs describe an IO region. */
|
/* Check if the BARs describe an IO region. */
|
||||||
|
@ -485,7 +503,6 @@ grub_ata_initialize (void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
grub_ata_setlba (struct grub_ata_device *dev, grub_disk_addr_t sector,
|
grub_ata_setlba (struct grub_ata_device *dev, grub_disk_addr_t sector,
|
||||||
grub_size_t size)
|
grub_size_t size)
|
||||||
|
@ -648,12 +665,14 @@ grub_ata_iterate (int (*hook) (const char *name))
|
||||||
|
|
||||||
for (dev = grub_ata_devices; dev; dev = dev->next)
|
for (dev = grub_ata_devices; dev; dev = dev->next)
|
||||||
{
|
{
|
||||||
char devname[5];
|
char devname[10];
|
||||||
grub_sprintf (devname, "ata%d", dev->port * 2 + dev->device);
|
|
||||||
|
|
||||||
if (dev->atapi)
|
if (dev->atapi)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
grub_snprintf (devname, sizeof (devname),
|
||||||
|
"ata%d", dev->port * 2 + dev->device);
|
||||||
|
|
||||||
if (hook (devname))
|
if (hook (devname))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -668,14 +687,15 @@ grub_ata_open (const char *name, grub_disk_t disk)
|
||||||
|
|
||||||
for (dev = grub_ata_devices; dev; dev = dev->next)
|
for (dev = grub_ata_devices; dev; dev = dev->next)
|
||||||
{
|
{
|
||||||
char devname[5];
|
char devname[10];
|
||||||
grub_sprintf (devname, "ata%d", dev->port * 2 + dev->device);
|
grub_snprintf (devname, sizeof (devname),
|
||||||
|
"ata%d", dev->port * 2 + dev->device);
|
||||||
if (grub_strcmp (name, devname) == 0)
|
if (grub_strcmp (name, devname) == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! dev)
|
if (! dev)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Can't open device");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
|
||||||
|
|
||||||
if (dev->atapi)
|
if (dev->atapi)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not an ATA harddisk");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not an ATA harddisk");
|
||||||
|
@ -735,8 +755,9 @@ grub_atapi_iterate (int (*hook) (const char *name, int luns))
|
||||||
|
|
||||||
for (dev = grub_ata_devices; dev; dev = dev->next)
|
for (dev = grub_ata_devices; dev; dev = dev->next)
|
||||||
{
|
{
|
||||||
char devname[7];
|
char devname[10];
|
||||||
grub_sprintf (devname, "ata%d", dev->port * 2 + dev->device);
|
grub_snprintf (devname, sizeof (devname),
|
||||||
|
"ata%d", dev->port * 2 + dev->device);
|
||||||
|
|
||||||
if (! dev->atapi)
|
if (! dev->atapi)
|
||||||
continue;
|
continue;
|
||||||
|
@ -775,7 +796,7 @@ grub_atapi_read (struct grub_scsi *scsi,
|
||||||
|
|
||||||
/* Count of last transfer may be uneven. */
|
/* Count of last transfer may be uneven. */
|
||||||
if (! (0 < cnt && cnt <= size - nread && (! (cnt & 1) || cnt == size - nread)))
|
if (! (0 < cnt && cnt <= size - nread && (! (cnt & 1) || cnt == size - nread)))
|
||||||
return grub_error (GRUB_ERR_READ_ERROR, "Invalid ATAPI transfer count");
|
return grub_error (GRUB_ERR_READ_ERROR, "invalid ATAPI transfer count");
|
||||||
|
|
||||||
/* Read the data. */
|
/* Read the data. */
|
||||||
grub_ata_pio_read (dev, buf + nread, cnt);
|
grub_ata_pio_read (dev, buf + nread, cnt);
|
||||||
|
@ -808,8 +829,9 @@ grub_atapi_open (const char *name, struct grub_scsi *scsi)
|
||||||
|
|
||||||
for (dev = grub_ata_devices; dev; dev = dev->next)
|
for (dev = grub_ata_devices; dev; dev = dev->next)
|
||||||
{
|
{
|
||||||
char devname[7];
|
char devname[10];
|
||||||
grub_sprintf (devname, "ata%d", dev->port * 2 + dev->device);
|
grub_snprintf (devname, sizeof (devname),
|
||||||
|
"ata%d", dev->port * 2 + dev->device);
|
||||||
|
|
||||||
if (!grub_strcmp (devname, name))
|
if (!grub_strcmp (devname, name))
|
||||||
{
|
{
|
||||||
|
@ -821,7 +843,7 @@ grub_atapi_open (const char *name, struct grub_scsi *scsi)
|
||||||
grub_dprintf ("ata", "opening ATAPI dev `%s'\n", name);
|
grub_dprintf ("ata", "opening ATAPI dev `%s'\n", name);
|
||||||
|
|
||||||
if (! devfnd)
|
if (! devfnd)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "No such ATAPI device");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such ATAPI device");
|
||||||
|
|
||||||
scsi->data = devfnd;
|
scsi->data = devfnd;
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ grub_ata_pass_through (grub_disk_t disk,
|
||||||
{
|
{
|
||||||
if (disk->dev->id != GRUB_DISK_DEVICE_ATA_ID)
|
if (disk->dev->id != GRUB_DISK_DEVICE_ATA_ID)
|
||||||
return grub_error (GRUB_ERR_BAD_DEVICE,
|
return grub_error (GRUB_ERR_BAD_DEVICE,
|
||||||
"Device not accessed via ata.mod");
|
"device not accessed via ata.mod");
|
||||||
|
|
||||||
struct grub_ata_device *dev = (struct grub_ata_device *) disk->data;
|
struct grub_ata_device *dev = (struct grub_ata_device *) disk->data;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* dmraid_nvidia.c - module to handle Nvidia fakeraid. */
|
/* dmraid_nvidia.c - module to handle Nvidia fakeraid. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -107,7 +107,7 @@ grub_dmraid_nv_detect (grub_disk_t disk, struct grub_raid_array *array)
|
||||||
|
|
||||||
if (sb.version != NV_VERSION)
|
if (sb.version != NV_VERSION)
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"Unknown version: %d.%d", sb.version);
|
"unknown version: %d.%d", sb.version);
|
||||||
|
|
||||||
switch (sb.array.raid_level)
|
switch (sb.array.raid_level)
|
||||||
{
|
{
|
||||||
|
@ -129,7 +129,7 @@ grub_dmraid_nv_detect (grub_disk_t disk, struct grub_raid_array *array)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"Unsupported RAID level: %d", sb.array.raid_level);
|
"unsupported RAID level: %d", sb.array.raid_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
array->number = 0;
|
array->number = 0;
|
||||||
|
|
|
@ -440,7 +440,7 @@ grub_efidisk_iterate (int (*hook) (const char *name))
|
||||||
|
|
||||||
for (d = fd_devices, count = 0; d; d = d->next, count++)
|
for (d = fd_devices, count = 0; d; d = d->next, count++)
|
||||||
{
|
{
|
||||||
grub_sprintf (buf, "fd%d", count);
|
grub_snprintf (buf, sizeof (buf), "fd%d", count);
|
||||||
grub_dprintf ("efidisk", "iterating %s\n", buf);
|
grub_dprintf ("efidisk", "iterating %s\n", buf);
|
||||||
if (hook (buf))
|
if (hook (buf))
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -448,7 +448,7 @@ grub_efidisk_iterate (int (*hook) (const char *name))
|
||||||
|
|
||||||
for (d = hd_devices, count = 0; d; d = d->next, count++)
|
for (d = hd_devices, count = 0; d; d = d->next, count++)
|
||||||
{
|
{
|
||||||
grub_sprintf (buf, "hd%d", count);
|
grub_snprintf (buf, sizeof (buf), "hd%d", count);
|
||||||
grub_dprintf ("efidisk", "iterating %s\n", buf);
|
grub_dprintf ("efidisk", "iterating %s\n", buf);
|
||||||
if (hook (buf))
|
if (hook (buf))
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -456,7 +456,7 @@ grub_efidisk_iterate (int (*hook) (const char *name))
|
||||||
|
|
||||||
for (d = cd_devices, count = 0; d; d = d->next, count++)
|
for (d = cd_devices, count = 0; d; d = d->next, count++)
|
||||||
{
|
{
|
||||||
grub_sprintf (buf, "cd%d", count);
|
grub_snprintf (buf, sizeof (buf), "cd%d", count);
|
||||||
grub_dprintf ("efidisk", "iterating %s\n", buf);
|
grub_dprintf ("efidisk", "iterating %s\n", buf);
|
||||||
if (hook (buf))
|
if (hook (buf))
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -805,18 +805,10 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
device_name = grub_malloc (grub_strlen (parent->name) + 1
|
device_name = grub_xasprintf ("%s,%s", parent->name, partition_name);
|
||||||
+ grub_strlen (partition_name) + 1);
|
|
||||||
if (! device_name)
|
|
||||||
{
|
|
||||||
grub_free (partition_name);
|
grub_free (partition_name);
|
||||||
grub_disk_close (parent);
|
grub_disk_close (parent);
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_sprintf (device_name, "%s,%s", parent->name, partition_name);
|
|
||||||
grub_free (partition_name);
|
|
||||||
grub_disk_close (parent);
|
|
||||||
return device_name;
|
return device_name;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
136
disk/fs_file.c
136
disk/fs_file.c
|
@ -1,136 +0,0 @@
|
||||||
/* fs_file.c - Access partition by a file it contains. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2009 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/disk.h>
|
|
||||||
#include <grub/dl.h>
|
|
||||||
#include <grub/file.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/partition.h>
|
|
||||||
|
|
||||||
static grub_device_t
|
|
||||||
search_fs_file (const char *key, unsigned long *count)
|
|
||||||
{
|
|
||||||
char *filename = NULL;
|
|
||||||
grub_device_t ret = NULL;
|
|
||||||
*count = 0;
|
|
||||||
|
|
||||||
auto int iterate_device (const char *name);
|
|
||||||
int iterate_device (const char *name)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
grub_file_t file;
|
|
||||||
|
|
||||||
(*count)++;
|
|
||||||
|
|
||||||
len = grub_strlen (name) + 2 + grub_strlen (key) + 1;
|
|
||||||
filename = grub_realloc (filename, len);
|
|
||||||
if (! filename)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
grub_sprintf (filename, "(%s)%s", name, key);
|
|
||||||
file = grub_file_open (filename);
|
|
||||||
if (file)
|
|
||||||
{
|
|
||||||
grub_file_close (file);
|
|
||||||
ret = grub_device_open (name);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_device_iterate (iterate_device);
|
|
||||||
grub_free (filename);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_fs_file_open (const char *name, grub_disk_t disk)
|
|
||||||
{
|
|
||||||
grub_device_t dev;
|
|
||||||
|
|
||||||
if (grub_strncmp (name, "FILE=", sizeof ("FILE=") - 1))
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a FILE virtual volume");
|
|
||||||
|
|
||||||
dev = search_fs_file (name + sizeof ("FILE=") - 1, &disk->id);
|
|
||||||
if (! dev)
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no matching file found");
|
|
||||||
|
|
||||||
disk->total_sectors = dev->disk->total_sectors;
|
|
||||||
disk->has_partitions = 0;
|
|
||||||
if (dev->disk->partition)
|
|
||||||
{
|
|
||||||
disk->partition = grub_malloc (sizeof (*disk->partition));
|
|
||||||
if (disk->partition)
|
|
||||||
grub_memcpy (disk->partition, dev->disk->partition,
|
|
||||||
sizeof (*disk->partition));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
disk->partition = NULL;
|
|
||||||
|
|
||||||
disk->data = dev;
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
grub_fs_file_close (grub_disk_t disk)
|
|
||||||
{
|
|
||||||
grub_device_t parent = disk->data;
|
|
||||||
grub_device_close (parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_fs_file_read (grub_disk_t disk, grub_disk_addr_t sector,
|
|
||||||
grub_size_t size, char *buf)
|
|
||||||
{
|
|
||||||
grub_device_t parent = disk->data;
|
|
||||||
return parent->disk->dev->read (parent->disk, sector, size, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_fs_file_write (grub_disk_t disk, grub_disk_addr_t sector,
|
|
||||||
grub_size_t size, const char *buf)
|
|
||||||
{
|
|
||||||
grub_device_t parent = disk->data;
|
|
||||||
return parent->disk->dev->write (parent->disk, sector, size, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct grub_disk_dev grub_fs_file_dev = {
|
|
||||||
.name = "fs_file",
|
|
||||||
.id = GRUB_DISK_DEVICE_FILE_ID,
|
|
||||||
.open = grub_fs_file_open,
|
|
||||||
.close = grub_fs_file_close,
|
|
||||||
.read = grub_fs_file_read,
|
|
||||||
.write = grub_fs_file_write,
|
|
||||||
.next = 0
|
|
||||||
};
|
|
||||||
|
|
||||||
GRUB_MOD_INIT (fs_file)
|
|
||||||
{
|
|
||||||
grub_disk_dev_register (&grub_fs_file_dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI (fs_file)
|
|
||||||
{
|
|
||||||
grub_disk_dev_unregister (&grub_fs_file_dev);
|
|
||||||
}
|
|
149
disk/fs_uuid.c
149
disk/fs_uuid.c
|
@ -1,149 +0,0 @@
|
||||||
/* fs_uuid.c - Access disks by their filesystem UUID. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2007,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 <grub/disk.h>
|
|
||||||
#include <grub/dl.h>
|
|
||||||
#include <grub/kernel.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/types.h>
|
|
||||||
|
|
||||||
#include <grub/fs.h>
|
|
||||||
#include <grub/partition.h>
|
|
||||||
|
|
||||||
static grub_device_t
|
|
||||||
search_fs_uuid (const char *key, unsigned long *count)
|
|
||||||
{
|
|
||||||
*count = 0;
|
|
||||||
grub_device_t ret = NULL;
|
|
||||||
|
|
||||||
auto int iterate_device (const char *name);
|
|
||||||
int iterate_device (const char *name)
|
|
||||||
{
|
|
||||||
grub_device_t dev;
|
|
||||||
|
|
||||||
dev = grub_device_open (name);
|
|
||||||
if (dev)
|
|
||||||
{
|
|
||||||
grub_fs_t fs;
|
|
||||||
|
|
||||||
fs = grub_fs_probe (dev);
|
|
||||||
if (fs && fs->uuid)
|
|
||||||
{
|
|
||||||
char *uuid;
|
|
||||||
|
|
||||||
(fs->uuid) (dev, &uuid);
|
|
||||||
if (grub_errno == GRUB_ERR_NONE && uuid)
|
|
||||||
{
|
|
||||||
(*count)++;
|
|
||||||
|
|
||||||
if (grub_strcasecmp (uuid, key) == 0)
|
|
||||||
{
|
|
||||||
ret = dev;
|
|
||||||
grub_free (uuid);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
grub_free (uuid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_device_close (dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_device_iterate (iterate_device);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_fs_uuid_open (const char *name, grub_disk_t disk)
|
|
||||||
{
|
|
||||||
grub_device_t dev;
|
|
||||||
|
|
||||||
if (grub_strncmp (name, "UUID=", sizeof ("UUID=")-1))
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a UUID virtual volume");
|
|
||||||
|
|
||||||
dev = search_fs_uuid (name + sizeof ("UUID=") - 1, &disk->id);
|
|
||||||
if (! dev)
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no matching UUID found");
|
|
||||||
|
|
||||||
disk->total_sectors = dev->disk->total_sectors;
|
|
||||||
disk->has_partitions = 0;
|
|
||||||
if (dev->disk->partition)
|
|
||||||
{
|
|
||||||
disk->partition = grub_malloc (sizeof (*disk->partition));
|
|
||||||
if (disk->partition)
|
|
||||||
grub_memcpy (disk->partition, dev->disk->partition,
|
|
||||||
sizeof (*disk->partition));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
disk->partition = NULL;
|
|
||||||
|
|
||||||
disk->data = dev;
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
grub_fs_uuid_close (grub_disk_t disk __attribute((unused)))
|
|
||||||
{
|
|
||||||
grub_device_t parent = disk->data;
|
|
||||||
grub_device_close (parent);
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_fs_uuid_read (grub_disk_t disk, grub_disk_addr_t sector,
|
|
||||||
grub_size_t size, char *buf)
|
|
||||||
{
|
|
||||||
grub_device_t parent = disk->data;
|
|
||||||
return parent->disk->dev->read (parent->disk, sector, size, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_fs_uuid_write (grub_disk_t disk, grub_disk_addr_t sector,
|
|
||||||
grub_size_t size, const char *buf)
|
|
||||||
{
|
|
||||||
grub_device_t parent = disk->data;
|
|
||||||
return parent->disk->dev->write (parent->disk, sector, size, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct grub_disk_dev grub_fs_uuid_dev =
|
|
||||||
{
|
|
||||||
.name = "fs_uuid",
|
|
||||||
.id = GRUB_DISK_DEVICE_UUID_ID,
|
|
||||||
.open = grub_fs_uuid_open,
|
|
||||||
.close = grub_fs_uuid_close,
|
|
||||||
.read = grub_fs_uuid_read,
|
|
||||||
.write = grub_fs_uuid_write,
|
|
||||||
.next = 0
|
|
||||||
};
|
|
||||||
|
|
||||||
GRUB_MOD_INIT(fs_uuid)
|
|
||||||
{
|
|
||||||
grub_disk_dev_register (&grub_fs_uuid_dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI(fs_uuid)
|
|
||||||
{
|
|
||||||
grub_disk_dev_unregister (&grub_fs_uuid_dev);
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -56,7 +56,8 @@ grub_biosdisk_call_hook (int (*hook) (const char *name), int drive)
|
||||||
{
|
{
|
||||||
char name[10];
|
char name[10];
|
||||||
|
|
||||||
grub_sprintf (name, (drive & 0x80) ? "hd%d" : "fd%d", drive & (~0x80));
|
grub_snprintf (name, sizeof (name),
|
||||||
|
(drive & 0x80) ? "hd%d" : "fd%d", drive & (~0x80));
|
||||||
return hook (name);
|
return hook (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,7 +223,7 @@ grub_biosdisk_rw (int cmd, grub_disk_t disk,
|
||||||
if (cmd)
|
if (cmd)
|
||||||
return grub_error (GRUB_ERR_WRITE_ERROR, "can\'t write to cdrom");
|
return grub_error (GRUB_ERR_WRITE_ERROR, "can\'t write to cdrom");
|
||||||
|
|
||||||
dap->blocks = (dap->blocks + 3) >> 2;
|
dap->blocks = ALIGN_UP (dap->blocks, 4) >> 2;
|
||||||
dap->block >>= 2;
|
dap->block >>= 2;
|
||||||
|
|
||||||
for (i = 0; i < GRUB_BIOSDISK_CDROM_RETRY_COUNT; i++)
|
for (i = 0; i < GRUB_BIOSDISK_CDROM_RETRY_COUNT; i++)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* nand.c - NAND flash disk access. */
|
/* nand.c - NAND flash disk access. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
* Copyright (C) 2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -67,7 +67,7 @@ grub_nand_open (const char *name, grub_disk_t disk)
|
||||||
} args;
|
} args;
|
||||||
|
|
||||||
if (! grub_strstr (name, "nand"))
|
if (! grub_strstr (name, "nand"))
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Not a nand device");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a NAND device");
|
||||||
|
|
||||||
data = grub_malloc (sizeof (*data));
|
data = grub_malloc (sizeof (*data));
|
||||||
if (! data)
|
if (! data)
|
||||||
|
@ -76,7 +76,7 @@ grub_nand_open (const char *name, grub_disk_t disk)
|
||||||
grub_ieee1275_open (name, &dev_ihandle);
|
grub_ieee1275_open (name, &dev_ihandle);
|
||||||
if (! dev_ihandle)
|
if (! dev_ihandle)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Can't open device");
|
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ grub_nand_open (const char *name, grub_disk_t disk)
|
||||||
|
|
||||||
if ((IEEE1275_CALL_ENTRY_FN (&args) == -1) || (args.result))
|
if ((IEEE1275_CALL_ENTRY_FN (&args) == -1) || (args.result))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Can't get block size");
|
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't get block size");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ grub_nand_open (const char *name, grub_disk_t disk)
|
||||||
|
|
||||||
if ((IEEE1275_CALL_ENTRY_FN (&args) == -1) || (args.result))
|
if ((IEEE1275_CALL_ENTRY_FN (&args) == -1) || (args.result))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Can't get disk size");
|
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't get disk size");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ grub_nand_read (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
args.result = 1;
|
args.result = 1;
|
||||||
|
|
||||||
if ((IEEE1275_CALL_ENTRY_FN (&args) == -1) || (args.result))
|
if ((IEEE1275_CALL_ENTRY_FN (&args) == -1) || (args.result))
|
||||||
return grub_error (GRUB_ERR_READ_ERROR, "Read error");
|
return grub_error (GRUB_ERR_READ_ERROR, "read error");
|
||||||
|
|
||||||
ofs = 0;
|
ofs = 0;
|
||||||
size -= len;
|
size -= len;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* ofdisk.c - Open Firmware disk access. */
|
/* ofdisk.c - Open Firmware disk access. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2004,2006,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2004,2006,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -175,7 +175,7 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
|
||||||
grub_ieee1275_open (op->devpath, &dev_ihandle);
|
grub_ieee1275_open (op->devpath, &dev_ihandle);
|
||||||
if (! dev_ihandle)
|
if (! dev_ihandle)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Can't open device");
|
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,20 +184,20 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
|
||||||
|
|
||||||
if (grub_ieee1275_finddevice (op->devpath, &dev))
|
if (grub_ieee1275_finddevice (op->devpath, &dev))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Can't read device properties");
|
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't read device properties");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_ieee1275_get_property (dev, "device_type", prop, sizeof (prop),
|
if (grub_ieee1275_get_property (dev, "device_type", prop, sizeof (prop),
|
||||||
&actual))
|
&actual))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Can't read the device type");
|
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't read the device type");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_strcmp (prop, "block"))
|
if (grub_strcmp (prop, "block"))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_DEVICE, "Not a block device");
|
grub_error (GRUB_ERR_BAD_DEVICE, "not a block device");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,12 +244,12 @@ grub_ofdisk_read (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
(int) (pos >> 32), (int) pos & 0xFFFFFFFFUL, &status);
|
(int) (pos >> 32), (int) pos & 0xFFFFFFFFUL, &status);
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
return grub_error (GRUB_ERR_READ_ERROR,
|
return grub_error (GRUB_ERR_READ_ERROR,
|
||||||
"Seek error, can't seek block %llu",
|
"seek error, can't seek block %llu",
|
||||||
(long long) sector);
|
(long long) sector);
|
||||||
grub_ieee1275_read ((grub_ieee1275_ihandle_t) (unsigned long) disk->data,
|
grub_ieee1275_read ((grub_ieee1275_ihandle_t) (unsigned long) disk->data,
|
||||||
buf, size * 512UL, &actual);
|
buf, size * 512UL, &actual);
|
||||||
if (actual != actual)
|
if (actual != actual)
|
||||||
return grub_error (GRUB_ERR_READ_ERROR, "Read error on block: %llu",
|
return grub_error (GRUB_ERR_READ_ERROR, "read error on block: %llu",
|
||||||
(long long) sector);
|
(long long) sector);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
struct grub_loopback
|
struct grub_loopback
|
||||||
{
|
{
|
||||||
|
@ -36,8 +37,8 @@ static struct grub_loopback *loopback_list;
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"delete", 'd', 0, "delete the loopback device entry", 0, 0},
|
{"delete", 'd', 0, N_("Delete the loopback device entry."), 0, 0},
|
||||||
{"partitions", 'p', 0, "simulate a hard drive with partitions", 0, 0},
|
{"partitions", 'p', 0, N_("Simulate a hard drive with partitions."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -56,7 +57,7 @@ delete_loopback (const char *name)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (! dev)
|
if (! dev)
|
||||||
return grub_error (GRUB_ERR_BAD_DEVICE, "Device not found");
|
return grub_error (GRUB_ERR_BAD_DEVICE, "device not found");
|
||||||
|
|
||||||
/* Remove the device from the list. */
|
/* Remove the device from the list. */
|
||||||
*prev = dev->next;
|
*prev = dev->next;
|
||||||
|
@ -167,7 +168,7 @@ grub_loopback_open (const char *name, grub_disk_t disk)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (! dev)
|
if (! dev)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Can't open device");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
|
||||||
|
|
||||||
file = grub_file_open (dev->filename);
|
file = grub_file_open (dev->filename);
|
||||||
if (! file)
|
if (! file)
|
||||||
|
@ -245,8 +246,8 @@ GRUB_MOD_INIT(loop)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("loopback", grub_cmd_loopback,
|
cmd = grub_register_extcmd ("loopback", grub_cmd_loopback,
|
||||||
GRUB_COMMAND_FLAG_BOTH,
|
GRUB_COMMAND_FLAG_BOTH,
|
||||||
"loopback [-d|-p] DEVICENAME FILE",
|
N_("[-d|-p] DEVICENAME FILE."),
|
||||||
"Make a device of a file.", options);
|
N_("Make a device of a file."), options);
|
||||||
grub_disk_dev_register (&grub_loopback_dev);
|
grub_disk_dev_register (&grub_loopback_dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
10
disk/lvm.c
10
disk/lvm.c
|
@ -1,7 +1,7 @@
|
||||||
/* lvm.c - module to read Logical Volumes. */
|
/* lvm.c - module to read Logical Volumes. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -95,7 +95,7 @@ grub_lvm_open (const char *name, grub_disk_t disk)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! lv)
|
if (! lv)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Unknown LVM device %s", name);
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown LVM device %s", name);
|
||||||
|
|
||||||
disk->has_partitions = 0;
|
disk->has_partitions = 0;
|
||||||
disk->id = lv->number;
|
disk->id = lv->number;
|
||||||
|
@ -188,7 +188,7 @@ grub_lvm_read (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
size << GRUB_DISK_SECTOR_BITS, buf);
|
size << GRUB_DISK_SECTOR_BITS, buf);
|
||||||
else
|
else
|
||||||
err = grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
err = grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||||
"Physical volume %s not found", pv->name);
|
"physical volume %s not found", pv->name);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -263,7 +263,7 @@ grub_lvm_scan_device (const char *name)
|
||||||
if (dlocn->offset)
|
if (dlocn->offset)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"We don't support multiple LVM data areas");
|
"we don't support multiple LVM data areas");
|
||||||
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
@ -290,7 +290,7 @@ grub_lvm_scan_device (const char *name)
|
||||||
|| (grub_le_to_cpu32 (mdah->version) != GRUB_LVM_FMTT_VERSION))
|
|| (grub_le_to_cpu32 (mdah->version) != GRUB_LVM_FMTT_VERSION))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"Unknown LVM metadata header");
|
"unknown LVM metadata header");
|
||||||
goto fail2;
|
goto fail2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,7 @@ grub_mdraid_detect (grub_disk_t disk, struct grub_raid_array *array)
|
||||||
/* FIXME: Also support version 1.0. */
|
/* FIXME: Also support version 1.0. */
|
||||||
if (sb.major_version != 0 || sb.minor_version != 90)
|
if (sb.major_version != 0 || sb.minor_version != 90)
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"Unsupported RAID version: %d.%d",
|
"unsupported RAID version: %d.%d",
|
||||||
sb.major_version, sb.minor_version);
|
sb.major_version, sb.minor_version);
|
||||||
|
|
||||||
/* FIXME: Check the checksum. */
|
/* FIXME: Check the checksum. */
|
||||||
|
@ -193,7 +193,7 @@ grub_mdraid_detect (grub_disk_t disk, struct grub_raid_array *array)
|
||||||
if (sb.level != 0 && sb.level != 1 && sb.level != 4 &&
|
if (sb.level != 0 && sb.level != 1 && sb.level != 4 &&
|
||||||
sb.level != 5 && sb.level != 6 && sb.level != 10)
|
sb.level != 5 && sb.level != 6 && sb.level != 10)
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"Unsupported RAID level: %d", sb.level);
|
"unsupported RAID level: %d", sb.level);
|
||||||
|
|
||||||
array->number = sb.md_minor;
|
array->number = sb.md_minor;
|
||||||
array->level = sb.level;
|
array->level = sb.level;
|
||||||
|
|
10
disk/raid.c
10
disk/raid.c
|
@ -1,7 +1,7 @@
|
||||||
/* raid.c - module to read RAID arrays. */
|
/* raid.c - module to read RAID arrays. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -123,7 +123,7 @@ grub_raid_open (const char *name, grub_disk_t disk)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!array)
|
if (!array)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Unknown RAID device %s",
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown RAID device %s",
|
||||||
name);
|
name);
|
||||||
|
|
||||||
disk->has_partitions = 1;
|
disk->has_partitions = 1;
|
||||||
|
@ -265,7 +265,7 @@ grub_raid_read (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
err = grub_error (GRUB_ERR_READ_ERROR,
|
err = grub_error (GRUB_ERR_READ_ERROR,
|
||||||
"disk missing.");
|
"disk missing");
|
||||||
|
|
||||||
k++;
|
k++;
|
||||||
if (k == array->total_devs)
|
if (k == array->total_devs)
|
||||||
|
@ -556,7 +556,7 @@ insert_array (grub_disk_t disk, struct grub_raid_array *new_array,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
array->name = grub_malloc (13);
|
array->name = grub_xasprintf ("md%d", array->number);
|
||||||
if (! array->name)
|
if (! array->name)
|
||||||
{
|
{
|
||||||
grub_free (array->uuid);
|
grub_free (array->uuid);
|
||||||
|
@ -565,8 +565,6 @@ insert_array (grub_disk_t disk, struct grub_raid_array *new_array,
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_sprintf (array->name, "md%d", array->number);
|
|
||||||
|
|
||||||
grub_dprintf ("raid", "Found array %s (%s)\n", array->name,
|
grub_dprintf ("raid", "Found array %s (%s)\n", array->name,
|
||||||
scanner_name);
|
scanner_name);
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* raid6_recover.c - module to recover from faulty RAID6 arrays. */
|
/* raid6_recover.c - module to recover from faulty RAID6 arrays. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
|
* Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -157,7 +157,7 @@ grub_raid6_recover (struct grub_raid_array *array, int disknr, int p,
|
||||||
|
|
||||||
if (! array->device[q])
|
if (! array->device[q])
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_READ_ERROR, "Not enough disk to restore");
|
grub_error (GRUB_ERR_READ_ERROR, "not enough disk to restore");
|
||||||
goto quit;
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +176,7 @@ grub_raid6_recover (struct grub_raid_array *array, int disknr, int p,
|
||||||
|
|
||||||
if ((! array->device[p]) || (! array->device[q]))
|
if ((! array->device[p]) || (! array->device[q]))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_READ_ERROR, "Not enough disk to restore");
|
grub_error (GRUB_ERR_READ_ERROR, "not enough disk to restore");
|
||||||
goto quit;
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
disk/scsi.c
13
disk/scsi.c
|
@ -1,7 +1,7 @@
|
||||||
/* scsi.c - scsi support. */
|
/* scsi.c - scsi support. */
|
||||||
/*
|
/*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
* Copyright (C) 2008,2009 Free Software Foundation, Inc.
|
||||||
*
|
*
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
* GRUB is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -197,7 +197,6 @@ grub_scsi_iterate (int (*hook) (const char *name))
|
||||||
|
|
||||||
int scsi_iterate (const char *name, int luns)
|
int scsi_iterate (const char *name, int luns)
|
||||||
{
|
{
|
||||||
char sname[40];
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* In case of a single LUN, just return `usbX'. */
|
/* In case of a single LUN, just return `usbX'. */
|
||||||
|
@ -208,9 +207,13 @@ grub_scsi_iterate (int (*hook) (const char *name))
|
||||||
distinguish it. */
|
distinguish it. */
|
||||||
for (i = 0; i < luns; i++)
|
for (i = 0; i < luns; i++)
|
||||||
{
|
{
|
||||||
grub_sprintf (sname, "%s%c", name, 'a' + i);
|
char *sname;
|
||||||
|
sname = grub_xasprintf ("%s%c", name, 'a' + i);
|
||||||
|
if (!sname)
|
||||||
|
return 1;
|
||||||
if (hook (sname))
|
if (hook (sname))
|
||||||
return 1;
|
return 1;
|
||||||
|
grub_free (sname);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -337,14 +340,14 @@ grub_scsi_read (grub_disk_t disk, grub_disk_addr_t sector,
|
||||||
unsigned spb = scsi->blocksize >> GRUB_DISK_SECTOR_BITS;
|
unsigned spb = scsi->blocksize >> GRUB_DISK_SECTOR_BITS;
|
||||||
if (! (spb != 0 && (scsi->blocksize & GRUB_DISK_SECTOR_SIZE) == 0))
|
if (! (spb != 0 && (scsi->blocksize & GRUB_DISK_SECTOR_SIZE) == 0))
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"Unsupported SCSI block size");
|
"unsupported SCSI block size");
|
||||||
|
|
||||||
grub_uint32_t sector_mod = 0;
|
grub_uint32_t sector_mod = 0;
|
||||||
sector = grub_divmod64 (sector, spb, §or_mod);
|
sector = grub_divmod64 (sector, spb, §or_mod);
|
||||||
|
|
||||||
if (! (sector_mod == 0 && size % spb == 0))
|
if (! (sector_mod == 0 && size % spb == 0))
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"Unaligned SCSI read not supported");
|
"unaligned SCSI read not supported");
|
||||||
|
|
||||||
size /= spb;
|
size /= spb;
|
||||||
}
|
}
|
||||||
|
|
|
@ -200,11 +200,15 @@ grub_usbms_iterate (int (*hook) (const char *name, int luns))
|
||||||
|
|
||||||
for (p = grub_usbms_dev_list; p; p = p->next)
|
for (p = grub_usbms_dev_list; p; p = p->next)
|
||||||
{
|
{
|
||||||
char devname[20];
|
char *devname;
|
||||||
grub_sprintf (devname, "usb%d", cnt);
|
devname = grub_xasprintf ("usb%d", cnt);
|
||||||
|
|
||||||
if (hook (devname, p->luns))
|
if (hook (devname, p->luns))
|
||||||
|
{
|
||||||
|
grub_free (devname);
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
grub_free (devname);
|
||||||
cnt++;
|
cnt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -214,7 +214,7 @@ grub_efiemu_load_file (const char *filename)
|
||||||
{
|
{
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
grub_efiemu_unload ();
|
grub_efiemu_unload ();
|
||||||
return grub_error (grub_errno, "Couldn't init memory management");
|
return grub_error (grub_errno, "couldn't init memory management");
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_dprintf ("efiemu", "mm initialized\n");
|
grub_dprintf ("efiemu", "mm initialized\n");
|
||||||
|
@ -255,12 +255,11 @@ grub_efiemu_autocore (void)
|
||||||
|
|
||||||
suffix = grub_efiemu_get_default_core_name ();
|
suffix = grub_efiemu_get_default_core_name ();
|
||||||
|
|
||||||
filename = grub_malloc (grub_strlen (prefix) + grub_strlen (suffix) + 2);
|
filename = grub_xasprintf ("%s/%s", prefix, suffix);
|
||||||
if (! filename)
|
if (! filename)
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||||
"couldn't allocate temporary space");
|
"couldn't allocate temporary space");
|
||||||
|
|
||||||
grub_sprintf (filename, "%s/%s", prefix, suffix);
|
|
||||||
|
|
||||||
err = grub_efiemu_load_file (filename);
|
err = grub_efiemu_load_file (filename);
|
||||||
grub_free (filename);
|
grub_free (filename);
|
||||||
|
@ -328,15 +327,15 @@ GRUB_MOD_INIT(efiemu)
|
||||||
{
|
{
|
||||||
cmd_loadcore = grub_register_command ("efiemu_loadcore",
|
cmd_loadcore = grub_register_command ("efiemu_loadcore",
|
||||||
grub_cmd_efiemu_load,
|
grub_cmd_efiemu_load,
|
||||||
"efiemu_loadcore FILE",
|
"FILE",
|
||||||
"Load and initialize EFI emulator");
|
"Load and initialize EFI emulator.");
|
||||||
cmd_prepare = grub_register_command ("efiemu_prepare",
|
cmd_prepare = grub_register_command ("efiemu_prepare",
|
||||||
grub_cmd_efiemu_prepare,
|
grub_cmd_efiemu_prepare,
|
||||||
"efiemu_prepare",
|
0,
|
||||||
"Finalize loading of EFI emulator");
|
"Finalize loading of EFI emulator.");
|
||||||
cmd_unload = grub_register_command ("efiemu_unload", grub_cmd_efiemu_unload,
|
cmd_unload = grub_register_command ("efiemu_unload", grub_cmd_efiemu_unload,
|
||||||
"efiemu_unload",
|
0,
|
||||||
"Unload EFI emulator");
|
"Unload EFI emulator.");
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(efiemu)
|
GRUB_MOD_FINI(efiemu)
|
||||||
|
|
|
@ -67,7 +67,7 @@ grub_efiemu_add_to_mmap (grub_uint64_t start, grub_uint64_t size,
|
||||||
* sizeof (grub_efi_memory_descriptor_t));
|
* sizeof (grub_efi_memory_descriptor_t));
|
||||||
if (!efiemu_mmap)
|
if (!efiemu_mmap)
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
||||||
"Not enough space for memory map");
|
"not enough space for memory map");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fill slot*/
|
/* Fill slot*/
|
||||||
|
@ -622,7 +622,7 @@ grub_efiemu_mm_do_alloc (void)
|
||||||
if (!efiemu_mmap)
|
if (!efiemu_mmap)
|
||||||
{
|
{
|
||||||
grub_efiemu_unload ();
|
grub_efiemu_unload ();
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY, "Couldn't initialize mmap");
|
return grub_error (GRUB_ERR_OUT_OF_MEMORY, "couldn't initialize mmap");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((err = efiemu_alloc_requests ()))
|
if ((err = efiemu_alloc_requests ()))
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue