diff options
Diffstat (limited to 'qemu/roms/SLOF/slof/fs/pci-helper.fs')
-rw-r--r-- | qemu/roms/SLOF/slof/fs/pci-helper.fs | 195 |
1 files changed, 0 insertions, 195 deletions
diff --git a/qemu/roms/SLOF/slof/fs/pci-helper.fs b/qemu/roms/SLOF/slof/fs/pci-helper.fs deleted file mode 100644 index a4f69f1f3..000000000 --- a/qemu/roms/SLOF/slof/fs/pci-helper.fs +++ /dev/null @@ -1,195 +0,0 @@ -\ ***************************************************************************** -\ * Copyright (c) 2004, 2011 IBM Corporation -\ * All rights reserved. -\ * This program and the accompanying materials -\ * are made available under the terms of the BSD License -\ * which accompanies this distribution, and is available at -\ * http://www.opensource.org/licenses/bsd-license.php -\ * -\ * Contributors: -\ * IBM Corporation - initial implementation -\ ****************************************************************************/ - -\ ---------------------------------------------------------- -\ **************** PCI Helper functions ******************* -\ ---------------------------------------------------------- - -\ convert an integer to string of len digits -: int2str ( int len -- str len ) swap s>d rot <# 0 ?DO # LOOP #> ; - -\ convert addr to busnr -: pci-addr2bus ( addr -- busnr ) 10 rshift FF and ; - -\ convert addr to devnr -: pci-addr2dev ( addr -- dev ) B rshift 1F and ; - -\ convert addr to functionnumber -: pci-addr2fn ( addr -- dev ) 8 rshift 7 and ; - -\ convert busnr devnr to addr -: pci-bus2addr ( busnr devnr -- addr ) B lshift swap 10 lshift + ; - -\ print out a pci config addr -: pci-addr-out ( addr -- ) dup pci-addr2bus 2 0.r space FFFF and 4 0.r ; - -\ Dump out the whole configspace -: pci-dump ( addr -- ) - 10 0 DO - dup - cr i 4 * + - dup pci-addr-out space - rtas-config-l@ 8 0.r - LOOP - drop cr -; - - -\ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -\ the following functions use l@ to fetch the data, -\ that's because the some pcie cores have probs with w@ -\ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -\ read Vendor ID -: pci-vendor@ ( addr -- id ) rtas-config-l@ FFFF and ; - -\ read Device ID -: pci-device@ ( addr -- id ) rtas-config-l@ 10 rshift ; - -\ read Status -: pci-status@ ( addr -- status ) 4 + rtas-config-l@ 10 rshift ; - -\ read Revision ID -: pci-revision@ ( addr -- id ) 8 + rtas-config-b@ ; - -\ read Class Code -: pci-class@ ( addr -- class ) 8 + rtas-config-l@ 8 rshift ; - -\ read Cache Line Size -: pci-cache@ ( addr -- size ) C + rtas-config-b@ ; - -\ read Header Type -: pci-htype@ ( addr -- type ) E + rtas-config-b@ ; - -\ read Sub Vendor ID -: pci-sub-vendor@ ( addr -- sub-id ) 2C + rtas-config-l@ FFFF and ; - -\ read Sub Device ID -: pci-sub-device@ ( addr -- sub-id ) 2C + rtas-config-l@ 10 rshift FFFF and ; - -\ read Interrupt Pin -: pci-interrupt@ ( addr -- interrupt ) 3D + rtas-config-b@ ; - -\ read Minimum Grant -: pci-min-grant@ ( addr -- min-gnt ) 3E + rtas-config-b@ ; - -\ read Maximum Latency -: pci-max-lat@ ( addr -- max-lat ) 3F + rtas-config-b@ ; - -\ Check if Capabilities are valid -: pci-capabilities? ( addr -- 0|1 ) pci-status@ 4 rshift 1 and ; - -\ fetch the offset of the next capability -: pci-cap-next ( cap-addr -- next-cap-off ) rtas-config-b@ FC and ; - -\ calc the address of the next capability -: pci-cap-next-addr ( cap-addr -- next-cap-addr ) 1+ dup pci-cap-next dup IF swap -100 and + ELSE nip THEN ; - - -\ Dump out all capabilities -: pci-cap-dump ( addr -- ) - cr - dup pci-capabilities? IF - 33 + BEGIN - pci-cap-next-addr dup 0<> - WHILE - dup pci-addr-out s" : " type - dup rtas-config-b@ 2 0.r cr - REPEAT - s" end found " - ELSE - s" capabilities not enabled!" - THEN - type cr drop -; - -\ search the capability-list for this id -: pci-cap-find ( addr id -- capp-addr|0 ) - swap dup pci-capabilities? IF - 33 + BEGIN - pci-cap-next-addr dup 0<> IF - dup rtas-config-b@ 2 pick = - ELSE - true - THEN - UNTIL - nip - ELSE - 2drop 0 - THEN -; - -\ check wether this device is a pci-express device -: pci-express? ( addr -- 0|1 ) 10 pci-cap-find 0<> ; - -\ check wether this device is a pci-express device -: pci-x? ( addr -- 0|1 ) 07 pci-cap-find 0<> ; - -\ check wether this device has extended config space -: pci-config-ext? ( addr -- 0|1 ) pci-express? ; - - -\ Disable Bus Master, Memory Space and I/O Space for this device -: pci-device-disable ( -- ) my-space 4 + dup rtas-config-l@ 7 invert and swap rtas-config-l! ; - -\ Enable Bus Master -: pci-master-enable ( -- ) my-space 4 + dup rtas-config-l@ 4 or swap rtas-config-l! ; - -\ Disable Bus Master -: pci-master-disable ( -- ) my-space 4 + dup rtas-config-l@ 4 invert and swap rtas-config-l! ; - -\ Enable response to mem accesses of pci device -: pci-mem-enable ( -- ) my-space 4 + dup rtas-config-w@ 2 or swap rtas-config-w! ; - -\ Enable response to I/O accesses of pci-device -: pci-io-enable ( -- ) my-space 4 + dup rtas-config-w@ 1 or swap rtas-config-w! ; - -\ Enable Bus Master, I/O and mem access -: pci-enable ( -- ) my-space 4 + dup rtas-config-w@ 7 or swap rtas-config-w! ; - -\ Enable #PERR and #SERR errors of pci-device -: pci-error-enable ( -- ) my-space 4 + dup rtas-config-w@ 140 or swap rtas-config-w! ; - -\ prints out the ScanInformation about a device -\ char is a sign for device type e.g. D - device ; B - bridge -: pci-out ( addr char -- ) - 15 spaces - over pci-addr-out - s" (" type emit s" ) : " type - dup pci-vendor@ 4 0.r space - pci-device@ 4 0.r - 4 spaces -; - - -\ set and fetch the interrupt Pin -: pci-irq-line@ ( addr -- irq-pin ) 3C + rtas-config-b@ ; -: pci-irq-line! ( pin addr -- ) 3C + rtas-config-b! ; - -\ set and fetch primary bus number -: pci-bus-prim! ( nr addr -- ) 18 + dup rtas-config-l@ FFFFFF00 and rot + swap rtas-config-l! ; -: pci-bus-prim@ ( addr -- nr ) 18 + rtas-config-l@ FF and ; - -\ set and fetch secondary bus number -: pci-bus-scnd! ( nr addr -- ) 18 + dup rtas-config-l@ FFFF00FF and rot 8 lshift + swap rtas-config-l! ; -: pci-bus-scnd@ ( addr -- nr ) 18 + rtas-config-l@ 8 rshift FF and ; - -\ set and fetch subordinate bus number -: pci-bus-subo! ( nr addr -- ) 18 + dup rtas-config-l@ FF00FFFF and rot 10 lshift + swap rtas-config-l! ; -: pci-bus-subo@ ( addr -- nr ) 18 + rtas-config-l@ 10 rshift FF and ; - -\ set and fetch primary, secondary and subordinate bus number -: pci-bus! ( subo scnd prim addr -- ) swap rot 8 lshift + rot 10 lshift + swap 18 + dup rtas-config-l@ FF000000 and rot + swap rtas-config-l! ; -: pci-bus@ ( addr -- subo scnd prim ) 18 + rtas-config-l@ dup 10 rshift FF and swap dup 8 rshift FF and swap FF and ; - -\ Reset secondary Status -: pci-reset-2nd ( addr -- ) 1C + dup rtas-config-l@ FFFF0000 or swap rtas-config-l! ; |