Moved capability struct to api/capability.h for userspace coherence

Userspace often breaks as we change the capability structure. Now
structure is under api/ so userspace can also update with changes.
This commit is contained in:
Bahadir Balban
2009-11-22 15:08:29 +02:00
parent f3f581f2e7
commit 19b4c6c4c1
5 changed files with 778 additions and 81 deletions

View File

@@ -0,0 +1,709 @@
#
# Automatically generated, don't edit
#
# Generated on: bahadir-laptop
# At: Sun, 22 Nov 2009 12:50:07 +0000
# Linux version 2.6.24-22-generic (buildd@vernadsky) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #1 SMP Mon Nov 24 18:32:42 UTC 2008
#
# Codezero Microkernel Configurator
#
#
# Main architecture
#
CONFIG_ARCH_ARM=y
#
# ARM Architecture Configuration
#
#
# ARM Architecture Family
#
CONFIG_SUBARCH_V5=y
CONFIG_SUBARCH_V6=n
CONFIG_SUBARCH_V7=n
#
# ARM CPU type
#
#
# ARM Processor Type
#
CONFIG_CPU_ARM926=y
#
# ARM Platform Type
#
#
# ARM Platform Type
#
CONFIG_PLATFORM_EB=n
CONFIG_PLATFORM_AB926=n
CONFIG_PLATFORM_PB926=y
#
# Toolchain Prefix
#
CONFIG_TOOLCHAIN_KERNEL="arm-none-eabi-"
CONFIG_TOOLCHAIN_USER="arm-none-linux-gnueabi-"
CONFIG_CONTAINERS=4
#
# Container Setup
#
CONFIG_CAPABILITIES=y
#
# Container 0 Parameters
#
#
# Container 0 Type
#
CONFIG_CONT0_TYPE_BAREMETAL=y
CONFIG_CONT0_TYPE_POSIX=n
CONFIG_CONT0_TYPE_CUSTOM=n
CONFIG_CONT0_TYPE_LINUX=n
#
# Container 0 Options
#
CONFIG_CONT0_OPT_NAME="hello0"
#
# Baremetal Project
#
CONFIG_CONT0_BAREMETAL_PROJ0=n
CONFIG_CONT0_BAREMETAL_PROJ1=y
CONFIG_CONT0_BAREMETAL_PROJ2=n
CONFIG_CONT0_BAREMETAL_PROJ3=n
#
# Container 0 Default Pager Parameters
#
CONFIG_CONT0_PAGER_LMA=0x40000
CONFIG_CONT0_PAGER_VMA=0x10000000
#
# Container 0 Physical Memory Regions (Capabilities)
#
CONFIG_CONT0_PHYSMEM_REGIONS=1
CONFIG_CONT0_PHYS0_START=0x40000
CONFIG_CONT0_PHYS0_END=0x100000
#
# Container 0 Virtual Memory Regions (Capabilities)
#
CONFIG_CONT0_VIRTMEM_REGIONS=1
CONFIG_CONT0_VIRT0_START=0x10000000
CONFIG_CONT0_VIRT0_END=0x20000000
#
# Container 0 Capability List
#
#
# Container 0 Thread Pool Capability
#
CONFIG_CONT0_CAP_THREADPOOL_USE=y
CONFIG_CONT0_CAP_THREADPOOL_SIZE=64
#
# Container 0 Space Pool Capability
#
CONFIG_CONT0_CAP_SPACEPOOL_USE=y
CONFIG_CONT0_CAP_SPACEPOOL_SIZE=64
#
# Container 0 Mutex Pool Capability
#
CONFIG_CONT0_CAP_MUTEXPOOL_USE=y
CONFIG_CONT0_CAP_MUTEXPOOL_SIZE=100
#
# Container 0 Map Pool Capability
#
CONFIG_CONT0_CAP_MAPPOOL_USE=y
CONFIG_CONT0_CAP_MAPPOOL_SIZE=800
#
# Container 0 Capability Pool Capability
#
CONFIG_CONT0_CAP_CAPPOOL_USE=y
CONFIG_CONT0_CAP_CAPPOOL_SIZE=32
#
# Container 0 Thread Control Capability
#
CONFIG_CONT0_CAP_TCTRL_USE=y
CONFIG_CONT0_CAP_TCTRL_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT0_CAP_TCTRL_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 0 Exchange Registers Capability
#
CONFIG_CONT0_CAP_EXREGS_USE=y
CONFIG_CONT0_CAP_EXREGS_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT0_CAP_EXREGS_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 0 IPC Capability
#
CONFIG_CONT0_CAP_IPC_USE=y
CONFIG_CONT0_CAP_IPC_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT0_CAP_IPC_TARGET_CURRENT_PAGER_SPACE=n
CONFIG_CONT0_CAP_IPC_TARGET_ANOTHER_CONTAINER=n
CONFIG_CONT0_CAP_IPC_TARGET_ANOTHER_PAGER=n
#
# Container 0 Capability Control Capability
#
CONFIG_CONT0_CAP_CAPCTRL_USE=y
CONFIG_CONT0_CAP_CAPCTRL_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT0_CAP_CAPCTRL_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 0 Userspace Mutex Control Capability
#
CONFIG_CONT0_CAP_UMUTEX_USE=y
CONFIG_CONT0_CAP_UMUTEX_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT0_CAP_UMUTEX_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 0 Custom Capability 0 Parameters
#
CONFIG_CONT0_CAP_CUSTOM0_USE=n
#
# Container 0 Custom Capability 1 Parameters
#
CONFIG_CONT0_CAP_CUSTOM1_USE=n
#
# Container 0 Custom Capability 2 Parameters
#
CONFIG_CONT0_CAP_CUSTOM2_USE=n
#
# Container 0 Custom Capability 3 Parameters
#
CONFIG_CONT0_CAP_CUSTOM3_USE=n
#
# Container 1 Parameters
#
#
# Container 1 Type
#
CONFIG_CONT1_TYPE_BAREMETAL=y
CONFIG_CONT1_TYPE_POSIX=n
CONFIG_CONT1_TYPE_CUSTOM=n
CONFIG_CONT1_TYPE_LINUX=n
#
# Container 1 Options
#
CONFIG_CONT1_OPT_NAME="hello1"
#
# Baremetal Project
#
CONFIG_CONT1_BAREMETAL_PROJ0=n
CONFIG_CONT1_BAREMETAL_PROJ1=y
CONFIG_CONT1_BAREMETAL_PROJ2=n
CONFIG_CONT1_BAREMETAL_PROJ3=n
#
# Container 1 Default Pager Parameters
#
CONFIG_CONT1_PAGER_LMA=0x100000
CONFIG_CONT1_PAGER_VMA=0x20000000
#
# Container 1 Physical Memory Regions (Capabilities)
#
CONFIG_CONT1_PHYSMEM_REGIONS=1
CONFIG_CONT1_PHYS0_START=0x100000
CONFIG_CONT1_PHYS0_END=0x200000
#
# Container 1 Virtual Memory Regions (Capabilities)
#
CONFIG_CONT1_VIRTMEM_REGIONS=1
CONFIG_CONT1_VIRT0_START=0x20000000
CONFIG_CONT1_VIRT0_END=0x30000000
#
# Container 1 Capability List
#
#
# Container 1 Thread Pool Capability
#
CONFIG_CONT1_CAP_THREADPOOL_USE=y
CONFIG_CONT1_CAP_THREADPOOL_SIZE=64
#
# Container 1 Space Pool Capability
#
CONFIG_CONT1_CAP_SPACEPOOL_USE=y
CONFIG_CONT1_CAP_SPACEPOOL_SIZE=64
#
# Container 1 Mutex Pool Capability
#
CONFIG_CONT1_CAP_MUTEXPOOL_USE=y
CONFIG_CONT1_CAP_MUTEXPOOL_SIZE=100
#
# Container 1 Map Pool Capability
#
CONFIG_CONT1_CAP_MAPPOOL_USE=y
CONFIG_CONT1_CAP_MAPPOOL_SIZE=800
#
# Container 1 Capability Pool Capability
#
CONFIG_CONT1_CAP_CAPPOOL_USE=y
CONFIG_CONT1_CAP_CAPPOOL_SIZE=32
#
# Container 1 Thread Control Capability
#
CONFIG_CONT1_CAP_TCTRL_USE=y
CONFIG_CONT1_CAP_TCTRL_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT1_CAP_TCTRL_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 1 Exchange Registers Capability
#
CONFIG_CONT1_CAP_EXREGS_USE=y
CONFIG_CONT1_CAP_EXREGS_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT1_CAP_EXREGS_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 1 IPC Capability
#
CONFIG_CONT1_CAP_IPC_USE=y
CONFIG_CONT1_CAP_IPC_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT1_CAP_IPC_TARGET_CURRENT_PAGER_SPACE=n
CONFIG_CONT1_CAP_IPC_TARGET_ANOTHER_CONTAINER=n
CONFIG_CONT1_CAP_IPC_TARGET_ANOTHER_PAGER=n
#
# Container 1 Capability Control Capability
#
CONFIG_CONT1_CAP_CAPCTRL_USE=y
CONFIG_CONT1_CAP_CAPCTRL_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT1_CAP_CAPCTRL_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 1 Userspace Mutex Control Capability
#
CONFIG_CONT1_CAP_UMUTEX_USE=y
CONFIG_CONT1_CAP_UMUTEX_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT1_CAP_UMUTEX_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 1 Custom Capability 0 Parameters
#
CONFIG_CONT1_CAP_CUSTOM0_USE=n
#
# Container 1 Custom Capability 1 Parameters
#
CONFIG_CONT1_CAP_CUSTOM1_USE=n
#
# Container 1 Custom Capability 2 Parameters
#
CONFIG_CONT1_CAP_CUSTOM2_USE=n
#
# Container 1 Custom Capability 3 Parameters
#
CONFIG_CONT1_CAP_CUSTOM3_USE=n
#
# Container 2 Parameters
#
#
# Container 2 Type
#
CONFIG_CONT2_TYPE_BAREMETAL=y
CONFIG_CONT2_TYPE_POSIX=n
CONFIG_CONT2_TYPE_CUSTOM=n
CONFIG_CONT2_TYPE_LINUX=n
#
# Container 2 Options
#
CONFIG_CONT2_OPT_NAME="hello2"
#
# Baremetal Project
#
CONFIG_CONT2_BAREMETAL_PROJ0=n
CONFIG_CONT2_BAREMETAL_PROJ1=y
CONFIG_CONT2_BAREMETAL_PROJ2=n
CONFIG_CONT2_BAREMETAL_PROJ3=n
#
# Container 2 Default Pager Parameters
#
CONFIG_CONT2_PAGER_LMA=0x200000
CONFIG_CONT2_PAGER_VMA=0x30000000
#
# Container 2 Physical Memory Regions (Capabilities)
#
CONFIG_CONT2_PHYSMEM_REGIONS=1
CONFIG_CONT2_PHYS0_START=0x200000
CONFIG_CONT2_PHYS0_END=0x300000
#
# Container 2 Virtual Memory Regions (Capabilities)
#
CONFIG_CONT2_VIRTMEM_REGIONS=1
CONFIG_CONT2_VIRT0_START=0x30000000
CONFIG_CONT2_VIRT0_END=0x40000000
#
# Container 2 Capability List
#
#
# Container 2 Thread Pool Capability
#
CONFIG_CONT2_CAP_THREADPOOL_USE=y
CONFIG_CONT2_CAP_THREADPOOL_SIZE=64
#
# Container 2 Space Pool Capability
#
CONFIG_CONT2_CAP_SPACEPOOL_USE=y
CONFIG_CONT2_CAP_SPACEPOOL_SIZE=64
#
# Container 2 Mutex Pool Capability
#
CONFIG_CONT2_CAP_MUTEXPOOL_USE=y
CONFIG_CONT2_CAP_MUTEXPOOL_SIZE=100
#
# Container 2 Map Pool Capability
#
CONFIG_CONT2_CAP_MAPPOOL_USE=y
CONFIG_CONT2_CAP_MAPPOOL_SIZE=800
#
# Container 2 Capability Pool Capability
#
CONFIG_CONT2_CAP_CAPPOOL_USE=y
CONFIG_CONT2_CAP_CAPPOOL_SIZE=32
#
# Container 2 Thread Control Capability
#
CONFIG_CONT2_CAP_TCTRL_USE=y
CONFIG_CONT2_CAP_TCTRL_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT2_CAP_TCTRL_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 2 Exchange Registers Capability
#
CONFIG_CONT2_CAP_EXREGS_USE=y
CONFIG_CONT2_CAP_EXREGS_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT2_CAP_EXREGS_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 2 IPC Capability
#
CONFIG_CONT2_CAP_IPC_USE=y
CONFIG_CONT2_CAP_IPC_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT2_CAP_IPC_TARGET_CURRENT_PAGER_SPACE=n
CONFIG_CONT2_CAP_IPC_TARGET_ANOTHER_CONTAINER=n
CONFIG_CONT2_CAP_IPC_TARGET_ANOTHER_PAGER=n
#
# Container 2 Capability Control Capability
#
CONFIG_CONT2_CAP_CAPCTRL_USE=y
CONFIG_CONT2_CAP_CAPCTRL_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT2_CAP_CAPCTRL_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 2 Userspace Mutex Control Capability
#
CONFIG_CONT2_CAP_UMUTEX_USE=y
CONFIG_CONT2_CAP_UMUTEX_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT2_CAP_UMUTEX_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 2 Custom Capability 0 Parameters
#
CONFIG_CONT2_CAP_CUSTOM0_USE=n
#
# Container 2 Custom Capability 1 Parameters
#
CONFIG_CONT2_CAP_CUSTOM1_USE=n
#
# Container 2 Custom Capability 2 Parameters
#
CONFIG_CONT2_CAP_CUSTOM2_USE=n
#
# Container 2 Custom Capability 3 Parameters
#
CONFIG_CONT2_CAP_CUSTOM3_USE=n
#
# Container 3 Parameters
#
#
# Container 3 Type
#
CONFIG_CONT3_TYPE_BAREMETAL=y
CONFIG_CONT3_TYPE_POSIX=n
CONFIG_CONT3_TYPE_CUSTOM=n
CONFIG_CONT3_TYPE_LINUX=n
#
# Container 3 Options
#
CONFIG_CONT3_OPT_NAME="hello3"
#
# Baremetal Project
#
CONFIG_CONT3_BAREMETAL_PROJ0=n
CONFIG_CONT3_BAREMETAL_PROJ1=y
CONFIG_CONT3_BAREMETAL_PROJ2=n
CONFIG_CONT3_BAREMETAL_PROJ3=n
#
# Container 3 Default Pager Parameters
#
CONFIG_CONT3_PAGER_LMA=0x300000
CONFIG_CONT3_PAGER_VMA=0x40000000
#
# Container 3 Physical Memory Regions (Capabilities)
#
CONFIG_CONT3_PHYSMEM_REGIONS=1
CONFIG_CONT3_PHYS0_START=0x300000
CONFIG_CONT3_PHYS0_END=0x400000
#
# Container 3 Virtual Memory Regions (Capabilities)
#
CONFIG_CONT3_VIRTMEM_REGIONS=1
CONFIG_CONT3_VIRT0_START=0x40000000
CONFIG_CONT3_VIRT0_END=0x50000000
#
# Container 3 Capability List
#
#
# Container 3 Thread Pool Capability
#
CONFIG_CONT3_CAP_THREADPOOL_USE=y
CONFIG_CONT3_CAP_THREADPOOL_SIZE=64
#
# Container 3 Space Pool Capability
#
CONFIG_CONT3_CAP_SPACEPOOL_USE=y
CONFIG_CONT3_CAP_SPACEPOOL_SIZE=64
#
# Container 3 Mutex Pool Capability
#
CONFIG_CONT3_CAP_MUTEXPOOL_USE=y
CONFIG_CONT3_CAP_MUTEXPOOL_SIZE=100
#
# Container 3 Map Pool Capability
#
CONFIG_CONT3_CAP_MAPPOOL_USE=y
CONFIG_CONT3_CAP_MAPPOOL_SIZE=800
#
# Container 3 Capability Pool Capability
#
CONFIG_CONT3_CAP_CAPPOOL_USE=y
CONFIG_CONT3_CAP_CAPPOOL_SIZE=32
#
# Container 3 Thread Control Capability
#
CONFIG_CONT3_CAP_TCTRL_USE=y
CONFIG_CONT3_CAP_TCTRL_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT3_CAP_TCTRL_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 3 Exchange Registers Capability
#
CONFIG_CONT3_CAP_EXREGS_USE=y
CONFIG_CONT3_CAP_EXREGS_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT3_CAP_EXREGS_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 3 IPC Capability
#
CONFIG_CONT3_CAP_IPC_USE=y
CONFIG_CONT3_CAP_IPC_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT3_CAP_IPC_TARGET_CURRENT_PAGER_SPACE=n
CONFIG_CONT3_CAP_IPC_TARGET_ANOTHER_CONTAINER=n
CONFIG_CONT3_CAP_IPC_TARGET_ANOTHER_PAGER=n
#
# Container 3 Capability Control Capability
#
CONFIG_CONT3_CAP_CAPCTRL_USE=y
CONFIG_CONT3_CAP_CAPCTRL_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT3_CAP_CAPCTRL_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 3 Userspace Mutex Control Capability
#
CONFIG_CONT3_CAP_UMUTEX_USE=y
CONFIG_CONT3_CAP_UMUTEX_TARGET_CURRENT_CONTAINER=y
CONFIG_CONT3_CAP_UMUTEX_TARGET_CURRENT_PAGER_SPACE=n
#
# Container 3 Custom Capability 0 Parameters
#
CONFIG_CONT3_CAP_CUSTOM0_USE=n
#
# Container 3 Custom Capability 1 Parameters
#
CONFIG_CONT3_CAP_CUSTOM1_USE=n
#
# Container 3 Custom Capability 2 Parameters
#
CONFIG_CONT3_CAP_CUSTOM2_USE=n
#
# Container 3 Custom Capability 3 Parameters
#
CONFIG_CONT3_CAP_CUSTOM3_USE=n
#
# Derived symbols
#
CONFIG_DRIVER_IRQ_PL190=y
CONFIG_DRIVER_TIMER_SP804=y
CONFIG_DRIVER_IRQ_GIC=n
CONFIG_DRIVER_UART_PL011=y
#
# That's all, folks!

