Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/mpr/mpr_sas.c
Show First 20 Lines • Show All 965 Lines • ▼ Show 20 Lines | mprsas_action(struct cam_sim *sim, union ccb *ccb) | ||||
mpr_dprint(sassc->sc, MPR_TRACE, "ccb func_code 0x%x\n", | mpr_dprint(sassc->sc, MPR_TRACE, "ccb func_code 0x%x\n", | ||||
ccb->ccb_h.func_code); | ccb->ccb_h.func_code); | ||||
mtx_assert(&sassc->sc->mpr_mtx, MA_OWNED); | mtx_assert(&sassc->sc->mpr_mtx, MA_OWNED); | ||||
switch (ccb->ccb_h.func_code) { | switch (ccb->ccb_h.func_code) { | ||||
case XPT_PATH_INQ: | case XPT_PATH_INQ: | ||||
{ | { | ||||
struct ccb_pathinq *cpi = &ccb->cpi; | struct ccb_pathinq *cpi = &ccb->cpi; | ||||
struct mpr_softc *sc = sassc->sc; | |||||
uint8_t sges_per_frame; | |||||
cpi->version_num = 1; | cpi->version_num = 1; | ||||
cpi->hba_inquiry = PI_SDTR_ABLE|PI_TAG_ABLE|PI_WIDE_16; | cpi->hba_inquiry = PI_SDTR_ABLE|PI_TAG_ABLE|PI_WIDE_16; | ||||
cpi->target_sprt = 0; | cpi->target_sprt = 0; | ||||
#if (__FreeBSD_version >= 1000039) || \ | #if (__FreeBSD_version >= 1000039) || \ | ||||
((__FreeBSD_version < 1000000) && (__FreeBSD_version >= 902502)) | ((__FreeBSD_version < 1000000) && (__FreeBSD_version >= 902502)) | ||||
cpi->hba_misc = PIM_NOBUSRESET | PIM_UNMAPPED | PIM_NOSCAN; | cpi->hba_misc = PIM_NOBUSRESET | PIM_UNMAPPED | PIM_NOSCAN; | ||||
#else | #else | ||||
Show All 12 Lines | #endif | ||||
* XXXSLM-I think this needs to change based on config page or | * XXXSLM-I think this needs to change based on config page or | ||||
* something instead of hardcoded to 150000. | * something instead of hardcoded to 150000. | ||||
*/ | */ | ||||
cpi->base_transfer_speed = 150000; | cpi->base_transfer_speed = 150000; | ||||
cpi->transport = XPORT_SAS; | cpi->transport = XPORT_SAS; | ||||
cpi->transport_version = 0; | cpi->transport_version = 0; | ||||
cpi->protocol = PROTO_SCSI; | cpi->protocol = PROTO_SCSI; | ||||
cpi->protocol_version = SCSI_REV_SPC; | cpi->protocol_version = SCSI_REV_SPC; | ||||
#if __FreeBSD_version >= 800001 | |||||
/* | /* | ||||
* XXXSLM-probably need to base this number on max SGL's and | * Max IO Size is Page Size * the following: | ||||
* page size. | * ((SGEs per frame - 1 for chain element) * | ||||
* Max Chain Depth) + 1 for no chain needed in last frame | |||||
* | |||||
* If user suggests a Max IO size to use, use the smaller of the | |||||
* user's value and the calculated value as long as the user's | |||||
* value is larger than 0. The user's value is in pages. | |||||
*/ | */ | ||||
cpi->maxio = 256 * 1024; | sges_per_frame = (sc->chain_frame_size / | ||||
#endif | sizeof(MPI2_IEEE_SGE_SIMPLE64)) - 1; | ||||
cpi->maxio = (sges_per_frame * sc->facts->MaxChainDepth) + 1; | |||||
cpi->maxio *= PAGE_SIZE; | |||||
if ((sc->max_io_pages > 0) && (sc->max_io_pages * PAGE_SIZE < | |||||
cpi->maxio)) | |||||
cpi->maxio = sc->max_io_pages * PAGE_SIZE; | |||||
mprsas_set_ccbstatus(ccb, CAM_REQ_CMP); | mprsas_set_ccbstatus(ccb, CAM_REQ_CMP); | ||||
break; | break; | ||||
} | } | ||||
case XPT_GET_TRAN_SETTINGS: | case XPT_GET_TRAN_SETTINGS: | ||||
{ | { | ||||
struct ccb_trans_settings *cts; | struct ccb_trans_settings *cts; | ||||
struct ccb_trans_settings_sas *sas; | struct ccb_trans_settings_sas *sas; | ||||
struct ccb_trans_settings_scsi *scsi; | struct ccb_trans_settings_scsi *scsi; | ||||
▲ Show 20 Lines • Show All 2,530 Lines • Show Last 20 Lines |