diff options
Diffstat (limited to 'roms/openbios/drivers/pci.fs')
-rw-r--r-- | roms/openbios/drivers/pci.fs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/roms/openbios/drivers/pci.fs b/roms/openbios/drivers/pci.fs new file mode 100644 index 000000000..a7b56e1f8 --- /dev/null +++ b/roms/openbios/drivers/pci.fs @@ -0,0 +1,40 @@ +[IFDEF] CONFIG_DRIVER_PCI + +: pci-addr-encode ( addr.lo addr.mi addr.hi ) + rot >r swap >r + encode-int + r> encode-int encode+ + r> encode-int encode+ + ; + +: pci-len-encode ( len.lo len.hi ) + encode-int + rot encode-int encode+ + ; + +\ Get PCI physical address and size for configured BAR reg +: pci-bar>pci-addr ( bar-reg -- addr.lo addr.mid addr.hi size -1 | 0 ) + " assigned-addresses" active-package get-package-property 0= if + begin + decode-phys \ ( reg prop prop-len phys.lo phys.mid phys.hi ) + dup ff and 6 pick = if + >r >r >r rot drop + decode-int drop decode-int + -rot 2drop + r> swap r> r> rot + -1 exit + else + 3drop + then + \ Drop the size as we don't need it + decode-int drop decode-int drop + dup 0= + until + 3drop + 0 exit + else + 0 + then + ; + +[THEN] |