rpms/grub/devel grub-keystatus.patch,NONE,1.1 grub.spec,1.74,1.75
Peter Jones (pjones)
fedora-extras-commits at redhat.com
Wed Jun 25 23:43:28 UTC 2008
- Previous message (by thread): rpms/ranpwd/devel .cvsignore, NONE, 1.1 Makefile, NONE, 1.1 sources, NONE, 1.1
- Next message (by thread): rpms/gwget/devel gwget-0.99-missing-remove-signal.patch, NONE, 1.1 gwget-0.99-epiphany.patch, 1.2, 1.3 gwget.desktop, 1.2, 1.3 gwget.spec, 1.25, 1.26
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: pjones
Update of /cvs/extras/rpms/grub/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv20867
Modified Files:
grub.spec
Added Files:
grub-keystatus.patch
Log Message:
* Wed Jun 25 2008 Peter Jones <pjones at redhat.com> - 0.97-34
- Add keystatus patch from krh.
grub-keystatus.patch:
--- NEW FILE grub-keystatus.patch ---
diff --git a/efi/eficon.c b/efi/eficon.c
index 63cc2cc..037f050 100644
--- a/efi/eficon.c
+++ b/efi/eficon.c
@@ -212,6 +212,13 @@ console_getkey (void)
}
int
+console_keystatus (void)
+{
+ /* Doesn't look like EFI can support this... */
+ return 0;
+}
+
+int
console_getxy (void)
{
grub_efi_simple_text_output_interface_t *o;
diff --git a/grub/asmstub.c b/grub/asmstub.c
index dac7484..f420074 100644
--- a/grub/asmstub.c
+++ b/grub/asmstub.c
@@ -786,6 +786,13 @@ console_getkey (void)
return console_translate_key (c);
}
+/* returns modifier status */
+int
+console_keystatus (void)
+{
+ return 0;
+}
+
/* returns packed values, LSB+1 is x, LSB is y */
int
console_getxy (void)
diff --git a/stage1/stage1.S b/stage1/stage1.S
index 985963d..3a896be 100644
--- a/stage1/stage1.S
+++ b/stage1/stage1.S
@@ -31,6 +31,8 @@
/* Print message string */
#define MSG(x) movw $ABS(x), %si; call message
+ /* Print verbose message string */
+#define VMSG(x)
/* XXX: binutils-2.9.1.0.x doesn't produce a short opcode for this. */
#define MOV_MEM_TO_AL(x) .byte 0xa0; .word x
@@ -151,7 +153,7 @@ real_start:
pushw %dx
/* print a notification message on the screen */
- MSG(notification_string)
+ VMSG(notification_string)
/* do not probe LBA if the drive is a floppy */
testb $STAGE1_BIOS_HD_FLAG, %dl
diff --git a/stage2/asm.S b/stage2/asm.S
index 655e707..93efa11 100644
--- a/stage2/asm.S
+++ b/stage2/asm.S
@@ -2096,6 +2096,37 @@ pending:
pop %ebp
ret
+
+/*
+ * int console_keystatus (void)
+ * BIOS call "INT 16H Function 02H" to get keyboard modifier status
+ * Call with %ah = 0x2
+ * Return: %al = keyboard state:
+ * bit 3: alt key down
+ * bit 2: ctrl key down
+ * bit 1: left shift key down
+ * bit 0: right shift key down
+ */
+ENTRY(console_keystatus)
+ push %ebp
+
+ call EXT_C(prot_to_real)
+ .code16
+
+ movb $0x12, %ah
+ int $0x16
+ movw %ax, %dx
+
+ DATA32 call EXT_C(real_to_prot)
+ .code32
+
+ movw %dx, %ax
+
+ /* Mask out numlock, capslock and insert state. */
+ andl $0x0f0f, %eax
+ pop %ebp
+ ret
+
/*
* int console_getxy (void)
diff --git a/stage2/boot.c b/stage2/boot.c
index ec25acf..fabebf6 100644
--- a/stage2/boot.c
+++ b/stage2/boot.c
@@ -287,8 +287,9 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
errnum = ERR_WONT_FIT;
else
{
- grub_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n",
- (big_linux ? "bzImage" : "zImage"), data_len, text_len);
+ grub_verbose_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n",
+ (big_linux ? "bzImage" : "zImage"),
+ data_len, text_len);
/* Video mode selection support. What a mess! */
/* NOTE: Even the word "mess" is not still enough to
@@ -494,7 +495,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
mbi.syms.a.addr = 0;
mbi.syms.a.pad = 0;
- printf (" [%s-%s", str2, str);
+ verbose_printf (" [%s-%s", str2, str);
str = "";
@@ -503,7 +504,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
if (flags & MULTIBOOT_AOUT_KLUDGE)
str = "-and-data";
- printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len);
+ verbose_printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len);
/* read text, then read data */
if (grub_read ((char *) RAW_ADDR (cur_addr), text_len) == text_len)
@@ -516,9 +517,9 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
if (align_4k)
cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
else
- printf (", C");
+ verbose_printf (", C");
- printf (", data=0x%x", data_len);
+ verbose_printf (", data=0x%x", data_len);
if ((grub_read ((char *) RAW_ADDR (cur_addr), data_len)
!= data_len)
@@ -532,7 +533,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
memset ((char *) RAW_ADDR (cur_addr), 0, bss_len);
cur_addr += bss_len;
- printf (", bss=0x%x", bss_len);
+ verbose_printf (", bss=0x%x", bss_len);
}
}
else if (!errnum)
@@ -552,7 +553,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
*((int *) RAW_ADDR (cur_addr)) = pu.aout->a_syms;
cur_addr += sizeof (int);
- printf (", symtab=0x%x", pu.aout->a_syms);
+ verbose_printf (", symtab=0x%x", pu.aout->a_syms);
if (grub_read ((char *) RAW_ADDR (cur_addr), pu.aout->a_syms)
== pu.aout->a_syms)
@@ -569,7 +570,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
i -= sizeof (int);
- printf (", strtab=0x%x", i);
+ verbose_printf (", strtab=0x%x", i);
symtab_err = (grub_read ((char *) RAW_ADDR (cur_addr), i)
!= i);
@@ -583,7 +584,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
if (symtab_err)
{
- printf ("(bad)");
+ verbose_printf ("(bad)");
cur_addr = orig_addr;
mbi.syms.a.tabsize = 0;
mbi.syms.a.strsize = 0;
@@ -637,7 +638,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
/* mark memory as used */
if (cur_addr < memaddr + memsiz)
cur_addr = memaddr + memsiz;
- printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz,
+ verbose_printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz,
memsiz - filesiz);
/* increment number of segments */
loaded++;
@@ -683,7 +684,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
shdr = (Elf32_Shdr *) mbi.syms.e.addr;
cur_addr += tab_size;
- printf (", shtab=0x%x", cur_addr);
+ verbose_printf (", shtab=0x%x", cur_addr);
for (i = 0; i < mbi.syms.e.num; i++)
{
@@ -725,7 +726,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
if (symtab_err)
{
- printf ("(bad)");
+ verbose_printf ("(bad)");
mbi.syms.e.num = 0;
mbi.syms.e.size = 0;
mbi.syms.e.addr = 0;
@@ -740,7 +741,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
if (! errnum)
{
- grub_printf (", entry=0x%x]\n", (unsigned) entry_addr);
+ grub_verbose_printf (", entry=0x%x]\n", (unsigned) entry_addr);
/* If the entry address is physically different from that of the ELF
header, correct it here. */
@@ -785,7 +786,7 @@ load_module (char *module, char *arg)
return 0;
}
- printf (" [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len);
+ verbose_printf (" [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len);
/* these two simply need to be set if any modules are loaded at all */
mbi.flags |= MB_INFO_MODS;
@@ -856,7 +857,7 @@ load_initrd (char *initrd)
moveto -= 0x10000;
memmove ((void *) RAW_ADDR (moveto), (void *) cur_addr, len);
- printf (" [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len);
+ verbose_printf (" [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len);
/* FIXME: Should check if the kernel supports INITRD. */
lh->ramdisk_image = RAW_ADDR (moveto);
diff --git a/stage2/builtins.c b/stage2/builtins.c
index 3333ae3..dd70c61 100644
--- a/stage2/builtins.c
+++ b/stage2/builtins.c
@@ -57,6 +57,8 @@ static int bootdev;
when it is turned off. */
int debug = 0;
int debug_graphics = 0;
+/* Print what we're booting */
+int grub_verbose = 0;
/* The default entry. */
int default_entry = 0;
/* The fallback entry. */
@@ -825,6 +827,34 @@ static struct builtin builtin_debug =
};
+/* verbose */
+static int
+verbose_func (char *arg, int flags)
+{
+ if (grub_verbose)
+ {
+ grub_verbose = 0;
+ grub_printf (" Verbose mode is turned off\n");
+ }
+ else
+ {
+ grub_verbose = 1;
+ grub_printf (" Verbose mode is turned on\n");
+ }
+
+ return 0;
+}
+
+static struct builtin builtin_verbose =
+{
+ "verbose",
+ verbose_func,
+ BUILTIN_CMDLINE | BUILTIN_MENU,
+ "verbose",
+ "Turn on/off verbose output."
+};
+
+
#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) && !defined(PLATFORM_EFI)
static int savedefault_helper(int);
#endif
@@ -3420,7 +3450,8 @@ real_root_func (char *arg, int attempt_mount)
return 1;
/* Print the type of the filesystem. */
- print_fsys_type ();
+ if (grub_verbose)
+ print_fsys_type ();
}
return 0;
@@ -5216,5 +5247,6 @@ struct builtin *builtin_table[] =
&builtin_uppermem,
&builtin_vbeprobe,
#endif
+ &builtin_verbose,
0
};
diff --git a/stage2/char_io.c b/stage2/char_io.c
index f1313cb..3060b8a 100644
--- a/stage2/char_io.c
+++ b/stage2/char_io.c
@@ -39,6 +39,7 @@ struct term_entry term_table[] =
console_putchar,
console_checkkey,
console_getkey,
+ console_keystatus,
console_getxy,
console_gotoxy,
console_cls,
@@ -57,6 +58,7 @@ struct term_entry term_table[] =
serial_putchar,
serial_checkkey,
serial_getkey,
+ 0,
serial_getxy,
serial_gotoxy,
serial_cls,
@@ -75,6 +77,7 @@ struct term_entry term_table[] =
hercules_putchar,
console_checkkey,
console_getkey,
+ console_keystatus,
hercules_getxy,
hercules_gotoxy,
hercules_cls,
@@ -92,6 +95,7 @@ struct term_entry term_table[] =
graphics_putchar, /* putchar */
console_checkkey, /* checkkey */
console_getkey, /* getkey */
+ console_keystatus, /* keystatus */
graphics_getxy, /* getxy */
graphics_gotoxy, /* gotoxy */
graphics_cls, /* cls */
@@ -1166,6 +1170,16 @@ checkkey (void)
{
return current_term->checkkey ();
}
+
+/* Return keyboard modifier status. */
+int
+keystatus (void)
+{
+ if (current_term->keystatus)
+ return current_term->keystatus ();
+ else
+ return 0;
+}
#endif /* ! STAGE1_5 */
/* Display an ASCII character. */
diff --git a/stage2/cmdline.c b/stage2/cmdline.c
index 044fd02..cb41eda 100644
--- a/stage2/cmdline.c
+++ b/stage2/cmdline.c
@@ -237,12 +237,12 @@ run_script (char *script, char *heap)
builtin = find_command (heap);
if (! builtin)
{
- grub_printf ("%s\n", old_entry);
+ grub_verbose_printf ("%s\n", old_entry);
continue;
}
if (! (builtin->flags & BUILTIN_NO_ECHO))
- grub_printf ("%s\n", old_entry);
+ grub_verbose_printf ("%s\n", old_entry);
/* If BUILTIN cannot be run in the command-line, skip it. */
if (! (builtin->flags & BUILTIN_CMDLINE))
diff --git a/stage2/shared.h b/stage2/shared.h
index 829a25f..c428370 100644
--- a/stage2/shared.h
+++ b/stage2/shared.h
@@ -635,6 +635,13 @@ extern int debug;
extern int debug_graphics;
#endif /* STAGE1_5 */
+/* Verbose mode flag. */
+extern int grub_verbose;
+#define verbose_printf(format...) \
+ do { if (grub_verbose) printf(format); } while (0)
+#define grub_verbose_printf(format...) \
+ do { if (grub_verbose) grub_printf(format); } while (0)
+
extern unsigned long current_drive;
extern unsigned long current_partition;
@@ -810,6 +817,10 @@ int getkey (void);
available. */
int checkkey (void);
+/* Return keyboard modifier status. */
+int
+keystatus (void);
+
/* Low-level disk I/O */
int get_diskinfo (int drive, struct geometry *geometry);
int biosdisk (int subfunc, int drive, struct geometry *geometry,
diff --git a/stage2/stage1_5.c b/stage2/stage1_5.c
index 5c45d4c..c2d9632 100644
--- a/stage2/stage1_5.c
+++ b/stage2/stage1_5.c
@@ -30,7 +30,8 @@ disk_read_savesect_func (int sector, int offset, int length)
void
cmain (void)
{
- grub_printf ("\n\nGRUB loading, please wait...\n");
+ if (0)
+ grub_printf ("\n\nGRUB loading, please wait...\n");
/*
* Here load the true second-stage boot-loader.
diff --git a/stage2/stage2.c b/stage2/stage2.c
index f8bccf8..aef7c63 100644
--- a/stage2/stage2.c
+++ b/stage2/stage2.c
@@ -235,7 +235,8 @@ run_menu (char *menu_entries, char *config_entries, int num_entries,
char *cur_entry = 0;
struct term_entry *prev_term = NULL;
- cls();
+ if (grub_verbose)
+ cls();
/*
* Main loop for menu UI.
@@ -264,11 +265,11 @@ restart:
/* Get current time. */
while ((time1 = getrtsecs ()) == 0xFF)
;
- grub_printf("\rPress any key to enter the menu\n\n\n");
+ grub_verbose_printf("\rPress any key to enter the menu\n\n\n");
while (1)
{
- /* Check if ESC is pressed. */
+ /* Check if any key is pressed */
if (checkkey () != -1)
{
grub_timeout = -1;
@@ -277,6 +278,14 @@ restart:
break;
}
+ /* See if a modifier key is held down. */
+ if (keystatus () != 0)
+ {
+ grub_timeout = -1;
+ show_menu = 1;
+ break;
+ }
+
/* If GRUB_TIMEOUT is expired, boot the default entry. */
if (grub_timeout >=0
&& (time1 = getrtsecs ()) != time2
@@ -292,9 +301,9 @@ restart:
grub_timeout--;
/* Print a message. */
- grub_printf ("\rBooting %s in %d seconds...",
- get_entry(menu_entries, first_entry + entryno, 0),
- grub_timeout);
+ grub_verbose_printf ("\rBooting %s in %d seconds...",
+ get_entry(menu_entries, first_entry + entryno, 0),
+ grub_timeout);
}
}
}
@@ -811,8 +820,11 @@ restart:
boot_entry:
- cls ();
- setcursor (1);
+ if (grub_verbose || show_menu)
+ {
+ cls ();
+ setcursor (1);
+ }
/* if our terminal needed initialization, we should shut it down
* before booting the kernel, but we want to save what it was so
* we can come back if needed */
@@ -826,10 +838,10 @@ restart:
while (1)
{
if (config_entries)
- printf (" Booting \'%s\'\n\n",
+ verbose_printf (" Booting \'%s\'\n\n",
get_entry (menu_entries, first_entry + entryno, 0));
else
- printf (" Booting command-list\n\n");
+ verbose_printf (" Booting command-list\n\n");
if (! cur_entry)
cur_entry = get_entry (config_entries, first_entry + entryno, 1);
@@ -1144,6 +1156,7 @@ cmain (void)
/* If no acceptable config file, goto command-line, starting
heap from where the config entries would have been stored
if there were any. */
+ grub_verbose = 1;
enter_cmdline (config_entries, 1);
}
else
diff --git a/stage2/start.S b/stage2/start.S
index 9a7d504..7a6652f 100644
--- a/stage2/start.S
+++ b/stage2/start.S
@@ -39,6 +39,9 @@
/* Print message string */
#define MSG(x) movw $ABS(x), %si; call message
+
+ /* Print verbose message string */
+#define VMSG(x)
.file "start.S"
@@ -67,9 +70,9 @@ _start:
/* print a notification message on the screen */
pushw %si
- MSG(notification_string)
+ VMSG(notification_string)
popw %si
-
+
/* this sets up for the first run through "bootloop" */
movw $ABS(firstlist - BOOTSEC_LISTSIZE), %di
@@ -291,9 +294,9 @@ copy_buffer:
movsb /* this runs the actual copy */
/* restore addressing regs and print a dot with correct DS
- (MSG modifies SI, which is saved, and unused AX and BX) */
+ (VMSG modifies SI, which is saved, and unused AX and BX) */
popw %ds
- MSG(notification_step)
+ VMSG(notification_step)
popa
/* check if finished with this dataset */
@@ -310,7 +313,7 @@ copy_buffer:
bootit:
/* print a newline */
- MSG(notification_done)
+ VMSG(notification_done)
popw %dx /* this makes sure %dl is our "boot" drive */
#ifdef STAGE1_5
ljmp $0, $0x2200
diff --git a/stage2/term.h b/stage2/term.h
index 8ed8b9d..803de58 100644
--- a/stage2/term.h
+++ b/stage2/term.h
@@ -54,6 +54,12 @@ typedef enum
/* Set when the terminal needs to be initialized. */
#define TERM_NEED_INIT (1 << 16)
+/* Bitmasks for modifier keys returned by term->keystatus(). */
+#define TERM_STATUS_ALT (1 << 3)
+#define TERM_STATUS_CTRL (1 << 2)
+#define TERM_STATUS_LEFT_SHIFT (1 << 1)
+#define TERM_STATUS_RIGHT_SHIFT (1 << 0)
+
struct term_entry
{
/* The name of a terminal. */
@@ -68,6 +74,8 @@ struct term_entry
int (*checkkey) (void);
/* Get a character. */
int (*getkey) (void);
+ /* Get keyboard modifier status. */
+ int (*keystatus) (void);
/* Get the cursor position. The return value is ((X << 8) | Y). */
int (*getxy) (void);
/* Go to the position (X, Y). */
@@ -103,6 +111,7 @@ void console_putchar (int c);
#ifndef STAGE1_5
int console_checkkey (void);
int console_getkey (void);
+int console_keystatus (void);
int console_getxy (void);
void console_gotoxy (int x, int y);
void console_cls (void);
Index: grub.spec
===================================================================
RCS file: /cvs/extras/rpms/grub/devel/grub.spec,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -r1.74 -r1.75
--- grub.spec 7 Apr 2008 17:19:51 -0000 1.74
+++ grub.spec 25 Jun 2008 23:42:41 -0000 1.75
@@ -1,6 +1,6 @@
Name: grub
Version: 0.97
-Release: 33%{?dist}
+Release: 34%{?dist}
Summary: GRUB - the Grand Unified Boot Loader.
Group: System Environment/Base
License: GPLv2+
@@ -17,6 +17,7 @@
URL: http://www.gnu.org/software/%{name}/
Source0: ftp://alpha.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz
Patch0: grub-fedora-9.patch
+Patch1: grub-keystatus.patch
%description
GRUB (Grand Unified Boot Loader) is an experimental boot loader
@@ -26,7 +27,8 @@
%prep
%setup -q
-%patch0 -p1 -b .fedora-9
+%patch0 -p1
+%patch1 -p1
%build
autoreconf
@@ -89,6 +91,9 @@
%{_datadir}/grub
%changelog
+* Wed Jun 25 2008 Peter Jones <pjones at redhat.com> - 0.97-34
+- Add keystatus patch from krh.
+
* Mon Apr 07 2008 Peter Jones <pjones at redhat.com> - 0.97-33
- Rewrite ia32 efi call wrapper to make the makefile simpler.
- Previous message (by thread): rpms/ranpwd/devel .cvsignore, NONE, 1.1 Makefile, NONE, 1.1 sources, NONE, 1.1
- Next message (by thread): rpms/gwget/devel gwget-0.99-missing-remove-signal.patch, NONE, 1.1 gwget-0.99-epiphany.patch, 1.2, 1.3 gwget.desktop, 1.2, 1.3 gwget.spec, 1.25, 1.26
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list