summaryrefslogtreecommitdiffstats
path: root/sys/dev/mfi
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/mfi')
-rw-r--r--sys/dev/mfi/mfi.c10
-rw-r--r--sys/dev/mfi/mfi_cam.c17
-rw-r--r--sys/dev/mfi/mfivar.h1
3 files changed, 12 insertions, 16 deletions
diff --git a/sys/dev/mfi/mfi.c b/sys/dev/mfi/mfi.c
index 7cb19d2..ed759fc 100644
--- a/sys/dev/mfi/mfi.c
+++ b/sys/dev/mfi/mfi.c
@@ -2267,8 +2267,14 @@ mfi_mapcmd(struct mfi_softc *sc, struct mfi_command *cm)
if ((cm->cm_data != NULL) && (cm->cm_frame->header.cmd != MFI_CMD_STP )) {
polled = (cm->cm_flags & MFI_CMD_POLLED) ? BUS_DMA_NOWAIT : 0;
- error = bus_dmamap_load(sc->mfi_buffer_dmat, cm->cm_dmamap,
- cm->cm_data, cm->cm_len, mfi_data_cb, cm, polled);
+ if (cm->cm_flags & MFI_CMD_CCB)
+ error = bus_dmamap_load_ccb(sc->mfi_buffer_dmat,
+ cm->cm_dmamap, cm->cm_data, mfi_data_cb, cm,
+ polled);
+ else
+ error = bus_dmamap_load(sc->mfi_buffer_dmat,
+ cm->cm_dmamap, cm->cm_data, cm->cm_len,
+ mfi_data_cb, cm, polled);
if (error == EINPROGRESS) {
sc->mfi_flags |= MFI_FLAGS_QFRZN;
return (0);
diff --git a/sys/dev/mfi/mfi_cam.c b/sys/dev/mfi/mfi_cam.c
index 2bbfafe..325b064 100644
--- a/sys/dev/mfi/mfi_cam.c
+++ b/sys/dev/mfi/mfi_cam.c
@@ -265,17 +265,6 @@ mfip_cam_action(struct cam_sim *sim, union ccb *ccb)
ccbh->status = CAM_REQ_INVALID;
break;
}
- if ((ccbh->flags & CAM_DIR_MASK) != CAM_DIR_NONE) {
- if (ccbh->flags & CAM_DATA_PHYS) {
- ccbh->status = CAM_REQ_INVALID;
- break;
- }
- if (ccbh->flags & CAM_SCATTER_VALID) {
- ccbh->status = CAM_REQ_INVALID;
- break;
- }
- }
-
ccbh->ccb_mfip_ptr = sc;
TAILQ_INSERT_TAIL(&mfisc->mfi_cam_ccbq, ccbh, sim_links.tqe);
mfi_startio(mfisc);
@@ -380,14 +369,14 @@ mfip_start(void *data)
cm->cm_private = ccb;
cm->cm_sg = &pt->sgl;
cm->cm_total_frame_size = MFI_PASS_FRAME_SIZE;
- cm->cm_data = csio->data_ptr;
+ cm->cm_data = ccb;
cm->cm_len = csio->dxfer_len;
switch (ccbh->flags & CAM_DIR_MASK) {
case CAM_DIR_IN:
- cm->cm_flags = MFI_CMD_DATAIN;
+ cm->cm_flags = MFI_CMD_DATAIN | MFI_CMD_CCB;
break;
case CAM_DIR_OUT:
- cm->cm_flags = MFI_CMD_DATAOUT;
+ cm->cm_flags = MFI_CMD_DATAOUT | MFI_CMD_CCB;
break;
case CAM_DIR_NONE:
default:
diff --git a/sys/dev/mfi/mfivar.h b/sys/dev/mfi/mfivar.h
index 435ca8d..bb2a324 100644
--- a/sys/dev/mfi/mfivar.h
+++ b/sys/dev/mfi/mfivar.h
@@ -107,6 +107,7 @@ struct mfi_command {
#define MFI_ON_MFIQ_BUSY (1<<7)
#define MFI_ON_MFIQ_MASK ((1<<5)|(1<<6)|(1<<7))
#define MFI_CMD_SCSI (1<<8)
+#define MFI_CMD_CCB (1<<9)
uint8_t retry_for_fw_reset;
void (* cm_complete)(struct mfi_command *cm);
void *cm_private;
OpenPOWER on IntegriCloud