Commit graph

129 commits

Author SHA1 Message Date
robertmh
5c9f8d8427 2009-09-12 Robert Millan <rmh.grub@aybabtu.com>
Fix memory corruption issue (spotted by Colin Watson).

        * kern/i386/pc/startup.S (grub_vbe_bios_getset_dac_palette): Fix bug
        causing returned size to be stored in an incorrect memory location.
        Fix use of uninitialized value when storing the returned size.
2009-09-12 13:05:25 +00:00
cjwatson
087c07c4fa 2009-09-03 Colin Watson <cjwatson@ubuntu.com>
* kern/i386/pc/startup.S: Fix typo.
2009-09-03 07:53:40 +00:00
robertmh
f56a875639 2009-08-04 Robert Millan <rmh.grub@aybabtu.com>
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.
2009-08-04 21:28:19 +00:00
proski
5680109e00 2009-07-19 Pavel Roskin <proski@gnu.org>
* Makefile.in: Remove LIBLZO and enable_lzo.
	* conf/i386-pc.rmk: Remove lzo support.
	* configure.ac: Remove checks for lzo, don't define ENABLE_LZMA.
	* include/grub/i386/pc/kernel.h: Define ENABLE_LZMA.  Remove lzo
	support.
	* kern/i386/pc/lzo1x.S: Remove.
	* kern/i386/pc/startup.S: Remove lzo support.
	* util/i386/pc/grub-mkimage.c: Likewise.
2009-07-19 20:23:33 +00:00
proski
3262295617 2009-07-01 Pavel Roskin <proski@gnu.org>
* include/grub/elf.h: Define Elf_Sword and Elf_Xword.
	* kern/i386/dl.c: Use ELF symbols without "32" or "64".
	* kern/powerpc/dl.c: Likewise.
	* kern/sparc64/dl.c: Likewise.
	* kern/x86_64/dl.c: Likewise.
2009-07-01 14:49:22 +00:00
proski
85f2aab6f7 2009-06-28 Pavel Roskin <proski@gnu.org>
* kern/i386/qemu/mmap.c (grub_machine_mmap_iterate): Use cast to
	fix a warning.
2009-06-29 03:37:42 +00:00
robertmh
8231fb77c6 2009-06-27 Pavel Roskin <proski@gnu.org>
2009-06-27  Robert Millan  <rmh.grub@aybabtu.com>

        * include/grub/dl.h: Include grub/elf.h.
        (struct grub_dl): Add symtab field.
        * kern/dl.c [GRUB_MACHINE_QEMU]: Define
        GRUB_MODULES_MACHINE_READONLY.
        (grub_dl_resolve_symbols): Populate mod->symtab, making a copy
        of the header for read-only modules.
        (grub_dl_unload): Free mod->symtab for read-only modules.
        * kern/i386/dl.c: Use mod->symtab.
        * kern/powerpc/dl.c: Likewise.
        * kern/sparc64/dl.c: Likewise.
        * kern/x86_64/dl.c: Likewise.

        * conf/i386-qemu.rmk: New file.
        * kern/i386/qemu/startup.S: Likewise.
        * kern/i386/qemu/mmap.c: Likewise.
        * boot/i386/qemu/boot.S: Likewise.
        * include/grub/i386/qemu/time.h: Likewise.
        * include/grub/i386/qemu/serial.h: Likewise.
        * include/grub/i386/qemu/kernel.h: Likewise.
        * include/grub/i386/qemu/console.h: Likewise.
        * include/grub/i386/qemu/boot.h: Likewise.
        * include/grub/i386/qemu/init.h: Likewise.
        * include/grub/i386/qemu/machine.h: Likewise.
        * include/grub/i386/qemu/loader.h: Likewise.
        * include/grub/i386/qemu/memory.h: Likewise.

        * conf/i386-coreboot.rmk (GRUB_BOOT_MACHINE_LINK_ADDR)
        (GRUB_KERNEL_MACHINE_LINK_ADDR): New variables.
        [qemu] (pkglib_IMAGES): Add `boot.img'.
        [qemu] (boot_img_SOURCES, boot_img_ASFLAGS, boot_img_LDFLAGS)
        [qemu] (boot_img_FORMAT): New variables.
        [qemu] (bin_UTILITIES): Add `grub-mkimage'.
        [qemu] (grub_mkimage_SOURCES, grub_mkimage_CFLAGS): New variables.
        [qemu] (kernel_img_SOURCES, kernel_img_HEADERS, kernel_img_CFLAGS)
        [qemu] (kernel_img_ASFLAGS, kernel_img_LDFLAGS)
        [qemu] (kernel_img_FORMAT): New variables.

        * configure.ac: Recognise `i386-qemu'.

        * util/i386/pc/grub-mkimage.c (compress_kernel): Add dummy variant
        (for no compression).
        [GRUB_MACHINE_QEMU] (generate_image): Misc adjustments to produce
        a valid i386 ROM image.  Make `GRUB_KERNEL_MACHINE_COMPRESSED_SIZE',
        `GRUB_KERNEL_MACHINE_INSTALL_DOS_PART' and
        `GRUB_KERNEL_MACHINE_INSTALL_BSD_PART' optional features (with
        ifdefs).
2009-06-27 11:18:10 +00:00
robertmh
9bbdfd4d3b 2009-06-23 Robert Millan <rmh.grub@aybabtu.com>
* kern/i386/pc/startup.S (real_to_prot): Access `gdtdesc' using
        segment 0x0 unconditionally, because the reference generated by
        GAS is an absolute address.
2009-06-22 22:48:20 +00:00
robertmh
387a140ce6 2009-06-22 Robert Millan <rmh.grub@aybabtu.com>
* conf/i386-pc.rmk (kernel_img_SOURCES): Add `kern/i386/misc.S'.
        * conf/i386-ieee1275.rmk: Likewise.
        * conf/i386-coreboot.rmk: Likewise.

        * kern/i386/pc/startup.S (grub_stop): Remove function.
        * kern/i386/ieee1275/startup.S: Likewise.
        * kern/i386/coreboot/startup.S: Likewise.
        * kern/i386/misc.S (grub_stop): New function.
