41 lines
859 B
Forth
41 lines
859 B
Forth
|
[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]
|