mrsas_cam.c (299668) | mrsas_cam.c (299670) |
---|---|
1/* 2 * Copyright (c) 2015, AVAGO Tech. All rights reserved. Author: Marian Choy 3 * Copyright (c) 2014, LSI Corp. All rights reserved. Author: Marian Choy 4 * Support: freebsdraid@avagotech.com 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: --- 17 unchanged lines hidden (view full) --- 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 * 31 */ 32 33#include <sys/cdefs.h> | 1/* 2 * Copyright (c) 2015, AVAGO Tech. All rights reserved. Author: Marian Choy 3 * Copyright (c) 2014, LSI Corp. All rights reserved. Author: Marian Choy 4 * Support: freebsdraid@avagotech.com 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: --- 17 unchanged lines hidden (view full) --- 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 * POSSIBILITY OF SUCH DAMAGE. 30 * 31 */ 32 33#include <sys/cdefs.h> |
34__FBSDID("$FreeBSD: head/sys/dev/mrsas/mrsas_cam.c 299668 2016-05-13 12:12:09Z kadesai $"); | 34__FBSDID("$FreeBSD: head/sys/dev/mrsas/mrsas_cam.c 299670 2016-05-13 12:18:12Z kadesai $"); |
35 36#include "dev/mrsas/mrsas.h" 37 38#include <cam/cam.h> 39#include <cam/cam_ccb.h> 40#include <cam/cam_sim.h> 41#include <cam/cam_xpt_sim.h> 42#include <cam/cam_debug.h> --- 824 unchanged lines hidden (view full) --- 867 868 if (fp_possible) { 869 mrsas_set_pd_lba(io_request, csio->cdb_len, &io_info, ccb, map_ptr, 870 start_lba_lo, ld_block_size); 871 io_request->Function = MPI2_FUNCTION_SCSI_IO_REQUEST; 872 cmd->request_desc->SCSIIO.RequestFlags = 873 (MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY << 874 MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); | 35 36#include "dev/mrsas/mrsas.h" 37 38#include <cam/cam.h> 39#include <cam/cam_ccb.h> 40#include <cam/cam_sim.h> 41#include <cam/cam_xpt_sim.h> 42#include <cam/cam_debug.h> --- 824 unchanged lines hidden (view full) --- 867 868 if (fp_possible) { 869 mrsas_set_pd_lba(io_request, csio->cdb_len, &io_info, ccb, map_ptr, 870 start_lba_lo, ld_block_size); 871 io_request->Function = MPI2_FUNCTION_SCSI_IO_REQUEST; 872 cmd->request_desc->SCSIIO.RequestFlags = 873 (MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY << 874 MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); |
875 if ((sc->device_id == MRSAS_INVADER) || (sc->device_id == MRSAS_FURY)) { | 875 if ((sc->device_id == MRSAS_INVADER) || 876 (sc->device_id == MRSAS_FURY) || 877 (sc->device_id == MRSAS_INTRUDER) || 878 (sc->device_id == MRSAS_INTRUDER_24)) { |
876 if (io_request->RaidContext.regLockFlags == REGION_TYPE_UNUSED) 877 cmd->request_desc->SCSIIO.RequestFlags = 878 (MRSAS_REQ_DESCRIPT_FLAGS_NO_LOCK << 879 MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); 880 io_request->RaidContext.Type = MPI2_TYPE_CUDA; 881 io_request->RaidContext.nseg = 0x1; 882 io_request->IoFlags |= MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH; 883 io_request->RaidContext.regLockFlags |= --- 12 unchanged lines hidden (view full) --- 896 cmd->request_desc->SCSIIO.DevHandle = io_info.devHandle; 897 io_request->DevHandle = io_info.devHandle; 898 } else { 899 /* Not FP IO */ 900 io_request->RaidContext.timeoutValue = map_ptr->raidMap.fpPdIoTimeoutSec; 901 cmd->request_desc->SCSIIO.RequestFlags = 902 (MRSAS_REQ_DESCRIPT_FLAGS_LD_IO << 903 MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); | 879 if (io_request->RaidContext.regLockFlags == REGION_TYPE_UNUSED) 880 cmd->request_desc->SCSIIO.RequestFlags = 881 (MRSAS_REQ_DESCRIPT_FLAGS_NO_LOCK << 882 MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); 883 io_request->RaidContext.Type = MPI2_TYPE_CUDA; 884 io_request->RaidContext.nseg = 0x1; 885 io_request->IoFlags |= MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH; 886 io_request->RaidContext.regLockFlags |= --- 12 unchanged lines hidden (view full) --- 899 cmd->request_desc->SCSIIO.DevHandle = io_info.devHandle; 900 io_request->DevHandle = io_info.devHandle; 901 } else { 902 /* Not FP IO */ 903 io_request->RaidContext.timeoutValue = map_ptr->raidMap.fpPdIoTimeoutSec; 904 cmd->request_desc->SCSIIO.RequestFlags = 905 (MRSAS_REQ_DESCRIPT_FLAGS_LD_IO << 906 MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); |
904 if ((sc->device_id == MRSAS_INVADER) || (sc->device_id == MRSAS_FURY)) { | 907 if ((sc->device_id == MRSAS_INVADER) || 908 (sc->device_id == MRSAS_FURY) || 909 (sc->device_id == MRSAS_INTRUDER) || 910 (sc->device_id == MRSAS_INTRUDER_24)) { |
905 if (io_request->RaidContext.regLockFlags == REGION_TYPE_UNUSED) 906 cmd->request_desc->SCSIIO.RequestFlags = 907 (MRSAS_REQ_DESCRIPT_FLAGS_NO_LOCK << 908 MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); 909 io_request->RaidContext.Type = MPI2_TYPE_CUDA; 910 io_request->RaidContext.regLockFlags |= 911 (MR_RL_FLAGS_GRANT_DESTINATION_CPU0 | 912 MR_RL_FLAGS_SEQ_NUM_ENABLE); --- 259 unchanged lines hidden (view full) --- 1172 BUS_DMASYNC_PREWRITE); 1173 if (nseg > sc->max_num_sge) { 1174 device_printf(sc->mrsas_dev, "SGE count is too large or 0.\n"); 1175 return; 1176 } 1177 io_request = cmd->io_request; 1178 sgl_ptr = (pMpi25IeeeSgeChain64_t)&io_request->SGL; 1179 | 911 if (io_request->RaidContext.regLockFlags == REGION_TYPE_UNUSED) 912 cmd->request_desc->SCSIIO.RequestFlags = 913 (MRSAS_REQ_DESCRIPT_FLAGS_NO_LOCK << 914 MRSAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT); 915 io_request->RaidContext.Type = MPI2_TYPE_CUDA; 916 io_request->RaidContext.regLockFlags |= 917 (MR_RL_FLAGS_GRANT_DESTINATION_CPU0 | 918 MR_RL_FLAGS_SEQ_NUM_ENABLE); --- 259 unchanged lines hidden (view full) --- 1178 BUS_DMASYNC_PREWRITE); 1179 if (nseg > sc->max_num_sge) { 1180 device_printf(sc->mrsas_dev, "SGE count is too large or 0.\n"); 1181 return; 1182 } 1183 io_request = cmd->io_request; 1184 sgl_ptr = (pMpi25IeeeSgeChain64_t)&io_request->SGL; 1185 |
1180 if ((sc->device_id == MRSAS_INVADER) || (sc->device_id == MRSAS_FURY)) { | 1186 if ((sc->device_id == MRSAS_INVADER) || 1187 (sc->device_id == MRSAS_FURY) || 1188 (sc->device_id == MRSAS_INTRUDER) || 1189 (sc->device_id == MRSAS_INTRUDER_24)) { |
1181 pMpi25IeeeSgeChain64_t sgl_ptr_end = sgl_ptr; 1182 1183 sgl_ptr_end += sc->max_sge_in_main_msg - 1; 1184 sgl_ptr_end->Flags = 0; 1185 } 1186 if (nseg != 0) { 1187 for (i = 0; i < nseg; i++) { 1188 sgl_ptr->Address = segs[i].ds_addr; 1189 sgl_ptr->Length = segs[i].ds_len; 1190 sgl_ptr->Flags = 0; | 1190 pMpi25IeeeSgeChain64_t sgl_ptr_end = sgl_ptr; 1191 1192 sgl_ptr_end += sc->max_sge_in_main_msg - 1; 1193 sgl_ptr_end->Flags = 0; 1194 } 1195 if (nseg != 0) { 1196 for (i = 0; i < nseg; i++) { 1197 sgl_ptr->Address = segs[i].ds_addr; 1198 sgl_ptr->Length = segs[i].ds_len; 1199 sgl_ptr->Flags = 0; |
1191 if ((sc->device_id == MRSAS_INVADER) || (sc->device_id == MRSAS_FURY)) { | 1200 if ((sc->device_id == MRSAS_INVADER) || 1201 (sc->device_id == MRSAS_FURY) || 1202 (sc->device_id == MRSAS_INTRUDER) || 1203 (sc->device_id == MRSAS_INTRUDER_24)) { |
1192 if (i == nseg - 1) 1193 sgl_ptr->Flags = IEEE_SGE_FLAGS_END_OF_LIST; 1194 } 1195 sgl_ptr++; 1196 sg_processed = i + 1; 1197 if ((sg_processed == (sc->max_sge_in_main_msg - 1)) && 1198 (nseg > sc->max_sge_in_main_msg)) { 1199 pMpi25IeeeSgeChain64_t sg_chain; 1200 | 1204 if (i == nseg - 1) 1205 sgl_ptr->Flags = IEEE_SGE_FLAGS_END_OF_LIST; 1206 } 1207 sgl_ptr++; 1208 sg_processed = i + 1; 1209 if ((sg_processed == (sc->max_sge_in_main_msg - 1)) && 1210 (nseg > sc->max_sge_in_main_msg)) { 1211 pMpi25IeeeSgeChain64_t sg_chain; 1212 |
1201 if ((sc->device_id == MRSAS_INVADER) || (sc->device_id == MRSAS_FURY)) { | 1213 if ((sc->device_id == MRSAS_INVADER) || 1214 (sc->device_id == MRSAS_FURY) || 1215 (sc->device_id == MRSAS_INTRUDER) || 1216 (sc->device_id == MRSAS_INTRUDER_24)) { |
1202 if ((cmd->io_request->IoFlags & MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH) 1203 != MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH) 1204 cmd->io_request->ChainOffset = sc->chain_offset_io_request; 1205 else 1206 cmd->io_request->ChainOffset = 0; 1207 } else 1208 cmd->io_request->ChainOffset = sc->chain_offset_io_request; 1209 sg_chain = sgl_ptr; | 1217 if ((cmd->io_request->IoFlags & MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH) 1218 != MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH) 1219 cmd->io_request->ChainOffset = sc->chain_offset_io_request; 1220 else 1221 cmd->io_request->ChainOffset = 0; 1222 } else 1223 cmd->io_request->ChainOffset = sc->chain_offset_io_request; 1224 sg_chain = sgl_ptr; |
1210 if ((sc->device_id == MRSAS_INVADER) || (sc->device_id == MRSAS_FURY)) | 1225 if ((sc->device_id == MRSAS_INVADER) || 1226 (sc->device_id == MRSAS_FURY) || 1227 (sc->device_id == MRSAS_INTRUDER) || 1228 (sc->device_id == MRSAS_INTRUDER_24)) |
1211 sg_chain->Flags = IEEE_SGE_FLAGS_CHAIN_ELEMENT; 1212 else 1213 sg_chain->Flags = (IEEE_SGE_FLAGS_CHAIN_ELEMENT | MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR); 1214 sg_chain->Length = (sizeof(MPI2_SGE_IO_UNION) * (nseg - sg_processed)); 1215 sg_chain->Address = cmd->chain_frame_phys_addr; 1216 sgl_ptr = (pMpi25IeeeSgeChain64_t)cmd->chain_frame; 1217 } 1218 } --- 137 unchanged lines hidden --- | 1229 sg_chain->Flags = IEEE_SGE_FLAGS_CHAIN_ELEMENT; 1230 else 1231 sg_chain->Flags = (IEEE_SGE_FLAGS_CHAIN_ELEMENT | MPI2_IEEE_SGE_FLAGS_IOCPLBNTA_ADDR); 1232 sg_chain->Length = (sizeof(MPI2_SGE_IO_UNION) * (nseg - sg_processed)); 1233 sg_chain->Address = cmd->chain_frame_phys_addr; 1234 sgl_ptr = (pMpi25IeeeSgeChain64_t)cmd->chain_frame; 1235 } 1236 } --- 137 unchanged lines hidden --- |