2009-06-22 18:04:37 +00:00
robertmh
41da966565 2009-06-22 Robert Millan <rmh.grub@aybabtu.com>
* kern/i386/pc/startup.S (real_to_prot): Move from here ...
        * kern/i386/realmode.S (real_to_prot): ... to here.
2009-06-22 10:42:37 +00:00
robertmh
15355c7d2f 2009-06-21 Robert Millan <rmh.grub@aybabtu.com>
Fix asm file handling on ELF, and remove workarounds.

        * genmk.rb (class Programs): Detect assembly files, and set ASFLAGS
        and -DASM_FILE=1 appropiately (copied from `class Images' stanza).
        * kern/i386/ieee1275/startup.S (ASM_FILE): Remove macro.
        * kern/i386/coreboot/startup.S (ASM_FILE): Likewise.
2009-06-21 17:24:30 +00:00
proski
c22a006a07 2009-06-17 Pavel Roskin <proski@gnu.org>
* 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.
2009-06-17 19:39:36 +00:00
proski
a2d08c06c3 2009-06-16 Pavel Roskin <proski@gnu.org>
* kern/i386/halt.c: Include grub/machine/init.h.
	* kern/i386/reboot.c: Include grub/cpu/reboot.h.
2009-06-16 20:55:53 +00:00
proski
3ef17a2ebf 2009-06-16 Pavel Roskin <proski@gnu.org>
* 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.
2009-06-15 23:25:38 +00:00
proski
8ada9bc12e 2009-06-11 Pavel Roskin <proski@gnu.org>
* kern/i386/halt.c (grub_halt): Make `i' unsigned to fix a
	warning.
2009-06-11 19:11:25 +00:00
proski
dde032e803 2009-06-11 Pavel Roskin <proski@gnu.org>
* kern/i386/ieee1275/init.c: Add missing prototype for
	grub_stop_floppy().
2009-06-11 16:49:51 +00:00
proski
33abf7ae90 2009-06-10 Pavel Roskin <proski@gnu.org>
* kern/i386/coreboot/init.c: Include grub/cpu/tsc.h to fix
	compiler warnings.
2009-06-10 22:25:47 +00:00
fzielcke
b39f9d20a9 remove all trailing whitespace 2009-06-10 21:04:23 +00:00
phcoder
a9966eb11f 2009-06-04 Vladimir Serbinenko <phcoder@gmail.com>
* kern/i386/pc/startup.S [APPLE_CC]: block of nops to 
	compensate a compiler bug
2009-06-04 21:45:32 +00:00
phcoder
e37ffc5cf6 2009-06-04 Vladimir Serbinenko <phcoder@gmail.com>
Use grub-macho2img when compiling with Apple's CC for PCBIOS machine

	* conf/common.rmk (bin_UTILITIES): add (on false on condition) 
	grub-macho2img 
	(CLEANFILES): add grub-macho2img
	(grub_macho2img_SOURCES): new variable
	* kern/i386/pc/startup.S (bss_start): new variable
	(bss_end): likewise
	* genmk.rb: use grub-macho2img for *.img when compiled with Apple's CC
	* util/grub-macho2img.c: new file
2009-06-04 21:01:11 +00:00
phcoder
3e32590112 2009-06-04 Vladimir Serbinenko <phcoder@gmail.com>
Absolute addressing through constant with Apple's cc

	* kern/i386/pc/startup.S: Define necessary constants
	and address through it when using ABS with Apple's CC
	* boot/i386/pc/diskboot.S: likewise
	* boot/i386/pc/boot.S: likewise
	* boot/i386/pc/lnxboot.S: likewise
	* boot/i386/pc/cdboot.S: likewise
	* mmap/i386/pc/mmap_helper.S: likewise
	* commands/i386/pc/drivemap_int13h.S: likewise
2009-06-04 20:01:19 +00:00
proski
96b1619a75 2009-05-22 Pavel Roskin <proski@gnu.org>
* include/grub/i386/pc/kernel.h (grub_boot_drive): Change type
	to grub_uint8_t.
	(grub_root_drive): Likewise.
	* kern/i386/pc/startup.S (grub_boot_drive): Change size to byte,
	remove alignment.
	(grub_root_drive): Change size to byte.
	(grub_start_addr): Remove.
	(grub_end_addr): Likewise.
	(grub_apm_bios_info): Likewise.
2009-05-22 19:52:43 +00:00
phcoder
cef17233d4 2009-05-03 Bean <bean123ch@gmail.com> Vladimir Serbinenko <phcoder@gmail.com>
FreeBSD 64-bit support

	* conf/i386-pc.rmk (bsd_mod_SOURCES): add loader/i386/bsd_helper.S 
	and loader/i386/bsd_trampoline.S
	(bsd_mod_ASFLAGS): new variable
	* include/grub/i386/bsd.h (FREEBSD_MODINFOMD_SMAP): new definition
	(FREEBSD_MODTYPE_KERNEL64): likewise
	(grub_bsd64_trampoline_start): likewise
	(grub_bsd64_trampoline_end): likewise
	(grub_bsd64_trampoline_selfjump): likewise
	(grub_bsd64_trampoline_gdt): likewise
	* include/grub/i386/loader.h (grub_unix_real_boot): moved from here ...
	* include/grub/i386/bsd.h (grub_unix_real_boot): ... moved here
	* kern/i386/loader.S (grub_unix_real_boot): moved from here ...
	* loader/i386/bsd_helper.S (grub_unix_real_boot): moved here
	* include/grub/gpt_partition.h (grub_gpt_partentry): Corrected the type 
	of "attrib" member
	* loader/i386/bsd_pagetable.c: new file
	* loader/i386/bsd_trampoline.S: likewise
	* loader/i386/bsd.c (ALIGN_QWORD): new macro
	(ALIGN_VAR): likewise
	(entry_hi): new variable
	(kern_end_mdofs): likewise
	(is_64bit): likewise
	(grub_freebsd_add_meta): use ALIGN_VAR
	(grub_e820_mmap): new declaration
	(grub_freebsd_add_mmap): new function
	(grub_freebsd_add_meta_module): support 64 bit kernels
	(grub_freebsd_list_modules): use ALIGN_VAR
	(gdt_descriptor): new declaration
	(grub_freebsd_boot): support 64 bit kernels
	(grub_bsd_elf64_hook): new function
	(grub_bsd_load_elf): support elf64
2009-05-03 09:03:31 +00:00
phcoder
09d842b9c6 2009-05-02 Vladimir Serbinenko <phcoder@gmail.com>
Mmap services

	* loader/i386/efi/linux.c (grub_linux_boot): use grub_mmap_iterate
	* loader/i386/linux.c (find_mmap_size): likewise
	(allocate_pages): likewise
	* loader/i386/multiboot.c (grub_get_multiboot_mmap_len): likewise
	(grub_fill_multiboot_mmap): likewise
	(grub_multiboot): use grub_mmap_get_lower and grub_mmap_get_upper
	* loader/i386/pc/linux.c (grub_cmd_linux): use grub_mmap_get_lower
	* include/grub/i386/bsd.h (OPENBSD_MMAP_AVAILABLE): new definition
	(OPENBSD_MMAP_RESERVED): likewise
	* include/grub/i386/pc/memory.h: include grub/memory.h
	(grub_lower_mem): removed
	(grub_upper_mem): likewise
	(GRUB_MACHINE_MEMORY_ACPI): new definition
	(GRUB_MACHINE_MEMORY_NVS): likewise
	(GRUB_MACHINE_MEMORY_MAX_TYPE): likewise
	(GRUB_MACHINE_MEMORY_HOLE): likewise
	(grub_machine_mmap_register): likewise
	(grub_machine_mmap_unregister): likewise
	(grub_machine_get_upper): likewise
	(grub_machine_get_lower): likewise
	(grub_machine_get_post64): likewise
	* include/grub/i386/efi/memory.h: new file
	* include/grub/x86_64/efi/memory.h: likewise
	* include/grub/efi/memory.h: likewise
	* conf/i386-pc.rmk (pkglib_MODULES): added mmap.mod
	(mmap_mod_SOURCES): new variable
	(mmap_mod_LDFLAGS): likewise
	(mmap_mod_ASFLAGS): likewise
	* conf/i386-coreboot.rmk: likewise
	* conf/i386-ieee1275.rmk: likewise
	* conf/i386-efi.rmk: likewise
	* conf/x86_64-efi.rmk: likewise
	* include/grub/types.h (UINT_TO_PTR): new macro
	(PTR_TO_UINT32): likewise
	(PTR_TO_UINT64): likewise
	* include/grub/memory.h: new file
	* mmap/i386/pc/mmap.c: likewise
	* mmap/i386/pc/mmap_helper.S: likewise
	* mmap/i386/uppermem.c: likewise
	* mmap/mmap.c: likewise
	* mmap/efi/mmap.c: likewise
	* kern/i386/coreboot/init.c (grub_machine_init): don't use 
	grub_upper_mem
	* kern/i386/pc/init.c (grub_lower_mem): removed variable
	(grub_upper_mem): likewise
	(grub_machine_init): don't use grub_upper_mem,
	make grub_lower_mem local
	* loader/i386/bsd.c (grub_openbsd_boot): use grub_mmap_get_lower,
	grub_mmap_iterate and grub_mmap_get_upper
	(grub_netbsd_boot): use grub_mmap_get_lower and grub_mmap_get_upper
2009-05-02 21:46:34 +00:00
proski
41bb0fe9a6 2009-04-15 Pavel Roskin <proski@gnu.org>
* include/grub/types.h: Rename ULONG_MAX to GRUB_ULONG_MAX and
	LONG_MAX to GRUB_LONG_MAX.  Introduce GRUB_LONG_MIN.  Update all
	users of ULONG_MAX, LONG_MAX and LONG_MIN to use the new
	definitions.
2009-04-15 20:45:09 +00:00
robertmh
a9368fd30c 2009-03-28 Robert Millan <rmh@aybabtu.com>
* conf/i386-pc.rmk (pkglib_MODULES): Add `linux16.mod'.
        (linux16_mod_SOURCES, linux16_mod_CFLAGS, linux16_mod_LDFLAGS): New
        variables.  Use 16-bit loader.
        (linux_mod_SOURCES, linux_mod_CFLAGS, linux_mod_LDFLAGS): Use 32-bit
        loader.
        * kern/i386/loader.S (grub_linux_boot): Rename to ...
        (grub_linux16_boot): ... this.  Update all users.
        * loader/i386/linux.c (grub_linux32_boot): Rename to ...
        (grub_linux_boot): ... this.  Update all users.

        * loader/i386/pc/linux.c (GRUB_MOD_INIT(linux)): Rename to ...
        (GRUB_MOD_INIT(linux16)): ... this.  Rename `linux' and `initrd'
        commands to `linux16' and `initrd16'.
        (GRUB_MOD_FINI(linux)): Rename to ...
        (GRUB_MOD_FINI(linux16)): ... this.
2009-03-28 12:53:16 +00:00
robertmh
c04d6e0548 2009-03-22 Vladimir Serbinenko <phcoder@gmail.com>
Move multiboot helper out of kernel

        * conf/i386-pc.rmk (multiboot_mod_SOURCES): Add
        `loader/i386/multiboot_helper.S'.
        * conf/i386-coreboot.rmk: Likewise
        * conf/i386-ieee1275.rmk: Likewise

        * kern/i386/loader.S: Move multiboot helpers from here...
        * loader/i386/multiboot_helper.S: ...moved here
        * include/grub/i386/loader.h: Move declarations of multiboot
        helpers from here...
        * include/grub/i386/multiboot.h: ...moved here
        * loader/i386/multiboot.c: Added include of grub/cpu/multiboot.h
2009-03-22 12:28:00 +00:00
proski
fbc00b0ca1 2009-03-22 Pavel Roskin <proski@gno.org>
* kern/powerpc/ieee1275/startup.S: Replace EXT_C(start) with
	_start.
	* kern/i386/pc/startup.S: Likewise.
	* kern/i386/efi/startup.S: Likewise.
	* kern/i386/ieee1275/startup.S: Likewise.
	* kern/i386/coreboot/startup.S: Likewise.
	* kern/x86_64/efi/startup.S: Likewise.
2009-03-22 00:37:49 +00:00
proski
41473ac27f 2009-03-22 Pavel Roskin <proski@gno.org>
* aclocal.m4 (grub_CHECK_START_SYMBOL): Remove.
	* configure.ac: Don't call grub_CHECK_START_SYMBOL.
	* kern/i386/pc/startup.S: Use _start instead of START_SYMBOL.
2009-03-22 00:31:30 +00:00
robertmh
aa9f3bffbd 2009-03-08 Robert Millan <rmh@aybabtu.com>
Make loader/i386/linux.c usable on i386-pc again.

        * kern/i386/pc/init.c (grub_machine_init): Disable addition of low
        memory to heap.
        * loader/i386/linux.c [GRUB_MACHINE_PCBIOS] (allocate_pages): Remove
        `#error' stanza.
2009-03-08 12:46:27 +00:00
robertmh
80fc88f22d * kern/i386/loader.S (grub_multiboot_backward_relocator): Improve
comments.  Avoid copiing one more byte than necessary (just in case).
2008-11-22 15:00:39 +00:00
robertmh
79d29fd7b8 Harmonize ieee1275's grub_available_iterate() with the generic
grub_machine_mmap_iterate() interface (fixes a recently-introduced
        build problem on i386-ieee1275):
        * kern/ieee1275/openfw.c (grub_available_iterate): Moved from here ...
        * kern/ieee1275/mmap.c (grub_machine_mmap_iterate): ... here.  Add third
        parameter `type'.  Update all users of this function.
        * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Add
        `kern/ieee1275/mmap.c'.
        * kern/ieee1275/init.c
        * include/grub/ieee1275/ieee1275.h (grub_available_iterate): Replace
        with ...
        (grub_machine_mmap_iterate): ... this.
        * include/grub/i386/pc/memory.h (grub_machine_mmap_iterate): Change
        return type to `grub_err_t'.  Update all implementations of this
        function prototype.
        * include/grub/i386/coreboot/memory.h (grub_machine_mmap_iterate):
        Likewise.
2008-11-20 20:30:24 +00:00
robertmh
3cf6ac19e1 2008-11-19 Robert Millan <rmh@aybabtu.com>
* kern/i386/coreboot/init.c (grub_time_tics): Remove variable.
        (grub_get_rtc, grub_exit): Abort with grub_fatal() if called.
2008-11-20 18:07:10 +00:00
robertmh
76679cd3a4 2008-11-12 Robert Millan <rmh@aybabtu.com>
* conf/i386-pc.rmk (kernel_img_SOURCES): Add `term/i386/vga_common.c'.
        * conf/i386.rmk (pkglib_MODULES): Add `vga_text.mod'.
        (vga_text_mod_SOURCES, vga_text_mod_CFLAGS, vga_text_mod_LDFLAGS): New
        variables.
        * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Replace
        `term/i386/pc/console.c' with `term/i386/vga_common.c'.

        * kern/i386/coreboot/init.c (grub_machine_init): Replace call to
        grub_console_init() with call to grub_vga_text_init().
        (grub_machine_fini): Replace call to
        grub_console_fini() with call to grub_vga_text_fini() and
        grub_at_keyboard_fini().

        * include/grub/i386/pc/console.h: Include `<grub/term.h>'.
        (grub_console_putchar, grub_console_getcharwidth, grub_console_getwh)
        (grub_console_setcolorstate, grub_console_setcolor)
        (grub_console_getcolor): New function prototypes.

        * term/i386/pc/vga_text.c: Include `<grub/dl.h>'.
        (grub_vga_text_getxy, grub_vga_text_gotoxy, grub_vga_text_cls)
        (grub_vga_text_setcursor): Static-ize.
        (grub_vga_text_term): New structure.
        (GRUB_MOD_INIT(vga_text), GRUB_MOD_FINI(vga_text)): New functions.

        * term/i386/pc/console.c: Remove `<grub/machine/machine.h>'.
        (grub_console_cur_color, grub_console_standard_color)
        (grub_console_normal_color, grub_console_highlight_color)
        (map_char, grub_console_putchar, grub_console_getcharwidth)
        (grub_console_getwh, grub_console_setcolorstate, grub_console_setcolor)
        (grub_console_getcolor): Move from here ...
        * term/i386/vga_common.c: ... to here (same function names).
2008-11-12 15:02:17 +00:00
robertmh
95b841d37b 2008-11-12 Robert Millan <rmh@aybabtu.com>
Use newly-added Multiboot support in coreboot.

        * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Replace
        `kern/i386/coreboot/mmap.c' with `kern/i386/multiboot_mmap.c'.

        * kern/i386/coreboot/startup.S: Enable Multiboot header, fix its
        alignment, set `MULTIBOOT_MEMORY_INFO' flag.
        (codestart): Store the MBI in `startup_multiboot_info' when we're
        being loaded using Multiboot.

        * kern/i386/coreboot/init.c (grub_machine_init): Move
        grub_at_keyboard_init() call to beginning of function (useful for
        debugging).  Call grub_machine_mmap_init() before attempting to use
        grub_machine_mmap_iterate().
        (grub_lower_mem, grub_upper_mem): Move from here ...
        * kern/i386/multiboot_mmap.c (grub_lower_mem, grub_upper_mem): ... to
        here (new file).

        * include/grub/i386/coreboot/memory.h (grub_machine_mmap_init): New
        function prototype.
2008-11-11 23:27:18 +00:00
robertmh
651c29b79e 2008-11-07 Robert Millan <rmh@aybabtu.com>
Modularize at_keyboard.mod:

            * conf/i386.rmk (pkglib_MODULES): Add `at_keyboard.mod'.
            (at_keyboard_mod_SOURCES, at_keyboard_mod_CFLAGS)
            (at_keyboard_mod_LDFLAGS): New variables.

            Actual terminal split:

            * include/grub/term.h (struct grub_term): Split in ...
            (struct grub_term_input): ... this, and ...
            (struct grub_term_output): ... this.  Update all users.
            (grub_term_set_current): Split in ...
            (grub_term_set_current_input): ... this, and ...
            (grub_term_set_current_output): ... this.
            (grub_term_get_current): Split in ...
            (grub_term_get_current_input): ... this, and ...
            (grub_term_get_current_output): ... this.
            (grub_term_register): Split in ...
            (grub_term_register_input): ... this, and ...
            (grub_term_register_output): ... this.
            (grub_term_unregister): Split in ...
            (grub_term_unregister_input): ... this, and ...
            (grub_term_unregister_output): ... this.
            (grub_term_iterate): Split in ...
            (grub_term_iterate_input): ... this, and ...
            (grub_term_iterate_output): ... this.

            * kern/term.c (grub_term_list): Split in ...
            (grub_term_list_input): ... this, and ...
            (grub_term_list_output): ... this.  Update all users.
            (grub_cur_term): Split in ...
            (grub_cur_term_input): ... this, and ...
            (grub_cur_term_output): ... this.  Update all users.
            (grub_term_set_current): Split in ...
            (grub_term_set_current_input): ... this, and ...
            (grub_term_set_current_output): ... this.
            (grub_term_get_current): Split in ...
            (grub_term_get_current_input): ... this, and ...
            (grub_term_get_current_output): ... this.
            (grub_term_register): Split in ...
            (grub_term_register_input): ... this, and ...
            (grub_term_register_output): ... this.
            (grub_term_unregister): Split in ...
            (grub_term_unregister_input): ... this, and ...
            (grub_term_unregister_output): ... this.
            (grub_term_iterate): Split in ...
            (grub_term_iterate_input): ... this, and ...
            (grub_term_iterate_output): ... this.

            * kern/misc.c (grub_abort): Split use of grub_term_get_current() into
            a check for input and one for output (and only attempt to get keys
            from user when input works).

            * util/grub-probe.c (grub_term_get_current): Split in ...
            (grub_term_get_current_input): ... this, and ...
            (grub_term_get_current_output): ... this.
            * util/grub-fstest.c: Likewise.
            * util/i386/pc/grub-setup.c: Likewise.
            * util/grub-editenv.c: Likewise.

            Portability adjustments:

            * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Remove
            `term/i386/pc/at_keyboard.c'.
            * kern/ieee1275/init.c [__i386__] (grub_machine_init): Remove call to
            grub_keyboard_controller_init() (now handled by terminal .init).
            * kern/i386/coreboot/init.c (grub_machine_init): Add call to
            grub_at_keyboard_init().
            * include/grub/i386/ieee1275/console.h (grub_keyboard_controller_init)
            (grub_console_checkkey, grub_console_getkey): Remove (now provided by
            at_keyboard.mod via input terminal interface).
            * include/grub/i386/coreboot/console.h: Convert into a stub for
            `<grub/i386/pc/console.h>'.

            Migrate full terminals to new API:

            * term/efi/console.c (grub_console_term): Split into ...
            (grub_console_term_input): ... this, and ...
            (grub_console_term_output): ... this.  Update all users.
            * term/ieee1275/ofconsole.c: Remove __i386__ hack.
            (grub_ofconsole_init): Split into ...
            (grub_ofconsole_init_input): ... this, and ...
            (grub_ofconsole_init_output): ... this.
            (grub_ofconsole_term): Split into ...
            (grub_ofconsole_term_input): ... this, and ...
            (grub_ofconsole_term_output): ... this.  Update all users.
            * term/i386/pc/serial.c (grub_serial_term): Split into ...
            (grub_serial_term_input): ... this, and ...
            (grub_serial_term_output): ... this.  Update all users.
            * term/i386/pc/console.c (grub_console_term): Split into ...
            (grub_console_term_input): ... this, and ...
            (grub_console_term_output): ... this.  Update all users.
            (grub_console_term_input): Only enable it on PC/BIOS platform.
            (grub_console_init): Remove grub_keyboard_controller_init() call.

            Migrate input terminals to new API:

            * term/i386/pc/at_keyboard.c: Replace `cpu' and `machine' with
            `i386' and `i386/pc' to enable build on x86_64 (this driver is
            i386-specific anyway).
            (grub_console_checkkey): Rename to ...
            (grub_at_keyboard_checkkey): ... this.  Static-ize.  Update all
            users.
            (grub_keyboard_controller_orig): New variable.
            (grub_console_getkey): Rename to ...
            (grub_at_keyboard_getkey): ... this.  Static-ize.  Update all
            users.
            (grub_keyboard_controller_init): Static-ize.  Save original
            controller value so that it can be restored ...
            (grub_keyboard_controller_fini): ... here (new function).
            (grub_at_keyboard_term): New structure.
            (GRUB_MOD_INIT(at_keyboard), GRUB_MOD_FINI(at_keyboard)): New
            functions.

            Migrate output terminals to new API:

            * term/i386/pc/vga.c (grub_vga_term): Change type to
            `struct  grub_term_output'.  Remove `.checkkey' and `.getkey'
            members.  Update all users.
            * term/gfxterm.c (grub_video_term): Change type to
            `struct  grub_term_output'.  Remove `.checkkey' and `.getkey'
            members.  Update all users.
            * include/grub/i386/pc/console.h (grub_console_checkkey)
            (grub_console_getkey): Do not export (no longer needed by gfxterm,
            etc).

            Migrate `terminal' command and userland tools to new API:

            * commands/terminal.c (grub_cmd_terminal): Split into ...
            (grub_cmd_terminal_input): ... this, and ...
            (grub_cmd_terminal_output): ... this.
            (GRUB_MOD_INIT(terminal)): Split `terminal' command in two commands:
            `terminal_input' and `terminal_output'.
            * util/grub.d/00_header.in: Adjust `terminal' calls to new
            `terminal_input' / `terminal_output' API.
            * util/grub-mkconfig.in: Export ${GRUB_TERMINAL_INPUT} and
            ${GRUB_TERMINAL_OUTPUT} instead of ${GRUB_TERMINAL} (and if user
            provided ${GRUB_TERMINAL}, convert it).
