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