Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / slof / fs / available.fs
diff --git a/qemu/roms/SLOF/slof/fs/available.fs b/qemu/roms/SLOF/slof/fs/available.fs
new file mode 100644 (file)
index 0000000..5eb8fa9
--- /dev/null
@@ -0,0 +1,72 @@
+\ *****************************************************************************
+\ * Copyright (c) 2004, 2008 IBM Corporation
+\ * All rights reserved.
+\ * This program and the accompanying materials
+\ * are made available under the terms of the BSD License
+\ * which accompanies this distribution, and is available at
+\ * http://www.opensource.org/licenses/bsd-license.php
+\ *
+\ * Contributors:
+\ *     IBM Corporation - initial implementation
+\ ****************************************************************************/
+
+VARIABLE chosen-memory-ih 0 chosen-memory-ih !
+
+\ +
+\ Maintain "available" property.
+\ Sun has a single memory node with "available" property
+\ and separate memory controller nodes.
+\ We corespond memory nodes with their respective memory controllers
+\ and use /chosen/memory as default memory node to hold the "available" map
+\ NOTE -> /chosen/memory is expected 2B initialized before using claim/release
+\ +
+
+: (chosen-memory-ph) ( -- phandle )
+       chosen-memory-ih @ ?dup 0= IF
+               s" memory" get-chosen IF
+                       decode-int nip nip dup chosen-memory-ih !
+                       ihandle>phandle
+               ELSE 0 THEN
+       ELSE ihandle>phandle THEN
+;
+
+: (set-available-prop) ( prop plen -- )
+       s" available"
+       (chosen-memory-ph) ?dup 0<> IF set-property ELSE
+               cr ." Can't find chosen memory node - "
+               ." no available property created" cr
+               2dup 2dup
+       THEN
+;
+
+: update-available-property ( available-ptr -- )
+       dup >r available>size@
+       0= r@ available AVAILABLE-SIZE /available * + >= or IF
+               available r> available - encode-bytes (set-available-prop)
+       ELSE
+               r> /available + RECURSE
+       THEN
+;
+
+: update-available-property available update-available-property ;
+
+\ \\\\\\\\\\\\\\ Exported Interface:
+\ +
+\ IEEE 1275 implementation:
+\      claim
+\ Claim the region with given start address and size (if align parameter is 0);
+\ alternatively claim any region of given alignment
+\ +
+\ Throw an exception if failed
+\ +
+: claim ( [ addr ] len align -- base ) claim update-available-property ;
+
+\ +
+\ IEEE 1275 implementation:
+\      release
+\ Free the region with given start address and size
+\ +
+: release ( addr len -- ) release update-available-property ;
+
+update-available-property
+