2008-11-07 19:11:39 +00:00
robertmh
4cebd25a85 2008-08-30 Robert Millan <rmh@aybabtu.com>
* kern/i386/pc/startup.S (multiboot_header): Force 4-byte alignment
        as required by Multiboot spec (it was already 4-byte aligned, but
        only by chance).
2008-08-30 17:51:24 +00:00
robertmh
deceb3ecd3 2008-08-17 Robert Millan <rmh@aybabtu.com>
* conf/i386-pc.rmk (kernel_img_SOURCES): Add `kern/i386/pc/mmap.c'.

        * include/grub/i386/pc/init.h (GRUB_MACHINE_MEMORY_AVAILABLE)
        (GRUB_MACHINE_MEMORY_RESERVED): New macros.
        (grub_machine_mmap_iterate): New function declaration.
        * include/grub/multiboot.h (struct grub_multiboot_mmap_entry): New
        structure.
        (GRUB_MMAP_MEMORY_AVAILABLE, GRUB_MMAP_MEMORY_RESERVED): New
        macros.

        * kern/i386/pc/init.c (grub_machine_init): Replace hardcoded region
        type check value with `GRUB_MACHINE_MEMORY_AVAILABLE'.
        Move e820 parsing from here ...
        * kern/i386/pc/mmap.c: New file.
        (grub_machine_mmap_iterate): ... to here.

        * include/grub/i386/coreboot/memory.h: Remove `<grub/err.h>'.
        (GRUB_LINUXBIOS_MEMORY_AVAILABLE): Rename (for consistency) to ...
        (GRUB_MACHINE_MEMORY_AVAILABLE): ... this.  Update all users.
        (grub_available_iterate): Redeclare to return `void', and redeclare
        its hook to use grub_uint64_t as addr and size parameters, and rename
        to ...
        (grub_machine_mmap_iterate): ... this.  Update all users.

        * kern/i386/coreboot/mmap.c (grub_mmap_iterate): Simplify parser loop
        to make it more readable.  Rename to ...
        (grub_machine_mmap_iterate): ... this.

        * loader/i386/pc/multiboot.c (mmap_addr, mmap_length): New variables.
        (grub_get_multiboot_mmap_len, grub_fill_multiboot_mmap): New functions.
        (grub_multiboot): Allocate an extra region after the payload, and fill
        it with a Multiboot memory map.  Adjust a.out loader to calculate size
        with the extra space.
        (grub_multiboot_load_elf32): Adjust elf32 loader to calculate size
        with the extra space.
