X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/378393581903b274cb7a4d18e0d978071a6b592d..bd504ef0e0b883cdd7917b73b3574eb9ce669905:/bsd/sys/fsctl.h?ds=inline diff --git a/bsd/sys/fsctl.h b/bsd/sys/fsctl.h index 0d2033f06..40c6b10b1 100644 --- a/bsd/sys/fsctl.h +++ b/bsd/sys/fsctl.h @@ -1,23 +1,29 @@ /* * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. * - * @APPLE_LICENSE_HEADER_START@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. The rights granted to you under the License + * may not be used to create, or enable the creation or redistribution of, + * unlawful or unlicensed copies of an Apple operating system, or to + * circumvent, violate, or enable the circumvention or violation of, any + * terms of an Apple operating system software license agreement. * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. * - * @APPLE_LICENSE_HEADER_END@ + * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */ /*- @@ -64,13 +70,190 @@ #define _SYS_FSCTL_H_ #include +#include + +#ifdef XNU_KERNEL_PRIVATE + +typedef struct user64_namespace_handler_info { + user64_addr_t token; + user64_addr_t flags; + user64_addr_t fdptr; +} user64_namespace_handler_info; + +typedef struct user32_namespace_handler_info { + user32_addr_t token; + user32_addr_t flags; + user32_addr_t fdptr; +} user32_namespace_handler_info; + +typedef struct namespace_handler_info { + user_addr_t token; + user_addr_t flags; + user_addr_t fdptr; +} namespace_handler_info; + +typedef struct user64_namespace_handler_info_ext { + user64_addr_t token; + user64_addr_t flags; + user64_addr_t fdptr; + user64_addr_t infoptr; +} user64_namespace_handler_info_ext; + +typedef struct user32_namespace_handler_info_ext { + user32_addr_t token; + user32_addr_t flags; + user32_addr_t fdptr; + user32_addr_t infoptr; +} user32_namespace_handler_info_ext; + +typedef struct namespace_handler_info_ext { + user_addr_t token; + user_addr_t flags; + user_addr_t fdptr; + user_addr_t infoptr; +} namespace_handler_info_ext; + +extern int resolve_nspace_item(struct vnode *vp, uint64_t op); +extern int resolve_nspace_item_ext(struct vnode *vp, uint64_t op, void *arg); +extern int get_nspace_item_status(struct vnode *vp, int32_t *status); + +#else + +typedef struct namespace_handler_info { + int32_t *token; + int64_t *flags; + int32_t *fdptr; +} namespace_handler_info; + +typedef struct namespace_handler_info_ext { + int32_t *token; + int64_t *flags; + int32_t *fdptr; + int64_t *infoptr; // for snapshot write events, the kernel puts an offset/length pair here +} namespace_handler_info_ext; + + +#endif /* XNU_KERNEL_PRIVATE */ + +#define NAMESPACE_HANDLER_READ_OP 0x0001 +#define NAMESPACE_HANDLER_WRITE_OP 0x0002 +#define NAMESPACE_HANDLER_DELETE_OP 0x0004 +#define NAMESPACE_HANDLER_TRUNCATE_OP 0x0008 +#define NAMESPACE_HANDLER_RENAME_OP 0x0010 +#define NAMESPACE_HANDLER_METADATA_WRITE_OP 0x0020 +#define NAMESPACE_HANDLER_METADATA_DELETE_OP 0x0040 +#define NAMESPACE_HANDLER_METADATA_MOD 0x0080 +#define NAMESPACE_HANDLER_LINK_CREATE 0x0200 + +#define NAMESPACE_HANDLER_NSPACE_EVENT 0x1000 +#define NAMESPACE_HANDLER_SNAPSHOT_EVENT 0x0100 +#define NAMESPACE_HANDLER_TRACK_EVENT 0x2000 + +#define NAMESPACE_HANDLER_EVENT_TYPE_MASK (NAMESPACE_HANDLER_NSPACE_EVENT | NAMESPACE_HANDLER_SNAPSHOT_EVENT | NAMESPACE_HANDLER_TRACK_EVENT) + +#define DATALESS_CMPFS_TYPE 0x80000001 + + +typedef int32_t nspace_handler_info[2]; +typedef char fstypename_t[MFSTYPENAMELEN]; + +#ifdef KERNEL + +typedef struct user64_package_ext_info { + user64_addr_t strings; + uint32_t num_entries; + uint32_t max_width; +} user64_package_ext_info; + +typedef struct user32_package_ext_info { + user32_addr_t strings; + uint32_t num_entries; + uint32_t max_width; +} user32_package_ext_info; + +#endif // KERNEL + +typedef struct package_ext_info { + const char *strings; + uint32_t num_entries; + uint32_t max_width; +} package_ext_info; + +#define FSCTL_SYNC_FULLSYNC (1<<0) /* Flush the data fully to disk, if supported by the filesystem */ +#define FSCTL_SYNC_WAIT (1<<1) /* Wait for the sync to complete */ + + +#define FSIOC_SYNC_VOLUME _IOW('A', 1, uint32_t) +#define FSCTL_SYNC_VOLUME IOCBASECMD(FSIOC_SYNC_VOLUME) + +#define FSIOC_SET_PACKAGE_EXTS _IOW('A', 2, struct package_ext_info) +#define FSCTL_SET_PACKAGE_EXTS IOCBASECMD(FSIOC_SET_PACKAGE_EXTS) + +#define FSIOC_WAIT_FOR_SYNC _IOR('A', 3, int32_t) +#define FSCTL_WAIT_FOR_SYNC IOCBASECMD(FSIOC_WAIT_FOR_SYNC) + +#define FSIOC_NAMESPACE_HANDLER_GET _IOW('A', 4, struct namespace_handler_info) +#define FSCTL_NAMESPACE_HANDLER_GET IOCBASECMD(FSIOC_NAMESPACE_HANDLER_GET) + +#define FSIOC_NAMESPACE_HANDLER_UPDATE _IOW('A', 5, nspace_handler_info) +#define FSCTL_NAMESPACE_HANDLER_UPDATE IOCBASECMD(FSIOC_NAMESPACE_HANDLER_UPDATE) + +#define FSIOC_NAMESPACE_HANDLER_UNBLOCK _IOW('A', 6, nspace_handler_info) +#define FSCTL_NAMESPACE_HANDLER_UNBLOCK IOCBASECMD(FSIOC_NAMESPACE_HANDLER_UNBLOCK) + +#define FSIOC_NAMESPACE_HANDLER_CANCEL _IOW('A', 7, nspace_handler_info) +#define FSCTL_NAMESPACE_HANDLER_CANCEL IOCBASECMD(FSIOC_NAMESPACE_HANDLER_CANCEL) + +#define FSIOC_NAMESPACE_HANDLER_SET_SNAPSHOT_TIME _IOW('A', 8, int32_t) +#define FSCTL_NAMESPACE_HANDLER_SET_SNAPSHOT_TIME IOCBASECMD(FSIOC_NAMESPACE_HANDLER_SET_SNAPSHOT_TIME) + +#define FSIOC_OLD_SNAPSHOT_HANDLER_GET _IOW('A', 9, struct namespace_handler_info) +#define FSCTL_OLD_SNAPSHOT_HANDLER_GET IOCBASECMD(FSIOC_OLD_SNAPSHOT_HANDLER_GET) + +#define FSIOC_SET_FSTYPENAME_OVERRIDE _IOW('A', 10, fstypename_t) +#define FSCTL_SET_FSTYPENAME_OVERRIDE IOCBASECMD(FSIOC_SET_FSTYPENAME_OVERRIDE) + +#define FSIOC_NAMESPACE_ALLOW_DMG_SNAPSHOT_EVENTS _IOW('A', 11, int32_t) +#define FSCTL_NAMESPACE_ALLOW_DMG_SNAPSHOT_EVENTS IOCBASECMD(FSIOC_NAMESPACE_ALLOW_DMG_SNAPSHOT_EVENTS) + +#define FSIOC_TRACKED_HANDLER_GET _IOW('A', 12, struct namespace_handler_info) +#define FSCTL_TRACKED_HANDLER_GET IOCBASECMD(FSIOC_TRACKED_HANDLER_GET) + +#define FSIOC_SNAPSHOT_HANDLER_GET_EXT _IOW('A', 13, struct namespace_handler_info_ext) +#define FSCTL_SNAPSHOT_HANDLER_GET_EXT IOCBASECMD(FSIOC_SNAPSHOT_HANDLER_GET_EXT) + +// +// IO commands 14, 15, 16, and 17 are currently unused +// + +// +// Spotlight and fseventsd use these fsctl()'s to find out +// the mount time of a volume and the last time it was +// unmounted. Both HFS and ZFS support these calls. +// +// User space code should pass the "_IOC_" macros while the +// kernel should test for the "_FSCTL_" variant of the macro +// in its vnop_ioctl function. +// +// NOTE: the values for these defines should _not_ be changed +// or else it will break binary compatibility with mds +// and fseventsd. +// +#define SPOTLIGHT_IOC_GET_MOUNT_TIME _IOR('h', 18, u_int32_t) +#define SPOTLIGHT_FSCTL_GET_MOUNT_TIME IOCBASECMD(SPOTLIGHT_IOC_GET_MOUNT_TIME) +#define SPOTLIGHT_IOC_GET_LAST_MTIME _IOR('h', 19, u_int32_t) +#define SPOTLIGHT_FSCTL_GET_LAST_MTIME IOCBASECMD(SPOTLIGHT_IOC_GET_LAST_MTIME) + #ifndef KERNEL #include __BEGIN_DECLS -int fsctl(const char *, unsigned long, void *, unsigned long); + +int fsctl(const char *,unsigned long,void*,unsigned int); +int ffsctl(int,unsigned long,void*,unsigned int); + __END_DECLS #endif /* !KERNEL */