92 lines
1.6 KiB
Forth
92 lines
1.6 KiB
Forth
\ 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
|
|
\ ;
|