2008-08-17 16:32:18 +00:00
robertmh
eba0ce9f97 2008-08-14 Robert Millan <rmh@aybabtu.com>
* conf/common.rmk (bin_UTILITIES): Add `grub-mkelfimage'.
        (grub_mkelfimage_SOURCES): New variable.
        (util/elf/grub-mkimage.c_DEPENDENCIES): Likewise.

        * conf/i386-coreboot.rmk (bin_UTILITIES, grub_mkimage_SOURCES)
        (grub_mkimage_LDFLAGS, util/elf/grub-mkimage.c_DEPENDENCIES): Remove.
        * conf/powerpc-ieee1275.rmk: Likewise.
        * conf/i386-ieee1275.rmk: Likewise.

        * kern/ieee1275/init.c: Include `<grub/cpu/kernel.h>'.
        * kern/i386/coreboot/init.c: Likewise.

        * kern/i386/ieee1275/startup.S: Replace `<grub/machine/kernel.h>'
        with `<grub/cpu/kernel.h>'.
        (GRUB_KERNEL_MACHINE_PREFIX, GRUB_KERNEL_MACHINE_DATA_END): Renamed
        to ...
        (GRUB_KERNEL_CPU_PREFIX, GRUB_KERNEL_CPU_DATA_END): ... this.
        * kern/i386/coreboot/startup.S: Likewise.

        * include/grub/powerpc/ieee1275/kernel.h (GRUB_MOD_ALIGN)
        (GRUB_MOD_GAP): Remove.
        * include/grub/powerpc/kernel.h: New file.
        * include/grub/i386/ieee1275/kernel.h (GRUB_KERNEL_MACHINE_PREFIX)
        (GRUB_KERNEL_MACHINE_DATA_END): Remove.
        * include/grub/i386/kernel.h: New file.
        * include/grub/i386/coreboot/kernel.h (GRUB_MOD_ALIGN)
        (GRUB_MOD_GAP, GRUB_KERNEL_MACHINE_PREFIX)
        (GRUB_KERNEL_MACHINE_DATA_END): Remove.

        * util/ieee1275/grub-install.in (grub_mkimage): Initialize to use
        `grub-mkelfimage'.
        Use --directory when invoking grub_mkimage.

        * util/elf/grub-mkimage.c: Include `<grub/cpu/kernel.h>'.
        (add_segments): Replace GRUB_KERNEL_MACHINE_DATA_END and
        GRUB_KERNEL_MACHINE_PREFIX with GRUB_KERNEL_CPU_DATA_END
        and GRUB_KERNEL_CPU_PREFIX.
