1*3287e96aSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 2be086e7cSMintz, Yuval /* QLogic FCoE Offload Driver 35d1c8b5bSChad Dupuis * Copyright (c) 2016-2018 Cavium Inc. 4be086e7cSMintz, Yuval */ 5be086e7cSMintz, Yuval #include "drv_scsi_fw_funcs.h" 6be086e7cSMintz, Yuval 7be086e7cSMintz, Yuval #define SCSI_NUM_SGES_IN_CACHE 0x4 8be086e7cSMintz, Yuval 9be086e7cSMintz, Yuval bool scsi_is_slow_sgl(u16 num_sges, bool small_mid_sge) 10be086e7cSMintz, Yuval { 11be086e7cSMintz, Yuval return (num_sges > SCSI_NUM_SGES_SLOW_SGL_THR && small_mid_sge); 12be086e7cSMintz, Yuval } 13be086e7cSMintz, Yuval 14be086e7cSMintz, Yuval void init_scsi_sgl_context(struct scsi_sgl_params *ctx_sgl_params, 15be086e7cSMintz, Yuval struct scsi_cached_sges *ctx_data_desc, 16be086e7cSMintz, Yuval struct scsi_sgl_task_params *sgl_task_params) 17be086e7cSMintz, Yuval { 18be086e7cSMintz, Yuval /* no need to check for sgl_task_params->sgl validity */ 19be086e7cSMintz, Yuval u8 num_sges_to_init = sgl_task_params->num_sges > 20be086e7cSMintz, Yuval SCSI_NUM_SGES_IN_CACHE ? SCSI_NUM_SGES_IN_CACHE : 21be086e7cSMintz, Yuval sgl_task_params->num_sges; 22be086e7cSMintz, Yuval u8 sge_index; 23be086e7cSMintz, Yuval u32 val; 24be086e7cSMintz, Yuval 25be086e7cSMintz, Yuval val = cpu_to_le32(sgl_task_params->sgl_phys_addr.lo); 26be086e7cSMintz, Yuval ctx_sgl_params->sgl_addr.lo = val; 27be086e7cSMintz, Yuval val = cpu_to_le32(sgl_task_params->sgl_phys_addr.hi); 28be086e7cSMintz, Yuval ctx_sgl_params->sgl_addr.hi = val; 29be086e7cSMintz, Yuval val = cpu_to_le32(sgl_task_params->total_buffer_size); 30be086e7cSMintz, Yuval ctx_sgl_params->sgl_total_length = val; 31be086e7cSMintz, Yuval ctx_sgl_params->sgl_num_sges = cpu_to_le16(sgl_task_params->num_sges); 32be086e7cSMintz, Yuval 33be086e7cSMintz, Yuval for (sge_index = 0; sge_index < num_sges_to_init; sge_index++) { 34be086e7cSMintz, Yuval val = cpu_to_le32(sgl_task_params->sgl[sge_index].sge_addr.lo); 35be086e7cSMintz, Yuval ctx_data_desc->sge[sge_index].sge_addr.lo = val; 36be086e7cSMintz, Yuval val = cpu_to_le32(sgl_task_params->sgl[sge_index].sge_addr.hi); 37be086e7cSMintz, Yuval ctx_data_desc->sge[sge_index].sge_addr.hi = val; 38be086e7cSMintz, Yuval val = cpu_to_le32(sgl_task_params->sgl[sge_index].sge_len); 39be086e7cSMintz, Yuval ctx_data_desc->sge[sge_index].sge_len = val; 40be086e7cSMintz, Yuval } 41be086e7cSMintz, Yuval } 42