\ 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 \ ;