summaryrefslogtreecommitdiffstats
path: root/kernel/uapi/linux/loop.h
blob: f93f6adc27fad2bc0ab0c35a6dfe8c75d590c0cf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* SPDX-License-Identifier: GPL-1.0+ WITH Linux-syscall-note */
/*
 * include/linux/loop.h
 *
 * Written by Theodore Ts'o, 3/29/93.
 *
 * Copyright 1993 by Theodore Ts'o.  Redistribution of this file is
 * permitted under the GNU General Public License.
 */
#ifndef _UAPI_LINUX_XLOOP_H
#define _UAPI_LINUX_XLOOP_H


#define XLO_NAME_SIZE     64
#define XLO_KEY_SIZE      32


/*
 * xloop flags
 */
enum {
	XLO_FLAGS_READ_ONLY	=  1,
	XLO_FLAGS_AUTOCLEAR	=  4,
	XLO_FLAGS_PARTSCAN	=  8,
	XLO_FLAGS_DIRECT_IO	= 16,
};

/* XLO_FLAGS that can be set using XLOOP_SET_STATUS(64) */
#define XLOOP_SET_STATUS_SETTABLE_FLAGS (XLO_FLAGS_AUTOCLEAR | XLO_FLAGS_PARTSCAN)

/* XLO_FLAGS that can be cleared using XLOOP_SET_STATUS(64) */
#define XLOOP_SET_STATUS_CLEARABLE_FLAGS (XLO_FLAGS_AUTOCLEAR)

/* XLO_FLAGS that can be set using XLOOP_CONFIGURE */
#define XLOOP_CONFIGURE_SETTABLE_FLAGS (XLO_FLAGS_READ_ONLY | XLO_FLAGS_AUTOCLEAR \
				       | XLO_FLAGS_PARTSCAN | XLO_FLAGS_DIRECT_IO)

#include <asm/posix_types.h>  /* for __kernel_old_dev_t */
#include <linux/types.h>	  /* for __u64 */

/* Backwards compatibility version */
struct xloop_info {
	int                xlo_number;                    /* ioctl r/o */
	__kernel_old_dev_t xlo_device;                    /* ioctl r/o */
	unsigned long      xlo_inode;                     /* ioctl r/o */
	__kernel_old_dev_t xlo_rdevice;                   /* ioctl r/o */
	int                xlo_offset;
	int                xlo_encrypt_type;
	int                xlo_encrypt_key_size;          /* ioctl w/o */
	int                xlo_flags;
	char               xlo_name[XLO_NAME_SIZE];
	unsigned char      xlo_encrypt_key[XLO_KEY_SIZE]; /* ioctl w/o */
	unsigned long      xlo_init[2];
	char               reserved[4];
	int                xlo_file_fmt_type;
};

struct xloop_info64 {
	__u64              xlo_device;                     /* ioctl r/o */
	__u64              xlo_inode;                      /* ioctl r/o */
	__u64              xlo_rdevice;                    /* ioctl r/o */
	__u64              xlo_offset;
	__u64              xlo_sizelimit;  /* bytes, 0 == max available */
	__u32              xlo_number;                     /* ioctl r/o */
	__u32              xlo_encrypt_type;
	__u32              xlo_encrypt_key_size;           /* ioctl w/o */
	__u32              xlo_flags;
	__u8               xlo_file_name[XLO_NAME_SIZE];
	__u8               xlo_crypt_name[XLO_NAME_SIZE];
	__u8               xlo_encrypt_key[XLO_KEY_SIZE];  /* ioctl w/o */
	__u64              xlo_init[2];
	__u32              xlo_file_fmt_type;
};

/**
 * struct xloop_config - Complete configuration for a xloop device.
 * @fd: fd of the file to be used as a backing file for the xloop device.
 * @block_size: block size to use; ignored if 0.
 * @info: struct xloop_info64 to configure the xloop device with.
 *
 * This structure is used with the XLOOP_CONFIGURE ioctl, and can be used to
 * atomically setup and configure all xloop device parameters at once.
 */
struct xloop_config {
	__u32               fd;
	__u32               block_size;
	struct xloop_info64	info;
	__u64               __reserved[8];
};

/*
 * xloop filter types
 */
#define XLO_CRYPT_NONE        0
#define XLO_CRYPT_XOR         1
#define XLO_CRYPT_DES         2
#define XLO_CRYPT_FISH2       3  /* Twofish encryption */
#define XLO_CRYPT_BLOW        4
#define XLO_CRYPT_CAST128     5
#define XLO_CRYPT_IDEA        6
#define XLO_CRYPT_DUMMY       9
#define XLO_CRYPT_SKIPJACK   10
#define XLO_CRYPT_CRYPTOAPI  18
#define MAX_XLO_CRYPT        20

/*
 * IOCTL commands --- we will commandeer 0x4C ('L')
 */
#define XLOOP_SET_FD         0x4C00
#define XLOOP_CLR_FD         0x4C01
#define XLOOP_SET_STATUS     0x4C02
#define XLOOP_GET_STATUS     0x4C03
#define XLOOP_SET_STATUS64   0x4C04
#define XLOOP_GET_STATUS64   0x4C05
#define XLOOP_CHANGE_FD      0x4C06
#define XLOOP_SET_CAPACITY   0x4C07
#define XLOOP_SET_DIRECT_IO  0x4C08
#define XLOOP_SET_BLOCK_SIZE 0x4C09
#define XLOOP_CONFIGURE      0x4C0A

/* /dev/xloop-control interface */
#define XLOOP_CTL_ADD        0x4C80
#define XLOOP_CTL_REMOVE     0x4C81
#define XLOOP_CTL_GET_FREE   0x4C82
#endif /* _UAPI_LINUX_XLOOP_H */