xref: /linux/fs/vboxsf/shfl_hostintf.h (revision a1c613ae4c322ddd58d5a8539dbfba2a0380a8c0)
10fd16957SHans de Goede /* SPDX-License-Identifier: MIT */
20fd16957SHans de Goede /*
30fd16957SHans de Goede  * VirtualBox Shared Folders: host interface definition.
40fd16957SHans de Goede  *
50fd16957SHans de Goede  * Copyright (C) 2006-2018 Oracle Corporation
60fd16957SHans de Goede  */
70fd16957SHans de Goede 
80fd16957SHans de Goede #ifndef SHFL_HOSTINTF_H
90fd16957SHans de Goede #define SHFL_HOSTINTF_H
100fd16957SHans de Goede 
110fd16957SHans de Goede #include <linux/vbox_vmmdev_types.h>
120fd16957SHans de Goede 
130fd16957SHans de Goede /* The max in/out buffer size for a FN_READ or FN_WRITE call */
140fd16957SHans de Goede #define SHFL_MAX_RW_COUNT           (16 * SZ_1M)
150fd16957SHans de Goede 
160fd16957SHans de Goede /*
170fd16957SHans de Goede  * Structures shared between guest and the service
180fd16957SHans de Goede  * can be relocated and use offsets to point to variable
190fd16957SHans de Goede  * length parts.
200fd16957SHans de Goede  *
210fd16957SHans de Goede  * Shared folders protocol works with handles.
220fd16957SHans de Goede  * Before doing any action on a file system object,
230fd16957SHans de Goede  * one have to obtain the object handle via a SHFL_FN_CREATE
240fd16957SHans de Goede  * request. A handle must be closed with SHFL_FN_CLOSE.
250fd16957SHans de Goede  */
260fd16957SHans de Goede 
270fd16957SHans de Goede enum {
280fd16957SHans de Goede 	SHFL_FN_QUERY_MAPPINGS = 1,	/* Query mappings changes. */
290fd16957SHans de Goede 	SHFL_FN_QUERY_MAP_NAME = 2,	/* Query map name. */
300fd16957SHans de Goede 	SHFL_FN_CREATE = 3,		/* Open/create object. */
310fd16957SHans de Goede 	SHFL_FN_CLOSE = 4,		/* Close object handle. */
320fd16957SHans de Goede 	SHFL_FN_READ = 5,		/* Read object content. */
330fd16957SHans de Goede 	SHFL_FN_WRITE = 6,		/* Write new object content. */
340fd16957SHans de Goede 	SHFL_FN_LOCK = 7,		/* Lock/unlock a range in the object. */
350fd16957SHans de Goede 	SHFL_FN_LIST = 8,		/* List object content. */
360fd16957SHans de Goede 	SHFL_FN_INFORMATION = 9,	/* Query/set object information. */
370fd16957SHans de Goede 	/* Note function number 10 is not used! */
380fd16957SHans de Goede 	SHFL_FN_REMOVE = 11,		/* Remove object */
390fd16957SHans de Goede 	SHFL_FN_MAP_FOLDER_OLD = 12,	/* Map folder (legacy) */
400fd16957SHans de Goede 	SHFL_FN_UNMAP_FOLDER = 13,	/* Unmap folder */
410fd16957SHans de Goede 	SHFL_FN_RENAME = 14,		/* Rename object */
420fd16957SHans de Goede 	SHFL_FN_FLUSH = 15,		/* Flush file */
430fd16957SHans de Goede 	SHFL_FN_SET_UTF8 = 16,		/* Select UTF8 filename encoding */
440fd16957SHans de Goede 	SHFL_FN_MAP_FOLDER = 17,	/* Map folder */
450fd16957SHans de Goede 	SHFL_FN_READLINK = 18,		/* Read symlink dest (as of VBox 4.0) */
460fd16957SHans de Goede 	SHFL_FN_SYMLINK = 19,		/* Create symlink (as of VBox 4.0) */
470fd16957SHans de Goede 	SHFL_FN_SET_SYMLINKS = 20,	/* Ask host to show symlinks (4.0+) */
480fd16957SHans de Goede };
490fd16957SHans de Goede 
500fd16957SHans de Goede /* Root handles for a mapping are of type u32, Root handles are unique. */
510fd16957SHans de Goede #define SHFL_ROOT_NIL		UINT_MAX
520fd16957SHans de Goede 
530fd16957SHans de Goede /* Shared folders handle for an opened object are of type u64. */
540fd16957SHans de Goede #define SHFL_HANDLE_NIL		ULLONG_MAX
550fd16957SHans de Goede 
560fd16957SHans de Goede /* Hardcoded maximum length (in chars) of a shared folder name. */
570fd16957SHans de Goede #define SHFL_MAX_LEN         (256)
580fd16957SHans de Goede /* Hardcoded maximum number of shared folder mapping available to the guest. */
590fd16957SHans de Goede #define SHFL_MAX_MAPPINGS    (64)
600fd16957SHans de Goede 
610fd16957SHans de Goede /** Shared folder string buffer structure. */
620fd16957SHans de Goede struct shfl_string {
630fd16957SHans de Goede 	/** Allocated size of the string member in bytes. */
640fd16957SHans de Goede 	u16 size;
650fd16957SHans de Goede 
660fd16957SHans de Goede 	/** Length of string without trailing nul in bytes. */
670fd16957SHans de Goede 	u16 length;
680fd16957SHans de Goede 
690fd16957SHans de Goede 	/** UTF-8 or UTF-16 string. Nul terminated. */
700fd16957SHans de Goede 	union {
71*a8f014ecSKees Cook 		u8 legacy_padding[2];
72*a8f014ecSKees Cook 		DECLARE_FLEX_ARRAY(u8, utf8);
73*a8f014ecSKees Cook 		DECLARE_FLEX_ARRAY(u16, utf16);
740fd16957SHans de Goede 	} string;
750fd16957SHans de Goede };
760fd16957SHans de Goede VMMDEV_ASSERT_SIZE(shfl_string, 6);
770fd16957SHans de Goede 
780fd16957SHans de Goede /* The size of shfl_string w/o the string part. */
790fd16957SHans de Goede #define SHFLSTRING_HEADER_SIZE  4
800fd16957SHans de Goede 
810fd16957SHans de Goede /* Calculate size of the string. */
shfl_string_buf_size(const struct shfl_string * string)820fd16957SHans de Goede static inline u32 shfl_string_buf_size(const struct shfl_string *string)
830fd16957SHans de Goede {
840fd16957SHans de Goede 	return string ? SHFLSTRING_HEADER_SIZE + string->size : 0;
850fd16957SHans de Goede }
860fd16957SHans de Goede 
870fd16957SHans de Goede /* Set user id on execution (S_ISUID). */
880fd16957SHans de Goede #define SHFL_UNIX_ISUID             0004000U
890fd16957SHans de Goede /* Set group id on execution (S_ISGID). */
900fd16957SHans de Goede #define SHFL_UNIX_ISGID             0002000U
910fd16957SHans de Goede /* Sticky bit (S_ISVTX / S_ISTXT). */
920fd16957SHans de Goede #define SHFL_UNIX_ISTXT             0001000U
930fd16957SHans de Goede 
940fd16957SHans de Goede /* Owner readable (S_IRUSR). */
950fd16957SHans de Goede #define SHFL_UNIX_IRUSR             0000400U
960fd16957SHans de Goede /* Owner writable (S_IWUSR). */
970fd16957SHans de Goede #define SHFL_UNIX_IWUSR             0000200U
980fd16957SHans de Goede /* Owner executable (S_IXUSR). */
990fd16957SHans de Goede #define SHFL_UNIX_IXUSR             0000100U
1000fd16957SHans de Goede 
1010fd16957SHans de Goede /* Group readable (S_IRGRP). */
1020fd16957SHans de Goede #define SHFL_UNIX_IRGRP             0000040U
1030fd16957SHans de Goede /* Group writable (S_IWGRP). */
1040fd16957SHans de Goede #define SHFL_UNIX_IWGRP             0000020U
1050fd16957SHans de Goede /* Group executable (S_IXGRP). */
1060fd16957SHans de Goede #define SHFL_UNIX_IXGRP             0000010U
1070fd16957SHans de Goede 
1080fd16957SHans de Goede /* Other readable (S_IROTH). */
1090fd16957SHans de Goede #define SHFL_UNIX_IROTH             0000004U
1100fd16957SHans de Goede /* Other writable (S_IWOTH). */
1110fd16957SHans de Goede #define SHFL_UNIX_IWOTH             0000002U
1120fd16957SHans de Goede /* Other executable (S_IXOTH). */
1130fd16957SHans de Goede #define SHFL_UNIX_IXOTH             0000001U
1140fd16957SHans de Goede 
1150fd16957SHans de Goede /* Named pipe (fifo) (S_IFIFO). */
1160fd16957SHans de Goede #define SHFL_TYPE_FIFO              0010000U
1170fd16957SHans de Goede /* Character device (S_IFCHR). */
1180fd16957SHans de Goede #define SHFL_TYPE_DEV_CHAR          0020000U
1190fd16957SHans de Goede /* Directory (S_IFDIR). */
1200fd16957SHans de Goede #define SHFL_TYPE_DIRECTORY         0040000U
1210fd16957SHans de Goede /* Block device (S_IFBLK). */
1220fd16957SHans de Goede #define SHFL_TYPE_DEV_BLOCK         0060000U
1230fd16957SHans de Goede /* Regular file (S_IFREG). */
1240fd16957SHans de Goede #define SHFL_TYPE_FILE              0100000U
1250fd16957SHans de Goede /* Symbolic link (S_IFLNK). */
1260fd16957SHans de Goede #define SHFL_TYPE_SYMLINK           0120000U
1270fd16957SHans de Goede /* Socket (S_IFSOCK). */
1280fd16957SHans de Goede #define SHFL_TYPE_SOCKET            0140000U
1290fd16957SHans de Goede /* Whiteout (S_IFWHT). */
1300fd16957SHans de Goede #define SHFL_TYPE_WHITEOUT          0160000U
1310fd16957SHans de Goede /* Type mask (S_IFMT). */
1320fd16957SHans de Goede #define SHFL_TYPE_MASK              0170000U
1330fd16957SHans de Goede 
1340fd16957SHans de Goede /* Checks the mode flags indicate a directory (S_ISDIR). */
1350fd16957SHans de Goede #define SHFL_IS_DIRECTORY(m)   (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_DIRECTORY)
1360fd16957SHans de Goede /* Checks the mode flags indicate a symbolic link (S_ISLNK). */
1370fd16957SHans de Goede #define SHFL_IS_SYMLINK(m)     (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_SYMLINK)
1380fd16957SHans de Goede 
1390fd16957SHans de Goede /** The available additional information in a shfl_fsobjattr object. */
1400fd16957SHans de Goede enum shfl_fsobjattr_add {
1410fd16957SHans de Goede 	/** No additional information is available / requested. */
1420fd16957SHans de Goede 	SHFLFSOBJATTRADD_NOTHING = 1,
1430fd16957SHans de Goede 	/**
1440fd16957SHans de Goede 	 * The additional unix attributes (shfl_fsobjattr::u::unix_attr) are
1450fd16957SHans de Goede 	 *  available / requested.
1460fd16957SHans de Goede 	 */
1470fd16957SHans de Goede 	SHFLFSOBJATTRADD_UNIX,
1480fd16957SHans de Goede 	/**
1490fd16957SHans de Goede 	 * The additional extended attribute size (shfl_fsobjattr::u::size) is
1500fd16957SHans de Goede 	 *  available / requested.
1510fd16957SHans de Goede 	 */
1520fd16957SHans de Goede 	SHFLFSOBJATTRADD_EASIZE,
1530fd16957SHans de Goede 	/**
1540fd16957SHans de Goede 	 * The last valid item (inclusive).
1550fd16957SHans de Goede 	 * The valid range is SHFLFSOBJATTRADD_NOTHING thru
1560fd16957SHans de Goede 	 * SHFLFSOBJATTRADD_LAST.
1570fd16957SHans de Goede 	 */
1580fd16957SHans de Goede 	SHFLFSOBJATTRADD_LAST = SHFLFSOBJATTRADD_EASIZE,
1590fd16957SHans de Goede 
1600fd16957SHans de Goede 	/** The usual 32-bit hack. */
1610fd16957SHans de Goede 	SHFLFSOBJATTRADD_32BIT_SIZE_HACK = 0x7fffffff
1620fd16957SHans de Goede };
1630fd16957SHans de Goede 
1640fd16957SHans de Goede /**
1650fd16957SHans de Goede  * Additional unix Attributes, these are available when
1660fd16957SHans de Goede  * shfl_fsobjattr.additional == SHFLFSOBJATTRADD_UNIX.
1670fd16957SHans de Goede  */
1680fd16957SHans de Goede struct shfl_fsobjattr_unix {
1690fd16957SHans de Goede 	/**
1700fd16957SHans de Goede 	 * The user owning the filesystem object (st_uid).
1710fd16957SHans de Goede 	 * This field is ~0U if not supported.
1720fd16957SHans de Goede 	 */
1730fd16957SHans de Goede 	u32 uid;
1740fd16957SHans de Goede 
1750fd16957SHans de Goede 	/**
1760fd16957SHans de Goede 	 * The group the filesystem object is assigned (st_gid).
1770fd16957SHans de Goede 	 * This field is ~0U if not supported.
1780fd16957SHans de Goede 	 */
1790fd16957SHans de Goede 	u32 gid;
1800fd16957SHans de Goede 
1810fd16957SHans de Goede 	/**
1820fd16957SHans de Goede 	 * Number of hard links to this filesystem object (st_nlink).
1830fd16957SHans de Goede 	 * This field is 1 if the filesystem doesn't support hardlinking or
1840fd16957SHans de Goede 	 * the information isn't available.
1850fd16957SHans de Goede 	 */
1860fd16957SHans de Goede 	u32 hardlinks;
1870fd16957SHans de Goede 
1880fd16957SHans de Goede 	/**
1890fd16957SHans de Goede 	 * The device number of the device which this filesystem object resides
1900fd16957SHans de Goede 	 * on (st_dev). This field is 0 if this information is not available.
1910fd16957SHans de Goede 	 */
1920fd16957SHans de Goede 	u32 inode_id_device;
1930fd16957SHans de Goede 
1940fd16957SHans de Goede 	/**
1950fd16957SHans de Goede 	 * The unique identifier (within the filesystem) of this filesystem
1960fd16957SHans de Goede 	 * object (st_ino). Together with inode_id_device, this field can be
1970fd16957SHans de Goede 	 * used as a OS wide unique id, when both their values are not 0.
1980fd16957SHans de Goede 	 * This field is 0 if the information is not available.
1990fd16957SHans de Goede 	 */
2000fd16957SHans de Goede 	u64 inode_id;
2010fd16957SHans de Goede 
2020fd16957SHans de Goede 	/**
2030fd16957SHans de Goede 	 * User flags (st_flags).
2040fd16957SHans de Goede 	 * This field is 0 if this information is not available.
2050fd16957SHans de Goede 	 */
2060fd16957SHans de Goede 	u32 flags;
2070fd16957SHans de Goede 
2080fd16957SHans de Goede 	/**
2090fd16957SHans de Goede 	 * The current generation number (st_gen).
2100fd16957SHans de Goede 	 * This field is 0 if this information is not available.
2110fd16957SHans de Goede 	 */
2120fd16957SHans de Goede 	u32 generation_id;
2130fd16957SHans de Goede 
2140fd16957SHans de Goede 	/**
2150fd16957SHans de Goede 	 * The device number of a char. or block device type object (st_rdev).
2160fd16957SHans de Goede 	 * This field is 0 if the file isn't a char. or block device or when
2170fd16957SHans de Goede 	 * the OS doesn't use the major+minor device idenfication scheme.
2180fd16957SHans de Goede 	 */
2190fd16957SHans de Goede 	u32 device;
2200fd16957SHans de Goede } __packed;
2210fd16957SHans de Goede 
2220fd16957SHans de Goede /** Extended attribute size. */
2230fd16957SHans de Goede struct shfl_fsobjattr_easize {
2240fd16957SHans de Goede 	/** Size of EAs. */
2250fd16957SHans de Goede 	s64 cb;
2260fd16957SHans de Goede } __packed;
2270fd16957SHans de Goede 
2280fd16957SHans de Goede /** Shared folder filesystem object attributes. */
2290fd16957SHans de Goede struct shfl_fsobjattr {
2300fd16957SHans de Goede 	/** Mode flags (st_mode). SHFL_UNIX_*, SHFL_TYPE_*, and SHFL_DOS_*. */
2310fd16957SHans de Goede 	u32 mode;
2320fd16957SHans de Goede 
2330fd16957SHans de Goede 	/** The additional attributes available. */
2340fd16957SHans de Goede 	enum shfl_fsobjattr_add additional;
2350fd16957SHans de Goede 
2360fd16957SHans de Goede 	/**
2370fd16957SHans de Goede 	 * Additional attributes.
2380fd16957SHans de Goede 	 *
2390fd16957SHans de Goede 	 * Unless explicitly specified to an API, the API can provide additional
2400fd16957SHans de Goede 	 * data as it is provided by the underlying OS.
2410fd16957SHans de Goede 	 */
2420fd16957SHans de Goede 	union {
2430fd16957SHans de Goede 		struct shfl_fsobjattr_unix unix_attr;
2440fd16957SHans de Goede 		struct shfl_fsobjattr_easize size;
2450fd16957SHans de Goede 	} __packed u;
2460fd16957SHans de Goede } __packed;
2470fd16957SHans de Goede VMMDEV_ASSERT_SIZE(shfl_fsobjattr, 44);
2480fd16957SHans de Goede 
2490fd16957SHans de Goede struct shfl_timespec {
2500fd16957SHans de Goede 	s64 ns_relative_to_unix_epoch;
2510fd16957SHans de Goede };
2520fd16957SHans de Goede 
2530fd16957SHans de Goede /** Filesystem object information structure. */
2540fd16957SHans de Goede struct shfl_fsobjinfo {
2550fd16957SHans de Goede 	/**
2560fd16957SHans de Goede 	 * Logical size (st_size).
2570fd16957SHans de Goede 	 * For normal files this is the size of the file.
2580fd16957SHans de Goede 	 * For symbolic links, this is the length of the path name contained
2590fd16957SHans de Goede 	 * in the symbolic link.
2600fd16957SHans de Goede 	 * For other objects this fields needs to be specified.
2610fd16957SHans de Goede 	 */
2620fd16957SHans de Goede 	s64 size;
2630fd16957SHans de Goede 
2640fd16957SHans de Goede 	/** Disk allocation size (st_blocks * DEV_BSIZE). */
2650fd16957SHans de Goede 	s64 allocated;
2660fd16957SHans de Goede 
2670fd16957SHans de Goede 	/** Time of last access (st_atime). */
2680fd16957SHans de Goede 	struct shfl_timespec access_time;
2690fd16957SHans de Goede 
2700fd16957SHans de Goede 	/** Time of last data modification (st_mtime). */
2710fd16957SHans de Goede 	struct shfl_timespec modification_time;
2720fd16957SHans de Goede 
2730fd16957SHans de Goede 	/**
2740fd16957SHans de Goede 	 * Time of last status change (st_ctime).
2750fd16957SHans de Goede 	 * If not available this is set to modification_time.
2760fd16957SHans de Goede 	 */
2770fd16957SHans de Goede 	struct shfl_timespec change_time;
2780fd16957SHans de Goede 
2790fd16957SHans de Goede 	/**
2800fd16957SHans de Goede 	 * Time of file birth (st_birthtime).
2810fd16957SHans de Goede 	 * If not available this is set to change_time.
2820fd16957SHans de Goede 	 */
2830fd16957SHans de Goede 	struct shfl_timespec birth_time;
2840fd16957SHans de Goede 
2850fd16957SHans de Goede 	/** Attributes. */
2860fd16957SHans de Goede 	struct shfl_fsobjattr attr;
2870fd16957SHans de Goede 
2880fd16957SHans de Goede } __packed;
2890fd16957SHans de Goede VMMDEV_ASSERT_SIZE(shfl_fsobjinfo, 92);
2900fd16957SHans de Goede 
2910fd16957SHans de Goede /**
2920fd16957SHans de Goede  * result of an open/create request.
2930fd16957SHans de Goede  * Along with handle value the result code
2940fd16957SHans de Goede  * identifies what has happened while
2950fd16957SHans de Goede  * trying to open the object.
2960fd16957SHans de Goede  */
2970fd16957SHans de Goede enum shfl_create_result {
2980fd16957SHans de Goede 	SHFL_NO_RESULT,
2990fd16957SHans de Goede 	/** Specified path does not exist. */
3000fd16957SHans de Goede 	SHFL_PATH_NOT_FOUND,
3010fd16957SHans de Goede 	/** Path to file exists, but the last component does not. */
3020fd16957SHans de Goede 	SHFL_FILE_NOT_FOUND,
3030fd16957SHans de Goede 	/** File already exists and either has been opened or not. */
3040fd16957SHans de Goede 	SHFL_FILE_EXISTS,
3050fd16957SHans de Goede 	/** New file was created. */
3060fd16957SHans de Goede 	SHFL_FILE_CREATED,
3070fd16957SHans de Goede 	/** Existing file was replaced or overwritten. */
3080fd16957SHans de Goede 	SHFL_FILE_REPLACED
3090fd16957SHans de Goede };
3100fd16957SHans de Goede 
3110fd16957SHans de Goede /* No flags. Initialization value. */
3120fd16957SHans de Goede #define SHFL_CF_NONE                  (0x00000000)
3130fd16957SHans de Goede 
3140fd16957SHans de Goede /*
3150fd16957SHans de Goede  * Only lookup the object, do not return a handle. When this is set all other
3160fd16957SHans de Goede  * flags are ignored.
3170fd16957SHans de Goede  */
3180fd16957SHans de Goede #define SHFL_CF_LOOKUP                (0x00000001)
3190fd16957SHans de Goede 
3200fd16957SHans de Goede /*
3210fd16957SHans de Goede  * Open parent directory of specified object.
3220fd16957SHans de Goede  * Useful for the corresponding Windows FSD flag
3230fd16957SHans de Goede  * and for opening paths like \\dir\\*.* to search the 'dir'.
3240fd16957SHans de Goede  */
3250fd16957SHans de Goede #define SHFL_CF_OPEN_TARGET_DIRECTORY (0x00000002)
3260fd16957SHans de Goede 
3270fd16957SHans de Goede /* Create/open a directory. */
3280fd16957SHans de Goede #define SHFL_CF_DIRECTORY             (0x00000004)
3290fd16957SHans de Goede 
3300fd16957SHans de Goede /*
3310fd16957SHans de Goede  *  Open/create action to do if object exists
3320fd16957SHans de Goede  *  and if the object does not exists.
3330fd16957SHans de Goede  *  REPLACE file means atomically DELETE and CREATE.
3340fd16957SHans de Goede  *  OVERWRITE file means truncating the file to 0 and
3350fd16957SHans de Goede  *  setting new size.
3360fd16957SHans de Goede  *  When opening an existing directory REPLACE and OVERWRITE
3370fd16957SHans de Goede  *  actions are considered invalid, and cause returning
3380fd16957SHans de Goede  *  FILE_EXISTS with NIL handle.
3390fd16957SHans de Goede  */
3400fd16957SHans de Goede #define SHFL_CF_ACT_MASK_IF_EXISTS      (0x000000f0)
3410fd16957SHans de Goede #define SHFL_CF_ACT_MASK_IF_NEW         (0x00000f00)
3420fd16957SHans de Goede 
3430fd16957SHans de Goede /* What to do if object exists. */
3440fd16957SHans de Goede #define SHFL_CF_ACT_OPEN_IF_EXISTS      (0x00000000)
3450fd16957SHans de Goede #define SHFL_CF_ACT_FAIL_IF_EXISTS      (0x00000010)
3460fd16957SHans de Goede #define SHFL_CF_ACT_REPLACE_IF_EXISTS   (0x00000020)
3470fd16957SHans de Goede #define SHFL_CF_ACT_OVERWRITE_IF_EXISTS (0x00000030)
3480fd16957SHans de Goede 
3490fd16957SHans de Goede /* What to do if object does not exist. */
3500fd16957SHans de Goede #define SHFL_CF_ACT_CREATE_IF_NEW       (0x00000000)
3510fd16957SHans de Goede #define SHFL_CF_ACT_FAIL_IF_NEW         (0x00000100)
3520fd16957SHans de Goede 
3530fd16957SHans de Goede /* Read/write requested access for the object. */
3540fd16957SHans de Goede #define SHFL_CF_ACCESS_MASK_RW          (0x00003000)
3550fd16957SHans de Goede 
3560fd16957SHans de Goede /* No access requested. */
3570fd16957SHans de Goede #define SHFL_CF_ACCESS_NONE             (0x00000000)
3580fd16957SHans de Goede /* Read access requested. */
3590fd16957SHans de Goede #define SHFL_CF_ACCESS_READ             (0x00001000)
3600fd16957SHans de Goede /* Write access requested. */
3610fd16957SHans de Goede #define SHFL_CF_ACCESS_WRITE            (0x00002000)
3620fd16957SHans de Goede /* Read/Write access requested. */
3630fd16957SHans de Goede #define SHFL_CF_ACCESS_READWRITE	(0x00003000)
3640fd16957SHans de Goede 
3650fd16957SHans de Goede /* Requested share access for the object. */
3660fd16957SHans de Goede #define SHFL_CF_ACCESS_MASK_DENY        (0x0000c000)
3670fd16957SHans de Goede 
3680fd16957SHans de Goede /* Allow any access. */
3690fd16957SHans de Goede #define SHFL_CF_ACCESS_DENYNONE         (0x00000000)
3700fd16957SHans de Goede /* Do not allow read. */
3710fd16957SHans de Goede #define SHFL_CF_ACCESS_DENYREAD         (0x00004000)
3720fd16957SHans de Goede /* Do not allow write. */
3730fd16957SHans de Goede #define SHFL_CF_ACCESS_DENYWRITE        (0x00008000)
3740fd16957SHans de Goede /* Do not allow access. */
3750fd16957SHans de Goede #define SHFL_CF_ACCESS_DENYALL          (0x0000c000)
3760fd16957SHans de Goede 
3770fd16957SHans de Goede /* Requested access to attributes of the object. */
3780fd16957SHans de Goede #define SHFL_CF_ACCESS_MASK_ATTR        (0x00030000)
3790fd16957SHans de Goede 
3800fd16957SHans de Goede /* No access requested. */
3810fd16957SHans de Goede #define SHFL_CF_ACCESS_ATTR_NONE        (0x00000000)
3820fd16957SHans de Goede /* Read access requested. */
3830fd16957SHans de Goede #define SHFL_CF_ACCESS_ATTR_READ        (0x00010000)
3840fd16957SHans de Goede /* Write access requested. */
3850fd16957SHans de Goede #define SHFL_CF_ACCESS_ATTR_WRITE       (0x00020000)
3860fd16957SHans de Goede /* Read/Write access requested. */
3870fd16957SHans de Goede #define SHFL_CF_ACCESS_ATTR_READWRITE   (0x00030000)
3880fd16957SHans de Goede 
3890fd16957SHans de Goede /*
3900fd16957SHans de Goede  * The file is opened in append mode.
3910fd16957SHans de Goede  * Ignored if SHFL_CF_ACCESS_WRITE is not set.
3920fd16957SHans de Goede  */
3930fd16957SHans de Goede #define SHFL_CF_ACCESS_APPEND           (0x00040000)
3940fd16957SHans de Goede 
3950fd16957SHans de Goede /** Create parameters buffer struct for SHFL_FN_CREATE call */
3960fd16957SHans de Goede struct shfl_createparms {
3970fd16957SHans de Goede 	/** Returned handle of opened object. */
3980fd16957SHans de Goede 	u64 handle;
3990fd16957SHans de Goede 
4000fd16957SHans de Goede 	/** Returned result of the operation */
4010fd16957SHans de Goede 	enum shfl_create_result result;
4020fd16957SHans de Goede 
4030fd16957SHans de Goede 	/** SHFL_CF_* */
4040fd16957SHans de Goede 	u32 create_flags;
4050fd16957SHans de Goede 
4060fd16957SHans de Goede 	/**
4070fd16957SHans de Goede 	 * Attributes of object to create and
4080fd16957SHans de Goede 	 * returned actual attributes of opened/created object.
4090fd16957SHans de Goede 	 */
4100fd16957SHans de Goede 	struct shfl_fsobjinfo info;
4110fd16957SHans de Goede } __packed;
4120fd16957SHans de Goede 
4130fd16957SHans de Goede /** Shared Folder directory information */
4140fd16957SHans de Goede struct shfl_dirinfo {
4150fd16957SHans de Goede 	/** Full information about the object. */
4160fd16957SHans de Goede 	struct shfl_fsobjinfo info;
4170fd16957SHans de Goede 	/**
4180fd16957SHans de Goede 	 * The length of the short field (number of UTF16 chars).
4190fd16957SHans de Goede 	 * It is 16-bit for reasons of alignment.
4200fd16957SHans de Goede 	 */
4210fd16957SHans de Goede 	u16 short_name_len;
4220fd16957SHans de Goede 	/**
4230fd16957SHans de Goede 	 * The short name for 8.3 compatibility.
4240fd16957SHans de Goede 	 * Empty string if not available.
4250fd16957SHans de Goede 	 */
4260fd16957SHans de Goede 	u16 short_name[14];
4270fd16957SHans de Goede 	struct shfl_string name;
4280fd16957SHans de Goede };
4290fd16957SHans de Goede 
4300fd16957SHans de Goede /** Shared folder filesystem properties. */
4310fd16957SHans de Goede struct shfl_fsproperties {
4320fd16957SHans de Goede 	/**
4330fd16957SHans de Goede 	 * The maximum size of a filesystem object name.
4340fd16957SHans de Goede 	 * This does not include the '\\0'.
4350fd16957SHans de Goede 	 */
4360fd16957SHans de Goede 	u32 max_component_len;
4370fd16957SHans de Goede 
4380fd16957SHans de Goede 	/**
4390fd16957SHans de Goede 	 * True if the filesystem is remote.
4400fd16957SHans de Goede 	 * False if the filesystem is local.
4410fd16957SHans de Goede 	 */
4420fd16957SHans de Goede 	bool remote;
4430fd16957SHans de Goede 
4440fd16957SHans de Goede 	/**
4450fd16957SHans de Goede 	 * True if the filesystem is case sensitive.
4460fd16957SHans de Goede 	 * False if the filesystem is case insensitive.
4470fd16957SHans de Goede 	 */
4480fd16957SHans de Goede 	bool case_sensitive;
4490fd16957SHans de Goede 
4500fd16957SHans de Goede 	/**
4510fd16957SHans de Goede 	 * True if the filesystem is mounted read only.
4520fd16957SHans de Goede 	 * False if the filesystem is mounted read write.
4530fd16957SHans de Goede 	 */
4540fd16957SHans de Goede 	bool read_only;
4550fd16957SHans de Goede 
4560fd16957SHans de Goede 	/**
4570fd16957SHans de Goede 	 * True if the filesystem can encode unicode object names.
4580fd16957SHans de Goede 	 * False if it can't.
4590fd16957SHans de Goede 	 */
4600fd16957SHans de Goede 	bool supports_unicode;
4610fd16957SHans de Goede 
4620fd16957SHans de Goede 	/**
4630fd16957SHans de Goede 	 * True if the filesystem is compresses.
4640fd16957SHans de Goede 	 * False if it isn't or we don't know.
4650fd16957SHans de Goede 	 */
4660fd16957SHans de Goede 	bool compressed;
4670fd16957SHans de Goede 
4680fd16957SHans de Goede 	/**
4690fd16957SHans de Goede 	 * True if the filesystem compresses of individual files.
4700fd16957SHans de Goede 	 * False if it doesn't or we don't know.
4710fd16957SHans de Goede 	 */
4720fd16957SHans de Goede 	bool file_compression;
4730fd16957SHans de Goede };
4740fd16957SHans de Goede VMMDEV_ASSERT_SIZE(shfl_fsproperties, 12);
4750fd16957SHans de Goede 
4760fd16957SHans de Goede struct shfl_volinfo {
4770fd16957SHans de Goede 	s64 total_allocation_bytes;
4780fd16957SHans de Goede 	s64 available_allocation_bytes;
4790fd16957SHans de Goede 	u32 bytes_per_allocation_unit;
4800fd16957SHans de Goede 	u32 bytes_per_sector;
4810fd16957SHans de Goede 	u32 serial;
4820fd16957SHans de Goede 	struct shfl_fsproperties properties;
4830fd16957SHans de Goede };
4840fd16957SHans de Goede 
4850fd16957SHans de Goede 
4860fd16957SHans de Goede /** SHFL_FN_MAP_FOLDER Parameters structure. */
4870fd16957SHans de Goede struct shfl_map_folder {
4880fd16957SHans de Goede 	/**
4890fd16957SHans de Goede 	 * pointer, in:
4900fd16957SHans de Goede 	 * Points to struct shfl_string buffer.
4910fd16957SHans de Goede 	 */
4920fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter path;
4930fd16957SHans de Goede 
4940fd16957SHans de Goede 	/**
4950fd16957SHans de Goede 	 * pointer, out: SHFLROOT (u32)
4960fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
4970fd16957SHans de Goede 	 */
4980fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
4990fd16957SHans de Goede 
5000fd16957SHans de Goede 	/**
5010fd16957SHans de Goede 	 * pointer, in: UTF16
5020fd16957SHans de Goede 	 * Path delimiter
5030fd16957SHans de Goede 	 */
5040fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter delimiter;
5050fd16957SHans de Goede 
5060fd16957SHans de Goede 	/**
5070fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
5080fd16957SHans de Goede 	 * Case senstive flag
5090fd16957SHans de Goede 	 */
5100fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter case_sensitive;
5110fd16957SHans de Goede 
5120fd16957SHans de Goede };
5130fd16957SHans de Goede 
5140fd16957SHans de Goede /* Number of parameters */
5150fd16957SHans de Goede #define SHFL_CPARMS_MAP_FOLDER (4)
5160fd16957SHans de Goede 
5170fd16957SHans de Goede 
5180fd16957SHans de Goede /** SHFL_FN_UNMAP_FOLDER Parameters structure. */
5190fd16957SHans de Goede struct shfl_unmap_folder {
5200fd16957SHans de Goede 	/**
5210fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
5220fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
5230fd16957SHans de Goede 	 */
5240fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
5250fd16957SHans de Goede 
5260fd16957SHans de Goede };
5270fd16957SHans de Goede 
5280fd16957SHans de Goede /* Number of parameters */
5290fd16957SHans de Goede #define SHFL_CPARMS_UNMAP_FOLDER (1)
5300fd16957SHans de Goede 
5310fd16957SHans de Goede 
5320fd16957SHans de Goede /** SHFL_FN_CREATE Parameters structure. */
5330fd16957SHans de Goede struct shfl_create {
5340fd16957SHans de Goede 	/**
5350fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
5360fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
5370fd16957SHans de Goede 	 */
5380fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
5390fd16957SHans de Goede 
5400fd16957SHans de Goede 	/**
5410fd16957SHans de Goede 	 * pointer, in:
5420fd16957SHans de Goede 	 * Points to struct shfl_string buffer.
5430fd16957SHans de Goede 	 */
5440fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter path;
5450fd16957SHans de Goede 
5460fd16957SHans de Goede 	/**
5470fd16957SHans de Goede 	 * pointer, in/out:
5480fd16957SHans de Goede 	 * Points to struct shfl_createparms buffer.
5490fd16957SHans de Goede 	 */
5500fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter parms;
5510fd16957SHans de Goede 
5520fd16957SHans de Goede };
5530fd16957SHans de Goede 
5540fd16957SHans de Goede /* Number of parameters */
5550fd16957SHans de Goede #define SHFL_CPARMS_CREATE (3)
5560fd16957SHans de Goede 
5570fd16957SHans de Goede 
5580fd16957SHans de Goede /** SHFL_FN_CLOSE Parameters structure. */
5590fd16957SHans de Goede struct shfl_close {
5600fd16957SHans de Goede 	/**
5610fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
5620fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
5630fd16957SHans de Goede 	 */
5640fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
5650fd16957SHans de Goede 
5660fd16957SHans de Goede 	/**
5670fd16957SHans de Goede 	 * value64, in:
5680fd16957SHans de Goede 	 * SHFLHANDLE (u64) of object to close.
5690fd16957SHans de Goede 	 */
5700fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter handle;
5710fd16957SHans de Goede 
5720fd16957SHans de Goede };
5730fd16957SHans de Goede 
5740fd16957SHans de Goede /* Number of parameters */
5750fd16957SHans de Goede #define SHFL_CPARMS_CLOSE (2)
5760fd16957SHans de Goede 
5770fd16957SHans de Goede 
5780fd16957SHans de Goede /** SHFL_FN_READ Parameters structure. */
5790fd16957SHans de Goede struct shfl_read {
5800fd16957SHans de Goede 	/**
5810fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
5820fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
5830fd16957SHans de Goede 	 */
5840fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
5850fd16957SHans de Goede 
5860fd16957SHans de Goede 	/**
5870fd16957SHans de Goede 	 * value64, in:
5880fd16957SHans de Goede 	 * SHFLHANDLE (u64) of object to read from.
5890fd16957SHans de Goede 	 */
5900fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter handle;
5910fd16957SHans de Goede 
5920fd16957SHans de Goede 	/**
5930fd16957SHans de Goede 	 * value64, in:
5940fd16957SHans de Goede 	 * Offset to read from.
5950fd16957SHans de Goede 	 */
5960fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter offset;
5970fd16957SHans de Goede 
5980fd16957SHans de Goede 	/**
5990fd16957SHans de Goede 	 * value64, in/out:
6000fd16957SHans de Goede 	 * Bytes to read/How many were read.
6010fd16957SHans de Goede 	 */
6020fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter cb;
6030fd16957SHans de Goede 
6040fd16957SHans de Goede 	/**
6050fd16957SHans de Goede 	 * pointer, out:
6060fd16957SHans de Goede 	 * Buffer to place data to.
6070fd16957SHans de Goede 	 */
6080fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter buffer;
6090fd16957SHans de Goede 
6100fd16957SHans de Goede };
6110fd16957SHans de Goede 
6120fd16957SHans de Goede /* Number of parameters */
6130fd16957SHans de Goede #define SHFL_CPARMS_READ (5)
6140fd16957SHans de Goede 
6150fd16957SHans de Goede 
6160fd16957SHans de Goede /** SHFL_FN_WRITE Parameters structure. */
6170fd16957SHans de Goede struct shfl_write {
6180fd16957SHans de Goede 	/**
6190fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
6200fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
6210fd16957SHans de Goede 	 */
6220fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
6230fd16957SHans de Goede 
6240fd16957SHans de Goede 	/**
6250fd16957SHans de Goede 	 * value64, in:
6260fd16957SHans de Goede 	 * SHFLHANDLE (u64) of object to write to.
6270fd16957SHans de Goede 	 */
6280fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter handle;
6290fd16957SHans de Goede 
6300fd16957SHans de Goede 	/**
6310fd16957SHans de Goede 	 * value64, in:
6320fd16957SHans de Goede 	 * Offset to write to.
6330fd16957SHans de Goede 	 */
6340fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter offset;
6350fd16957SHans de Goede 
6360fd16957SHans de Goede 	/**
6370fd16957SHans de Goede 	 * value64, in/out:
6380fd16957SHans de Goede 	 * Bytes to write/How many were written.
6390fd16957SHans de Goede 	 */
6400fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter cb;
6410fd16957SHans de Goede 
6420fd16957SHans de Goede 	/**
6430fd16957SHans de Goede 	 * pointer, in:
6440fd16957SHans de Goede 	 * Data to write.
6450fd16957SHans de Goede 	 */
6460fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter buffer;
6470fd16957SHans de Goede 
6480fd16957SHans de Goede };
6490fd16957SHans de Goede 
6500fd16957SHans de Goede /* Number of parameters */
6510fd16957SHans de Goede #define SHFL_CPARMS_WRITE (5)
6520fd16957SHans de Goede 
6530fd16957SHans de Goede 
6540fd16957SHans de Goede /*
6550fd16957SHans de Goede  * SHFL_FN_LIST
6560fd16957SHans de Goede  * Listing information includes variable length RTDIRENTRY[EX] structures.
6570fd16957SHans de Goede  */
6580fd16957SHans de Goede 
6590fd16957SHans de Goede #define SHFL_LIST_NONE			0
6600fd16957SHans de Goede #define SHFL_LIST_RETURN_ONE		1
6610fd16957SHans de Goede 
6620fd16957SHans de Goede /** SHFL_FN_LIST Parameters structure. */
6630fd16957SHans de Goede struct shfl_list {
6640fd16957SHans de Goede 	/**
6650fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
6660fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
6670fd16957SHans de Goede 	 */
6680fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
6690fd16957SHans de Goede 
6700fd16957SHans de Goede 	/**
6710fd16957SHans de Goede 	 * value64, in:
6720fd16957SHans de Goede 	 * SHFLHANDLE (u64) of object to be listed.
6730fd16957SHans de Goede 	 */
6740fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter handle;
6750fd16957SHans de Goede 
6760fd16957SHans de Goede 	/**
6770fd16957SHans de Goede 	 * value32, in:
6780fd16957SHans de Goede 	 * List flags SHFL_LIST_*.
6790fd16957SHans de Goede 	 */
6800fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter flags;
6810fd16957SHans de Goede 
6820fd16957SHans de Goede 	/**
6830fd16957SHans de Goede 	 * value32, in/out:
6840fd16957SHans de Goede 	 * Bytes to be used for listing information/How many bytes were used.
6850fd16957SHans de Goede 	 */
6860fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter cb;
6870fd16957SHans de Goede 
6880fd16957SHans de Goede 	/**
6890fd16957SHans de Goede 	 * pointer, in/optional
6900fd16957SHans de Goede 	 * Points to struct shfl_string buffer that specifies a search path.
6910fd16957SHans de Goede 	 */
6920fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter path;
6930fd16957SHans de Goede 
6940fd16957SHans de Goede 	/**
6950fd16957SHans de Goede 	 * pointer, out:
6960fd16957SHans de Goede 	 * Buffer to place listing information to. (struct shfl_dirinfo)
6970fd16957SHans de Goede 	 */
6980fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter buffer;
6990fd16957SHans de Goede 
7000fd16957SHans de Goede 	/**
7010fd16957SHans de Goede 	 * value32, in/out:
7020fd16957SHans de Goede 	 * Indicates a key where the listing must be resumed.
7030fd16957SHans de Goede 	 * in: 0 means start from begin of object.
7040fd16957SHans de Goede 	 * out: 0 means listing completed.
7050fd16957SHans de Goede 	 */
7060fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter resume_point;
7070fd16957SHans de Goede 
7080fd16957SHans de Goede 	/**
7090fd16957SHans de Goede 	 * pointer, out:
7100fd16957SHans de Goede 	 * Number of files returned
7110fd16957SHans de Goede 	 */
7120fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter file_count;
7130fd16957SHans de Goede };
7140fd16957SHans de Goede 
7150fd16957SHans de Goede /* Number of parameters */
7160fd16957SHans de Goede #define SHFL_CPARMS_LIST (8)
7170fd16957SHans de Goede 
7180fd16957SHans de Goede 
7190fd16957SHans de Goede /** SHFL_FN_READLINK Parameters structure. */
7200fd16957SHans de Goede struct shfl_readLink {
7210fd16957SHans de Goede 	/**
7220fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
7230fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
7240fd16957SHans de Goede 	 */
7250fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
7260fd16957SHans de Goede 
7270fd16957SHans de Goede 	/**
7280fd16957SHans de Goede 	 * pointer, in:
7290fd16957SHans de Goede 	 * Points to struct shfl_string buffer.
7300fd16957SHans de Goede 	 */
7310fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter path;
7320fd16957SHans de Goede 
7330fd16957SHans de Goede 	/**
7340fd16957SHans de Goede 	 * pointer, out:
7350fd16957SHans de Goede 	 * Buffer to place data to.
7360fd16957SHans de Goede 	 */
7370fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter buffer;
7380fd16957SHans de Goede 
7390fd16957SHans de Goede };
7400fd16957SHans de Goede 
7410fd16957SHans de Goede /* Number of parameters */
7420fd16957SHans de Goede #define SHFL_CPARMS_READLINK (3)
7430fd16957SHans de Goede 
7440fd16957SHans de Goede 
7450fd16957SHans de Goede /* SHFL_FN_INFORMATION */
7460fd16957SHans de Goede 
7470fd16957SHans de Goede /* Mask of Set/Get bit. */
7480fd16957SHans de Goede #define SHFL_INFO_MODE_MASK    (0x1)
7490fd16957SHans de Goede /* Get information */
7500fd16957SHans de Goede #define SHFL_INFO_GET          (0x0)
7510fd16957SHans de Goede /* Set information */
7520fd16957SHans de Goede #define SHFL_INFO_SET          (0x1)
7530fd16957SHans de Goede 
7540fd16957SHans de Goede /* Get name of the object. */
7550fd16957SHans de Goede #define SHFL_INFO_NAME         (0x2)
7560fd16957SHans de Goede /* Set size of object (extend/trucate); only applies to file objects */
7570fd16957SHans de Goede #define SHFL_INFO_SIZE         (0x4)
7580fd16957SHans de Goede /* Get/Set file object info. */
7590fd16957SHans de Goede #define SHFL_INFO_FILE         (0x8)
7600fd16957SHans de Goede /* Get volume information. */
7610fd16957SHans de Goede #define SHFL_INFO_VOLUME       (0x10)
7620fd16957SHans de Goede 
7630fd16957SHans de Goede /** SHFL_FN_INFORMATION Parameters structure. */
7640fd16957SHans de Goede struct shfl_information {
7650fd16957SHans de Goede 	/**
7660fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
7670fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
7680fd16957SHans de Goede 	 */
7690fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
7700fd16957SHans de Goede 
7710fd16957SHans de Goede 	/**
7720fd16957SHans de Goede 	 * value64, in:
7730fd16957SHans de Goede 	 * SHFLHANDLE (u64) of object to be listed.
7740fd16957SHans de Goede 	 */
7750fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter handle;
7760fd16957SHans de Goede 
7770fd16957SHans de Goede 	/**
7780fd16957SHans de Goede 	 * value32, in:
7790fd16957SHans de Goede 	 * SHFL_INFO_*
7800fd16957SHans de Goede 	 */
7810fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter flags;
7820fd16957SHans de Goede 
7830fd16957SHans de Goede 	/**
7840fd16957SHans de Goede 	 * value32, in/out:
7850fd16957SHans de Goede 	 * Bytes to be used for information/How many bytes were used.
7860fd16957SHans de Goede 	 */
7870fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter cb;
7880fd16957SHans de Goede 
7890fd16957SHans de Goede 	/**
7900fd16957SHans de Goede 	 * pointer, in/out:
7910fd16957SHans de Goede 	 * Information to be set/get (shfl_fsobjinfo or shfl_string). Do not
7920fd16957SHans de Goede 	 * forget to set the shfl_fsobjinfo::attr::additional for a get
7930fd16957SHans de Goede 	 * operation as well.
7940fd16957SHans de Goede 	 */
7950fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter info;
7960fd16957SHans de Goede 
7970fd16957SHans de Goede };
7980fd16957SHans de Goede 
7990fd16957SHans de Goede /* Number of parameters */
8000fd16957SHans de Goede #define SHFL_CPARMS_INFORMATION (5)
8010fd16957SHans de Goede 
8020fd16957SHans de Goede 
8030fd16957SHans de Goede /* SHFL_FN_REMOVE */
8040fd16957SHans de Goede 
8050fd16957SHans de Goede #define SHFL_REMOVE_FILE        (0x1)
8060fd16957SHans de Goede #define SHFL_REMOVE_DIR         (0x2)
8070fd16957SHans de Goede #define SHFL_REMOVE_SYMLINK     (0x4)
8080fd16957SHans de Goede 
8090fd16957SHans de Goede /** SHFL_FN_REMOVE Parameters structure. */
8100fd16957SHans de Goede struct shfl_remove {
8110fd16957SHans de Goede 	/**
8120fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
8130fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
8140fd16957SHans de Goede 	 */
8150fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
8160fd16957SHans de Goede 
8170fd16957SHans de Goede 	/**
8180fd16957SHans de Goede 	 * pointer, in:
8190fd16957SHans de Goede 	 * Points to struct shfl_string buffer.
8200fd16957SHans de Goede 	 */
8210fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter path;
8220fd16957SHans de Goede 
8230fd16957SHans de Goede 	/**
8240fd16957SHans de Goede 	 * value32, in:
8250fd16957SHans de Goede 	 * remove flags (file/directory)
8260fd16957SHans de Goede 	 */
8270fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter flags;
8280fd16957SHans de Goede 
8290fd16957SHans de Goede };
8300fd16957SHans de Goede 
8310fd16957SHans de Goede #define SHFL_CPARMS_REMOVE  (3)
8320fd16957SHans de Goede 
8330fd16957SHans de Goede 
8340fd16957SHans de Goede /* SHFL_FN_RENAME */
8350fd16957SHans de Goede 
8360fd16957SHans de Goede #define SHFL_RENAME_FILE                (0x1)
8370fd16957SHans de Goede #define SHFL_RENAME_DIR                 (0x2)
8380fd16957SHans de Goede #define SHFL_RENAME_REPLACE_IF_EXISTS   (0x4)
8390fd16957SHans de Goede 
8400fd16957SHans de Goede /** SHFL_FN_RENAME Parameters structure. */
8410fd16957SHans de Goede struct shfl_rename {
8420fd16957SHans de Goede 	/**
8430fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
8440fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
8450fd16957SHans de Goede 	 */
8460fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
8470fd16957SHans de Goede 
8480fd16957SHans de Goede 	/**
8490fd16957SHans de Goede 	 * pointer, in:
8500fd16957SHans de Goede 	 * Points to struct shfl_string src.
8510fd16957SHans de Goede 	 */
8520fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter src;
8530fd16957SHans de Goede 
8540fd16957SHans de Goede 	/**
8550fd16957SHans de Goede 	 * pointer, in:
8560fd16957SHans de Goede 	 * Points to struct shfl_string dest.
8570fd16957SHans de Goede 	 */
8580fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter dest;
8590fd16957SHans de Goede 
8600fd16957SHans de Goede 	/**
8610fd16957SHans de Goede 	 * value32, in:
8620fd16957SHans de Goede 	 * rename flags (file/directory)
8630fd16957SHans de Goede 	 */
8640fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter flags;
8650fd16957SHans de Goede 
8660fd16957SHans de Goede };
8670fd16957SHans de Goede 
8680fd16957SHans de Goede #define SHFL_CPARMS_RENAME  (4)
8690fd16957SHans de Goede 
8700fd16957SHans de Goede 
8710fd16957SHans de Goede /** SHFL_FN_SYMLINK Parameters structure. */
8720fd16957SHans de Goede struct shfl_symlink {
8730fd16957SHans de Goede 	/**
8740fd16957SHans de Goede 	 * pointer, in: SHFLROOT (u32)
8750fd16957SHans de Goede 	 * Root handle of the mapping which name is queried.
8760fd16957SHans de Goede 	 */
8770fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter root;
8780fd16957SHans de Goede 
8790fd16957SHans de Goede 	/**
8800fd16957SHans de Goede 	 * pointer, in:
8810fd16957SHans de Goede 	 * Points to struct shfl_string of path for the new symlink.
8820fd16957SHans de Goede 	 */
8830fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter new_path;
8840fd16957SHans de Goede 
8850fd16957SHans de Goede 	/**
8860fd16957SHans de Goede 	 * pointer, in:
8870fd16957SHans de Goede 	 * Points to struct shfl_string of destination for symlink.
8880fd16957SHans de Goede 	 */
8890fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter old_path;
8900fd16957SHans de Goede 
8910fd16957SHans de Goede 	/**
8920fd16957SHans de Goede 	 * pointer, out:
8930fd16957SHans de Goede 	 * Information about created symlink.
8940fd16957SHans de Goede 	 */
8950fd16957SHans de Goede 	struct vmmdev_hgcm_function_parameter info;
8960fd16957SHans de Goede 
8970fd16957SHans de Goede };
8980fd16957SHans de Goede 
8990fd16957SHans de Goede #define SHFL_CPARMS_SYMLINK  (4)
9000fd16957SHans de Goede 
9010fd16957SHans de Goede #endif
902