\
\ CDDL HEADER START
\
\ The contents of this file are subject to the terms of the
\ Common Development and Distribution License (the "License").
\ You may not use this file except in compliance with the License.
\
\ You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
\ or http://www.opensolaris.org/os/licensing.
\ See the License for the specific language governing permissions
\ and limitations under the License.
\
\ When distributing Covered Code, include this CDDL HEADER in each
\ file and include the License file at usr/src/OPENSOLARIS.LICENSE.
\ If applicable, add the following below this CDDL HEADER, with the
\ fields enclosed by brackets "[]" replaced with your own identifying
\ information: Portions Copyright [yyyy] [name of copyright owner]
\
\ CDDL HEADER END
\
\
\ ident "%Z%%M% %I% %E% SMI"
\ Copyright 2007 Sun Microsystems, Inc. All rights reserved.
\ Use is subject to license terms.
\
id: %Z%%M% %I% %E% SMI
purpose: simplified ramdisk driver
copyright: Copyright 2007 Sun Microsystems, Inc. All Rights Reserved
headerless
" block" device-type
" SUNW,ramdisk" encode-string " compatible" property
0 instance value current-offset
0 value ramdisk-base-va
0 value ramdisk-size
0 value alloc-size
: set-props
ramdisk-size encode-int " size" property
ramdisk-base-va encode-int " address" property
alloc-size encode-int " alloc-size" property
;
set-props
: current-va ( -- adr ) ramdisk-base-va current-offset + ;
external
: open ( -- okay? )
true
;
: close ( -- )
;
: seek ( off.low off.high -- error? )
drop dup ramdisk-size > if
drop true exit ( failed )
then
to current-offset false ( succeeded )
;
: read ( addr len -- actual-len )
dup current-offset + ( addr len new-off )
dup ramdisk-size > if
ramdisk-size - - ( addr len' )
ramdisk-size ( addr len new-off )
then -rot ( new-off addr len )
tuck current-va -rot move ( new-off len )
swap to current-offset ( len )
;
: create ( base size alloc-sz -- )
to alloc-size
to ramdisk-size
to ramdisk-base-va
set-props
;