feat: moved libk stuff to libk folder
This commit is contained in:
37
kernel/libk/kprint.c
Normal file
37
kernel/libk/kprint.c
Normal file
@@ -0,0 +1,37 @@
|
||||
//
|
||||
// Created by rick on 28-01-21.
|
||||
//
|
||||
|
||||
#include "kprint.h"
|
||||
|
||||
#define MAX_HANDLERS 8
|
||||
|
||||
kprint_handler handlers[MAX_HANDLERS] = {
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
};
|
||||
|
||||
void kprint_register(kprint_handler handler) {
|
||||
for (int i = 0; i < MAX_HANDLERS; ++i) {
|
||||
if (handlers[i] == NULL) {
|
||||
handlers[i] = handler;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// todo handle
|
||||
}
|
||||
|
||||
void kprint(const char *msg) {
|
||||
for (int i = 0; i < MAX_HANDLERS; ++i) {
|
||||
if (handlers[i] == NULL) {
|
||||
continue;
|
||||
}
|
||||
handlers[i](msg);
|
||||
}
|
||||
}
|
||||
16
kernel/libk/kprint.h
Normal file
16
kernel/libk/kprint.h
Normal file
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// Created by rick on 28-01-21.
|
||||
//
|
||||
|
||||
#ifndef NEW_KERNEL_KPRINT_H
|
||||
#define NEW_KERNEL_KPRINT_H
|
||||
|
||||
#endif //NEW_KERNEL_KPRINT_H
|
||||
|
||||
#include <types.h>
|
||||
|
||||
typedef void (*kprint_handler)(const char *);
|
||||
|
||||
void kprint_register(kprint_handler);
|
||||
|
||||
void kprint(const char *msg);
|
||||
28
kernel/libk/libk.c
Normal file
28
kernel/libk/libk.c
Normal file
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// Created by rick on 02-02-21.
|
||||
//
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "libk.h"
|
||||
#include "kprint.h"
|
||||
|
||||
bool k_addr_in_kspace(void* addr) {
|
||||
return addr > kernel_start && addr < kernel_end;
|
||||
}
|
||||
|
||||
void k_wait_for_interrupt() {
|
||||
__asm__ __volatile__("hlt;");
|
||||
}
|
||||
|
||||
void k_panics(const char *msg) {
|
||||
kprint(msg);
|
||||
kprint("PANIC!");
|
||||
__asm__ __volatile__("cli;"
|
||||
"hlt;");
|
||||
}
|
||||
|
||||
void k_panic() {
|
||||
kprint("PANIC!");
|
||||
__asm__ __volatile__("cli;"
|
||||
"hlt;");
|
||||
}
|
||||
22
kernel/libk/libk.h
Normal file
22
kernel/libk/libk.h
Normal file
@@ -0,0 +1,22 @@
|
||||
//
|
||||
// Created by rick on 02-02-21.
|
||||
//
|
||||
|
||||
#ifndef NEW_KERNEL_LIBK_H
|
||||
#define NEW_KERNEL_LIBK_H
|
||||
#include <stdbool.h>
|
||||
|
||||
extern void* _kernel_start;
|
||||
extern void* _kernel_end;
|
||||
#define kernel_start ((uint32_t)(&_kernel_start))
|
||||
#define kernel_end ((uint32_t)(&_kernel_end))
|
||||
|
||||
bool k_addr_in_kspace(void *addr);
|
||||
|
||||
void k_wait_for_interrupt();
|
||||
|
||||
void k_panics(const char *msg);
|
||||
|
||||
void k_panic();
|
||||
|
||||
#endif //NEW_KERNEL_LIBK_H
|
||||
22
kernel/libk/syscall.c
Normal file
22
kernel/libk/syscall.c
Normal file
@@ -0,0 +1,22 @@
|
||||
//
|
||||
// Created by rick on 22-02-21.
|
||||
//
|
||||
|
||||
#include "syscall.h"
|
||||
#include <types.h>
|
||||
#include <attributes.h>
|
||||
|
||||
void syscall1(uint32_t arg1) {
|
||||
__asm__("int $0x80"
|
||||
:
|
||||
: "a"(arg1));
|
||||
}
|
||||
|
||||
void syscall_yield_job() {
|
||||
syscall1(SYSCALL_YIELD_JOB);
|
||||
}
|
||||
|
||||
void noreturn syscall_start_scheduler() {
|
||||
syscall1(SYSCALL_START_SCHEDULER);
|
||||
while (1) { __asm__("hlt"); };
|
||||
}
|
||||
17
kernel/libk/syscall.h
Normal file
17
kernel/libk/syscall.h
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// Created by rick on 22-02-21.
|
||||
//
|
||||
|
||||
#ifndef NEW_KERNEL_SYSCALL_H
|
||||
#define NEW_KERNEL_SYSCALL_H
|
||||
|
||||
#include <attributes.h>
|
||||
|
||||
#define SYSCALL_START_SCHEDULER 0x01
|
||||
#define SYSCALL_YIELD_JOB 0x02
|
||||
|
||||
void syscall_yield_job();
|
||||
|
||||
void noreturn syscall_start_scheduler();
|
||||
|
||||
#endif //NEW_KERNEL_SYSCALL_H
|
||||
Reference in New Issue
Block a user