zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

loop.h (3395B) - Raw


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