Import backup from 2005-05-12
This commit is contained in:
1 parent
14792ef954
commit
b0132c866e
35 files changed
+1637
-872
No files matched your search
@@ -0,0 +1,93 @@
|
||||
// ramdisk.cpp
|
||||
// Author: Josh Holtrop
|
||||
// Date: 08/20/04
|
||||
// Modified: 05/11/05
|
||||
|
||||
#define _HOS_CPP_ _HOS_CPP_
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include "functions.h"
|
||||
#include "mm/vmm.h"
|
||||
#include "lang/lang.h"
|
||||
}
|
||||
|
||||
#include "block/ramdisk.h"
|
||||
#include "devices.h"
|
||||
|
||||
ramdisk_t *ramdisks[256];
|
||||
|
||||
minor_t ramdisk_new(u32_t size)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
if (!ramdisks[i])
|
||||
{
|
||||
void *start;
|
||||
if (( start = kmalloc(size) ))
|
||||
{
|
||||
ramdisks[i] = (ramdisk_t *)New(ramdisk_t);
|
||||
ramdisks[i]->start = start;
|
||||
ramdisks[i]->size = size;
|
||||
return i;
|
||||
}
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
minor_t ramdisk_register(void *ramdisk, u32_t size)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
if (!ramdisks[i])
|
||||
{
|
||||
ramdisks[i] = (ramdisk_t *)New(ramdisk_t);
|
||||
ramdisks[i]->start = ramdisk;
|
||||
ramdisks[i]->size = size;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ramdisk_remove(minor_t minor)
|
||||
{
|
||||
if (ramdisks[minor])
|
||||
{
|
||||
kfree(ramdisks[minor]->start);
|
||||
kfree(ramdisks[minor]);
|
||||
ramdisks[minor] = NULL;
|
||||
return 0;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int Ramdisk::block_read(minor_t minor, u32_t blockStart, u32_t blocks, void *buffer)
|
||||
{
|
||||
if (!ramdisks[minor])
|
||||
return -1;
|
||||
if ((blockStart << BLOCK_SIZE_LOG) >= ramdisks[minor]->size)
|
||||
return -2;
|
||||
void *rdAddr = (void *)((u32_t)ramdisks[minor]->start + (blockStart << BLOCK_SIZE_LOG));
|
||||
u32_t copyLen = min(blocks << BLOCK_SIZE_LOG, ramdisks[minor]->size + (u32_t)ramdisks[minor]->start - (u32_t)rdAddr);
|
||||
memcpyd(buffer, rdAddr, copyLen >> 2);
|
||||
return copyLen;
|
||||
}
|
||||
|
||||
int Ramdisk::block_write(minor_t minor, u32_t blockStart, u32_t blocks, void *buffer)
|
||||
{
|
||||
if (!ramdisks[minor])
|
||||
return -1;
|
||||
if ((blockStart << BLOCK_SIZE_LOG) >= ramdisks[minor]->size)
|
||||
return -2;
|
||||
void *rdAddr = (void *)((u32_t)ramdisks[minor]->start + (blockStart << BLOCK_SIZE_LOG));
|
||||
u32_t copyLen = min(blocks << BLOCK_SIZE_LOG, ramdisks[minor]->size + (u32_t)ramdisks[minor]->start - (u32_t)rdAddr);
|
||||
memcpyd(rdAddr, buffer, copyLen >> 2);
|
||||
return copyLen;
|
||||
}
|
||||
|
||||
+17
-4
@@ -6,20 +6,33 @@
|
||||
#ifndef __HOS_RD_H__
|
||||
#define __HOS_RD_H__ __HOS_RD_H__
|
||||
|
||||
#ifdef _HOS_CPP_
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "hos_defines.h"
|
||||
#include "fs/devices.h"
|
||||
#include "devices.h"
|
||||
|
||||
typedef struct {
|
||||
void *start;
|
||||
u32_t size;
|
||||
} ramdisk_t;
|
||||
|
||||
int ramdisk_init(major_t major);
|
||||
minor_t ramdisk_new(u32_t size);
|
||||
minor_t ramdisk_register(void *ramdisk, u32_t size);
|
||||
int ramdisk_remove(minor_t minor);
|
||||
int ramdisk_block_read(minor_t minor, u32_t blockNum, u32_t count, void *buffer);
|
||||
int ramdisk_block_write(minor_t minor, u32_t blockNum, u32_t count, void *buffer);
|
||||
|
||||
#ifdef _HOS_CPP_
|
||||
}
|
||||
|
||||
class Ramdisk : public DeviceDriver
|
||||
{
|
||||
public:
|
||||
int block_read(minor_t minor, u32_t blockStart, u32_t blocks, void *buffer);
|
||||
int block_write(minor_t minor, u32_t blockStart, u32_t blocks, void *buffer);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
File renamed without changes.
@@ -0,0 +1,25 @@
|
||||
// ramdisk.h
|
||||
// Author: Josh Holtrop
|
||||
// Date: 08/20/04
|
||||
// Modified: 08/22/04
|
||||
|
||||
#ifndef __HOS_RD_H__
|
||||
#define __HOS_RD_H__ __HOS_RD_H__
|
||||
|
||||
#include "hos_defines.h"
|
||||
#include "fs/devices.h"
|
||||
|
||||
typedef struct {
|
||||
void *start;
|
||||
u32_t size;
|
||||
} ramdisk_t;
|
||||
|
||||
int ramdisk_init(major_t major);
|
||||
minor_t ramdisk_new(u32_t size);
|
||||
minor_t ramdisk_register(void *ramdisk, u32_t size);
|
||||
int ramdisk_remove(minor_t minor);
|
||||
int ramdisk_block_read(minor_t minor, u32_t blockNum, u32_t count, void *buffer);
|
||||
int ramdisk_block_write(minor_t minor, u32_t blockNum, u32_t count, void *buffer);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user