xref: /openbmc/linux/include/linux/pr.h (revision c787f1ba)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2bbd3e064SChristoph Hellwig #ifndef LINUX_PR_H
3bbd3e064SChristoph Hellwig #define LINUX_PR_H
4bbd3e064SChristoph Hellwig 
5bbd3e064SChristoph Hellwig #include <uapi/linux/pr.h>
6bbd3e064SChristoph Hellwig 
7*c787f1baSMike Christie struct pr_keys {
8*c787f1baSMike Christie 	u32	generation;
9*c787f1baSMike Christie 	u32	num_keys;
10*c787f1baSMike Christie 	u64	keys[];
11*c787f1baSMike Christie };
12*c787f1baSMike Christie 
13*c787f1baSMike Christie struct pr_held_reservation {
14*c787f1baSMike Christie 	u64		key;
15*c787f1baSMike Christie 	u32		generation;
16*c787f1baSMike Christie 	enum pr_type	type;
17*c787f1baSMike Christie };
18*c787f1baSMike Christie 
19bbd3e064SChristoph Hellwig struct pr_ops {
20bbd3e064SChristoph Hellwig 	int (*pr_register)(struct block_device *bdev, u64 old_key, u64 new_key,
21bbd3e064SChristoph Hellwig 			u32 flags);
22bbd3e064SChristoph Hellwig 	int (*pr_reserve)(struct block_device *bdev, u64 key,
23bbd3e064SChristoph Hellwig 			enum pr_type type, u32 flags);
24bbd3e064SChristoph Hellwig 	int (*pr_release)(struct block_device *bdev, u64 key,
25bbd3e064SChristoph Hellwig 			enum pr_type type);
26bbd3e064SChristoph Hellwig 	int (*pr_preempt)(struct block_device *bdev, u64 old_key, u64 new_key,
27bbd3e064SChristoph Hellwig 			enum pr_type type, bool abort);
28bbd3e064SChristoph Hellwig 	int (*pr_clear)(struct block_device *bdev, u64 key);
29*c787f1baSMike Christie 	/*
30*c787f1baSMike Christie 	 * pr_read_keys - Read the registered keys and return them in the
31*c787f1baSMike Christie 	 * pr_keys->keys array. The keys array will have been allocated at the
32*c787f1baSMike Christie 	 * end of the pr_keys struct, and pr_keys->num_keys must be set to the
33*c787f1baSMike Christie 	 * number of keys the array can hold. If there are more than can fit
34*c787f1baSMike Christie 	 * in the array, success will still be returned and pr_keys->num_keys
35*c787f1baSMike Christie 	 * will reflect the total number of keys the device contains, so the
36*c787f1baSMike Christie 	 * caller can retry with a larger array.
37*c787f1baSMike Christie 	 */
38*c787f1baSMike Christie 	int (*pr_read_keys)(struct block_device *bdev,
39*c787f1baSMike Christie 			struct pr_keys *keys_info);
40*c787f1baSMike Christie 	int (*pr_read_reservation)(struct block_device *bdev,
41*c787f1baSMike Christie 			struct pr_held_reservation *rsv);
42bbd3e064SChristoph Hellwig };
43bbd3e064SChristoph Hellwig 
44bbd3e064SChristoph Hellwig #endif /* LINUX_PR_H */
45