1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2#ifndef _UAPI_LINUX_BLK_CRYPTO_H
3#define _UAPI_LINUX_BLK_CRYPTO_H
4
5#include <linux/ioctl.h>
6#include <linux/types.h>
7
8struct blk_crypto_import_key_arg {
9 /* Raw key (input) */
10 __u64 raw_key_ptr;
11 __u64 raw_key_size;
12 /* Long-term wrapped key blob (output) */
13 __u64 lt_key_ptr;
14 __u64 lt_key_size;
15 __u64 reserved[4];
16};
17
18struct blk_crypto_generate_key_arg {
19 /* Long-term wrapped key blob (output) */
20 __u64 lt_key_ptr;
21 __u64 lt_key_size;
22 __u64 reserved[4];
23};
24
25struct blk_crypto_prepare_key_arg {
26 /* Long-term wrapped key blob (input) */
27 __u64 lt_key_ptr;
28 __u64 lt_key_size;
29 /* Ephemerally-wrapped key blob (output) */
30 __u64 eph_key_ptr;
31 __u64 eph_key_size;
32 __u64 reserved[4];
33};
34
35/*
36 * These ioctls share the block device ioctl space; see uapi/linux/fs.h.
37 * 140-141 are reserved for future blk-crypto ioctls; any more than that would
38 * require an additional allocation from the block device ioctl space.
39 */
40#define BLKCRYPTOIMPORTKEY _IOWR(0x12, 137, struct blk_crypto_import_key_arg)
41#define BLKCRYPTOGENERATEKEY _IOWR(0x12, 138, struct blk_crypto_generate_key_arg)
42#define BLKCRYPTOPREPAREKEY _IOWR(0x12, 139, struct blk_crypto_prepare_key_arg)
43
44#endif /* _UAPI_LINUX_BLK_CRYPTO_H */
45