Fix na_fcentry_t to not have a lun field. Fix indentation in handly

the notify structs. Fix messages in isp_got_msg_fc to print out the
loop id of the sender- not the wwpn which will be synthesized later,
if possible, in the outer layers. Put in debug printouts to pair
a notify ack to a notify so one can see the start/close of an
immediate notify event. Put in spsace for TASK MANAGEMENT response
flags (which we don't do yet).
This commit is contained in:
Matt Jacob 2006-08-04 20:20:00 +00:00
parent 4177525533
commit b4110d4604
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=160978
3 changed files with 57 additions and 37 deletions

View file

@ -1648,9 +1648,9 @@ isp_put_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *nasrc,
int i;
isp_copy_out_hdr(isp, &nasrc->na_header, &nadst->na_header);
ISP_IOXPUT_32(isp, nasrc->na_reserved, &nadst->na_reserved);
ISP_IOXPUT_8(isp, nasrc->na_lun, &nadst->na_lun);
ISP_IOXPUT_8(isp, nasrc->na_reserved1, &nadst->na_reserved1);
ISP_IOXPUT_8(isp, nasrc->na_iid, &nadst->na_iid);
ISP_IOXPUT_16(isp, nasrc->na_scclun, &nadst->na_scclun);
ISP_IOXPUT_16(isp, nasrc->na_response, &nadst->na_response);
ISP_IOXPUT_16(isp, nasrc->na_flags, &nadst->na_flags);
ISP_IOXPUT_16(isp, nasrc->na_reserved2, &nadst->na_reserved2);
ISP_IOXPUT_16(isp, nasrc->na_status, &nadst->na_status);
@ -1670,7 +1670,7 @@ isp_put_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *nasrc,
isp_copy_out_hdr(isp, &nasrc->na_header, &nadst->na_header);
ISP_IOXPUT_32(isp, nasrc->na_reserved, &nadst->na_reserved);
ISP_IOXPUT_16(isp, nasrc->na_iid, &nadst->na_iid);
ISP_IOXPUT_16(isp, nasrc->na_scclun, &nadst->na_scclun);
ISP_IOXPUT_16(isp, nasrc->na_response, &nadst->na_response);
ISP_IOXPUT_16(isp, nasrc->na_flags, &nadst->na_flags);
ISP_IOXPUT_16(isp, nasrc->na_reserved2, &nadst->na_reserved2);
ISP_IOXPUT_16(isp, nasrc->na_status, &nadst->na_status);
@ -1689,9 +1689,9 @@ isp_get_notify_ack_fc(ispsoftc_t *isp, na_fcentry_t *nasrc,
int i;
isp_copy_in_hdr(isp, &nasrc->na_header, &nadst->na_header);
ISP_IOXGET_32(isp, &nasrc->na_reserved, nadst->na_reserved);
ISP_IOXGET_8(isp, &nasrc->na_lun, nadst->na_lun);
ISP_IOXGET_8(isp, &nasrc->na_reserved1, nadst->na_reserved1);
ISP_IOXGET_8(isp, &nasrc->na_iid, nadst->na_iid);
ISP_IOXGET_16(isp, &nasrc->na_scclun, nadst->na_scclun);
ISP_IOXGET_16(isp, &nasrc->na_response, nadst->na_response);
ISP_IOXGET_16(isp, &nasrc->na_flags, nadst->na_flags);
ISP_IOXGET_16(isp, &nasrc->na_reserved2, nadst->na_reserved2);
ISP_IOXGET_16(isp, &nasrc->na_status, nadst->na_status);
@ -1711,7 +1711,7 @@ isp_get_notify_ack_fc_e(ispsoftc_t *isp, na_fcentry_e_t *nasrc,
isp_copy_in_hdr(isp, &nasrc->na_header, &nadst->na_header);
ISP_IOXGET_32(isp, &nasrc->na_reserved, nadst->na_reserved);
ISP_IOXGET_16(isp, &nasrc->na_iid, nadst->na_iid);
ISP_IOXGET_16(isp, &nasrc->na_scclun, nadst->na_scclun);
ISP_IOXGET_16(isp, &nasrc->na_response, nadst->na_response);
ISP_IOXGET_16(isp, &nasrc->na_flags, nadst->na_flags);
ISP_IOXGET_16(isp, &nasrc->na_reserved2, nadst->na_reserved2);
ISP_IOXGET_16(isp, &nasrc->na_status, nadst->na_status);

View file

@ -195,10 +195,12 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint16_t *optrp)
bus = 0;
if (IS_FC(isp)) {
if (IS_2KLOGIN(isp)) {
isp_get_notify_fc_e(isp, inote_fcp, (in_fcentry_e_t *)local);
} else {
isp_get_notify_fc(isp, inot_fcp, (in_fcentry_t *)local);
}
isp_get_notify_fc_e(isp, inote_fcp,
(in_fcentry_e_t *)local);
} else {
isp_get_notify_fc(isp, inot_fcp,
(in_fcentry_t *)local);
}
inot_fcp = (in_fcentry_t *) local;
status = inot_fcp->in_status;
seqid = inot_fcp->in_seqid;
@ -212,6 +214,7 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint16_t *optrp)
SET_BUS_VAL(inotp->in_iid, 0);
}
}
isp_prt(isp, ISP_LOGTDEBUG0,
"Immediate Notify On Bus %d, status=0x%x seqid=0x%x",
bus, status, seqid);
@ -676,18 +679,20 @@ static void
isp_got_msg_fc(ispsoftc_t *isp, in_fcentry_t *inp)
{
tmd_notify_t nt;
static const char f1[] = "%s from iid 0x%08x%08x lun %d seq 0x%x";
static const char f1[] = "%s from loop id %d lun %d seq 0x%x";
static const char f2[] =
"unknown %s 0x%x lun %d iid 0x%08x%08x task flags 0x%x seq 0x%x\n";
uint16_t seqid;
"unknown %s 0x%x lun %d loop id %d task flags 0x%x seq 0x%x\n";
uint16_t seqid, loopid;
MEMZERO(&nt, sizeof (tmd_notify_t));
nt.nt_hba = isp;
if (IS_2KLOGIN(isp)) {
nt.nt_iid = ((in_fcentry_e_t *)inp)->in_iid;
loopid = ((in_fcentry_e_t *)inp)->in_iid;
seqid = ((in_fcentry_e_t *)inp)->in_seqid;
} else {
nt.nt_iid = inp->in_iid;
loopid = inp->in_iid;
seqid = inp->in_seqid;
}
/* nt_tgt set in outer layers */
@ -701,36 +706,35 @@ isp_got_msg_fc(ispsoftc_t *isp, in_fcentry_t *inp)
if (inp->in_status != IN_MSG_RECEIVED) {
isp_prt(isp, ISP_LOGINFO, f2, "immediate notify status",
inp->in_status, nt.nt_lun, (uint32_t) (nt.nt_iid >> 32), (uint32_t) nt.nt_iid,
inp->in_task_flags, inp->in_seqid);
inp->in_status, nt.nt_lun, loopid, inp->in_task_flags,
inp->in_seqid);
isp_notify_ack(isp, inp);
return;
}
if (inp->in_task_flags & TASK_FLAGS_ABORT_TASK_SET) {
isp_prt(isp, ISP_LOGINFO, f1, "ABORT TASK SET",
(uint32_t) (nt.nt_iid >> 32), (uint32_t) nt.nt_iid, nt.nt_lun, inp->in_seqid);
loopid, nt.nt_lun, inp->in_seqid);
nt.nt_ncode = NT_ABORT_TASK_SET;
} else if (inp->in_task_flags & TASK_FLAGS_CLEAR_TASK_SET) {
isp_prt(isp, ISP_LOGINFO, f1, "CLEAR TASK SET",
(uint32_t) (nt.nt_iid >> 32), (uint32_t) nt.nt_iid, nt.nt_lun, inp->in_seqid);
loopid, nt.nt_lun, inp->in_seqid);
nt.nt_ncode = NT_CLEAR_TASK_SET;
} else if (inp->in_task_flags & TASK_FLAGS_LUN_RESET) {
isp_prt(isp, ISP_LOGINFO, f1, "LUN RESET",
(uint32_t) (nt.nt_iid >> 32), (uint32_t) nt.nt_iid, nt.nt_lun, inp->in_seqid);
loopid, nt.nt_lun, inp->in_seqid);
nt.nt_ncode = NT_LUN_RESET;
} else if (inp->in_task_flags & TASK_FLAGS_TARGET_RESET) {
isp_prt(isp, ISP_LOGINFO, f1, "TARGET RESET",
(uint32_t) (nt.nt_iid >> 32), (uint32_t) nt.nt_iid, nt.nt_lun, inp->in_seqid);
loopid, nt.nt_lun, inp->in_seqid);
nt.nt_ncode = NT_TARGET_RESET;
} else if (inp->in_task_flags & TASK_FLAGS_CLEAR_ACA) {
isp_prt(isp, ISP_LOGINFO, f1, "CLEAR ACA",
(uint32_t) (nt.nt_iid >> 32), (uint32_t) nt.nt_iid, nt.nt_lun, inp->in_seqid);
loopid, nt.nt_lun, inp->in_seqid);
nt.nt_ncode = NT_CLEAR_ACA;
} else {
isp_prt(isp, ISP_LOGWARN, f2, "task flag",
inp->in_status, nt.nt_lun, (uint32_t) (nt.nt_iid >> 32), (uint32_t) nt.nt_iid,
inp->in_task_flags, inp->in_seqid);
isp_prt(isp, ISP_LOGWARN, f2, "task flag", inp->in_status,
nt.nt_lun, loopid, inp->in_task_flags, inp->in_seqid);
isp_notify_ack(isp, inp);
return;
}
@ -754,36 +758,45 @@ isp_notify_ack(ispsoftc_t *isp, void *arg)
if (IS_FC(isp)) {
na_fcentry_t *na = (na_fcentry_t *) storage;
int iid = 0;
if (arg) {
in_fcentry_t *inp = arg;
MEMCPY(storage, arg, sizeof (isphdr_t));
if (IS_2KLOGIN(isp)) {
((na_fcentry_e_t *)na)->na_iid = ((in_fcentry_e_t *)inp)->in_iid;
((na_fcentry_e_t *)na)->na_iid =
((in_fcentry_e_t *)inp)->in_iid;
iid = ((na_fcentry_e_t *)na)->na_iid;
} else {
na->na_iid = inp->in_iid;
iid = na->na_iid;
}
if (FCPARAM(isp)->isp_fwattr & ISP_FW_ATTR_SCCLUN) {
na->na_lun = inp->in_scclun;
} else {
na->na_lun = inp->in_lun;
}
na->na_task_flags = inp->in_task_flags;
na->na_task_flags =
inp->in_task_flags & TASK_FLAGS_RESERVED_MASK;
na->na_seqid = inp->in_seqid;
na->na_flags = NAFC_RCOUNT;
na->na_status = inp->in_status;
if (inp->in_status == IN_RESET) {
na->na_flags |= NAFC_RST_CLRD;
}
if (inp->in_status == IN_MSG_RECEIVED) {
na->na_flags |= NAFC_TVALID;
na->na_response = 0; /* XXX SUCCEEDED XXX */
}
} else {
na->na_flags = NAFC_RST_CLRD;
}
na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK;
na->na_header.rqs_entry_count = 1;
if (IS_2KLOGIN(isp)) {
isp_put_notify_ack_fc_e(isp, (na_fcentry_e_t *) na, (na_fcentry_e_t *)outp);
isp_put_notify_ack_fc_e(isp, (na_fcentry_e_t *) na,
(na_fcentry_e_t *)outp);
} else {
isp_put_notify_ack_fc(isp, na, (na_fcentry_t *)outp);
}
isp_prt(isp, ISP_LOGTDEBUG0, "notify ack iid %u seqid %x flags "
"%x tflags %x response %x", iid, na->na_seqid,
na->na_flags, na->na_task_flags, na->na_response);
} else {
na_entry_t *na = (na_entry_t *) storage;
if (arg) {
@ -802,6 +815,9 @@ isp_notify_ack(ispsoftc_t *isp, void *arg)
na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK;
na->na_header.rqs_entry_count = 1;
isp_put_notify_ack(isp, na, (na_entry_t *)outp);
isp_prt(isp, ISP_LOGTDEBUG0, "notify ack iid %u lun %u tgt %u "
"seqid %x event %x", na->na_iid, na->na_lun, na->na_tgt,
na->na_seqid, na->na_event);
}
ISP_TDQE(isp, "isp_notify_ack", (int) optr, storage);
ISP_ADD_REQUEST(isp, nxti);
@ -1192,7 +1208,8 @@ isp_handle_ctio2(ispsoftc_t *isp, ct2_entry_t *ct)
if (fmsg == NULL)
fmsg = "ABORT Task Management Function Received";
isp_prt(isp, ISP_LOGERR, "CTIO2 destroyed by %s: RX_ID=0x%x", fmsg, ct->ct_rxid);
isp_prt(isp, ISP_LOGERR, "CTIO2 destroyed by %s: RX_ID=0x%x",
fmsg, ct->ct_rxid);
break;
case CT_INVAL:

View file

@ -148,6 +148,7 @@ typedef struct {
/*
* Values for the in_task_flags field- should only get one at a time!
*/
#define TASK_FLAGS_RESERVED_MASK (0xe700)
#define TASK_FLAGS_CLEAR_ACA (1<<14)
#define TASK_FLAGS_TARGET_RESET (1<<13)
#define TASK_FLAGS_LUN_RESET (1<<12)
@ -205,9 +206,9 @@ typedef struct {
typedef struct {
isphdr_t na_header;
uint32_t na_reserved;
uint8_t na_lun; /* lun */
uint8_t na_iid; /* initiator */
uint16_t na_scclun;
uint8_t na_reserved1;
uint8_t na_iid; /* initiator loop id */
uint16_t na_response;
uint16_t na_flags;
uint16_t na_reserved2;
uint16_t na_status;
@ -219,8 +220,8 @@ typedef struct {
typedef struct {
isphdr_t na_header;
uint32_t na_reserved;
uint16_t na_iid; /* initiator */
uint16_t na_scclun;
uint16_t na_iid; /* initiator loop id */
uint16_t na_response; /* response code */
uint16_t na_flags;
uint16_t na_reserved2;
uint16_t na_status;
@ -231,6 +232,8 @@ typedef struct {
#define NAFC_RCOUNT 0x80 /* increment resource count */
#define NAFC_RST_CLRD 0x20 /* Clear LIP Reset */
#define NAFC_TVALID 0x10 /* task mangement response code is valid */
/*
* Accept Target I/O Entry structure
*/