321 |
|
|
322 |
|
|
323 |
extern l4_kip_t __l4_kip; |
extern l4_kip_t __l4_kip; |
324 |
#define l4_get_kernel_interface() (__l4_kip + 0) /* Not an lvalue. */ |
#define l4_kip() (__l4_kip + 0) /* Not an lvalue. */ |
325 |
|
|
326 |
|
|
327 |
#ifndef _L4_EXTERN_INLINE |
#ifndef _L4_EXTERN_INLINE |
328 |
#define _L4_EXTERN_INLINE extern __inline |
#define _L4_EXTERN_INLINE extern __inline |
329 |
#endif |
#endif |
330 |
|
|
331 |
|
_L4_EXTERN_INLINE |
332 |
|
|
333 |
_L4_EXTERN_INLINE l4_api_version_t |
_L4_EXTERN_INLINE l4_api_version_t |
334 |
l4_api_version (void) |
l4_api_version (void) |
335 |
{ |
{ |
336 |
return l4_get_kernel_interface ()->api_version; |
return l4_kip ()->api_version; |
337 |
} |
} |
338 |
|
|
339 |
|
|
340 |
_L4_EXTERN_INLINE l4_api_flags_t |
_L4_EXTERN_INLINE l4_api_flags_t |
341 |
l4_api_flags (void) |
l4_api_flags (void) |
342 |
{ |
{ |
343 |
return l4_get_kernel_interface ()->api_flags; |
return l4_kip ()->api_flags; |
344 |
} |
} |
345 |
|
|
346 |
|
|
349 |
{ |
{ |
350 |
l4_kern_desc_t kern; |
l4_kern_desc_t kern; |
351 |
|
|
352 |
kern = (l4_kern_desc_t) ((l4_word_t) l4_get_kernel_interface () |
kern = (l4_kern_desc_t) ((l4_word_t) l4_kip () |
353 |
+ l4_get_kernel_interface ()->kern_desc_ptr); |
+ l4_kip ()->kern_desc_ptr); |
354 |
return kern->id; |
return kern->id; |
355 |
} |
} |
356 |
|
|
360 |
{ |
{ |
361 |
l4_kern_desc_t kern; |
l4_kern_desc_t kern; |
362 |
|
|
363 |
kern = (l4_kern_desc_t) ((l4_word_t) l4_get_kernel_interface () |
kern = (l4_kern_desc_t) ((l4_word_t) l4_kip () |
364 |
+ l4_get_kernel_interface ()->kern_desc_ptr); |
+ l4_kip ()->kern_desc_ptr); |
365 |
|
|
366 |
if (year) |
if (year) |
367 |
*year = kern->gen_date.year + 2000; |
*year = kern->gen_date.year + 2000; |
377 |
{ |
{ |
378 |
l4_kern_desc_t kern; |
l4_kern_desc_t kern; |
379 |
|
|
380 |
kern = (l4_kern_desc_t) ((l4_word_t) l4_get_kernel_interface () |
kern = (l4_kern_desc_t) ((l4_word_t) l4_kip () |
381 |
+ l4_get_kernel_interface ()->kern_desc_ptr); |
+ l4_kip ()->kern_desc_ptr); |
382 |
|
|
383 |
if (ver) |
if (ver) |
384 |
*ver = kern->version.ver; |
*ver = kern->version.ver; |
394 |
{ |
{ |
395 |
l4_kern_desc_t kern; |
l4_kern_desc_t kern; |
396 |
|
|
397 |
kern = (l4_kern_desc_t) ((l4_word_t) l4_get_kernel_interface () |
kern = (l4_kern_desc_t) ((l4_word_t) l4_kip () |
398 |
+ l4_get_kernel_interface ()->kern_desc_ptr); |
+ l4_kip ()->kern_desc_ptr); |
399 |
|
|
400 |
return kern->supplier; |
return kern->supplier; |
401 |
} |
} |
404 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
405 |
l4_num_processors (void) |
l4_num_processors (void) |
406 |
{ |
{ |
407 |
return l4_get_kernel_interface ()->processor_info.processors + 1; |
return l4_kip ()->processor_info.processors + 1; |
408 |
} |
} |
409 |
|
|
410 |
|
|
414 |
if (num >= l4_num_processors ()) |
if (num >= l4_num_processors ()) |
415 |
return (l4_proc_desc_t) 0; |
return (l4_proc_desc_t) 0; |
416 |
|
|
417 |
return (l4_proc_desc_t) ((l4_word_t) l4_get_kernel_interface () |
return (l4_proc_desc_t) ((l4_word_t) l4_kip () |
418 |
+ l4_get_kernel_interface ()->proc_desc_ptr) |
+ l4_kip ()->proc_desc_ptr) |
419 |
+ num * (1 << l4_get_kernel_interface ()->processor_info.log2_size); |
+ num * (1 << l4_kip ()->processor_info.log2_size); |
420 |
} |
} |
421 |
|
|
422 |
|
|
439 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
440 |
l4_page_size_mask (void) |
l4_page_size_mask (void) |
441 |
{ |
{ |
442 |
return l4_get_kernel_interface ()->page_info.page_size_mask |
return l4_kip ()->page_info.page_size_mask |
443 |
<< L4_MIN_PAGE_SIZE_LOG2; |
<< L4_MIN_PAGE_SIZE_LOG2; |
444 |
} |
} |
445 |
|
|
450 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
451 |
l4_min_page_size_log2 (void) |
l4_min_page_size_log2 (void) |
452 |
{ |
{ |
453 |
page_size_mask = l4_get_kernel_interface ()->page_info.page_size_mask; |
page_size_mask = l4_kip ()->page_info.page_size_mask; |
454 |
unsigned int page_size_log2 = L4_MIN_PAGE_SIZE_LOG2; |
unsigned int page_size_log2 = L4_MIN_PAGE_SIZE_LOG2; |
455 |
|
|
456 |
/* There'd better be one bit set. */ |
/* There'd better be one bit set. */ |
477 |
_L4_EXTERN_INLINE l4_page_info_t |
_L4_EXTERN_INLINE l4_page_info_t |
478 |
l4_page_rights (void) |
l4_page_rights (void) |
479 |
{ |
{ |
480 |
return l4_get_kernel_interface ()->page_info; |
return l4_kip ()->page_info; |
481 |
} |
} |
482 |
|
|
483 |
|
|
484 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
485 |
l4_thread_id_bits (void) |
l4_thread_id_bits (void) |
486 |
{ |
{ |
487 |
return l4_get_kernel_interface ()->thread_info.log2_max_thread; |
return l4_kip ()->thread_info.log2_max_thread; |
488 |
} |
} |
489 |
|
|
490 |
|
|
491 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
492 |
l4_thread_user_base (void) |
l4_thread_user_base (void) |
493 |
{ |
{ |
494 |
return l4_get_kernel_interface ()->thread_info.user_base; |
return l4_kip ()->thread_info.user_base; |
495 |
} |
} |
496 |
|
|
497 |
|
|
498 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
499 |
l4_thread_system_base (void) |
l4_thread_system_base (void) |
500 |
{ |
{ |
501 |
return l4_get_kernel_interface ()->thread_info.system_base; |
return l4_kip ()->thread_info.system_base; |
502 |
} |
} |
503 |
|
|
504 |
|
|
505 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
506 |
l4_read_precision (void) |
l4_read_precision (void) |
507 |
{ |
{ |
508 |
return l4_get_kernel_interface ()->clock_info.read_precision; |
return l4_kip ()->clock_info.read_precision; |
509 |
} |
} |
510 |
|
|
511 |
|
|
512 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
513 |
l4_schedule_precision (void) |
l4_schedule_precision (void) |
514 |
{ |
{ |
515 |
return l4_get_kernel_interface ()->clock_info.schedule_precision; |
return l4_kip ()->clock_info.schedule_precision; |
516 |
} |
} |
517 |
|
|
518 |
|
|
519 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
520 |
l4_utcb_area_size_log2 (void) |
l4_utcb_area_size_log2 (void) |
521 |
{ |
{ |
522 |
return l4_get_kernel_interface ()->utcb_info.log2_min_size; |
return l4_kip ()->utcb_info.log2_min_size; |
523 |
} |
} |
524 |
|
|
525 |
|
|
526 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
527 |
l4_utcb_area_size (void) |
l4_utcb_area_size (void) |
528 |
{ |
{ |
529 |
return 1 << l4_get_kernel_interface ()->utcb_info.log2_min_size; |
return 1 << l4_kip ()->utcb_info.log2_min_size; |
530 |
} |
} |
531 |
|
|
532 |
|
|
533 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
534 |
l4_utcb_alignment_log2 (void) |
l4_utcb_alignment_log2 (void) |
535 |
{ |
{ |
536 |
return l4_get_kernel_interface ()->utcb_info.log2_align; |
return l4_kip ()->utcb_info.log2_align; |
537 |
} |
} |
538 |
|
|
539 |
|
|
540 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
541 |
l4_utcb_size (void) |
l4_utcb_size (void) |
542 |
{ |
{ |
543 |
return l4_get_kernel_interface ()->utcb_info.size_mul |
return l4_kip ()->utcb_info.size_mul |
544 |
* (1 << l4_utcb_alignment_log2 ()); |
* (1 << l4_utcb_alignment_log2 ()); |
545 |
} |
} |
546 |
|
|
548 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
549 |
l4_kip_area_size_log2 (void) |
l4_kip_area_size_log2 (void) |
550 |
{ |
{ |
551 |
return l4_get_kernel_interface ()->kip_area_info.log2_size; |
return l4_kip ()->kip_area_info.log2_size; |
552 |
} |
} |
553 |
|
|
554 |
|
|
555 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
556 |
l4_kip_area_size (void) |
l4_kip_area_size (void) |
557 |
{ |
{ |
558 |
return 1 << l4_get_kernel_interface ()->kip_area_info.log2_size; |
return 1 << l4_kip ()->kip_area_info.log2_size; |
559 |
} |
} |
560 |
|
|
561 |
|
|
562 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
563 |
l4_boot_info (void) |
l4_boot_info (void) |
564 |
{ |
{ |
565 |
return l4_get_kernel_interface ()->boot_info; |
return l4_kip ()->boot_info; |
566 |
} |
} |
567 |
|
|
568 |
|
|
571 |
{ |
{ |
572 |
l4_kern_desc_t kern; |
l4_kern_desc_t kern; |
573 |
|
|
574 |
kern = (l4_kern_desc_t) ((l4_word_t) l4_get_kernel_interface () |
kern = (l4_kern_desc_t) ((l4_word_t) l4_kip () |
575 |
+ l4_get_kernel_interface ()->kern_desc_ptr); |
+ l4_kip ()->kern_desc_ptr); |
576 |
|
|
577 |
return kern->version_parts; |
return kern->version_parts; |
578 |
} |
} |
600 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
601 |
l4_num_memory_desc (void) |
l4_num_memory_desc (void) |
602 |
{ |
{ |
603 |
return l4_get_kernel_interface ()->memory_info.nr; |
return l4_kip ()->memory_info.nr; |
604 |
} |
} |
605 |
|
|
606 |
|
|
613 |
return (l4_memory_desc_t) 0; |
return (l4_memory_desc_t) 0; |
614 |
|
|
615 |
mem = (l4_memory_desc_t) |
mem = (l4_memory_desc_t) |
616 |
((l4_word_t) l4_get_kernel_interface () |
((l4_word_t) l4_kip () |
617 |
+ l4_get_kernel_interface ()->memory_info.mem_desc_ptr); |
+ l4_kip ()->memory_info.mem_desc_ptr); |
618 |
return mem + num; |
return mem + num; |
619 |
} |
} |
620 |
|
|