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