aboutsummaryrefslogtreecommitdiffstats
path: root/roms/openbios/drivers/pci.fs
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /roms/openbios/drivers/pci.fs
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'roms/openbios/drivers/pci.fs')
-rw-r--r--roms/openbios/drivers/pci.fs40
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]