diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/scsi/scsi_proto.h | 3 | ||||
| -rw-r--r-- | include/soc/qcom/ice.h | 34 | ||||
| -rw-r--r-- | include/target/target_core_base.h | 26 | ||||
| -rw-r--r-- | include/ufs/ufs.h | 32 | ||||
| -rw-r--r-- | include/ufs/ufshcd.h | 8 | 
5 files changed, 68 insertions, 35 deletions
| diff --git a/include/scsi/scsi_proto.h b/include/scsi/scsi_proto.h index aeca37816506..f64385cde5b9 100644 --- a/include/scsi/scsi_proto.h +++ b/include/scsi/scsi_proto.h @@ -346,10 +346,9 @@ static_assert(sizeof(struct scsi_stream_status) == 8);  /* GET STREAM STATUS parameter data */  struct scsi_stream_status_header { -	__be32 len;	/* length in bytes of stream_status[] array. */ +	__be32 len;	/* length in bytes of following payload */  	u16 reserved;  	__be16 number_of_open_streams; -	DECLARE_FLEX_ARRAY(struct scsi_stream_status, stream_status);  };  static_assert(sizeof(struct scsi_stream_status_header) == 8); diff --git a/include/soc/qcom/ice.h b/include/soc/qcom/ice.h index fdf1b5c21eb9..4bee553f0a59 100644 --- a/include/soc/qcom/ice.h +++ b/include/soc/qcom/ice.h @@ -6,33 +6,29 @@  #ifndef __QCOM_ICE_H__  #define __QCOM_ICE_H__ +#include <linux/blk-crypto.h>  #include <linux/types.h>  struct qcom_ice; -enum qcom_ice_crypto_key_size { -	QCOM_ICE_CRYPTO_KEY_SIZE_INVALID	= 0x0, -	QCOM_ICE_CRYPTO_KEY_SIZE_128		= 0x1, -	QCOM_ICE_CRYPTO_KEY_SIZE_192		= 0x2, -	QCOM_ICE_CRYPTO_KEY_SIZE_256		= 0x3, -	QCOM_ICE_CRYPTO_KEY_SIZE_512		= 0x4, -}; - -enum qcom_ice_crypto_alg { -	QCOM_ICE_CRYPTO_ALG_AES_XTS		= 0x0, -	QCOM_ICE_CRYPTO_ALG_BITLOCKER_AES_CBC	= 0x1, -	QCOM_ICE_CRYPTO_ALG_AES_ECB		= 0x2, -	QCOM_ICE_CRYPTO_ALG_ESSIV_AES_CBC	= 0x3, -}; -  int qcom_ice_enable(struct qcom_ice *ice);  int qcom_ice_resume(struct qcom_ice *ice);  int qcom_ice_suspend(struct qcom_ice *ice); -int qcom_ice_program_key(struct qcom_ice *ice, -			 u8 algorithm_id, u8 key_size, -			 const u8 crypto_key[], u8 data_unit_size, -			 int slot); +int qcom_ice_program_key(struct qcom_ice *ice, unsigned int slot, +			 const struct blk_crypto_key *blk_key);  int qcom_ice_evict_key(struct qcom_ice *ice, int slot); +enum blk_crypto_key_type qcom_ice_get_supported_key_type(struct qcom_ice *ice); +int qcom_ice_derive_sw_secret(struct qcom_ice *ice, +			      const u8 *eph_key, size_t eph_key_size, +			      u8 sw_secret[BLK_CRYPTO_SW_SECRET_SIZE]); +int qcom_ice_generate_key(struct qcom_ice *ice, +			  u8 lt_key[BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE]); +int qcom_ice_prepare_key(struct qcom_ice *ice, +			 const u8 *lt_key, size_t lt_key_size, +			 u8 eph_key[BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE]); +int qcom_ice_import_key(struct qcom_ice *ice, +			const u8 *raw_key, size_t raw_key_size, +			u8 lt_key[BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE]);  struct qcom_ice *devm_of_qcom_ice_get(struct device *dev);  #endif /* __QCOM_ICE_H__ */ diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index 97099a5e3f6c..c4d9116904aa 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h @@ -157,6 +157,7 @@ enum se_cmd_flags_table {  	SCF_USE_CPUID				= (1 << 16),  	SCF_TASK_ATTR_SET			= (1 << 17),  	SCF_TREAT_READ_AS_NORMAL		= (1 << 18), +	SCF_TASK_ORDERED_SYNC			= (1 << 19),  };  /* @@ -669,15 +670,19 @@ struct se_lun_acl {  	struct se_ml_stat_grps	ml_stat_grps;  }; +struct se_dev_entry_io_stats { +	u32			total_cmds; +	u32			read_bytes; +	u32			write_bytes; +}; +  struct se_dev_entry {  	u64			mapped_lun;  	u64			pr_res_key;  	u64			creation_time;  	bool			lun_access_ro;  	u32			attach_count; -	atomic_long_t		total_cmds; -	atomic_long_t		read_bytes; -	atomic_long_t		write_bytes; +	struct se_dev_entry_io_stats __percpu	*stats;  	/* Used for PR SPEC_I_PT=1 and REGISTER_AND_MOVE */  	struct kref		pr_kref;  	struct completion	pr_comp; @@ -800,6 +805,12 @@ struct se_device_queue {  	struct se_cmd_queue	sq;  }; +struct se_dev_io_stats { +	u32			total_cmds; +	u32			read_bytes; +	u32			write_bytes; +}; +  struct se_device {  	/* Used for SAM Task Attribute ordering */  	u32			dev_cur_ordered_id; @@ -821,13 +832,10 @@ struct se_device {  	atomic_long_t		num_resets;  	atomic_long_t		aborts_complete;  	atomic_long_t		aborts_no_task; -	atomic_long_t		num_cmds; -	atomic_long_t		read_bytes; -	atomic_long_t		write_bytes; +	struct se_dev_io_stats __percpu	*stats;  	/* Active commands on this virtual SE device */ -	atomic_t		non_ordered; +	struct percpu_ref	non_ordered;  	bool			ordered_sync_in_progress; -	atomic_t		delayed_cmd_count;  	atomic_t		dev_qf_count;  	u32			export_count;  	spinlock_t		delayed_cmd_lock; @@ -890,7 +898,7 @@ struct target_opcode_descriptor {  	u8			specific_timeout;  	u16			nominal_timeout;  	u16			recommended_timeout; -	bool			(*enabled)(struct target_opcode_descriptor *descr, +	bool			(*enabled)(const struct target_opcode_descriptor *descr,  					   struct se_cmd *cmd);  	void			(*update_usage_bits)(u8 *usage_bits,  						     struct se_device *dev); diff --git a/include/ufs/ufs.h b/include/ufs/ufs.h index 1c47136d8715..c0c59a8f7256 100644 --- a/include/ufs/ufs.h +++ b/include/ufs/ufs.h @@ -182,6 +182,9 @@ enum attr_idn {  	QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE        = 0x1F,  	QUERY_ATTR_IDN_TIMESTAMP		= 0x30,  	QUERY_ATTR_IDN_DEV_LVL_EXCEPTION_ID     = 0x34, +	QUERY_ATTR_IDN_WB_BUF_RESIZE_HINT	= 0x3C, +	QUERY_ATTR_IDN_WB_BUF_RESIZE_EN		= 0x3D, +	QUERY_ATTR_IDN_WB_BUF_RESIZE_STATUS	= 0x3E,  };  /* Descriptor idn for Query requests */ @@ -290,6 +293,7 @@ enum device_desc_param {  	DEVICE_DESC_PARAM_PRDCT_REV		= 0x2A,  	DEVICE_DESC_PARAM_HPB_VER		= 0x40,  	DEVICE_DESC_PARAM_HPB_CONTROL		= 0x42, +	DEVICE_DESC_PARAM_EXT_WB_SUP		= 0x4D,  	DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP	= 0x4F,  	DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN	= 0x53,  	DEVICE_DESC_PARAM_WB_TYPE		= 0x54, @@ -384,6 +388,11 @@ enum {  	UFSHCD_AMP		= 3,  }; +/* Possible values for wExtendedWriteBoosterSupport */ +enum { +	UFS_DEV_WB_BUF_RESIZE	= BIT(0), +}; +  /* Possible values for dExtendedUFSFeaturesSupport */  enum {  	UFS_DEV_HIGH_TEMP_NOTIF		= BIT(4), @@ -457,6 +466,28 @@ enum ufs_ref_clk_freq {  	REF_CLK_FREQ_INVAL	= -1,  }; +/* bWriteBoosterBufferResizeEn attribute */ +enum wb_resize_en { +	WB_RESIZE_EN_IDLE	= 0, +	WB_RESIZE_EN_DECREASE	= 1, +	WB_RESIZE_EN_INCREASE	= 2, +}; + +/* bWriteBoosterBufferResizeHint attribute */ +enum wb_resize_hint { +	WB_RESIZE_HINT_KEEP	= 0, +	WB_RESIZE_HINT_DECREASE	= 1, +	WB_RESIZE_HINT_INCREASE	= 2, +}; + +/* bWriteBoosterBufferResizeStatus attribute */ +enum wb_resize_status { +	WB_RESIZE_STATUS_IDLE	= 0, +	WB_RESIZE_STATUS_IN_PROGRESS	= 1, +	WB_RESIZE_STATUS_COMPLETE_SUCCESS	= 2, +	WB_RESIZE_STATUS_GENERAL_FAILURE	= 3, +}; +  /* Query response result code */  enum {  	QUERY_RESULT_SUCCESS                    = 0x00, @@ -581,6 +612,7 @@ struct ufs_dev_info {  	bool    wb_buf_flush_enabled;  	u8	wb_dedicated_lu;  	u8      wb_buffer_type; +	u16	ext_wb_sup;  	bool	b_rpm_dev_flush_capable;  	u8	b_presrv_uspc_en; diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h index e928ed0265ff..9b3515cee711 100644 --- a/include/ufs/ufshcd.h +++ b/include/ufs/ufshcd.h @@ -501,8 +501,6 @@ struct ufs_event_hist {  /**   * struct ufs_stats - keeps usage/err statistics - * @last_intr_status: record the last interrupt status. - * @last_intr_ts: record the last interrupt timestamp.   * @hibern8_exit_cnt: Counter to keep track of number of exits,   *		reset this after link-startup.   * @last_hibern8_exit_tstamp: Set time after the hibern8 exit. @@ -510,9 +508,6 @@ struct ufs_event_hist {   * @event: array with event history.   */  struct ufs_stats { -	u32 last_intr_status; -	u64 last_intr_ts; -  	u32 hibern8_exit_cnt;  	u64 last_hibern8_exit_tstamp;  	struct ufs_event_hist event[UFS_EVT_CNT]; @@ -959,6 +954,7 @@ enum ufshcd_mcq_opr {   *	ufshcd_resume_complete()   * @mcq_sup: is mcq supported by UFSHC   * @mcq_enabled: is mcq ready to accept requests + * @mcq_esi_enabled: is mcq ESI configured   * @res: array of resource info of MCQ registers   * @mcq_base: Multi circular queue registers base address   * @uhq: array of supported hardware queues @@ -1130,6 +1126,7 @@ struct ufs_hba {  	bool mcq_sup;  	bool lsdb_sup;  	bool mcq_enabled; +	bool mcq_esi_enabled;  	struct ufshcd_res_info res[RES_MAX];  	void __iomem *mcq_base;  	struct ufs_hw_queue *uhq; @@ -1476,6 +1473,7 @@ int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *r  				     struct scatterlist *sg_list, enum dma_data_direction dir);  int ufshcd_wb_toggle(struct ufs_hba *hba, bool enable);  int ufshcd_wb_toggle_buf_flush(struct ufs_hba *hba, bool enable); +int ufshcd_wb_set_resize_en(struct ufs_hba *hba, enum wb_resize_en en_mode);  int ufshcd_suspend_prepare(struct device *dev);  int __ufshcd_suspend_prepare(struct device *dev, bool rpm_ok_for_spm);  void ufshcd_resume_complete(struct device *dev); | 
