| 1 | #ifndef _LINUX_LOOP_H
|
| 2 | #define _LINUX_LOOP_H
|
| 3 |
|
| 4 | |
| 5 | * include/linux/loop.h
|
| 6 | *
|
| 7 | * Written by Theodore Ts'o, 3/29/93.
|
| 8 | *
|
| 9 | * Copyright 1993 by Theodore Ts'o. Redistribution of this file is
|
| 10 | * permitted under the GNU General Public License.
|
| 11 |
|
| 12 |
|
| 13 | #define LO_NAME_SIZE 64
|
| 14 | #define LO_KEY_SIZE 32
|
| 15 |
|
| 16 | #ifdef __KERNEL__
|
| 17 | #include <linux/bio.h>
|
| 18 | #include <linux/blkdev.h>
|
| 19 | #include <linux/spinlock.h>
|
| 20 | #include <linux/mutex.h>
|
| 21 |
|
| 22 |
|
| 23 | enum {
|
| 24 | Lo_unbound,
|
| 25 | Lo_bound,
|
| 26 | Lo_rundown,
|
| 27 | };
|
| 28 |
|
| 29 | struct loop_func_table;
|
| 30 |
|
| 31 | struct loop_device {
|
| 32 | int lo_number;
|
| 33 | int lo_refcnt;
|
| 34 | loff_t lo_offset;
|
| 35 | loff_t lo_sizelimit;
|
| 36 | int lo_flags;
|
| 37 | int (*transfer)(struct loop_device *, int cmd,
|
| 38 | struct page *raw_page, unsigned raw_off,
|
| 39 | struct page *loop_page, unsigned loop_off,
|
| 40 | int size, sector_t real_block);
|
| 41 | char lo_file_name[LO_NAME_SIZE];
|
| 42 | char lo_crypt_name[LO_NAME_SIZE];
|
| 43 | char lo_encrypt_key[LO_KEY_SIZE];
|
| 44 | int lo_encrypt_key_size;
|
| 45 | struct loop_func_table *lo_encryption;
|
| 46 | __u32 lo_init[2];
|
| 47 | uid_t lo_key_owner;
|
| 48 | int (*ioctl)(struct loop_device *, int cmd,
|
| 49 | unsigned long arg);
|
| 50 |
|
| 51 | struct file * lo_backing_file;
|
| 52 | struct block_device *lo_device;
|
| 53 | unsigned lo_blocksize;
|
| 54 | void *key_data;
|
| 55 |
|
| 56 | gfp_t old_gfp_mask;
|
| 57 |
|
| 58 | spinlock_t lo_lock;
|
| 59 | struct bio *lo_bio;
|
| 60 | struct bio *lo_biotail;
|
| 61 | int lo_state;
|
| 62 | struct mutex lo_ctl_mutex;
|
| 63 | struct task_struct *lo_thread;
|
| 64 | wait_queue_head_t lo_event;
|
| 65 |
|
| 66 | struct request_queue *lo_queue;
|
| 67 | struct gendisk *lo_disk;
|
| 68 | struct list_head lo_list;
|
| 69 | };
|
| 70 |
|
| 71 | #endif
|
| 72 |
|
| 73 | |
| 74 | * Loop flags
|
| 75 |
|
| 76 | enum {
|
| 77 | LO_FLAGS_READ_ONLY = 1,
|
| 78 | LO_FLAGS_USE_AOPS = 2,
|
| 79 | LO_FLAGS_AUTOCLEAR = 4,
|
| 80 | };
|
| 81 |
|
| 82 | #include <asm/posix_types.h>
|
| 83 | #include <asm/types.h>
|
| 84 |
|
| 85 |
|
| 86 | struct loop_info {
|
| 87 | int lo_number;
|
| 88 | __kernel_old_dev_t lo_device;
|
| 89 | unsigned long lo_inode;
|
| 90 | __kernel_old_dev_t lo_rdevice;
|
| 91 | int lo_offset;
|
| 92 | int lo_encrypt_type;
|
| 93 | int lo_encrypt_key_size;
|
| 94 | int lo_flags;
|
| 95 | char lo_name[LO_NAME_SIZE];
|
| 96 | unsigned char lo_encrypt_key[LO_KEY_SIZE];
|
| 97 | unsigned long lo_init[2];
|
| 98 | char reserved[4];
|
| 99 | };
|
| 100 |
|
| 101 | struct loop_info64 {
|
| 102 | __u64 lo_device;
|
| 103 | __u64 lo_inode;
|
| 104 | __u64 lo_rdevice;
|
| 105 | __u64 lo_offset;
|
| 106 | __u64 lo_sizelimit;
|
| 107 | __u32 lo_number;
|
| 108 | __u32 lo_encrypt_type;
|
| 109 | __u32 lo_encrypt_key_size;
|
| 110 | __u32 lo_flags;
|
| 111 | __u8 lo_file_name[LO_NAME_SIZE];
|
| 112 | __u8 lo_crypt_name[LO_NAME_SIZE];
|
| 113 | __u8 lo_encrypt_key[LO_KEY_SIZE];
|
| 114 | __u64 lo_init[2];
|
| 115 | };
|
| 116 |
|
| 117 | |
| 118 | * Loop filter types
|
| 119 |
|
| 120 |
|
| 121 | #define LO_CRYPT_NONE 0
|
| 122 | #define LO_CRYPT_XOR 1
|
| 123 | #define LO_CRYPT_DES 2
|
| 124 | #define LO_CRYPT_FISH2 3
|
| 125 | #define LO_CRYPT_BLOW 4
|
| 126 | #define LO_CRYPT_CAST128 5
|
| 127 | #define LO_CRYPT_IDEA 6
|
| 128 | #define LO_CRYPT_DUMMY 9
|
| 129 | #define LO_CRYPT_SKIPJACK 10
|
| 130 | #define LO_CRYPT_CRYPTOAPI 18
|
| 131 | #define MAX_LO_CRYPT 20
|
| 132 |
|
| 133 | #ifdef __KERNEL__
|
| 134 |
|
| 135 | struct loop_func_table {
|
| 136 | int number;
|
| 137 | int (*transfer)(struct loop_device *lo, int cmd,
|
| 138 | struct page *raw_page, unsigned raw_off,
|
| 139 | struct page *loop_page, unsigned loop_off,
|
| 140 | int size, sector_t real_block);
|
| 141 | int (*init)(struct loop_device *, const struct loop_info64 *);
|
| 142 |
|
| 143 | int (*release)(struct loop_device *);
|
| 144 | int (*ioctl)(struct loop_device *, int cmd, unsigned long arg);
|
| 145 | struct module *owner;
|
| 146 | };
|
| 147 |
|
| 148 | int loop_register_transfer(struct loop_func_table *funcs);
|
| 149 | int loop_unregister_transfer(int number);
|
| 150 |
|
| 151 | #endif
|
| 152 | |
| 153 | * IOCTL commands --- we will commandeer 0x4C ('L')
|
| 154 |
|
| 155 |
|
| 156 | #define LOOP_SET_FD 0x4C00
|
| 157 | #define LOOP_CLR_FD 0x4C01
|
| 158 | #define LOOP_SET_STATUS 0x4C02
|
| 159 | #define LOOP_GET_STATUS 0x4C03
|
| 160 | #define LOOP_SET_STATUS64 0x4C04
|
| 161 | #define LOOP_GET_STATUS64 0x4C05
|
| 162 | #define LOOP_CHANGE_FD 0x4C06
|
| 163 |
|
| 164 | #endif
|