pseudodevices: initial null, zero and full implementations

This commit is contained in:
Matheus
2022-09-24 00:45:51 -03:00
parent 951ecdffe6
commit ad768d0392
9 changed files with 115 additions and 5 deletions
+3 -1
View File
@@ -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);
+4
View File
@@ -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
View File
@@ -1,5 +1,5 @@
objects := $(patsubst %.c,%.o,$(wildcard *.c))
subdirs := mm sched syscalls
subdirs := mm sched syscalls pseudodevs
OBJPATH=$(OBJDIR)
export
+12
View File
@@ -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)/$@
+28
View File
@@ -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);
}
}
+27
View File
@@ -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);
}
}
+11
View File
@@ -0,0 +1,11 @@
void nulldev_init();
void zerodev_init();
void fulldev_init();
void pseudodevs_init(){
nulldev_init();
zerodev_init();
fulldev_init();
}
+28
View File
@@ -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);
}
}
+1 -3
View File
@@ -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))