* util/grub.d/00_header.in: Move check for the video backend of
gfxterm from here ...
* util/grub-mkconfig.in: ... to here. Enable gfxterm if there's
a suitable video backend.
Save space by inlining misc.c functions.
* kern/misc.c (grub_iswordseparator): Made static.
* kern/misc.c (grub_strcat): Moved from here ...
* include/grub/misc.h (grub_strcat): ... here. Inlined.
* kern/misc.c (grub_strncat): Moved from here ...
* include/grub/misc.h (grub_strncat): ... here. Inlined.
* kern/misc.c (grub_strcasecmp): Moved from here ...
* include/grub/misc.h (grub_strcasecmp): ... here. Inlined.
* kern/misc.c (grub_strncasecmp): Moved from here ...
* include/grub/misc.h (grub_strncasecmp): ... here. Inlined.
* kern/misc.c (grub_isalpha): Moved from here ...
* include/grub/misc.h (grub_isalpha): ... here. Inlined.
* kern/misc.c (grub_isdigit): Moved from here ...
* include/grub/misc.h (grub_isdigit): ... here. Inlined.
* kern/misc.c (grub_isgraph): Moved from here ...
* include/grub/misc.h (grub_isgraph): ... here. Inlined.
* kern/misc.c (grub_tolower): Moved from here ...
* include/grub/misc.h (grub_tolower): ... here. Inlined.
* term/usb_keyboard.c (grub_usb_keyboard_getreport): Make
`report' grub_uint8_t *.
(grub_usb_keyboard_checkkey): Make `data' elements grub_uint8_t.
Use a 50-millisecond timeout rather than just repeating
grub_usb_keyboard_getreport 50 times.
(grub_usb_keyboard_getkey): Make `data' elements grub_uint8_t.
Rename *_partition_map to part_*
* partmap/acorn.c (grub_acorn_partition_map): Set name to 'part_acorn'.
* partmap/amiga.c (grub_amiga_partition_map): Set name to 'part_amiga'.
* partmap/apple.c (grub_apple_partition_map): Set name to 'part_apple'.
* partmap/gpt.c (grub_gpt_partition_map): Set name to 'part_gpt'.
All users updated.
* partmap/msdos.c (grub_msdos_partition_map): Set name to 'part_msdos'.
All users updated.
* partmap/sun.c (grub_sun_partition_map): Set name to 'part_sun'.
* util/grub-probe.c (probe_partmap): Don't transform partition name
to get module name.
Let user specify NetBSD root device.
* loader/i386/bsd.c (netbsd_root): New variable.
(netbsd_opts): New option 'root'.
(NETBSD_ROOT_ARG): New macro.
(grub_netbsd_boot): Use 'netbsd_root'.
(grub_bsd_unload): Free 'netbsd_root'.
(grub_cmd_netbsd): Fill 'netbsd_root'.
Support --no-smp and --no-acpi for NetBSD.
* include/grub/i386/bsd.h (NETBSD_AB_NOSMP): New definition.
(NETBSD_AB_NOACPI): Likewise.
* loader/i386/bsd.c (netbsd_opts): New entries no-smp and no-acpi.
(netbsd_flags): Add NETBSD_AB_NOSMP, NETBSD_AB_NOACPI.
* loader/i386/bsd.c (freebsd_opts): Rewritten to use extcmd.
(openbsd_opts): Likewise.
(netbsd_opts): Likewise.
(freebsd_flags): Added 0 terminator.
(openbsd_flags): Likewise.
(netbsd_flags): Likewise.
(grub_bsd_parse_flags): Rewritten to use extcmd. All users updated.
(grub_cmd_freebsd): Transformed into extended command.
(grub_cmd_openbsd): Likewise.
(grub_cmd_netbsd): Likewise.
(cmd_freebsd): Changed type to grub_extcmd_t.
(cmd_openbsd): Likewise.
(cmd_netbsd): Likewise.
(GRUB_MOD_INIT (bsd)): Register grub_cmd_freebsd, grub_cmd_netbsd and
grub_cmd_openbsd as extended commands.
(GRUB_MOD_FINI (bsd)): Use grub_unregister_extcmd for cmd_freebsd,
cmd_netbsd and cmd_openbsd
VBE cleanup.
* video/i386/pc/vbe.c (vbe_mode_in_use): Removed (duplicate).
(grub_vbe_set_video_mode): Save active mode info
only after setting the mode.
(grub_video_vbe_setup): Call 'grub_vbe_set_video_mode' with NULL as
second argument.
Rename variables for clarity.
* video/i386/pc/vbe.c (active_mode_info): Renamed to ...
(active_vbe_mode_info): ... this. All users updated.
(framebuffer): Rename 'active_mode' to 'active_vbe_mode'.
All users updated.
(initial_mode): Rename to ...
(initial_vbe_mode): ... this. All users updated.
(mode_in_use): Rename to ..
(vbe_mode_in_use): ... this. All users updated.
(mode_list): Rename to ..
(vbe_mode_list): ... this. All users updated.
(grub_vbe_set_video_mode): Rename 'mode' to 'vbe_mode', 'mode_info' to
'vbe_mode_info' and 'old_mode' to 'old_vbe_mode'.
(grub_video_vbe_init): Rename 'rm_mode_list' to 'rm_vbe_mode_list' and
'mode_list_size' to 'vbe_mode_list_size'.
(grub_video_vbe_setup): Rename 'mode_info' to 'vbe_mode_info',
'best_mode_info' to 'best_vbe_mode_info' and
'best_mode' to 'best_vbe_mode'
* loader/i386/linux.c (GRUB_ASSUME_LINUX_HAS_FB_SUPPORT)
(DEFAULT_VIDEO_MODE): Remove macros.
(grub_linux_boot): Remove assumption that Linux has FB support,
and use "text" as default video mode.
Handle group offset on UFS1.
* fs/ufs.c (grub_ufs_sblock): New field 'cylg_mask'.
(grub_ufs_read_inode) [!MODE_UFS2]: handle cylg_offset and cylg_mask.
Framebuffer split.
* commands/i386/pc/vbetest.c (grub_cmd_vbetest): Restore video
subsystem at the end.
* conf/common.rmk (pkglib_MODULES): Add video_fb.mod.
(video_fb_mod_SOURCES): New variable.
(video_fb_mod_CFLAGS): Likewise.
(video_fb_mod_LDFLAGS): Likewise.
* conf/i386-pc.rmk (vbe_mod_SOURCES): Remove video/i386/pc/vbeblit.c,
video/i386/pc/vbefill.c and video/i386/pc/vbeutil.c.
* video/i386/pc/vbeblit.c: Moved from here ...
* video/fb/fbblit.c: ..here. Replaced 'vbe' with 'fb'.
* video/i386/pc/vbefill.c: Moved from here ...
* video/fb/fbfill.c: ..here. Replaced 'vbe' with 'fb'.
* video/i386/pc/vbeutil.c: Moved from here ...
* video/fb/fbutil.c: ..here. Replaced 'vbe' with 'fb'.
* include/grub/i386/pc/vbeblit.h: Moved from here ...
* include/grub/fbblit.h: ... here. Replaced 'vbe' with 'fb'.
* include/grub/i386/pc/vbefill.h: Moved from here ...
* include/grub/fbfill.h: ... here. Replaced 'vbe' with 'fb'.
* include/grub/i386/pc/vbeutil.h: Moved from here ...
* include/grub/fbutil.h: ... here. Replaced 'vbe' with 'fb'.
* include/grub/i386/pc/vbe.h: Moved framebuffer part ...
* include/grub/video_fb.h: ... here. Replaced 'vbe' with 'fb'.
* include/grub/video.h (GRUB_VIDEO_RENDER_TARGET_FRONT_BUFFER): Removed.
(GRUB_VIDEO_RENDER_TARGET_BACK_BUFFER): Likewise.
(grub_video_adapter): Added 'get_info_and_fini'.
(grub_video_get_info_and_fini): New prototype.
(grub_video_set_mode): make modestring const char *.
* loader/i386/linux.c (grub_linux_setup_video): Use
grub_video_get_info_and_fini.
(grub_linux_boot): Move modesetting just before booting.
* loader/i386/pc/xnu.c (grub_xnu_set_video): Use
grub_video_get_info_and_fini.
* video/i386/pc/vbe.c: Moved framebuffer part ...
* video/fb/video_fb.c: ... here. Replaced 'vbe' with 'fb'.
* video/i386/pc/vbe.c (grub_vbe_set_video_mode): Use
grub_video_fbstd_colors and grub_video_fb_set_palette.
(grub_video_vbe_init): Clear 'framebuffer' variable and use
grub_video_fb_init.
(grub_video_vbe_fini): Use grub_video_fb_fini.
(grub_video_vbe_setup): Use framebuffer.render_target instead of
render_target and use grub_video_fb_set_active_render_target and
grub_video_fb_set_palette.
(grub_video_vbe_set_palette): Use grub_video_fb_set_palette.
(grub_video_vbe_set_viewport): Use grub_video_fb_set_viewport.
(grub_video_vbe_adapter): Use framebuffer.
* video/video.c (grub_video_get_info_and_fini): New function.
(grub_video_set_mode): Make modestring const char *.
(GRUB_MOD_INIT(video_video)): Don't set variables to 0 since these
values are already initialised.
* boot/i386/pc/cdboot.S: Use LOCAL for local labels. Eliminate
ABS and APPLE_CC.
* boot/i386/pc/diskboot.S: Likewise.
* boot/i386/pc/lnxboot.S: Likewise. Hardcode the number of code
sectors allow compilation on MacOSX.
* conf/i386-pc.rmk: Enable unconditional compilation of
lnxboot.img.
* include/grub/i386/bsd.h (KERNEL_TYPE_NONE, KERNEL_TYPE_FREEBSD)
(KERNEL_TYPE_OPENBSD, KERNEL_TYPE_NETBSD): Convert to ...
(bsd_kernel_types): ... this enum.
* loader/i386/bsd.c (grub_cmd_freebsd_loadenv, grub_cmd_freebsd_module)
(grub_cmd_freebsd_module_elf): Abort with "You need to load the
kernel first." when `kernel_type' is set to KERNEL_TYPE_NONE.
(grub_bsd_load_aout, grub_bsd_load, grub_cmd_freebsd_loadenv)
(grub_cmd_freebsd_module, grub_cmd_freebsd_module_elf)
(GRUB_MOD_INIT (bsd)): Fix capitalization in a few error
messages.
* util/grub-dumpdevtree: Moved from here ...
* util/i386/efi/grub-dumpdevtree: ... to here.
(hexify): New function. Converts a string to its hex version.
Generate hex versions of "efi" and "device-properties" by calling
hexify() on the ASCII strings rather than by hardcoding numbers.
* util/grub-mkconfig_lib.in (version_test_numeric): Don't use
the "g" modifier in sed when the intention is to strip something
once. This fixes comparison of kernels with multiple dashes.
* util/grub-mkconfig_lib.in (font_path): Move the functionality
of it to ...
* util/grub-mkconfig.in: ... here. Prefer unicode.pf2 and
unifont.pf2 over ascii.pf2. Export LANG=C in case ascii.pf2 gets used.
2009-08-07 Robert Millan <rmh.grub@aybabtu.com>
* util/grub.d/10_linux.in (test_numeric): Moved from here ...
* util/grub-mkconfig_lib.in (version_test_numeric): ... to here.
Update all users.
* util/grub.d/10_linux.in (test_gt): Strip any basename prefix,
not just "vmlinu[zx]".
Moved from here ...
* util/grub-mkconfig_lib.in (version_test_gt): ... to here. Update
all users.
* util/grub.d/10_linux.in (find_latest): Moved from here ...
* util/grub-mkconfig_lib.in (version_find_latest): ... to here. Update
all users.
Fix a bug resulting in black screen when loading Linux using a
packed video mode.
* kern/i386/pc/startup.S (grub_vbe_bios_getset_dac_palette_width): New
function.
* include/grub/i386/pc/vbe.h (GRUB_VBE_CAPABILITY_DACWIDTH): New macro.
(grub_vbe_bios_getset_dac_palette_width): New function.
(grub_vbe_bios_get_dac_palette_width)
(grub_vbe_bios_set_dac_palette_width): New macros (act as wrappers for
grub_vbe_bios_getset_dac_palette_width()).
* video/i386/pc/vbe.c (grub_vbe_probe): Use `GRUB_VBE_STATUS_OK' to
check for return status.
(grub_vbe_get_video_mode_info): When getting information for a packed
mode (<= 8 bpp), obtain DAC palette width using
grub_vbe_bios_getset_dac_palette_width(), and use that for initializing
{red,green,blue}_mark_size.
Support Apple partition map with sector size different from 512 bytes.
* partmap/apple.c (grub_apple_header): New field 'blocksize'.
(apple_partition_map_iterate): Respect 'aheader.blocksize'
and 'apart.partmap_size'.
* fs/xfs.c (grub_xfs_sblock): Change unused5 field to log2_sect and
log2_inode.
(grub_fshelp_node): Move inode field to the end.
(grub_xfs_data): Remove inode field.
(grub_xfs_inode_block): Calculate inode size using sblock.
(grub_xfs_inode_offset): Likewise.
(grub_xfs_read_inode): Calculate inode size using sblock.
(grub_xfs_read_block): Replace XFS_INODE_EXTENTS with nrec.
(grub_xfs_iterate_dir): Calculate inode size using sblock.
(grub_xfs_mount): Use grub_zalloc instead of grub_malloc. Realloc data
to match inode size.
(grub_xfs_dir): goto mount_fail when mount fails, as data->diropen is
not accessible when data is null.
(grub_xfs_open): Likewise.
* disk/lvm.c (grub_lvm_scan_device): Ignore extra copy of metadata.
Don't change pv->disk if it's already set.
* disk/raid.c (grub_raid_scan_device): Merge this function into ...
(grub_raid_register): ... here.
(grub_raid_rescan): Removed.
* include/grub/raid.h (grub_raid_rescan): Removed.
* util/grub-fstest.c: Remove include file <grub/raid.h>.
(fstest): Replace grub_raid_rescan with module fini function followed
by init function.
* util/grub-probe.c: Add include file <grub/raid.h>.
(probe_raid_level): New function.
(probe): Detect abstraction by walking the disk device, support two
level of abstraction (LVM on RAID) when detecting partition map.
* loader/i386/linux.c (grub_cmd_linux): Use ',' rather than ';' as
separator for the suggested gfxpayload string (';' collides with the
parser and needs escaping).
* loader/i386/multiboot_helper.S (grub_multiboot_backward_relocator):
Clear direction flag before jumping to OS.
(grub_multiboot2_real_boot): Likewise.
* commands/xnu_uuid.c (transform): Use GRUB_CPU_WORDS_BIGENDIAN
instead of WORDS_BIGENDIAN. Use grub_le_to_cpu32(), so that the
case of little endian words becomes just an optimization.
Respect const modifier.
(md5_final): Use code that doesn't depend on endianess.
Add symlink, mtime and label support to AtheFS.
* fs/afs.c (grub_afs_sblock): Declare `name' as char.
(grub_afs_iterate_dir): Handle symlinks.
(grub_afs_open): Use grub_afs_read_symlink.
(grub_afs_dir): Likewise.
Pass mtime.
(grub_afs_label): New function.
(grub_afs_fs): Add grub_afs_label.
(grub_afs_read_symlink): New function.
Enable all targets that can be built by default
* configure.ac: enable efiemu runtime, grub-emu, grub-emu-usb,
grub-mkfont and grub-fstest if they can be built
Fix libusb
* Makefile.in (LIBUSB): new macro
* genmk.rb (Utility/print_tail): new method
(Utility/rule): use intermediary variable #{prefix}_OBJECTS
(top level): call util.print_tail at the end.
* include/grub/i386/pc/boot.h (GRUB_BOOT_MACHINE_BPB_END):
Increase to 0x5a to accommodate FAT32. Adjust other offsets
accordingly.
Original patch by Yves Blusseau <yves.grub-devel@zetam.org>
* kern/device.c (grub_device_iterate): Change struct part_ent to
hold the name, not a pointer to it. Use one grub_malloc() per
partition, not two. Free partition_name if grub_malloc() fails.
Set ents to NULL only before grub_partition_iterate() is called.
2009-07-10 Robert Millan <rmh.grub@aybabtu.com>
* kern/ieee1275/openfw.c (grub_children_iterate)
(grub_devalias_iterate): Fix size evaluation for property or path
strings, which was broken since r2132.
* commands/search.c (search_file): Merge into ...
(search_fs): ... this. Accept search type as argument.
(grub_cmd_search): Pass search type to search_fs().
* lib/arg.c (find_long_option): Remove.
(find_long): Add `len' argument, make `s' const char *.
(grub_arg_parse): Parse long options in place, not in a
temporary buffer.
* include/grub/i386/linux.h (GRUB_VIDEO_TYPE_TEXT): New macro.
* loader/i386/linux.c [__i386__] (grub_linux_boot): Simplify inline
assembly in final jump, using register constraints.
(grub_linux_boot): For text mode, initialize `have_vga' using
GRUB_VIDEO_TYPE_TEXT rather than 0 (this changes its value to 1).
Initialize `video_cursor_x' and `video_cursor_y' as late as possible,
right before the final jump.
Set `video_mode' to 0x3.
Document initialization of `video_page', `video_mode' and
`video_ega_bx'.
* include/grub/i386/linux.h (GRUB_LINUX_FLAG_QUIET): New macro.
* loader/i386/linux.c (grub_cmd_linux): Recognize "quiet" option,
and set GRUB_LINUX_FLAG_QUIET appropiately.
* kern/i386/pc/startup.S (real_to_prot): Access `gdtdesc' using
segment 0x0 unconditionally, because the reference generated by
GAS is an absolute address.
Load BSD ELF modules
* conf/i386-pc.rmk (bsd_mod_SOURCES): Add loader/i386/bsd32.c
and loader/i386/bsd64.c
* include/grub/i386/bsd.h (FREEBSD_MODTYPE_MODULE): Remove
(FREEBSD_MODTYPE_ELF_MODULE): New definition
(FREEBSD_MODTYPE_ELF_MODULE_OBJ): Likewise
(grub_freebsd_load_elfmodule32): New declaration
(grub_freebsd_load_elfmoduleobj64): Likewise
(grub_freebsd_load_elf_meta32): Likewise
(grub_freebsd_load_elf_meta64): Likewise
(grub_freebsd_add_meta): Likewise
(grub_freebsd_add_meta_module): Likewise
* loader/i386/bsd.c (grub_freebsd_add_meta): Make global
(grub_freebsd_add_meta_module): Likewise and move module-specific
parts to grub_cmd_freebsd and grub_cmd_freebsd_module
(grub_cmd_freebsd): Add elf-kernel specific parts
based on grub_freebsd_add_meta_module
(grub_cmd_freebsd_module): Add type parsing moved from
grub_freebsd_add_meta_module
(grub_cmd_freebsd_module_elf): New function
(cmd_freebsd_module_elf): New variable
(GRUB_MOD_INIT): Register freebsd_module_elf
* loader/i386/bsd32.c: New file
* loader/i386/bsd64.c: Likewise
* loader/i386/bsdXX.c: Likewise
* kern/elf.c (grub_elf32_load): Let hook decide which pheaders to load
(grub_elf64_load): Likewise
* include/grub/elfload.h (grub_elf32_load_hook_t): New parameter do_load
All users updated
(grub_elf64_load_hook_t): Likewise
* util/grub-mkconfig.in (GRUB_DISABLE_LINUX_RECOVERY): Export
variable.
* util/grub.d/10_linux.in: If GRUB_DISABLE_LINUX_RECOVERY is true,
don't write a menu entry for recovery mode.
* include/grub/i386/loader.h (grub_linux_prot_size)
(grub_linux_tmp_addr, grub_linux_real_addr)
(grub_linux_is_bzimage, grub_linux16_boot): Declare only on
GRUB_MACHINE_PCBIOS.
* util/i386/pc/grub-mkimage.c (compress_kernel): Move
common grub_util_info() call to ...
(generate_image): ... here.
Fix use of uninitialized memory, comparison of signed with
unsigned integers and memory leak.
Remove bogus module address message.
Fix build with Apple's toolchain. Part 1
* commands/i386/pc/drivemap_int13h.S: use assembly-time constants
for long calls
* configure.ac: remove a leftover AC_MSG_RESULT
(CFLAGS): don't add -Wl,--defsym,___main=0x8100 when building with
Apple's toolchain
* conf/i386-coreboot.rmk (kernel_elf_SOURCES): Remove
term/i386/pc/at_keyboard.c, it doesn't need to be compiled into
the kernel.
* kern/i386/coreboot/init.c: Don't call grub_at_keyboard_init()
and grub_at_keyboard_fini(), it's done on module load and
unload.
* util/elf/grub-mkimage.c (usage): Prefix each option line with two
spaces, for the benefit of help2man.
* util/i386/efi/grub-mkimage.c (usage): Likewise.
* boot/i386/pc/boot.S: Remove root_drive. Assert offset of
boot_drive_check by using GRUB_BOOT_MACHINE_DRIVE_CHECK. Don't
save %dx, we only need %dl and we never change it.
* boot/i386/pc/cdboot.S: Don't set the root drive.
* boot/i386/pc/pxeboot.S: Likewise.
* include/grub/i386/pc/boot.h: Remove
GRUB_BOOT_MACHINE_ROOT_DRIVE, adjust
GRUB_BOOT_MACHINE_DRIVE_CHECK.
* include/grub/i386/pc/kernel.h: Remove grub_root_drive.
* kern/i386/pc/init.c (make_install_device): Remove references
to grub_root_drive.
* kern/i386/pc/startup.S: Likewise.
* util/i386/pc/grub-setup.c (setup): Don't set root_drive.
* Makefile.in: Rename lib_DATA to lib_SCRIPTS, move it from
PKGLIB to SCRIPTS. This fixes installation of grub-mkconfig_lib
and update-grub_lib in two places.
* conf/common.rmk: Rename lib_DATA to lib_SCRIPTS.
* util/grub.d/30_os-prober.in: Fix a comment. Source
${libdir}/grub/grub-mkconfig_lib. Use prepare_grub_to_access_device
to set the root device. Place drivemap command in the generated
chain entry.
* term/i386/pc/serial.c (serial_translate_key_sequence): Avoid
casts to short - they are not portable and cause warnings. Fix
use of uninitialized values in input_buf. Use ARRAY_SIZE.
* io/gzio.c (test_header): Don't reuse one buffer for all data.
Use separate variables. Read only the file size at the end, but
not the checksum that we don't use.
* gendistlist.sh (EXTRA_DISTFILES): Add `genhandlerlist.sh' and
`genparttoollist.sh'.
(DISTDIRS): Add `efiemu', `mmap', `parttool' and `script'.
Add `*.sh' to the list find searches for and change `mdate.sh'
to `mdate-sh'.
* include/grub/multiboot2.h: Provide compatibility defines for
multiboot2.h.
* include/multiboot2.h: Include stdint.h only if needed, using
angle brackets.
* loader/i386/pc/multiboot2.c: Include multiboot2.h after
grub/multiboot2.h.
* loader/ieee1275/multiboot2.c: Likewise.
* loader/multiboot2.c: Likewise.
* loader/multiboot_loader.c: Likewise.
* configure.ac: Remove checks for __bswapsi2 and __bswapdi2,
they fail without libc headers for the target.
* include/grub/powerpc/libgcc.h: Use weak attribute for all
exports.
* include/grub/sparc64/libgcc.h: Likewise. Don't use
preprocessor conditionals.
* bus/usb/ohci.c (grub_ohci_pci_iter): Define the Class,
Subclass and Programming Interface fields in terms of the 3 byte
Class Code register.
* bus/usb/uhci.c (grub_uhci_pci_iter): Likewise.
* bus/usb/ohci.c (grub_ohci_pci_iter): Check that programming
interface is OHCI. Add grub_dprintf for symmetry with
bus/usb/uhci.c.
* bus/usb/uhci.c (grub_uhci_pci_iter): Check that programming
interface is UHCI. Add interf variable for programming
interface. Print interface with class/subclass.