shfl_hostintf.h (22525B)
1/* SPDX-License-Identifier: MIT */ 2/* 3 * VirtualBox Shared Folders: host interface definition. 4 * 5 * Copyright (C) 2006-2018 Oracle Corporation 6 */ 7 8#ifndef SHFL_HOSTINTF_H 9#define SHFL_HOSTINTF_H 10 11#include <linux/vbox_vmmdev_types.h> 12 13/* The max in/out buffer size for a FN_READ or FN_WRITE call */ 14#define SHFL_MAX_RW_COUNT (16 * SZ_1M) 15 16/* 17 * Structures shared between guest and the service 18 * can be relocated and use offsets to point to variable 19 * length parts. 20 * 21 * Shared folders protocol works with handles. 22 * Before doing any action on a file system object, 23 * one have to obtain the object handle via a SHFL_FN_CREATE 24 * request. A handle must be closed with SHFL_FN_CLOSE. 25 */ 26 27enum { 28 SHFL_FN_QUERY_MAPPINGS = 1, /* Query mappings changes. */ 29 SHFL_FN_QUERY_MAP_NAME = 2, /* Query map name. */ 30 SHFL_FN_CREATE = 3, /* Open/create object. */ 31 SHFL_FN_CLOSE = 4, /* Close object handle. */ 32 SHFL_FN_READ = 5, /* Read object content. */ 33 SHFL_FN_WRITE = 6, /* Write new object content. */ 34 SHFL_FN_LOCK = 7, /* Lock/unlock a range in the object. */ 35 SHFL_FN_LIST = 8, /* List object content. */ 36 SHFL_FN_INFORMATION = 9, /* Query/set object information. */ 37 /* Note function number 10 is not used! */ 38 SHFL_FN_REMOVE = 11, /* Remove object */ 39 SHFL_FN_MAP_FOLDER_OLD = 12, /* Map folder (legacy) */ 40 SHFL_FN_UNMAP_FOLDER = 13, /* Unmap folder */ 41 SHFL_FN_RENAME = 14, /* Rename object */ 42 SHFL_FN_FLUSH = 15, /* Flush file */ 43 SHFL_FN_SET_UTF8 = 16, /* Select UTF8 filename encoding */ 44 SHFL_FN_MAP_FOLDER = 17, /* Map folder */ 45 SHFL_FN_READLINK = 18, /* Read symlink dest (as of VBox 4.0) */ 46 SHFL_FN_SYMLINK = 19, /* Create symlink (as of VBox 4.0) */ 47 SHFL_FN_SET_SYMLINKS = 20, /* Ask host to show symlinks (4.0+) */ 48}; 49 50/* Root handles for a mapping are of type u32, Root handles are unique. */ 51#define SHFL_ROOT_NIL UINT_MAX 52 53/* Shared folders handle for an opened object are of type u64. */ 54#define SHFL_HANDLE_NIL ULLONG_MAX 55 56/* Hardcoded maximum length (in chars) of a shared folder name. */ 57#define SHFL_MAX_LEN (256) 58/* Hardcoded maximum number of shared folder mapping available to the guest. */ 59#define SHFL_MAX_MAPPINGS (64) 60 61/** Shared folder string buffer structure. */ 62struct shfl_string { 63 /** Allocated size of the string member in bytes. */ 64 u16 size; 65 66 /** Length of string without trailing nul in bytes. */ 67 u16 length; 68 69 /** UTF-8 or UTF-16 string. Nul terminated. */ 70 union { 71 u8 utf8[2]; 72 u16 utf16[1]; 73 u16 ucs2[1]; /* misnomer, use utf16. */ 74 } string; 75}; 76VMMDEV_ASSERT_SIZE(shfl_string, 6); 77 78/* The size of shfl_string w/o the string part. */ 79#define SHFLSTRING_HEADER_SIZE 4 80 81/* Calculate size of the string. */ 82static inline u32 shfl_string_buf_size(const struct shfl_string *string) 83{ 84 return string ? SHFLSTRING_HEADER_SIZE + string->size : 0; 85} 86 87/* Set user id on execution (S_ISUID). */ 88#define SHFL_UNIX_ISUID 0004000U 89/* Set group id on execution (S_ISGID). */ 90#define SHFL_UNIX_ISGID 0002000U 91/* Sticky bit (S_ISVTX / S_ISTXT). */ 92#define SHFL_UNIX_ISTXT 0001000U 93 94/* Owner readable (S_IRUSR). */ 95#define SHFL_UNIX_IRUSR 0000400U 96/* Owner writable (S_IWUSR). */ 97#define SHFL_UNIX_IWUSR 0000200U 98/* Owner executable (S_IXUSR). */ 99#define SHFL_UNIX_IXUSR 0000100U 100 101/* Group readable (S_IRGRP). */ 102#define SHFL_UNIX_IRGRP 0000040U 103/* Group writable (S_IWGRP). */ 104#define SHFL_UNIX_IWGRP 0000020U 105/* Group executable (S_IXGRP). */ 106#define SHFL_UNIX_IXGRP 0000010U 107 108/* Other readable (S_IROTH). */ 109#define SHFL_UNIX_IROTH 0000004U 110/* Other writable (S_IWOTH). */ 111#define SHFL_UNIX_IWOTH 0000002U 112/* Other executable (S_IXOTH). */ 113#define SHFL_UNIX_IXOTH 0000001U 114 115/* Named pipe (fifo) (S_IFIFO). */ 116#define SHFL_TYPE_FIFO 0010000U 117/* Character device (S_IFCHR). */ 118#define SHFL_TYPE_DEV_CHAR 0020000U 119/* Directory (S_IFDIR). */ 120#define SHFL_TYPE_DIRECTORY 0040000U 121/* Block device (S_IFBLK). */ 122#define SHFL_TYPE_DEV_BLOCK 0060000U 123/* Regular file (S_IFREG). */ 124#define SHFL_TYPE_FILE 0100000U 125/* Symbolic link (S_IFLNK). */ 126#define SHFL_TYPE_SYMLINK 0120000U 127/* Socket (S_IFSOCK). */ 128#define SHFL_TYPE_SOCKET 0140000U 129/* Whiteout (S_IFWHT). */ 130#define SHFL_TYPE_WHITEOUT 0160000U 131/* Type mask (S_IFMT). */ 132#define SHFL_TYPE_MASK 0170000U 133 134/* Checks the mode flags indicate a directory (S_ISDIR). */ 135#define SHFL_IS_DIRECTORY(m) (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_DIRECTORY) 136/* Checks the mode flags indicate a symbolic link (S_ISLNK). */ 137#define SHFL_IS_SYMLINK(m) (((m) & SHFL_TYPE_MASK) == SHFL_TYPE_SYMLINK) 138 139/** The available additional information in a shfl_fsobjattr object. */ 140enum shfl_fsobjattr_add { 141 /** No additional information is available / requested. */ 142 SHFLFSOBJATTRADD_NOTHING = 1, 143 /** 144 * The additional unix attributes (shfl_fsobjattr::u::unix_attr) are 145 * available / requested. 146 */ 147 SHFLFSOBJATTRADD_UNIX, 148 /** 149 * The additional extended attribute size (shfl_fsobjattr::u::size) is 150 * available / requested. 151 */ 152 SHFLFSOBJATTRADD_EASIZE, 153 /** 154 * The last valid item (inclusive). 155 * The valid range is SHFLFSOBJATTRADD_NOTHING thru 156 * SHFLFSOBJATTRADD_LAST. 157 */ 158 SHFLFSOBJATTRADD_LAST = SHFLFSOBJATTRADD_EASIZE, 159 160 /** The usual 32-bit hack. */ 161 SHFLFSOBJATTRADD_32BIT_SIZE_HACK = 0x7fffffff 162}; 163 164/** 165 * Additional unix Attributes, these are available when 166 * shfl_fsobjattr.additional == SHFLFSOBJATTRADD_UNIX. 167 */ 168struct shfl_fsobjattr_unix { 169 /** 170 * The user owning the filesystem object (st_uid). 171 * This field is ~0U if not supported. 172 */ 173 u32 uid; 174 175 /** 176 * The group the filesystem object is assigned (st_gid). 177 * This field is ~0U if not supported. 178 */ 179 u32 gid; 180 181 /** 182 * Number of hard links to this filesystem object (st_nlink). 183 * This field is 1 if the filesystem doesn't support hardlinking or 184 * the information isn't available. 185 */ 186 u32 hardlinks; 187 188 /** 189 * The device number of the device which this filesystem object resides 190 * on (st_dev). This field is 0 if this information is not available. 191 */ 192 u32 inode_id_device; 193 194 /** 195 * The unique identifier (within the filesystem) of this filesystem 196 * object (st_ino). Together with inode_id_device, this field can be 197 * used as a OS wide unique id, when both their values are not 0. 198 * This field is 0 if the information is not available. 199 */ 200 u64 inode_id; 201 202 /** 203 * User flags (st_flags). 204 * This field is 0 if this information is not available. 205 */ 206 u32 flags; 207 208 /** 209 * The current generation number (st_gen). 210 * This field is 0 if this information is not available. 211 */ 212 u32 generation_id; 213 214 /** 215 * The device number of a char. or block device type object (st_rdev). 216 * This field is 0 if the file isn't a char. or block device or when 217 * the OS doesn't use the major+minor device idenfication scheme. 218 */ 219 u32 device; 220} __packed; 221 222/** Extended attribute size. */ 223struct shfl_fsobjattr_easize { 224 /** Size of EAs. */ 225 s64 cb; 226} __packed; 227 228/** Shared folder filesystem object attributes. */ 229struct shfl_fsobjattr { 230 /** Mode flags (st_mode). SHFL_UNIX_*, SHFL_TYPE_*, and SHFL_DOS_*. */ 231 u32 mode; 232 233 /** The additional attributes available. */ 234 enum shfl_fsobjattr_add additional; 235 236 /** 237 * Additional attributes. 238 * 239 * Unless explicitly specified to an API, the API can provide additional 240 * data as it is provided by the underlying OS. 241 */ 242 union { 243 struct shfl_fsobjattr_unix unix_attr; 244 struct shfl_fsobjattr_easize size; 245 } __packed u; 246} __packed; 247VMMDEV_ASSERT_SIZE(shfl_fsobjattr, 44); 248 249struct shfl_timespec { 250 s64 ns_relative_to_unix_epoch; 251}; 252 253/** Filesystem object information structure. */ 254struct shfl_fsobjinfo { 255 /** 256 * Logical size (st_size). 257 * For normal files this is the size of the file. 258 * For symbolic links, this is the length of the path name contained 259 * in the symbolic link. 260 * For other objects this fields needs to be specified. 261 */ 262 s64 size; 263 264 /** Disk allocation size (st_blocks * DEV_BSIZE). */ 265 s64 allocated; 266 267 /** Time of last access (st_atime). */ 268 struct shfl_timespec access_time; 269 270 /** Time of last data modification (st_mtime). */ 271 struct shfl_timespec modification_time; 272 273 /** 274 * Time of last status change (st_ctime). 275 * If not available this is set to modification_time. 276 */ 277 struct shfl_timespec change_time; 278 279 /** 280 * Time of file birth (st_birthtime). 281 * If not available this is set to change_time. 282 */ 283 struct shfl_timespec birth_time; 284 285 /** Attributes. */ 286 struct shfl_fsobjattr attr; 287 288} __packed; 289VMMDEV_ASSERT_SIZE(shfl_fsobjinfo, 92); 290 291/** 292 * result of an open/create request. 293 * Along with handle value the result code 294 * identifies what has happened while 295 * trying to open the object. 296 */ 297enum shfl_create_result { 298 SHFL_NO_RESULT, 299 /** Specified path does not exist. */ 300 SHFL_PATH_NOT_FOUND, 301 /** Path to file exists, but the last component does not. */ 302 SHFL_FILE_NOT_FOUND, 303 /** File already exists and either has been opened or not. */ 304 SHFL_FILE_EXISTS, 305 /** New file was created. */ 306 SHFL_FILE_CREATED, 307 /** Existing file was replaced or overwritten. */ 308 SHFL_FILE_REPLACED 309}; 310 311/* No flags. Initialization value. */ 312#define SHFL_CF_NONE (0x00000000) 313 314/* 315 * Only lookup the object, do not return a handle. When this is set all other 316 * flags are ignored. 317 */ 318#define SHFL_CF_LOOKUP (0x00000001) 319 320/* 321 * Open parent directory of specified object. 322 * Useful for the corresponding Windows FSD flag 323 * and for opening paths like \\dir\\*.* to search the 'dir'. 324 */ 325#define SHFL_CF_OPEN_TARGET_DIRECTORY (0x00000002) 326 327/* Create/open a directory. */ 328#define SHFL_CF_DIRECTORY (0x00000004) 329 330/* 331 * Open/create action to do if object exists 332 * and if the object does not exists. 333 * REPLACE file means atomically DELETE and CREATE. 334 * OVERWRITE file means truncating the file to 0 and 335 * setting new size. 336 * When opening an existing directory REPLACE and OVERWRITE 337 * actions are considered invalid, and cause returning 338 * FILE_EXISTS with NIL handle. 339 */ 340#define SHFL_CF_ACT_MASK_IF_EXISTS (0x000000f0) 341#define SHFL_CF_ACT_MASK_IF_NEW (0x00000f00) 342 343/* What to do if object exists. */ 344#define SHFL_CF_ACT_OPEN_IF_EXISTS (0x00000000) 345#define SHFL_CF_ACT_FAIL_IF_EXISTS (0x00000010) 346#define SHFL_CF_ACT_REPLACE_IF_EXISTS (0x00000020) 347#define SHFL_CF_ACT_OVERWRITE_IF_EXISTS (0x00000030) 348 349/* What to do if object does not exist. */ 350#define SHFL_CF_ACT_CREATE_IF_NEW (0x00000000) 351#define SHFL_CF_ACT_FAIL_IF_NEW (0x00000100) 352 353/* Read/write requested access for the object. */ 354#define SHFL_CF_ACCESS_MASK_RW (0x00003000) 355 356/* No access requested. */ 357#define SHFL_CF_ACCESS_NONE (0x00000000) 358/* Read access requested. */ 359#define SHFL_CF_ACCESS_READ (0x00001000) 360/* Write access requested. */ 361#define SHFL_CF_ACCESS_WRITE (0x00002000) 362/* Read/Write access requested. */ 363#define SHFL_CF_ACCESS_READWRITE (0x00003000) 364 365/* Requested share access for the object. */ 366#define SHFL_CF_ACCESS_MASK_DENY (0x0000c000) 367 368/* Allow any access. */ 369#define SHFL_CF_ACCESS_DENYNONE (0x00000000) 370/* Do not allow read. */ 371#define SHFL_CF_ACCESS_DENYREAD (0x00004000) 372/* Do not allow write. */ 373#define SHFL_CF_ACCESS_DENYWRITE (0x00008000) 374/* Do not allow access. */ 375#define SHFL_CF_ACCESS_DENYALL (0x0000c000) 376 377/* Requested access to attributes of the object. */ 378#define SHFL_CF_ACCESS_MASK_ATTR (0x00030000) 379 380/* No access requested. */ 381#define SHFL_CF_ACCESS_ATTR_NONE (0x00000000) 382/* Read access requested. */ 383#define SHFL_CF_ACCESS_ATTR_READ (0x00010000) 384/* Write access requested. */ 385#define SHFL_CF_ACCESS_ATTR_WRITE (0x00020000) 386/* Read/Write access requested. */ 387#define SHFL_CF_ACCESS_ATTR_READWRITE (0x00030000) 388 389/* 390 * The file is opened in append mode. 391 * Ignored if SHFL_CF_ACCESS_WRITE is not set. 392 */ 393#define SHFL_CF_ACCESS_APPEND (0x00040000) 394 395/** Create parameters buffer struct for SHFL_FN_CREATE call */ 396struct shfl_createparms { 397 /** Returned handle of opened object. */ 398 u64 handle; 399 400 /** Returned result of the operation */ 401 enum shfl_create_result result; 402 403 /** SHFL_CF_* */ 404 u32 create_flags; 405 406 /** 407 * Attributes of object to create and 408 * returned actual attributes of opened/created object. 409 */ 410 struct shfl_fsobjinfo info; 411} __packed; 412 413/** Shared Folder directory information */ 414struct shfl_dirinfo { 415 /** Full information about the object. */ 416 struct shfl_fsobjinfo info; 417 /** 418 * The length of the short field (number of UTF16 chars). 419 * It is 16-bit for reasons of alignment. 420 */ 421 u16 short_name_len; 422 /** 423 * The short name for 8.3 compatibility. 424 * Empty string if not available. 425 */ 426 u16 short_name[14]; 427 struct shfl_string name; 428}; 429 430/** Shared folder filesystem properties. */ 431struct shfl_fsproperties { 432 /** 433 * The maximum size of a filesystem object name. 434 * This does not include the '\\0'. 435 */ 436 u32 max_component_len; 437 438 /** 439 * True if the filesystem is remote. 440 * False if the filesystem is local. 441 */ 442 bool remote; 443 444 /** 445 * True if the filesystem is case sensitive. 446 * False if the filesystem is case insensitive. 447 */ 448 bool case_sensitive; 449 450 /** 451 * True if the filesystem is mounted read only. 452 * False if the filesystem is mounted read write. 453 */ 454 bool read_only; 455 456 /** 457 * True if the filesystem can encode unicode object names. 458 * False if it can't. 459 */ 460 bool supports_unicode; 461 462 /** 463 * True if the filesystem is compresses. 464 * False if it isn't or we don't know. 465 */ 466 bool compressed; 467 468 /** 469 * True if the filesystem compresses of individual files. 470 * False if it doesn't or we don't know. 471 */ 472 bool file_compression; 473}; 474VMMDEV_ASSERT_SIZE(shfl_fsproperties, 12); 475 476struct shfl_volinfo { 477 s64 total_allocation_bytes; 478 s64 available_allocation_bytes; 479 u32 bytes_per_allocation_unit; 480 u32 bytes_per_sector; 481 u32 serial; 482 struct shfl_fsproperties properties; 483}; 484 485 486/** SHFL_FN_MAP_FOLDER Parameters structure. */ 487struct shfl_map_folder { 488 /** 489 * pointer, in: 490 * Points to struct shfl_string buffer. 491 */ 492 struct vmmdev_hgcm_function_parameter path; 493 494 /** 495 * pointer, out: SHFLROOT (u32) 496 * Root handle of the mapping which name is queried. 497 */ 498 struct vmmdev_hgcm_function_parameter root; 499 500 /** 501 * pointer, in: UTF16 502 * Path delimiter 503 */ 504 struct vmmdev_hgcm_function_parameter delimiter; 505 506 /** 507 * pointer, in: SHFLROOT (u32) 508 * Case senstive flag 509 */ 510 struct vmmdev_hgcm_function_parameter case_sensitive; 511 512}; 513 514/* Number of parameters */ 515#define SHFL_CPARMS_MAP_FOLDER (4) 516 517 518/** SHFL_FN_UNMAP_FOLDER Parameters structure. */ 519struct shfl_unmap_folder { 520 /** 521 * pointer, in: SHFLROOT (u32) 522 * Root handle of the mapping which name is queried. 523 */ 524 struct vmmdev_hgcm_function_parameter root; 525 526}; 527 528/* Number of parameters */ 529#define SHFL_CPARMS_UNMAP_FOLDER (1) 530 531 532/** SHFL_FN_CREATE Parameters structure. */ 533struct shfl_create { 534 /** 535 * pointer, in: SHFLROOT (u32) 536 * Root handle of the mapping which name is queried. 537 */ 538 struct vmmdev_hgcm_function_parameter root; 539 540 /** 541 * pointer, in: 542 * Points to struct shfl_string buffer. 543 */ 544 struct vmmdev_hgcm_function_parameter path; 545 546 /** 547 * pointer, in/out: 548 * Points to struct shfl_createparms buffer. 549 */ 550 struct vmmdev_hgcm_function_parameter parms; 551 552}; 553 554/* Number of parameters */ 555#define SHFL_CPARMS_CREATE (3) 556 557 558/** SHFL_FN_CLOSE Parameters structure. */ 559struct shfl_close { 560 /** 561 * pointer, in: SHFLROOT (u32) 562 * Root handle of the mapping which name is queried. 563 */ 564 struct vmmdev_hgcm_function_parameter root; 565 566 /** 567 * value64, in: 568 * SHFLHANDLE (u64) of object to close. 569 */ 570 struct vmmdev_hgcm_function_parameter handle; 571 572}; 573 574/* Number of parameters */ 575#define SHFL_CPARMS_CLOSE (2) 576 577 578/** SHFL_FN_READ Parameters structure. */ 579struct shfl_read { 580 /** 581 * pointer, in: SHFLROOT (u32) 582 * Root handle of the mapping which name is queried. 583 */ 584 struct vmmdev_hgcm_function_parameter root; 585 586 /** 587 * value64, in: 588 * SHFLHANDLE (u64) of object to read from. 589 */ 590 struct vmmdev_hgcm_function_parameter handle; 591 592 /** 593 * value64, in: 594 * Offset to read from. 595 */ 596 struct vmmdev_hgcm_function_parameter offset; 597 598 /** 599 * value64, in/out: 600 * Bytes to read/How many were read. 601 */ 602 struct vmmdev_hgcm_function_parameter cb; 603 604 /** 605 * pointer, out: 606 * Buffer to place data to. 607 */ 608 struct vmmdev_hgcm_function_parameter buffer; 609 610}; 611 612/* Number of parameters */ 613#define SHFL_CPARMS_READ (5) 614 615 616/** SHFL_FN_WRITE Parameters structure. */ 617struct shfl_write { 618 /** 619 * pointer, in: SHFLROOT (u32) 620 * Root handle of the mapping which name is queried. 621 */ 622 struct vmmdev_hgcm_function_parameter root; 623 624 /** 625 * value64, in: 626 * SHFLHANDLE (u64) of object to write to. 627 */ 628 struct vmmdev_hgcm_function_parameter handle; 629 630 /** 631 * value64, in: 632 * Offset to write to. 633 */ 634 struct vmmdev_hgcm_function_parameter offset; 635 636 /** 637 * value64, in/out: 638 * Bytes to write/How many were written. 639 */ 640 struct vmmdev_hgcm_function_parameter cb; 641 642 /** 643 * pointer, in: 644 * Data to write. 645 */ 646 struct vmmdev_hgcm_function_parameter buffer; 647 648}; 649 650/* Number of parameters */ 651#define SHFL_CPARMS_WRITE (5) 652 653 654/* 655 * SHFL_FN_LIST 656 * Listing information includes variable length RTDIRENTRY[EX] structures. 657 */ 658 659#define SHFL_LIST_NONE 0 660#define SHFL_LIST_RETURN_ONE 1 661 662/** SHFL_FN_LIST Parameters structure. */ 663struct shfl_list { 664 /** 665 * pointer, in: SHFLROOT (u32) 666 * Root handle of the mapping which name is queried. 667 */ 668 struct vmmdev_hgcm_function_parameter root; 669 670 /** 671 * value64, in: 672 * SHFLHANDLE (u64) of object to be listed. 673 */ 674 struct vmmdev_hgcm_function_parameter handle; 675 676 /** 677 * value32, in: 678 * List flags SHFL_LIST_*. 679 */ 680 struct vmmdev_hgcm_function_parameter flags; 681 682 /** 683 * value32, in/out: 684 * Bytes to be used for listing information/How many bytes were used. 685 */ 686 struct vmmdev_hgcm_function_parameter cb; 687 688 /** 689 * pointer, in/optional 690 * Points to struct shfl_string buffer that specifies a search path. 691 */ 692 struct vmmdev_hgcm_function_parameter path; 693 694 /** 695 * pointer, out: 696 * Buffer to place listing information to. (struct shfl_dirinfo) 697 */ 698 struct vmmdev_hgcm_function_parameter buffer; 699 700 /** 701 * value32, in/out: 702 * Indicates a key where the listing must be resumed. 703 * in: 0 means start from begin of object. 704 * out: 0 means listing completed. 705 */ 706 struct vmmdev_hgcm_function_parameter resume_point; 707 708 /** 709 * pointer, out: 710 * Number of files returned 711 */ 712 struct vmmdev_hgcm_function_parameter file_count; 713}; 714 715/* Number of parameters */ 716#define SHFL_CPARMS_LIST (8) 717 718 719/** SHFL_FN_READLINK Parameters structure. */ 720struct shfl_readLink { 721 /** 722 * pointer, in: SHFLROOT (u32) 723 * Root handle of the mapping which name is queried. 724 */ 725 struct vmmdev_hgcm_function_parameter root; 726 727 /** 728 * pointer, in: 729 * Points to struct shfl_string buffer. 730 */ 731 struct vmmdev_hgcm_function_parameter path; 732 733 /** 734 * pointer, out: 735 * Buffer to place data to. 736 */ 737 struct vmmdev_hgcm_function_parameter buffer; 738 739}; 740 741/* Number of parameters */ 742#define SHFL_CPARMS_READLINK (3) 743 744 745/* SHFL_FN_INFORMATION */ 746 747/* Mask of Set/Get bit. */ 748#define SHFL_INFO_MODE_MASK (0x1) 749/* Get information */ 750#define SHFL_INFO_GET (0x0) 751/* Set information */ 752#define SHFL_INFO_SET (0x1) 753 754/* Get name of the object. */ 755#define SHFL_INFO_NAME (0x2) 756/* Set size of object (extend/trucate); only applies to file objects */ 757#define SHFL_INFO_SIZE (0x4) 758/* Get/Set file object info. */ 759#define SHFL_INFO_FILE (0x8) 760/* Get volume information. */ 761#define SHFL_INFO_VOLUME (0x10) 762 763/** SHFL_FN_INFORMATION Parameters structure. */ 764struct shfl_information { 765 /** 766 * pointer, in: SHFLROOT (u32) 767 * Root handle of the mapping which name is queried. 768 */ 769 struct vmmdev_hgcm_function_parameter root; 770 771 /** 772 * value64, in: 773 * SHFLHANDLE (u64) of object to be listed. 774 */ 775 struct vmmdev_hgcm_function_parameter handle; 776 777 /** 778 * value32, in: 779 * SHFL_INFO_* 780 */ 781 struct vmmdev_hgcm_function_parameter flags; 782 783 /** 784 * value32, in/out: 785 * Bytes to be used for information/How many bytes were used. 786 */ 787 struct vmmdev_hgcm_function_parameter cb; 788 789 /** 790 * pointer, in/out: 791 * Information to be set/get (shfl_fsobjinfo or shfl_string). Do not 792 * forget to set the shfl_fsobjinfo::attr::additional for a get 793 * operation as well. 794 */ 795 struct vmmdev_hgcm_function_parameter info; 796 797}; 798 799/* Number of parameters */ 800#define SHFL_CPARMS_INFORMATION (5) 801 802 803/* SHFL_FN_REMOVE */ 804 805#define SHFL_REMOVE_FILE (0x1) 806#define SHFL_REMOVE_DIR (0x2) 807#define SHFL_REMOVE_SYMLINK (0x4) 808 809/** SHFL_FN_REMOVE Parameters structure. */ 810struct shfl_remove { 811 /** 812 * pointer, in: SHFLROOT (u32) 813 * Root handle of the mapping which name is queried. 814 */ 815 struct vmmdev_hgcm_function_parameter root; 816 817 /** 818 * pointer, in: 819 * Points to struct shfl_string buffer. 820 */ 821 struct vmmdev_hgcm_function_parameter path; 822 823 /** 824 * value32, in: 825 * remove flags (file/directory) 826 */ 827 struct vmmdev_hgcm_function_parameter flags; 828 829}; 830 831#define SHFL_CPARMS_REMOVE (3) 832 833 834/* SHFL_FN_RENAME */ 835 836#define SHFL_RENAME_FILE (0x1) 837#define SHFL_RENAME_DIR (0x2) 838#define SHFL_RENAME_REPLACE_IF_EXISTS (0x4) 839 840/** SHFL_FN_RENAME Parameters structure. */ 841struct shfl_rename { 842 /** 843 * pointer, in: SHFLROOT (u32) 844 * Root handle of the mapping which name is queried. 845 */ 846 struct vmmdev_hgcm_function_parameter root; 847 848 /** 849 * pointer, in: 850 * Points to struct shfl_string src. 851 */ 852 struct vmmdev_hgcm_function_parameter src; 853 854 /** 855 * pointer, in: 856 * Points to struct shfl_string dest. 857 */ 858 struct vmmdev_hgcm_function_parameter dest; 859 860 /** 861 * value32, in: 862 * rename flags (file/directory) 863 */ 864 struct vmmdev_hgcm_function_parameter flags; 865 866}; 867 868#define SHFL_CPARMS_RENAME (4) 869 870 871/** SHFL_FN_SYMLINK Parameters structure. */ 872struct shfl_symlink { 873 /** 874 * pointer, in: SHFLROOT (u32) 875 * Root handle of the mapping which name is queried. 876 */ 877 struct vmmdev_hgcm_function_parameter root; 878 879 /** 880 * pointer, in: 881 * Points to struct shfl_string of path for the new symlink. 882 */ 883 struct vmmdev_hgcm_function_parameter new_path; 884 885 /** 886 * pointer, in: 887 * Points to struct shfl_string of destination for symlink. 888 */ 889 struct vmmdev_hgcm_function_parameter old_path; 890 891 /** 892 * pointer, out: 893 * Information about created symlink. 894 */ 895 struct vmmdev_hgcm_function_parameter info; 896 897}; 898 899#define SHFL_CPARMS_SYMLINK (4) 900 901#endif