diff --git a/repos/base-hw/src/core/include/spec/x86_64/pseudo_descriptor.h b/repos/base-hw/src/core/include/spec/x86_64/pseudo_descriptor.h new file mode 100644 index 000000000..321a31fa5 --- /dev/null +++ b/repos/base-hw/src/core/include/spec/x86_64/pseudo_descriptor.h @@ -0,0 +1,26 @@ +#ifndef _PSEUDO_DESCRIPTOR_H_ +#define _PSEUDO_DESCRIPTOR_H_ + +#include + +namespace Genode +{ + /** + * Pseudo Descriptor + * + * See Intel SDM Vol. 3A, section 3.5.1 + */ + class Pseudo_descriptor; +} + +class Genode::Pseudo_descriptor +{ + private: + uint16_t _limit; + uint64_t _base; + + public: + Pseudo_descriptor(uint16_t l, uint64_t b) : _limit(l), _base (b) { }; +} __attribute__((packed)); + +#endif /* _PSEUDO_DESCRIPTOR_H_ */ diff --git a/repos/base-hw/src/core/spec/x86_64/idt.cc b/repos/base-hw/src/core/spec/x86_64/idt.cc index 308a83720..10755c7da 100644 --- a/repos/base-hw/src/core/spec/x86_64/idt.cc +++ b/repos/base-hw/src/core/spec/x86_64/idt.cc @@ -1,3 +1,5 @@ +#include + #include "idt.h" extern int _mt_begin; @@ -5,16 +7,6 @@ extern int _mt_idt; using namespace Genode; -class Descriptor -{ - private: - uint16_t _limit; - uint64_t _base; - - public: - Descriptor(uint16_t l, uint64_t b) : _limit(l), _base (b) {}; -} __attribute__((packed)); - addr_t Idt::_virt_mtc_addr(addr_t const virt_base, addr_t const label) { @@ -45,6 +37,6 @@ void Idt::setup() void Idt::load(addr_t const virt_base) { - asm volatile ("lidt %0" : : "m" (Descriptor (sizeof(_table) - 1, + asm volatile ("lidt %0" : : "m" (Pseudo_descriptor (sizeof(_table) - 1, _virt_mtc_addr(virt_base, (addr_t)&_mt_idt)))); }