Reto Buerki
251b270e4b
hw_x86_64: Factor out _virt_mtc_addr to mtc_util.h header
2015-03-27 11:53:26 +01:00
Reto Buerki
cfe89996e8
hw_x86_64: Factor out pseudo descriptor class to own header
2015-03-27 11:53:26 +01:00
Reto Buerki
bf5118fe54
hw_x86_64: Make _virt_idt_addr member more generic
...
Add label argument to function and rename it to _virt_mtc_addr. It can
be used to retrieve the virtual mtc address of any given label.
2015-03-27 11:53:25 +01:00
Reto Buerki
b8e2249f51
hw_x86_64: Use _virt_idt_addr member in Idt::load
...
Load the virtual address in the mode transition pages into Interrupt
Descriptor Table Register (IDTR).
2015-03-27 11:53:25 +01:00
Reto Buerki
9c2d071654
hw_x86_64: Add virt_base argument to Idt::load
...
The argument specifies the virtual base address of the mode transition
pages.
2015-03-27 11:53:24 +01:00
Reto Buerki
ecaad9ecce
hw_x86_64: Add private _virt_idt_address member to Idt class
...
This function calculates the address of the IDT for a given virtual
mode transition base address.
2015-03-27 11:53:24 +01:00
Reto Buerki
d8a10448bb
hw_x86_64: Make Idt member functions non-static
...
Add appropriate Idt object to Genode::Cpu class. Update the hard-coded
TSS base address.
2015-03-27 11:53:24 +01:00
Reto Buerki
a361fbd2bc
hw_x86_64: Move ISR entries to mode transition page
...
This is needed to make them available for non-core threads which
initially only have the mode transition page mapped.
2015-03-27 11:53:23 +01:00
Adrian-Ken Rueegsegger
793b5264e3
hw_x86_64: Set dpl of syscall IDT entry to 3
...
Since this IDT entry is called from usermode the descriptor privilege
level must be 3.
2015-03-27 11:53:22 +01:00
Reto Buerki
c7cadf52a6
hw_x86_64: setup ISR and IDT
...
* Add isr.s assembler file:
The file declares an array of Interrupt Service Routines (ISR) to handle
the exception vectors from 0 to 19, see Intel SDM Vol. 3A, section
6.3.1.
* Add Idt class:
* The class Genode::Idt represents an Interrupt Descriptor Table as
specified by Intel SDM Vol. 3A, section 6.10.
* The setup function initializes the IDT with 20 entries using the ISR
array defined in the isr.s assembly file.
* Setup and load IDT in Genode::Cpu ctor:
The Idt::setup function is only executed once on the BSP.
* Declare ISRs for interrupts 20-255
* Set IDT size to 256
2015-03-27 11:53:18 +01:00