Merge branch 'master' into leiflindholm/arm64
This commit is contained in:
commit
96fa2d9d02
33 changed files with 519 additions and 96 deletions
|
@ -574,6 +574,7 @@ module = {
|
|||
module = {
|
||||
name = pci;
|
||||
common = bus/pci.c;
|
||||
i386_ieee1275 = bus/i386/ieee1275/pci.c;
|
||||
|
||||
enable = i386_pc;
|
||||
enable = i386_ieee1275;
|
||||
|
|
42
grub-core/bus/i386/ieee1275/pci.c
Normal file
42
grub-core/bus/i386/ieee1275/pci.c
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2013 Free Software Foundation, Inc.
|
||||
*
|
||||
* GRUB is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GRUB is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <grub/dl.h>
|
||||
#include <grub/pci.h>
|
||||
#include <grub/mm.h>
|
||||
#include <grub/misc.h>
|
||||
#include <grub/ieee1275/ieee1275.h>
|
||||
|
||||
volatile void *
|
||||
grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
|
||||
grub_addr_t base,
|
||||
grub_size_t size)
|
||||
{
|
||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_REAL_MODE))
|
||||
return (volatile void *) base;
|
||||
if (grub_ieee1275_map (base, base, size, 7))
|
||||
grub_fatal ("couldn't map 0x%lx", base);
|
||||
return (volatile void *) base;
|
||||
}
|
||||
|
||||
void
|
||||
grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
|
||||
volatile void *mem __attribute__ ((unused)),
|
||||
grub_size_t size __attribute__ ((unused)))
|
||||
{
|
||||
}
|
|
@ -735,6 +735,7 @@ grub_legacy_check_md5_password (int argc, char **args,
|
|||
char *entered)
|
||||
{
|
||||
struct legacy_md5_password *pw = NULL;
|
||||
int ret;
|
||||
|
||||
if (args[0][0] != '-' || args[0][1] != '-')
|
||||
{
|
||||
|
@ -751,7 +752,9 @@ grub_legacy_check_md5_password (int argc, char **args,
|
|||
if (!pw)
|
||||
return 0;
|
||||
|
||||
return check_password_md5_real (entered, pw);
|
||||
ret = check_password_md5_real (entered, pw);
|
||||
grub_free (pw);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static grub_err_t
|
||||
|
|
|
@ -192,6 +192,10 @@ free_pk (struct grub_public_key *pk)
|
|||
struct grub_public_subkey *nsk, *sk;
|
||||
for (sk = pk->subkeys; sk; sk = nsk)
|
||||
{
|
||||
grub_size_t i;
|
||||
for (i = 0; i < ARRAY_SIZE (sk->mpis); i++)
|
||||
if (sk->mpis[i])
|
||||
gcry_mpi_release (sk->mpis[i]);
|
||||
nsk = sk->next;
|
||||
grub_free (sk);
|
||||
}
|
||||
|
@ -244,6 +248,7 @@ grub_load_public_key (grub_file_t f)
|
|||
if (type == 0xff)
|
||||
{
|
||||
grub_free (fingerprint_context);
|
||||
grub_free (buffer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -631,6 +636,9 @@ grub_verify_signature_real (char *buf, grub_size_t size,
|
|||
if ((*pkalgos[pk].algo)->verify (0, hmpi, mpis, sk->mpis, 0, 0))
|
||||
goto fail;
|
||||
|
||||
grub_free (context);
|
||||
grub_free (readbuf);
|
||||
|
||||
return GRUB_ERR_NONE;
|
||||
|
||||
fail:
|
||||
|
@ -736,8 +744,8 @@ static grub_err_t
|
|||
grub_cmd_verify_signature (grub_extcmd_context_t ctxt,
|
||||
int argc, char **args)
|
||||
{
|
||||
grub_file_t f, sig;
|
||||
grub_err_t err;
|
||||
grub_file_t f = NULL, sig = NULL;
|
||||
grub_err_t err = GRUB_ERR_NONE;
|
||||
struct grub_public_key *pk = NULL;
|
||||
|
||||
grub_dprintf ("crypt", "alive\n");
|
||||
|
@ -768,19 +776,27 @@ grub_cmd_verify_signature (grub_extcmd_context_t ctxt,
|
|||
grub_file_filter_disable_all ();
|
||||
f = grub_file_open (args[0]);
|
||||
if (!f)
|
||||
return grub_errno;
|
||||
{
|
||||
err = grub_errno;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
grub_file_filter_disable_all ();
|
||||
sig = grub_file_open (args[1]);
|
||||
if (!sig)
|
||||
{
|
||||
grub_file_close (f);
|
||||
return grub_errno;
|
||||
err = grub_errno;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
err = grub_verify_signature (f, sig, pk);
|
||||
grub_file_close (f);
|
||||
grub_file_close (sig);
|
||||
fail:
|
||||
if (sig)
|
||||
grub_file_close (sig);
|
||||
if (f)
|
||||
grub_file_close (f);
|
||||
if (pk)
|
||||
free_pk (pk);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,6 +47,7 @@ grub_ubootdisk_register (struct device_info *newdev)
|
|||
{
|
||||
case DT_STOR_IDE:
|
||||
case DT_STOR_SATA:
|
||||
case DT_STOR_SCSI:
|
||||
case DT_STOR_MMC:
|
||||
case DT_STOR_USB:
|
||||
/* hd */
|
||||
|
|
|
@ -87,9 +87,6 @@ grub_file_open (const char *name)
|
|||
if (! file)
|
||||
goto fail;
|
||||
|
||||
file->name = grub_strdup (name);
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
file->device = device;
|
||||
|
||||
if (device->disk && file_name[0] != '/')
|
||||
|
@ -105,6 +102,9 @@ grub_file_open (const char *name)
|
|||
if ((file->fs->open) (file, file_name) != GRUB_ERR_NONE)
|
||||
goto fail;
|
||||
|
||||
file->name = grub_strdup (name);
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
for (filter = 0; file && filter < ARRAY_SIZE (grub_file_filters_enabled);
|
||||
filter++)
|
||||
if (grub_file_filters_enabled[filter])
|
||||
|
@ -187,6 +187,7 @@ grub_file_close (grub_file_t file)
|
|||
|
||||
if (file->device)
|
||||
grub_device_close (file->device);
|
||||
grub_free (file->name);
|
||||
grub_free (file);
|
||||
return grub_errno;
|
||||
}
|
||||
|
|
|
@ -49,7 +49,7 @@ grub_machine_init (void)
|
|||
}
|
||||
|
||||
/* FIXME: measure this. */
|
||||
grub_arch_cpuclock = 64000000;
|
||||
grub_arch_cpuclock = 200000000;
|
||||
|
||||
modend = grub_modules_get_end ();
|
||||
grub_mm_init_region ((void *) modend, grub_arch_memsize
|
||||
|
|
|
@ -298,7 +298,10 @@ grub_real_malloc (grub_mm_header_t *first, grub_size_t n, grub_size_t align)
|
|||
/* Mark find as a start marker for next allocation to fasten it.
|
||||
This will have side effect of fragmenting memory as small
|
||||
pieces before this will be un-used. */
|
||||
*first = q;
|
||||
/* So do it only for chunks under 64K. */
|
||||
if (n < (0x8000 >> GRUB_MM_ALIGN_LOG2)
|
||||
|| *first == p)
|
||||
*first = q;
|
||||
|
||||
return p + 1;
|
||||
}
|
||||
|
|
|
@ -47,10 +47,11 @@ FUNCTION(grub_setjmp)
|
|||
stw 28, 60(3)
|
||||
stw 29, 64(3)
|
||||
stw 30, 68(3)
|
||||
stw 31, 72(3)
|
||||
mflr 4
|
||||
stw 4, 72(3)
|
||||
mfcr 4
|
||||
stw 4, 76(3)
|
||||
mfcr 4
|
||||
stw 4, 80(3)
|
||||
li 3, 0
|
||||
blr
|
||||
|
||||
|
@ -76,9 +77,10 @@ FUNCTION(grub_longjmp)
|
|||
lwz 28, 60(3)
|
||||
lwz 29, 64(3)
|
||||
lwz 30, 68(3)
|
||||
lwz 5, 72(3)
|
||||
mtlr 5
|
||||
lwz 31, 72(3)
|
||||
lwz 5, 76(3)
|
||||
mtlr 5
|
||||
lwz 5, 80(3)
|
||||
mtcr 5
|
||||
mr. 3, 4
|
||||
bne 1f
|
||||
|
|
|
@ -1618,7 +1618,7 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr,
|
|||
}
|
||||
|
||||
void
|
||||
grub_mm_check_real (char *file, int line)
|
||||
grub_mm_check_real (const char *file, int line)
|
||||
{
|
||||
grub_mm_region_t r;
|
||||
grub_mm_header_t p, pa;
|
||||
|
|
|
@ -41,7 +41,11 @@ FUNCTION(grub_setjmp)
|
|||
FUNCTION(grub_longjmp)
|
||||
ldx [%o0 + 0x10], %g1
|
||||
movrz %o1, 1, %o1
|
||||
|
||||
save %sp, -64, %sp
|
||||
flushw
|
||||
restore
|
||||
|
||||
ldx [%o0 + 0x00], %o7
|
||||
ldx [%o0 + 0x08], %fp
|
||||
sub %fp, 192, %sp
|
||||
|
|
|
@ -379,12 +379,18 @@ grub_cmdline_get (const char *prompt_translated)
|
|||
|
||||
cl_terms = grub_malloc (sizeof (cl_terms[0]) * nterms);
|
||||
if (!cl_terms)
|
||||
return 0;
|
||||
{
|
||||
grub_free (buf);
|
||||
return 0;
|
||||
}
|
||||
cl_term_cur = cl_terms;
|
||||
|
||||
unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t));
|
||||
if (!unicode_msg)
|
||||
return 0;;
|
||||
{
|
||||
grub_free (buf);
|
||||
return 0;
|
||||
}
|
||||
msg_len = grub_utf8_to_ucs4 (unicode_msg, msg_len - 1,
|
||||
(grub_uint8_t *) prompt_translated, -1, 0);
|
||||
unicode_msg[msg_len++] = ' ';
|
||||
|
@ -621,6 +627,7 @@ grub_cmdline_get (const char *prompt_translated)
|
|||
|
||||
case '\e':
|
||||
grub_free (cl_terms);
|
||||
grub_free (buf);
|
||||
return 0;
|
||||
|
||||
case '\b':
|
||||
|
|
|
@ -281,7 +281,8 @@ grub_util_make_temporary_file (void)
|
|||
memcpy (tmp, t, tl);
|
||||
memcpy (tmp + tl, "/grub.XXXXXX",
|
||||
sizeof ("/grub.XXXXXX"));
|
||||
mkstemp (tmp);
|
||||
if (mkstemp (tmp) == -1)
|
||||
grub_util_error (_("cannot make temporary file: %s"), strerror (errno));
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
@ -298,7 +299,9 @@ grub_util_make_temporary_dir (void)
|
|||
memcpy (tmp, t, tl);
|
||||
memcpy (tmp + tl, "/grub.XXXXXX",
|
||||
sizeof ("/grub.XXXXXX"));
|
||||
mkdtemp (tmp);
|
||||
if (!mkdtemp (tmp))
|
||||
grub_util_error (_("cannot make temporary directory: %s"),
|
||||
strerror (errno));
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
|
|
@ -748,8 +748,8 @@ grub_cmd_terminfo (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||
{
|
||||
struct grub_terminfo_output_state *data
|
||||
= (struct grub_terminfo_output_state *) cur->data;
|
||||
data->pos.x = w;
|
||||
data->pos.y = h;
|
||||
data->size.x = w;
|
||||
data->size.y = h;
|
||||
}
|
||||
|
||||
if (argc == 1)
|
||||
|
|
|
@ -66,16 +66,25 @@ struct grub_procfs_entry test_txt =
|
|||
.get_contents = get_test_txt
|
||||
};
|
||||
|
||||
#define FONT_NAME "Unknown Regular 16"
|
||||
|
||||
/* Functional test main method. */
|
||||
static void
|
||||
cmdline_cat_test (void)
|
||||
{
|
||||
unsigned i;
|
||||
grub_font_t font;
|
||||
|
||||
grub_dl_load ("gfxterm");
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
if (grub_font_load ("unicode") == 0)
|
||||
font = grub_font_get (FONT_NAME);
|
||||
if (font && grub_strcmp (font->name, FONT_NAME) != 0)
|
||||
font = 0;
|
||||
if (!font)
|
||||
font = grub_font_load ("unicode");
|
||||
|
||||
if (!font)
|
||||
{
|
||||
grub_test_assert (0, "unicode font not found: %s", grub_errmsg);
|
||||
return;
|
||||
|
|
|
@ -91,17 +91,30 @@ struct
|
|||
{ "gfxterm_high", "menu_color_highlight", "blue/red" },
|
||||
};
|
||||
|
||||
#define FONT_NAME "Unknown Regular 16"
|
||||
|
||||
/* Functional test main method. */
|
||||
static void
|
||||
gfxterm_menu (void)
|
||||
{
|
||||
unsigned i, j;
|
||||
grub_font_t font;
|
||||
|
||||
grub_dl_load ("png");
|
||||
grub_dl_load ("gettext");
|
||||
grub_dl_load ("gfxterm");
|
||||
|
||||
if (grub_font_load ("unicode") == 0)
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
|
||||
grub_dl_load ("gfxmenu");
|
||||
|
||||
font = grub_font_get (FONT_NAME);
|
||||
if (font && grub_strcmp (font->name, FONT_NAME) != 0)
|
||||
font = 0;
|
||||
if (!font)
|
||||
font = grub_font_load ("unicode");
|
||||
|
||||
if (!font)
|
||||
{
|
||||
grub_test_assert (0, "unicode font not found: %s", grub_errmsg);
|
||||
return;
|
||||
|
@ -112,7 +125,16 @@ gfxterm_menu (void)
|
|||
for (j = 0; j < ARRAY_SIZE (tests); j++)
|
||||
for (i = 0; i < GRUB_TEST_VIDEO_SMALL_N_MODES; i++)
|
||||
{
|
||||
grub_uint64_t start = grub_get_time_ms ();
|
||||
grub_uint64_t start;
|
||||
|
||||
#if defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_IEEE1275)
|
||||
if (grub_test_video_modes[i].width > 1024)
|
||||
continue;
|
||||
if (grub_strcmp (tests[j].name, "gfxmenu") == 0
|
||||
&& grub_test_video_modes[i].width > 800)
|
||||
continue;
|
||||
#endif
|
||||
start = grub_get_time_ms ();
|
||||
|
||||
grub_video_capture_start (&grub_test_video_modes[i],
|
||||
grub_video_fbstd_colors,
|
||||
|
|
|
@ -26,13 +26,22 @@
|
|||
|
||||
GRUB_MOD_LICENSE ("GPLv3+");
|
||||
|
||||
#define FONT_NAME "Unknown Regular 16"
|
||||
|
||||
/* Functional test main method. */
|
||||
static void
|
||||
videotest_checksum (void)
|
||||
{
|
||||
unsigned i;
|
||||
grub_font_t font;
|
||||
|
||||
if (grub_font_load ("unicode") == 0)
|
||||
font = grub_font_get (FONT_NAME);
|
||||
if (font && grub_strcmp (font->name, FONT_NAME) != 0)
|
||||
font = 0;
|
||||
if (!font)
|
||||
font = grub_font_load ("unicode");
|
||||
|
||||
if (!font)
|
||||
{
|
||||
grub_test_assert (0, "unicode font not found: %s", grub_errmsg);
|
||||
return;
|
||||
|
@ -40,9 +49,20 @@ videotest_checksum (void)
|
|||
|
||||
for (i = 0; i < ARRAY_SIZE (grub_test_video_modes); i++)
|
||||
{
|
||||
grub_video_capture_start (&grub_test_video_modes[i],
|
||||
grub_video_fbstd_colors,
|
||||
grub_test_video_modes[i].number_of_colors);
|
||||
grub_err_t err;
|
||||
#if defined (GRUB_MACHINE_MIPS_QEMU_MIPS) || defined (GRUB_MACHINE_IEEE1275)
|
||||
if (grub_test_video_modes[i].width > 1024)
|
||||
continue;
|
||||
#endif
|
||||
err = grub_video_capture_start (&grub_test_video_modes[i],
|
||||
grub_video_fbstd_colors,
|
||||
grub_test_video_modes[i].number_of_colors);
|
||||
if (err)
|
||||
{
|
||||
grub_test_assert (0, "can't start capture: %s", grub_errmsg);
|
||||
grub_print_error ();
|
||||
continue;
|
||||
}
|
||||
grub_terminal_input_fake_sequence ((int []) { '\n' }, 1);
|
||||
|
||||
grub_video_checksum ("videotest");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue