Finished adding untested bare functionality vfs

Finished adding untested shm syscalls.
Finished adding untested l4 send/recv helpers

Everything compiles. Now going to fix lots of bugs ;-)
This commit is contained in:
Bahadir Balban
2008-02-03 17:42:38 +00:00
parent 05e9028e90
commit cab2e8bdd3
51 changed files with 1661 additions and 227 deletions

View File

@@ -6,5 +6,6 @@
void init_blkdev(void)
{
ramdisk.ops.open(&ramdisk);
ramdisk[0].ops.init(&ramdisk[0]);
ramdisk[1].ops.init(&ramdisk[1]);
}

View File

@@ -1,7 +1,7 @@
/*
* A basic ramdisk implementation.
*
* Copyright (C) 2007 Bahadir Balban
* Copyright (C) 2007, 2008 Bahadir Balban
*
* The ramdisk binary is embedded in the data section of the ramdisk device
* executable. Read/writes simply occur to this area. The disk area could
@@ -22,45 +22,77 @@ extern char _end_ramdisk0[];
extern char _start_ramdisk1[];
extern char _end_ramdisk1[];
struct ramdisk_data {
u64 base;
u64 end;
};
struct ramdisk_data rddata[2];
__attribute__((section(".data.sfs"))) char sfsdisk[SZ_16MB];
static unsigned long ramdisk_base[2];
void ramdisk_open(struct block_device *ramdisk)
int ramdisk_init(struct block_device *ramdisk)
{
ramdisk_base = (unsigned long)_start_ramdisk;
ramdisk->size = (unsigned long)_end_ramdisk -
(unsigned long)_start_ramdisk;
struct ramdisk_data *rddata = ramdisk->private;
if (!strcmp("ramdisk0", ramdisk->name)) {
rddata->base = (u64)(unsigned long)_start_ramdisk0;
rddata->end = (u64)(unsigned long)_end_ramdisk0;
ramdisk->size = (u64)((unsigned long)_end_ramdisk0 -
(unsigned long)_start_ramdisk0);
} else if (!strcmp("ramdisk1", ramdisk->name)) {
rddata->base = (u64)(unsigned long)_start_ramdisk1;
rddata->end = (u64)(unsigned long)_end_ramdisk1;
ramdisk->size = (u64)((unsigned long)_end_ramdisk1 -
(unsigned long)_start_ramdisk1);
} else
return -1;
return 0;
}
void ramdisk_read(unsigned long offset, int size, void *buf)
int ramdisk_open(struct block_device *ramdisk)
{
void *src = (void *)(ramdisk_base + offset);
return 0;
}
int ramdisk_read(struct block_device *b, unsigned long offset, int size, void *buf)
{
struct ramdisk_data *data = b->private;
void *src = (void *)(unsigned long)(data->base + offset);
memcpy(buf, src, size);
return 0;
}
void ramdisk_write(unsigned long offset, int size, void *buf)
int ramdisk_write(struct block_device *b, unsigned long offset,
int size, void *buf)
{
void *dst = (void *)(ramdisk_base + offset);
struct ramdisk_data *data = b->private;
void *dst = (void *)(unsigned long)(data->base + offset);
memcpy(dst, buf, size);
return 0;
}
void ramdisk_readpage(unsigned long pfn, void *buf)
int ramdisk_readpage(struct block_device *b, unsigned long pfn, void *buf)
{
ramdisk_read(__pfn_to_addr(pfn), PAGE_SIZE, buf);
ramdisk_read(b, __pfn_to_addr(pfn), PAGE_SIZE, buf);
return 0;
}
void ramdisk_writepage(unsigned long pfn, void *buf)
int ramdisk_writepage(struct block_device *b, unsigned long pfn, void *buf)
{
ramdisk_write(__pfn_to_addr(pfn), PAGE_SIZE, buf);
ramdisk_write(b, __pfn_to_addr(pfn), PAGE_SIZE, buf);
return 0;
}
struct block_device ramdisk[2] = {
[0] = {
.name = "ramdisk0",
.private = &rddata[0],
.ops = {
.init = ramdisk_init,
.open = ramdisk_open,
.read = ramdisk_read,
.write = ramdisk_write,
@@ -70,7 +102,9 @@ struct block_device ramdisk[2] = {
},
[1] = {
.name = "ramdisk1",
.private = &rddata[1],
.ops = {
.init = ramdisk_init,
.open = ramdisk_open,
.read = ramdisk_read,
.write = ramdisk_write,