Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef TARGET_CORE_PR_H
0003 #define TARGET_CORE_PR_H
0004 
0005 #include <linux/types.h>
0006 #include <target/target_core_base.h>
0007 
0008 /*
0009  * PERSISTENT_RESERVE_OUT service action codes
0010  *
0011  * spc5r04b section 6.15.2 Table 174
0012  */
0013 #define PRO_REGISTER                0x00
0014 #define PRO_RESERVE             0x01
0015 #define PRO_RELEASE             0x02
0016 #define PRO_CLEAR               0x03
0017 #define PRO_PREEMPT             0x04
0018 #define PRO_PREEMPT_AND_ABORT           0x05
0019 #define PRO_REGISTER_AND_IGNORE_EXISTING_KEY    0x06
0020 #define PRO_REGISTER_AND_MOVE           0x07
0021 #define PRO_REPLACE_LOST_RESERVATION    0x08
0022 /*
0023  * PERSISTENT_RESERVE_IN service action codes
0024  *
0025  * spc5r04b section 6.14.1 Table 162
0026  */
0027 #define PRI_READ_KEYS               0x00
0028 #define PRI_READ_RESERVATION            0x01
0029 #define PRI_REPORT_CAPABILITIES         0x02
0030 #define PRI_READ_FULL_STATUS            0x03
0031 /*
0032  * PERSISTENT_RESERVE_ SCOPE field
0033  *
0034  * spc5r04b section 6.14.3.2 Table 166
0035  */
0036 #define PR_SCOPE_LU_SCOPE           0x00
0037 /*
0038  * PERSISTENT_RESERVE_* TYPE field
0039  *
0040  * spc5r04b section 6.14.3.3 Table 167
0041  */
0042 #define PR_TYPE_WRITE_EXCLUSIVE         0x01
0043 #define PR_TYPE_EXCLUSIVE_ACCESS        0x03
0044 #define PR_TYPE_WRITE_EXCLUSIVE_REGONLY     0x05
0045 #define PR_TYPE_EXCLUSIVE_ACCESS_REGONLY    0x06
0046 #define PR_TYPE_WRITE_EXCLUSIVE_ALLREG      0x07
0047 #define PR_TYPE_EXCLUSIVE_ACCESS_ALLREG     0x08
0048 
0049 #define PR_APTPL_MAX_IPORT_LEN          256
0050 #define PR_APTPL_MAX_TPORT_LEN          256
0051 
0052 /*
0053  *  Function defined in target_core_spc.c
0054  */
0055 void spc_gen_naa_6h_vendor_specific(struct se_device *, unsigned char *);
0056 
0057 extern struct kmem_cache *t10_pr_reg_cache;
0058 
0059 extern void core_pr_dump_initiator_port(struct t10_pr_registration *,
0060             char *, u32);
0061 extern void target_release_reservation(struct se_device *dev);
0062 extern sense_reason_t target_scsi2_reservation_release(struct se_cmd *);
0063 extern sense_reason_t target_scsi2_reservation_reserve(struct se_cmd *);
0064 extern int core_scsi3_alloc_aptpl_registration(
0065             struct t10_reservation *, u64,
0066             unsigned char *, unsigned char *, u64,
0067             unsigned char *, u16, u64, int, int, u8);
0068 extern int core_scsi3_check_aptpl_registration(struct se_device *,
0069             struct se_portal_group *, struct se_lun *,
0070             struct se_node_acl *, u64);
0071 extern void core_scsi3_free_pr_reg_from_nacl(struct se_device *,
0072                          struct se_node_acl *);
0073 extern void core_scsi3_free_all_registrations(struct se_device *);
0074 extern unsigned char *core_scsi3_pr_dump_type(int);
0075 
0076 extern sense_reason_t target_scsi3_emulate_pr_in(struct se_cmd *);
0077 extern sense_reason_t target_scsi3_emulate_pr_out(struct se_cmd *);
0078 extern sense_reason_t target_check_reservation(struct se_cmd *);
0079 
0080 #endif /* TARGET_CORE_PR_H */