diff --git a/src/generic/SConscript b/src/generic/SConscript index 826baca..1676db8 100644 --- a/src/generic/SConscript +++ b/src/generic/SConscript @@ -4,7 +4,7 @@ Import('env') # The set of source files associated with this SConscript file. -src_local = ['irq.c', 'scheduler.c', 'time.c', 'tcb.c', 'space.c', 'bootm.c', 'resource.c', 'container.c', 'capability.c'] +src_local = ['irq.c', 'scheduler.c', 'time.c', 'tcb.c', 'space.c', 'bootm.c', 'resource.c', 'container.c', 'capability.c', 'cinfo.c'] obj = env.Object(src_local) Return('obj') diff --git a/src/generic/cinfo.c b/src/generic/cinfo.c new file mode 100644 index 0000000..1a7802b --- /dev/null +++ b/src/generic/cinfo.c @@ -0,0 +1,132 @@ +/* + * Autogenerated container descriptions + * defined for the current build. + * + * Copyright (C) 2009 Bahadir Balban + */ +#include +#include +#include +#include + +/* + * FIXME: + * Add irqs, exceptions + */ + +#define CONFIG_CONT0_PAGER_START CONFIG_CONT0_PHYS_START + +struct container_info cinfo[] = { + [0] = { + .name = "Codezero POSIX Services", + .npagers = 1, + .pager = { + [0] = { + .pager_lma = __pfn(CONFIG_CONT0_PAGER_START), + .pager_vma = __pfn(0xE0000000), + .pager_size = __pfn(0xa2000), + .ncaps = 14, + .caps = { + [0] = { + .type = CAP_TYPE_MAP | CAP_RTYPE_VIRTMEM, + .access = CAP_MAP_READ | CAP_MAP_WRITE + | CAP_MAP_EXEC | CAP_MAP_UNMAP, + .start = __pfn(0xE0000000), + .end = __pfn(0xF0000000), + .size = __pfn(0x10000000), + }, + [1] = { + .type = CAP_TYPE_MAP | CAP_RTYPE_VIRTMEM, + .access = CAP_MAP_READ | CAP_MAP_WRITE + | CAP_MAP_EXEC | CAP_MAP_UNMAP, + .start = __pfn(0x10000000), + .end = __pfn(0x20000000), + .size = __pfn(0x10000000), + }, + [2] = { + .type = CAP_TYPE_MAP | CAP_RTYPE_VIRTMEM, + .access = CAP_MAP_READ | CAP_MAP_WRITE + | CAP_MAP_EXEC | CAP_MAP_UNMAP, + .start = __pfn(0x20000000), + .end = __pfn(0x30000000), + .size = __pfn(0x10000000), + }, + [3] = { + .type = CAP_TYPE_MAP | CAP_RTYPE_VIRTMEM, + .access = CAP_MAP_READ | CAP_MAP_WRITE + | CAP_MAP_EXEC | CAP_MAP_UNMAP + | CAP_MAP_UTCB, + .start = __pfn(0xF8000000), + .end = __pfn(0xF9000000), + .size = __pfn(0x1000000), + }, + + [4] = { + .type = CAP_TYPE_MAP | CAP_RTYPE_PHYSMEM, + .access = CAP_MAP_CACHED | CAP_MAP_UNCACHED + | CAP_MAP_READ | CAP_MAP_WRITE + | CAP_MAP_EXEC | CAP_MAP_UNMAP, + .start = __pfn(CONFIG_CONT0_PHYS_START), + .end = __pfn(CONFIG_CONT0_PHYS_END), /* 16 MB for all posix services */ + }, + [5] = { + .type = CAP_TYPE_IPC | CAP_RTYPE_CONTAINER, + .access = CAP_IPC_SEND | CAP_IPC_RECV + | CAP_IPC_FULL | CAP_IPC_SHORT + | CAP_IPC_EXTENDED, + .start = 0, .end = 0, .size = 0, + }, + [6] = { + .type = CAP_TYPE_TCTRL | CAP_RTYPE_CONTAINER, + .access = CAP_TCTRL_CREATE | CAP_TCTRL_DESTROY + | CAP_TCTRL_SUSPEND | CAP_TCTRL_RESUME + | CAP_TCTRL_RECYCLE, + .start = 0, .end = 0, .size = 0, + }, + [7] = { + .type = CAP_TYPE_EXREGS | CAP_RTYPE_CONTAINER, + .access = CAP_EXREGS_RW_PAGER + | CAP_EXREGS_RW_UTCB | CAP_EXREGS_RW_SP + | CAP_EXREGS_RW_PC | CAP_EXREGS_RW_REGS, + .start = 0, .end = 0, .size = 0, + }, + [8] = { + .type = CAP_TYPE_QUANTITY + | CAP_RTYPE_THREADPOOL, + .access = 0, .start = 0, .end = 0, + .size = 64, + }, + [9] = { + .type = CAP_TYPE_QUANTITY | CAP_RTYPE_SPACEPOOL, + .access = 0, .start = 0, .end = 0, + .size = 64, + }, + [10] = { + .type = CAP_TYPE_QUANTITY | CAP_RTYPE_CPUPOOL, + .access = 0, .start = 0, .end = 0, + .size = 50, /* Percentage */ + }, + [11] = { + .type = CAP_TYPE_QUANTITY | CAP_RTYPE_MUTEXPOOL, + .access = 0, .start = 0, .end = 0, + .size = 100, + }, + [12] = { + /* For pmd accounting */ + .type = CAP_TYPE_QUANTITY | CAP_RTYPE_MAPPOOL, + .access = 0, .start = 0, .end = 0, + /* Function of mem regions, nthreads etc. */ + .size = (64 * 30 + 100), + }, + [13] = { + /* For cap spliting, creating, etc. */ + .type = CAP_TYPE_QUANTITY | CAP_RTYPE_CAPPOOL, + .access = 0, .start = 0, .end = 0, + /* This may be existing caps X 2 etc. */ + .size = 30, + }, + }, + }, + }, + }, +}; diff --git a/src/generic/container.c b/src/generic/container.c index e3beb06..603aa61 100644 --- a/src/generic/container.c +++ b/src/generic/container.c @@ -12,129 +12,6 @@ #include INC_SUBARCH(mm.h) #include INC_ARCH(linker.h) -/* - * FIXME: - * Add irqs, exceptions - */ - -#define CONFIG_CONT0_PAGER_START CONFIG_CONT0_PHYS_START - -struct container_info cinfo[] = { - [0] = { - .name = "Codezero POSIX Services", - .npagers = 1, - .pager = { - [0] = { - .pager_lma = __pfn(CONFIG_CONT0_PAGER_START), - .pager_vma = __pfn(0xE0000000), - .pager_size = __pfn(0xa2000), - .ncaps = 14, - .caps = { - [0] = { - .type = CAP_TYPE_MAP | CAP_RTYPE_VIRTMEM, - .access = CAP_MAP_READ | CAP_MAP_WRITE - | CAP_MAP_EXEC | CAP_MAP_UNMAP, - .start = __pfn(0xE0000000), - .end = __pfn(0xF0000000), - .size = __pfn(0x10000000), - }, - [1] = { - .type = CAP_TYPE_MAP | CAP_RTYPE_VIRTMEM, - .access = CAP_MAP_READ | CAP_MAP_WRITE - | CAP_MAP_EXEC | CAP_MAP_UNMAP, - .start = __pfn(0x10000000), - .end = __pfn(0x20000000), - .size = __pfn(0x10000000), - }, - [2] = { - .type = CAP_TYPE_MAP | CAP_RTYPE_VIRTMEM, - .access = CAP_MAP_READ | CAP_MAP_WRITE - | CAP_MAP_EXEC | CAP_MAP_UNMAP, - .start = __pfn(0x20000000), - .end = __pfn(0x30000000), - .size = __pfn(0x10000000), - }, - [3] = { - .type = CAP_TYPE_MAP | CAP_RTYPE_VIRTMEM, - .access = CAP_MAP_READ | CAP_MAP_WRITE - | CAP_MAP_EXEC | CAP_MAP_UNMAP - | CAP_MAP_UTCB, - .start = __pfn(0xF8000000), - .end = __pfn(0xF9000000), - .size = __pfn(0x1000000), - }, - - [4] = { - .type = CAP_TYPE_MAP | CAP_RTYPE_PHYSMEM, - .access = CAP_MAP_CACHED | CAP_MAP_UNCACHED - | CAP_MAP_READ | CAP_MAP_WRITE - | CAP_MAP_EXEC | CAP_MAP_UNMAP, - .start = __pfn(CONFIG_CONT0_PHYS_START), - .end = __pfn(CONFIG_CONT0_PHYS_END), /* 16 MB for all posix services */ - }, - [5] = { - .type = CAP_TYPE_IPC | CAP_RTYPE_CONTAINER, - .access = CAP_IPC_SEND | CAP_IPC_RECV - | CAP_IPC_FULL | CAP_IPC_SHORT - | CAP_IPC_EXTENDED, - .start = 0, .end = 0, .size = 0, - }, - [6] = { - .type = CAP_TYPE_TCTRL | CAP_RTYPE_CONTAINER, - .access = CAP_TCTRL_CREATE | CAP_TCTRL_DESTROY - | CAP_TCTRL_SUSPEND | CAP_TCTRL_RESUME - | CAP_TCTRL_RECYCLE, - .start = 0, .end = 0, .size = 0, - }, - [7] = { - .type = CAP_TYPE_EXREGS | CAP_RTYPE_CONTAINER, - .access = CAP_EXREGS_RW_PAGER - | CAP_EXREGS_RW_UTCB | CAP_EXREGS_RW_SP - | CAP_EXREGS_RW_PC | CAP_EXREGS_RW_REGS, - .start = 0, .end = 0, .size = 0, - }, - [8] = { - .type = CAP_TYPE_QUANTITY - | CAP_RTYPE_THREADPOOL, - .access = 0, .start = 0, .end = 0, - .size = 64, - }, - [9] = { - .type = CAP_TYPE_QUANTITY | CAP_RTYPE_SPACEPOOL, - .access = 0, .start = 0, .end = 0, - .size = 64, - }, - [10] = { - .type = CAP_TYPE_QUANTITY | CAP_RTYPE_CPUPOOL, - .access = 0, .start = 0, .end = 0, - .size = 50, /* Percentage */ - }, - [11] = { - .type = CAP_TYPE_QUANTITY | CAP_RTYPE_MUTEXPOOL, - .access = 0, .start = 0, .end = 0, - .size = 100, - }, - [12] = { - /* For pmd accounting */ - .type = CAP_TYPE_QUANTITY | CAP_RTYPE_MAPPOOL, - .access = 0, .start = 0, .end = 0, - /* Function of mem regions, nthreads etc. */ - .size = (64 * 30 + 100), - }, - [13] = { - /* For cap spliting, creating, etc. */ - .type = CAP_TYPE_QUANTITY | CAP_RTYPE_CAPPOOL, - .access = 0, .start = 0, .end = 0, - /* This may be existing caps X 2 etc. */ - .size = 30, - }, - }, - }, - }, - }, -}; - - int container_init(struct container *c) { /* Allocate new container id */