66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
// devices.cpp
|
|
// Device subsystem for HOS
|
|
// Author: Josh Holtrop
|
|
// Date: 05/11/05
|
|
// Modified: 05/11/05
|
|
|
|
#include "hos_defines.h"
|
|
#include "devices.h"
|
|
#include "char/misc_char.h"
|
|
#include "char/vconsole.h"
|
|
#include "block/ramdisk.h"
|
|
|
|
DeviceDriver *drivers[256];
|
|
|
|
int devices_init()
|
|
{
|
|
drivers[MAJOR_MISC_CHAR] = new MiscChar();
|
|
drivers[MAJOR_VCONSOLE] = new VConsoleDriver();
|
|
drivers[MAJOR_RAMDISK] = new Ramdisk();
|
|
return 0;
|
|
}
|
|
|
|
int block_read(major_t major, minor_t minor, u32_t blockStart, u32_t blocks, void *buffer)
|
|
{
|
|
if (drivers[major & 0xFF])
|
|
return drivers[major & 0xFF]->block_read(minor, blockStart, blocks, buffer);
|
|
return DEV_INVALID_DEVICE;
|
|
}
|
|
|
|
int block_write(major_t major, minor_t minor, u32_t blockStart, u32_t blocks, void *buffer)
|
|
{
|
|
if (drivers[major & 0xFF])
|
|
return drivers[major & 0xFF]->block_write(minor, blockStart, blocks, buffer);
|
|
return DEV_INVALID_DEVICE;
|
|
}
|
|
|
|
int char_read(major_t major, minor_t minor)
|
|
{
|
|
if (drivers[major & 0xFF])
|
|
return drivers[major & 0xFF]->char_read(minor);
|
|
return DEV_INVALID_DEVICE;
|
|
}
|
|
|
|
int char_write(major_t major, minor_t minor, int c)
|
|
{
|
|
if (drivers[major & 0xFF])
|
|
return drivers[major & 0xFF]->char_write(minor, c);
|
|
return DEV_INVALID_DEVICE;
|
|
}
|
|
|
|
DeviceDriver::DeviceDriver() {}
|
|
DeviceDriver::~DeviceDriver() {}
|
|
|
|
int DeviceDriver::char_read(minor_t minor)
|
|
{ return DEV_INVALID_ACCESS; }
|
|
|
|
int DeviceDriver::char_write(minor_t minor, int c)
|
|
{ return DEV_INVALID_ACCESS; }
|
|
|
|
int DeviceDriver::block_read(minor_t minor, u32_t blockStart, u32_t blocks, void *buffer)
|
|
{ return DEV_INVALID_ACCESS; }
|
|
|
|
int DeviceDriver::block_write(minor_t minor, u32_t blockStart, u32_t blocks, void *buffer)
|
|
{ return DEV_INVALID_ACCESS; }
|
|
|