<div dir="ltr">This should be committed now. <div><br></div><div>Thanks.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 20, 2018 at 9:27 AM, Amaan Cheval <span dir="ltr"><<a href="mailto:amaan.cheval@gmail.com" target="_blank">amaan.cheval@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
 user/bsps/bsps-x86_64.rst | 52 ++++++++++++++++++++++++++++++<wbr>++++++++-<br>
 1 file changed, 51 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/user/bsps/bsps-x86_64.rst b/user/bsps/bsps-x86_64.rst<br>
index 19c4461..c13f369 100644<br>
--- a/user/bsps/bsps-x86_64.rst<br>
+++ b/user/bsps/bsps-x86_64.rst<br>
@@ -136,10 +136,60 @@ After rebooting, the RTEMS kernel should run after the UEFI firmware and<br>
 FreeBSD's bootloader. The ``-serial stdio`` QEMU flag will let the RTEMS console<br>
 send its output to the host's ``stdio`` stream.<br>
<br>
+Paging<br>
+------<br>
+<br>
+During the BSP's initialization, the paging tables are setup to identity-map the<br>
+first 512GiB, i.e. virtual addresses are the same as physical addresses for the<br>
+first 512GiB.<br>
+<br>
+The page structures are set up statically with 1GiB super-pages.<br>
+<br>
+.. note::<br>
+  Page-faults are not handled.<br>
+<br>
+.. warning::<br>
+  RAM size is not detected dynamically and defaults to 1GiB, if the<br>
+  configuration-time ``RamSize`` parameter is not used.<br>
+<br>
+Interrupt Setup<br>
+---------------<br>
+<br>
+Interrupt vectors ``0`` through ``32`` (i.e. 33 interrupt vectors in total) are<br>
+setup as "RTEMS interrupts", which can be hooked through<br>
+``rtems_interrupt_handler_<wbr>install``.<br>
+<br>
+The Interrupt Descriptor Table supports a total of 256 possible vectors (0<br>
+through 255), which leaves a lot of room for "raw interrupts", which can be<br>
+hooked through ``_CPU_ISR_install_raw_<wbr>handler``.<br>
+<br>
+Since the APIC needs to be used for the clock driver, the PIC is remapped (IRQ0<br>
+of the PIC is redirected to vector 32, and so on), and then all interrupts are<br>
+masked to disable the PIC. In this state, the PIC may _still_ produce spurious<br>
+interrupts (IRQ7 and IRQ15, redirected to vector 39 and vector 47 respectively).<br>
+<br>
+The clock driver triggers the initialization of the APIC and then the APIC<br>
+timer.<br>
+<br>
+The I/O APIC is not supported at the moment.<br>
+<br>
+.. note::<br>
+  IRQ32 is reserved by default for the APIC timer (see following section).<br>
+<br>
+  IRQ255 is reserved by default for the APIC's spurious vector.<br>
+<br>
+.. warning::<br>
+  Besides the first 33 vectors (0 through 32), and vector 255 (the APIC spurious<br>
+  vector), no other handlers are attached by default.<br>
+<br>
 Clock Driver<br>
 ------------<br>
<br>
-The clock driver currently uses the idle thread clock driver.<br>
+The clock driver currently uses the APIC timer. Since the APIC timer runs at the<br>
+CPU bus frequency, which can't be detected easily, the PIT is used to calibrate<br>
+the APIC timer, and then the APIC timer is enabled in periodic mode, with the<br>
+initial counter setup such that interrupts fire at the same frequency as the<br>
+clock tick frequency, as requested by ``CONFIGURE_MICROSECONDS_PER_<wbr>TICK``.<br>
<br>
 Console Driver<br>
 --------------<br>
<span class="HOEnZb"><font color="#888888">-- <br>
2.18.0<br>
<br>
</font></span></blockquote></div><br></div>