|
|
1.1 root 1: \ tag: PCI helper functions
2: \
3: \ Copyright (C) 2003-2004 Stefan Reinauer
4: \ Copyright (C) 2003 Samuel Rydh
5: \
6: \ See the file "COPYING" for further information about
7: \ the copyright and warranty status of this work.
8: \
9:
10: \ simple set of words for pci access, these are not
11: \ compliant to the PCI bus binding of OpenFirmware.
12:
13: \ only forth
14: \ vocabulary pci
15: \ also pci definitions
16:
17: hex
18:
19: : busdevfn ( bus dev fn -- busdevfn )
20: 7 and swap
21: 1f and 3 << or ( dev fn -- devfn )
22: swap 8 << or ( bus devfn -- busdevfn )
23: ;
24:
25: : config-command ( busdevfn reg -- reg addr )
26: dup -rot
27: 3 invert and
28: swap 8 << or
29: 80000000 or
30: ;
31:
32: : pci-c@ ( busdevfn reg -- x )
33: config-command
34: cf8 iol!
35: 3 and cfc +
36: ioc@
37: ;
38:
39: : pci-w@ ( busdevfn reg -- x )
40: config-command
41: cf8 iol!
42: 2 and cfc + iow@
43: ;
44:
45: : pci-l@ ( busdevfn reg -- x )
46: config-command
47: cf8 iol!
48: drop
49: cfc iol@
50: ;
51:
52: : pci-c! ( busdevfn reg val -- )
53: -rot config-command
54: cf8 iol!
55: 3 and cfc + ioc!
56: ;
57:
58: : pci-w! ( busdevfn reg val -- )
59: -rot config-command
60: cf8 iol!
61: 2 and cfc + iow!
62: ;
63:
64: : pci-l! ( busdevfn reg val -- )
65: -rot config-command
66: cf8 iol!
67: drop
68: cfc iol!
69: ;
70:
71: : dump-pci-device ( bus dev fn -- )
72: 2 pick (.) type 3a emit over
73: (.) type 2e emit dup (.) type 20 emit 5b emit \ 0:18.0 [
74: busdevfn >r
75: r@ 0 pci-w@ u. 2f emit r@ 2 pci-w@ u. 5d emit \ 1022/1100]
76: r>
77: \ now we iterate
78: 10 0 do
79: cr i todigit emit 30 emit 3a emit 20 emit
80: 10 0 do
81: dup i j 4 << or pci-c@
82: dup 4 >> todigit emit f and todigit emit
83: 20 emit
84: loop
85: loop
86: drop
87: cr cr
88: ;
89:
90: \ : test-pci
91: \ 0 2 0 dump-pci-device
92: \ ;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.