isp_freebsd.c (291512) | isp_freebsd.c (291514) |
---|---|
1/*- 2 * Copyright (c) 1997-2009 by Matthew Jacob 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 14 unchanged lines hidden (view full) --- 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27/* 28 * Platform (FreeBSD) dependent common attachment code for Qlogic adapters. 29 */ 30#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1997-2009 by Matthew Jacob 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 14 unchanged lines hidden (view full) --- 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27/* 28 * Platform (FreeBSD) dependent common attachment code for Qlogic adapters. 29 */ 30#include <sys/cdefs.h> |
31__FBSDID("$FreeBSD: stable/10/sys/dev/isp/isp_freebsd.c 291512 2015-11-30 21:38:51Z mav $"); | 31__FBSDID("$FreeBSD: stable/10/sys/dev/isp/isp_freebsd.c 291514 2015-11-30 21:40:20Z mav $"); |
32 33#include <dev/isp/isp_freebsd.h> 34#include <sys/unistd.h> 35#include <sys/kthread.h> 36#include <sys/conf.h> 37#include <sys/module.h> 38#include <sys/ioccom.h> 39#include <dev/isp/isp_ioctl.h> --- 2544 unchanged lines hidden (view full) --- 2584 isp_prt(isp, ISP_LOGTDEBUG0, "%s: [RX_ID 0x%x] D_ID 0x%06x found on Chan %d for S_ID 0x%06x", __func__, aep->at_rxid, did, chan, sid); 2585 } else { 2586 chan = 0; 2587 } 2588 2589 /* 2590 * Find the PDB entry for this initiator 2591 */ | 32 33#include <dev/isp/isp_freebsd.h> 34#include <sys/unistd.h> 35#include <sys/kthread.h> 36#include <sys/conf.h> 37#include <sys/module.h> 38#include <sys/ioccom.h> 39#include <dev/isp/isp_ioctl.h> --- 2544 unchanged lines hidden (view full) --- 2584 isp_prt(isp, ISP_LOGTDEBUG0, "%s: [RX_ID 0x%x] D_ID 0x%06x found on Chan %d for S_ID 0x%06x", __func__, aep->at_rxid, did, chan, sid); 2585 } else { 2586 chan = 0; 2587 } 2588 2589 /* 2590 * Find the PDB entry for this initiator 2591 */ |
2592 if (isp_find_pdb_by_sid(isp, chan, sid, &lp) == 0) { | 2592 if (isp_find_pdb_by_portid(isp, chan, sid, &lp) == 0) { |
2593 /* 2594 * If we're not in the port database terminate the exchange. 2595 */ 2596 isp_prt(isp, ISP_LOGTINFO, "%s: [RX_ID 0x%x] D_ID 0x%06x found on Chan %d for S_ID 0x%06x wasn't in PDB already", 2597 __func__, aep->at_rxid, did, chan, sid); 2598 isp_dump_portdb(isp, chan); 2599 isp_endcmd(isp, aep, NIL_HANDLE, chan, ECMD_TERMINATE, 0); 2600 return; --- 716 unchanged lines hidden (view full) --- 3317 if (IS_24XX(isp) && mp->nt_lreserved && ((isphdr_t *)mp->nt_lreserved)->rqs_entry_type == RQSTYPE_ATIO) { 3318 ct7_entry_t local, *cto = &local; 3319 at7_entry_t *aep = (at7_entry_t *)mp->nt_lreserved; 3320 fcportdb_t *lp; 3321 uint32_t sid; 3322 uint16_t nphdl; 3323 3324 sid = (aep->at_hdr.s_id[0] << 16) | (aep->at_hdr.s_id[1] << 8) | aep->at_hdr.s_id[2]; | 2593 /* 2594 * If we're not in the port database terminate the exchange. 2595 */ 2596 isp_prt(isp, ISP_LOGTINFO, "%s: [RX_ID 0x%x] D_ID 0x%06x found on Chan %d for S_ID 0x%06x wasn't in PDB already", 2597 __func__, aep->at_rxid, did, chan, sid); 2598 isp_dump_portdb(isp, chan); 2599 isp_endcmd(isp, aep, NIL_HANDLE, chan, ECMD_TERMINATE, 0); 2600 return; --- 716 unchanged lines hidden (view full) --- 3317 if (IS_24XX(isp) && mp->nt_lreserved && ((isphdr_t *)mp->nt_lreserved)->rqs_entry_type == RQSTYPE_ATIO) { 3318 ct7_entry_t local, *cto = &local; 3319 at7_entry_t *aep = (at7_entry_t *)mp->nt_lreserved; 3320 fcportdb_t *lp; 3321 uint32_t sid; 3322 uint16_t nphdl; 3323 3324 sid = (aep->at_hdr.s_id[0] << 16) | (aep->at_hdr.s_id[1] << 8) | aep->at_hdr.s_id[2]; |
3325 if (isp_find_pdb_by_sid(isp, mp->nt_channel, sid, &lp)) { | 3325 if (isp_find_pdb_by_portid(isp, mp->nt_channel, sid, &lp)) { |
3326 nphdl = lp->handle; 3327 } else { 3328 nphdl = NIL_HANDLE; 3329 } 3330 ISP_MEMZERO(&local, sizeof (local)); 3331 cto->ct_header.rqs_entry_type = RQSTYPE_CTIO7; 3332 cto->ct_header.rqs_entry_count = 1; 3333 cto->ct_nphdl = nphdl; --- 107 unchanged lines hidden (view full) --- 3441 } 3442 } 3443 inot = (struct ccb_immediate_notify *) SLIST_FIRST(&tptr->inots); 3444 if (inot == NULL) { 3445 isp_prt(isp, ISP_LOGWARN, "%s: out of immediate notify structures for chan %d lun 0x%x", __func__, notify->nt_channel, lun); 3446 goto bad; 3447 } 3448 | 3326 nphdl = lp->handle; 3327 } else { 3328 nphdl = NIL_HANDLE; 3329 } 3330 ISP_MEMZERO(&local, sizeof (local)); 3331 cto->ct_header.rqs_entry_type = RQSTYPE_CTIO7; 3332 cto->ct_header.rqs_entry_count = 1; 3333 cto->ct_nphdl = nphdl; --- 107 unchanged lines hidden (view full) --- 3441 } 3442 } 3443 inot = (struct ccb_immediate_notify *) SLIST_FIRST(&tptr->inots); 3444 if (inot == NULL) { 3445 isp_prt(isp, ISP_LOGWARN, "%s: out of immediate notify structures for chan %d lun 0x%x", __func__, notify->nt_channel, lun); 3446 goto bad; 3447 } 3448 |
3449 if (isp_find_pdb_by_sid(isp, notify->nt_channel, notify->nt_sid, &lp) == 0 && | 3449 if (isp_find_pdb_by_portid(isp, notify->nt_channel, notify->nt_sid, &lp) == 0 && |
3450 isp_find_pdb_by_handle(isp, notify->nt_channel, notify->nt_nphdl, &lp) == 0) { 3451 inot->initiator_id = CAM_TARGET_WILDCARD; 3452 } else { 3453 inot->initiator_id = FC_PORTDB_TGT(isp, notify->nt_channel, lp); 3454 } 3455 inot->seq_id = notify->nt_tagval; 3456 inot->tag_id = notify->nt_tagval >> 32; 3457 --- 1503 unchanged lines hidden (view full) --- 4961 } 4962 break; 4963 } 4964 isp_prt(isp, ISP_LOGCONFIG, prom, bus, tgt, lp->port_wwn, lp->portid, lp->handle, buf, "gone"); 4965 break; 4966 case ISPASYNC_CHANGE_NOTIFY: 4967 { 4968 char *msg; | 3450 isp_find_pdb_by_handle(isp, notify->nt_channel, notify->nt_nphdl, &lp) == 0) { 3451 inot->initiator_id = CAM_TARGET_WILDCARD; 3452 } else { 3453 inot->initiator_id = FC_PORTDB_TGT(isp, notify->nt_channel, lp); 3454 } 3455 inot->seq_id = notify->nt_tagval; 3456 inot->tag_id = notify->nt_tagval >> 32; 3457 --- 1503 unchanged lines hidden (view full) --- 4961 } 4962 break; 4963 } 4964 isp_prt(isp, ISP_LOGCONFIG, prom, bus, tgt, lp->port_wwn, lp->portid, lp->handle, buf, "gone"); 4965 break; 4966 case ISPASYNC_CHANGE_NOTIFY: 4967 { 4968 char *msg; |
4969 int evt, nphdl, nlstate, reason; | 4969 int evt, nphdl, nlstate, portid, reason; |
4970 4971 va_start(ap, cmd); 4972 bus = va_arg(ap, int); 4973 evt = va_arg(ap, int); | 4970 4971 va_start(ap, cmd); 4972 bus = va_arg(ap, int); 4973 evt = va_arg(ap, int); |
4974 if (IS_24XX(isp) && evt == ISPASYNC_CHANGE_PDB) { | 4974 if (evt == ISPASYNC_CHANGE_PDB) { |
4975 nphdl = va_arg(ap, int); 4976 nlstate = va_arg(ap, int); 4977 reason = va_arg(ap, int); | 4975 nphdl = va_arg(ap, int); 4976 nlstate = va_arg(ap, int); 4977 reason = va_arg(ap, int); |
4978 } else if (evt == ISPASYNC_CHANGE_SNS) { 4979 portid = va_arg(ap, int); |
|
4978 } else { 4979 nphdl = NIL_HANDLE; 4980 nlstate = reason = 0; 4981 } 4982 va_end(ap); 4983 fc = ISP_FC_PC(isp, bus); 4984 4985 if (evt == ISPASYNC_CHANGE_PDB) { 4986 msg = "Port Database Changed"; | 4980 } else { 4981 nphdl = NIL_HANDLE; 4982 nlstate = reason = 0; 4983 } 4984 va_end(ap); 4985 fc = ISP_FC_PC(isp, bus); 4986 4987 if (evt == ISPASYNC_CHANGE_PDB) { 4988 msg = "Port Database Changed"; |
4989 isp_prt(isp, ISP_LOGINFO, 4990 "Chan %d %s (nphdl 0x%x state 0x%x reason 0x%x)", 4991 bus, msg, nphdl, nlstate, reason); |
|
4987 } else if (evt == ISPASYNC_CHANGE_SNS) { 4988 msg = "Name Server Database Changed"; | 4992 } else if (evt == ISPASYNC_CHANGE_SNS) { 4993 msg = "Name Server Database Changed"; |
4994 isp_prt(isp, ISP_LOGINFO, "Chan %d %s (PortID 0x%06x)", 4995 bus, msg, portid); |
|
4989 } else { 4990 msg = "Other Change Notify"; | 4996 } else { 4997 msg = "Other Change Notify"; |
4998 isp_prt(isp, ISP_LOGINFO, "Chan %d %s", bus, msg); |
|
4991 } 4992 4993 /* 4994 * If the loop down timer is running, cancel it. 4995 */ 4996 if (fc->ready && callout_active(&fc->ldt)) { 4997 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %lu", (unsigned long) time_uptime); 4998 callout_stop(&fc->ldt); 4999 } | 4999 } 5000 5001 /* 5002 * If the loop down timer is running, cancel it. 5003 */ 5004 if (fc->ready && callout_active(&fc->ldt)) { 5005 isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %lu", (unsigned long) time_uptime); 5006 callout_stop(&fc->ldt); 5007 } |
5000 isp_prt(isp, ISP_LOGINFO, "Chan %d %s", bus, msg); | |
5001 if (FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) { 5002 isp_freeze_loopdown(isp, bus, msg); 5003 } 5004 wakeup(fc); 5005 break; 5006 } 5007#ifdef ISP_TARGET_MODE 5008 case ISPASYNC_TARGET_NOTIFY: --- 572 unchanged lines hidden --- | 5008 if (FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) { 5009 isp_freeze_loopdown(isp, bus, msg); 5010 } 5011 wakeup(fc); 5012 break; 5013 } 5014#ifdef ISP_TARGET_MODE 5015 case ISPASYNC_TARGET_NOTIFY: --- 572 unchanged lines hidden --- |