1/*
2 * Copyright 2013, Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Ingo Weinhold <ingo_weinhold@gmx.de>
7 */
8#ifndef _PACKAGE__PRIVATE__PACKAGE_FS_H_
9#define _PACKAGE__PRIVATE__PACKAGE_FS_H_
10
11
12#include <Drivers.h>
13
14
15enum PackageFSMountType {
16	PACKAGE_FS_MOUNT_TYPE_SYSTEM,
17	PACKAGE_FS_MOUNT_TYPE_HOME,
18	PACKAGE_FS_MOUNT_TYPE_CUSTOM,
19
20	PACKAGE_FS_MOUNT_TYPE_ENUM_COUNT
21};
22
23
24enum {
25	PACKAGE_FS_OPERATION_GET_VOLUME_INFO		= B_DEVICE_OP_CODES_END + 1,
26	PACKAGE_FS_OPERATION_GET_PACKAGE_INFOS,
27	PACKAGE_FS_OPERATION_CHANGE_ACTIVATION
28};
29
30
31// PACKAGE_FS_OPERATION_GET_VOLUME_INFO
32
33struct PackageFSDirectoryInfo {
34	// node_ref of the directory
35	dev_t					deviceID;
36	ino_t					nodeID;
37};
38
39struct PackageFSVolumeInfo {
40	PackageFSMountType	mountType;
41
42	// device and node id of the respective package FS root scope (e.g. "/boot"
43	// for the three standard volumes)
44	dev_t					rootDeviceID;
45	ino_t					rootDirectoryID;
46
47	// packageCount is set to the actual packages directory count, even if it is
48	// greater than the array, so the caller can determine whether the array was
49	// large enough.
50	// The directories are ordered from the most recent state (the actual
51	// "packages" directory) to the oldest one, the one that is actually active.
52	uint32					packagesDirectoryCount;
53	PackageFSDirectoryInfo	packagesDirectoryInfos[1];
54};
55
56
57// PACKAGE_FS_OPERATION_GET_PACKAGE_INFOS
58
59struct PackageFSPackageInfo {
60	// node_ref and entry_ref of the package file
61	dev_t							packageDeviceID;
62	dev_t							directoryDeviceID;
63	ino_t							packageNodeID;
64	ino_t							directoryNodeID;
65	const char*						name;
66};
67
68struct PackageFSGetPackageInfosRequest {
69	// Filled in by the FS. bufferSize is set to the required buffer size, even
70	// even if the provided buffer is smaller.
71	uint32							bufferSize;
72	uint32							packageCount;
73	PackageFSPackageInfo			infos[1];
74};
75
76
77// PACKAGE_FS_OPERATION_CHANGE_ACTIVATION
78
79enum PackageFSActivationChangeType {
80	PACKAGE_FS_ACTIVATE_PACKAGE,
81	PACKAGE_FS_DEACTIVATE_PACKAGE,
82	PACKAGE_FS_REACTIVATE_PACKAGE
83};
84
85struct PackageFSActivationChangeItem {
86	PackageFSActivationChangeType	type;
87
88	// node_ref of the package file
89	dev_t							packageDeviceID;
90	ino_t							packageNodeID;
91
92	// entry_ref of the package file
93	uint32							nameLength;
94	dev_t							parentDeviceID;
95	ino_t							parentDirectoryID;
96	char*							name;
97										// must point to a location within the
98										// request
99};
100
101struct PackageFSActivationChangeRequest {
102	uint32							itemCount;
103	PackageFSActivationChangeItem	items[0];
104};
105
106
107#endif	// _PACKAGE__PRIVATE__PACKAGE_FS_H_
108