Author: mcayland Date: Fri Nov 30 00:02:22 2012 New Revision: 1074 URL: http://tracker.coreboot.org/trac/openbios/changeset/1074
Log: Add a default "decode-unit" word for devices that don't implement their own.
When a device does not implement its own "encode-unit" word, OpenBIOS currently supplies a default implementation that encodes a hex string to a single cell.
This commit does the same for "decode-unit" ensuring that it is also possible to open a device path containing a unit address generated by a device that doesn't implement its own "encode-unit" word.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@ilande.co.uk
Modified: trunk/openbios-devel/forth/device/pathres.fs
Modified: trunk/openbios-devel/forth/device/pathres.fs ============================================================================== --- trunk/openbios-devel/forth/device/pathres.fs Sat Nov 24 15:43:11 2012 (r1073) +++ trunk/openbios-devel/forth/device/pathres.fs Fri Nov 30 00:02:22 2012 (r1074) @@ -177,28 +177,33 @@ \ 4.3.3 match child node \
+\ used if package lacks a decode-unit method +: def-decode-unit ( str len -- unitaddr ... ) + parse-hex +; + +: get-decode-unit-xt ( phandle -- xt ) + " decode-unit" rot find-method + 0= if ['] def-decode-unit then +; + : find-child ( sinfo -- phandle )
r
\ decode unit address string r@ >si.unit_addr 2@ dup if ( str len ) - " decode-unit" active-package find-method - if - depth 3 - >r execute depth r@ - r> swap - ( ... a_lo ... a_hi olddepth n ) - 4 min 0 max - dup r@ >si.unit_phys_len ! - ( ... a_lo ... a_hi olddepth n ) - r@ >si.unit_phys >r - begin 1- dup 0>= while - rot r> dup la1+ >r l!-be - repeat - r> 2drop - depth! - else - \ no decode-unit method... failure - -99 throw - then + active-package get-decode-unit-xt + depth 3 - >r execute depth r@ - r> swap + ( ... a_lo ... a_hi olddepth n ) + 4 min 0 max + dup r@ >si.unit_phys_len ! + ( ... a_lo ... a_hi olddepth n ) + r@ >si.unit_phys >r + begin 1- dup 0>= while + rot r> dup la1+ >r l!-be + repeat + r> 2drop + depth! else 2drop \ clear unit_phys