Compare commits
2 Commits
406434fed0
...
0c3250e8d6
| Author | SHA1 | Date | |
|---|---|---|---|
| 0c3250e8d6 | |||
| 01b37e41c2 |
@ -11,6 +11,7 @@
|
|||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
|
|
||||||
int32_t fbdev_getinfo(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
int32_t fbdev_getinfo(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
||||||
|
(void)dev; (void)buffer; (void)len; (void)extra;
|
||||||
FbDevGetInfo info = {
|
FbDevGetInfo info = {
|
||||||
.w = BOOT_INFO.fb->width,
|
.w = BOOT_INFO.fb->width,
|
||||||
.h = BOOT_INFO.fb->height,
|
.h = BOOT_INFO.fb->height,
|
||||||
|
|||||||
@ -164,6 +164,7 @@ struct {
|
|||||||
} PS2KB_CONSUMERS = {0};
|
} PS2KB_CONSUMERS = {0};
|
||||||
|
|
||||||
int32_t ps2kbdev_readch(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
int32_t ps2kbdev_readch(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
||||||
|
(void)dev; (void)len; (void)extra;
|
||||||
uint64_t pid = (uint64_t)buffer;
|
uint64_t pid = (uint64_t)buffer;
|
||||||
Proc *consproc = NULL;
|
Proc *consproc = NULL;
|
||||||
spinlock_acquire(&PROCS.spinlock);
|
spinlock_acquire(&PROCS.spinlock);
|
||||||
@ -202,6 +203,7 @@ int32_t ps2kbdev_readch(struct Dev *dev, uint8_t *buffer, size_t len, void *extr
|
|||||||
#define CONSUMER_RBUF_MAX 0x400
|
#define CONSUMER_RBUF_MAX 0x400
|
||||||
|
|
||||||
int32_t ps2kbdev_attchcons(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
int32_t ps2kbdev_attchcons(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
||||||
|
(void)dev; (void)len; (void)extra;
|
||||||
uint64_t pid = (uint64_t)buffer;
|
uint64_t pid = (uint64_t)buffer;
|
||||||
spinlock_acquire(&PROCS.spinlock);
|
spinlock_acquire(&PROCS.spinlock);
|
||||||
Proc *proc, *proctmp;
|
Proc *proc, *proctmp;
|
||||||
|
|||||||
@ -49,23 +49,23 @@ void serial_sendb(uint8_t b) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int32_t serialdev_sendb(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
int32_t serialdev_sendb(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
||||||
(void)len; (void)extra;
|
(void)dev; (void)len; (void)extra;
|
||||||
serial_sendb(buffer[0]);
|
serial_sendb(buffer[0]);
|
||||||
return E_OK;
|
return E_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t serialdev_sendready(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
int32_t serialdev_sendready(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
||||||
(void)buffer; (void)len; (void) extra;
|
(void)dev; (void)buffer; (void)len; (void) extra;
|
||||||
return serial_sendready();
|
return serial_sendready();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t serialdev_recvb(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
int32_t serialdev_recvb(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
||||||
(void)buffer; (void)len; (void)extra;
|
(void)dev; (void)buffer; (void)len; (void)extra;
|
||||||
return serial_recvb();
|
return serial_recvb();
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t serialdev_recvready(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
int32_t serialdev_recvready(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
||||||
(void)buffer; (void)len; (void)extra;
|
(void)dev; (void)buffer; (void)len; (void)extra;
|
||||||
return serial_recvready();
|
return serial_recvready();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,7 @@
|
|||||||
#include "sysdefs/devctl.h"
|
#include "sysdefs/devctl.h"
|
||||||
|
|
||||||
int32_t termdev_putch(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
int32_t termdev_putch(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
|
||||||
|
(void)dev; (void)extra;
|
||||||
kprintf("%.*s", (int)len, (char *)buffer);
|
kprintf("%.*s", (int)len, (char *)buffer);
|
||||||
return E_OK;
|
return E_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,8 +24,8 @@ size_t hal_strlen(char *s) {
|
|||||||
// https://aticleworld.com/memcmp-in-c/
|
// https://aticleworld.com/memcmp-in-c/
|
||||||
int hal_memcmp(const void *s1, const void *s2, int len)
|
int hal_memcmp(const void *s1, const void *s2, int len)
|
||||||
{
|
{
|
||||||
unsigned char *p = s1;
|
unsigned char *p = (unsigned char *)s1;
|
||||||
unsigned char *q = s2;
|
unsigned char *q = (unsigned char *)s2;
|
||||||
int charCompareStatus = 0;
|
int charCompareStatus = 0;
|
||||||
//If both pointer pointing same memory block
|
//If both pointer pointing same memory block
|
||||||
if (s1 == s2)
|
if (s1 == s2)
|
||||||
|
|||||||
@ -229,7 +229,7 @@ void intr_handleintr(IntrStackFrame *frame) {
|
|||||||
default:
|
default:
|
||||||
IntrHandler *ih, *ihtmp;
|
IntrHandler *ih, *ihtmp;
|
||||||
LL_FOREACH_SAFE(INTR_HANDLERS, ih, ihtmp) {
|
LL_FOREACH_SAFE(INTR_HANDLERS, ih, ihtmp) {
|
||||||
if (ih->irq == frame->trapnum) {
|
if ((uint64_t)ih->irq == frame->trapnum) {
|
||||||
ih->fn();
|
ih->fn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,7 +59,7 @@ void hal_vmm_map_page(uint64_t cr3phys, uint64_t virtaddr, uint64_t physaddr, ui
|
|||||||
*pte = (physaddr & ~0xFFFULL) | ((uint64_t)flags & 0x7ULL);
|
*pte = (physaddr & ~0xFFFULL) | ((uint64_t)flags & 0x7ULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hal_vmm_unmap_page(uint64_t cr3phys, uint64_t virtaddr, uint64_t physaddr) {
|
void hal_vmm_unmap_page(uint64_t cr3phys, uint64_t virtaddr) {
|
||||||
uint64_t *pml4 = (uint64_t *)VIRT(cr3phys);
|
uint64_t *pml4 = (uint64_t *)VIRT(cr3phys);
|
||||||
PgIndex pi = hal_vmm_pageindex(virtaddr);
|
PgIndex pi = hal_vmm_pageindex(virtaddr);
|
||||||
|
|
||||||
@ -93,11 +93,10 @@ void hal_vmm_unmap_range(uint64_t cr3phys, void *virtstart, void *physstart, siz
|
|||||||
|
|
||||||
spinlock_acquire(&spinlock);
|
spinlock_acquire(&spinlock);
|
||||||
uint8_t *vaddr = (uint8_t *)virtstart;
|
uint8_t *vaddr = (uint8_t *)virtstart;
|
||||||
uint8_t *paddr = (uint8_t *)physstart;
|
|
||||||
uint8_t *end = vaddr + size;
|
uint8_t *end = vaddr + size;
|
||||||
|
|
||||||
for (; vaddr < end; vaddr += HAL_PAGE_SIZE, paddr += HAL_PAGE_SIZE) {
|
for (; vaddr < end; vaddr += HAL_PAGE_SIZE) {
|
||||||
hal_vmm_unmap_page(cr3phys, (uint64_t)vaddr, (uint64_t)paddr);
|
hal_vmm_unmap_page(cr3phys, (uint64_t)vaddr);
|
||||||
}
|
}
|
||||||
spinlock_release(&spinlock);
|
spinlock_release(&spinlock);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,7 +53,7 @@ typedef struct {
|
|||||||
extern uint64_t KERNEL_CR3;
|
extern uint64_t KERNEL_CR3;
|
||||||
|
|
||||||
void hal_vmm_init(void);
|
void hal_vmm_init(void);
|
||||||
void hal_vmm_unmap_page(uint64_t cr3phys, uint64_t virtaddr, uint64_t physaddr);
|
void hal_vmm_unmap_page(uint64_t cr3phys, uint64_t virtaddr);
|
||||||
void hal_vmm_map_page(uint64_t cr3phys, uint64_t virtaddr, uint64_t physaddr, uint32_t flags);
|
void hal_vmm_map_page(uint64_t cr3phys, uint64_t virtaddr, uint64_t physaddr, uint32_t flags);
|
||||||
uint64_t hal_vmm_current_cr3(void);
|
uint64_t hal_vmm_current_cr3(void);
|
||||||
void hal_vmm_map_range(uint64_t cr3phys, void *virtstart, void *physstart, size_t size, uint32_t flags);
|
void hal_vmm_map_range(uint64_t cr3phys, void *virtstart, void *physstart, size_t size, uint32_t flags);
|
||||||
|
|||||||
@ -180,7 +180,7 @@ void proc_reaper(void) {
|
|||||||
Proc *zombie = head;
|
Proc *zombie = head;
|
||||||
LL_REMOVE(PROCS.procs, zombie);
|
LL_REMOVE(PROCS.procs, zombie);
|
||||||
|
|
||||||
for (size_t i = 0; i < zombie->vobjcnt; i++) {
|
for (size_t i = 0; i < PROC_VFSHANDLES_MAX; i++) {
|
||||||
if (zombie->vobjs[i] != NULL) {
|
if (zombie->vobjs[i] != NULL) {
|
||||||
vfs_close(zombie->vobjs[i]);
|
vfs_close(zombie->vobjs[i]);
|
||||||
zombie->vobjs[i] = NULL;
|
zombie->vobjs[i] = NULL;
|
||||||
|
|||||||
@ -55,7 +55,6 @@ typedef struct Proc {
|
|||||||
VasRange *vas;
|
VasRange *vas;
|
||||||
|
|
||||||
VfsObj *vobjs[PROC_VFSHANDLES_MAX];
|
VfsObj *vobjs[PROC_VFSHANDLES_MAX];
|
||||||
uint64_t vobjcnt;
|
|
||||||
|
|
||||||
IpcPipe *pipes[PROC_PIPEHANDLES_MAX];
|
IpcPipe *pipes[PROC_PIPEHANDLES_MAX];
|
||||||
SpinLock pipes_spinlock;
|
SpinLock pipes_spinlock;
|
||||||
|
|||||||
@ -52,7 +52,7 @@ void randcrypto_gen_uniqid(char *out, size_t n) {
|
|||||||
uint32_t extra = (r != -1) ? (uint32_t)r : uniqstate * 0x27d4eb2dU;
|
uint32_t extra = (r != -1) ? (uint32_t)r : uniqstate * 0x27d4eb2dU;
|
||||||
|
|
||||||
uniqstate += 0x9E3779B1u;
|
uniqstate += 0x9E3779B1u;
|
||||||
uint32_t v = uniqmix32(uniqstate);
|
uint32_t v = uniqmix32(uniqstate ^ extra);
|
||||||
|
|
||||||
spinlock_release(&uniqstate_spinlock);
|
spinlock_release(&uniqstate_spinlock);
|
||||||
|
|
||||||
|
|||||||
@ -128,7 +128,7 @@ void ata_probe(void) {
|
|||||||
.devno = ATA_MASTER,
|
.devno = ATA_MASTER,
|
||||||
.capacity = probesize,
|
.capacity = probesize,
|
||||||
};
|
};
|
||||||
StoreDev *sd = storedev_create(STOREDEV_ATASD, (void *)&extra);
|
storedev_create(STOREDEV_ATASD, (void *)&extra);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,6 +211,7 @@ done:
|
|||||||
}
|
}
|
||||||
|
|
||||||
int32_t atasd_cleanup(struct StoreDev *sd) {
|
int32_t atasd_cleanup(struct StoreDev *sd) {
|
||||||
|
(void)sd;
|
||||||
return E_OK;
|
return E_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,18 +38,16 @@ int32_t SYSCALL2(sys_fs_openf, opath1, oflags1) {
|
|||||||
Proc *proc = PROCS.current;
|
Proc *proc = PROCS.current;
|
||||||
spinlock_release(&PROCS.spinlock);
|
spinlock_release(&PROCS.spinlock);
|
||||||
|
|
||||||
if (proc->vobjcnt < PROC_VFSHANDLES_MAX) {
|
for (size_t i = 0; i < PROC_VFSHANDLES_MAX; i++) {
|
||||||
for (size_t i = 0; i < PROC_VFSHANDLES_MAX; i++) {
|
if (proc->vobjs[i] == NULL) {
|
||||||
if (proc->vobjs[i] == NULL) {
|
proc->vobjs[i] = vobj;
|
||||||
proc->vobjs[i] = vobj;
|
ret = i;
|
||||||
ret = i;
|
goto done;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
ret = E_NOMEMORY;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = E_NOMEMORY;
|
||||||
|
|
||||||
done:
|
done:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -81,7 +81,6 @@ int32_t SYSCALL1(sys_mman_unmap, addr1) {
|
|||||||
Proc *proc = PROCS.current;
|
Proc *proc = PROCS.current;
|
||||||
spinlock_release(&PROCS.spinlock);
|
spinlock_release(&PROCS.spinlock);
|
||||||
|
|
||||||
uint8_t *virt = NULL;
|
|
||||||
VasRange *tofree = NULL;
|
VasRange *tofree = NULL;
|
||||||
|
|
||||||
VasRange *vas, *vastmp;
|
VasRange *vas, *vastmp;
|
||||||
|
|||||||
@ -8,34 +8,6 @@
|
|||||||
|
|
||||||
Term TERM;
|
Term TERM;
|
||||||
|
|
||||||
static uint32_t ansi_colours[8] = {
|
|
||||||
0xFFFFFBF0,
|
|
||||||
0xFFE64C4C,
|
|
||||||
0xFF4CAF50,
|
|
||||||
0xFFCC9900,
|
|
||||||
0xFF337AB7,
|
|
||||||
0xFF9B59B6,
|
|
||||||
0xFF0097A7,
|
|
||||||
0xFF555555
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint32_t ansi_bright_colours[8] = {
|
|
||||||
0xFFBFB9AA,
|
|
||||||
0xFFFF6B6B,
|
|
||||||
0xFF66BB6A,
|
|
||||||
0xFFFFC107,
|
|
||||||
0xFF42A5F5,
|
|
||||||
0xFFBA68C8,
|
|
||||||
0xFF26C6DA,
|
|
||||||
0xFF000000
|
|
||||||
};
|
|
||||||
|
|
||||||
// defaults
|
|
||||||
static uint32_t default_bg = 0xFFFFFBF0;
|
|
||||||
static uint32_t default_fg = 0xFF222222;
|
|
||||||
static uint32_t default_bg_bright = 0xFFFFFBF0;
|
|
||||||
static uint32_t default_fg_bright = 0xFF000000;
|
|
||||||
|
|
||||||
void term_doinit(void *addr) {
|
void term_doinit(void *addr) {
|
||||||
TERM.ftctx = flanterm_fb_init(
|
TERM.ftctx = flanterm_fb_init(
|
||||||
NULL, // malloc
|
NULL, // malloc
|
||||||
@ -57,12 +29,6 @@ void term_doinit(void *addr) {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
/* ansi_colours, // ansi colors */
|
|
||||||
/* ansi_bright_colours, // ansi bright colors */
|
|
||||||
/* &default_bg, // default bg */
|
|
||||||
/* &default_fg, // default fg */
|
|
||||||
/* &default_fg_bright, // default bg bright */
|
|
||||||
/* &default_bg_bright, // default fg bright */
|
|
||||||
FM_T_437_F16,
|
FM_T_437_F16,
|
||||||
8,
|
8,
|
||||||
16,
|
16,
|
||||||
|
|||||||
@ -27,8 +27,8 @@ void *string_memcpy(void *dst, const void *src, size_t n) {
|
|||||||
// https://aticleworld.com/memcmp-in-c/
|
// https://aticleworld.com/memcmp-in-c/
|
||||||
int string_memcmp(const void *s1, const void *s2, int len)
|
int string_memcmp(const void *s1, const void *s2, int len)
|
||||||
{
|
{
|
||||||
unsigned char *p = s1;
|
unsigned char *p = (unsigned char *)s1;
|
||||||
unsigned char *q = s2;
|
unsigned char *q = (unsigned char *)s2;
|
||||||
int charCompareStatus = 0;
|
int charCompareStatus = 0;
|
||||||
//If both pointer pointing same memory block
|
//If both pointer pointing same memory block
|
||||||
if (s1 == s2)
|
if (s1 == s2)
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
#include <ulib.h>
|
#include <ulib.h>
|
||||||
|
|
||||||
int showtree(char *root, int indent) {
|
int showtree(char *root, int indent) {
|
||||||
#define INDENT() for (size_t i = 0; i < indent; i++) uprintf(" ")
|
#define INDENT() for (size_t i = 0; i < (size_t)indent; i++) uprintf(" ")
|
||||||
|
|
||||||
FsStat statbuf; ZERO(&statbuf);
|
FsStat statbuf; ZERO(&statbuf);
|
||||||
if (fs_stat(root, &statbuf) != E_OK) {
|
if (fs_stat(root, &statbuf) != E_OK) {
|
||||||
|
|||||||
@ -32,7 +32,7 @@ void pctl_ls(void) {
|
|||||||
char *membuf = umalloc(20);
|
char *membuf = umalloc(20);
|
||||||
|
|
||||||
uprintf("%-30s %s %-15s %-8s\n", "NAME", "PID", "MEMORY", "STATE");
|
uprintf("%-30s %s %-15s %-8s\n", "NAME", "PID", "MEMORY", "STATE");
|
||||||
for (size_t i = 0; i < procslen; i++) {
|
for (size_t i = 0; i < (size_t)procslen; i++) {
|
||||||
ProcStat stat; ZERO(&stat);
|
ProcStat stat; ZERO(&stat);
|
||||||
|
|
||||||
string_memset(namebuf, 0, 34);
|
string_memset(namebuf, 0, 34);
|
||||||
@ -45,7 +45,7 @@ void pctl_ls(void) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PCTL_LS_CONFIG.pid != -1 && stat.pid != PCTL_LS_CONFIG.pid) {
|
if (PCTL_LS_CONFIG.pid != -1 && stat.pid != (uint64_t)PCTL_LS_CONFIG.pid) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -238,6 +238,5 @@ next:
|
|||||||
line = string_tokenizealloc(NULL, "\n");
|
line = string_tokenizealloc(NULL, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -79,6 +79,7 @@ bool rt_mkalias(Token *tks) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool rt_PID(Token *tks) {
|
bool rt_PID(Token *tks) {
|
||||||
|
(void)tks;
|
||||||
uprintf("%lu\n", PID);
|
uprintf("%lu\n", PID);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user