00001
00005
00006
00007
00008
00009 #ifndef __L4SYS__MEMDESC_H__
00010 #define __L4SYS__MEMDESC_H__
00011
00012 #include <l4/sys/kernel.h>
00013
00018 enum
00019 {
00020 l4_mem_type_undefined = 0x0,
00021 l4_mem_type_conventional = 0x1,
00022 l4_mem_type_reserved = 0x2,
00023 l4_mem_type_dedicated = 0x3,
00024 l4_mem_type_shared = 0x4,
00025
00026 l4_mem_type_bootloader = 0xe,
00027 l4_mem_type_archspecific = 0xf,
00028 };
00029
00030
00035 typedef struct
00036 {
00037 l4_umword_t l;
00038 l4_umword_t h;
00039 } l4_kernel_info_mem_desc_t;
00040
00041
00046 L4_INLINE
00047 l4_kernel_info_mem_desc_t *
00048 l4_kernel_info_get_mem_descs(l4_kernel_info_t *kip);
00049
00056 L4_INLINE
00057 unsigned
00058 l4_kernel_info_get_num_mem_descs(l4_kernel_info_t *kip);
00059
00071 L4_INLINE
00072 void
00073 l4_kernel_info_set_mem_desc(l4_kernel_info_mem_desc_t *md,
00074 l4_addr_t start,
00075 l4_addr_t end,
00076 unsigned type,
00077 unsigned virt,
00078 unsigned sub_type);
00079
00086 L4_INLINE
00087 l4_umword_t
00088 l4_kernel_info_get_mem_desc_start(l4_kernel_info_mem_desc_t *md);
00089
00096 L4_INLINE
00097 l4_umword_t
00098 l4_kernel_info_get_mem_desc_end(l4_kernel_info_mem_desc_t *md);
00099
00106 L4_INLINE
00107 l4_umword_t
00108 l4_kernel_info_get_mem_desc_type(l4_kernel_info_mem_desc_t *md);
00109
00116 L4_INLINE
00117 l4_umword_t
00118 l4_kernel_info_get_mem_desc_subtype(l4_kernel_info_mem_desc_t *md);
00119
00126 L4_INLINE
00127 l4_umword_t
00128 l4_kernel_info_get_mem_desc_is_virtual(l4_kernel_info_mem_desc_t *md);
00129
00130
00131
00132
00133
00134 L4_INLINE
00135 l4_kernel_info_mem_desc_t *
00136 l4_kernel_info_get_mem_descs(l4_kernel_info_t *kip)
00137 {
00138 return (l4_kernel_info_mem_desc_t *)(((l4_addr_t)kip)
00139 + (kip->mem_info >> (sizeof(l4_umword_t) * 4)));
00140 }
00141
00142 L4_INLINE
00143 unsigned
00144 l4_kernel_info_get_num_mem_descs(l4_kernel_info_t *kip)
00145 {
00146 return kip->mem_info & ((1UL << (sizeof(l4_umword_t)*4)) -1);
00147 }
00148
00149 L4_INLINE
00150 void
00151 l4_kernel_info_set_mem_desc(l4_kernel_info_mem_desc_t *md,
00152 l4_addr_t start,
00153 l4_addr_t end,
00154 unsigned type,
00155 unsigned virt,
00156 unsigned sub_type)
00157 {
00158 md->l = (start & ~0x3ffUL) | (type & 0x0f) | ((sub_type << 4) & 0x0f0)
00159 | (virt ? 0x200 : 0x0);
00160 md->h = end;
00161 }
00162
00163
00164 L4_INLINE
00165 l4_umword_t
00166 l4_kernel_info_get_mem_desc_start(l4_kernel_info_mem_desc_t *md)
00167 {
00168 return md->l & ~0x3ffUL;
00169 }
00170
00171 L4_INLINE
00172 l4_umword_t
00173 l4_kernel_info_get_mem_desc_end(l4_kernel_info_mem_desc_t *md)
00174 {
00175 return md->h | 0x3ffUL;
00176 }
00177
00178 L4_INLINE
00179 l4_umword_t
00180 l4_kernel_info_get_mem_desc_type(l4_kernel_info_mem_desc_t *md)
00181 {
00182 return md->l & 0xf;
00183 }
00184
00185 L4_INLINE
00186 l4_umword_t
00187 l4_kernel_info_get_mem_desc_subtype(l4_kernel_info_mem_desc_t *md)
00188 {
00189 return (md->l & 0xf0) >> 4;
00190 }
00191
00192 L4_INLINE
00193 l4_umword_t
00194 l4_kernel_info_get_mem_desc_is_virtual(l4_kernel_info_mem_desc_t *md)
00195 {
00196 return md->l & 0x200;
00197 }
00198
00199 #endif