2008-08-14 18:59:33 +00:00
robertmh
371458b576 2008-08-12 Robert Millan <rmh@aybabtu.com>
* loader/i386/pc/multiboot.c (grub_multiboot_load_elf32): Move part
        of the relocation code from here ...
        (grub_multiboot): ... to here.
        (forward_relocator, backward_relocator): Move from here ...
        * kern/i386/loader.S (grub_multiboot_forward_relocator)
        (grub_multiboot_backward_relocator): ... to here.
        (grub_multiboot_real_boot): Use %edx for entry offset.  Put Multiboot
        magic in %eax.  Use %ebp for jumping (so %edx is not trashed).
        * include/grub/i386/loader.h (grub_multiboot_forward_relocator)
        (grub_multiboot_forward_relocator_end)
        (grub_multiboot_backward_relocator)
        (grub_multiboot_backward_relocator_end): New variables.
2008-08-12 15:40:26 +00:00
robertmh
20024ab021 2008-08-11 Robert Millan <rmh@aybabtu.com>
* kern/i386/linuxbios/startup.S: Move from here ...
        * kern/i386/coreboot/startup.S: ... to here.

        * kern/i386/linuxbios/init.c: Move from here ...
        * kern/i386/coreboot/init.c: ... to here.

        * kern/i386/linuxbios/table.c: Move from here ...
        * kern/i386/coreboot/mmap.c: ... to here.

        * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Update moved files.
