1/*
2 * Copyright 2008, Fran��ois Revol <revol@free.fr>.
3 * All rights reserved. Distributed under the terms of the MIT License.
4 */
5
6#ifndef _BOOT_FILE_MAP_DISK_H
7#define _BOOT_FILE_MAP_DISK_H
8
9#include <boot/vfs.h>
10#include <boot/partitions.h>
11
12#define FMAP_FOLDER_NAME "BEOS"
13#define FMAP_IMAGE_NAME "IMAGE.BE"
14//#define FMAP_FOLDER_NAME "HAIKU"
15//#define FMAP_IMAGE_NAME "IMAGE.BFS"
16
17#define FMAP_MAX_RUNS 128
18
19struct file_map_run {
20	off_t offset;
21	off_t block;
22	off_t len;
23};
24
25struct file_map_boot_item {
26	int32 block_size;
27	int32 num_runs;
28	struct file_map_run runs[FMAP_MAX_RUNS];
29};
30
31#ifdef _BOOT_MODE
32
33class FileMap {
34public:
35	FileMap();
36	~FileMap();
37	void AddRun(off_t offset, off_t block, off_t len);
38
39private:
40	struct file_map_run fRuns[FMAP_MAX_RUNS];
41};
42
43class FileMapDisk : public Node {
44	public:
45		FileMapDisk();
46		virtual ~FileMapDisk();
47
48		status_t Init(Node *node/*Partition *partition, FileMap *map, off_t imageSize*/);
49
50		virtual status_t Open(void **_cookie, int mode);
51		virtual status_t Close(void *cookie);
52
53
54		virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer,
55			size_t bufferSize);
56		virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer,
57			size_t bufferSize);
58
59		virtual status_t GetName(char *nameBuffer, size_t bufferSize) const;
60		virtual status_t GetFileMap(struct file_map_run *runs, int32 *count);
61		virtual off_t Size() const;
62
63		static FileMapDisk *FindAnyFileMapDisk(Directory *volume);
64
65		status_t RegisterFileMapBootItem();
66
67	private:
68		Node		*fNode;
69		/*
70		Partition	*fPartition;
71		FileMap		*fMap;
72		off_t		fImageSize;
73		*/
74
75};
76
77#endif // _BOOT_MODE
78
79#endif	// _BOOT_FILE_MAP_DISK_H
80