Import backup from 2004-08-15
This commit is contained in:
1 parent
b9c77827bd
commit
8a8f56decb
16 files changed
+539
-251
No files matched your search
+51
-13
@@ -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
@@ -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
|
||||
|
||||
Reference in new issue
Block a user