00001
00007
00008 #ifndef BASE_L4_TYPES_H__
00009 #define BASE_L4_TYPES_H__
00010
00011 #include <l4/sys/l4int.h>
00012 #include <l4/sys/compiler.h>
00013
00014
00015
00020 typedef union l4_quota_desc_t
00021 {
00022 l4_umword_t raw;
00023 struct
00024 {
00025 unsigned long id: 12;
00026 unsigned long amount: 16;
00027 unsigned long cmd: 4;
00028 } q;
00029 } l4_quota_desc_t;
00030
00031 enum {
00032 L4_KQUOTA_CMD_NOOP,
00033 L4_KQUOTA_CMD_SHARE,
00034 L4_KQUOTA_CMD_NEW
00035 };
00036
00037 #define L4_INVALID_KQUOTA ((l4_quota_desc_t){ .raw = 0 })
00038
00039
00045 enum l4_msgtag_protocol
00046 {
00047 L4_MSGTAG_IRQ = -1L,
00048 L4_MSGTAG_PAGE_FAULT = -2L,
00049 L4_MSGTAG_PREEMPTION = -3L,
00050 L4_MSGTAG_SYS_EXCEPTION = -4L,
00051 L4_MSGTAG_EXCEPTION = -5L,
00052 L4_MSGTAG_SIGMA0 = -6L,
00053 L4_MSGTAG_IO_PAGE_FAULT = -8L,
00054 L4_MSGTAG_CAP_FAULT = -9L,
00055 };
00056
00057
00072 typedef struct l4_msgtag_t
00073 {
00074 l4_mword_t raw;
00075 #ifdef __cplusplus
00076 long label() const { return raw >> 16; }
00077 unsigned words() const { return raw & 0x3f; }
00078 unsigned items() const { return (raw >> 6) & 0x3f; }
00079 unsigned flags() const { return raw & 0xf000; }
00080 bool is_irq() const { return label() == L4_MSGTAG_IRQ; }
00081 bool is_page_fault() const { return label() == L4_MSGTAG_PAGE_FAULT; }
00082 bool is_preepmption() const { return label() == L4_MSGTAG_PREEMPTION; }
00083 bool is_sys_exception() const { return label() == L4_MSGTAG_SYS_EXCEPTION; }
00084 bool is_exception() const { return label() == L4_MSGTAG_EXCEPTION; }
00085 bool is_sigma0() const { return label() == L4_MSGTAG_SIGMA0; }
00086 bool is_io_page_fault() const { return label() == L4_MSGTAG_IO_PAGE_FAULT; }
00087 bool is_cap_fault() const { return label() == L4_MSGTAG_CAP_FAULT; }
00088 #endif
00089 } l4_msgtag_t;
00090
00091
00092
00101 L4_INLINE l4_msgtag_t l4_msgtag(long label, unsigned words, unsigned items,
00102 unsigned flags);
00103
00108 L4_INLINE long l4_msgtag_label(l4_msgtag_t t);
00109
00114 L4_INLINE unsigned l4_msgtag_words(l4_msgtag_t t);
00115
00120 L4_INLINE unsigned l4_msgtag_items(l4_msgtag_t t);
00121
00126 L4_INLINE unsigned l4_msgtag_flags(l4_msgtag_t t);
00127
00132 L4_INLINE unsigned l4_msgtag_is_irq(l4_msgtag_t t);
00133
00138 L4_INLINE unsigned l4_msgtag_is_page_fault(l4_msgtag_t t);
00139
00144 L4_INLINE unsigned l4_msgtag_is_preemption(l4_msgtag_t t);
00145
00150 L4_INLINE unsigned l4_msgtag_is_sys_exception(l4_msgtag_t t);
00151
00156 L4_INLINE unsigned l4_msgtag_is_exception(l4_msgtag_t t);
00157
00162 L4_INLINE unsigned l4_msgtag_is_sigma0(l4_msgtag_t t);
00163
00168 L4_INLINE unsigned l4_msgtag_is_io_page_fault(l4_msgtag_t t);
00169
00174 L4_INLINE unsigned l4_msgtag_is_cap_fault(l4_msgtag_t t);
00175
00176
00177
00178
00179
00180
00181
00182
00183 L4_INLINE
00184 l4_msgtag_t l4_msgtag(long label, unsigned words, unsigned items,
00185 unsigned flags)
00186 {
00187 return (l4_msgtag_t){(label << 16) | (words & 0x3f) | ((items & 0x3f) << 6)
00188 | (flags & 0xf000)};
00189 }
00190
00191 L4_INLINE
00192 long l4_msgtag_label(l4_msgtag_t t)
00193 { return t.raw >> 16; }
00194
00195 L4_INLINE
00196 unsigned l4_msgtag_words(l4_msgtag_t t)
00197 { return t.raw & 0x3f; }
00198
00199 L4_INLINE
00200 unsigned l4_msgtag_items(l4_msgtag_t t)
00201 { return (t.raw >> 6) & 0x3f; }
00202
00203 L4_INLINE
00204 unsigned l4_msgtag_flags(l4_msgtag_t t)
00205 { return t.raw & 0xf000; }
00206
00207
00208 L4_INLINE unsigned l4_msgtag_is_irq(l4_msgtag_t t)
00209 { return l4_msgtag_label(t) == L4_MSGTAG_IRQ; }
00210
00211 L4_INLINE unsigned l4_msgtag_is_page_fault(l4_msgtag_t t)
00212 { return l4_msgtag_label(t) == L4_MSGTAG_PAGE_FAULT; }
00213
00214 L4_INLINE unsigned l4_msgtag_is_preemption(l4_msgtag_t t)
00215 { return l4_msgtag_label(t) == L4_MSGTAG_PREEMPTION; }
00216
00217 L4_INLINE unsigned l4_msgtag_is_sys_exception(l4_msgtag_t t)
00218 { return l4_msgtag_label(t) == L4_MSGTAG_SYS_EXCEPTION; }
00219
00220 L4_INLINE unsigned l4_msgtag_is_exception(l4_msgtag_t t)
00221 { return l4_msgtag_label(t) == L4_MSGTAG_EXCEPTION; }
00222
00223 L4_INLINE unsigned l4_msgtag_is_sigma0(l4_msgtag_t t)
00224 { return l4_msgtag_label(t) == L4_MSGTAG_SIGMA0; }
00225
00226 L4_INLINE unsigned l4_msgtag_is_io_page_fault(l4_msgtag_t t)
00227 { return l4_msgtag_label(t) == L4_MSGTAG_IO_PAGE_FAULT; }
00228
00229 L4_INLINE unsigned l4_msgtag_is_cap_fault(l4_msgtag_t t)
00230 { return l4_msgtag_label(t) == L4_MSGTAG_CAP_FAULT; }
00231
00232 #endif