1241236Sbrooks/* $NetBSD$ */ 2241236Sbrooks 3241236Sbrooks/* 4241236Sbrooks * Copyright (c) 1989, 1990, 1993, 1994 5241236Sbrooks * The Regents of the University of California. All rights reserved. 6241236Sbrooks * 7241236Sbrooks * Redistribution and use in source and binary forms, with or without 8241236Sbrooks * modification, are permitted provided that the following conditions 9241236Sbrooks * are met: 10241236Sbrooks * 1. Redistributions of source code must retain the above copyright 11241236Sbrooks * notice, this list of conditions and the following disclaimer. 12241236Sbrooks * 2. Redistributions in binary form must reproduce the above copyright 13241236Sbrooks * notice, this list of conditions and the following disclaimer in the 14241236Sbrooks * documentation and/or other materials provided with the distribution. 15241236Sbrooks * 3. Neither the name of the University nor the names of its contributors 16241236Sbrooks * may be used to endorse or promote products derived from this software 17241236Sbrooks * without specific prior written permission. 18241236Sbrooks * 19241236Sbrooks * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20241236Sbrooks * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21241236Sbrooks * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22241236Sbrooks * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23241236Sbrooks * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24241236Sbrooks * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25241236Sbrooks * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26241236Sbrooks * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27241236Sbrooks * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28241236Sbrooks * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29241236Sbrooks * SUCH DAMAGE. 30241236Sbrooks * 31241236Sbrooks * @(#)mfs_vfsops.c 8.11 (Berkeley) 6/19/95 32241236Sbrooks */ 33241236Sbrooks 34241236Sbrooks#include <sys/cdefs.h> 35241236Sbrooks__KERNEL_RCSID(0, "$NetBSD$"); 36241236Sbrooks 37241236Sbrooks#include <sys/param.h> 38241236Sbrooks 39241236Sbrooks#include <ufs/mfs/mfs_extern.h> 40241236Sbrooks#include <ufs/ffs/fs.h> 41241236Sbrooks 42241236Sbrooksvoid * mfs_rootbase; /* address of mini-root in kernel virtual memory */ 43241236Sbrooksu_long mfs_rootsize; /* size of mini-root in bytes */ 44241236Sbrooks 45241236Sbrooks/* 46241236Sbrooks * This is called early in boot to set the base address and size 47241236Sbrooks * of the mini-root. 48241236Sbrooks */ 49241236Sbrooksint 50241236Sbrooksmfs_initminiroot(void *base) 51241236Sbrooks{ 52241236Sbrooks struct fs *fs = (struct fs *)((char *)base + SBLOCK_UFS1); 53241236Sbrooks static bool inited = false; 54241236Sbrooks 55241236Sbrooks if (inited) 56241236Sbrooks panic("mfs_initminiroot() called more than once"); 57241236Sbrooks inited = true; 58241236Sbrooks 59241236Sbrooks /* check for valid super block */ 60241236Sbrooks if (fs->fs_magic != FS_UFS1_MAGIC || fs->fs_bsize > MAXBSIZE || 61241236Sbrooks fs->fs_bsize < sizeof(struct fs)) 62241236Sbrooks return (0); 63241236Sbrooks rootfstype = MOUNT_MFS; 64241236Sbrooks mfs_rootbase = base; 65241236Sbrooks mfs_rootsize = fs->fs_fsize * fs->fs_size; 66241236Sbrooks rootdev = makedev(255, 0); 67241236Sbrooks return (mfs_rootsize); 68241236Sbrooks} 69241236Sbrooks