home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / loop.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  4.0 KB  |  163 lines

  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. /* Possible states of device */
  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;    /* Who set the key */
  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 completion    lo_done;
  63.     struct completion    lo_bh_done;
  64.     struct mutex        lo_ctl_mutex;
  65.     int            lo_pending;
  66.  
  67.     request_queue_t        *lo_queue;
  68. };
  69.  
  70. #endif /* __KERNEL__ */
  71.  
  72. /*
  73.  * Loop flags
  74.  */
  75. enum {
  76.     LO_FLAGS_READ_ONLY    = 1,
  77.     LO_FLAGS_USE_AOPS    = 2,
  78. };
  79.  
  80. #include <asm/posix_types.h>    /* for __kernel_old_dev_t */
  81. #include <asm/types.h>        /* for __u64 */
  82.  
  83. /* Backwards compatibility version */
  84. struct loop_info {
  85.     int           lo_number;        /* ioctl r/o */
  86.     __kernel_old_dev_t lo_device;         /* ioctl r/o */
  87.     unsigned long       lo_inode;         /* ioctl r/o */
  88.     __kernel_old_dev_t lo_rdevice;         /* ioctl r/o */
  89.     int           lo_offset;
  90.     int           lo_encrypt_type;
  91.     int           lo_encrypt_key_size;     /* ioctl w/o */
  92.     int           lo_flags;            /* ioctl r/o */
  93.     char           lo_name[LO_NAME_SIZE];
  94.     unsigned char       lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
  95.     unsigned long       lo_init[2];
  96.     char           reserved[4];
  97. };
  98.  
  99. struct loop_info64 {
  100.     __u64           lo_device;            /* ioctl r/o */
  101.     __u64           lo_inode;            /* ioctl r/o */
  102.     __u64           lo_rdevice;            /* ioctl r/o */
  103.     __u64           lo_offset;
  104.     __u64           lo_sizelimit;/* bytes, 0 == max available */
  105.     __u32           lo_number;            /* ioctl r/o */
  106.     __u32           lo_encrypt_type;
  107.     __u32           lo_encrypt_key_size;        /* ioctl w/o */
  108.     __u32           lo_flags;            /* ioctl r/o */
  109.     __u8           lo_file_name[LO_NAME_SIZE];
  110.     __u8           lo_crypt_name[LO_NAME_SIZE];
  111.     __u8           lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
  112.     __u64           lo_init[2];
  113. };
  114.  
  115. /*
  116.  * Loop filter types
  117.  */
  118.  
  119. #define LO_CRYPT_NONE        0
  120. #define LO_CRYPT_XOR        1
  121. #define LO_CRYPT_DES        2
  122. #define LO_CRYPT_FISH2        3    /* Twofish encryption */
  123. #define LO_CRYPT_BLOW        4
  124. #define LO_CRYPT_CAST128    5
  125. #define LO_CRYPT_IDEA        6
  126. #define LO_CRYPT_DUMMY        9
  127. #define LO_CRYPT_SKIPJACK    10
  128. #define LO_CRYPT_CRYPTOAPI    18
  129. #define MAX_LO_CRYPT        20
  130.  
  131. #ifdef __KERNEL__
  132. /* Support for loadable transfer modules */
  133. struct loop_func_table {
  134.     int number;    /* filter type */ 
  135.     int (*transfer)(struct loop_device *lo, int cmd,
  136.             struct page *raw_page, unsigned raw_off,
  137.             struct page *loop_page, unsigned loop_off,
  138.             int size, sector_t real_block);
  139.     int (*init)(struct loop_device *, const struct loop_info64 *); 
  140.     /* release is called from loop_unregister_transfer or clr_fd */
  141.     int (*release)(struct loop_device *); 
  142.     int (*ioctl)(struct loop_device *, int cmd, unsigned long arg);
  143.     struct module *owner;
  144. }; 
  145.  
  146. int loop_register_transfer(struct loop_func_table *funcs);
  147. int loop_unregister_transfer(int number); 
  148.  
  149. #endif
  150. /*
  151.  * IOCTL commands --- we will commandeer 0x4C ('L')
  152.  */
  153.  
  154. #define LOOP_SET_FD        0x4C00
  155. #define LOOP_CLR_FD        0x4C01
  156. #define LOOP_SET_STATUS        0x4C02
  157. #define LOOP_GET_STATUS        0x4C03
  158. #define LOOP_SET_STATUS64    0x4C04
  159. #define LOOP_GET_STATUS64    0x4C05
  160. #define LOOP_CHANGE_FD        0x4C06
  161.  
  162. #endif
  163.