View File

@@ -8,33 +8,13 @@
#include <l4lib/types.h> #include <l4lib/types.h>
#include <l4/lib/list.h> #include <l4/lib/list.h>
#include <l4/api/capability.h>
struct cap_list { struct cap_list {
int ncaps; int ncaps;
struct link caps; struct link caps;
}; };
struct capability {
struct link list;
/* Capability identifiers */
l4id_t capid; /* Unique capability ID */
l4id_t owner; /* Capability owner ID */
l4id_t resid; /* Targeted resource ID */
unsigned int type; /* Capability and target resource type */
/* Capability limits/permissions */
u32 access; /* Permitted operations */
/* Limits on the resource */
unsigned long start; /* Resource start value */
unsigned long end; /* Resource end value */
unsigned long size; /* Resource size */
unsigned long used; /* Resource used size */
};
static inline void cap_list_init(struct cap_list *clist) static inline void cap_list_init(struct cap_list *clist)
{ {
clist->ncaps = 0; clist->ncaps = 0;

View File

@@ -364,9 +364,12 @@ int cap_read_all()
BUG(); BUG();
} }
/* Copy them to real allocated structures */ /* Copy them to real allocated structures */
copy_boot_capabilities(ncaps); copy_boot_capabilities(ncaps);
cap_list_print(&capability_list);
memset(&cont_mem_regions, 0, sizeof(cont_mem_regions)); memset(&cont_mem_regions, 0, sizeof(cont_mem_regions));
/* Set up pointers to important capabilities */ /* Set up pointers to important capabilities */
@@ -394,7 +397,7 @@ int cap_read_all()
BUG(); BUG();
} }
if (!(cap->access & CAP_MAP_UTCB_BIT)) { if (!(cap->access & CAP_MAP_UTCB)) {
printf("FATAL: Region designated " printf("FATAL: Region designated "
"for UTCB allocation does not " "for UTCB allocation does not "
"have UTCB map permissions"); "have UTCB map permissions");

View File

@@ -6,6 +6,10 @@
#ifndef __API_CAPABILITY_H__ #ifndef __API_CAPABILITY_H__
#define __API_CAPABILITY_H__ #define __API_CAPABILITY_H__
#if defined(__KERNEL__)
#include <l4/lib/list.h>
#endif
/* Capability syscall request types */ /* Capability syscall request types */
#define CAP_CONTROL_NCAPS 0x00000000 #define CAP_CONTROL_NCAPS 0x00000000
#define CAP_CONTROL_READ 0x00000001 #define CAP_CONTROL_READ 0x00000001
@@ -30,4 +34,63 @@
#define CAP_SPLIT_ACCESS 0x00000002 #define CAP_SPLIT_ACCESS 0x00000002
#define CAP_SPLIT_RANGE 0x00000003 /* Returns -EPERM */ #define CAP_SPLIT_RANGE 0x00000003 /* Returns -EPERM */
/*
* A capability is a unique representation of security
* qualifiers on a particular resource.
*
* In this structure:
*
* The capid denotes the unique capability ID.
* The resid denotes the unique ID of targeted resource.
* The owner denotes the unique ID of the one and only capability owner. This is
* almost always a thread ID.
*
* The type field contains two types:
* - The capability type,
* - The targeted resource type.
*
* The targeted resouce type denotes what type of resource the capability is
* allowed to operate on. For example a thread, a thread group, an address space
* or a memory can be of this type.
*
* The capability type defines the general set of operations allowed on a
* particular resource. For example a capability type may be thread_control,
* exchange_registers, ipc, or map operations. A resource type may be such as a
* thread, a thread group, a virtual or physical memory region.
*
* There are also quantitative capability types. While their names denote
* quantitative objects such as memory, threads, and address spaces, these
* types actually define the quantitative operations available on those
* resources such as creation and deletion of a thread, allocation and
* deallocation of a memory region etc.
*
* The access field denotes the fine-grain operations available on a particular
* resource. The meaning of each bitfield differs according to the type of the
* capability. For example, for a capability type thread_control, the bitfields
* may mean suspend, resume, create, delete etc.
*/
struct capability {
struct link list;
/* Capability identifiers */
l4id_t capid; /* Unique capability ID */
l4id_t owner; /* Capability owner ID */
l4id_t resid; /* Targeted resource ID */
unsigned int type; /* Capability and target resource type */
/* Capability limits/permissions */
u32 access; /* Permitted operations */
/* Limits on the resource (NOTE: must never have signed type) */
unsigned long start; /* Resource start value */
unsigned long end; /* Resource end value */
unsigned long size; /* Resource size */
/* Use count of resource */
unsigned long used;
/* User-defined attributes on capability (like devtypes) */
unsigned int uattr;
};
#endif /* __API_CAPABILITY_H__ */ #endif /* __API_CAPABILITY_H__ */

View File

@@ -6,8 +6,8 @@
#ifndef __GENERIC_CAPABILITY_H__ #ifndef __GENERIC_CAPABILITY_H__
#define __GENERIC_CAPABILITY_H__ #define __GENERIC_CAPABILITY_H__
#include <l4/lib/list.h>
#include <l4/api/exregs.h> #include <l4/api/exregs.h>
#include <l4/api/capability.h>
/* /*
* Some resources that capabilities possess don't * Some resources that capabilities possess don't
@@ -19,64 +19,6 @@
*/ */
#define CAP_RESID_NONE -1 #define CAP_RESID_NONE -1
/*
* A capability is a unique representation of security
* qualifiers on a particular resource.
*
* In this structure:
*
* The capid denotes the unique capability ID.
* The resid denotes the unique ID of targeted resource.
* The owner denotes the unique ID of the one and only capability owner. This is
* almost always a thread ID.
*
* The type field contains two types:
* - The capability type,
* - The targeted resource type.
*
* The targeted resouce type denotes what type of resource the capability is
* allowed to operate on. For example a thread, a thread group, an address space
* or a memory can be of this type.
*
* The capability type defines the general set of operations allowed on a
* particular resource. For example a capability type may be thread_control,
* exchange_registers, ipc, or map operations. A resource type may be such as a
* thread, a thread group, a virtual or physical memory region.
*
* There are also quantitative capability types. While their names denote
* quantitative objects such as memory, threads, and address spaces, these
* types actually define the quantitative operations available on those
* resources such as creation and deletion of a thread, allocation and
* deallocation of a memory region etc.
*
* The access field denotes the fine-grain operations available on a particular
* resource. The meaning of each bitfield differs according to the type of the
* capability. For example, for a capability type thread_control, the bitfields
* may mean suspend, resume, create, delete etc.
*/
struct capability {
struct link list;
/* Capability identifiers */
l4id_t capid; /* Unique capability ID */
l4id_t owner; /* Capability owner ID */
l4id_t resid; /* Targeted resource ID */
unsigned int type; /* Capability and target resource type */
/* Capability limits/permissions */
u32 access; /* Permitted operations */
/* Limits on the resource (NOTE: must never have signed type) */
unsigned long start; /* Resource start value */
unsigned long end; /* Resource end value */
unsigned long size; /* Resource size */
/* Use count of resource */
unsigned long used;
/* User-defined attributes on capability (like devtypes) */
unsigned int uattr;
};
struct cap_list { struct cap_list {
int ktcb_refs; int ktcb_refs;