mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Make some slight reorganization (bringing back in some
non-CAM_NEW_TRAN code) to make diffs to previous FreeBSD versions more manageable.
This commit is contained in:
parent
6cbb70e2cc
commit
c3b65db84f
1 changed files with 86 additions and 12 deletions
|
|
@ -110,6 +110,12 @@ __FBSDID("$FreeBSD$");
|
|||
#include <sys/callout.h>
|
||||
#include <sys/kthread.h>
|
||||
|
||||
#if __FreeBSD_version >= 700000
|
||||
#ifndef CAM_NEW_TRAN_CODE
|
||||
#define CAM_NEW_TRAN_CODE 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static void mpt_poll(struct cam_sim *);
|
||||
static timeout_t mpt_timeout;
|
||||
static void mpt_action(struct cam_sim *, union ccb *);
|
||||
|
|
@ -2951,7 +2957,11 @@ mpt_action(struct cam_sim *sim, union ccb *ccb)
|
|||
break;
|
||||
}
|
||||
|
||||
#ifdef CAM_NEW_TRAN_CODE
|
||||
#define IS_CURRENT_SETTINGS(c) ((c)->type == CTS_TYPE_CURRENT_SETTINGS)
|
||||
#else
|
||||
#define IS_CURRENT_SETTINGS(c) ((c)->flags & CCB_TRANS_CURRENT_SETTINGS)
|
||||
#endif
|
||||
#define DP_DISC_ENABLE 0x1
|
||||
#define DP_DISC_DISABL 0x2
|
||||
#define DP_DISC (DP_DISC_ENABLE|DP_DISC_DISABL)
|
||||
|
|
@ -2968,8 +2978,10 @@ mpt_action(struct cam_sim *sim, union ccb *ccb)
|
|||
|
||||
case XPT_SET_TRAN_SETTINGS: /* Nexus Settings */
|
||||
{
|
||||
#ifdef CAM_NEW_TRAN_CODE
|
||||
struct ccb_trans_settings_scsi *scsi;
|
||||
struct ccb_trans_settings_spi *spi;
|
||||
#endif
|
||||
uint8_t dval;
|
||||
u_int period;
|
||||
u_int offset;
|
||||
|
|
@ -2982,6 +2994,7 @@ mpt_action(struct cam_sim *sim, union ccb *ccb)
|
|||
break;
|
||||
}
|
||||
|
||||
#ifdef CAM_NEW_TRAN_CODE
|
||||
scsi = &cts->proto_specific.scsi;
|
||||
spi = &cts->xport_specific.spi;
|
||||
|
||||
|
|
@ -2992,6 +3005,7 @@ mpt_action(struct cam_sim *sim, union ccb *ccb)
|
|||
mpt_set_ccb_status(ccb, CAM_REQ_CMP);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Skip attempting settings on RAID volume disks.
|
||||
|
|
@ -3021,6 +3035,28 @@ mpt_action(struct cam_sim *sim, union ccb *ccb)
|
|||
period = 0;
|
||||
offset = 0;
|
||||
|
||||
#ifndef CAM_NEW_TRAN_CODE
|
||||
if ((cts->valid & CCB_TRANS_DISC_VALID) != 0) {
|
||||
dval |= (cts->flags & CCB_TRANS_DISC_ENB) ?
|
||||
DP_DISC_ENABLE : DP_DISC_DISABL;
|
||||
}
|
||||
|
||||
if ((cts->valid & CCB_TRANS_TQ_VALID) != 0) {
|
||||
dval |= (cts->flags & CCB_TRANS_TAG_ENB) ?
|
||||
DP_TQING_ENABLE : DP_TQING_DISABL;
|
||||
}
|
||||
|
||||
if ((cts->valid & CCB_TRANS_BUS_WIDTH_VALID) != 0) {
|
||||
dval |= cts->bus_width ? DP_WIDE : DP_NARROW;
|
||||
}
|
||||
|
||||
if ((cts->valid & CCB_TRANS_SYNC_RATE_VALID) &&
|
||||
(cts->valid & CCB_TRANS_SYNC_OFFSET_VALID)) {
|
||||
dval |= DP_SYNC;
|
||||
period = cts->sync_period;
|
||||
offset = cts->sync_offset;
|
||||
}
|
||||
#else
|
||||
if ((spi->valid & CTS_SPI_VALID_DISC) != 0) {
|
||||
dval |= ((spi->flags & CTS_SPI_FLAGS_DISC_ENB) != 0) ?
|
||||
DP_DISC_ENABLE : DP_DISC_DISABL;
|
||||
|
|
@ -3056,6 +3092,7 @@ mpt_action(struct cam_sim *sim, union ccb *ccb)
|
|||
period &= MPI_SCSIDEVPAGE1_RP_MIN_SYNC_PERIOD_MASK;
|
||||
period >>= MPI_SCSIDEVPAGE1_RP_SHIFT_MIN_SYNC_PERIOD;
|
||||
}
|
||||
#endif
|
||||
CAMLOCK_2_MPTLOCK(mpt);
|
||||
if (dval & DP_DISC_ENABLE) {
|
||||
mpt->mpt_disc_enable |= (1 << tgt);
|
||||
|
|
@ -3091,8 +3128,10 @@ mpt_action(struct cam_sim *sim, union ccb *ccb)
|
|||
}
|
||||
case XPT_GET_TRAN_SETTINGS:
|
||||
{
|
||||
cts = &ccb->cts;
|
||||
#ifdef CAM_NEW_TRAN_CODE
|
||||
struct ccb_trans_settings_scsi *scsi;
|
||||
cts = &ccb->cts;
|
||||
cts->protocol = PROTO_SCSI;
|
||||
if (mpt->is_fc) {
|
||||
struct ccb_trans_settings_fc *fc =
|
||||
&cts->xport_specific.fc;
|
||||
|
|
@ -3104,24 +3143,38 @@ mpt_action(struct cam_sim *sim, union ccb *ccb)
|
|||
} else if (mpt->is_sas) {
|
||||
struct ccb_trans_settings_sas *sas =
|
||||
&cts->xport_specific.sas;
|
||||
|
||||
cts->protocol_version = SCSI_REV_SPC2;
|
||||
cts->transport = XPORT_SAS;
|
||||
cts->transport_version = 0;
|
||||
sas->valid = CTS_SAS_VALID_SPEED;
|
||||
sas->bitrate = 300000;
|
||||
} else {
|
||||
cts->protocol_version = SCSI_REV_2;
|
||||
cts->transport = XPORT_SPI;
|
||||
cts->transport_version = 2;
|
||||
if (mpt_get_spi_settings(mpt, cts) != 0) {
|
||||
mpt_set_ccb_status(ccb, CAM_REQ_CMP_ERR);
|
||||
} else {
|
||||
mpt_set_ccb_status(ccb, CAM_REQ_CMP);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
cts->protocol = PROTO_SCSI;
|
||||
scsi = &cts->proto_specific.scsi;
|
||||
scsi->valid = CTS_SCSI_VALID_TQ;
|
||||
scsi->flags = CTS_SCSI_FLAGS_TAG_ENB;
|
||||
#else
|
||||
cts = &ccb->cts;
|
||||
if (mpt->is_fc) {
|
||||
cts->flags = CCB_TRANS_TAG_ENB | CCB_TRANS_DISC_ENB;
|
||||
cts->valid = CCB_TRANS_DISC_VALID | CCB_TRANS_TQ_VALID;
|
||||
cts->bus_width = MSG_EXT_WDTR_BUS_8_BIT;
|
||||
} else if (mpt->is_sas) {
|
||||
cts->flags = CCB_TRANS_TAG_ENB | CCB_TRANS_DISC_ENB;
|
||||
cts->valid = CCB_TRANS_DISC_VALID | CCB_TRANS_TQ_VALID;
|
||||
cts->bus_width = MSG_EXT_WDTR_BUS_8_BIT;
|
||||
} else if (mpt_get_spi_settings(mpt, cts) != 0) {
|
||||
mpt_set_ccb_status(ccb, CAM_REQ_CMP_ERR);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
mpt_set_ccb_status(ccb, CAM_REQ_CMP);
|
||||
break;
|
||||
}
|
||||
|
|
@ -3296,18 +3349,15 @@ mpt_action(struct cam_sim *sim, union ccb *ccb)
|
|||
static int
|
||||
mpt_get_spi_settings(struct mpt_softc *mpt, struct ccb_trans_settings *cts)
|
||||
{
|
||||
#ifdef CAM_NEW_TRAN_CODE
|
||||
struct ccb_trans_settings_scsi *scsi = &cts->proto_specific.scsi;
|
||||
struct ccb_trans_settings_spi *spi = &cts->xport_specific.spi;
|
||||
#endif
|
||||
target_id_t tgt;
|
||||
uint32_t dval, pval, oval;
|
||||
int rv;
|
||||
|
||||
cts->protocol = PROTO_SCSI;
|
||||
cts->protocol_version = SCSI_REV_2;
|
||||
cts->transport = XPORT_SPI;
|
||||
cts->transport_version = 2;
|
||||
|
||||
if (cts->type == CTS_TYPE_USER_SETTINGS) {
|
||||
if (IS_CURRENT_SETTINGS(cts) == 0) {
|
||||
tgt = cts->ccb_h.target_id;
|
||||
} else if (xpt_path_sim(cts->ccb_h.path) == mpt->phydisk_sim) {
|
||||
if (mpt_map_physdisk(mpt, (union ccb *)cts, &tgt)) {
|
||||
|
|
@ -3364,6 +3414,29 @@ mpt_get_spi_settings(struct mpt_softc *mpt, struct ccb_trans_settings *cts)
|
|||
pval = MPI_SCSIPORTPAGE0_CAP_GET_MIN_SYNC_PERIOD(pval);
|
||||
}
|
||||
|
||||
#ifndef CAM_NEW_TRAN_CODE
|
||||
cts->flags &= ~(CCB_TRANS_DISC_ENB|CCB_TRANS_TAG_ENB);
|
||||
cts->valid = 0;
|
||||
cts->sync_period = pval;
|
||||
cts->sync_offset = oval;
|
||||
cts->valid |= CCB_TRANS_SYNC_RATE_VALID;
|
||||
cts->valid |= CCB_TRANS_SYNC_OFFSET_VALID;
|
||||
cts->valid |= CCB_TRANS_BUS_WIDTH_VALID;
|
||||
if (dval & DP_WIDE) {
|
||||
cts->bus_width = MSG_EXT_WDTR_BUS_16_BIT;
|
||||
} else {
|
||||
cts->bus_width = MSG_EXT_WDTR_BUS_8_BIT;
|
||||
}
|
||||
if (cts->ccb_h.target_lun != CAM_LUN_WILDCARD) {
|
||||
cts->valid |= CCB_TRANS_DISC_VALID | CCB_TRANS_TQ_VALID;
|
||||
if (dval & DP_DISC_ENABLE) {
|
||||
cts->flags |= CCB_TRANS_DISC_ENB;
|
||||
}
|
||||
if (dval & DP_TQING_ENABLE) {
|
||||
cts->flags |= CCB_TRANS_TAG_ENB;
|
||||
}
|
||||
}
|
||||
#else
|
||||
spi->valid = 0;
|
||||
scsi->valid = 0;
|
||||
spi->flags = 0;
|
||||
|
|
@ -3388,6 +3461,7 @@ mpt_get_spi_settings(struct mpt_softc *mpt, struct ccb_trans_settings *cts)
|
|||
spi->flags |= CTS_SPI_FLAGS_DISC_ENB;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
|
||||
"mpt_get_spi_settings[%d]: %s flags 0x%x per 0x%x off=%d\n", tgt,
|
||||
IS_CURRENT_SETTINGS(cts)? "ACTIVE" : "NVRAM ", dval, pval, oval);
|
||||
|
|
|
|||
Loading…
Reference in a new issue