170 lines
3.9 KiB
Forth
170 lines
3.9 KiB
Forth
include config.fs
|
|
|
|
\ ---------
|
|
\ DMA words
|
|
\ ---------
|
|
|
|
: sparc32-dma-free ( virt size -- )
|
|
2drop
|
|
;
|
|
|
|
: sparc32-dma-map-out ( virt devaddr size -- )
|
|
(dma-sync)
|
|
;
|
|
|
|
['] sparc32-dma-free to (dma-free)
|
|
['] sparc32-dma-map-out to (dma-map-out)
|
|
|
|
|
|
" /" find-device
|
|
2 encode-int " #address-cells" property
|
|
1 encode-int " #size-cells" property
|
|
|
|
" sun4m" encode-string " compatible" property
|
|
h# 0a21fe80 encode-int " clock-frequency" property
|
|
|
|
: encode-unit encode-unit-sbus ;
|
|
: decode-unit decode-unit-sbus ;
|
|
|
|
: dma-sync
|
|
(dma-sync)
|
|
;
|
|
|
|
: dma-alloc
|
|
(dma-alloc)
|
|
;
|
|
|
|
: dma-free
|
|
(dma-free)
|
|
;
|
|
|
|
: dma-map-in
|
|
(dma-map-in)
|
|
;
|
|
|
|
: dma-map-out
|
|
(dma-map-out)
|
|
;
|
|
|
|
new-device
|
|
" memory" device-name
|
|
external
|
|
: open true ;
|
|
: close ;
|
|
\ claim ( phys size align -- base )
|
|
\ release ( phys size -- )
|
|
finish-device
|
|
|
|
new-device
|
|
" virtual-memory" device-name
|
|
external
|
|
: open true ;
|
|
: close ;
|
|
\ claim ( phys size align -- base )
|
|
\ release ( phys size -- )
|
|
finish-device
|
|
|
|
new-device
|
|
" iommu" device-name
|
|
2 encode-int " #address-cells" property
|
|
1 encode-int " #size-cells" property
|
|
h# 1000 encode-int " page-size" property
|
|
0 encode-int " cache-coherence?" property
|
|
external
|
|
: open ( cr ." opening iommu" cr) true ;
|
|
: close ;
|
|
: encode-unit encode-unit-sbus ;
|
|
: decode-unit decode-unit-sbus ;
|
|
finish-device
|
|
|
|
" /iommu" find-device
|
|
new-device
|
|
" sbus" device-name
|
|
" hierarchical" device-type
|
|
2 encode-int " #address-cells" property
|
|
1 encode-int " #size-cells" property
|
|
h# 01443fd0 encode-int " clock-frequency" property
|
|
h# 1c encode-int " slot-address-bits" property
|
|
h# 3f encode-int " burst-sizes" property
|
|
external
|
|
: open ( cr ." opening SBus" cr) true ;
|
|
: close ;
|
|
: encode-unit encode-unit-sbus ;
|
|
: decode-unit decode-unit-sbus ;
|
|
: map-in map-in-sbus ;
|
|
: map-out map-out-sbus ;
|
|
: dma-alloc " dma-alloc" $call-parent ;
|
|
: dma-free " dma-free" $call-parent ;
|
|
: dma-map-in " dma-map-in" $call-parent ;
|
|
: dma-map-out " dma-map-out" $call-parent ;
|
|
: dma-sync " dma-sync" $call-parent ;
|
|
finish-device
|
|
|
|
[IFDEF] CONFIG_BPP
|
|
" /iommu/sbus" find-device
|
|
new-device
|
|
" SUNW,bpp" device-name
|
|
h# 4 encode-int h# 0c800000 encode-int encode+ h# 0000001c encode-int encode+ " reg" property
|
|
h# 33 encode-int 0 encode-int encode+ " intr" property
|
|
finish-device
|
|
[THEN]
|
|
|
|
" /iommu/sbus" find-device
|
|
new-device
|
|
" espdma" device-name
|
|
external
|
|
: encode-unit encode-unit-sbus ;
|
|
: decode-unit decode-unit-sbus ;
|
|
: dma-alloc " dma-alloc" $call-parent ;
|
|
: dma-free " dma-free" $call-parent ;
|
|
: dma-map-in " dma-map-in" $call-parent ;
|
|
: dma-map-out " dma-map-out" $call-parent ;
|
|
: dma-sync " dma-sync" $call-parent ;
|
|
finish-device
|
|
|
|
" /iommu/sbus" find-device
|
|
new-device
|
|
" ledma" device-name
|
|
h# 3f encode-int " burst-sizes" property
|
|
external
|
|
: encode-unit encode-unit-sbus ;
|
|
: decode-unit decode-unit-sbus ;
|
|
: dma-alloc " dma-alloc" $call-parent ;
|
|
: dma-free " dma-free" $call-parent ;
|
|
: dma-map-in " dma-map-in" $call-parent ;
|
|
: dma-map-out " dma-map-out" $call-parent ;
|
|
: dma-sync " dma-sync" $call-parent ;
|
|
finish-device
|
|
|
|
" /iommu/sbus/ledma" find-device
|
|
new-device
|
|
" le" device-name
|
|
" network" device-type
|
|
h# 7 encode-int " busmaster-regval" property
|
|
h# 26 encode-int 0 encode-int encode+ " intr" property
|
|
: dma-alloc " dma-alloc" $call-parent ;
|
|
: dma-free " dma-free" $call-parent ;
|
|
: dma-map-in " dma-map-in" $call-parent ;
|
|
: dma-map-out " dma-map-out" $call-parent ;
|
|
: dma-sync " dma-sync" $call-parent ;
|
|
finish-device
|
|
|
|
\ obio (on-board IO)
|
|
" /" find-device
|
|
new-device
|
|
" obio" device-name
|
|
" hierarchical" device-type
|
|
2 encode-int " #address-cells" property
|
|
1 encode-int " #size-cells" property
|
|
external
|
|
: open ( cr ." opening obio" cr) true ;
|
|
: close ;
|
|
: encode-unit encode-unit-sbus ;
|
|
: decode-unit decode-unit-sbus ;
|
|
finish-device
|
|
|
|
" /options" find-device
|
|
" disk" encode-string " boot-from" property
|
|
|
|
" /openprom" find-device
|
|
0 0 " aligned-allocator" property
|