Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / forth / util / apic.fs
diff --git a/qemu/roms/openbios/forth/util/apic.fs b/qemu/roms/openbios/forth/util/apic.fs
new file mode 100644 (file)
index 0000000..82a62aa
--- /dev/null
@@ -0,0 +1,62 @@
+\ 
+\ ioapic and local apic tester
+\ 
+\ Copyright (C) 2003 Stefan Reinauer
+\ 
+\ See the file "COPYING" for further information about
+\ the copyright and warranty status of this work.
+\ 
+
+hex
+
+fee00000 constant lapic_base
+fec00000 constant ioapic_base
+
+: read_lapic ( regoffset -- value )
+  lapic_base + l@
+  ;
+
+: write_lapic ( value regoffset -- )
+  lapic_base + l!
+  ;
+
+: read_ioapic ( regoffset -- low_value high_value )
+  2* 10 + dup 
+  ioapic_base l! ioapic_base 4 cells + l@
+  swap 1+ 
+  ioapic_base l! ioapic_base 4 cells + l@
+  ;
+
+: write_ioapic ( low high regoffset -- )
+  2* 10 + dup                                  ( low high offs offs ) 
+  ioapic_base l! rot ioapic_base 4 cells + l!  ( high offs )
+  1+
+  ioapic_base l! ioapic_base 4 cells + l!      ( high offs )
+  ;
+
+: test-lapic 
+  s" Dumping local apic:" type cr
+  3f0 0 do
+    i dup ( lapic_base + ) s" 0x" type . s" = 0x" type read_lapic space . 
+    i 30 and 0= if cr then
+  10 +loop
+  cr
+  ;
+
+: test-ioapic
+  s" Dumping io apic:" type cr
+  17 0 do 
+    i dup s" irq=" type . read_ioapic s" = 0x" type . s" ." type . 
+    i 1 and 0<> if 
+      cr
+    then
+  loop
+  cr
+  ;
+
+: dump-apics
+  test-lapic
+  test-ioapic
+  ;
+
+\ tag: apic test utility