2008-08-11 14:57:39 +00:00
chrfranke
5c41d44d7d 2008-08-07 Christian Franke <franke@computer.org>
* kern/i386/pit.c (TIMER2_SPEAKER): New define.
	(TIMER2_GATE): Likewise.
	(grub_pit_wait): Add enable/disable of the timer2 gate
	bit of port 0x61.  This fixes a possible infinite loop.
2008-08-07 19:43:36 +00:00
bean
5ebc275d6f 2008-08-07 Bean <bean123ch@gmail.com>
* conf/x86_64-efi.rmk (kernel_mod_SOURCES): Add kern/time.c,
	kern/i386/tsc.c and kern/i386/pit.c.

	* include/grub/i386/tsc.h (grub_cpu_is_cpuid_supported): Handle
	x86_64 platform.

	* kern/i386/efi/init.c: Replace <grub/cpu/tsc.h> with
	<grub/i386/tsc.h>.

	* kern/i386/pit.c: Replace <grub/cpu/io.h> with <grub/i386/io.h>.
2008-08-07 19:21:25 +00:00
proski
337f5a1e93 2008-08-06 Pavel Roskin <proski@gnu.org>
* kern/i386/pit.c: Include `<grub/i386/pit.h>'.
2008-08-06 13:28:28 +00:00
robertmh
057bc4acaf 2008-08-06 Robert Millan <rmh@aybabtu.com>
* conf/i386-coreboot.rmk (kernel_elf_ASFLAGS): New variable.
        * kern/i386/tsc.c: Include `<grub/i386/pit.h>'.
