1/*
2 * Copyright 2007-2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef USERLAND_FS_HAIKU_KERNEL_FILE_SYSTEM_H
6#define USERLAND_FS_HAIKU_KERNEL_FILE_SYSTEM_H
7
8#include "Locker.h"
9
10#include "HaikuKernelNode.h"
11
12#include "../FileSystem.h"
13
14
15struct file_system_module_info;
16
17
18namespace UserlandFS {
19
20struct HaikuKernelIORequest;
21
22class HaikuKernelFileSystem : public FileSystem {
23public:
24								HaikuKernelFileSystem(const char* fsName,
25									file_system_module_info* fsModule);
26	virtual						~HaikuKernelFileSystem();
27
28			status_t			Init();
29
30	virtual	status_t			CreateVolume(Volume** volume, dev_t id);
31	virtual	status_t			DeleteVolume(Volume* volume);
32
33			status_t			AddIORequest(HaikuKernelIORequest* request);
34			HaikuKernelIORequest* GetIORequest(int32 requestID);
35			void				PutIORequest(HaikuKernelIORequest* request,
36									int32 refCount = 1);
37
38			HaikuKernelNode::Capabilities* GetNodeCapabilities(
39									fs_vnode_ops* ops);
40			void				PutNodeCapabilities(
41									HaikuKernelNode::Capabilities*
42										capabilities);
43
44private:
45	struct IORequestHashDefinition;
46	struct IORequestTable;
47	struct NodeCapabilitiesHashDefinition;
48	struct NodeCapabilitiesTable;
49
50private:
51			void				_InitCapabilities();
52	static	void				_InitNodeCapabilities(fs_vnode_ops* ops,
53									FSVNodeCapabilities& capabilities);
54
55private:
56			file_system_module_info* fFSModule;
57			IORequestTable*		fIORequests;
58			NodeCapabilitiesTable* fNodeCapabilities;
59			Locker				fLock;
60};
61
62}	// namespace UserlandFS
63
64using UserlandFS::HaikuKernelFileSystem;
65
66#endif	// USERLAND_FS_HAIKU_KERNEL_FILE_SYSTEM_H
67