Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / forth / util / pci.fs
diff --git a/qemu/roms/openbios/forth/util/pci.fs b/qemu/roms/openbios/forth/util/pci.fs
new file mode 100644 (file)
index 0000000..57ded62
--- /dev/null
@@ -0,0 +1,92 @@
+\ tag: PCI helper functions
+\ 
+\ Copyright (C) 2003-2004 Stefan Reinauer
+\ Copyright (C) 2003 Samuel Rydh
+\ 
+\ See the file "COPYING" for further information about
+\ the copyright and warranty status of this work.
+\ 
+
+\ simple set of words for pci access, these are not 
+\ compliant to the PCI bus binding of OpenFirmware.
+
+\ only forth
+\ vocabulary pci 
+\ also pci definitions
+
+hex
+
+: busdevfn ( bus dev fn -- busdevfn )
+  7 and swap 
+  1f and 3 << or       ( dev fn -- devfn )
+  swap 8 << or            ( bus devfn -- busdevfn )
+  ;
+
+: config-command ( busdevfn reg -- reg addr )
+  dup -rot
+  3 invert and 
+  swap 8 << or 
+  80000000 or
+  ;
+
+: pci-c@ ( busdevfn reg -- x )
+  config-command
+  cf8 iol!
+  3 and cfc + 
+  ioc@
+  ;
+
+: pci-w@ ( busdevfn reg -- x )
+  config-command
+  cf8 iol!
+  2 and cfc + iow@
+  ;
+
+: pci-l@ ( busdevfn reg -- x )
+  config-command
+  cf8 iol! 
+  drop
+  cfc iol@
+  ;
+
+: pci-c! ( busdevfn reg val -- )
+  -rot config-command 
+  cf8 iol! 
+  3 and cfc + ioc!
+  ;
+  
+: pci-w! ( busdevfn reg val -- )
+  -rot config-command 
+  cf8 iol! 
+  2 and cfc + iow!
+  ;
+  
+: pci-l! ( busdevfn reg val -- )
+  -rot config-command 
+  cf8 iol! 
+  drop
+  cfc iol!
+  ;
+: dump-pci-device ( bus dev fn -- )
+  2 pick (.) type 3a emit over 
+  (.) type 2e emit dup (.) type 20 emit 5b emit  \ 0:18.0 [
+  busdevfn >r
+  r@ 0 pci-w@ u. 2f emit r@ 2 pci-w@ u. 5d emit         \ 1022/1100]
+  r>
+  \ now we iterate
+  10 0 do
+    cr i todigit emit 30 emit 3a emit 20 emit
+    10 0 do
+      dup i j 4 << or  pci-c@ 
+      dup 4 >> todigit emit f and todigit emit
+      20 emit
+    loop
+  loop
+  drop
+  cr cr
+  ;
+  
+\ : test-pci
+\   0  2 0 dump-pci-device
+\   ;