2008-08-06 12:27:28 +00:00
robertmh
a55d42e0e0 2008-08-06 Robert Millan <rmh@aybabtu.com>
* conf/i386-coreboot.rmk (pkglib_MODULES): Add `reboot.mod' and
        `halt.mod'.
        (reboot_mod_SOURCES, reboot_mod_CFLAGS, reboot_mod_LDFLAGS)
        (halt_mod_SOURCES, halt_mod_CFLAGS, halt_mod_LDFLAGS): New variables.

        * kern/i386/halt.c: New file.
        * kern/i386/reboot.c: Likewise.
        * include/grub/i386/reboot.h: Likewise.
        * include/grub/i386/halt.h: Likewise.

        * commands/halt.c [! GRUB_MACHINE_IEEE1275 ! GRUB_MACHINE_EFI]:
        Include `<grub/cpu/halt.h>'.
        * commands/reboot.c [! GRUB_MACHINE_IEEE1275 ! GRUB_MACHINE_EFI]
        [! GRUB_MACHINE_PCBIOS]: Include `<grub/cpu/reboot.h>'.

        * term/i386/pc/at_keyboard.c: Include `<grub/cpu/at_keyboard.h>'.
        (SHIFT_L, SHIFT_R, CTRL, ALT, CAPS_LOCK, KEYBOARD_REG_DATA)
        (KEYBOARD_REG_STATUS, KEYBOARD_COMMAND_ISREADY, KEYBOARD_COMMAND_READ)
        (KEYBOARD_COMMAND_WRITE, KEYBOARD_COMMAND_REBOOT)
        (KEYBOARD_SCANCODE_SET1, KEYBOARD_ISMAKE, KEYBOARD_ISREADY)
        (KEYBOARD_SCANCODE, OLPC_UP, OLPC_DOWN, OLPC_LEFT, OLPC_RIGHT): Move
        from here ...
        * include/grub/i386/at_keyboard.h: ... to here.
2008-08-06 00:20:04 +00:00
robertmh
24371d2620 2008-08-05 Robert Millan <rmh@aybabtu.com>
* conf/i386-pc.rmk (kernel_img_SOURCES): Add `kern/i386/pit.c'.
        * conf/i386-efi.rmk (kernel_mod_SOURCES): Likewise.
        * conf/i386-coreboot.rmk (kernel_elf_SOURCES): Likewise. Also add
        `kern/i386/tsc.c', `kern/generic/rtc_get_time_ms.c' and
        `kern/generic/millisleep.c'.

        * kern/i386/tsc.c (calibrate_tsc): Rewrite using grub_pit_wait()
        instead of grub_get_rtc().
        (grub_tsc_init): Initialize `tsc_boot_time'.

        * kern/i386/linuxbios/init.c (grub_millisleep): Remove stub.
        (grub_machine_init): Use grub_tsc_init() rather than
        installing an RTC-based handler via grub_install_get_time_ms().

        * kern/i386/pit.c: New file.
        * include/grub/i386/pit.h: Likewise.
