2003-11-12 Marco Gerards <metgerards@student.han.nl>
* disk/i386/pc/biosdisk.c (pupa_biosdisk_open): Correctly check for available extensions. * include/pupa/i386/pc/time.h: New file. * kern/disk.c: Include <pupa/machine/time.h>. (PUPA_CACHE_TIMEOUT): New macro. (pupa_last_time): New variable. (pupa_disk_open): Flush the cache when there was a timeout. (pupa_disk_close): Reset the timer. * kern/i386/pc/startup.S (pupa_get_rtc): Renamed from pupa_currticks. * util/misc.c: Include <sys/times.h> (pupa_get_rtc): New function.
This commit is contained in:
parent
c4adbd32e9
commit
8e72a9c0e3
7 changed files with 85 additions and 4 deletions
16
ChangeLog
16
ChangeLog
|
@ -1,3 +1,19 @@
|
||||||
|
2003-11-12 Marco Gerards <metgerards@student.han.nl>
|
||||||
|
|
||||||
|
* disk/i386/pc/biosdisk.c (pupa_biosdisk_open): Correctly check
|
||||||
|
for available extensions.
|
||||||
|
|
||||||
|
* include/pupa/i386/pc/time.h: New file.
|
||||||
|
* kern/disk.c: Include <pupa/machine/time.h>.
|
||||||
|
(PUPA_CACHE_TIMEOUT): New macro.
|
||||||
|
(pupa_last_time): New variable.
|
||||||
|
(pupa_disk_open): Flush the cache when there was a timeout.
|
||||||
|
(pupa_disk_close): Reset the timer.
|
||||||
|
* kern/i386/pc/startup.S (pupa_get_rtc): Renamed from
|
||||||
|
pupa_currticks.
|
||||||
|
* util/misc.c: Include <sys/times.h>
|
||||||
|
(pupa_get_rtc): New function.
|
||||||
|
|
||||||
2003-11-09 Jeroen Dekkers <jeroen@dekkers.cx>
|
2003-11-09 Jeroen Dekkers <jeroen@dekkers.cx>
|
||||||
|
|
||||||
* fs/ext2.c (struct pupa_ext2_inode): Declare struct datablocks
|
* fs/ext2.c (struct pupa_ext2_inode): Declare struct datablocks
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
|
* Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
|
||||||
* Copyright (C) 2002 Yoshinori K. Okuji <okuji@enbug.org>
|
* Copyright (C) 2002 Yoshinori K. Okuji <okuji@enbug.org>
|
||||||
|
* Copyright (C) 2003 Marco Gerards <metgerards@student.han.nl>
|
||||||
*
|
*
|
||||||
* PUPA is free software; you can redistribute it and/or modify
|
* PUPA is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -159,7 +160,7 @@ pupa_biosdisk_open (const char *name, pupa_disk_t disk)
|
||||||
/* Clear out the DRP. */
|
/* Clear out the DRP. */
|
||||||
pupa_memset (drp, 0, sizeof (*drp));
|
pupa_memset (drp, 0, sizeof (*drp));
|
||||||
drp->size = sizeof (*drp);
|
drp->size = sizeof (*drp);
|
||||||
if (pupa_biosdisk_get_diskinfo_int13_extensions (drive, drp))
|
if (!pupa_biosdisk_get_diskinfo_int13_extensions (drive, drp))
|
||||||
{
|
{
|
||||||
data->flags = PUPA_BIOSDISK_FLAG_LBA;
|
data->flags = PUPA_BIOSDISK_FLAG_LBA;
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 2002 Yoshinori K. Okuji <okuji@enbug.org>
|
* Copyright (C) 2002 Yoshinori K. Okuji <okuji@enbug.org>
|
||||||
* Copyright (C) 2002 Marco Gerards <metgerards@student.han.nl>
|
* Copyright (C) 2003 Marco Gerards <metgerards@student.han.nl>
|
||||||
*
|
*
|
||||||
* PUPA is free software; you can redistribute it and/or modify
|
* PUPA is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
33
include/grub/i386/pc/time.h
Normal file
33
include/grub/i386/pc/time.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
|
* Copyright (C) 2003 Marco Gerards <metgerards@student.han.nl>
|
||||||
|
*
|
||||||
|
* 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; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KERNEL_TIME_HEADER
|
||||||
|
#define KERNEL_TIME_HEADER 1
|
||||||
|
|
||||||
|
#ifdef PUPA_UTIL
|
||||||
|
# include <time.h>
|
||||||
|
# define PUPA_TICKS_PER_SECOND CLOCKS_PER_SEC
|
||||||
|
#else
|
||||||
|
# define PUPA_TICKS_PER_SECOND 18
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Return the real time in ticks. */
|
||||||
|
pupa_uint32_t pupa_get_rtc (void);
|
||||||
|
|
||||||
|
#endif /* ! KERNEL_TIME_HEADER */
|
20
kern/disk.c
20
kern/disk.c
|
@ -24,6 +24,13 @@
|
||||||
#include <pupa/types.h>
|
#include <pupa/types.h>
|
||||||
#include <pupa/machine/partition.h>
|
#include <pupa/machine/partition.h>
|
||||||
#include <pupa/misc.h>
|
#include <pupa/misc.h>
|
||||||
|
#include <pupa/machine/time.h>
|
||||||
|
|
||||||
|
#define PUPA_CACHE_TIMEOUT 2
|
||||||
|
|
||||||
|
/* The last time the disk was used. */
|
||||||
|
static unsigned long pupa_last_time = 0;
|
||||||
|
|
||||||
|
|
||||||
/* Disk cache. */
|
/* Disk cache. */
|
||||||
struct pupa_disk_cache
|
struct pupa_disk_cache
|
||||||
|
@ -194,6 +201,7 @@ pupa_disk_open (const char *name)
|
||||||
pupa_disk_t disk;
|
pupa_disk_t disk;
|
||||||
pupa_disk_dev_t dev;
|
pupa_disk_dev_t dev;
|
||||||
char *raw = (char *) name;
|
char *raw = (char *) name;
|
||||||
|
unsigned long current_time;
|
||||||
|
|
||||||
disk = (pupa_disk_t) pupa_malloc (sizeof (*disk));
|
disk = (pupa_disk_t) pupa_malloc (sizeof (*disk));
|
||||||
if (! disk)
|
if (! disk)
|
||||||
|
@ -247,6 +255,15 @@ pupa_disk_open (const char *name)
|
||||||
if (p)
|
if (p)
|
||||||
disk->partition = pupa_partition_probe (disk, p + 1);
|
disk->partition = pupa_partition_probe (disk, p + 1);
|
||||||
|
|
||||||
|
/* The cache will be invalidated about 2 seconds after a device was
|
||||||
|
closed. */
|
||||||
|
current_time = pupa_get_rtc ();
|
||||||
|
|
||||||
|
if (current_time > pupa_last_time + PUPA_CACHE_TIMEOUT * PUPA_TICKS_PER_SECOND)
|
||||||
|
pupa_disk_cache_invalidate_all ();
|
||||||
|
|
||||||
|
pupa_last_time = current_time;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
|
||||||
if (raw && raw != name)
|
if (raw && raw != name)
|
||||||
|
@ -267,6 +284,9 @@ pupa_disk_close (pupa_disk_t disk)
|
||||||
if (disk->dev && disk->dev->close)
|
if (disk->dev && disk->dev->close)
|
||||||
(disk->dev->close) (disk);
|
(disk->dev->close) (disk);
|
||||||
|
|
||||||
|
/* Reset the timer. */
|
||||||
|
pupa_last_time = pupa_get_rtc ();
|
||||||
|
|
||||||
pupa_free (disk->partition);
|
pupa_free (disk->partition);
|
||||||
pupa_free ((void *) disk->name);
|
pupa_free ((void *) disk->name);
|
||||||
pupa_free (disk);
|
pupa_free (disk);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
|
* Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
|
||||||
* Copyright (C) 2002,2003 Yoshinori K. Okuji <okuji@enbug.org>
|
* Copyright (C) 2002,2003 Yoshinori K. Okuji <okuji@enbug.org>
|
||||||
|
* Copyright (C) 2003 Marco Gerards <metgerards@student.han.nl>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -1492,11 +1493,11 @@ gottime:
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pupa_currticks()
|
* pupa_get_rtc()
|
||||||
* return the real time in ticks, of which there are about
|
* return the real time in ticks, of which there are about
|
||||||
* 18-20 per second
|
* 18-20 per second
|
||||||
*/
|
*/
|
||||||
FUNCTION(pupa_currticks)
|
FUNCTION(pupa_get_rtc)
|
||||||
pushl %ebp
|
pushl %ebp
|
||||||
|
|
||||||
call prot_to_real /* enter real mode */
|
call prot_to_real /* enter real mode */
|
||||||
|
|
10
util/misc.c
10
util/misc.c
|
@ -1,6 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
* PUPA -- Preliminary Universal Programming Architecture for GRUB
|
||||||
* Copyright (C) 2002,2003 Yoshinori K. Okuji <okuji@enbug.org>
|
* Copyright (C) 2002,2003 Yoshinori K. Okuji <okuji@enbug.org>
|
||||||
|
* Copyright (C) 2003 Marco Gerards <metgerards@student.han.nl>
|
||||||
*
|
*
|
||||||
* PUPA is free software; you can redistribute it and/or modify
|
* PUPA is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -23,6 +24,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <sys/times.h>
|
||||||
|
|
||||||
#include <pupa/util/misc.h>
|
#include <pupa/util/misc.h>
|
||||||
#include <pupa/mm.h>
|
#include <pupa/mm.h>
|
||||||
|
@ -198,3 +200,11 @@ pupa_putchar (int c)
|
||||||
{
|
{
|
||||||
putchar (c);
|
putchar (c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pupa_uint32_t
|
||||||
|
pupa_get_rtc (void)
|
||||||
|
{
|
||||||
|
struct tms currtime;
|
||||||
|
|
||||||
|
return times (&currtime);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue