1*cda5da8dSAndroid Build Coastguard Worker /* 2*cda5da8dSAndroid Build Coastguard Worker * This file is auto-generated. Modifications will be lost. 3*cda5da8dSAndroid Build Coastguard Worker * 4*cda5da8dSAndroid Build Coastguard Worker * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5*cda5da8dSAndroid Build Coastguard Worker * for more information. 6*cda5da8dSAndroid Build Coastguard Worker */ 7*cda5da8dSAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_INCREMENTALFS_H 8*cda5da8dSAndroid Build Coastguard Worker #define _UAPI_LINUX_INCREMENTALFS_H 9*cda5da8dSAndroid Build Coastguard Worker #include <linux/limits.h> 10*cda5da8dSAndroid Build Coastguard Worker #include <linux/ioctl.h> 11*cda5da8dSAndroid Build Coastguard Worker #include <linux/types.h> 12*cda5da8dSAndroid Build Coastguard Worker #include <linux/xattr.h> 13*cda5da8dSAndroid Build Coastguard Worker #define INCFS_NAME "incremental-fs" 14*cda5da8dSAndroid Build Coastguard Worker #define INCFS_MAGIC_NUMBER (0x5346434e49ul & ULONG_MAX) 15*cda5da8dSAndroid Build Coastguard Worker #define INCFS_DATA_FILE_BLOCK_SIZE 4096 16*cda5da8dSAndroid Build Coastguard Worker #define INCFS_HEADER_VER 1 17*cda5da8dSAndroid Build Coastguard Worker #define INCFS_MAX_HASH_SIZE 32 18*cda5da8dSAndroid Build Coastguard Worker #define INCFS_MAX_FILE_ATTR_SIZE 512 19*cda5da8dSAndroid Build Coastguard Worker #define INCFS_INDEX_NAME ".index" 20*cda5da8dSAndroid Build Coastguard Worker #define INCFS_INCOMPLETE_NAME ".incomplete" 21*cda5da8dSAndroid Build Coastguard Worker #define INCFS_PENDING_READS_FILENAME ".pending_reads" 22*cda5da8dSAndroid Build Coastguard Worker #define INCFS_LOG_FILENAME ".log" 23*cda5da8dSAndroid Build Coastguard Worker #define INCFS_BLOCKS_WRITTEN_FILENAME ".blocks_written" 24*cda5da8dSAndroid Build Coastguard Worker #define INCFS_XATTR_ID_NAME (XATTR_USER_PREFIX "incfs.id") 25*cda5da8dSAndroid Build Coastguard Worker #define INCFS_XATTR_SIZE_NAME (XATTR_USER_PREFIX "incfs.size") 26*cda5da8dSAndroid Build Coastguard Worker #define INCFS_XATTR_METADATA_NAME (XATTR_USER_PREFIX "incfs.metadata") 27*cda5da8dSAndroid Build Coastguard Worker #define INCFS_XATTR_VERITY_NAME (XATTR_USER_PREFIX "incfs.verity") 28*cda5da8dSAndroid Build Coastguard Worker #define INCFS_MAX_SIGNATURE_SIZE 8096 29*cda5da8dSAndroid Build Coastguard Worker #define INCFS_SIGNATURE_VERSION 2 30*cda5da8dSAndroid Build Coastguard Worker #define INCFS_SIGNATURE_SECTIONS 2 31*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOCTL_BASE_CODE 'g' 32*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_CREATE_FILE _IOWR(INCFS_IOCTL_BASE_CODE, 30, struct incfs_new_file_args) 33*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_READ_FILE_SIGNATURE _IOR(INCFS_IOCTL_BASE_CODE, 31, struct incfs_get_file_sig_args) 34*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_FILL_BLOCKS _IOR(INCFS_IOCTL_BASE_CODE, 32, struct incfs_fill_blocks) 35*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_PERMIT_FILL _IOW(INCFS_IOCTL_BASE_CODE, 33, struct incfs_permit_fill) 36*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_GET_FILLED_BLOCKS _IOR(INCFS_IOCTL_BASE_CODE, 34, struct incfs_get_filled_blocks_args) 37*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_CREATE_MAPPED_FILE _IOWR(INCFS_IOCTL_BASE_CODE, 35, struct incfs_create_mapped_file_args) 38*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_GET_BLOCK_COUNT _IOR(INCFS_IOCTL_BASE_CODE, 36, struct incfs_get_block_count_args) 39*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_GET_READ_TIMEOUTS _IOR(INCFS_IOCTL_BASE_CODE, 37, struct incfs_get_read_timeouts_args) 40*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_SET_READ_TIMEOUTS _IOW(INCFS_IOCTL_BASE_CODE, 38, struct incfs_set_read_timeouts_args) 41*cda5da8dSAndroid Build Coastguard Worker #define INCFS_IOC_GET_LAST_READ_ERROR _IOW(INCFS_IOCTL_BASE_CODE, 39, struct incfs_get_last_read_error_args) 42*cda5da8dSAndroid Build Coastguard Worker #define INCFS_FEATURE_FLAG_COREFS "corefs" 43*cda5da8dSAndroid Build Coastguard Worker #define INCFS_FEATURE_FLAG_ZSTD "zstd" 44*cda5da8dSAndroid Build Coastguard Worker #define INCFS_FEATURE_FLAG_V2 "v2" 45*cda5da8dSAndroid Build Coastguard Worker enum incfs_compression_alg { 46*cda5da8dSAndroid Build Coastguard Worker COMPRESSION_NONE = 0, 47*cda5da8dSAndroid Build Coastguard Worker COMPRESSION_LZ4 = 1, 48*cda5da8dSAndroid Build Coastguard Worker COMPRESSION_ZSTD = 2, 49*cda5da8dSAndroid Build Coastguard Worker }; 50*cda5da8dSAndroid Build Coastguard Worker enum incfs_block_flags { 51*cda5da8dSAndroid Build Coastguard Worker INCFS_BLOCK_FLAGS_NONE = 0, 52*cda5da8dSAndroid Build Coastguard Worker INCFS_BLOCK_FLAGS_HASH = 1, 53*cda5da8dSAndroid Build Coastguard Worker }; 54*cda5da8dSAndroid Build Coastguard Worker typedef struct { 55*cda5da8dSAndroid Build Coastguard Worker __u8 bytes[16]; 56*cda5da8dSAndroid Build Coastguard Worker } incfs_uuid_t __attribute__((aligned(8))); 57*cda5da8dSAndroid Build Coastguard Worker struct incfs_pending_read_info { 58*cda5da8dSAndroid Build Coastguard Worker incfs_uuid_t file_id; 59*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 timestamp_us; 60*cda5da8dSAndroid Build Coastguard Worker __u32 block_index; 61*cda5da8dSAndroid Build Coastguard Worker __u32 serial_number; 62*cda5da8dSAndroid Build Coastguard Worker }; 63*cda5da8dSAndroid Build Coastguard Worker struct incfs_pending_read_info2 { 64*cda5da8dSAndroid Build Coastguard Worker incfs_uuid_t file_id; 65*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 timestamp_us; 66*cda5da8dSAndroid Build Coastguard Worker __u32 block_index; 67*cda5da8dSAndroid Build Coastguard Worker __u32 serial_number; 68*cda5da8dSAndroid Build Coastguard Worker __u32 uid; 69*cda5da8dSAndroid Build Coastguard Worker __u32 reserved; 70*cda5da8dSAndroid Build Coastguard Worker }; 71*cda5da8dSAndroid Build Coastguard Worker struct incfs_fill_block { 72*cda5da8dSAndroid Build Coastguard Worker __u32 block_index; 73*cda5da8dSAndroid Build Coastguard Worker __u32 data_len; 74*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 data; 75*cda5da8dSAndroid Build Coastguard Worker __u8 compression; 76*cda5da8dSAndroid Build Coastguard Worker __u8 flags; 77*cda5da8dSAndroid Build Coastguard Worker __u16 reserved1; 78*cda5da8dSAndroid Build Coastguard Worker __u32 reserved2; 79*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 reserved3; 80*cda5da8dSAndroid Build Coastguard Worker }; 81*cda5da8dSAndroid Build Coastguard Worker struct incfs_fill_blocks { 82*cda5da8dSAndroid Build Coastguard Worker __u64 count; 83*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 fill_blocks; 84*cda5da8dSAndroid Build Coastguard Worker }; 85*cda5da8dSAndroid Build Coastguard Worker struct incfs_permit_fill { 86*cda5da8dSAndroid Build Coastguard Worker __u32 file_descriptor; 87*cda5da8dSAndroid Build Coastguard Worker }; 88*cda5da8dSAndroid Build Coastguard Worker enum incfs_hash_tree_algorithm { 89*cda5da8dSAndroid Build Coastguard Worker INCFS_HASH_TREE_NONE = 0, 90*cda5da8dSAndroid Build Coastguard Worker INCFS_HASH_TREE_SHA256 = 1 91*cda5da8dSAndroid Build Coastguard Worker }; 92*cda5da8dSAndroid Build Coastguard Worker struct incfs_new_file_args { 93*cda5da8dSAndroid Build Coastguard Worker incfs_uuid_t file_id; 94*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 size; 95*cda5da8dSAndroid Build Coastguard Worker __u16 mode; 96*cda5da8dSAndroid Build Coastguard Worker __u16 reserved1; 97*cda5da8dSAndroid Build Coastguard Worker __u32 reserved2; 98*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 directory_path; 99*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 file_name; 100*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 file_attr; 101*cda5da8dSAndroid Build Coastguard Worker __u32 file_attr_len; 102*cda5da8dSAndroid Build Coastguard Worker __u32 reserved4; 103*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 signature_info; 104*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 signature_size; 105*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 reserved6; 106*cda5da8dSAndroid Build Coastguard Worker }; 107*cda5da8dSAndroid Build Coastguard Worker struct incfs_get_file_sig_args { 108*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 file_signature; 109*cda5da8dSAndroid Build Coastguard Worker __u32 file_signature_buf_size; 110*cda5da8dSAndroid Build Coastguard Worker __u32 file_signature_len_out; 111*cda5da8dSAndroid Build Coastguard Worker }; 112*cda5da8dSAndroid Build Coastguard Worker struct incfs_filled_range { 113*cda5da8dSAndroid Build Coastguard Worker __u32 begin; 114*cda5da8dSAndroid Build Coastguard Worker __u32 end; 115*cda5da8dSAndroid Build Coastguard Worker }; 116*cda5da8dSAndroid Build Coastguard Worker struct incfs_get_filled_blocks_args { 117*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 range_buffer; 118*cda5da8dSAndroid Build Coastguard Worker __u32 range_buffer_size; 119*cda5da8dSAndroid Build Coastguard Worker __u32 start_index; 120*cda5da8dSAndroid Build Coastguard Worker __u32 end_index; 121*cda5da8dSAndroid Build Coastguard Worker __u32 total_blocks_out; 122*cda5da8dSAndroid Build Coastguard Worker __u32 data_blocks_out; 123*cda5da8dSAndroid Build Coastguard Worker __u32 range_buffer_size_out; 124*cda5da8dSAndroid Build Coastguard Worker __u32 index_out; 125*cda5da8dSAndroid Build Coastguard Worker }; 126*cda5da8dSAndroid Build Coastguard Worker struct incfs_create_mapped_file_args { 127*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 size; 128*cda5da8dSAndroid Build Coastguard Worker __u16 mode; 129*cda5da8dSAndroid Build Coastguard Worker __u16 reserved1; 130*cda5da8dSAndroid Build Coastguard Worker __u32 reserved2; 131*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 directory_path; 132*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 file_name; 133*cda5da8dSAndroid Build Coastguard Worker incfs_uuid_t source_file_id; 134*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 source_offset; 135*cda5da8dSAndroid Build Coastguard Worker }; 136*cda5da8dSAndroid Build Coastguard Worker struct incfs_get_block_count_args { 137*cda5da8dSAndroid Build Coastguard Worker __u32 total_data_blocks_out; 138*cda5da8dSAndroid Build Coastguard Worker __u32 filled_data_blocks_out; 139*cda5da8dSAndroid Build Coastguard Worker __u32 total_hash_blocks_out; 140*cda5da8dSAndroid Build Coastguard Worker __u32 filled_hash_blocks_out; 141*cda5da8dSAndroid Build Coastguard Worker }; 142*cda5da8dSAndroid Build Coastguard Worker struct incfs_per_uid_read_timeouts { 143*cda5da8dSAndroid Build Coastguard Worker __u32 uid; 144*cda5da8dSAndroid Build Coastguard Worker __u32 min_time_us; 145*cda5da8dSAndroid Build Coastguard Worker __u32 min_pending_time_us; 146*cda5da8dSAndroid Build Coastguard Worker __u32 max_pending_time_us; 147*cda5da8dSAndroid Build Coastguard Worker }; 148*cda5da8dSAndroid Build Coastguard Worker struct incfs_get_read_timeouts_args { 149*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 timeouts_array; 150*cda5da8dSAndroid Build Coastguard Worker __u32 timeouts_array_size; 151*cda5da8dSAndroid Build Coastguard Worker __u32 timeouts_array_size_out; 152*cda5da8dSAndroid Build Coastguard Worker }; 153*cda5da8dSAndroid Build Coastguard Worker struct incfs_set_read_timeouts_args { 154*cda5da8dSAndroid Build Coastguard Worker __aligned_u64 timeouts_array; 155*cda5da8dSAndroid Build Coastguard Worker __u32 timeouts_array_size; 156*cda5da8dSAndroid Build Coastguard Worker }; 157*cda5da8dSAndroid Build Coastguard Worker struct incfs_get_last_read_error_args { 158*cda5da8dSAndroid Build Coastguard Worker incfs_uuid_t file_id_out; 159*cda5da8dSAndroid Build Coastguard Worker __u64 time_us_out; 160*cda5da8dSAndroid Build Coastguard Worker __u32 page_out; 161*cda5da8dSAndroid Build Coastguard Worker __u32 errno_out; 162*cda5da8dSAndroid Build Coastguard Worker __u32 uid_out; 163*cda5da8dSAndroid Build Coastguard Worker __u32 reserved1; 164*cda5da8dSAndroid Build Coastguard Worker __u64 reserved2; 165*cda5da8dSAndroid Build Coastguard Worker }; 166*cda5da8dSAndroid Build Coastguard Worker #endif 167