Author: stepan
Date: 2008-09-01 16:49:06 +0200 (Mon, 01 Sep 2008)
New Revision: 57
Added:
trunk/filo/include/drivers.h
Modified:
trunk/filo/Makefile
trunk/filo/build.sh
trunk/filo/drivers/ide.c
trunk/filo/drivers/via-sound.c
trunk/filo/fs/blockdev.c
trunk/filo/fs/eltorito.c
trunk/filo/i386/ldscript
trunk/filo/i386/timer.c
trunk/filo/include/grub/shared.h
trunk/filo/include/lib.h
trunk/filo/include/sound.h
trunk/filo/main/elfload.c
trunk/filo/main/filo.c
trunk/filo/main/grub.c
trunk/filo/main/grub/builtins.c
trunk/filo/main/grub/char_io.c
trunk/filo/main/grub/cmdline.c
trunk/filo/main/grub/stage2.c
trunk/filo/main/sound.c
Log:
FILO fixes
* fix mixup issues between grub_printf and printf
* try to unify driver interface
* drop a couple of duplicate endianess functions
* fix serial port init failure
* fix creation of device names from grub interface device names (somewhat)
* fix timer calculation and overflow issues
* Clean up Makefile and build.sh script
Modified: trunk/filo/Makefile
===================================================================
--- trunk/filo/Makefile 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/Makefile 2008-09-01 14:49:06 UTC (rev 57)
@@ -117,11 +117,11 @@
$(obj)/%.o: $(src)/%.c
$(Q)printf " CC $(subst $(shell pwd)/,,$(@))\n"
- $(Q)$(CC) -m32 $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
+ $(Q)$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
$(obj)/%.S.o: $(src)/%.S
$(Q)printf " AS $(subst $(shell pwd)/,,$(@))\n"
- $(Q)$(AS) --32 -o $@ $<
+ $(Q)$(AS) -o $@ $<
endif
Modified: trunk/filo/build.sh
===================================================================
--- trunk/filo/build.sh 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/build.sh 2008-09-01 14:49:06 UTC (rev 57)
@@ -12,22 +12,22 @@
STRIP=i386-elf-strip \
NM=i386-elf-nm \
HOSTCC=gcc \
- -j
+ -j \
"
fi
if [ "$OS" == "Linux" ]; then
-MAKEFLAGS='CC="gcc -m32" LD="ld -b elf32-i386" HOSTCC="gcc"'
+MAKEFLAGS='CC="gcc -m32" LD="ld -b elf32-i386" HOSTCC="gcc" AS="as --32"'
fi
if [ "$ALLCLEAN" != "" -o ! -r libpayload/build/lib/libpayload.a ]; then
cd libpayload
make clean
- make defconfig
- make $MAKEFLAGS
+ make oldconfig
+ eval make $MAKEFLAGS
cd ..
fi
make distclean
make defconfig
-make $MAKEFLAGS
+eval make $MAKEFLAGS
Modified: trunk/filo/drivers/ide.c
===================================================================
--- trunk/filo/drivers/ide.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/drivers/ide.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -246,7 +246,7 @@
static unsigned char ide_buffer[IDE_SECTOR_SIZE];
static int await_ide(int (*done)(struct controller *ctrl),
- struct controller *ctrl, unsigned long timeout)
+ struct controller *ctrl, u64 timeout)
{
int result;
for(;;) {
@@ -839,7 +839,7 @@
* This is based on a paper on Phoenix website. --ts1 */
static int ide_bus_floating(struct controller *ctrl)
{
- unsigned long timeout;
+ u64 timeout;
unsigned char status;
/* Test 1: if status reads 0xff, probably no device is present
@@ -1007,7 +1007,7 @@
uint8_t packet[12];
uint8_t buf[8];
uint32_t block_len, sectors;
- unsigned long timeout;
+ u64 timeout;
uint8_t asc, ascq;
int in_progress;
@@ -1308,4 +1308,30 @@
return 0;
}
+#if 0
+
+static char my_name="hd";
+static char ide_name(void);
+{
+ return my_name;
+}
+
+static const struct storage_ops ide_ops = {
+ .init = NULL,
+ .open = ide_probe,
+ .close = NULL,
+ .read_sector = NULL // FIXME
+ // This should probably contain drive, too: Should it?
+ // void (*read_sector)(u64 sector, const void *buf, int size);
+ .name = ide_name,
+};
+
+static const struct driver ide_driver __driver = {
+ .type=DRIVER_STORAGE,
+ {
+ .storage_ops=&ide_ops
+ }
+};
+#endif
+
/* vim:set sts=8 sw=8: */
Modified: trunk/filo/drivers/via-sound.c
===================================================================
--- trunk/filo/drivers/via-sound.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/drivers/via-sound.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -17,6 +17,7 @@
#include <libpayload.h>
#include <config.h>
+#include <drivers.h>
#include <sound.h>
#define DEBUG_THIS CONFIG_DEBUG_VIA_SOUND
#include <debug.h>
@@ -91,11 +92,17 @@
return 0;
}
-static struct sound_ops viasnd_ops = {
+static const struct sound_ops viasnd_ops = {
.init = viasnd_init,
.stop = viasnd_stop,
};
-const struct sound_driver viasnd_driver[] __sound_driver = {
- {0x1106, 0x3058, &viasnd_ops}, /* VT82C686 AC97 Audio Controller */
+/* VT82C686 AC97 Audio Controller */
+static const struct driver viasnd_driver __driver = {
+ .type=DRIVER_SOUND,
+ .vendor=0x1106,
+ .device=0x3058,
+ {
+ .sound_ops=&viasnd_ops
+ }
};
Modified: trunk/filo/fs/blockdev.c
===================================================================
--- trunk/filo/fs/blockdev.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/fs/blockdev.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -82,8 +82,8 @@
printf("Partition %d does not exist\n", part+1);
return 0;
}
- *start_p = get_le32(p->start_sect);
- *length_p = get_le32(p->nr_sects);
+ *start_p = cpu_to_le32(*(u32 *)(p->start_sect));
+ *length_p = cpu_to_le32(*(u32 *)(p->nr_sects));
return 1;
} else {
/* Extended partition */
@@ -102,7 +102,7 @@
}
debug("Extended partition at %d\n", i+1);
/* Visit each logical partition labels */
- ext_start = get_le32(p[i].start_sect);
+ ext_start = cpu_to_le32(*(u32*)(p[i].start_sect));
cur_table = ext_start;
cur_part = 4;
for (;;) {
@@ -121,8 +121,8 @@
printf("Partition %d is empty\n", part+1);
return 0;
}
- *start_p = cur_table + get_le32(p->start_sect);
- *length_p = get_le32(p->nr_sects);
+ *start_p = cur_table + cpu_to_le32(*(u32*)(p->start_sect));
+ *length_p = cpu_to_le32(*(u32*)(p->nr_sects));
return 1;
}
/* Second entry is link to next partition */
@@ -130,7 +130,7 @@
debug("no link\n");
break;
}
- cur_table = ext_start + get_le32(p[1].start_sect);
+ cur_table = ext_start + cpu_to_le32(*(u32*)(p[1].start_sect));
cur_part++;
}
@@ -451,17 +451,3 @@
return 1;
}
-uint32_t get_le32(const unsigned char *p)
-{
- return ((unsigned int) p[0] << 0)
- | ((unsigned int) p[1] << 8)
- | ((unsigned int) p[2] << 16)
- | ((unsigned int) p[3] << 24);
-}
-
-uint16_t get_le16(const unsigned char *p)
-{
- return ((unsigned int) p[0] << 0)
- | ((unsigned int) p[1] << 8);
-}
-
Modified: trunk/filo/fs/eltorito.c
===================================================================
--- trunk/filo/fs/eltorito.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/fs/eltorito.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -100,7 +100,7 @@
return 0;
}
- cat_offset = get_le32(boot_record.catalog_offset);
+ cat_offset = le32_to_cpu(*(u32*)boot_record.catalog_offset);
debug("El-Torito boot catalog at sector %u\n", cat_offset);
if (!devread(cat_offset<<2, 0, 2048, catalog))
return 0;
@@ -115,7 +115,7 @@
/* All words must sum up to zero */
sum = 0;
for (i = 0; i < sizeof(*ve); i += 2)
- sum += get_le16(&catalog[i]);
+ sum += le16_to_cpu(catalog[i]);
sum &= 0xffff;
if (sum != 0) {
printf("El Torito boot catalog verify failed\n");
@@ -153,7 +153,7 @@
printf("Disc uses hard disk emulation - not supported\n");
return 0;
}
- *offset_p = get_le32(de->start_sector) << 2;
+ *offset_p = le32_to_cpu(*(u32*)(de->start_sector)) << 2;
debug("offset=%#lx length=%#lx\n", *offset_p, *length_p);
return 1;
Modified: trunk/filo/i386/ldscript
===================================================================
--- trunk/filo/i386/ldscript 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/i386/ldscript 2008-09-01 14:49:06 UTC (rev 57)
@@ -53,9 +53,9 @@
.text : { *(.text) *(.text.*) }
.rodata : {
. = ALIGN(4);
- sound_drivers_start = .;
- *(.rodata.sound_drivers)
- sound_drivers_end = .;
+ drivers_start = .;
+ *(.rodata.drivers)
+ drivers_end = .;
*(.rodata)
*(.rodata.*)
}
Modified: trunk/filo/i386/timer.c
===================================================================
--- trunk/filo/i386/timer.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/i386/timer.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -19,20 +19,19 @@
#include <libpayload.h>
#include <arch/rdtsc.h>
+#include <arch/timer.h>
-extern unsigned int cpu_khz;
-
u64 currticks(void)
{
/* Read the Time Stamp Counter */
- return rdtsc() / cpu_khz;
+ return rdtsc();
}
int getrtsecs (void)
{
u64 t;
t=currticks();
- t=t/1000;
+ t=t/(TICKS_PER_SEC);
return (int)t;
}
Added: trunk/filo/include/drivers.h
===================================================================
--- trunk/filo/include/drivers.h (rev 0)
+++ trunk/filo/include/drivers.h 2008-09-01 14:49:06 UTC (rev 57)
@@ -0,0 +1,68 @@
+/*
+ * This file is part of FILO.
+ *
+ * (C) 2008 coresystems GmbH
+ *
+ * This program 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; version 2 of the License.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+#ifndef DRIVERS_H
+#define DRIVERS_H
+
+#include <libpayload.h>
+
+/*
+ * Driver interface
+ */
+
+typedef enum {
+ DRIVER_SOUND = 1,
+ DRIVER_STORAGE = 2
+} drivertype_t;
+
+struct sound_ops {
+ int (*init)(pcidev_t dev);
+ void (*set_rate)(int rate);
+ void (*set_volume)(int volume);
+ int (*write)(const void *buf, int size);
+ int (*is_active)(void);
+ void (*stop)(void);
+};
+
+struct storage_ops {
+ int (*init)(pcidev_t dev);
+ int (*open)(int drive);
+ int (*close)(int drive);
+ void (*read_sector)(u64 sector, const void *buf, int size);
+ char *(*name)(void);
+};
+
+struct driver {
+ drivertype_t type;
+ u16 vendor;
+ u16 device;
+ union {
+ const struct storage_ops *storage_ops;
+ const struct sound_ops *sound_ops;
+ };
+};
+
+#define __driver __attribute__((unused, section(".rodata.drivers")))
+
+/* defined by the linker */
+extern struct driver drivers_start[];
+extern struct driver drivers_end[];
+
+#endif /* DRIVERS_H */
Modified: trunk/filo/include/grub/shared.h
===================================================================
--- trunk/filo/include/grub/shared.h 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/include/grub/shared.h 2008-09-01 14:49:06 UTC (rev 57)
@@ -362,7 +362,7 @@
//#define memcpy grub_memmove /* we don't need a separate memcpy */
//#define memset grub_memset
//#define isspace grub_isspace
-#define printf grub_printf
+// #define printf grub_printf
//#define sprintf grub_sprintf
#undef putchar
#define putchar grub_putchar
Modified: trunk/filo/include/lib.h
===================================================================
--- trunk/filo/include/lib.h 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/include/lib.h 2008-09-01 14:49:06 UTC (rev 57)
@@ -28,9 +28,6 @@
unsigned long long simple_strtoull(const char *cp,char **endp,unsigned int base);
unsigned long long strtoull_with_suffix(const char *cp,char **endp,unsigned int base);
-u32 get_le32(const unsigned char *);
-u16 get_le16(const unsigned char *);
-
void hexdump(const void *p, unsigned int len);
long long simple_strtoll(const char *cp,char **endp,unsigned int base);
Modified: trunk/filo/include/sound.h
===================================================================
--- trunk/filo/include/sound.h 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/include/sound.h 2008-09-01 14:49:06 UTC (rev 57)
@@ -32,29 +32,4 @@
void sound_stop(void);
int sound_is_active(void);
-/*
- * Driver interface
- */
-
-struct sound_ops {
- int (*init)(pcidev_t);
- void (*set_rate)(int rate);
- void (*set_volume)(int volume);
- int (*write)(const void *buf, int size);
- int (*is_active)(void);
- void (*stop)(void);
-};
-
-struct sound_driver {
- u16 vendor;
- u16 device;
- struct sound_ops *ops;
-};
-
-#define __sound_driver __attribute__((unused, section(".rodata.sound_drivers")))
-
-/* defined by the linker */
-extern struct sound_driver sound_drivers_start[];
-extern struct sound_driver sound_drivers_end[];
-
#endif /* SOUND_H */
Modified: trunk/filo/main/elfload.c
===================================================================
--- trunk/filo/main/elfload.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/main/elfload.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -135,7 +135,7 @@
unsigned long checksum_offset)
{
unsigned long bytes;
- unsigned int start_time, time;
+ u64 start_time, time;
int i;
bytes = 0;
Modified: trunk/filo/main/filo.c
===================================================================
--- trunk/filo/main/filo.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/main/filo.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -108,7 +108,7 @@
#if CONFIG_AUTOBOOT_DELAY
static inline int autoboot_delay(void)
{
- unsigned int timeout;
+ u64 timeout;
int sec, tmp;
char key;
Modified: trunk/filo/main/grub/builtins.c
===================================================================
--- trunk/filo/main/grub/builtins.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/main/grub/builtins.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -1,6 +1,9 @@
/*
* This file is part of FILO.
*
+ * Copyright (C) 1999,2000,2001,2002,2004 Free Software Foundation, Inc.
+ * Copyright (C) 2005-2008 coresystems GmbH
+ *
* This program 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; version 2 of the License.
@@ -18,7 +21,6 @@
#include <libpayload.h>
#include <config.h>
-#define printf grub_printf
#include <grub/shared.h>
#include <grub/term.h>
#include <grub/terminfo.h>
@@ -58,7 +60,8 @@
int auth = 0;
/* -------- FILO logic -------- */
-char boot_line[1024]={0};
+#define BOOT_LINE_LENGTH 1024
+char boot_line[BOOT_LINE_LENGTH]={0};
char root_device[16]={0};
/* ---------------------------- */
@@ -494,23 +497,109 @@
#endif
};
+/**
+ * @param arg source pointer with grub device names
+ * @param path destination pointer (will be filled with filo device names)
+ * @param use_rootdev values other than zero mean the root device set by the "root"
+ * command is taken into regard here. This has to be zero when calling from root_func.
+ */
+static void copy_path_to_filo_bootline(char *arg, char *path, int use_rootdev)
+{
+ char devicename[16];
+ char drivername[16];
+ int disk, part;
+ int i, len;
+
+
+ /* Clean up */
+ memset(devicename, 0, 16);
+ memset(drivername, 0, 16);
+
+ /* Copy over the driver name: "hd", "ud", "sd" ... */
+ if (arg[0] == '(') {
+ i = 1;
+ /* Read until we encounter a number, a comma or a closing
+ * bracket
+ */
+ while ((i <= 16) && (arg[i]) &&
+ (!isdigit(arg[i])) && (arg[i] != ',') && (arg[i] != ')')) {
+ drivername[i-1] = arg[i];
+ i++;
+ }
+ }
+
+ disk = -1;
+ part = -1;
+
+ len = strlen(drivername);
+ if (len) { /* We have a driver. No idea if it exists though */
+ // The driver should decide this:
+ len++; // skip driver name + opening bracket
+
+ // XXX put @ handling in here, too for flash@addr and mem@addr
+
+ if (isdigit(arg[len])) {
+ disk = arg[len] - '0';
+ len++;
+ if (isdigit(arg[len])) { /* More than 9 drives? */
+ /* ok, get one more number. No more than 99 drives */
+ disk *= 10;
+ disk += arg[len] - '0';
+ len++;
+ }
+ }
+ if (arg[len] == ',') {
+ len++;
+ part = arg[len] - '0';
+ len++;
+ if (isdigit(arg[len])) { /* More than 9 partitions? */
+ /* ok, get one more number. No more than 99
+ * partitions */
+ part *= 10;
+ part += arg[len] - '0';
+ len++;
+ }
+ }
+ if (arg[len] != ')') {
+ grub_printf("Drive Error.\n");
+ // set len = 0 --> just copy the drive name
+ len = 0;
+ } else {
+ len++; // skip closing bracket
+ }
+ }
+
+ if (disk == -1) {
+ grub_printf("No drive.\n");
+ len = 0; // just copy the drive name
+ } else {
+ if(part == -1) { // No partition
+ sprintf(devicename, "%s%c:", drivername, disk + 'a');
+ } else { // both disk and partition
+ sprintf(devicename, "%s%c%d:", drivername, disk + 'a', part + 1);
+ }
+ strncat(path, devicename, BOOT_LINE_LENGTH);
+ arg += len; // skip original drive name
+ }
+
+ if (use_rootdev && !len) { // No drive was explicitly specified
+ if (strlen(root_device)) { // But someone set a root device
+ strncat(path, root_device, BOOT_LINE_LENGTH);
+ }
+ }
+
+ /* Copy the rest over */
+ strncat(path, arg, BOOT_LINE_LENGTH);
+}
+
/* initrd */
static int
initrd_func (char *arg, int flags)
{
- char dummy[16]={0};
- int disk, part;
- if(arg[0]=='(' && arg[1]=='h' && arg[2]=='d') {
- disk=arg[3]-'0';
- part=arg[5]-'0';
- arg+=7; // FIXME only 9 disks with 9 partitions for booting
- sprintf(dummy, "hd%c%c:", disk+'a', part+'1');
- }
- strncat(boot_line," initrd=", 1000);
- if(dummy[0]) strncat(boot_line,dummy, 1000);
- grub_strncat(boot_line,arg, 1000);
-
+ strncat(boot_line, " initrd=", BOOT_LINE_LENGTH);
+ copy_path_to_filo_bootline(arg, boot_line, 1);
+
return 0;
}
@@ -531,20 +620,14 @@
static int
kernel_func (char *arg, int flags)
{
- int disk,part;
/* Needed to pass grub checks */
kernel_type=KERNEL_TYPE_LINUX;
- if(arg[0]=='(' && arg[1]=='h' && arg[2]=='d') {
- disk=arg[3]-'0';
- part=arg[5]-'0';
- arg+=7; // FIXME only 9 disks with 9 partitions for booting
- sprintf(boot_line, "hd%c%c:", disk+'a', part+'1');
- } else if (root_device[0]=='h' && root_device[1]=='d') {
- strcpy(boot_line, root_device);
- }
-
- strncat(boot_line, arg, 1000);
-
+
+ /* clear out boot_line. Kernel is the first thing */
+ memset(boot_line, 0, BOOT_LINE_LENGTH);
+
+ copy_path_to_filo_bootline(arg, boot_line, 1);
+
return 0;
}
@@ -720,7 +803,7 @@
static int
pause_func (char *arg, int flags)
{
- printf("%s\n", arg);
+ grub_printf("%s\n", arg);
/* If ESC is returned, then abort this entry. */
if (ASCII_CHAR (getkey ()) == 27)
@@ -742,15 +825,10 @@
static int
root_func (char *arg, int flags)
{
- int disk, part;
+ memset(root_device, 0, 16);
+ copy_path_to_filo_bootline(arg, root_device, 0);
- if(arg[0]!='(') return 1;
- if(arg[1]!='h') return 1;
- if(arg[2]!='d') return 1;
- disk=arg[3]-'0';
- part=arg[5]-'0';
- sprintf(root_device, "hd%c%c:", disk+'a', part+'1');
- return 0;
+ return 0;
}
static struct builtin builtin_root =
Modified: trunk/filo/main/grub/char_io.c
===================================================================
--- trunk/filo/main/grub/char_io.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/main/grub/char_io.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -85,10 +85,15 @@
console_setcursor
},
#endif
+#ifdef CONFIG_SERIAL_CONSOLE
{
"serial",
/* A serial device must be initialized. */
+#if 0
TERM_NEED_INIT,
+#else
+ 0, // Not with FILO..
+#endif
grub_serial_putchar,
serial_checkkey,
serial_getkey,
@@ -99,6 +104,7 @@
0,
0
},
+#endif
/* This must be the last entry. */
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
@@ -116,10 +122,10 @@
{
if (errnum > ERR_NONE && errnum < MAX_ERR_NUM)
#ifndef STAGE1_5
- /* printf("\7\n %s\n", err_list[errnum]); */
- printf ("\nError %u: %s\n", errnum, err_list[errnum]);
+ /* grub_printf("\7\n %s\n", err_list[errnum]); */
+ grub_printf ("\nError %u: %s\n", errnum, err_list[errnum]);
#else /* STAGE1_5 */
- printf ("Error %u\n", errnum);
+ grub_printf ("Error %u\n", errnum);
#endif /* STAGE1_5 */
}
Modified: trunk/filo/main/grub/cmdline.c
===================================================================
--- trunk/filo/main/grub/cmdline.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/main/grub/cmdline.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -42,20 +42,23 @@
}
/* Print a helpful message for the command-line interface. */
-void
-print_cmdline_message (int type)
+void print_cmdline_message (int type)
{
- printf (" [ Minimal BASH-like line editing is supported. For the first word, TAB\n"
- " lists possible command completions. Anywhere else TAB lists the possible\n"
- " completions of a device/filename.");
- if (type == CMDLINE_NORMAL_MODE)
- printf(" ESC at any time exits.");
- if (type == CMDLINE_EDIT_MODE)
- printf(" ESC at any time cancels. ENTER \n"
- " at any time accepts your changes.");
- printf("]\n");
+ grub_printf(" [ Minimal BASH-like line editing is supported. For the first word, TAB\n"
+ " lists possible command completions. Anywhere else TAB lists the possible\n"
+ " completions of a device/filename.");
+
+ if (type == CMDLINE_NORMAL_MODE)
+ grub_printf(" ESC at any time exits.");
+
+ if (type == CMDLINE_EDIT_MODE)
+ grub_printf(" ESC at any time cancels. ENTER \n"
+ " at any time accepts your changes.");
+
+ grub_printf("]\n");
+
#ifndef CONFIG_NEWLINE_BEFORE_EACH_PROMPT
- printf("\n");
+ grub_printf("\n");
#endif
}
Modified: trunk/filo/main/grub/stage2.c
===================================================================
--- trunk/filo/main/grub/stage2.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/main/grub/stage2.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -318,19 +318,19 @@
if (! auth && password)
{
- printf ("\
+ grub_printf ("\
Press enter to boot the selected OS or \'p\' to enter a\n\
password to unlock the next set of features.");
}
else
{
if (config_entries)
- printf ("\
+ grub_printf ("\
Press enter to boot the selected OS, \'e\' to edit the\n\
commands before booting, \'a\' to modify the kernel arguments\n\
before booting, or \'c\' for a command-line.");
else
- printf ("\
+ grub_printf ("\
Press \'b\' to boot, \'e\' to edit the selected command in the\n\
boot sequence, \'c\' for a command-line, \'o\' to open a new line\n\
after (\'O\' for before) the selected line, \'d\' to remove the\n\
@@ -397,7 +397,7 @@
grub_putchar ('\r');
else
gotoxy (3, 22);
- printf (" ");
+ grub_printf (" ");
grub_timeout = -1;
fallback_entryno = -1;
if (! (current_term->flags & TERM_DUMB))
@@ -819,10 +819,10 @@
while (1)
{
if (config_entries)
- printf (" Booting \'%s\'\n\n",
+ grub_printf (" Booting \'%s\'\n\n",
get_entry (menu_entries, first_entry + entryno, 0));
else
- printf (" Booting command-list\n\n");
+ grub_printf (" Booting command-list\n\n");
if (! cur_entry)
cur_entry = get_entry (config_entries, first_entry + entryno, 1);
Modified: trunk/filo/main/grub.c
===================================================================
--- trunk/filo/main/grub.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/main/grub.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -38,7 +38,7 @@
#if CONFIG_MENULST_TIMEOUT
static inline int menulst_delay(void)
{
- unsigned int timeout;
+ u64 timeout;
int sec, tmp;
char key;
Modified: trunk/filo/main/sound.c
===================================================================
--- trunk/filo/main/sound.c 2008-08-29 13:43:47 UTC (rev 56)
+++ trunk/filo/main/sound.c 2008-09-01 14:49:06 UTC (rev 57)
@@ -15,21 +15,23 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-
+#include <drivers.h>
#include <sound.h>
#include <pci.h>
-static struct sound_ops *ops;
+static const struct sound_ops *ops;
int sound_init(void)
{
- struct sound_driver *drv;
+ struct driver *drv;
pcidev_t dev = 0;
- for (drv = sound_drivers_start; drv < sound_drivers_end; drv++) {
+ for (drv = drivers_start; drv < drivers_end; drv++) {
+ if (drv->type != DRIVER_SOUND)
+ continue;
if (pci_find_device(drv->vendor, drv->device, &dev)) {
- if (drv->ops->init(dev) == 0) {
- ops = drv->ops;
+ if (drv->sound_ops->init(dev) == 0) {
+ ops = drv->sound_ops;
return 0;
}
}