[openfirmware] r1177 - cpu/x86
svn at openfirmware.info
svn at openfirmware.info
Wed May 13 00:47:27 CEST 2009
Author: wmb
Date: 2009-05-13 00:47:27 +0200 (Wed, 13 May 2009)
New Revision: 1177
Modified:
cpu/x86/apic.fth
Log:
apic.fth - added some init stuff as suggested by the Linux driver.
Modified: cpu/x86/apic.fth
===================================================================
--- cpu/x86/apic.fth 2009-05-12 22:39:58 UTC (rev 1176)
+++ cpu/x86/apic.fth 2009-05-12 22:47:27 UTC (rev 1177)
@@ -31,18 +31,23 @@
dx push
c;
: apic-present? ( -- flag ) cpu-capabilities h# 200 and 0<> ;
-: soft-on ( -- )
- h# f0 apic@
- h# 100 or \ APIC on
- h# 200 invert and \ Focus processor checking
- h# ff or \ Spurious IRQ vector ff
- h# f0 apic!
-;
\ Methods
+: taskpri@ ( -- n ) h# 80 apic@ ;
+: taskpri! ( n -- ) h# 80 apic! ;
+: arbpri@ ( -- n ) h# 90 apic@ ;
+: arbpri! ( n -- ) h# 90 apic! ;
+: spiv@ ( -- n ) h# f0 apic@ ;
+: spiv! ( n -- ) h# f0 apic! ;
+
: id! ( id -- ) d# 24 lshift d# 20 apic! ;
: id@ ( -- id ) d# 20 apic@ d# 24 rshift ;
+: lvt0@ ( -- n ) h# 350 apic@ ;
+: lvt0! ( n -- ) h# 350 apic@ ;
+: lvt1@ ( -- n ) h# 360 apic@ ;
+: lvt1! ( n -- ) h# 360 apic@ ;
+
: lvt0-disable-irq ( -- ) h# 10000 h# 350 apic-set ; \ Disable LINT0
: lvt0-enable-irq ( -- ) h# 10000 h# 350 apic-clr ; \ Enable LINT0
: lvt1-disable-irq ( -- ) h# 10000 h# 360 apic-set ; \ Disable LINT1
@@ -60,11 +65,28 @@
: ack-irq ( -- ) h# f0 apic@ drop 0 h# b0 apic! ; \ b0 is eoi
+: soft-on ( -- )
+ spiv@
+ h# 100 or \ APIC on
+ h# 200 invert and \ Focus processor checking
+ h# ff or \ Spurious IRQ vector ff
+ spiv!
+;
+
+
: open ( -- okay? )
apic-base 0= if
apic-mmio-base h# 400 " map-in" $call-parent to apic-base
apic-on
+ taskpri@ h# ff invert and taskpri! \ "Accept All"
+ soft-on
+ \ Virtual wire mode
+ \ REMOTE_IRR (4000), SEND_PENDING (1000), DELIVERY_MODE_EXTINT (700)
+ lvt0@ h# 1ff00 invert and h# 5700 or lvt0!
+ \ REMOTE_IRR (4000), SEND_PENDING (1000), DELIVERY_MODE_NMI (400)
+ lvt1@ h# 1ff00 invert and h# 5400 or lvt1!
then
+
true
;
: close ( -- ) ;
More information about the openfirmware
mailing list