diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-08 10:12:46 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-08 10:12:46 -0700 |
| commit | d1cd7c85f9e29740fddec6f25d8bf061937bf58d (patch) | |
| tree | 6d1f8e555d3a416442856724b57dc414eac5d5a4 /include | |
| parent | b3a5e648f5917ea508ecab9a629028b186d38eae (diff) | |
| parent | d4023db71108375e4194e92730ba0d32d7f07813 (diff) | |
| download | linux-d1cd7c85f9e29740fddec6f25d8bf061937bf58d.tar.gz linux-d1cd7c85f9e29740fddec6f25d8bf061937bf58d.tar.bz2 linux-d1cd7c85f9e29740fddec6f25d8bf061937bf58d.zip | |
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI updates from James Bottomley:
"This is mostly update of the usual drivers: qla2xxx, qedf, smartpqi,
hpsa, lpfc, ufs, mpt3sas, ibmvfc and hisi_sas. Plus number of minor
changes, spelling fixes and other trivia"
* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (298 commits)
scsi: qla2xxx: Avoid that lockdep complains about unsafe locking in tcm_qla2xxx_close_session()
scsi: qla2xxx: Avoid that qlt_send_resp_ctio() corrupts memory
scsi: qla2xxx: Fix hardirq-unsafe locking
scsi: qla2xxx: Complain loudly about reference count underflow
scsi: qla2xxx: Use __le64 instead of uint32_t[2] for sending DMA addresses to firmware
scsi: qla2xxx: Introduce the dsd32 and dsd64 data structures
scsi: qla2xxx: Check the size of firmware data structures at compile time
scsi: qla2xxx: Pass little-endian values to the firmware
scsi: qla2xxx: Fix race conditions in the code for aborting SCSI commands
scsi: qla2xxx: Use an on-stack completion in qla24xx_control_vp()
scsi: qla2xxx: Make qla24xx_async_abort_cmd() static
scsi: qla2xxx: Remove unnecessary locking from the target code
scsi: qla2xxx: Remove qla_tgt_cmd.released
scsi: qla2xxx: Complain if a command is released that is owned by the firmware
scsi: qla2xxx: target: Fix offline port handling and host reset handling
scsi: qla2xxx: Fix abort handling in tcm_qla2xxx_write_pending()
scsi: qla2xxx: Fix error handling in qlt_alloc_qfull_cmd()
scsi: qla2xxx: Simplify qlt_send_term_imm_notif()
scsi: qla2xxx: Fix use-after-free issues in qla2xxx_qpair_sp_free_dma()
scsi: qla2xxx: Fix a qla24xx_enable_msix() error path
...
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/nvme-fc-driver.h | 6 | ||||
| -rw-r--r-- | include/scsi/libsas.h | 13 | ||||
| -rw-r--r-- | include/scsi/osd_attributes.h | 398 | ||||
| -rw-r--r-- | include/scsi/osd_protocol.h | 676 | ||||
| -rw-r--r-- | include/scsi/osd_sec.h | 45 | ||||
| -rw-r--r-- | include/scsi/osd_sense.h | 263 | ||||
| -rw-r--r-- | include/scsi/osd_types.h | 45 | ||||
| -rw-r--r-- | include/scsi/scsi_host.h | 6 | ||||
| -rw-r--r-- | include/scsi/scsi_transport_fc.h | 18 | ||||
| -rw-r--r-- | include/target/iscsi/iscsi_target_core.h | 1 | ||||
| -rw-r--r-- | include/target/target_core_base.h | 4 | ||||
| -rw-r--r-- | include/target/target_core_fabric.h | 1 | ||||
| -rw-r--r-- | include/uapi/scsi/fc/fc_els.h | 33 |
13 files changed, 64 insertions, 1445 deletions
diff --git a/include/linux/nvme-fc-driver.h b/include/linux/nvme-fc-driver.h index 2bb349035431..c48e96436f56 100644 --- a/include/linux/nvme-fc-driver.h +++ b/include/linux/nvme-fc-driver.h @@ -17,12 +17,6 @@ -/* FC Port role bitmask - can merge with FC Port Roles in fc transport */ -#define FC_PORT_ROLE_NVME_INITIATOR 0x10 -#define FC_PORT_ROLE_NVME_TARGET 0x20 -#define FC_PORT_ROLE_NVME_DISCOVERY 0x40 - - /** * struct nvme_fc_port_info - port-specific ids and FC connection-specific * data element used during NVME Host role diff --git a/include/scsi/libsas.h b/include/scsi/libsas.h index 56b2dba7d911..b08febec7895 100644 --- a/include/scsi/libsas.h +++ b/include/scsi/libsas.h @@ -224,6 +224,13 @@ struct sas_work { struct work_struct work; }; +/* Lots of code duplicates this in the SCSI tree, which can be factored out */ +static inline bool sas_dev_type_is_expander(enum sas_device_type type) +{ + return type == SAS_EDGE_EXPANDER_DEVICE || + type == SAS_FANOUT_EXPANDER_DEVICE; +} + static inline void INIT_SAS_WORK(struct sas_work *sw, void (*fn)(struct work_struct *)) { INIT_WORK(&sw->work, fn); @@ -245,9 +252,9 @@ static inline struct sas_discovery_event *to_sas_discovery_event(struct work_str struct sas_discovery { struct sas_discovery_event disc_work[DISC_NUM_EVENTS]; unsigned long pending; - u8 fanout_sas_addr[8]; - u8 eeds_a[8]; - u8 eeds_b[8]; + u8 fanout_sas_addr[SAS_ADDR_SIZE]; + u8 eeds_a[SAS_ADDR_SIZE]; + u8 eeds_b[SAS_ADDR_SIZE]; int max_level; }; diff --git a/include/scsi/osd_attributes.h b/include/scsi/osd_attributes.h deleted file mode 100644 index 8a6acd054e4e..000000000000 --- a/include/scsi/osd_attributes.h +++ /dev/null @@ -1,398 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#ifndef __OSD_ATTRIBUTES_H__ -#define __OSD_ATTRIBUTES_H__ - -#include <scsi/osd_protocol.h> - -/* - * Contains types and constants that define attribute pages and attribute - * numbers and their data types. - */ - -#define ATTR_SET(pg, id, l, ptr) \ - { .attr_page = pg, .attr_id = id, .len = l, .val_ptr = ptr } - -#define ATTR_DEF(pg, id, l) ATTR_SET(pg, id, l, NULL) - -/* osd-r10 4.7.3 Attributes pages */ -enum { - OSD_APAGE_OBJECT_FIRST = 0x0, - OSD_APAGE_OBJECT_DIRECTORY = 0, - OSD_APAGE_OBJECT_INFORMATION = 1, - OSD_APAGE_OBJECT_QUOTAS = 2, - OSD_APAGE_OBJECT_TIMESTAMP = 3, - OSD_APAGE_OBJECT_COLLECTIONS = 4, - OSD_APAGE_OBJECT_SECURITY = 5, - OSD_APAGE_OBJECT_LAST = 0x2fffffff, - - OSD_APAGE_PARTITION_FIRST = 0x30000000, - OSD_APAGE_PARTITION_DIRECTORY = OSD_APAGE_PARTITION_FIRST + 0, - OSD_APAGE_PARTITION_INFORMATION = OSD_APAGE_PARTITION_FIRST + 1, - OSD_APAGE_PARTITION_QUOTAS = OSD_APAGE_PARTITION_FIRST + 2, - OSD_APAGE_PARTITION_TIMESTAMP = OSD_APAGE_PARTITION_FIRST + 3, - OSD_APAGE_PARTITION_ATTR_ACCESS = OSD_APAGE_PARTITION_FIRST + 4, - OSD_APAGE_PARTITION_SECURITY = OSD_APAGE_PARTITION_FIRST + 5, - OSD_APAGE_PARTITION_LAST = 0x5FFFFFFF, - - OSD_APAGE_COLLECTION_FIRST = 0x60000000, - OSD_APAGE_COLLECTION_DIRECTORY = OSD_APAGE_COLLECTION_FIRST + 0, - OSD_APAGE_COLLECTION_INFORMATION = OSD_APAGE_COLLECTION_FIRST + 1, - OSD_APAGE_COLLECTION_TIMESTAMP = OSD_APAGE_COLLECTION_FIRST + 3, - OSD_APAGE_COLLECTION_SECURITY = OSD_APAGE_COLLECTION_FIRST + 5, - OSD_APAGE_COLLECTION_LAST = 0x8FFFFFFF, - - OSD_APAGE_ROOT_FIRST = 0x90000000, - OSD_APAGE_ROOT_DIRECTORY = OSD_APAGE_ROOT_FIRST + 0, - OSD_APAGE_ROOT_INFORMATION = OSD_APAGE_ROOT_FIRST + 1, - OSD_APAGE_ROOT_QUOTAS = OSD_APAGE_ROOT_FIRST + 2, - OSD_APAGE_ROOT_TIMESTAMP = OSD_APAGE_ROOT_FIRST + 3, - OSD_APAGE_ROOT_SECURITY = OSD_APAGE_ROOT_FIRST + 5, - OSD_APAGE_ROOT_LAST = 0xBFFFFFFF, - - OSD_APAGE_RESERVED_TYPE_FIRST = 0xC0000000, - OSD_APAGE_RESERVED_TYPE_LAST = 0xEFFFFFFF, - - OSD_APAGE_COMMON_FIRST = 0xF0000000, - OSD_APAGE_COMMON_LAST = 0xFFFFFFFD, - - OSD_APAGE_CURRENT_COMMAND = 0xFFFFFFFE, - - OSD_APAGE_REQUEST_ALL = 0xFFFFFFFF, -}; - -/* subcategories of attr pages within each range above */ -enum { - OSD_APAGE_STD_FIRST = 0x0, - OSD_APAGE_STD_DIRECTORY = 0, - OSD_APAGE_STD_INFORMATION = 1, - OSD_APAGE_STD_QUOTAS = 2, - OSD_APAGE_STD_TIMESTAMP = 3, - OSD_APAGE_STD_COLLECTIONS = 4, - OSD_APAGE_STD_POLICY_SECURITY = 5, - OSD_APAGE_STD_LAST = 0x0000007F, - - OSD_APAGE_RESERVED_FIRST = 0x00000080, - OSD_APAGE_RESERVED_LAST = 0x00007FFF, - - OSD_APAGE_OTHER_STD_FIRST = 0x00008000, - OSD_APAGE_OTHER_STD_LAST = 0x0000EFFF, - - OSD_APAGE_PUBLIC_FIRST = 0x0000F000, - OSD_APAGE_PUBLIC_LAST = 0x0000FFFF, - - OSD_APAGE_APP_DEFINED_FIRST = 0x00010000, - OSD_APAGE_APP_DEFINED_LAST = 0x1FFFFFFF, - - OSD_APAGE_VENDOR_SPECIFIC_FIRST = 0x20000000, - OSD_APAGE_VENDOR_SPECIFIC_LAST = 0x2FFFFFFF, -}; - -enum { - OSD_ATTR_PAGE_IDENTIFICATION = 0, /* in all pages 40 bytes */ -}; - -struct page_identification { - u8 vendor_identification[8]; - u8 page_identification[32]; -} __packed; - -struct osd_attr_page_header { - __be32 page_number; - __be32 page_length; -} __packed; - -/* 7.1.2.8 Root Information attributes page (OSD_APAGE_ROOT_INFORMATION) */ -enum { - OSD_ATTR_RI_OSD_SYSTEM_ID = 0x3, /* 20 */ - OSD_ATTR_RI_VENDOR_IDENTIFICATION = 0x4, /* 8 */ - OSD_ATTR_RI_PRODUCT_IDENTIFICATION = 0x5, /* 16 */ - OSD_ATTR_RI_PRODUCT_MODEL = 0x6, /* 32 */ - OSD_ATTR_RI_PRODUCT_REVISION_LEVEL = 0x7, /* 4 */ - OSD_ATTR_RI_PRODUCT_SERIAL_NUMBER = 0x8, /* variable */ - OSD_ATTR_RI_OSD_NAME = 0x9, /* variable */ - OSD_ATTR_RI_MAX_CDB_CONTINUATION_LEN = 0xA, /* 4 */ - OSD_ATTR_RI_TOTAL_CAPACITY = 0x80, /* 8 */ - OSD_ATTR_RI_USED_CAPACITY = 0x81, /* 8 */ - OSD_ATTR_RI_NUMBER_OF_PARTITIONS = 0xC0, /* 8 */ - OSD_ATTR_RI_CLOCK = 0x100, /* 6 */ - OARI_DEFAULT_ISOLATION_METHOD = 0X110, /* 1 */ - OARI_SUPPORTED_ISOLATION_METHODS = 0X111, /* 32 */ - - OARI_DATA_ATOMICITY_GUARANTEE = 0X120, /* 8 */ - OARI_DATA_ATOMICITY_ALIGNMENT = 0X121, /* 8 */ - OARI_ATTRIBUTES_ATOMICITY_GUARANTEE = 0X122, /* 8 */ - OARI_DATA_ATTRIBUTES_ATOMICITY_MULTIPLIER = 0X123, /* 1 */ - - OARI_MAXIMUM_SNAPSHOTS_COUNT = 0X1C1, /* 0 or 4 */ - OARI_MAXIMUM_CLONES_COUNT = 0X1C2, /* 0 or 4 */ - OARI_MAXIMUM_BRANCH_DEPTH = 0X1CC, /* 0 or 4 */ - OARI_SUPPORTED_OBJECT_DUPLICATION_METHOD_FIRST = 0X200, /* 0 or 4 */ - OARI_SUPPORTED_OBJECT_DUPLICATION_METHOD_LAST = 0X2ff, /* 0 or 4 */ - OARI_SUPPORTED_TIME_OF_DUPLICATION_METHOD_FIRST = 0X300, /* 0 or 4 */ - OARI_SUPPORTED_TIME_OF_DUPLICATION_METHOD_LAST = 0X30F, /* 0 or 4 */ - OARI_SUPPORT_FOR_DUPLICATED_OBJECT_FREEZING = 0X310, /* 0 or 4 */ - OARI_SUPPORT_FOR_SNAPSHOT_REFRESHING = 0X311, /* 0 or 1 */ - OARI_SUPPORTED_CDB_CONTINUATION_DESC_TYPE_FIRST = 0X7000001,/* 0 or 4 */ - OARI_SUPPORTED_CDB_CONTINUATION_DESC_TYPE_LAST = 0X700FFFF,/* 0 or 4 */ -}; -/* Root_Information_attributes_page does not have a get_page structure */ - -/* 7.1.2.9 Partition Information attributes page - * (OSD_APAGE_PARTITION_INFORMATION) - */ -enum { - OSD_ATTR_PI_PARTITION_ID = 0x1, /* 8 */ - OSD_ATTR_PI_USERNAME = 0x9, /* variable */ - OSD_ATTR_PI_USED_CAPACITY = 0x81, /* 8 */ - OSD_ATTR_PI_USED_CAPACITY_INCREMENT = 0x84, /* 0 or 8 */ - OSD_ATTR_PI_NUMBER_OF_OBJECTS = 0xC1, /* 8 */ - - OSD_ATTR_PI_ACTUAL_DATA_SPACE = 0xD1, /* 0 or 8 */ - OSD_ATTR_PI_RESERVED_DATA_SPACE = 0xD2, /* 0 or 8 */ - OSD_ATTR_PI_DEFAULT_SNAPSHOT_DUPLICATION_METHOD = 0x200,/* 0 or 4 */ - OSD_ATTR_PI_DEFAULT_CLONE_DUPLICATION_METHOD = 0x201,/* 0 or 4 */ - OSD_ATTR_PI_DEFAULT_SP_TIME_OF_DUPLICATION = 0x300,/* 0 or 4 */ - OSD_ATTR_PI_DEFAULT_CLONE_TIME_OF_DUPLICATION = 0x301,/* 0 or 4 */ -}; -/* Partition Information attributes page does not have a get_page structure */ - -/* 7.1.2.10 Collection Information attributes page - * (OSD_APAGE_COLLECTION_INFORMATION) - */ -enum { - OSD_ATTR_CI_PARTITION_ID = 0x1, /* 8 */ - OSD_ATTR_CI_COLLECTION_OBJECT_ID = 0x2, /* 8 */ - OSD_ATTR_CI_USERNAME = 0x9, /* variable */ - OSD_ATTR_CI_COLLECTION_TYPE = 0xA, /* 1 */ - OSD_ATTR_CI_USED_CAPACITY = 0x81, /* 8 */ -}; -/* Collection Information attributes page does not have a get_page structure */ - -/* 7.1.2.11 User Object Information attributes page - * (OSD_APAGE_OBJECT_INFORMATION) - */ -enum { - OSD_ATTR_OI_PARTITION_ID = 0x1, /* 8 */ - OSD_ATTR_OI_OBJECT_ID = 0x2, /* 8 */ - OSD_ATTR_OI_USERNAME = 0x9, /* variable */ - OSD_ATTR_OI_USED_CAPACITY = 0x81, /* 8 */ - OSD_ATTR_OI_LOGICAL_LENGTH = 0x82, /* 8 */ - SD_ATTR_OI_ACTUAL_DATA_SPACE = 0XD1, /* 0 OR 8 */ - SD_ATTR_OI_RESERVED_DATA_SPACE = 0XD2, /* 0 OR 8 */ -}; -/* Object Information attributes page does not have a get_page structure */ - -/* 7.1.2.12 Root Quotas attributes page (OSD_APAGE_ROOT_QUOTAS) */ -enum { - OSD_ATTR_RQ_DEFAULT_MAXIMUM_USER_OBJECT_LENGTH = 0x1, /* 8 */ - OSD_ATTR_RQ_PARTITION_CAPACITY_QUOTA = 0x10001, /* 8 */ - OSD_ATTR_RQ_PARTITION_OBJECT_COUNT = 0x10002, /* 8 */ - OSD_ATTR_RQ_PARTITION_COLLECTIONS_PER_USER_OBJECT = 0x10081, /* 4 */ - OSD_ATTR_RQ_PARTITION_COUNT = 0x20002, /* 8 */ -}; - -struct Root_Quotas_attributes_page { - struct osd_attr_page_header hdr; /* id=R+2, size=0x24 */ - __be64 default_maximum_user_object_length; - __be64 partition_capacity_quota; - __be64 partition_object_count; - __be64 partition_collections_per_user_object; - __be64 partition_count; -} __packed; - -/* 7.1.2.13 Partition Quotas attributes page (OSD_APAGE_PARTITION_QUOTAS)*/ -enum { - OSD_ATTR_PQ_DEFAULT_MAXIMUM_USER_OBJECT_LENGTH = 0x1, /* 8 */ - OSD_ATTR_PQ_CAPACITY_QUOTA = 0x10001, /* 8 */ - OSD_ATTR_PQ_OBJECT_COUNT = 0x10002, /* 8 */ - OSD_ATTR_PQ_COLLECTIONS_PER_USER_OBJECT = 0x10081, /* 4 */ -}; - -struct Partition_Quotas_attributes_page { - struct osd_attr_page_header hdr; /* id=P+2, size=0x1C */ - __be64 default_maximum_user_object_length; - __be64 capacity_quota; - __be64 object_count; - __be64 collections_per_user_object; -} __packed; - -/* 7.1.2.14 User Object Quotas attributes page (OSD_APAGE_OBJECT_QUOTAS) */ -enum { - OSD_ATTR_OQ_MAXIMUM_LENGTH = 0x1, /* 8 */ -}; - -struct Object_Quotas_attributes_page { - struct osd_attr_page_header hdr; /* id=U+2, size=0x8 */ - __be64 maximum_length; -} __packed; - -/* 7.1.2.15 Root Timestamps attributes page (OSD_APAGE_ROOT_TIMESTAMP) */ -enum { - OSD_ATTR_RT_ATTRIBUTES_ACCESSED_TIME = 0x2, /* 6 */ - OSD_ATTR_RT_ATTRIBUTES_MODIFIED_TIME = 0x3, /* 6 */ - OSD_ATTR_RT_TIMESTAMP_BYPASS = 0xFFFFFFFE, /* 1 */ -}; - -struct root_timestamps_attributes_page { - struct osd_attr_page_header hdr; /* id=R+3, size=0xD */ - struct osd_timestamp attributes_accessed_time; - struct osd_timestamp attributes_modified_time; - u8 timestamp_bypass; -} __packed; - -/* 7.1.2.16 Partition Timestamps attributes page - * (OSD_APAGE_PARTITION_TIMESTAMP) - */ -enum { - OSD_ATTR_PT_CREATED_TIME = 0x1, /* 6 */ - OSD_ATTR_PT_ATTRIBUTES_ACCESSED_TIME = 0x2, /* 6 */ - OSD_ATTR_PT_ATTRIBUTES_MODIFIED_TIME = 0x3, /* 6 */ - OSD_ATTR_PT_DATA_ACCESSED_TIME = 0x4, /* 6 */ - OSD_ATTR_PT_DATA_MODIFIED_TIME = 0x5, /* 6 */ - OSD_ATTR_PT_TIMESTAMP_BYPASS = 0xFFFFFFFE, /* 1 */ -}; - -struct partition_timestamps_attributes_page { - struct osd_attr_page_header hdr; /* id=P+3, size=0x1F */ - struct osd_timestamp created_time; - struct osd_timestamp attributes_accessed_time; - struct osd_timestamp attributes_modified_time; - struct osd_timestamp data_accessed_time; - struct osd_timestamp data_modified_time; - u8 timestamp_bypass; -} __packed; - -/* 7.1.2.17/18 Collection/Object Timestamps attributes page - * (OSD_APAGE_COLLECTION_TIMESTAMP/OSD_APAGE_OBJECT_TIMESTAMP) - */ -enum { - OSD_ATTR_OT_CREATED_TIME = 0x1, /* 6 */ - OSD_ATTR_OT_ATTRIBUTES_ACCESSED_TIME = 0x2, /* 6 */ - OSD_ATTR_OT_ATTRIBUTES_MODIFIED_TIME = 0x3, /* 6 */ - OSD_ATTR_OT_DATA_ACCESSED_TIME = 0x4, /* 6 */ - OSD_ATTR_OT_DATA_MODIFIED_TIME = 0x5, /* 6 */ -}; - -/* same for collection */ -struct object_timestamps_attributes_page { - struct osd_attr_page_header hdr; /* id=C+3/3, size=0x1E */ - struct osd_timestamp created_time; - struct osd_timestamp attributes_accessed_time; - struct osd_timestamp attributes_modified_time; - struct osd_timestamp data_accessed_time; - struct osd_timestamp data_modified_time; -} __packed; - -/* OSD2r05: 7.1.3.19 Attributes Access attributes page - * (OSD_APAGE_PARTITION_ATTR_ACCESS) - * - * each attribute is of the form below. Total array length is deduced - * from the attribute's length - * (See allowed_attributes_access of the struct osd_cap_object_descriptor) - */ -struct attributes_access_attr { - struct osd_attributes_list_attrid attr_list[0]; -} __packed; - -/* OSD2r05: 7.1.2.21 Collections attributes page */ -/* TBD */ - -/* 7.1.2.20 Root Policy/Security attributes page (OSD_APAGE_ROOT_SECURITY) */ -enum { - OSD_ATTR_RS_DEFAULT_SECURITY_METHOD = 0x1, /* 1 */ - OSD_ATTR_RS_OLDEST_VALID_NONCE_LIMIT = 0x2, /* 6 */ - OSD_ATTR_RS_NEWEST_VALID_NONCE_LIMIT = 0x3, /* 6 */ - OSD_ATTR_RS_PARTITION_DEFAULT_SECURITY_METHOD = 0x6, /* 1 */ - OSD_ATTR_RS_SUPPORTED_SECURITY_METHODS = 0x7, /* 2 */ - OSD_ATTR_RS_ADJUSTABLE_CLOCK = 0x9, /* 6 */ - OSD_ATTR_RS_MASTER_KEY_IDENTIFIER = 0x7FFD, /* 0 or 7 */ - OSD_ATTR_RS_ROOT_KEY_IDENTIFIER = 0x7FFE, /* 0 or 7 */ - OSD_ATTR_RS_SUPPORTED_INTEGRITY_ALGORITHM_0 = 0x80000000,/* 1,(x16)*/ - OSD_ATTR_RS_SUPPORTED_DH_GROUP_0 = 0x80000010,/* 1,(x16)*/ -}; - -struct root_security_attributes_page { - struct osd_attr_page_header hdr; /* id=R+5, size=0x3F */ - u8 default_security_method; - u8 partition_default_security_method; - __be16 supported_security_methods; - u8 mki_valid_rki_valid; - struct osd_timestamp oldest_valid_nonce_limit; - struct osd_timestamp newest_valid_nonce_limit; - struct osd_timestamp adjustable_clock; - u8 master_key_identifier[32-25]; - u8 root_key_identifier[39-32]; - u8 supported_integrity_algorithm[16]; - u8 supported_dh_group[16]; -} __packed; - -/* 7.1.2.21 Partition Policy/Security attributes page - * (OSD_APAGE_PARTITION_SECURITY) - */ -enum { - OSD_ATTR_PS_DEFAULT_SECURITY_METHOD = 0x1, /* 1 */ - OSD_ATTR_PS_OLDEST_VALID_NONCE = 0x2, /* 6 */ - OSD_ATTR_PS_NEWEST_VALID_NONCE = 0x3, /* 6 */ - OSD_ATTR_PS_REQUEST_NONCE_LIST_DEPTH = 0x4, /* 2 */ - OSD_ATTR_PS_FROZEN_WORKING_KEY_BIT_MASK = 0x5, /* 2 */ - OSD_ATTR_PS_PARTITION_KEY_IDENTIFIER = 0x7FFF, /* 0 or 7 */ - OSD_ATTR_PS_WORKING_KEY_IDENTIFIER_FIRST = 0x8000, /* 0 or 7 */ - OSD_ATTR_PS_WORKING_KEY_IDENTIFIER_LAST = 0x800F, /* 0 or 7 */ - OSD_ATTR_PS_POLICY_ACCESS_TAG = 0x40000001, /* 4 */ - OSD_ATTR_PS_USER_OBJECT_POLICY_ACCESS_TAG = 0x40000002, /* 4 */ -}; - -struct partition_security_attributes_page { - struct osd_attr_page_header hdr; /* id=p+5, size=0x8f */ - u8 reserved[3]; - u8 default_security_method; - struct osd_timestamp oldest_valid_nonce; - struct osd_timestamp newest_valid_nonce; - __be16 request_nonce_list_depth; - __be16 frozen_working_key_bit_mask; - __be32 policy_access_tag; - __be32 user_object_policy_access_tag; - u8 pki_valid; - __be16 wki_00_0f_vld; - struct osd_key_identifier partition_key_identifier; - struct osd_key_identifier working_key_identifiers[16]; -} __packed; - -/* 7.1.2.22/23 Collection/Object Policy-Security attributes page - * (OSD_APAGE_COLLECTION_SECURITY/OSD_APAGE_OBJECT_SECURITY) - */ -enum { - OSD_ATTR_OS_POLICY_ACCESS_TAG = 0x40000001, /* 4 */ -}; - -struct object_security_attributes_page { - struct osd_attr_page_header hdr; /* id=C+5/5, size=4 */ - __be32 policy_access_tag; -} __packed; - -/* OSD2r05: 7.1.3.31 Current Command attributes page - * (OSD_APAGE_CURRENT_COMMAND) - */ -enum { - OSD_ATTR_CC_RESPONSE_INTEGRITY_CHECK_VALUE = 0x1, /* 32 */ - OSD_ATTR_CC_OBJECT_TYPE = 0x2, /* 1 */ - OSD_ATTR_CC_PARTITION_ID = 0x3, /* 8 */ - OSD_ATTR_CC_OBJECT_ID = 0x4, /* 8 */ - OSD_ATTR_CC_STARTING_BYTE_ADDRESS_OF_APPEND = 0x5, /* 8 */ - OSD_ATTR_CC_CHANGE_IN_USED_CAPACITY = 0x6, /* 8 */ -}; - -/*TBD: osdv1_current_command_attributes_page */ - -struct osdv2_current_command_attributes_page { - struct osd_attr_page_header hdr; /* id=0xFFFFFFFE, size=0x44 */ - u8 response_integrity_check_value[OSD_CRYPTO_KEYID_SIZE]; - u8 object_type; - u8 reserved[3]; - __be64 partition_id; - __be64 object_id; - __be64 starting_byte_address_of_append; - __be64 change_in_used_capacity; -}; - -#endif /*ndef __OSD_ATTRIBUTES_H__*/ diff --git a/include/scsi/osd_protocol.h b/include/scsi/osd_protocol.h deleted file mode 100644 index e0ca835e7bf7..000000000000 --- a/include/scsi/osd_protocol.h +++ /dev/null @@ -1,676 +0,0 @@ -/* - * osd_protocol.h - OSD T10 standard C definitions. - * - * Copyright (C) 2008 Panasas Inc. All rights reserved. - * - * Authors: - * Boaz Harrosh <ooo@electrozaur.com> - * Benny Halevy <bhalevy@panasas.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 - * - * This file contains types and constants that are defined by the protocol - * Note: All names and symbols are taken from the OSD standard's text. - */ -#ifndef __OSD_PROTOCOL_H__ -#define __OSD_PROTOCOL_H__ - -#include <linux/types.h> -#include <linux/kernel.h> -#include <asm/unaligned.h> -#include <scsi/scsi.h> - -enum { - OSDv1_ADDITIONAL_CDB_LENGTH = 192, - OSDv1_TOTAL_CDB_LEN = OSDv1_ADDITIONAL_CDB_LENGTH + 8, - OSDv1_CAP_LEN = 80, - - /* Latest supported version */ - OSDv2_ADDITIONAL_CDB_LENGTH = 228, - OSD_ADDITIONAL_CDB_LENGTH = - OSDv2_ADDITIONAL_CDB_LENGTH, - OSD_TOTAL_CDB_LEN = OSD_ADDITIONAL_CDB_LENGTH + 8, - OSD_CAP_LEN = 104, - - OSD_SYSTEMID_LEN = 20, - OSDv1_CRYPTO_KEYID_SIZE = 20, - OSDv2_CRYPTO_KEYID_SIZE = 32, - OSD_CRYPTO_KEYID_SIZE = OSDv2_CRYPTO_KEYID_SIZE, - OSD_CRYPTO_SEED_SIZE = 4, - OSD_CRYPTO_NONCE_SIZE = 12, - OSD_MAX_SENSE_LEN = 252, /* from SPC-3 */ - - OSD_PARTITION_FIRST_ID = 0x10000, - OSD_OBJECT_FIRST_ID = 0x10000, -}; - -/* (osd-r10 5.2.4) - * osd2r03: 5.2.3 Caching control bits - */ -enum osd_options_byte { - OSD_CDB_FUA = 0x08, /* Force Unit Access */ - OSD_CDB_DPO = 0x10, /* Disable Page Out */ -}; - -/* - * osd2r03: 5.2.5 Isolation. - * First 3 bits, V2-only. - * Also for attr 110h "default isolation method" at Root Information page - */ -enum osd_options_byte_isolation { - OSD_ISOLATION_DEFAULT = 0, - OSD_ISOLATION_NONE = 1, - OSD_ISOLATION_STRICT = 2, - OSD_ISOLATION_RANGE = 4, - OSD_ISOLATION_FUNCTIONAL = 5, - OSD_ISOLATION_VENDOR = 7, -}; - -/* (osd-r10: 6.7) - * osd2r03: 6.8 FLUSH, FLUSH COLLECTION, FLUSH OSD, FLUSH PARTITION - */ -enum osd_options_flush_scope_values { - OSD_CDB_FLUSH_ALL = 0, - OSD_CDB_FLUSH_ATTR_ONLY = 1, - - OSD_CDB_FLUSH_ALL_RECURSIVE = 2, - /* V2-only */ - OSD_CDB_FLUSH_ALL_RANGE = 2, -}; - -/* osd2r03: 5.2.10 Timestamps control */ -enum { - OSD_CDB_NORMAL_TIMESTAMPS = 0, - OSD_CDB_BYPASS_TIMESTAMPS = 0x7f, -}; - -/* (osd-r10: 5.2.2.1) - * osd2r03: 5.2.4.1 Get and set attributes CDB format selection - * 2 bits at second nibble of command_specific_options byte - */ -enum osd_attributes_mode { - /* V2-only */ - OSD_CDB_SET_ONE_ATTR = 0x10, - - OSD_CDB_GET_ATTR_PAGE_SET_ONE = 0x20, - OSD_CDB_GET_SET_ATTR_LISTS = 0x30, - - OSD_CDB_GET_SET_ATTR_MASK = 0x30, -}; - -/* (osd-r10: 4.12.5) - * osd2r03: 4.14.5 Data-In and Data-Out buffer offsets - * byte offset = mantissa * (2^(exponent+8)) - * struct { - * unsigned mantissa: 28; - * int exponent: 04; - * } - */ -typedef __be32 osd_cdb_offset; - -enum { - OSD_OFFSET_UNUSED = 0xFFFFFFFF, - OSD_OFFSET_MAX_BITS = 28, - - OSDv1_OFFSET_MIN_SHIFT = 8, - OSD_OFFSET_MIN_SHIFT = 3, - OSD_OFFSET_MAX_SHIFT = 16, -}; - -/* Return the smallest allowed encoded offset that contains @offset. - * - * The actual encoded offset returned is @offset + *padding. - * (up to max_shift, non-inclusive) - */ -osd_cdb_offset __osd_encode_offset(u64 offset, unsigned *padding, - int min_shift, int max_shift); - -/* Minimum alignment is 256 bytes - * Note: Seems from std v1 that exponent can be from 0+8 to 0xE+8 (inclusive) - * which is 8 to 23 but IBM code restricts it to 16, so be it. - */ -static inline osd_cdb_offset osd_encode_offset_v1(u64 offset, unsigned *padding) -{ - return __osd_encode_offset(offset, padding, - OSDv1_OFFSET_MIN_SHIFT, OSD_OFFSET_MAX_SHIFT); -} - -/* Minimum 8 bytes alignment - * Same as v1 but since exponent can be signed than a less than - * 256 alignment can be reached with small offsets (<2GB) - */ -static inline osd_cdb_offset osd_encode_offset_v2(u64 offset, unsigned *padding) -{ - return __osd_encode_offset(offset, padding, - OSD_OFFSET_MIN_SHIFT, OSD_OFFSET_MAX_SHIFT); -} - -/* osd2r03: 5.2.1 Overview */ -struct osd_cdb_head { - struct scsi_varlen_cdb_hdr varlen_cdb; -/*10*/ u8 options; - u8 command_specific_options; - u8 timestamp_control; -/*13*/ u8 reserved1[3]; -/*16*/ __be64 partition; -/*24*/ __be64 object; -/*32*/ union { /* V1 vs V2 alignment differences */ - struct __osdv1_cdb_addr_len { -/*32*/ __be32 list_identifier;/* Rarely used */ -/*36*/ __be64 length; -/*44*/ __be64 start_address; - } __packed v1; - - struct __osdv2_cdb_addr_len { - /* called allocation_length in some commands */ -/*32*/ __be64 length; -/*40*/ __be64 start_address; - union { -/*48*/ __be32 list_identifier;/* Rarely used */ - /* OSD2r05 5.2.5 CDB continuation length */ -/*48*/ __be32 cdb_continuation_length; - }; - } __packed v2; - }; -/*52*/ union { /* selected attributes mode Page/List/Single */ - struct osd_attributes_page_mode { -/*52*/ __be32 get_attr_page; -/*56*/ __be32 get_attr_alloc_length; -/*60*/ osd_cdb_offset get_attr_offset; - -/*64*/ __be32 set_attr_page; -/*68*/ __be32 set_attr_id; -/*72*/ __be32 set_attr_length; -/*76*/ osd_cdb_offset set_attr_offset; -/*80*/ } __packed attrs_page; - - struct osd_attributes_list_mode { -/*52*/ __be32 get_attr_desc_bytes; -/*56*/ osd_cdb_offset get_attr_desc_offset; - -/*60*/ __be32 get_attr_alloc_length; -/*64*/ osd_cdb_offset get_attr_offset; - -/*68*/ __be32 set_attr_bytes; -/*72*/ osd_cdb_offset set_attr_offset; - __be32 not_used; -/*80*/ } __packed attrs_list; - - /* osd2r03:5.2.4.2 Set one attribute value using CDB fields */ - struct osd_attributes_cdb_mode { -/*52*/ __be32 set_attr_page; -/*56*/ __be32 set_attr_id; -/*60*/ __be16 set_attr_len; -/*62*/ u8 set_attr_val[18]; -/*80*/ } __packed attrs_cdb; -/*52*/ u8 get_set_attributes_parameters[28]; - }; -} __packed; -/*80*/ - -/*160 v1*/ -struct osdv1_security_parameters { -/*160*/u8 integrity_check_value[OSDv1_CRYPTO_KEYID_SIZE]; -/*180*/u8 request_nonce[OSD_CRYPTO_NONCE_SIZE]; -/*192*/osd_cdb_offset data_in_integrity_check_offset; -/*196*/osd_cdb_offset data_out_integrity_check_offset; -} __packed; -/*200 v1*/ - -/*184 v2*/ -struct osdv2_security_parameters { -/*184*/u8 integrity_check_value[OSDv2_CRYPTO_KEYID_SIZE]; -/*216*/u8 request_nonce[OSD_CRYPTO_NONCE_SIZE]; -/*228*/osd_cdb_offset data_in_integrity_check_offset; -/*232*/osd_cdb_offset data_out_integrity_check_offset; -} __packed; -/*236 v2*/ - -struct osd_security_parameters { - union { - struct osdv1_security_parameters v1; - struct osdv2_security_parameters v2; - }; -}; - -struct osdv1_cdb { - struct osd_cdb_head h; - u8 caps[OSDv1_CAP_LEN]; - struct osdv1_security_parameters sec_params; -} __packed; - -struct osdv2_cdb { - struct osd_cdb_head h; - u8 caps[OSD_CAP_LEN]; - struct osdv2_security_parameters sec_params; -} __packed; - -struct osd_cdb { - union { - struct osdv1_cdb v1; - struct osdv2_cdb v2; - u8 buff[OSD_TOTAL_CDB_LEN]; - }; -} __packed; - -static inline struct osd_cdb_head *osd_cdb_head(struct osd_cdb *ocdb) -{ - return (struct osd_cdb_head *)ocdb->buff; -} - -/* define both version actions - * Ex name = FORMAT_OSD we have OSD_ACT_FORMAT_OSD && OSDv1_ACT_FORMAT_OSD - */ -#define OSD_ACT___(Name, Num) \ - OSD_ACT_##Name = cpu_to_be16(0x8880 + Num), \ - OSDv1_ACT_##Name = cpu_to_be16(0x8800 + Num), - -/* V2 only actions */ -#define OSD_ACT_V2(Name, Num) \ - OSD_ACT_##Name = cpu_to_be16(0x8880 + Num), - -#define OSD_ACT_V1_V2(Name, Num1, Num2) \ - OSD_ACT_##Name = cpu_to_be16(Num2), \ - OSDv1_ACT_##Name = cpu_to_be16(Num1), - -enum osd_service_actions { - OSD_ACT_V2(OBJECT_STRUCTURE_CHECK, 0x00) - OSD_ACT___(FORMAT_OSD, 0x01) - OSD_ACT___(CREATE, 0x02) - OSD_ACT___(LIST, 0x03) - OSD_ACT_V2(PUNCH, 0x04) - OSD_ACT___(READ, 0x05) - OSD_ACT___(WRITE, 0x06) - OSD_ACT___(APPEND, 0x07) - OSD_ACT___(FLUSH, 0x08) - OSD_ACT_V2(CLEAR, 0x09) - OSD_ACT___(REMOVE, 0x0A) - OSD_ACT___(CREATE_PARTITION, 0x0B) - OSD_ACT___(REMOVE_PARTITION, 0x0C) - OSD_ACT___(GET_ATTRIBUTES, 0x0E) - OSD_ACT___(SET_ATTRIBUTES, 0x0F) - OSD_ACT___(CREATE_AND_WRITE, 0x12) - OSD_ACT___(CREATE_COLLECTION, 0x15) - OSD_ACT___(REMOVE_COLLECTION, 0x16) - OSD_ACT___(LIST_COLLECTION, 0x17) - OSD_ACT___(SET_KEY, 0x18) - OSD_ACT___(SET_MASTER_KEY, 0x19) - OSD_ACT___(FLUSH_COLLECTION, 0x1A) - OSD_ACT___(FLUSH_PARTITION, 0x1B) - OSD_ACT___(FLUSH_OSD, 0x1C) - - OSD_ACT_V2(QUERY, 0x20) - OSD_ACT_V2(REMOVE_MEMBER_OBJECTS, 0x21) - OSD_ACT_V2(GET_MEMBER_ATTRIBUTES, 0x22) - OSD_ACT_V2(SET_MEMBER_ATTRIBUTES, 0x23) - - OSD_ACT_V2(CREATE_CLONE, 0x28) - OSD_ACT_V2(CREATE_SNAPSHOT, 0x29) - OSD_ACT_V2(DETACH_CLONE, 0x2A) - OSD_ACT_V2(REFRESH_SNAPSHOT_CLONE, 0x2B) - OSD_ACT_V2(RESTORE_PARTITION_FROM_SNAPSHOT, 0x2C) - - OSD_ACT_V2(READ_MAP, 0x31) - OSD_ACT_V2(READ_MAPS_COMPARE, 0x32) - - OSD_ACT_V1_V2(PERFORM_SCSI_COMMAND, 0x8F7E, 0x8F7C) - OSD_ACT_V1_V2(SCSI_TASK_MANAGEMENT, 0x8F7F, 0x8F7D) - /* 0x8F80 to 0x8FFF are Vendor specific */ -}; - -/* osd2r03: 7.1.3.2 List entry format for retrieving attributes */ -struct osd_attributes_list_attrid { - __be32 attr_page; - __be32 attr_id; -} __packed; - -/* - * NOTE: v1: is not aligned. - */ -struct osdv1_attributes_list_element { - __be32 attr_page; - __be32 attr_id; - __be16 attr_bytes; /* valid bytes at attr_val without padding */ - u8 attr_val[0]; -} __packed; - -/* - * osd2r03: 7.1.3.3 List entry format for retrieved attributes and - * for setting attributes - * NOTE: v2 is 8-bytes aligned - */ -struct osdv2_attributes_list_element { - __be32 attr_page; - __be32 attr_id; - u8 reserved[6]; - __be16 attr_bytes; /* valid bytes at attr_val without padding */ - u8 attr_val[0]; -} __packed; - -enum { - OSDv1_ATTRIBUTES_ELEM_ALIGN = 1, - OSD_ATTRIBUTES_ELEM_ALIGN = 8, -}; - -enum { - OSD_ATTR_LIST_ALL_PAGES = 0xFFFFFFFF, - OSD_ATTR_LIST_ALL_IN_PAGE = 0xFFFFFFFF, -}; - -static inline unsigned osdv1_attr_list_elem_size(unsigned len) -{ - return ALIGN(len + sizeof(struct osdv1_attributes_list_element), - OSDv1_ATTRIBUTES_ELEM_ALIGN); -} - -static inline unsigned osdv2_attr_list_elem_size(unsigned len) -{ - return ALIGN(len + sizeof(struct osdv2_attributes_list_element), - OSD_ATTRIBUTES_ELEM_ALIGN); -} - -/* - * osd2r03: 7.1.3 OSD attributes lists (Table 184) — List type values - */ -enum osd_attr_list_types { - OSD_ATTR_LIST_GET = 0x1, /* descriptors only */ - OSD_ATTR_LIST_SET_RETRIEVE = 0x9, /*descriptors/values variable-length*/ - OSD_V2_ATTR_LIST_MULTIPLE = 0xE, /* ver2, Multiple Objects lists*/ - OSD_V1_ATTR_LIST_CREATE_MULTIPLE = 0xF,/*ver1, used by create_multple*/ -}; - -/* osd2r03: 7.1.3.4 Multi-object retrieved attributes format */ -struct osd_attributes_list_multi_header { - __be64 object_id; - u8 object_type; /* object_type enum below */ - u8 reserved[5]; - __be16 list_bytes; - /* followed by struct osd_attributes_list_element's */ -}; - -struct osdv1_attributes_list_header { - u8 type; /* low 4-bit only */ - u8 pad; - __be16 list_bytes; /* Initiator shall set to Zero. Only set by target */ - /* - * type=9 followed by struct osd_attributes_list_element's - * type=E followed by struct osd_attributes_list_multi_header's - */ -} __packed; - -static inline unsigned osdv1_list_size(struct osdv1_attributes_list_header *h) -{ - return be16_to_cpu(h->list_bytes); -} - -struct osdv2_attributes_list_header { - u8 type; /* lower 4-bits only */ - u8 pad[3]; -/*4*/ __be32 list_bytes; /* Initiator shall set to zero. Only set by target */ - /* - * type=9 followed by struct osd_attributes_list_element's - * type=E followed by struct osd_attributes_list_multi_header's - */ -} __packed; - -static inline unsigned osdv2_list_size(struct osdv2_attributes_list_header *h) -{ - return be32_to_cpu(h->list_bytes); -} - -/* (osd-r10 6.13) - * osd2r03: 6.15 LIST (Table 79) LIST command parameter data. - * for root_lstchg below - */ -enum { - OSD_OBJ_ID_LIST_PAR = 0x1, /* V1-only. Not used in V2 */ - OSD_OBJ_ID_LIST_LSTCHG = 0x2, -}; - -/* - * osd2r03: 6.15.2 LIST command parameter data - * (Also for LIST COLLECTION) - */ -struct osd_obj_id_list { - __be64 list_bytes; /* bytes in list excluding list_bytes (-8) */ - __be64 continuation_id; - __be32 list_identifier; - u8 pad[3]; - u8 root_lstchg; - __be64 object_ids[0]; -} __packed; - -st |
