Device IRQs WIP
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user