71 lines
1.5 KiB
C
71 lines
1.5 KiB
C
// devices.c
|
|
// Author: Josh Holtrop
|
|
// Date: 08/02/04
|
|
// Modified: 08/16/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;
|
|
}
|
|
|
|
|