2008-08-05 20:24:00 +00:00
bean
9e7007b310 2008-08-05 Bean <bean123ch@gmail.com>
* boot/i386/pc/pxeboot.S (_start): Use drive number 0x7F for pxe.

	* conf/i386-pc.rmk (kernel_img_HEADERS): Add machine/pxe.h.
	(pkglib_MODULES): Add pxe.mod and pxecmd.mod.
	(pxe_mod_SOURCES): New macro.
	(pxe_mod_CFLAGS): Likewise.
	(pxe_mod_LDFLAGS): Likewise.
	(pxecmd_mod_SOURCES): Likewise.
	(pxecmd_mod_CFLAGS): Likewise.
	(pxecmd_mod_LDFLAGS): Likewise.

	* kern/i386/pc/startup.S (grub_pxe_scan): New function.
	(grub_pxe_call): Likewise.

	* include/grub/disk.h (grub_disk_dev_id): Add GRUB_DISK_DEVICE_PXE_ID.

	* commands/i386/pc/pxecmd.c: New file.

	* disk/i386/pc/pxe.c: Likewise.

	* include/grub/i386/pc/pxe.h: Likewise.
2008-08-05 15:15:59 +00:00
marco_g
a829251bdb Urgh, and now actually add the files :-) 2008-08-05 12:26:29 +00:00
marco_g
9c2ff3eefe 2008-08-05 Colin D Bennett <colin@gibibit.com>
High resolution timer support.  Implemented for x86 CPUs using TSC.
	Extracted generic grub_millisleep() so it's linked in only as needed.
	This requires a Pentium compatible CPU; if the RDTSC instruction is
	not supported, then it falls back on the generic grub_get_time_ms()
	implementation that uses the machine's RTC.

	* conf/i386-pc.rmk (kernel_img_SOURCES): Add `kern/time.c',
	`kern/i386/tsc.c', `kern/generic/rtc_get_time_ms.c' and
	`kern/generic/millisleep.c'.

	* conf/i386-efi.rmk (kernel_mod_SOURCES): Add `kern/i386/tsc.c',
	`kern/generic/rtc_get_time_ms.c' and `kern/generic/millisleep.c'.

	* conf/x86_64-efi.rml (kernel_mod_SOURCES): Add
	`kern/generic/millisleep.c' and `kern/generic/rtc_get_time_ms.c'.

	* conf/sparc64-ieee1275.rmk (kernel_elf_SOURCES): Likewise.

	* conf/powerpc-ieee1275.rmk (kernel_elf_SOURCES): Add
	`kern/generic/millisleep.c'.

	* conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Likewise.

	* conf/i386-coreboot.rmk (kernel_elf_SOURCES): Add `kern/time.c'.

	* kern/generic/rtc_get_time_ms.c: New file.

	* kern/generic/millisleep.c: New file.
 	
	* kern/misc.c: Don't include
	<kern/time.h> anymore.
	(grub_millisleep_generic): Removed.

	* commands/sleep.c (grub_interruptible_millisleep): Uses
	grub_get_time_ms() instead of grub_get_rtc().

	* include/grub/i386/tsc.h (grub_get_tsc): New file.  New inline
	function.
	(grub_cpu_is_cpuid_supported): New inline function.
	(grub_cpu_is_tsc_supported): New inline function.
	(grub_tsc_init): New function prototype.
	(grub_tsc_get_time_ms): New function prototype.

	* kern/i386/tsc.c (grub_get_time_ms): New file.

	* include/grub/time.h: Include <grub/types.h.
	(grub_millisleep_generic): Removed.
	(grub_get_time_ms): New prototype.
	(grub_install_get_time_ms): New prototype.
	(grub_rtc_get_time_ms): New prototype.

	* kern/time.c (grub_get_time_ms): New function.
	(grub_install_get_time_ms): New function.

	* kern/i386/efi/init.c: Include <grub/cpu/tsc.h>.  Don't include
	<grub/time.h> anymore.
	(grub_millisleep): Removed.
	(grub_machine_init): Call grub_tsc_init.

	* kern/i386/linuxbios/init.c (grub_machine_init): Install the RTC
	get_time_ms() implementation.

	* kern/sparc64/ieee1275/init.c (grub_millisleep): Removed.
	(ieee1275_get_time_ms): New function.
	(grub_machine_init): Install get_time_ms() implementation.

	* kern/i386/pc/init.c: Include <grub/cpu/tsc.h>.
	(grub_machine_init): Call grub_tsc_init().
	(grub_millisleep): Removed.
 
	* kern/ieee1275/init.c (grub_millisleep): Removed.
	(grub_machine_init): Install ieee1275_get_time_ms()
	implementation.
	(ieee1275_get_time_ms): New function.
	(grub_get_rtc): Now calls ieee1275_get_time_ms(), which does the
	real work.
2008-08-05 11:54:37 +00:00