Deleted Added
full compact
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 ---