Import backup from 2004-08-15

This commit is contained in:
josh committed 2017-07-25 22:23:48 -04:00
1 parent b9c77827bd
commit 8a8f56decb
16 files changed
+539 -251

No files matched your search

+51 -13
View File
@@ -1,32 +1,70 @@
// devices.c
// Author: Josh Holtrop
// Date: 08/02/04
// Modified: 08/03/04
// Modified: 08/07/04
#include "fs/devices.h"
#include "kernel.h"
#include "char/parallel.h"
#include "char/vconsole.h"
dev_driver_t drivers[256];
char drivers_registered[256]; //0 (unregistered), 'b', 'c'
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)
{
if (type == 'b' || type == 'c')
{
if (drivers_registered[major])
return -1; //driver already registered
drivers[major] = *dev;
drivers_registered[major] = type;
return 0;
}
return -1;
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;
}
+11 -4
View File
@@ -1,14 +1,15 @@
// devices.h
// Author: Josh Holtrop
// Date: 08/02/04
// Modified: 08/03/04
// Modified: 08/07/04
#ifndef __HOS_DEVICES_H__
#define __HOS_DEVICES_H__ __HOS_DEVICES_H__
#include "hos_defines.h"
#define MAJOR_CONSOLE 4
#define MAJORC_VCONSOLE 4
#define MAJORC_PARALLEL 6
typedef unsigned char major_t;
typedef unsigned char minor_t;
@@ -16,12 +17,18 @@ typedef unsigned char minor_t;
typedef struct {
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);
int (*char_read)(minor_t minor, u64_t position);
int (*char_write)(minor_t minor, u64_t position, int value);
int (*char_read)(minor_t minor);
int (*char_write)(minor_t minor, int c);
} dev_driver_t;
void devices_init();
int devices_register_major(char type, major_t major, dev_driver_t *dev);
int block_read(major_t major, minor_t minor, u32_t blockStart, u32_t blocks, void *buffer);
int block_write(major_t major, minor_t minor, u32_t blockStart, u32_t blocks, void *buffer);
int char_read(major_t major, minor_t minor);
int char_write(major_t major, minor_t minor, int c);
#endif