Device IRQs WIP

This commit is contained in:
2026-03-12 19:23:47 +01:00
parent 04b7355a3d
commit 19793e9126
29 changed files with 420 additions and 187 deletions

View File

@@ -356,16 +356,19 @@ DEFINE_SYSCALL (sys_volume_open) {
/* int volume_close (void) */
DEFINE_SYSCALL (sys_volume_close) {
char cwv[VOLUME_MAX];
spin_lock (&proc->lock);
memcpy (cwv, proc->cwv, sizeof (proc->cwv));
spin_unlock (&proc->lock);
int ret = vfs_volume_close (proc, proc->cwv, rctx);
int ret = vfs_volume_close (proc, cwv, rctx);
if (ret == ST_OK) {
spin_lock (&proc->lock);
memset (proc->cwv, 0, sizeof (proc->cwv));
spin_unlock (&proc->lock);
}
spin_unlock (&proc->lock);
return SYSRESULT (ret);
}
@@ -394,10 +397,13 @@ DEFINE_SYSCALL (sys_read_file) {
if (buffer == NULL)
return SYSRESULT (-ST_BAD_ADDRESS_SPACE);
char cwv[VOLUME_MAX];
spin_lock (&proc->lock);
int ret = vfs_read_file (proc, rctx, proc->cwv, path, buffer, off, size);
memcpy (cwv, proc->cwv, sizeof (proc->cwv));
spin_unlock (&proc->lock);
int ret = vfs_read_file (proc, rctx, cwv, path, buffer, off, size);
return SYSRESULT (ret);
}
@@ -423,11 +429,14 @@ DEFINE_SYSCALL (sys_describe) {
if (desc == NULL)
return SYSRESULT (-ST_BAD_ADDRESS_SPACE);
char cwv[VOLUME_MAX];
spin_lock (&proc->lock);
int ret = vfs_describe (proc, rctx, proc->cwv, path, desc);
memcpy (cwv, proc->cwv, sizeof (proc->cwv));
spin_unlock (&proc->lock);
int ret = vfs_describe (proc, rctx, cwv, path, desc);
return SYSRESULT (ret);
}
@@ -477,11 +486,14 @@ DEFINE_SYSCALL (sys_read_dir_entry) {
if (entry == NULL)
return SYSRESULT (-ST_BAD_ADDRESS_SPACE);
char cwv[VOLUME_MAX];
spin_lock (&proc->lock);
int ret = vfs_read_dir_entry (proc, rctx, proc->cwv, path, entry, entry_num);
memcpy (cwv, proc->cwv, sizeof (proc->cwv));
spin_unlock (&proc->lock);
int ret = vfs_read_dir_entry (proc, rctx, cwv, path, entry, entry_num);
return SYSRESULT (ret);
}
@@ -501,11 +513,14 @@ DEFINE_SYSCALL (sys_create_file) {
return SYSRESULT (-ST_BAD_ADDRESS_SPACE);
const char* path = (const char*)((uintptr_t)hhdm->offset + out_paddr);
char cwv[VOLUME_MAX];
spin_lock (&proc->lock);
int ret = vfs_create_file (proc, rctx, proc->cwv, path);
memcpy (cwv, proc->cwv, sizeof (proc->cwv));
spin_unlock (&proc->lock);
int ret = vfs_create_file (proc, rctx, cwv, path);
return SYSRESULT (ret);
}
@@ -534,11 +549,14 @@ DEFINE_SYSCALL (sys_write_file) {
if (buffer == NULL)
return SYSRESULT (-ST_BAD_ADDRESS_SPACE);
char cwv[VOLUME_MAX];
spin_lock (&proc->lock);
int ret = vfs_write_file (proc, rctx, proc->cwv, path, buffer, off, size, flags);
memcpy (cwv, proc->cwv, sizeof (proc->cwv));
spin_unlock (&proc->lock);
int ret = vfs_write_file (proc, rctx, cwv, path, buffer, off, size, flags);
return SYSRESULT (ret);
}
@@ -614,11 +632,14 @@ DEFINE_SYSCALL (sys_create_dir) {
return SYSRESULT (-ST_BAD_ADDRESS_SPACE);
const char* path = (const char*)((uintptr_t)hhdm->offset + out_paddr);
char cwv[VOLUME_MAX];
spin_lock (&proc->lock);
int ret = vfs_create_dir (proc, rctx, proc->cwv, path);
memcpy (cwv, proc->cwv, sizeof (proc->cwv));
spin_unlock (&proc->lock);
int ret = vfs_create_dir (proc, rctx, cwv, path);
return SYSRESULT (ret);
}
@@ -638,11 +659,14 @@ DEFINE_SYSCALL (sys_remove) {
return SYSRESULT (-ST_BAD_ADDRESS_SPACE);
const char* path = (const char*)((uintptr_t)hhdm->offset + out_paddr);
char cwv[VOLUME_MAX];
spin_lock (&proc->lock);
int ret = vfs_remove (proc, rctx, proc->cwv, path);
memcpy (cwv, proc->cwv, sizeof (proc->cwv));
spin_unlock (&proc->lock);
int ret = vfs_remove (proc, rctx, cwv, path);
return SYSRESULT (ret);
}