Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/smartpqi/smartpqi_cam.c
Show First 20 Lines • Show All 477 Lines • ▼ Show 20 Lines | if( error || nseg > softs->pqi_cap.max_sg_elem ) | ||||
DBG_ERR_BTL(rcb->dvp, "map failed err = %d or nseg(%d) > sgelem(%d)\n", | DBG_ERR_BTL(rcb->dvp, "map failed err = %d or nseg(%d) > sgelem(%d)\n", | ||||
error, nseg, softs->pqi_cap.max_sg_elem); | error, nseg, softs->pqi_cap.max_sg_elem); | ||||
pqi_unmap_request(rcb); | pqi_unmap_request(rcb); | ||||
xpt_done((union ccb *)rcb->cm_ccb); | xpt_done((union ccb *)rcb->cm_ccb); | ||||
return; | return; | ||||
} | } | ||||
rcb->sgt = os_mem_alloc(softs, nseg * sizeof(rcb_t)); | rcb->sgt = os_mem_alloc(softs, nseg * sizeof(rcb_t)); | ||||
if (rcb->sgt == NULL) { | |||||
xpt_freeze_simq(softs->os_specific.sim, 1); | |||||
rcb->cm_ccb->ccb_h.status |= (CAM_REQUEUE_REQ| | |||||
CAM_RELEASE_SIMQ); | |||||
DBG_ERR_BTL(rcb->dvp, "os_mem_alloc() failed; nseg = %d\n", nseg); | |||||
pqi_unmap_request(rcb); | |||||
xpt_done((union ccb *)rcb->cm_ccb); | |||||
return; | |||||
} | |||||
rcb->nseg = nseg; | rcb->nseg = nseg; | ||||
if (rcb->sgt != NULL) { | |||||
for (int i = 0; i < nseg; i++) { | for (int i = 0; i < nseg; i++) { | ||||
rcb->sgt[i].addr = segs[i].ds_addr; | rcb->sgt[i].addr = segs[i].ds_addr; | ||||
rcb->sgt[i].len = segs[i].ds_len; | rcb->sgt[i].len = segs[i].ds_len; | ||||
rcb->sgt[i].flags = 0; | rcb->sgt[i].flags = 0; | ||||
} | |||||
} | } | ||||
if (rcb->data_dir == SOP_DATA_DIR_FROM_DEVICE) | if (rcb->data_dir == SOP_DATA_DIR_FROM_DEVICE) | ||||
bus_dmamap_sync(softs->os_specific.pqi_buffer_dmat, | bus_dmamap_sync(softs->os_specific.pqi_buffer_dmat, | ||||
rcb->cm_datamap, BUS_DMASYNC_PREREAD); | rcb->cm_datamap, BUS_DMASYNC_PREREAD); | ||||
if (rcb->data_dir == SOP_DATA_DIR_TO_DEVICE) | if (rcb->data_dir == SOP_DATA_DIR_TO_DEVICE) | ||||
bus_dmamap_sync(softs->os_specific.pqi_buffer_dmat, | bus_dmamap_sync(softs->os_specific.pqi_buffer_dmat, | ||||
rcb->cm_datamap, BUS_DMASYNC_PREWRITE); | rcb->cm_datamap, BUS_DMASYNC_PREWRITE); | ||||
▲ Show 20 Lines • Show All 700 Lines • Show Last 20 Lines |