~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/vboxsf/shfl_hostintf.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 
 27 enum {
 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. */
 62 struct 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 legacy_padding[2];
 72                 DECLARE_FLEX_ARRAY(u8, utf8);
 73                 DECLARE_FLEX_ARRAY(u16, utf16);
 74         } string;
 75 };
 76 VMMDEV_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. */
 82 static 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. */
140 enum 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  */
168 struct 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. */
223 struct shfl_fsobjattr_easize {
224         /** Size of EAs. */
225         s64 cb;
226 } __packed;
227 
228 /** Shared folder filesystem object attributes. */
229 struct 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;
247 VMMDEV_ASSERT_SIZE(shfl_fsobjattr, 44);
248 
249 struct shfl_timespec {
250         s64 ns_relative_to_unix_epoch;
251 };
252 
253 /** Filesystem object information structure. */
254 struct 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;
289 VMMDEV_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  */
297 enum 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 */
396 struct 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 */
414 struct 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. */
431 struct shfl_fsproperties {
432         /**
433          * The maximum size of a filesystem object name.
434          * This does not include the '\\'.
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 };
474 VMMDEV_ASSERT_SIZE(shfl_fsproperties, 12);
475 
476 struct 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. */
487 struct 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. */
519 struct 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. */
533 struct 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. */
559 struct 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. */
579 struct 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. */
617 struct 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. */
663 struct 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. */
720 struct 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. */
764 struct 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. */
810 struct 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. */
841 struct 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. */
872 struct 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
902 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php