summaryrefslogtreecommitdiffstats
path: root/qemu/roms/SLOF/slof/fs/claim.fs
diff options
context:
space:
mode:
authorRajithaY <rajithax.yerrumsetty@intel.com>2017-04-25 03:31:15 -0700
committerRajitha Yerrumchetty <rajithax.yerrumsetty@intel.com>2017-05-22 06:48:08 +0000
commitbb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (patch)
treeca11e03542edf2d8f631efeca5e1626d211107e3 /qemu/roms/SLOF/slof/fs/claim.fs
parenta14b48d18a9ed03ec191cf16b162206998a895ce (diff)
Adding qemu as a submodule of KVMFORNFV
This Patch includes the changes to add qemu as a submodule to kvmfornfv repo and make use of the updated latest qemu for the execution of all testcase Change-Id: I1280af507a857675c7f81d30c95255635667bdd7 Signed-off-by:RajithaY<rajithax.yerrumsetty@intel.com>
Diffstat (limited to 'qemu/roms/SLOF/slof/fs/claim.fs')
-rw-r--r--qemu/roms/SLOF/slof/fs/claim.fs415
1 files changed, 0 insertions, 415 deletions
diff --git a/qemu/roms/SLOF/slof/fs/claim.fs b/qemu/roms/SLOF/slof/fs/claim.fs
deleted file mode 100644
index d012d3db8..000000000
--- a/qemu/roms/SLOF/slof/fs/claim.fs
+++ /dev/null
@@ -1,415 +0,0 @@
-\ *****************************************************************************
-\ * Copyright (c) 2004, 2011 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
-\ ****************************************************************************/
-
-\ \\\\\\\\\\\\\\ Constants
-500 CONSTANT AVAILABLE-SIZE
-4000 CONSTANT MIN-RAM-RESERVE \ prevent from using first pages
-
-: MIN-RAM-SIZE \ Initially available memory size
- epapr-ima-size IF
- epapr-ima-size
- ELSE
- 20000000 \ assumed minimal memory size
- THEN
-;
-MIN-RAM-SIZE CONSTANT MIN-RAM-SIZE
-
-\ \\\\\\\\\\\\\\ Structures
-\ +
-\ The available element size depends strictly on the address/size
-\ value formats and will be different for various device types
-\ +
-STRUCT
- cell field available>address
- cell field available>size
-CONSTANT /available
-
-
-\ \\\\\\\\\\\\\\ Global Data
-CREATE available AVAILABLE-SIZE /available * allot available AVAILABLE-SIZE /available * erase
-VARIABLE mem-pre-released 0 mem-pre-released !
-
-\ \\\\\\\\\\\\\\ Structure/Implementation Dependent Methods
-: available>size@ available>size @ ;
-: available>address@ available>address @ ;
-: available>size! available>size ! ;
-: available>address! available>address ! ;
-
-: available! ( addr size available-ptr -- )
- dup -rot available>size! available>address!
-;
-
-: available@ ( available-ptr -- addr size )
- dup available>address@ swap available>size@
-;
-
-
-\ \\\\\\\\\\\\\\ Implementation Independent Methods (Depend on Previous)
-\ +
-\ Warning: They are not yet really independent from available formatting
-\ +
-
-\ +
-\ Find position in the "available" where given range exists or can be inserted,
-\ return pointer and logical found/notfound value
-\ If error, return NULL pointer in addition to notfound code
-\ +
-: (?available-segment<) ( start1 end1 start2 end2 -- true/false ) drop < nip ;
-
-: (?available-segment>) ( start1 end1 start2 end2 -- true/false ) -rot 2drop > ;
-
-\ start1 to end1 is the area that should be claimed
-\ start2 to end2 is the available segment
-\ return true if it can not be claimed, false if it can be claimed
-: (?available-segment-#) ( start1 end1 start2 end2 -- true/false )
- 2dup 5 roll -rot ( e1 s2 e2 s1 s2 e2 )
- between >r between r> and not
-;
-
-: (find-available) ( addr addr+size-1 a-ptr a-size -- a-ptr' found )
- ?dup 0= IF -rot 2drop false EXIT THEN \ Not Found
-
- 2dup 2/ dup >r /available * +
- ( addr addr+size-1 a-ptr a-size a-ptr' R: a-size' )
- dup available>size@ 0= IF 2drop r> RECURSE EXIT THEN
-
- ( addr addr+size-1 a-ptr a-size a-ptr' R: a-size' )
- dup >r available@
- ( addr addr+size-1 a-ptr a-size addr' size' R: a-size' a-ptr' )
- over + 1- 2>r 2swap
- ( a-ptr a-size addr addr+size-1 )
- ( R: a-size' a-ptr' addr' addr'+size'-1 )
-
- 2dup 2r@ (?available-segment>) IF
- 2swap 2r> 2drop r>
- /available + -rot r> - 1- nip RECURSE EXIT \ Look Right
- THEN
- 2dup 2r@ (?available-segment<) IF
- 2swap 2r> 2drop r>
- 2drop r> RECURSE EXIT \ Look Left
- THEN
- 2dup 2r@ (?available-segment-#) IF \ Conflict - segments overlap
- 2r> 2r> 3drop 3drop 2drop
- 1212 throw
- THEN
- 2r> 3drop 3drop r> r> drop ( a-ptr' -- )
- dup available>size@ 0<> ( a-ptr' found -- )
-;
-
-: (find-available) ( addr size -- seg-ptr found )
- over + 1- available AVAILABLE-SIZE ['] (find-available) catch IF
- 2drop 2drop 0 false
- THEN
-;
-
-
-: dump-available ( available-ptr -- )
- cr
- dup available - /available / AVAILABLE-SIZE swap - 0 ?DO
- dup available@ ?dup 0= IF
- 2drop UNLOOP EXIT
- THEN
- swap . . cr
- /available +
- LOOP
- dup
-;
-
-: .available available dump-available ;
-
-\ +
-\ release utils:
-\ +
-
-\ +
-\ (drop-available) just blindly compresses space of available map
-\ +
-: (drop-available) ( available-ptr -- )
- dup available - /available / \ current element index
- AVAILABLE-SIZE swap - \ # of remaining elements
-
- ( first nelements ) 1- 0 ?DO
- dup /available + dup available@
-
- ( current next next>address next>size ) ?dup 0= IF
- 2drop LEAVE \ NULL element - goto last copy
- THEN
- 3 roll available! ( next )
- LOOP
-
- \ Last element : just zero it out
- 0 0 rot available!
-;
-
-\ +
-\ (stick-to-previous-available) merge the segment on stack
-\ with the previous one, if possible, and modified segment parameters if merged
-\ Return success code
-\ +
-: (stick-to-previous-available) ( addr size available-ptr -- naddr nsize nptr success )
- dup available = IF
- false EXIT \ This was the first available segment
- THEN
-
- dup /available - dup available@
- + 4 pick = IF
- nip \ Drop available-ptr since we are going to previous one
- rot drop \ Drop start addr, we take the previous one
-
- dup available@ 3 roll + rot true
- ( prev-addr prev-size+size prev-ptr true )
- ELSE
- drop false
- ( addr size available-ptr false )
- THEN
-;
-
-\ +
-\ (insert-available) just blindly makes space for another element on given
-\ position
-\ +
-\ insert-available should also check adjacent elements and merge if new
-\ region is contiguos w. others
-\ +
-: (insert-available) ( available-ptr -- available-ptr )
- dup \ current element
- dup available - /available / \ current element index
- AVAILABLE-SIZE swap - \ # of remaining elements
-
- dup 0<= 3 pick available>size@ 0= or IF
- \ End of "available" or came to an empty element - Exit
- drop drop EXIT
- THEN
-
- over available@ rot
-
- ( first first/=current/ first>address first>size nelements ) 1- 0 ?DO
- 2>r
- ( first current R: current>address current>size )
-
- /available + dup available@
- ( first current+1/=next/ next>address next>size )
- ( R: current>address current>size )
-
- 2r> 4 pick available! dup 0= IF
- \ NULL element - last copy
- rot /available + available!
- UNLOOP EXIT
- THEN
- LOOP
-
- ( first next/=last/ last[0]>address last[0]>size ) ?dup 0<> IF
- cr ." release error: available map overflow"
- cr ." Dumping available property"
- .available
- cr ." No space for one before last entry:" cr swap . .
- cr ." Dying ..." cr 123 throw
- THEN
-
- 2drop
-;
-
-: insert-available ( addr size available-ptr -- addr size available-ptr )
- dup available>address@ 0<> IF
- \ Not empty :
- dup available>address@ rot dup -rot -
-
- ( addr available-ptr size available>address@-size )
-
- 3 pick = IF \ if (available>address@ - size == addr)
- \ Merge w. next segment - no insert needed
-
- over available>size@ + swap
- ( addr size+available>size@ available-ptr )
-
- (stick-to-previous-available) IF
- \ Merged w. prev & next one : discard extra seg
- dup /available + (drop-available)
- THEN
- ELSE
- \ shift the rest of "available" to make space
-
- swap (stick-to-previous-available)
- not IF (insert-available) THEN
- THEN
- ELSE
- (stick-to-previous-available) drop
- THEN
-;
-
-defer release
-
-\ +
-\ claim utils:
-\ +
-: drop-available ( addr size available-ptr -- addr )
- dup >r available@
- ( req_addr req_size segment_addr segment_size R: available-ptr )
-
- over 4 pick swap - ?dup 0<> IF
- \ Segment starts before requested address : free the head space
- dup 3 roll swap r> available! -
-
- ( req_addr req_size segment_size-segment_addr+req_addr )
- over - ?dup 0= IF
- \ That's it - remainder of segment is what we claim
- drop
- ELSE
- \ Both head and tail of segment remain unclaimed :
- \ need an extra available element
- swap 2 pick + swap release
- THEN
- ELSE
- nip ( req_addr req_size segment_size )
- over - ?dup 0= IF
- \ Exact match : drop the whole available segment
- drop r> (drop-available)
- ELSE
- \ We claimed the head, need to leave the tail available
- -rot over + rot r> available!
- THEN
- THEN
- ( base R: -- )
-;
-
-: pwr2roundup ( value -- pwr2value )
- dup CASE
- 0 OF EXIT ENDOF
- 1 OF EXIT ENDOF
- ENDCASE
- dup 1 DO drop i dup +LOOP
- dup +
-;
-
-: (claim-best-fit) ( len align -- len base )
- pwr2roundup 1- -1 -1
- ( len align-1 best-fit-residue/=-1/ best-fit-base/=-1/ )
-
- available AVAILABLE-SIZE /available * + available DO
- i \ Must be saved now, before we use Return stack
- -rot >r >r swap >r
-
- ( len i R: best-fit-base best-fit-residue align-1 )
-
- available@ ?dup 0= IF drop r> r> r> LEAVE THEN \ EOL
-
- 2 pick - dup 0< IF
- 2drop \ Can't Fit: Too Small
- ELSE
- dup 2 pick r@ and - 0< IF
- 2drop \ Can't Fit When Aligned
- ELSE
- ( len i>address i>size-len )
- ( R: best-fit-base best-fit-residue align-1 )
- r> -rot dup r@ U< IF
- \ Best Fit so far: drop the old one
- 2r> 2drop
-
- ( len align-1 nu-base nu-residue R: )
- \ Now align new base and push to R:
- swap 2 pick + 2 pick invert and >r >r >r
- ELSE
- 2drop >r
- THEN
- THEN
- THEN
- r> r> r>
- /available +LOOP
-
- -rot 2drop ( len best-fit-base/or -1 if none found/ )
-;
-
-: (adjust-release0) ( 0 size -- addr' size' )
- \ segment 0 already pre-relased in early phase: adjust
- 2dup MIN-RAM-SIZE dup 3 roll + -rot -
- dup 0< IF 2drop ELSE
- 2swap 2drop 0 mem-pre-released !
- THEN
-;
-
-
-\ \\\\\\\\\\\\\\ 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 )
- ?dup 0<> IF
- (claim-best-fit) dup -1 = IF
- 2drop cr ." claim error : aligned allocation failed" cr
- ." available:" cr .available
- 321 throw EXIT
- THEN
- swap
- THEN
-
- 2dup (find-available) not IF
- drop
-\ cr ." claim error : requested " . ." bytes of memory at " .
-\ ." not available" cr
-\ ." available:" cr .available
- 2drop
- 321 throw EXIT
- THEN
- ( req_addr req_size available-ptr ) drop-available
-
- ( req_addr )
-;
-
-
-\ +
-\ IEEE 1275 implementation:
-\ release
-\ Free the region with given start address and size
-\ +
-: .release ( addr len -- )
- over 0= mem-pre-released @ and IF (adjust-release0) THEN
-
- 2dup (find-available) IF
- drop swap
- cr ." release error: region " . ." , " . ." already released" cr
- ELSE
- ?dup 0= IF
- swap
- cr ." release error: Bad/conflicting region " . ." , " .
- ." or available list full " cr
- ELSE
- ( addr size available-ptr ) insert-available
-
- \ NOTE: insert did not change the stack layout
- \ but it may have changed any of the three values
- \ in order to implement merge of free regions
- \ We do not interpret these values any more
- \ just blindly copy it in
-
- ( addr size available-ptr ) available!
- THEN
- THEN
-;
-
-' .release to release
-
-
-\ pre-release minimal memory size
-0 MIN-RAM-SIZE release 1 mem-pre-released !
-
-\ claim first pages used for PPC exception vectors
-0 MIN-RAM-RESERVE 0 ' claim CATCH IF ." claim failed!" cr 2drop THEN drop
-
-\ claim region used by firmware (assume 31 MiB size right now)
-paflof-start ffff not and 1f00000 0 ' claim CATCH IF
- ." claim failed!" cr 2drop
-THEN drop