aboutsummaryrefslogtreecommitdiffstats
path: root/roms/openbios/arch/sparc64/tree.fs
diff options
context:
space:
mode:
Diffstat (limited to 'roms/openbios/arch/sparc64/tree.fs')
-rw-r--r--roms/openbios/arch/sparc64/tree.fs93
1 files changed, 93 insertions, 0 deletions
diff --git a/roms/openbios/arch/sparc64/tree.fs b/roms/openbios/arch/sparc64/tree.fs
new file mode 100644
index 000000000..af8948d12
--- /dev/null
+++ b/roms/openbios/arch/sparc64/tree.fs
@@ -0,0 +1,93 @@
+include config.fs
+
+\ -------------------------------------------------------------------------
+\ UPA encode/decode unit
+\ -------------------------------------------------------------------------
+
+: decode-unit-upa ( str len -- id lun )
+ ascii , left-split
+ ( addr-R len-R addr-L len-L )
+ parse-hex
+ -rot parse-hex
+ swap
+;
+
+: encode-unit-upa ( id lun -- str len)
+ swap
+ pocket tohexstr
+ " ," pocket tmpstrcat >r
+ rot pocket tohexstr r> tmpstrcat drop
+;
+
+\ ---------
+\ DMA words
+\ ---------
+
+: sparc64-dma-free ( virt size -- )
+ 2drop
+;
+
+: sparc64-dma-map-in ( virt size cacheable? -- devaddr )
+ 2drop
+;
+
+: sparc64-dma-map-out ( virt devaddr size -- )
+ (dma-sync)
+;
+
+['] sparc64-dma-free to (dma-free)
+['] sparc64-dma-map-in to (dma-map-in)
+['] sparc64-dma-map-out to (dma-map-out)
+
+\ -------------------------------------------------------------
+\ device-tree
+\ -------------------------------------------------------------
+
+" /" find-device
+ 2 encode-int " #address-cells" property
+ 2 encode-int " #size-cells" property
+ " sun4u" encode-string " compatible" property
+
+ : encode-unit encode-unit-upa ;
+ : decode-unit decode-unit-upa ;
+
+ : dma-sync ( virt devaddr size -- )
+ (dma-sync)
+ ;
+
+ : dma-alloc ( size -- virt )
+ (dma-alloc)
+ ;
+
+ : dma-free ( virt size -- )
+ (dma-free)
+ ;
+
+ : dma-map-in ( virt size cacheable? -- devaddr )
+ (dma-map-in)
+ ;
+
+ : dma-map-out ( virt devaddr size -- )
+ (dma-map-out)
+ ;
+
+new-device
+ " memory" device-name
+ " memory" device-type
+ external
+ : open true ;
+ : close ;
+ \ see arch/sparc64/lib.c for methods
+finish-device
+
+new-device
+ " virtual-memory" device-name
+ external
+ \ see arch/sparc64/lib.c for methods
+finish-device
+
+" /options" find-device
+ " disk" encode-string " boot-from" property
+
+" /openprom" find-device
+ " OBP 3.10.24 1999/01/01 01:01" encode-string " version" property