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:
marco_g 2003-11-12 20:33:52 +00:00
parent c4adbd32e9
commit 8e72a9c0e3
7 changed files with 85 additions and 4 deletions

View file

@ -24,6 +24,13 @@
#include <pupa/types.h>
#include <pupa/machine/partition.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. */
struct pupa_disk_cache
@ -194,6 +201,7 @@ pupa_disk_open (const char *name)
pupa_disk_t disk;
pupa_disk_dev_t dev;
char *raw = (char *) name;
unsigned long current_time;
disk = (pupa_disk_t) pupa_malloc (sizeof (*disk));
if (! disk)
@ -247,6 +255,15 @@ pupa_disk_open (const char *name)
if (p)
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:
if (raw && raw != name)
@ -267,6 +284,9 @@ pupa_disk_close (pupa_disk_t disk)
if (disk->dev && disk->dev->close)
(disk->dev->close) (disk);
/* Reset the timer. */
pupa_last_time = pupa_get_rtc ();
pupa_free (disk->partition);
pupa_free ((void *) disk->name);
pupa_free (disk);