diff options
author | marcus <marcus> | 2005-02-10 04:08:23 +0000 |
---|---|---|
committer | marcus <marcus> | 2005-02-10 04:08:23 +0000 |
commit | 61a9c9ef30d2641adf3e9bff50a6145f55355bd5 (patch) | |
tree | 1b5800845bcaedc0d2440529e3d0ab256a919c8e /libl4 | |
parent | b7b4744f46990bf2299a994b51d9364ce334486f (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/ChangeLog | 46 | ||||
-rw-r--r-- | libl4/l4/compat/kip.h | 66 | ||||
-rw-r--r-- | libl4/l4/gnu/kip.h | 6 | ||||
-rw-r--r-- | libl4/l4/kip.h | 63 |
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; } |