#ifndef _SYS_FSCTL_H_
#define _SYS_FSCTL_H_
#include <sys/ioccom.h>
#include <sys/mount.h>
#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;
typedef struct user64_namespace_handler_data {
user64_addr_t token;
user64_addr_t flags;
user64_addr_t fdptr;
user64_addr_t infoptr;
user64_addr_t objid;
user64_addr_t reserved1;
user64_addr_t reserved2;
user64_addr_t reserved3;
} user64_namespace_handler_data;
typedef struct user32_namespace_handler_data {
user32_addr_t token;
user32_addr_t flags;
user32_addr_t fdptr;
user32_addr_t infoptr;
user32_addr_t objid;
user32_addr_t reserved1;
user32_addr_t reserved2;
user32_addr_t reserved3;
} user32_namespace_handler_data;
typedef struct namespace_handler_data {
user_addr_t token;
user_addr_t flags;
user_addr_t fdptr;
user_addr_t infoptr;
user_addr_t objid;
user_addr_t reserved1;
user_addr_t reserved2;
user_addr_t reserved3;
} namespace_handler_data;
extern int resolve_nspace_item_ext(struct vnode *vp, uint64_t op, void *arg);
#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; } namespace_handler_info_ext;
typedef struct namespace_handler_data {
int32_t *token;
int64_t *flags;
int32_t *fdptr;
int64_t *infoptr; int64_t *objid;
uint32_t *reserved1;
uint32_t *reserved2;
uint32_t *reserved3;
} namespace_handler_data;
#endif
#ifdef KERNEL_PRIVATE
#define NSPACE_REARM_NO_ARG ((void *)1)
int resolve_nspace_item(struct vnode *vp, uint64_t op);
int nspace_snapshot_event(vnode_t vp, time_t ctime, uint64_t op_type, void *arg);
#endif // defined(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_RENAME_SUCCESS_OP 0x0400
#define NAMESPACE_HANDLER_RENAME_FAILED_OP 0x0800
#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)
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;
typedef struct disk_conditioner_info {
int enabled;
uint64_t access_time_usec; uint64_t read_throughput_mbps; uint64_t write_throughput_mbps; int is_ssd;
uint32_t ioqueue_depth;
uint32_t maxreadcnt;
uint32_t maxwritecnt;
uint32_t segreadcnt;
uint32_t segwritecnt;
} disk_conditioner_info;
struct fsioc_cas_bsdflags {
uint32_t expected_flags;
uint32_t new_flags;
uint32_t actual_flags;
};
#define FSCTL_SYNC_FULLSYNC (1<<0)
#define FSCTL_SYNC_WAIT (1<<1)
#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_UNSUPPORTED _IOR('A', 3, int32_t)
#define FSIOC_SET_FSTYPENAME_OVERRIDE _IOW('A', 10, fstypename_t)
#define FSCTL_SET_FSTYPENAME_OVERRIDE IOCBASECMD(FSIOC_SET_FSTYPENAME_OVERRIDE)
#define FSIOC_ROUTEFS_SETROUTEID _IO('A', 15)
#define FSCTL_ROUTEFS_SETROUTEID IOCBASECMD(FSIOC_ROUTEFS_SETROUTEID)
#define FSIOC_FIOSEEKHOLE _IOWR('A', 16, off_t)
#define FSCTL_FIOSEEKHOLE IOCBASECMD(FSIOC_FIOSEEKHOLE)
#define FSIOC_FIOSEEKDATA _IOWR('A', 17, off_t)
#define FSCTL_FIOSEEKDATA IOCBASECMD(FSIOC_FIOSEEKDATA)
#define DISK_CONDITIONER_IOC_GET _IOR('A', 18, disk_conditioner_info)
#define DISK_CONDITIONER_FSCTL_GET IOCBASECMD(DISK_CONDITIONER_IOC_GET)
#define DISK_CONDITIONER_IOC_SET _IOW('A', 19, disk_conditioner_info)
#define DISK_CONDITIONER_FSCTL_SET IOCBASECMD(DISK_CONDITIONER_IOC_SET)
#define FSIOC_CAS_BSDFLAGS _IOWR('A', 20, struct fsioc_cas_bsdflags)
#define FSIOC_FD_ONLY_OPEN_ONCE _IOWR('A', 21, uint32_t)
#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)
#define FSIOC_FREEZE_EXTENTS _IO('h', 20)
#define FSCTL_FREEZE_EXTENTS IOCBASECMD(FSIOC_FREEZE_EXTENTS)
#define FSIOC_THAW_EXTENTS _IO('h', 21)
#define FSCTL_THAW_EXTENTS IOCBASECMD(FSIOC_THAW_EXTENTS)
#define FSIOC_EVAL_ROOTAUTH _IO('h', 50)
#define FSCTL_EVAL_ROOTAUTH IOCBASECMD(FSIOC_EVAL_ROOTAUTH)
#define FSIOC_KERNEL_ROOTAUTH _IOW('h', 51, uint32_t)
#define FIRMLINK_STRUCT_LEN 1032
typedef struct generic_firmlink {
uint8_t array[FIRMLINK_STRUCT_LEN];
} generic_firmlink_t;
#define FSIOC_FIRMLINK_CTL _IOWR ('J', 60, generic_firmlink_t)
#ifndef KERNEL
#include <sys/cdefs.h>
__BEGIN_DECLS
int fsctl(const char *, unsigned long, void*, unsigned int);
int ffsctl(int, unsigned long, void*, unsigned int);
__END_DECLS
#endif
#endif