亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? isp.c

?? 這個linux源代碼是很全面的~基本完整了~使用c編譯的~由于時間問題我沒有親自測試~但就算用來做參考資料也是非常好的
?? C
?? 第 1 頁 / 共 5 頁
字號:
		    (((u_int64_t)(mbs.param[3] >> 8))	<< 32) |		    (((u_int64_t)(mbs.param[6] & 0xff))	<< 24) |		    (((u_int64_t)(mbs.param[6] >> 8))	<< 16) |		    (((u_int64_t)(mbs.param[7] & 0xff))	<<  8) |		    (((u_int64_t)(mbs.param[7] >> 8)));	}	return (wwn);}/* * Make sure we have good FC link and know our Loop ID. */static intisp_fclink_test(struct ispsoftc *isp, int usdelay){	static char *toponames[] = {		"Private Loop",		"FL Port",		"N-Port to N-Port",		"F Port",		"F Port (no FLOGI_ACC response)"	};	mbreg_t mbs;	int count, check_for_fabric;	u_int8_t lwfs;	fcparam *fcp;	struct lportdb *lp;	isp_pdb_t pdb;	fcp = isp->isp_param;	/*	 * XXX: Here is where we would start a 'loop dead' timeout	 */	/*	 * Wait up to N microseconds for F/W to go to a ready state.	 */	lwfs = FW_CONFIG_WAIT;	count = 0;	while (count < usdelay) {		u_int64_t enano;		u_int32_t wrk;		NANOTIME_T hra, hrb;		GET_NANOTIME(&hra);		isp_fw_state(isp);		if (lwfs != fcp->isp_fwstate) {			isp_prt(isp, ISP_LOGINFO, "Firmware State <%s->%s>",			    isp2100_fw_statename((int)lwfs),			    isp2100_fw_statename((int)fcp->isp_fwstate));			lwfs = fcp->isp_fwstate;		}		if (fcp->isp_fwstate == FW_READY) {			break;		}		GET_NANOTIME(&hrb);		/*		 * Get the elapsed time in nanoseconds.		 * Always guaranteed to be non-zero.		 */		enano = NANOTIME_SUB(&hrb, &hra);		isp_prt(isp, ISP_LOGDEBUG1,		    "usec%d: 0x%lx->0x%lx enano 0x%x%08x",		    count, (long) GET_NANOSEC(&hra), (long) GET_NANOSEC(&hrb),		    (u_int32_t)(enano >> 32), (u_int32_t)(enano & 0xffffffff));		/*		 * If the elapsed time is less than 1 millisecond,		 * delay a period of time up to that millisecond of		 * waiting.		 *		 * This peculiar code is an attempt to try and avoid		 * invoking u_int64_t math support functions for some		 * platforms where linkage is a problem.		 */		if (enano < (1000 * 1000)) {			count += 1000;			enano = (1000 * 1000) - enano;			while (enano > (u_int64_t) 4000000000U) {				USEC_SLEEP(isp, 4000000);				enano -= (u_int64_t) 4000000000U;			}			wrk = enano;			wrk /= 1000;			USEC_SLEEP(isp, wrk);		} else {			while (enano > (u_int64_t) 4000000000U) {				count += 4000000;				enano -= (u_int64_t) 4000000000U;			}			wrk = enano;			count += (wrk / 1000);		}	}	/*	 * If we haven't gone to 'ready' state, return.	 */	if (fcp->isp_fwstate != FW_READY) {		return (-1);	}	/*	 * Get our Loop ID (if possible). We really need to have it.	 */	mbs.param[0] = MBOX_GET_LOOP_ID;	isp_mboxcmd(isp, &mbs, MBLOGALL);	if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {		return (-1);	}	fcp->isp_loopid = mbs.param[1];	if (IS_2200(isp) || IS_23XX(isp)) {		int topo = (int) mbs.param[6];		if (topo < TOPO_NL_PORT || topo > TOPO_PTP_STUB)			topo = TOPO_PTP_STUB;		fcp->isp_topo = topo;	} else {		fcp->isp_topo = TOPO_NL_PORT;	}	fcp->isp_portid = fcp->isp_alpa = mbs.param[2] & 0xff;	/*	 * Check to see if we're on a fabric by trying to see if we	 * can talk to the fabric name server. This can be a bit	 * tricky because if we're a 2100, we should check always	 * (in case we're connected to an server doing aliasing).	 */	fcp->isp_onfabric = 0;	if (IS_2100(isp))		check_for_fabric = 1;	else if (fcp->isp_topo == TOPO_FL_PORT || fcp->isp_topo == TOPO_F_PORT)		check_for_fabric = 1;	else		check_for_fabric = 0;	if (check_for_fabric && isp_getpdb(isp, FL_PORT_ID, &pdb) == 0) {		int loopid = FL_PORT_ID;		if (IS_2100(isp)) {			fcp->isp_topo = TOPO_FL_PORT;		}		if (BITS2WORD(pdb.pdb_portid_bits) == 0) {			/*			 * Crock.			 */			fcp->isp_topo = TOPO_NL_PORT;			goto not_on_fabric;		}		fcp->isp_portid = mbs.param[2] | ((int) mbs.param[3] << 16);		/*		 * Save the Fabric controller's port database entry.		 */		lp = &fcp->portdb[loopid];		lp->node_wwn =		    (((u_int64_t)pdb.pdb_nodename[0]) << 56) |		    (((u_int64_t)pdb.pdb_nodename[1]) << 48) |		    (((u_int64_t)pdb.pdb_nodename[2]) << 40) |		    (((u_int64_t)pdb.pdb_nodename[3]) << 32) |		    (((u_int64_t)pdb.pdb_nodename[4]) << 24) |		    (((u_int64_t)pdb.pdb_nodename[5]) << 16) |		    (((u_int64_t)pdb.pdb_nodename[6]) <<  8) |		    (((u_int64_t)pdb.pdb_nodename[7]));		lp->port_wwn =		    (((u_int64_t)pdb.pdb_portname[0]) << 56) |		    (((u_int64_t)pdb.pdb_portname[1]) << 48) |		    (((u_int64_t)pdb.pdb_portname[2]) << 40) |		    (((u_int64_t)pdb.pdb_portname[3]) << 32) |		    (((u_int64_t)pdb.pdb_portname[4]) << 24) |		    (((u_int64_t)pdb.pdb_portname[5]) << 16) |		    (((u_int64_t)pdb.pdb_portname[6]) <<  8) |		    (((u_int64_t)pdb.pdb_portname[7]));		lp->roles =		    (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;		lp->portid = BITS2WORD(pdb.pdb_portid_bits);		lp->loopid = pdb.pdb_loopid;		lp->loggedin = lp->valid = 1;		fcp->isp_onfabric = 1;		(void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);		isp_register_fc4_type(isp);	} else {not_on_fabric:		fcp->isp_onfabric = 0;		fcp->portdb[FL_PORT_ID].valid = 0;	}	fcp->isp_gbspeed = 1;	if (IS_23XX(isp)) {		mbs.param[0] = MBOX_GET_SET_DATA_RATE;		mbs.param[1] = MBGSD_GET_RATE;		/* mbs.param[2] undefined if we're just getting rate */		isp_mboxcmd(isp, &mbs, MBLOGALL);		if (mbs.param[0] == MBOX_COMMAND_COMPLETE) {			if (mbs.param[1] == MBGSD_TWOGB) {				isp_prt(isp, ISP_LOGINFO, "2Gb link speed/s");				fcp->isp_gbspeed = 2;			}		}	}	isp_prt(isp, ISP_LOGCONFIG, topology, fcp->isp_loopid, fcp->isp_alpa,	    fcp->isp_portid, fcp->isp_loopstate, toponames[fcp->isp_topo]);	/*	 * Announce ourselves, too. This involves synthesizing an entry.	 */	if (fcp->isp_iid_set == 0) {		fcp->isp_iid_set = 1;		fcp->isp_iid = fcp->isp_loopid;		lp = &fcp->portdb[fcp->isp_iid];	} else {		lp = &fcp->portdb[fcp->isp_iid];		if (fcp->isp_portid != lp->portid ||		    fcp->isp_loopid != lp->loopid ||		    fcp->isp_nodewwn != ISP_NODEWWN(isp) ||		    fcp->isp_portwwn != ISP_PORTWWN(isp)) {			lp->valid = 0;			count = fcp->isp_iid;			(void) isp_async(isp, ISPASYNC_PROMENADE, &count);		}	}	lp->loopid = fcp->isp_loopid;	lp->portid = fcp->isp_portid;	lp->node_wwn = ISP_NODEWWN(isp);	lp->port_wwn = ISP_PORTWWN(isp);	switch (isp->isp_role) {	case ISP_ROLE_NONE:		lp->roles = 0;		break;	case ISP_ROLE_TARGET:		lp->roles = SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT;		break;	case ISP_ROLE_INITIATOR:		lp->roles = SVC3_INI_ROLE >> SVC3_ROLE_SHIFT;		break;	case ISP_ROLE_BOTH:		lp->roles = (SVC3_INI_ROLE|SVC3_TGT_ROLE) >> SVC3_ROLE_SHIFT;		break;	}	lp->loggedin = lp->valid = 1;	count = fcp->isp_iid;	(void) isp_async(isp, ISPASYNC_PROMENADE, &count);	return (0);}static char *isp2100_fw_statename(int state){	switch(state) {	case FW_CONFIG_WAIT:	return "Config Wait";	case FW_WAIT_AL_PA:	return "Waiting for AL_PA";	case FW_WAIT_LOGIN:	return "Wait Login";	case FW_READY:		return "Ready";	case FW_LOSS_OF_SYNC:	return "Loss Of Sync";	case FW_ERROR:		return "Error";	case FW_REINIT:		return "Re-Init";	case FW_NON_PART:	return "Nonparticipating";	default:		return "?????";	}}/* * Synchronize our soft copy of the port database with what the f/w thinks * (with a view toward possibly for a specific target....) */static intisp_pdb_sync(struct ispsoftc *isp){	struct lportdb *lp;	fcparam *fcp = isp->isp_param;	isp_pdb_t pdb;	int loopid, base, lim;	/*	 * Make sure we're okay for doing this right now.	 */	if (fcp->isp_loopstate != LOOP_PDB_RCVD &&	    fcp->isp_loopstate != LOOP_FSCAN_DONE &&	    fcp->isp_loopstate != LOOP_LSCAN_DONE) {		return (-1);	}	if (fcp->isp_topo == TOPO_FL_PORT || fcp->isp_topo == TOPO_NL_PORT ||	    fcp->isp_topo == TOPO_N_PORT) {		if (fcp->isp_loopstate < LOOP_LSCAN_DONE) {			if (isp_scan_loop(isp) != 0) {				return (-1);			}		}	}	fcp->isp_loopstate = LOOP_SYNCING_PDB;	/*	 * If we get this far, we've settled our differences with the f/w	 * (for local loop device) and we can say that the loop state is ready.	 */	if (fcp->isp_topo == TOPO_NL_PORT) {		fcp->loop_seen_once = 1;		fcp->isp_loopstate = LOOP_READY;		return (0);	}	/*	 * Find all Fabric Entities that didn't make it from one scan to the	 * next and let the world know they went away. Scan the whole database.	 */	for (lp = &fcp->portdb[0]; lp < &fcp->portdb[MAX_FC_TARG]; lp++) {		if (lp->was_fabric_dev && lp->fabric_dev == 0) {			loopid = lp - fcp->portdb;			lp->valid = 0;	/* should already be set */			(void) isp_async(isp, ISPASYNC_PROMENADE, &loopid);			MEMZERO((void *) lp, sizeof (*lp));			continue;		}		lp->was_fabric_dev = lp->fabric_dev;	}	if (fcp->isp_topo == TOPO_FL_PORT)		base = FC_SNS_ID+1;	else		base = 0;	if (fcp->isp_topo == TOPO_N_PORT)		lim = 1;	else		lim = MAX_FC_TARG;	/*	 * Now log in any fabric devices that the outer layer has	 * left for us to see. This seems the most sane policy	 * for the moment.	 */	for (lp = &fcp->portdb[base]; lp < &fcp->portdb[lim]; lp++) {		u_int32_t portid;		mbreg_t mbs;		loopid = lp - fcp->portdb;		if (loopid >= FL_PORT_ID && loopid <= FC_SNS_ID) {			continue;		}		/*		 * Anything here?		 */		if (lp->port_wwn == 0) {			continue;		}		/*		 * Don't try to log into yourself.		 */		if ((portid = lp->portid) == fcp->isp_portid) {			continue;		}		/*		 * If we'd been logged in- see if we still are and we haven't		 * changed. If so, no need to log ourselves out, etc..		 *		 * Unfortunately, our charming Qlogic f/w has decided to		 * return a valid port database entry for a fabric device		 * that has, in fact, gone away. And it hangs trying to		 * log it out.		 */		if (lp->loggedin &&		    isp_getpdb(isp, lp->loopid, &pdb) == 0) {			int nrole;			u_int64_t nwwnn, nwwpn;			nwwnn =			    (((u_int64_t)pdb.pdb_nodename[0]) << 56) |			    (((u_int64_t)pdb.pdb_nodename[1]) << 48) |			    (((u_int64_t)pdb.pdb_nodename[2]) << 40) |			    (((u_int64_t)pdb.pdb_nodename[3]) << 32) |			    (((u_int64_t)pdb.pdb_nodename[4]) << 24) |			    (((u_int64_t)pdb.pdb_nodename[5]) << 16) |			    (((u_int64_t)pdb.pdb_nodename[6]) <<  8) |			    (((u_int64_t)pdb.pdb_nodename[7]));			nwwpn =			    (((u_int64_t)pdb.pdb_portname[0]) << 56) |			    (((u_int64_t)pdb.pdb_portname[1]) << 48) |			    (((u_int64_t)pdb.pdb_portname[2]) << 40) |			    (((u_int64_t)pdb.pdb_portname[3]) << 32) |			    (((u_int64_t)pdb.pdb_portname[4]) << 24) |			    (((u_int64_t)pdb.pdb_portname[5]) << 16) |			    (((u_int64_t)pdb.pdb_portname[6]) <<  8) |			    (((u_int64_t)pdb.pdb_portname[7]));			nrole = (pdb.pdb_prli_svc3 & SVC3_ROLE_MASK) >>			    SVC3_ROLE_SHIFT;			if (pdb.pdb_loopid == lp->loopid && lp->portid ==			    (u_int32_t) BITS2WORD(pdb.pdb_portid_bits) &&			    nwwnn == lp->node_wwn && nwwpn == lp->port_wwn &&			    lp->roles == nrole && lp->force_logout == 0) {				lp->loggedin = lp->valid = 1;				isp_prt(isp, ISP_LOGCONFIG, lretained,				    (int) (lp - fcp->portdb),				    (int) lp->loopid, lp->portid);				continue;			}		}		lp->force_logout = 0;		if (fcp->isp_fwstate != FW_READY ||		    fcp->isp_loopstate != LOOP_SYNCING_PDB) {			return (-1);		}		/*		 * Force a logout if we were logged in.		 */		if (lp->loggedin) {			if (isp_getpdb(isp, lp->loopid, &pdb) == 0) {				mbs.param[0] = MBOX_FABRIC_LOGOUT;				mbs.param[1] = lp->loopid << 8;				mbs.param[2] = 0;				mbs.param[3] = 0;				isp_mboxcmd(isp, &mbs, MBLOGNONE);				lp->loggedin = 0;				isp_prt(isp, ISP_LOGINFO, plogout,				    (int) (lp - fcp->portdb), lp->loopid,				    lp->portid);			}			lp->loggedin = 0;			if (fcp->isp_fwstate != FW_READY ||			    fcp->isp_loopstate != LOOP_SYNCING_PDB) {				return (-1);			}		}		/*		 * And log in....		 */		loopid = lp - fcp->portdb;		lp->loopid = FL_PORT_ID;		do {			mbs.param[0] = MBOX_FABRIC_LOGIN;			mbs.param[1] = loopid << 8;			mbs.param[2] = portid >> 16;			mbs.param[3] = portid & 0xffff;			if (IS_2200(isp) || IS_23XX(isp)) {				/* only issue a PLOGI if not logged in */				mbs.param[1] |= 0x1;			}			isp_mboxcmd(isp, &mbs, MBLOGALL & ~(MBOX_LOOP_ID_USED |			    MBOX_PORT_ID_USED | MBOX_COMMAND_ERROR));			if (fcp->isp_fwstate != FW_READY ||			    fcp->isp_loopstate != LOOP_SYNCING_PDB) {				return (-1);			}			switch (mbs.param[0]) {			case MBOX_LOOP_ID_USED:				/*				 * Try the next available loop id.				 */				loopid++;				break;			case MBOX_PORT_ID_USED:				/*				 * This port is already logged in.				 * Snaffle the loop id it's using if it's				 * nonzero, otherwise we're hosed.				 */				if (mbs.param[1] != 0) {					loopid = mbs.param[1];					isp_prt(isp, ISP_LOGINFO, retained,					    loopid, (int) (lp - fcp->portdb),					    lp->portid);				} else {					loopid = MAX_FC_TARG;					break;				}				/* FALLTHROUGH */			case MBOX_COMMAND_COMPLETE:				lp->loggedin = 1;				lp->loopid = loopid;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区免费在线电影 | 欧美日韩国产高清一区二区三区| 自拍偷拍亚洲欧美日韩| 9l国产精品久久久久麻豆| 中文字幕中文乱码欧美一区二区| 不卡av在线网| 亚洲区小说区图片区qvod| 日本精品视频一区二区三区| 午夜天堂影视香蕉久久| 欧美精品一区二区三区蜜臀| 国产一区二区在线看| 亚洲色图都市小说| 7777精品伊人久久久大香线蕉最新版| 久久综合综合久久综合| 国产精品剧情在线亚洲| 欧美精品久久99久久在免费线 | 高清国产一区二区| 亚洲人成网站色在线观看| 91麻豆精品国产| 成人做爰69片免费看网站| 亚洲国产成人高清精品| 久久综合久久综合九色| 色国产综合视频| 狠狠色丁香九九婷婷综合五月| 一区二区三区日韩欧美精品| 欧美探花视频资源| 黄网站免费久久| 亚洲午夜电影在线观看| 国产亚洲一区二区三区在线观看 | 国产美女娇喘av呻吟久久| 亚洲日本一区二区| 日韩情涩欧美日韩视频| 色94色欧美sute亚洲线路二| 看电影不卡的网站| 亚洲观看高清完整版在线观看| 欧美精品一区二区三区在线播放| 欧美在线观看视频一区二区三区 | 一区二区成人在线视频| 精品国产91亚洲一区二区三区婷婷 | 国产福利一区二区| 亚洲成人激情av| 中文字幕一区二区三中文字幕| 欧美电影免费观看高清完整版在| 在线观看国产一区二区| 成人精品免费看| 精品亚洲成a人| 午夜欧美在线一二页| 亚洲人成网站精品片在线观看| 久久久美女毛片| 日韩欧美另类在线| 欧美日韩在线三级| 91丨porny丨最新| 国产一区二区三区观看| 美女一区二区视频| 五月天网站亚洲| 亚洲一区二区三区视频在线播放| 中文字幕亚洲视频| 欧美国产丝袜视频| 久久久亚洲午夜电影| 日韩欧美不卡在线观看视频| 欧美日韩国产首页| 欧美三级资源在线| 欧日韩精品视频| 一本久久综合亚洲鲁鲁五月天| 粉嫩蜜臀av国产精品网站| 国产精品91一区二区| 国产在线一区观看| 国产一区二区不卡在线| 麻豆91精品视频| 久久99国产精品尤物| 久久精品噜噜噜成人88aⅴ | 亚洲与欧洲av电影| 亚洲免费观看在线观看| 成人欧美一区二区三区1314| 国产精品久久久久久久久免费相片| 久久久美女艺术照精彩视频福利播放| 精品国产91九色蝌蚪| 高清久久久久久| 一级日本不卡的影视| 夜夜嗨av一区二区三区网页| www.欧美亚洲| 91网页版在线| 色乱码一区二区三区88| 在线观看成人免费视频| 欧美人妖巨大在线| 欧美一级免费大片| 精品国产一区二区亚洲人成毛片| 精品欧美乱码久久久久久| 久久久国产综合精品女国产盗摄| 国产视频一区在线播放| 亚洲免费观看高清完整版在线| 亚洲激情av在线| 日韩精品一区第一页| 国精产品一区一区三区mba视频| 国产老妇另类xxxxx| 成人app在线| 欧美性猛交xxxxxxxx| 555夜色666亚洲国产免| 久久久久国产精品人| 亚洲天堂免费看| 免费看欧美女人艹b| 国产精品66部| 91久久精品日日躁夜夜躁欧美| 欧美精品tushy高清| 久久精品亚洲国产奇米99 | 国产欧美一区二区精品秋霞影院| 中文字幕电影一区| 亚洲影院在线观看| 黄网站免费久久| 日本韩国视频一区二区| 日韩午夜电影av| 国产精品家庭影院| 日韩电影免费在线观看网站| 国产99久久久国产精品免费看| 在线视频你懂得一区| 精品国产成人系列| 一区二区三区国产精华| 99久久精品99国产精品 | 日韩福利电影在线| 成人国产视频在线观看| 欧美精品一二三四| 国产精品天干天干在线综合| 天堂久久一区二区三区| 国产福利一区二区三区| 91精品国产全国免费观看 | 欧美日韩黄色一区二区| 国产欧美一区二区三区鸳鸯浴| 亚洲高清视频在线| 国产a久久麻豆| 欧美高清视频一二三区 | 国产成人h网站| 欧美精品久久久久久久多人混战| 国产精品久久夜| 久久99久久99精品免视看婷婷| 在线观看欧美精品| 国产精品久久777777| 国产乱码精品一区二区三区av | 国产欧美精品在线观看| 久久黄色级2电影| 欧美午夜片在线看| 亚洲欧洲在线观看av| 国产一区二区中文字幕| 欧美一区二区三区成人| 亚洲国产三级在线| 99国产欧美久久久精品| 久久久电影一区二区三区| 看国产成人h片视频| 欧美一级欧美三级| 肉肉av福利一精品导航| 欧美又粗又大又爽| 亚洲人吸女人奶水| 91小视频免费观看| 最新热久久免费视频| 懂色av一区二区三区免费观看| 久久综合色婷婷| 国产老肥熟一区二区三区| 欧美成人官网二区| 久久精品久久精品| 欧美一区二区三区思思人| 婷婷国产在线综合| 欧美老人xxxx18| 日本成人中文字幕在线视频| 欧美久久久久久蜜桃| 日本怡春院一区二区| 欧美丰满一区二区免费视频| 五月开心婷婷久久| 51久久夜色精品国产麻豆| 蜜臀av国产精品久久久久| 日韩精品一区二区在线观看| 免费观看在线综合| 日韩欧美123| 国产91在线看| 国产精品久久久久久久久搜平片| av日韩在线网站| 亚洲乱码国产乱码精品精的特点| 色婷婷精品久久二区二区蜜臂av| 亚洲欧美色图小说| 欧美三级电影在线看| 日本特黄久久久高潮| 久久亚洲综合色一区二区三区| 国产成人精品一区二| 亚洲欧美aⅴ...| 欧美日韩精品专区| 精品一区二区精品| 国产精品欧美综合在线| 色婷婷狠狠综合| 青青草国产精品97视觉盛宴| 欧美电影精品一区二区| 成人av电影在线| 亚洲a一区二区| 久久亚洲欧美国产精品乐播| 成人黄页在线观看| 亚洲午夜精品在线| 欧美videofree性高清杂交| 成人午夜碰碰视频| 亚洲.国产.中文慕字在线| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 不卡免费追剧大全电视剧网站| 国产精品国产三级国产有无不卡| 欧美日韩精品高清|