1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-1.0+ WITH Linux-syscall-note */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * include/linux/loop.h 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Written by Theodore Ts'o, 3/29/93. 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Copyright 1993 by Theodore Ts'o. Redistribution of this file is 8*4882a593Smuzhiyun * permitted under the GNU General Public License. 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun #ifndef _UAPI_LINUX_LOOP_H 11*4882a593Smuzhiyun #define _UAPI_LINUX_LOOP_H 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define LO_NAME_SIZE 64 15*4882a593Smuzhiyun #define LO_KEY_SIZE 32 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun /* 19*4882a593Smuzhiyun * Loop flags 20*4882a593Smuzhiyun */ 21*4882a593Smuzhiyun enum { 22*4882a593Smuzhiyun LO_FLAGS_READ_ONLY = 1, 23*4882a593Smuzhiyun LO_FLAGS_AUTOCLEAR = 4, 24*4882a593Smuzhiyun LO_FLAGS_PARTSCAN = 8, 25*4882a593Smuzhiyun LO_FLAGS_DIRECT_IO = 16, 26*4882a593Smuzhiyun }; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* LO_FLAGS that can be set using LOOP_SET_STATUS(64) */ 29*4882a593Smuzhiyun #define LOOP_SET_STATUS_SETTABLE_FLAGS (LO_FLAGS_AUTOCLEAR | LO_FLAGS_PARTSCAN) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* LO_FLAGS that can be cleared using LOOP_SET_STATUS(64) */ 32*4882a593Smuzhiyun #define LOOP_SET_STATUS_CLEARABLE_FLAGS (LO_FLAGS_AUTOCLEAR) 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* LO_FLAGS that can be set using LOOP_CONFIGURE */ 35*4882a593Smuzhiyun #define LOOP_CONFIGURE_SETTABLE_FLAGS (LO_FLAGS_READ_ONLY | LO_FLAGS_AUTOCLEAR \ 36*4882a593Smuzhiyun | LO_FLAGS_PARTSCAN | LO_FLAGS_DIRECT_IO) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #include <asm/posix_types.h> /* for __kernel_old_dev_t */ 39*4882a593Smuzhiyun #include <linux/types.h> /* for __u64 */ 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* Backwards compatibility version */ 42*4882a593Smuzhiyun struct loop_info { 43*4882a593Smuzhiyun int lo_number; /* ioctl r/o */ 44*4882a593Smuzhiyun __kernel_old_dev_t lo_device; /* ioctl r/o */ 45*4882a593Smuzhiyun unsigned long lo_inode; /* ioctl r/o */ 46*4882a593Smuzhiyun __kernel_old_dev_t lo_rdevice; /* ioctl r/o */ 47*4882a593Smuzhiyun int lo_offset; 48*4882a593Smuzhiyun int lo_encrypt_type; 49*4882a593Smuzhiyun int lo_encrypt_key_size; /* ioctl w/o */ 50*4882a593Smuzhiyun int lo_flags; 51*4882a593Smuzhiyun char lo_name[LO_NAME_SIZE]; 52*4882a593Smuzhiyun unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ 53*4882a593Smuzhiyun unsigned long lo_init[2]; 54*4882a593Smuzhiyun char reserved[4]; 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun struct loop_info64 { 58*4882a593Smuzhiyun __u64 lo_device; /* ioctl r/o */ 59*4882a593Smuzhiyun __u64 lo_inode; /* ioctl r/o */ 60*4882a593Smuzhiyun __u64 lo_rdevice; /* ioctl r/o */ 61*4882a593Smuzhiyun __u64 lo_offset; 62*4882a593Smuzhiyun __u64 lo_sizelimit;/* bytes, 0 == max available */ 63*4882a593Smuzhiyun __u32 lo_number; /* ioctl r/o */ 64*4882a593Smuzhiyun __u32 lo_encrypt_type; 65*4882a593Smuzhiyun __u32 lo_encrypt_key_size; /* ioctl w/o */ 66*4882a593Smuzhiyun __u32 lo_flags; 67*4882a593Smuzhiyun __u8 lo_file_name[LO_NAME_SIZE]; 68*4882a593Smuzhiyun __u8 lo_crypt_name[LO_NAME_SIZE]; 69*4882a593Smuzhiyun __u8 lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ 70*4882a593Smuzhiyun __u64 lo_init[2]; 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /** 74*4882a593Smuzhiyun * struct loop_config - Complete configuration for a loop device. 75*4882a593Smuzhiyun * @fd: fd of the file to be used as a backing file for the loop device. 76*4882a593Smuzhiyun * @block_size: block size to use; ignored if 0. 77*4882a593Smuzhiyun * @info: struct loop_info64 to configure the loop device with. 78*4882a593Smuzhiyun * 79*4882a593Smuzhiyun * This structure is used with the LOOP_CONFIGURE ioctl, and can be used to 80*4882a593Smuzhiyun * atomically setup and configure all loop device parameters at once. 81*4882a593Smuzhiyun */ 82*4882a593Smuzhiyun struct loop_config { 83*4882a593Smuzhiyun __u32 fd; 84*4882a593Smuzhiyun __u32 block_size; 85*4882a593Smuzhiyun struct loop_info64 info; 86*4882a593Smuzhiyun __u64 __reserved[8]; 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* 90*4882a593Smuzhiyun * Loop filter types 91*4882a593Smuzhiyun */ 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun #define LO_CRYPT_NONE 0 94*4882a593Smuzhiyun #define LO_CRYPT_XOR 1 95*4882a593Smuzhiyun #define LO_CRYPT_DES 2 96*4882a593Smuzhiyun #define LO_CRYPT_FISH2 3 /* Twofish encryption */ 97*4882a593Smuzhiyun #define LO_CRYPT_BLOW 4 98*4882a593Smuzhiyun #define LO_CRYPT_CAST128 5 99*4882a593Smuzhiyun #define LO_CRYPT_IDEA 6 100*4882a593Smuzhiyun #define LO_CRYPT_DUMMY 9 101*4882a593Smuzhiyun #define LO_CRYPT_SKIPJACK 10 102*4882a593Smuzhiyun #define LO_CRYPT_CRYPTOAPI 18 103*4882a593Smuzhiyun #define MAX_LO_CRYPT 20 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun /* 106*4882a593Smuzhiyun * IOCTL commands --- we will commandeer 0x4C ('L') 107*4882a593Smuzhiyun */ 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun #define LOOP_SET_FD 0x4C00 110*4882a593Smuzhiyun #define LOOP_CLR_FD 0x4C01 111*4882a593Smuzhiyun #define LOOP_SET_STATUS 0x4C02 112*4882a593Smuzhiyun #define LOOP_GET_STATUS 0x4C03 113*4882a593Smuzhiyun #define LOOP_SET_STATUS64 0x4C04 114*4882a593Smuzhiyun #define LOOP_GET_STATUS64 0x4C05 115*4882a593Smuzhiyun #define LOOP_CHANGE_FD 0x4C06 116*4882a593Smuzhiyun #define LOOP_SET_CAPACITY 0x4C07 117*4882a593Smuzhiyun #define LOOP_SET_DIRECT_IO 0x4C08 118*4882a593Smuzhiyun #define LOOP_SET_BLOCK_SIZE 0x4C09 119*4882a593Smuzhiyun #define LOOP_CONFIGURE 0x4C0A 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun /* /dev/loop-control interface */ 122*4882a593Smuzhiyun #define LOOP_CTL_ADD 0x4C80 123*4882a593Smuzhiyun #define LOOP_CTL_REMOVE 0x4C81 124*4882a593Smuzhiyun #define LOOP_CTL_GET_FREE 0x4C82 125*4882a593Smuzhiyun #endif /* _UAPI_LINUX_LOOP_H */ 126