[openfirmware] r1096 - cpu/x86/pc/olpc dev/geode

svn at openfirmware.info svn at openfirmware.info
Mon Feb 2 07:47:25 CET 2009


Author: wmb
Date: 2009-02-02 07:47:25 +0100 (Mon, 02 Feb 2009)
New Revision: 1096

Modified:
   cpu/x86/pc/olpc/vsapci.fth
   dev/geode/msr.fth
Log:
OLPC trac 9226 - virtualize AC97 PCI config base address so Windows
XO Audio driver works whether or not the audio device is enabled
at Windows boot.


Modified: cpu/x86/pc/olpc/vsapci.fth
===================================================================
--- cpu/x86/pc/olpc/vsapci.fth	2009-01-29 17:03:19 UTC (rev 1095)
+++ cpu/x86/pc/olpc/vsapci.fth	2009-02-02 06:47:25 UTC (rev 1096)
@@ -242,11 +242,18 @@
    h# 51010081 2 pick  4 and  if  msr-set  else  msr-clr  then
 ;
 : ac97-cmd-reg  ( object value -- )
-   set-cmd-reg           ( adr value )
+   set-cmd-reg
+   h# 300 ?bus-master                  ( adr value )
+   1 and  if                           ( adr )
+      >bar-info                        ( base-adr size )
+      2dup 1 h# 5100.0026 set-io-rconf ( base-adr size )
+      h# a   h# 5101.00e1 set-iod-bm   ( )
+   else                                ( adr )
+      drop                             ( )
+      h# 5100.0026 rconf-off           ( )
+      h# 5101.00e1 iod-bm-off          ( )
+   then
 
-   h# 300 ?bus-master    ( adr value )
-
-   2drop
    \ The MSRs are:
    \ 5101.00e1  a0000001.480fff80.  IOD_BM
    \ 5100.0026  014f0001.01480001.  io-rconf

Modified: dev/geode/msr.fth
===================================================================
--- dev/geode/msr.fth	2009-01-29 17:03:19 UTC (rev 1095)
+++ dev/geode/msr.fth	2009-02-02 06:47:25 UTC (rev 1096)
@@ -36,7 +36,7 @@
 
 : p2d-range-off  ( msr# -- )  p2d-range-disabled  rot msr!  ;
 
-: >p2d-bm  ( ( base size type -- d.msrval )
+: >p2d-bm  ( base size type -- d.msrval )
    >r                 ( base size               r: type )
    negate page#       ( base mask-page       r: type )
    swap page#         ( base-page mask-page  r: type )
@@ -59,6 +59,15 @@
 
 : p2d-bm-off  ( msr# -- )  p2d-bm-disabled  rot msr!  ;
 
+: >iod-bm  ( base size type -- d.msrval )
+   >r                   ( base size   r: type )
+   negate h# fffff and  ( base mask   r: type )
+   swap                 ( mask base   r: type )
+   0  r>  p2d-format    ( msr.low msr.hi' )
+;
+: set-iod-bm  ( base size type msr# -- )   >r  >iod-bm  r> msr!  ;
+alias iod-bm-off p2d-bm-off
+
 : >rconf  ( base-adr size mode -- d.msrval )
    >r                ( base-adr size     r: mode )
    bounds            ( end-adr base-adr  r: mode )
@@ -69,6 +78,15 @@
 
 : set-rconf  ( base-adr size mode msr# -- )  >r >rconf r> msr!  ;
 
+: >io-rconf  ( base-adr size mode -- d.msrval )
+   >r                           ( base-adr size    r: mode )
+   bounds                       ( end-adr base-adr  r: mode )
+   d# 12 lshift  r> or          ( end-adr msr.low  )
+   swap 4 - d# 12 lshift  1 or  ( msr.low msr.high )
+;
+
+: set-io-rconf  ( base-adr size mode msr# -- )  >r >io-rconf r> msr!  ;
+
 : rconf-off  ( msr# -- )  rconf-disabled  rot msr!  ;
 
 




More information about the openfirmware mailing list