1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 #ifndef _UAPI_PR_H 3 #define _UAPI_PR_H 4 5 #include <linux/types.h> 6 7 enum pr_status { 8 PR_STS_SUCCESS = 0x0, 9 /* 10 * The following error codes are based on SCSI, because the interface 11 * was originally created for it and has existing users. 12 */ 13 /* Generic device failure. */ 14 PR_STS_IOERR = 0x2, 15 PR_STS_RESERVATION_CONFLICT = 0x18, 16 /* Temporary path failure that can be retried. */ 17 PR_STS_RETRY_PATH_FAILURE = 0xe0000, 18 /* The request was failed due to a fast failure timer. */ 19 PR_STS_PATH_FAST_FAILED = 0xf0000, 20 /* The path cannot be reached and has been marked as failed. */ 21 PR_STS_PATH_FAILED = 0x10000, 22 }; 23 24 enum pr_type { 25 PR_WRITE_EXCLUSIVE = 1, 26 PR_EXCLUSIVE_ACCESS = 2, 27 PR_WRITE_EXCLUSIVE_REG_ONLY = 3, 28 PR_EXCLUSIVE_ACCESS_REG_ONLY = 4, 29 PR_WRITE_EXCLUSIVE_ALL_REGS = 5, 30 PR_EXCLUSIVE_ACCESS_ALL_REGS = 6, 31 }; 32 33 struct pr_reservation { 34 __u64 key; 35 __u32 type; 36 __u32 flags; 37 }; 38 39 struct pr_registration { 40 __u64 old_key; 41 __u64 new_key; 42 __u32 flags; 43 __u32 __pad; 44 }; 45 46 struct pr_preempt { 47 __u64 old_key; 48 __u64 new_key; 49 __u32 type; 50 __u32 flags; 51 }; 52 53 struct pr_clear { 54 __u64 key; 55 __u32 flags; 56 __u32 __pad; 57 }; 58 59 #define PR_FL_IGNORE_KEY (1 << 0) /* ignore existing key */ 60 61 #define IOC_PR_REGISTER _IOW('p', 200, struct pr_registration) 62 #define IOC_PR_RESERVE _IOW('p', 201, struct pr_reservation) 63 #define IOC_PR_RELEASE _IOW('p', 202, struct pr_reservation) 64 #define IOC_PR_PREEMPT _IOW('p', 203, struct pr_preempt) 65 #define IOC_PR_PREEMPT_ABORT _IOW('p', 204, struct pr_preempt) 66 #define IOC_PR_CLEAR _IOW('p', 205, struct pr_clear) 67 68 #endif /* _UAPI_PR_H */ 69