ANDROID: video: adf: Avoid directly referencing user pointers
[firefly-linux-kernel-4.4.55.git] / drivers / md / dm-verity.h
index f5af52df8e381b9d9e2d3746b8931fd54e00fed1..75effca400a3b170ae436334f0c961e335bd9096 100644 (file)
@@ -29,6 +29,8 @@ enum verity_block_type {
        DM_VERITY_BLOCK_TYPE_METADATA
 };
 
+struct dm_verity_fec;
+
 struct dm_verity {
        struct dm_dev *data_dev;
        struct dm_dev *hash_dev;
@@ -38,6 +40,7 @@ struct dm_verity {
        struct crypto_shash *tfm;
        u8 *root_digest;        /* digest of the root block */
        u8 *salt;               /* salt: its size is salt_size */
+       u8 *zero_digest;        /* digest for a zero block */
        unsigned salt_size;
        sector_t data_start;    /* data offset in 512-byte sectors */
        sector_t hash_start;    /* hash start in blocks */
@@ -58,6 +61,8 @@ struct dm_verity {
 
        /* starting blocks for each tree level. 0 is the lowest level. */
        sector_t hash_level_block[DM_VERITY_MAX_LEVELS];
+
+       struct dm_verity_fec *fec;      /* forward error correction */
 };
 
 struct dm_verity_io {
@@ -103,6 +108,12 @@ static inline u8 *verity_io_want_digest(struct dm_verity *v,
        return (u8 *)(io + 1) + v->shash_descsize + v->digest_size;
 }
 
+static inline u8 *verity_io_digest_end(struct dm_verity *v,
+                                      struct dm_verity_io *io)
+{
+       return verity_io_want_digest(v, io) + v->digest_size;
+}
+
 extern int verity_for_bv_block(struct dm_verity *v, struct dm_verity_io *io,
                               struct bvec_iter *iter,
                               int (*process)(struct dm_verity *v,
@@ -113,6 +124,16 @@ extern int verity_hash(struct dm_verity *v, struct shash_desc *desc,
                       const u8 *data, size_t len, u8 *digest);
 
 extern int verity_hash_for_block(struct dm_verity *v, struct dm_verity_io *io,
-                                sector_t block, u8 *digest);
-
+                                sector_t block, u8 *digest, bool *is_zero);
+
+extern void verity_status(struct dm_target *ti, status_type_t type,
+                       unsigned status_flags, char *result, unsigned maxlen);
+extern int verity_prepare_ioctl(struct dm_target *ti,
+                struct block_device **bdev, fmode_t *mode);
+extern int verity_iterate_devices(struct dm_target *ti,
+                               iterate_devices_callout_fn fn, void *data);
+extern void verity_io_hints(struct dm_target *ti, struct queue_limits *limits);
+extern void verity_dtr(struct dm_target *ti);
+extern int verity_ctr(struct dm_target *ti, unsigned argc, char **argv);
+extern int verity_map(struct dm_target *ti, struct bio *bio);
 #endif /* DM_VERITY_H */