From d826de2eeac60a97f9941d79b0f688165abcfba1 Mon Sep 17 00:00:00 2001 From: Bahadir Balban Date: Sat, 21 Nov 2009 15:00:42 +0200 Subject: [PATCH] Initial work to introduce device types and device capabilities --- include/l4/generic/cap-types.h | 34 ++++++++++++++++----------------- include/l4/generic/capability.h | 4 ++-- src/generic/resource.c | 9 ++++++--- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/include/l4/generic/cap-types.h b/include/l4/generic/cap-types.h index 0afad80..5fb02dc 100644 --- a/include/l4/generic/cap-types.h +++ b/include/l4/generic/cap-types.h @@ -40,6 +40,16 @@ {(c)->type &= ~CAP_RTYPE_MASK; \ (c)->type |= CAP_RTYPE_MASK & rtype;} +/* + * User-defined device-types + * (Kept in the user field) + */ +#define CAP_DEVTYPE_TIMER 1 +#define CAP_DEVTYPE_UART 2 +#define CAP_DEVTYPE_CLCD 3 +#define CAP_DEVTYPE_OTHER 0xF +#define CAP_DEVTYPE_MASK 0xF + /* * Access permissions */ @@ -71,23 +81,13 @@ #define CAP_EXREGS_RW_CPUTIME (1 << 6) /* Map capability */ - -/* Shift values */ -#define CAP_MAP_READ_BIT 0 -#define CAP_MAP_WRITE_BIT 1 -#define CAP_MAP_EXEC_BIT 2 -#define CAP_MAP_CACHED_BIT 3 -#define CAP_MAP_UNCACHED_BIT 4 -#define CAP_MAP_UNMAP_BIT 5 -#define CAP_MAP_UTCB_BIT 6 - -#define CAP_MAP_READ (1 << CAP_MAP_READ_BIT) -#define CAP_MAP_WRITE (1 << CAP_MAP_WRITE_BIT) -#define CAP_MAP_EXEC (1 << CAP_MAP_EXEC_BIT) -#define CAP_MAP_CACHED (1 << CAP_MAP_CACHED_BIT) -#define CAP_MAP_UNCACHED (1 << CAP_MAP_UNCACHED_BIT) -#define CAP_MAP_UNMAP (1 << CAP_MAP_UNMAP_BIT) -#define CAP_MAP_UTCB (1 << CAP_MAP_UTCB_BIT) +#define CAP_MAP_READ (1 << 0) +#define CAP_MAP_WRITE (1 << 1) +#define CAP_MAP_EXEC (1 << 2) +#define CAP_MAP_CACHED (1 << 3) +#define CAP_MAP_UNCACHED (1 << 4) +#define CAP_MAP_UNMAP (1 << 5) +#define CAP_MAP_UTCB (1 << 6) /* Ipc capability */ #define CAP_IPC_SEND (1 << 0) diff --git a/include/l4/generic/capability.h b/include/l4/generic/capability.h index 1558a74..f17f543 100644 --- a/include/l4/generic/capability.h +++ b/include/l4/generic/capability.h @@ -71,8 +71,8 @@ struct capability { unsigned long end; /* Resource end value */ unsigned long size; /* Resource size */ - /* Used amount on resource */ - unsigned long used; + /* Used amount on resource _or_ user-defined attributes */ + unsigned long user; }; struct cap_list { diff --git a/src/generic/resource.c b/src/generic/resource.c index c9826b6..35e7bed 100644 --- a/src/generic/resource.c +++ b/src/generic/resource.c @@ -261,7 +261,8 @@ int memcap_unmap_range(struct capability *cap, * by either shrinking, splitting or destroying the * intersecting capability. Similar to do_munmap() */ -int memcap_unmap(struct cap_list *used_list, struct cap_list *cap_list, +int memcap_unmap(struct cap_list *used_list, + struct cap_list *cap_list, const unsigned long unmap_start, const unsigned long unmap_end) { @@ -351,9 +352,11 @@ int free_boot_memory(struct kernel_resources *kres) list_foreach_struct(c, &kres->containers.list, list) c->pager = 0; - printk("%s: Freed %lu KB init memory, of which %lu KB was used.\n", + printk("%s: Freed %lu KB init memory, " + "of which %lu KB was used.\n", __KERNELNAME__, init_pfns * 4, - (init_pfns - __pfn(page_align_up(bootmem_free_pages()))) * 4); + (init_pfns - + __pfn(page_align_up(bootmem_free_pages()))) * 4); return 0; }