Main Page   File List  

idt.h

00001 /* $Id: idt.h 28276 2007-04-10 12:44:30Z adam $ */
00010 /* (c) 2003 Technische Universitaet Dresden
00011  * This file is part of DROPS, which is distributed under the terms of the
00012  * GNU General Public License 2. Please see the COPYING file for details. */
00013 
00014 #ifndef __L4UTIL_IDT_H
00015 #define __L4UTIL_IDT_H
00016 
00017 #include <l4/sys/l4int.h>
00018 #include <l4/sys/compiler.h>
00019 
00020 EXTERN_C_BEGIN
00021 
00026 typedef struct
00027 {
00028   l4_uint32_t       a, b;               
00029 } __attribute__ ((packed)) l4util_idt_desc_t;
00030 
00033 typedef struct
00034 {
00035   l4_uint16_t       limit;              
00036   void              *base;              
00037   l4util_idt_desc_t desc[0];
00038 } __attribute__ ((packed)) l4util_idt_header_t;
00039 
00046 static inline void
00047 l4util_idt_entry(l4util_idt_header_t *idt, int nr, void(*handler)(void))
00048 {
00049   idt->desc[nr].a = (l4_uint32_t)handler & 0x0000ffff;
00050   idt->desc[nr].b = 0x0000ef00 | ((l4_uint32_t)handler & 0xffff0000);
00051 }
00052 
00058 static inline void
00059 l4util_idt_init(l4util_idt_header_t *idt, int entries)
00060 {
00061   int i;
00062   idt->limit = entries*8 - 1;
00063   idt->base  = &idt->desc;
00064 
00065   for (i=0; i<entries; i++)
00066     l4util_idt_entry(idt, i, 0);
00067 }
00068 
00072 static inline void
00073 l4util_idt_load(l4util_idt_header_t *idt)
00074 {
00075   asm volatile ("lidt (%%eax) \n\t" : : "a" (idt));
00076 }
00077 
00078 EXTERN_C_END
00079 
00080 #endif
00081 

L4 Utilities, part of DROPS  © 2000-2003