summaryrefslogtreecommitdiffstats
path: root/qemu/roms/openbios/forth/util/pci.fs
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/openbios/forth/util/pci.fs')
-rw-r--r--qemu/roms/openbios/forth/util/pci.fs92
1 files changed, 92 insertions, 0 deletions
diff --git a/qemu/roms/openbios/forth/util/pci.fs b/qemu/roms/openbios/forth/util/pci.fs
new file mode 100644
index 000000000..57ded6265
--- /dev/null
+++ b/qemu/roms/openbios/forth/util/pci.fs
@@ -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
+\ ;