summaryrefslogtreecommitdiff
path: root/libl4
diff options
context:
space:
mode:
authormarcus <marcus>2005-02-10 04:08:23 +0000
committermarcus <marcus>2005-02-10 04:08:23 +0000
commit61a9c9ef30d2641adf3e9bff50a6145f55355bd5 (patch)
tree1b5800845bcaedc0d2440529e3d0ab256a919c8e /libl4
parentb7b4744f46990bf2299a994b51d9364ce334486f (diff)
2005-02-10 Marcus Brinkmann <marcus@gnu.org>
* l4/kip.h (_L4_proc_desc): Fix parenthesis to suppress wrong pointer arithmetic. (__L4_page_info_t): Add a new interpretation of the bit-field where all individual access rights are grouped together in a member rwx. (_L4_page_rights): Return only the access rights. _L4_API_VERSION_2, _L4_API_VERSION_X0, _L4_API_SUBVERSION_X0, _L4_API_VERSION_X1, _L4_API_SUBVERSION_X1, _L4_API_VERSION_X2, _L4_API_VERSION_4): New macros. (L4_API_FLAGS_LITTLE_ENDIAN): Rename to ... (_L4_API_FLAGS_LITTLE_ENDIAN): ... this. (L4_API_FLAGS_BIG_ENDIAN): Rename to ... (_L4_API_FLAGS_BIG_ENDIAN): ... this. (L4_API_FLAGS_WORDSIZE_32): Rename to ... (_L4_API_FLAGS_WORDSIZE_32): ... this. (L4_API_FLAGS_WORDSIZE_64): Rename to ... (_L4_API_FLAGS_WORDSIZE_64): ... this. (_L4_KERNEL_ID_L4_486, _L4_KERNEL_SUBID_L4_486, _L4_KERNEL_ID_L4_PENTIUM, _L4_KERNEL_SUBID_L4_PENTIUM, _L4_KERNEL_ID_L4_X86, _L4_KERNEL_SUBID_L4_X86, _L4_KERNEL_ID_L4_MIPS, _L4_KERNEL_SUBID_L4_MIPS, _L4_KERNEL_ID_L4_ALPHA, _L4_KERNEL_SUBID_L4_ALPHA, _L4_KERNEL_ID_FIASCO, _L4_KERNEL_SUBID_FIASCO, _L4_KERNEL_ID_L4KA_HAZELNUT, _L4_KERNEL_SUBID_L4KA_HAZELNUT, _L4_KERNEL_ID_L4KA_PISTACHIO, _L4_KERNEL_SUBID_L4KA_PISTACHIO, _L4_KERNEL_ID_L4KA_STRAWBERRY, _L4_KERNEL_SUBID_L4KA_STRAWBERRY): New macros. (_L4_KERNEL_SUPPLIER_GMD, _L4_KERNEL_SUPPLIER_IBM, _L4_KERNEL_SUPPLIER_UNSW, _L4_KERNEL_SUPPLIER_TUD, _L4_KERNEL_SUPPLIER_UKA): New macros. * l4/compat/kip.h (L4_APIVERSION_2, L4_APIVERSION_X0, L4_APISUBVERSION_X0, L4_APIVERSION_X1, L4_APISUBVERSION_X1, L4_APIVERSION_X2, L4_APISUBVERSION_X2, L4_APIVERSION_4, L4_APIFLAG_LE, L4_APIFLAG_BE, L4_APIFLAG_32BIT, L4_APIFLAG_64BIT, L4_KID_L4_486, L4_KID_L4_PENTIUM, L4_KID_L4_X86, L4_KID_L4_MIPS, L4_KID_L4_ALPHA, L4_KID_FIASCO, L4_KID_L4KA_X86, L4_KID_L4KA_ARM, L4_KID_L4KA_HAZELNUT, L4_KID_L4KA_PISTACHIO, L4_KID_L4KA_STRAWBERRY, _L4_KERNEL_SUPPLIER, L4_SUPL_GMD, L4_SUPL_IBM, L4_SUPL_UNSW, L4_SUPL_TUD, L4_SUPL_UKA): New macros. * l4/gnu/kip.h (L4_KERNEL_SUPPLIER_GMD, L4_KERNEL_SUPPLIER_IBM, L4_KERNEL_SUPPLIER_UNSW, L4_KERNEL_SUPPLIER_TUD, L4_KERNEL_SUPPLIER_UKA): New macros.
Diffstat (limited to 'libl4')
-rw-r--r--libl4/ChangeLog46
-rw-r--r--libl4/l4/compat/kip.h66
-rw-r--r--libl4/l4/gnu/kip.h6
-rw-r--r--libl4/l4/kip.h63
4 files changed, 172 insertions, 9 deletions
diff --git a/libl4/ChangeLog b/libl4/ChangeLog
index b053c6f..effe683 100644
--- a/libl4/ChangeLog
+++ b/libl4/ChangeLog
@@ -1,3 +1,49 @@
+2005-02-10 Marcus Brinkmann <marcus@gnu.org>
+
+ * l4/kip.h (_L4_proc_desc): Fix parenthesis to suppress wrong
+ pointer arithmetic.
+ (__L4_page_info_t): Add a new interpretation of the bit-field
+ where all individual access rights are grouped together in a
+ member rwx.
+ (_L4_page_rights): Return only the access rights.
+ _L4_API_VERSION_2, _L4_API_VERSION_X0, _L4_API_SUBVERSION_X0,
+ _L4_API_VERSION_X1, _L4_API_SUBVERSION_X1, _L4_API_VERSION_X2,
+ _L4_API_VERSION_4): New macros.
+ (L4_API_FLAGS_LITTLE_ENDIAN): Rename to ...
+ (_L4_API_FLAGS_LITTLE_ENDIAN): ... this.
+ (L4_API_FLAGS_BIG_ENDIAN): Rename to ...
+ (_L4_API_FLAGS_BIG_ENDIAN): ... this.
+ (L4_API_FLAGS_WORDSIZE_32): Rename to ...
+ (_L4_API_FLAGS_WORDSIZE_32): ... this.
+ (L4_API_FLAGS_WORDSIZE_64): Rename to ...
+ (_L4_API_FLAGS_WORDSIZE_64): ... this.
+ (_L4_KERNEL_ID_L4_486, _L4_KERNEL_SUBID_L4_486,
+ _L4_KERNEL_ID_L4_PENTIUM, _L4_KERNEL_SUBID_L4_PENTIUM,
+ _L4_KERNEL_ID_L4_X86, _L4_KERNEL_SUBID_L4_X86,
+ _L4_KERNEL_ID_L4_MIPS, _L4_KERNEL_SUBID_L4_MIPS,
+ _L4_KERNEL_ID_L4_ALPHA, _L4_KERNEL_SUBID_L4_ALPHA,
+ _L4_KERNEL_ID_FIASCO, _L4_KERNEL_SUBID_FIASCO,
+ _L4_KERNEL_ID_L4KA_HAZELNUT, _L4_KERNEL_SUBID_L4KA_HAZELNUT,
+ _L4_KERNEL_ID_L4KA_PISTACHIO, _L4_KERNEL_SUBID_L4KA_PISTACHIO,
+ _L4_KERNEL_ID_L4KA_STRAWBERRY, _L4_KERNEL_SUBID_L4KA_STRAWBERRY):
+ New macros.
+ (_L4_KERNEL_SUPPLIER_GMD, _L4_KERNEL_SUPPLIER_IBM,
+ _L4_KERNEL_SUPPLIER_UNSW, _L4_KERNEL_SUPPLIER_TUD,
+ _L4_KERNEL_SUPPLIER_UKA): New macros.
+ * l4/compat/kip.h (L4_APIVERSION_2, L4_APIVERSION_X0,
+ L4_APISUBVERSION_X0, L4_APIVERSION_X1, L4_APISUBVERSION_X1,
+ L4_APIVERSION_X2, L4_APISUBVERSION_X2, L4_APIVERSION_4,
+ L4_APIFLAG_LE, L4_APIFLAG_BE, L4_APIFLAG_32BIT,
+ L4_APIFLAG_64BIT, L4_KID_L4_486, L4_KID_L4_PENTIUM,
+ L4_KID_L4_X86, L4_KID_L4_MIPS, L4_KID_L4_ALPHA, L4_KID_FIASCO,
+ L4_KID_L4KA_X86, L4_KID_L4KA_ARM, L4_KID_L4KA_HAZELNUT,
+ L4_KID_L4KA_PISTACHIO, L4_KID_L4KA_STRAWBERRY,
+ _L4_KERNEL_SUPPLIER, L4_SUPL_GMD, L4_SUPL_IBM, L4_SUPL_UNSW,
+ L4_SUPL_TUD, L4_SUPL_UKA): New macros.
+ * l4/gnu/kip.h (L4_KERNEL_SUPPLIER_GMD, L4_KERNEL_SUPPLIER_IBM,
+ L4_KERNEL_SUPPLIER_UNSW, L4_KERNEL_SUPPLIER_TUD,
+ L4_KERNEL_SUPPLIER_UKA): New macros.
+
2005-02-09 Marcus Brinkmann <marcus@gnu.org>
* tests/Makefile.am: New file.
diff --git a/libl4/l4/compat/kip.h b/libl4/l4/compat/kip.h
index c91e3c2..9bb26d9 100644
--- a/libl4/l4/compat/kip.h
+++ b/libl4/l4/compat/kip.h
@@ -44,6 +44,7 @@ typedef struct
L4_Word_t raw[2];
} L4_MemoryDesc_t;
+
typedef struct
{
L4_Word_t raw[2];
@@ -67,6 +68,17 @@ L4_GetKernelInterface (void)
}
+#define L4_APIVERSION_2 _L4_API_VERSION_2
+#define L4_APIVERSION_X0 _L4_API_VERSION_X0
+#define L4_APISUBVERSION_X0 _L4_API_SUBVERSION_X0
+#define L4_APIVERSION_X1 _L4_API_VERSION_X1
+#define L4_APISUBVERSION_X1 _L4_API_SUBVERSION_X1
+#define L4_APIVERSION_X2 _L4_API_VERSION_X2
+/* FIXME: The official libl4 incorrectly(?) defines this. */
+#define L4_APISUBVERSION_X2 (0x82)
+/* FIXME: The official libl4 lacks this one. */
+#define L4_APIVERSION_4 _L4_API_VERSION_4
+
/* Returns the API version. */
static inline L4_Word_t
_L4_attribute_always_inline
@@ -82,6 +94,13 @@ L4_ApiVersion (void)
}
+/* Values for API flags field. */
+#define L4_APIFLAG_LE _L4_API_FLAGS_LITTLE_ENDIAN
+#define L4_APIFLAG_BE _L4_API_FLAGS_BIG_ENDIAN
+#define L4_APIFLAG_32BIT _L4_API_FLAGS_WORDSIZE_32
+#define L4_APIFLAG_64BIT _L4_API_FLAGS_WORDSIZE_64
+
+
/* Returns the API flags. */
static inline L4_Word_t
_L4_attribute_always_inline
@@ -97,6 +116,34 @@ L4_ApiFlags (void)
}
+/* FIXME: The official interface defines them as ((id << 16) + subid)
+ but that does not make any sense. */
+#define L4_KID_L4_486 \
+ ((_L4_KERNEL_ID_L4_486 << 8) + _L4_KERNEL_SUBID_L4_486)
+#define L4_KID_L4_PENTIUM \
+ ((_L4_KERNEL_ID_L4_PENTIUM << 8) + _L4_KERNEL_SUBID_L4_PENTIUM)
+#define L4_KID_L4_X86 \
+ ((_L4_KERNEL_ID_L4_X86 << 8) + _L4_KERNEL_SUBID_L4_X86)
+#define L4_KID_L4_MIPS \
+ ((_L4_KERNEL_ID_L4_MIPS << 8) + _L4_KERNEL_SUBID_L4_MIPS)
+#define L4_KID_L4_ALPHA \
+ ((_L4_KERNEL_ID_L4_ALPHA << 8) + _L4_KERNEL_SUBID_L4_ALPHA)
+#define L4_KID_FIASCO \
+ ((_L4_KERNEL_ID_FIASCO << 8) + _L4_KERNEL_SUBID_FIASCO)
+/* FIXME: These are even more wrong. The names are not correct. We
+ provide corrected ones in addition to the buggy ones. */
+#define L4_KID_L4KA_X86 \
+ ((_L4_KERNEL_ID_L4KA_HAZELNUT << 8) + _L4_KERNEL_SUBID_L4KA_HAZELNUT)
+#define L4_KID_L4KA_ARM \
+ ((_L4_KERNEL_ID_L4KA_PISTACHIO << 8) + _L4_KERNEL_SUBID_L4KA_PISTACHIO)
+#define L4_KID_L4KA_HAZELNUT \
+ ((_L4_KERNEL_ID_L4KA_HAZELNUT << 8) + _L4_KERNEL_SUBID_L4KA_HAZELNUT)
+#define L4_KID_L4KA_PISTACHIO \
+ ((_L4_KERNEL_ID_L4KA_PISTACHIO << 8) + _L4_KERNEL_SUBID_L4KA_PISTACHIO)
+#define L4_KID_L4KA_STRAWBERRY \
+ ((_L4_KERNEL_ID_L4KA_STRAWBERRY << 8) + _L4_KERNEL_SUBID_L4KA_STRAWBERRY)
+
+
/* Returns the kernel ID. */
static inline L4_Word_t
_L4_attribute_always_inline
@@ -133,6 +180,25 @@ L4_KernelVersion (void *kip)
}
+/* Values for the kernel supplier field. */
+#if _L4_BYTE_ORDER == _L4_BIG_ENDIAN
+#define _L4_KERNEL_SUPPLIER(x) \
+ ((((char[])x)[0] << 24) | (((char[])x)[1] << 16) \
+ | (((char[])x)[2] << 8) | (((char[])x)[3]))
+#else
+#define _L4_KERNEL_SUPPLIER(x) \
+ ((((char[])x)[3] << 24) | (((char[])x)[2] << 16) \
+ | (((char[])x)[1] << 8) | (((char[])x)[0]))
+#endif
+
+#define L4_SUPL_GMD _L4_KERNEL_SUPPLIER (_L4_KERNEL_SUPPLIER_GMD)
+#define L4_SUPL_IBM _L4_KERNEL_SUPPLIER (_L4_KERNEL_SUPPLIER_IBM)
+#define L4_SUPL_UNSW _L4_KERNEL_SUPPLIER (_L4_KERNEL_SUPPLIER_UNSW)
+/* FIXME: This one is missing in the official libl4. We add it. */
+#define L4_SUPL_TUD _L4_KERNEL_SUPPLIER (_L4_KERNEL_SUPPLIER_TUD)
+#define L4_SUPL_UKA _L4_KERNEL_SUPPLIER (_L4_KERNEL_SUPPLIER_UKA)
+
+
/* Returns the kernel supplier. */
static inline L4_Word_t
_L4_attribute_always_inline
diff --git a/libl4/l4/gnu/kip.h b/libl4/l4/gnu/kip.h
index 3339cc9..c5ea4b1 100644
--- a/libl4/l4/gnu/kip.h
+++ b/libl4/l4/gnu/kip.h
@@ -350,6 +350,12 @@ l4_kernel_version (l4_word_t *ver, l4_word_t *subver, l4_word_t *subsubver)
}
+#define L4_KERNEL_SUPPLIER_GMD _L4_KERNEL_SUPPLIER_GMD
+#define L4_KERNEL_SUPPLIER_IBM _L4_KERNEL_SUPPLIER_IBM
+#define L4_KERNEL_SUPPLIER_UNSW _L4_KERNEL_SUPPLIER_UNSW
+#define L4_KERNEL_SUPPLIER_TUD _L4_KERNEL_SUPPLIER_TUD
+#define L4_KERNEL_SUPPLIER_UKA _L4_KERNEL_SUPPLIER_UKA
+
static inline char *
_L4_attribute_always_inline
l4_kernel_supplier_from (l4_kip_t kip)
diff --git a/libl4/l4/kip.h b/libl4/l4/kip.h
index 5fd77c8..912fa02 100644
--- a/libl4/l4/kip.h
+++ b/libl4/l4/kip.h
@@ -30,6 +30,15 @@
/* The API version field. */
+
+#define _L4_API_VERSION_2 (0x02)
+#define _L4_API_VERSION_X0 (0x83)
+#define _L4_API_SUBVERSION_X0 (0x80)
+#define _L4_API_VERSION_X1 (0x83)
+#define _L4_API_SUBVERSION_X1 (0x81)
+#define _L4_API_VERSION_X2 (0x84)
+#define _L4_API_VERSION_4 (0x04)
+
typedef _L4_RAW (_L4_api_version_t, _L4_STRUCT1 ({
_L4_BITFIELD4
(_L4_word_t,
@@ -45,11 +54,12 @@ typedef _L4_RAW (_L4_api_version_t, _L4_STRUCT1 ({
})) __L4_api_version_t;
-/* The API flags field. */
-#define L4_API_FLAGS_LITTLE_ENDIAN (0x0)
-#define L4_API_FLAGS_BIG_ENDIAN (0x1)
-#define L4_API_FLAGS_WORDSIZE_32 (0x0)
-#define L4_API_FLAGS_WORDSIZE_64 (0x1)
+/* The API flag fields. */
+
+#define _L4_API_FLAGS_LITTLE_ENDIAN (0x0)
+#define _L4_API_FLAGS_BIG_ENDIAN (0x1)
+#define _L4_API_FLAGS_WORDSIZE_32 (0x0)
+#define _L4_API_FLAGS_WORDSIZE_64 (0x1)
typedef _L4_RAW (_L4_api_flags_t, _L4_STRUCT1 ({
_L4_BITFIELD3
@@ -65,6 +75,27 @@ typedef _L4_RAW (_L4_api_flags_t, _L4_STRUCT1 ({
/* The kernel ID field. */
+
+#define _L4_KERNEL_ID_L4_486 (0)
+#define _L4_KERNEL_SUBID_L4_486 (1)
+#define _L4_KERNEL_ID_L4_PENTIUM (0)
+#define _L4_KERNEL_SUBID_L4_PENTIUM (2)
+#define _L4_KERNEL_ID_L4_X86 (0)
+#define _L4_KERNEL_SUBID_L4_X86 (3)
+#define _L4_KERNEL_ID_L4_MIPS (1)
+#define _L4_KERNEL_SUBID_L4_MIPS (1)
+#define _L4_KERNEL_ID_L4_ALPHA (2)
+#define _L4_KERNEL_SUBID_L4_ALPHA (1)
+#define _L4_KERNEL_ID_FIASCO (3)
+#define _L4_KERNEL_SUBID_FIASCO (1)
+#define _L4_KERNEL_ID_L4KA_HAZELNUT (4)
+#define _L4_KERNEL_SUBID_L4KA_HAZELNUT (1)
+#define _L4_KERNEL_ID_L4KA_PISTACHIO (4)
+#define _L4_KERNEL_SUBID_L4KA_PISTACHIO (2)
+#define _L4_KERNEL_ID_L4KA_STRAWBERRY (4)
+#define _L4_KERNEL_SUBID_L4KA_STRAWBERRY (3)
+
+
typedef _L4_RAW (_L4_kernel_id_t, _L4_STRUCT1 ({
_L4_BITFIELD4
(_L4_word_t,
@@ -83,7 +114,7 @@ typedef _L4_RAW (_L4_kernel_id_t, _L4_STRUCT1 ({
/* The page rights field. */
typedef _L4_word_t _L4_page_info_t;
-typedef _L4_RAW (_L4_page_info_t, _L4_STRUCT1 ({
+typedef _L4_RAW (_L4_page_info_t, _L4_STRUCT2 ({
_L4_BITFIELD5
(_L4_word_t,
/* Execute access right can be independently set. */
@@ -100,6 +131,14 @@ typedef _L4_RAW (_L4_page_info_t, _L4_STRUCT1 ({
/* Page size of 2^(k + 10) is supported by hardware and kernel if
bit k is set. */
_L4_BITFIELD_32_64 (page_size_mask, 22, 54));
+},
+{
+ _L4_BITFIELD2
+ (_L4_word_t,
+ /* All access rights. */
+ _L4_BITFIELD (rwx, 3),
+
+ _L4_BITFIELD_32_64 (__pad2, 29, 61));
})) __L4_page_info_t;
@@ -314,6 +353,12 @@ typedef union _L4_proc_desc
typedef __L4_proc_desc_t *_L4_proc_desc_t;
+#define _L4_KERNEL_SUPPLIER_GMD { 'G', 'M', 'D', ' ' }
+#define _L4_KERNEL_SUPPLIER_IBM { 'I', 'B', 'M', ' ' }
+#define _L4_KERNEL_SUPPLIER_UNSW { 'U', 'N', 'S', 'W' }
+#define _L4_KERNEL_SUPPLIER_TUD { 'T', 'U', 'D', ' ' }
+#define _L4_KERNEL_SUPPLIER_UKA { 'U', 'K', 'a', ' ' }
+
/* The kernel description fields. */
typedef struct
{
@@ -435,8 +480,8 @@ _L4_proc_desc (_L4_kip_t kip, _L4_word_t num)
if (num >= _L4_num_processors (kip))
return (_L4_proc_desc_t) 0;
- return (_L4_proc_desc_t) (((_L4_word_t) kip) + kip->proc_desc_ptr)
- + num * (1 << kip->processor_info.log2_size);
+ return (_L4_proc_desc_t) (((_L4_word_t) kip) + kip->proc_desc_ptr
+ + num * (1 << kip->processor_info.log2_size));
}
@@ -472,7 +517,7 @@ static inline _L4_word_t
_L4_attribute_always_inline
_L4_page_rights (_L4_kip_t kip)
{
- return kip->page_info.raw;
+ return kip->page_info.rwx;
}