mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
pseudodevices: initial null, zero and full implementations
This commit is contained in:
@@ -63,6 +63,8 @@ void kmain(){
|
||||
|
||||
consoledev_init();
|
||||
|
||||
pseudodevs_init();
|
||||
|
||||
pci_enumerate();
|
||||
|
||||
cpu_state_init();
|
||||
@@ -74,7 +76,7 @@ void kmain(){
|
||||
keyboard_init();
|
||||
|
||||
ps2kbd_init();
|
||||
|
||||
|
||||
sched_runinit();
|
||||
|
||||
_panic("End of kmain()", 0);
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#define MAJOR_CONSOLE 1
|
||||
#define MAJOR_ZERO 2
|
||||
#define MAJOR_NULL 3
|
||||
#define MAJOR_FULL 4
|
||||
|
||||
typedef struct{
|
||||
int (*read)(int* error, int minor, void* buff, size_t count, size_t offset);
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
objects := $(patsubst %.c,%.o,$(wildcard *.c))
|
||||
subdirs := mm sched syscalls
|
||||
subdirs := mm sched syscalls pseudodevs
|
||||
OBJPATH=$(OBJDIR)
|
||||
export
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
objects := $(patsubst %.c,%.o,$(wildcard *.c))
|
||||
subdirs :=
|
||||
OBJPATH=$(OBJDIR)
|
||||
export
|
||||
|
||||
all: $(subdirs) $(objects)
|
||||
for subdir in $(subdirs) ; do $(MAKE) -C $${subdir} ; done
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -o $@ $<
|
||||
mkdir -p $(OBJPATH)
|
||||
cp $@ $(OBJPATH)/$@
|
||||
@@ -0,0 +1,28 @@
|
||||
#include <kernel/devman.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <arch/panic.h>
|
||||
|
||||
static int read(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||
*error = 0;
|
||||
memset(buff, 0, count);
|
||||
return count;
|
||||
}
|
||||
static int write(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||
*error = ENOSPC;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int isatty(int minor){
|
||||
return ENOTTY;
|
||||
}
|
||||
|
||||
static devcalls calls = {
|
||||
read, write, isatty
|
||||
};
|
||||
|
||||
void fulldev_init(){
|
||||
if(devman_newdevice("full", TYPE_CHARDEV, MAJOR_FULL, 0, &calls)){
|
||||
_panic("/dev/full init failed", NULL);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
#include <kernel/devman.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <arch/panic.h>
|
||||
|
||||
static int read(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||
*error = 0;
|
||||
return 0;
|
||||
}
|
||||
static int write(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||
*error = 0;
|
||||
return count;
|
||||
}
|
||||
|
||||
static int isatty(int minor){
|
||||
return ENOTTY;
|
||||
}
|
||||
|
||||
static devcalls calls = {
|
||||
read, write, isatty
|
||||
};
|
||||
|
||||
void nulldev_init(){
|
||||
if(devman_newdevice("null", TYPE_CHARDEV, MAJOR_NULL, 0, &calls)){
|
||||
_panic("/dev/null init failed", NULL);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
void nulldev_init();
|
||||
void zerodev_init();
|
||||
void fulldev_init();
|
||||
|
||||
void pseudodevs_init(){
|
||||
|
||||
nulldev_init();
|
||||
zerodev_init();
|
||||
fulldev_init();
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
#include <kernel/devman.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <arch/panic.h>
|
||||
|
||||
static int read(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||
*error = 0;
|
||||
memset(buff, 0, count);
|
||||
return count;
|
||||
}
|
||||
static int write(int* error, int minor, void* buff, size_t count, size_t offset){
|
||||
*error = 0;
|
||||
return count;
|
||||
}
|
||||
|
||||
static int isatty(int minor){
|
||||
return ENOTTY;
|
||||
}
|
||||
|
||||
static devcalls calls = {
|
||||
read, write, isatty
|
||||
};
|
||||
|
||||
void zerodev_init(){
|
||||
if(devman_newdevice("zero", TYPE_CHARDEV, MAJOR_ZERO, 0, &calls)){
|
||||
_panic("/dev/zero init failed", NULL);
|
||||
}
|
||||
}
|
||||
@@ -8,8 +8,6 @@
|
||||
#include <arch/interrupt.h>
|
||||
#include <arch/spinlock.h>
|
||||
|
||||
#define CONSOLE_MAJOR 1
|
||||
|
||||
static ringbuffer_t input;
|
||||
static thread_t* thread;
|
||||
static event_t outputevent;
|
||||
@@ -129,7 +127,7 @@ devcalls calls = {
|
||||
|
||||
void consoledev_init(){
|
||||
|
||||
if(devman_newdevice("console", TYPE_CHARDEV, CONSOLE_MAJOR, 0, &calls))
|
||||
if(devman_newdevice("console", TYPE_CHARDEV, MAJOR_CONSOLE, 0, &calls))
|
||||
_panic("Failed to create console device", 0);
|
||||
|
||||
if(ringbuffer_init(&input, THREAD_BUFF_MAX))
|
||||
|
||||
Reference in New Issue
Block a user