// 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; }