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