2015-02-27 13:10:41 +01:00
|
|
|
#include <mtc_util.h>
|
|
|
|
|
2015-02-21 01:00:35 +01:00
|
|
|
#include "tss.h"
|
|
|
|
|
|
|
|
using namespace Genode;
|
|
|
|
|
2015-02-27 13:10:41 +01:00
|
|
|
extern int _mt_kernel_interrupt_stack;
|
2015-02-21 01:00:35 +01:00
|
|
|
|
2015-02-27 11:47:26 +01:00
|
|
|
void Tss::setup(addr_t const virt_base)
|
2015-02-21 01:00:35 +01:00
|
|
|
{
|
2015-02-27 13:10:41 +01:00
|
|
|
addr_t const stack_addr = _virt_mtc_addr(virt_base,
|
|
|
|
(addr_t)&_mt_kernel_interrupt_stack);
|
|
|
|
|
|
|
|
this->rsp0 = stack_addr;
|
|
|
|
this->rsp1 = stack_addr;
|
|
|
|
this->rsp2 = stack_addr;
|
2015-02-21 01:00:35 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Tss::load()
|
|
|
|
{
|
|
|
|
asm volatile ("ltr %w0" : : "r" (TSS_SELECTOR));
|
|
|
|
}
|