hos/kernel/fs/devices.c

71 lines
1.5 KiB
C

// devices.c
// Author: Josh Holtrop
// Date: 08/02/04
// Modified: 08/07/04
#include "fs/devices.h"
#include "kernel.h"
#include "char/parallel.h"
#include "char/vconsole.h"
dev_driver_t *drivers[2][256];
// initialization routine for devices subsystem
void devices_init()
{
parallel_init(MAJORC_PARALLEL);
vconsole_init(MAJORC_VCONSOLE);
}
int devices_register_major(char type, major_t major, dev_driver_t *dev)
{
int idx;
if (type == 'b')
idx = 0;
else if (type == 'c')
idx = 1;
else
return -1;
if (drivers[idx][major])
return -2; //driver already registered
drivers[idx][major] = dev;
return 0;
}
int block_read(major_t major, minor_t minor, u32_t blockStart, u32_t blocks, void *buffer)
{
if (drivers[0][major] && drivers[0][major]->block_read)
return drivers[0][major]->block_read(minor, blockStart, blocks, buffer);
return INT_MIN;
}
int block_write(major_t major, minor_t minor, u32_t blockStart, u32_t blocks, void *buffer)
{
if (drivers[0][major] && drivers[0][major]->block_write)
return drivers[0][major]->block_write(minor, blockStart, blocks, buffer);
return INT_MIN;
}
int char_read(major_t major, minor_t minor)
{
if (drivers[1][major] && drivers[1][major]->char_read)
return drivers[1][major]->char_read(minor);
return INT_MIN;
}
int char_write(major_t major, minor_t minor, int c)
{
if (drivers[1][major] && drivers[1][major]->char_write)
return drivers[1][major]->char_write(minor, c);
return INT_MIN;
}