72 lines
2.1 KiB
Forth
72 lines
2.1 KiB
Forth
\ *****************************************************************************
|
|
\ * 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
|
|
|