mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
/dev/console
This commit is contained in:
Binary file not shown.
+2
-29
@@ -18,35 +18,6 @@
|
||||
#include <arch/smp.h>
|
||||
#include <kernel/timer.h>
|
||||
|
||||
/*
|
||||
|
||||
static volatile struct limine_terminal_request liminettyr = {
|
||||
.id = LIMINE_TERMINAL_REQUEST,
|
||||
.revision = 0
|
||||
};
|
||||
|
||||
struct limine_terminal_response* liminetty;
|
||||
|
||||
int ttylock = 0;
|
||||
|
||||
static vmm_context* liminettyctx;
|
||||
|
||||
void liminewrite(char* str, size_t c){
|
||||
|
||||
vmm_context* old = arch_getcls()->context;
|
||||
|
||||
if(liminettyctx)
|
||||
vmm_switchcontext(liminettyctx);
|
||||
|
||||
liminetty->write(liminetty->terminals[0], str, c);
|
||||
|
||||
if(liminettyctx)
|
||||
vmm_switchcontext(old);
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
void kmain(){
|
||||
|
||||
liminetty_init();
|
||||
@@ -88,6 +59,8 @@ void kmain(){
|
||||
initrd_parse();
|
||||
|
||||
devman_init();
|
||||
|
||||
consoledev_init();
|
||||
|
||||
pci_enumerate();
|
||||
|
||||
|
||||
@@ -39,6 +39,8 @@ static int devfs_open(dirnode_t* parent, char* name){
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
node->st = devnode->st;
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef _CONSOLEDEV_H_INCLUDE
|
||||
#define _CONSOLEDEV_H_INCLUDE
|
||||
|
||||
void consoledev_init();
|
||||
|
||||
#endif
|
||||
+2
-2
@@ -17,6 +17,7 @@ int devman_newdevice(char* name, int type, int major, int minor, devcalls* calls
|
||||
if(!addr)
|
||||
return ENOMEM;
|
||||
majorcalls = addr;
|
||||
highestmajor = major;
|
||||
}
|
||||
|
||||
majorcalls[major] = calls;
|
||||
@@ -26,10 +27,9 @@ int devman_newdevice(char* name, int type, int major, int minor, devcalls* calls
|
||||
}
|
||||
|
||||
int devman_write(int *error, int dev, void* buff, size_t count, size_t offset){
|
||||
|
||||
|
||||
if(major(dev) > highestmajor)
|
||||
return ENODEV;
|
||||
|
||||
|
||||
return majorcalls[major(dev)]->write(error, minor(dev), buff, count, offset);
|
||||
|
||||
|
||||
@@ -295,31 +295,23 @@ void sched_runinit(){
|
||||
fd_t* stdoutfd = &proc->fds[1];
|
||||
fd_t* stderrfd = &proc->fds[2];
|
||||
|
||||
// dummy file before console actually gets implemented and a devfs node
|
||||
|
||||
#define CONSOLE_DUMMY "etc/consoledummy"
|
||||
#define CONSOLE_PATH "dev/console"
|
||||
|
||||
size_t ret = vfs_create(vfs_root(), CONSOLE_DUMMY, 0777);
|
||||
|
||||
if(ret){
|
||||
printf("Create failed: %s\n", strerror(ret));
|
||||
_panic("Failed to create dummy console", 0);
|
||||
}
|
||||
ret = vfs_open(&stdinfd->node, vfs_root(), CONSOLE_DUMMY);
|
||||
int ret = vfs_open(&stdinfd->node, vfs_root(), CONSOLE_PATH);
|
||||
|
||||
if(ret){
|
||||
printf("Open failed: %s\n", strerror(ret));
|
||||
_panic("Could not open stdin for init", 0);
|
||||
}
|
||||
|
||||
ret = vfs_open(&stdoutfd->node, vfs_root(), CONSOLE_DUMMY);
|
||||
ret = vfs_open(&stdoutfd->node, vfs_root(), CONSOLE_PATH);
|
||||
|
||||
if(ret){
|
||||
printf("Open failed: %s\n", strerror(ret));
|
||||
_panic("Could not open stdout for init", 0);
|
||||
}
|
||||
|
||||
ret = vfs_open(&stderrfd->node, vfs_root(), CONSOLE_DUMMY);
|
||||
ret = vfs_open(&stderrfd->node, vfs_root(), CONSOLE_PATH);
|
||||
|
||||
if(ret){
|
||||
printf("Open failed: %s\n", strerror(ret));
|
||||
|
||||
@@ -59,6 +59,9 @@ syscallret syscall_write(int ifd, void* buff, size_t count){
|
||||
|
||||
fd->offset += writec;
|
||||
|
||||
if(fd->node->st.st_size < fd->offset)
|
||||
fd->offset = fd->node->st.st_size;
|
||||
|
||||
retv.errno = 0;
|
||||
retv.ret = writec;
|
||||
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
#include <kernel/consoledev.h>
|
||||
#include <kernel/devman.h>
|
||||
#include <kernel/liminetty.h>
|
||||
#include <errno.h>
|
||||
#include <arch/panic.h>
|
||||
|
||||
#define CONSOLE_MAJOR 1
|
||||
|
||||
static int isatty(int minor){
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int read(int *error, int dev, void* buff, size_t count, size_t offset){
|
||||
*error = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int write(int *error, int dev, void* buff, size_t count, size_t offset){
|
||||
*error = 0;
|
||||
|
||||
liminetty_writeuser(buff, count);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
devcalls calls = {
|
||||
read, write, isatty
|
||||
};
|
||||
|
||||
|
||||
void consoledev_init(){
|
||||
|
||||
if(devman_newdevice("console", TYPE_CHARDEV, CONSOLE_MAJOR, 0, &calls))
|
||||
_panic("Failed to create console device", 0);
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user