Expose storedevs to the outside world via dev interface

This commit is contained in:
2025-10-11 02:35:15 +02:00
parent 3996f71316
commit 6b0e05e506
18 changed files with 137 additions and 18 deletions

View File

@ -6,13 +6,16 @@
#define DEV_FNS_MAX 32
typedef int32_t (*DevFn)(uint8_t *buffer, size_t len, void *extra);
struct Dev;
typedef struct {
typedef int32_t (*DevFn)(struct Dev *dev, uint8_t *buffer, size_t len, void *extra);
typedef struct Dev {
int _hshtbstate;
char ident[0x100];
DevFn fns[DEV_FNS_MAX];
SpinLock spinlock;
void *extra;
} Dev;

View File

@ -10,7 +10,7 @@
#include "bootinfo/bootinfo.h"
#include "errors.h"
int32_t fbdev_getinfo(uint8_t *buffer, size_t len, void *extra) {
int32_t fbdev_getinfo(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
FbDevGetInfo info = {
.w = BOOT_INFO.fb->width,
.h = BOOT_INFO.fb->height,

View File

@ -1,7 +1,6 @@
#ifndef DEV_FBDEV_H_
#define DEV_FBDEV_H_
int32_t fbdev_getinfo(uint8_t *buffer, size_t len, void *extra);
void fbdev_init(void);
#endif // DEV_FBDEV_H_

View File

@ -163,7 +163,7 @@ struct {
Ps2kbEvConsumer *list;
} PS2KB_CONSUMERS = {0};
int32_t ps2kbdev_readch(uint8_t *buffer, size_t len, void *extra) {
int32_t ps2kbdev_readch(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
uint64_t pid = (uint64_t)buffer;
Proc *consproc = NULL;
spinlock_acquire(&PROCS.spinlock);
@ -201,7 +201,7 @@ int32_t ps2kbdev_readch(uint8_t *buffer, size_t len, void *extra) {
#define CONSUMER_RBUF_MAX 0x400
int32_t ps2kbdev_attchcons(uint8_t *buffer, size_t len, void *extra) {
int32_t ps2kbdev_attchcons(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
uint64_t pid = (uint64_t)buffer;
spinlock_acquire(&PROCS.spinlock);
Proc *proc, *proctmp;

View File

@ -48,23 +48,23 @@ void serial_sendb(uint8_t b) {
io_out8(PORT, b);
}
int32_t serialdev_sendb(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;
serial_sendb(buffer[0]);
return E_OK;
}
int32_t serialdev_sendready(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;
return serial_sendready();
}
int32_t serialdev_recvb(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;
return serial_recvb();
}
int32_t serialdev_recvready(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;
return serial_recvready();
}

View File

@ -1,10 +1,6 @@
#ifndef DEV_SERIALDEV_H_
#define DEV_SERIALDEV_H_
int32_t serialdev_sendb(uint8_t *buffer, size_t len, void *extra);
int32_t serialdev_sendready(uint8_t *buffer, size_t len, void *extra);
int32_t serialdev_recvb(uint8_t *buffer, size_t len, void *extra);
int32_t serialdev_recvready(uint8_t *buffer, size_t len, void *extra);
void serialdev_init(void);
#endif // DEV_SERIALDEV_H_

View File

@ -9,7 +9,7 @@
#include "hshtb.h"
#include "sysdefs/devctl.h"
int32_t termdev_putch(uint8_t *buffer, size_t len, void *extra) {
int32_t termdev_putch(struct Dev *dev, uint8_t *buffer, size_t len, void *extra) {
kprintf("%.*s", (int)len, (char *)buffer);
return E_OK;
}

View File

@ -5,7 +5,6 @@
#include <stddef.h>
#include "dev.h"
int32_t termdev_putch(uint8_t *buffer, size_t len, void *extra);
void termdev_init(void);
#endif // DEV_TERMDEV_H_