⛏️ index : haiku.git

/* This software is part of the Haiku distribution and is covered
** by the MIT License.
*/
#ifndef VIRTUAL_DRIVE_H
#define VIRTUAL_DRIVE_H

#include <Drivers.h>

// virtualdrive device directory and control device, "/dev" relative
#define VIRTUAL_DRIVE_DIRECTORY_REL			"misc/virtualdrive"
#define VIRTUAL_DRIVE_CONTROL_DEVICE_REL	VIRTUAL_DRIVE_DIRECTORY_REL \
											"/control"
// virtualdrive device directory and control device, absolute
#define VIRTUAL_DRIVE_DIRECTORY				"/dev/" \
											VIRTUAL_DRIVE_DIRECTORY_REL
#define VIRTUAL_DRIVE_CONTROL_DEVICE		"/dev/" \
											VIRTUAL_DRIVE_CONTROL_DEVICE_REL

#define VIRTUAL_DRIVE_IOCTL_BASE	(B_DEVICE_OP_CODES_END + 10001)

enum {
	VIRTUAL_DRIVE_REGISTER_FILE	= VIRTUAL_DRIVE_IOCTL_BASE,
		// on control device: virtual_drive_info*, fills in device_name
	VIRTUAL_DRIVE_UNREGISTER_FILE,
		// on data device: none
	VIRTUAL_DRIVE_GET_INFO,
		// on data device: virtual_drive_info*
};

#define VIRTUAL_DRIVE_MAGIC	'VdIn'

typedef struct virtual_drive_info {
	uint32			magic;
	size_t			drive_info_size;
	char			file_name[B_PATH_NAME_LENGTH];
	char			device_name[B_PATH_NAME_LENGTH];
	device_geometry	geometry;
	bool			use_geometry;
	bool			halted;		// only valid for VIRTUAL_DRIVE_GET_INFO
} virtual_drive_info;

#endif	// VIRTUAL_DRIVE_H