smp_pkt
static int mptsas_smp_start(struct smp_pkt *smp_pkt)
mpt = (mptsas_t *)smp_pkt->smp_pkt_address->
bcopy(smp_pkt->smp_pkt_address->smp_a_wwn, &wwn, SAS_WWN_BYTE_SIZE);
if ((smp_pkt->smp_pkt_reqsize & 0xffff0000ul) != 0) {
smp_pkt->smp_pkt_reason = ERANGE;
req.RequestDataLength = LE_16((uint16_t)(smp_pkt->smp_pkt_reqsize - 4));
if (smp_pkt->smp_pkt_rspsize > 0) {
if (smp_pkt->smp_pkt_reqsize > 0) {
(uint8_t *)smp_pkt->smp_pkt_rsp,
smp_pkt->smp_pkt_rspsize - 4, direction,
(uint8_t *)smp_pkt->smp_pkt_req, smp_pkt->smp_pkt_reqsize - 4,
smp_pkt->smp_pkt_timeout, FKIOCTL);
smp_pkt->smp_pkt_reason = (uchar_t)(ret);
smp_pkt->smp_pkt_reason = ENODEV;
smp_pkt->smp_pkt_reason = EOVERFLOW;
smp_pkt->smp_pkt_reason = EIO;
smp_pkt->smp_pkt_reason = EIO;
smp_pkt->smp_pkt_reason = EIO;
static int mptsas_smp_start(struct smp_pkt *smp_pkt);
_NOTE(SCHEME_PROTECTS_DATA("unique per pkt", smp_pkt))
pmcs_smp_start(struct smp_pkt *smp_pkt)
pwp = smp_pkt->smp_pkt_address->smp_a_hba_tran->smp_tran_hba_private;
bcopy(smp_pkt->smp_pkt_address->smp_a_wwn, &wwn, SAS_WWN_BYTE_SIZE);
will_retry = smp_pkt->smp_pkt_will_retry;
reqsz = smp_pkt->smp_pkt_reqsize;
(void) memcpy(pwp->scratch, smp_pkt->smp_pkt_req, reqsz);
rspsz = smp_pkt->smp_pkt_rspsize;
smp_pkt->smp_pkt_reason = ENXIO;
smp_pkt->smp_pkt_reason = ENXIO;
smp_pkt->smp_pkt_reason = will_retry ? EAGAIN : EBUSY;
smp_pkt->smp_pkt_reason = will_retry ? EAGAIN :EBUSY;
WAIT_FOR(pwrk, smp_pkt->smp_pkt_timeout * 1000, result);
smp_pkt->smp_pkt_reason = ETIMEDOUT;
smp_pkt->smp_pkt_reason = EOVERFLOW;
smp_pkt->smp_pkt_reason =
smp_pkt->smp_pkt_reason = EIO;
smp_pkt->smp_pkt_reason = EIO;
smp_pkt->smp_pkt_reason = will_retry ? EAGAIN : EIO;
(void) memcpy(smp_pkt->smp_pkt_rsp,
if (smp_pkt->smp_pkt_reason == EOVERFLOW) {
static int pmcs_smp_start(struct smp_pkt *);
smp_transport(struct smp_pkt *smp_pkt)
return (smp_pkt->smp_pkt_address->
smp_a_hba_tran->smp_tran_start(smp_pkt));
smp_pkt_t *smp_pkt;
smp_pkt = &smp_pkt_data;
bzero(smp_pkt, sizeof (*smp_pkt));
smp_pkt->smp_pkt_address = &smp_sd->smp_sd_address;
smp_pkt->smp_pkt_req = (caddr_t)srq;
smp_pkt->smp_pkt_reqsize = sizeof (srq_buf);
smp_pkt->smp_pkt_rsp = (caddr_t)srs_buf;
smp_pkt->smp_pkt_rspsize = sizeof (srs_buf);
smp_pkt->smp_pkt_timeout = SMP_DEFAULT_TIMEOUT;
if (smp_transport(smp_pkt) != DDI_SUCCESS) {
if (smp_pkt->smp_pkt_reason != EOVERFLOW)
smp_pkt_t smp_pkt_data, *smp_pkt = &smp_pkt_data;
bzero(smp_pkt, sizeof (smp_pkt_t));
smp_pkt->smp_pkt_reqsize = usmp_cmd->usmp_reqsize;
smp_pkt->smp_pkt_rspsize = usmp_cmd->usmp_rspsize;
smp_pkt->smp_pkt_req = kmem_zalloc((size_t)usmp_cmd->usmp_reqsize,
smp_pkt->smp_pkt_rsp = kmem_zalloc((size_t)usmp_cmd->usmp_rspsize,
if (ddi_copyin(usmp_cmd->usmp_req, smp_pkt->smp_pkt_req,
DTRACE_PROBE1(smp__transport__start, caddr_t, smp_pkt->smp_pkt_req);
smp_pkt->smp_pkt_address = &smp_state->smp_sd->smp_sd_address;
smp_pkt->smp_pkt_timeout = SMP_DEFAULT_TIMEOUT;
smp_pkt->smp_pkt_timeout = usmp_cmd->usmp_timeout;
smp_pkt->smp_pkt_will_retry =
smp_pkt->smp_pkt_reason = 0;
rval = smp_transport(smp_pkt); /* put on the wire */
switch (smp_pkt->smp_pkt_reason) {
bzero(smp_pkt->smp_pkt_rsp,
smp_pkt->smp_pkt_reason);
rval = smp_pkt->smp_pkt_reason;
smp_pkt->smp_pkt_reason);
rval = smp_pkt->smp_pkt_reason;
if (ddi_copyout(smp_pkt->smp_pkt_rsp, usmp_cmd->usmp_rsp,
smp_pkt->smp_pkt_rsp, uchar_t, smp_pkt->smp_pkt_reason);
kmem_free(smp_pkt->smp_pkt_req, smp_pkt->smp_pkt_reqsize);
kmem_free(smp_pkt->smp_pkt_rsp, smp_pkt->smp_pkt_rspsize);
extern int smp_transport(struct smp_pkt *pkt);
struct smp_pkt *pkt);