aboutsummaryrefslogtreecommitdiff
path: root/src/drv
diff options
context:
space:
mode:
authorXavier Del Campo Romero <xavi92@disroot.org>2025-11-11 00:05:00 +0100
committerXavier Del Campo Romero <xavi92@disroot.org>2025-11-11 00:08:15 +0100
commitf7ad4d9216b488f76ed4b3c8e423cd926e134b9d (patch)
tree39a83931c1c8a5e6d025623aba5e5826c7ef38e0 /src/drv
parent7861a52adf92a083bb2aed4c35f98d8035dce032 (diff)
downloadwnix-f7ad4d9216b488f76ed4b3c8e423cd926e134b9d.tar.gz
WIP
Diffstat (limited to 'src/drv')
-rw-r--r--src/drv/ps1/cd/src/getstat.c6
-rw-r--r--src/drv/ps1/cd/src/update.c4
-rw-r--r--src/drv/ps1/irq/CMakeLists.txt3
-rw-r--r--src/drv/ps1/sio/src/update.c5
4 files changed, 16 insertions, 2 deletions
diff --git a/src/drv/ps1/cd/src/getstat.c b/src/drv/ps1/cd/src/getstat.c
index 34bdaf5..714238b 100644
--- a/src/drv/ps1/cd/src/getstat.c
+++ b/src/drv/ps1/cd/src/getstat.c
@@ -26,12 +26,16 @@ static int wait_event(void)
struct cd_prv *const p = &drv_ps1_cd_prv;
struct cd_prv_getstat *const g = &p->u.getstat;
+ p->available = true;
+ p->next = NULL;
+ return 0;
+
if (drv_ps1_event_test(p->event))
{
p->available = !g->status.bits.shell_open;
if (!p->head)
- return drv_ps1_cd_getstat();
+ return 0;
return p->head->f();
}
diff --git a/src/drv/ps1/cd/src/update.c b/src/drv/ps1/cd/src/update.c
index 148dd87..022a678 100644
--- a/src/drv/ps1/cd/src/update.c
+++ b/src/drv/ps1/cd/src/update.c
@@ -26,7 +26,9 @@ int drv_ps1_cd_update(struct drv_ps1_cd *const cd)
{
struct cd_prv *const p = &drv_ps1_cd_prv;
- if (p->next())
+ if (!p->next && p->head)
+ return p->head->f();
+ if (p->next && p->next())
return -1;
else if (p->available ^ cd->available)
{
diff --git a/src/drv/ps1/irq/CMakeLists.txt b/src/drv/ps1/irq/CMakeLists.txt
index 8327cd5..ee807a0 100644
--- a/src/drv/ps1/irq/CMakeLists.txt
+++ b/src/drv/ps1/irq/CMakeLists.txt
@@ -18,3 +18,6 @@ add_library(drv_ps1_irq)
add_subdirectory(src)
target_include_directories(drv_ps1_irq PUBLIC include PRIVATE private_include)
target_link_libraries(drv_ps1_irq PUBLIC c PRIVATE drv_ps1_bios)
+
+
+target_link_libraries(drv_ps1_irq PRIVATE kprintf)
diff --git a/src/drv/ps1/sio/src/update.c b/src/drv/ps1/sio/src/update.c
index eac875c..85797df 100644
--- a/src/drv/ps1/sio/src/update.c
+++ b/src/drv/ps1/sio/src/update.c
@@ -86,10 +86,15 @@ static int tx(struct drv_ps1_sio *const s)
return 0;
}
+int sio_stat_overrun;
+
int drv_ps1_sio_update(struct drv_ps1_sio *const s)
{
if (SIO_STAT->bits.rx_fifo_overrun)
+ {
+ sio_stat_overrun = 1;
SIO_CTRL->bits.ack = 1;
+ }
if (init(s) || rx(s) || tx(s))
return -1;