/kernel/trunk/arch/amd64/src/ddi/ddi.c |
---|
File deleted |
/kernel/trunk/arch/amd64/Makefile.inc |
---|
88,7 → 88,6 |
arch/$(ARCH)/src/boot/boot.S \ |
arch/$(ARCH)/src/pm.c \ |
arch/$(ARCH)/src/context.S \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/ega.c \ |
arch/$(ARCH)/src/drivers/i8254.c \ |
arch/$(ARCH)/src/drivers/i8259.c \ |
/kernel/trunk/arch/ia32/src/ddi/ddi.c |
---|
File deleted |
/kernel/trunk/arch/ia32/Makefile.inc |
---|
127,7 → 127,6 |
arch/$(ARCH)/src/mm/memory_init.c \ |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/i8254.c \ |
arch/$(ARCH)/src/drivers/i8259.c \ |
arch/$(ARCH)/src/drivers/ega.c \ |
/kernel/trunk/arch/sparc64/src/ddi/ddi.c |
---|
File deleted |
/kernel/trunk/arch/sparc64/Makefile.inc |
---|
89,5 → 89,4 |
arch/$(ARCH)/src/trap/trap.c \ |
arch/$(ARCH)/src/trap/exception.c \ |
arch/$(ARCH)/src/trap/interrupt.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/tick.c |
/kernel/trunk/arch/ia64/src/ddi/ddi.c |
---|
File deleted |
/kernel/trunk/arch/ia64/Makefile.inc |
---|
85,5 → 85,4 |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/proc/scheduler.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/it.c |
/kernel/trunk/arch/ppc32/src/ddi/ddi.c |
---|
File deleted |
/kernel/trunk/arch/ppc32/Makefile.inc |
---|
68,7 → 68,6 |
arch/$(ARCH)/src/asm.S \ |
arch/$(ARCH)/src/cpu/cpu.c \ |
arch/$(ARCH)/src/proc/scheduler.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/cuda.c \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/mm/frame.c \ |
/kernel/trunk/arch/ppc64/src/ddi/ddi.c |
---|
File deleted |
/kernel/trunk/arch/ppc64/Makefile.inc |
---|
67,7 → 67,6 |
arch/$(ARCH)/src/interrupt.c \ |
arch/$(ARCH)/src/asm.S \ |
arch/$(ARCH)/src/cpu/cpu.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/proc/scheduler.c \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/mm/frame.c \ |
/kernel/trunk/arch/mips32/src/ddi/ddi.c |
---|
File deleted |
/kernel/trunk/arch/mips32/Makefile.inc |
---|
125,7 → 125,6 |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/fpu_context.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/arc.c \ |
arch/$(ARCH)/src/drivers/msim.c \ |
arch/$(ARCH)/src/drivers/serial.c |
/kernel/trunk/generic/include/ddi/ddi_arg.h |
---|
36,13 → 36,6 |
void *virt_base; /** Virtual address of starting page. */ |
unsigned long pages; /** Number of pages to map. */ |
int writable; /** True if the mapping should be writable. */ |
} ddi_memarg_t; |
} ddi_arg_t; |
/** Structure encapsulating arguments for SYS_ENABLE_IOSPACE syscall. */ |
typedef struct { |
unsigned long long task_id; /** ID of the destination task. */ |
void *ioaddr; /** Starting I/O space address. */ |
unsigned long size; /** Number of bytes. */ |
} ddi_ioarg_t; |
#endif |
/kernel/trunk/generic/include/ddi/ddi.h |
---|
31,14 → 31,7 |
#include <ddi/ddi_arg.h> |
#include <arch/types.h> |
#include <typedefs.h> |
extern __native sys_map_physmem(ddi_memarg_t *uspace_mem_arg); |
extern __native sys_enable_iospace(ddi_ioarg_t *uspace_io_arg); |
extern __native sys_map_physmem(ddi_arg_t *uspace_ddi_arg); |
/* |
* Interface to be implemented by all architectures. |
*/ |
extern int ddi_enable_iospace_arch(task_t *task, __address ioaddr, size_t size); |
#endif |
/kernel/trunk/generic/include/syscall/syscall.h |
---|
49,7 → 49,6 |
SYS_IPC_WAIT, |
SYS_IPC_HANGUP, |
SYS_MAP_PHYSMEM, |
SYS_ENABLE_IOSPACE, |
SYSCALL_END |
} syscall_t; |
/kernel/trunk/generic/src/ddi/ddi.c |
---|
111,86 → 111,18 |
return 0; |
} |
/** Enable range of I/O space for task. |
* |
* @param id Task ID of the destination task. |
* @param ioaddr Starting I/O address. |
* @param size Size of the enabled I/O space.. |
* |
* @return 0 on success, EPERM if the caller lacks capabilities to use this syscall, |
* ENOENT if there is no task matching the specified ID. |
*/ |
static int ddi_enable_iospace(task_id_t id, __address ioaddr, size_t size) |
{ |
ipl_t ipl; |
cap_t caps; |
task_t *t; |
int rc; |
/* |
* Make sure the caller is authorised to make this syscall. |
*/ |
caps = cap_get(TASK); |
if (!(caps & CAP_IO_MANAGER)) |
return EPERM; |
ipl = interrupts_disable(); |
spinlock_lock(&tasks_lock); |
t = task_find_by_id(id); |
if (!t) { |
/* |
* There is no task with the specified ID. |
*/ |
spinlock_unlock(&tasks_lock); |
interrupts_restore(ipl); |
return ENOENT; |
} |
/* |
* TODO: We are currently lacking support for task destroying. |
* Once it is added to the kernel, we must take care to |
* synchronize in a way that prevents race conditions here. |
*/ |
/* Lock the task and release the lock protecting tasks_btree. */ |
spinlock_lock(&t->lock); |
spinlock_unlock(&tasks_lock); |
rc = ddi_enable_iospace_arch(t, ioaddr, size); |
spinlock_unlock(&t->lock); |
interrupts_restore(ipl); |
return rc; |
} |
/** Wrapper for SYS_MAP_PHYSMEM syscall. |
* |
* @param User space address of memory DDI argument structure. |
* @param User space address of DDI argument structure. |
* |
* @return 0 on success, otherwise it returns error code found in errno.h |
*/ |
__native sys_map_physmem(ddi_memarg_t *uspace_mem_arg) |
__native sys_map_physmem(ddi_arg_t *uspace_ddi_arg) |
{ |
ddi_memarg_t arg; |
ddi_arg_t arg; |
copy_from_uspace(&arg, uspace_mem_arg, sizeof(ddi_memarg_t)); |
copy_from_uspace(&arg, uspace_ddi_arg, sizeof(ddi_arg_t)); |
return (__native) ddi_map_physmem((task_id_t) arg.task_id, ALIGN_DOWN((__address) arg.phys_base, FRAME_SIZE), |
ALIGN_DOWN((__address) arg.virt_base, PAGE_SIZE), (count_t) arg.pages, |
(bool) arg.writable); |
} |
/** Wrapper for SYS_ENABLE_IOSPACE syscall. |
* |
* @param User space address of DDI argument structure. |
* |
* @return 0 on success, otherwise it returns error code found in errno.h |
*/ |
__native sys_enable_iospace(ddi_ioarg_t *uspace_io_arg) |
{ |
ddi_ioarg_t arg; |
copy_from_uspace(&arg, uspace_io_arg, sizeof(ddi_ioarg_t)); |
return (__native) ddi_enable_iospace((task_id_t) arg.task_id, (__address) arg.ioaddr, (size_t) arg.size); |
} |
/kernel/trunk/generic/src/syscall/syscall.c |
---|
93,6 → 93,5 |
sys_ipc_forward_fast, |
sys_ipc_wait_for_call, |
sys_ipc_hangup, |
sys_map_physmem, |
sys_enable_iospace |
sys_map_physmem |
}; |