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