OpenCores
URL https://opencores.org/ocsvn/c0or1k/c0or1k/trunk

Subversion Repositories c0or1k

[/] [c0or1k/] [trunk/] [conts/] [posix/] [mm0/] [fs/] [init.c] - Rev 2

Compare with Previous | Blame | View Log

/*
 * Filesystem initialisation.
 *
 * Copyright (C) 2007 Bahadir Balban
 */
#include <fs.h>
#include <vfs.h>
#include <bdev.h>
#include <task.h>
#include <stdio.h>
#include <string.h>
#include <l4/lib/list.h>
#include <l4/api/errno.h>
#include <memfs/memfs.h>
 
struct link fs_type_list;
 
struct superblock *vfs_probe_filesystems(void *block)
{
	struct file_system_type *fstype;
	struct superblock *sb;
 
	list_foreach_struct(fstype, &fs_type_list, list) {
		/* Does the superblock match for this fs type? */
		if ((sb = fstype->ops.get_superblock(block))) {
			/*
			 * Add this to the list of superblocks this
			 * fs already has.
			 */
			list_insert(&sb->list, &fstype->sblist);
			return sb;
		}
	}
 
	return PTR_ERR(-ENODEV);
}
 
/*
 * Registers each available filesystem so that these can be
 * used when probing superblocks on block devices.
 */
void vfs_register_filesystems(void)
{
	/* Initialise fstype list */
	link_init(&fs_type_list);
 
	/* Call per-fs registration functions */
	memfs_register_fstype(&fs_type_list);
}
 
/*
 * Filesystem initialisation.
 */
int vfs_init(void)
{
	void *rootdev_blocks;
	struct superblock *root_sb;
 
	/* Initialize superblock ids */
	vfs_fsidx_pool = id_pool_new_init(VFS_FSIDX_SIZE);
 
	/*
	 * Waste first one so that vnums
	 * always orr with a non-zero value
	 */
	id_new(vfs_fsidx_pool);
 
	/* Get standard init data from microkernel */
	// request_initdata(&initdata);
 
	/* Register compiled-in filesystems with vfs core. */
	vfs_register_filesystems();
 
	/* Get a pointer to first block of root block device */
	rootdev_blocks = vfs_rootdev_open();
 
	/*
	 * Since the *only* filesystem we have is a temporary memory
	 * filesystem, we create it on the root device first.
	 */
	memfs_format_filesystem(rootdev_blocks);
 
	/* Search for a filesystem on the root device */
	BUG_ON(IS_ERR(root_sb = vfs_probe_filesystems(rootdev_blocks)));
 
	/* Mount the filesystem on the root device */
	vfs_mount_root(root_sb);
 
	printf("%s: Mounted memfs root filesystem.\n", __TASKNAME__);
 
	return 0;
}
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.