⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skgesirq.c

📁 该软件根据网络数据生成NetFlow记录。NetFlow可用于网络规划、负载均衡、安全监控等
💻 C
📖 第 1 页 / 共 5 页
字号:
			"CheckUp1a - Stat: %x, Mask: %x",			(void *)Isrc,			(void *)Stat1);		Stat1 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_CTRL, &Stat1);		Stat2 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &PhyStat);		Stat1 = Stat1 << 16 | PhyStat;		Stat2 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_ADV, &Stat2);		Stat3 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &Stat3);		Stat2 = Stat2 << 16 | Stat3;		CMSMPrintString(			pAC->pConfigTable,			MSG_TYPE_RUNTIME_INFO,			"Ctrl/Stat: %x, AN Adv/LP: %x",			(void *)Stat1,			(void *)Stat2);		Stat1 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_EXP, &Stat1);		Stat2 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_EXT_STAT, &Stat2);		Stat1 = Stat1 << 16 | Stat2;		Stat2 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_CTRL, &Stat2);		Stat3 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ResAb);		Stat2 = Stat2 << 16 | ResAb;		CMSMPrintString(			pAC->pConfigTable,			MSG_TYPE_RUNTIME_INFO,			"AN Exp/IEEE Ext: %x, 1000T Ctrl/Stat: %x",			(void *)Stat1,			(void *)Stat2);		Stat1 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_CTRL, &Stat1);		Stat2 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_P_EXT_STAT, &Stat2);		Stat1 = Stat1 << 16 | Stat2;		Stat2 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_CTRL, &Stat2);		Stat3 = 0;		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUX_STAT, &Stat3);		Stat2 = Stat2 << 16 | Stat3;		CMSMPrintString(			pAC->pConfigTable,			MSG_TYPE_RUNTIME_INFO,			"PHY Ext Ctrl/Stat: %x, Aux Ctrl/Stat: %x",			(void *)Stat1,			(void *)Stat2);	}#endif /* DEBUG */	/*	 * Here we usually can check whether the link is in sync and	 * auto-negotiation is done.	 */	SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_STAT, &PhyStat);	SkMacAutoNegLipaPhy(pAC, IoC, Port, PhyStat);		SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,		("AutoNeg: %d, PhyStat: 0x%04X\n", AutoNeg, PhyStat));	SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ResAb);	if ((ResAb & PHY_B_1000S_MSF) != 0) {		/* Error */		SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,			("Master/Slave Fault port %d\n", Port));				pPrt->PAutoNegFail = SK_TRUE;		pPrt->PMSStatus = SK_MS_STAT_FAULT;				return(SK_HW_PS_RESTART);	}	if ((PhyStat & PHY_ST_LSYNC) == 0) {		return(SK_HW_PS_NONE);	}		pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?		SK_MS_STAT_MASTER : SK_MS_STAT_SLAVE;		SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,		("Port %d, ResAb: 0x%04X\n", Port, ResAb));	if (AutoNeg) {		if ((PhyStat & PHY_ST_AN_OVER) != 0) {			SkHWLinkUp(pAC, IoC, Port);			Done = SkMacAutoNegDone(pAC, IoC, Port);			if (Done != SK_AND_OK) {#ifdef DEBUG				/* Get PHY parameters, for debugging only */				SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_AUNE_LP, &LpAb);				SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_1000T_STAT, &ExtStat);				SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,					("AutoNeg FAIL Port %d (LpAb %x, 1000TStat %x)\n",					Port, LpAb, ExtStat));#endif /* DEBUG */				return(SK_HW_PS_RESTART);			}			else {#ifdef xDEBUG				/* Dummy read ISR to prevent extra link downs/ups */				SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_STAT, &ExtStat);				if ((ExtStat & ~(PHY_B_IS_HCT | PHY_B_IS_LCT)) != 0) {					CMSMPrintString(						pAC->pConfigTable,						MSG_TYPE_RUNTIME_INFO,						"CheckUp2 - Stat: %x",						(void *)ExtStat,						(void *)NULL);				}#endif /* DEBUG */								SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,					("AutoNeg done Port %d\n", Port));				return(SK_HW_PS_LINK);			}		}	}	else {	/* !AutoNeg */		/* Link is up and we don't need more. */#ifdef DEBUG		if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {			SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,				("ERROR: Lipa auto detected on port %d\n", Port));		}#endif /* DEBUG */#ifdef xDEBUG		/* Dummy read ISR to prevent extra link downs/ups */		SkXmPhyRead(pAC, IoC, Port, PHY_BCOM_INT_STAT, &ExtStat);		if ((ExtStat & ~(PHY_B_IS_HCT | PHY_B_IS_LCT)) != 0) {			CMSMPrintString(				pAC->pConfigTable,				MSG_TYPE_RUNTIME_INFO,				"CheckUp3 - Stat: %x",				(void *)ExtStat,				(void *)NULL);		}#endif /* DEBUG */				SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,			("Link sync(GP), Port %d\n", Port));		SkHWLinkUp(pAC, IoC, Port);				return(SK_HW_PS_LINK);	}	return(SK_HW_PS_NONE);}	/* SkGePortCheckUpBcom */#endif /* GENESIS */#ifdef YUKON/****************************************************************************** * * SkGePortCheckUpGmac() - Check if the link is up on Marvell PHY * * return: *	0	o.k. nothing needed *	1	Restart needed on this port *	2	Link came up */static int SkGePortCheckUpGmac(SK_AC	*pAC,		/* Adapter Context */SK_IOC	IoC,		/* IO Context */int		Port,		/* Which port should be checked */SK_BOOL	AutoNeg)	/* Is Auto-negotiation used ? */{	SK_GEPORT	*pPrt;		/* GIni Port struct pointer */	int			Done;	SK_U16		PhyIsrc;	/* PHY Interrupt source */	SK_U16		PhyStat;	/* PPY Status */	SK_U16		PhySpecStat;/* PHY Specific Status */	SK_U16		ResAb;		/* Master/Slave resolution */	SK_EVPARA	Para;	pPrt = &pAC->GIni.GP[Port];	if (pPrt->PHWLinkUp) {		return(SK_HW_PS_NONE);	}	/* Read PHY Status */	SkGmPhyRead(pAC, IoC, Port, PHY_MARV_STAT, &PhyStat);	SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,		   ("CheckUp Port %d, PhyStat: 0x%04X\n", Port, PhyStat));	/* Read PHY Interrupt Status */	SkGmPhyRead(pAC, IoC, Port, PHY_MARV_INT_STAT, &PhyIsrc);	if ((PhyIsrc & PHY_M_IS_AN_COMPL) != 0) {		SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,			("Auto-Negotiation Completed, PhyIsrc: 0x%04X\n", PhyIsrc));	}	if ((PhyIsrc & PHY_M_IS_LSP_CHANGE) != 0) {		SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,			("Link Speed Changed, PhyIsrc: 0x%04X\n", PhyIsrc));	}	SkMacAutoNegLipaPhy(pAC, IoC, Port, PhyStat);		SkGmPhyRead(pAC, IoC, Port, PHY_MARV_1000T_STAT, &ResAb);	if ((ResAb & PHY_B_1000S_MSF) != 0) {		/* Error */		SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,			("Master/Slave Fault port %d\n", Port));				pPrt->PAutoNegFail = SK_TRUE;		pPrt->PMSStatus = SK_MS_STAT_FAULT;				return(SK_HW_PS_RESTART);	}	/* Read PHY Specific Status */	SkGmPhyRead(pAC, IoC, Port, PHY_MARV_PHY_STAT, &PhySpecStat);		SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,		("AutoNeg: %d, PhySpecStat: 0x%04X\n", AutoNeg, PhySpecStat));	if ((PhySpecStat & PHY_M_PS_LINK_UP) == 0) {		return(SK_HW_PS_NONE);	}		if ((PhySpecStat & PHY_M_PS_DOWNS_STAT) != 0 ||		(PhyIsrc & PHY_M_IS_DOWNSH_DET) != 0) {		/* Downshift detected */		SK_ERR_LOG(pAC, SK_ERRCL_HW, SKERR_SIRQ_E025, SKERR_SIRQ_E025MSG);				Para.Para64 = Port;		SkEventQueue(pAC, SKGE_DRV, SK_DRV_DOWNSHIFT_DET, Para);				SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,			("Downshift detected, PhyIsrc: 0x%04X\n", PhyIsrc));	}	pPrt->PMSStatus = ((ResAb & PHY_B_1000S_MSR) != 0) ?		SK_MS_STAT_MASTER : SK_MS_STAT_SLAVE;		pPrt->PCableLen = (SK_U8)((PhySpecStat & PHY_M_PS_CABLE_MSK) >> 7);		if (AutoNeg) {		/* Auto-Negotiation Over ? */		if ((PhyStat & PHY_ST_AN_OVER) != 0) {						SkHWLinkUp(pAC, IoC, Port);						Done = SkMacAutoNegDone(pAC, IoC, Port);						if (Done != SK_AND_OK) {				return(SK_HW_PS_RESTART);			}						SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,				("AutoNeg done Port %d\n", Port));			return(SK_HW_PS_LINK);		}	}	else {	/* !AutoNeg */		/* Link is up and we don't need more */#ifdef DEBUG		if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {			SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,				("ERROR: Lipa auto detected on port %d\n", Port));		}#endif /* DEBUG */		SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,			("Link sync, Port %d\n", Port));		SkHWLinkUp(pAC, IoC, Port);				return(SK_HW_PS_LINK);	}	return(SK_HW_PS_NONE);}	/* SkGePortCheckUpGmac */#endif /* YUKON */#ifdef OTHER_PHY/****************************************************************************** * * SkGePortCheckUpLone() - Check if the link is up on Level One PHY * * return: *	0	o.k. nothing needed *	1	Restart needed on this port *	2	Link came up */static int SkGePortCheckUpLone(SK_AC	*pAC,		/* Adapter Context */SK_IOC	IoC,		/* IO Context */int		Port,		/* Which port should be checked */SK_BOOL	AutoNeg)	/* Is Auto-negotiation used ? */{	SK_GEPORT	*pPrt;		/* GIni Port struct pointer */	int			Done;	SK_U16		Isrc;		/* Interrupt source register */	SK_U16		LpAb;		/* Link Partner Ability */	SK_U16		ExtStat;	/* Extended Status Register */	SK_U16		PhyStat;	/* Phy Status Register */	SK_U16		StatSum;	SK_U8		NextMode;	/* Next AutoSensing Mode */	pPrt = &pAC->GIni.GP[Port];	if (pPrt->PHWLinkUp) {		return(SK_HW_PS_NONE);	}	StatSum = pPrt->PIsave;	pPrt->PIsave = 0;	/*	 * here we usually can check whether the link is in sync and	 * auto-negotiation is done.	 */	SkXmPhyRead(pAC, IoC, Port, PHY_LONE_STAT, &PhyStat);	StatSum |= PhyStat;	SkMacAutoNegLipaPhy(pAC, IoC, Port, PhyStat);		if ((PhyStat & PHY_ST_LSYNC) == 0) {		/* Save Auto-negotiation Done bit */		pPrt->PIsave = (SK_U16)(StatSum & PHY_ST_AN_OVER);#ifdef DEBUG		if ((pPrt->PIsave & PHY_ST_AN_OVER) != 0) {			SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,				("AutoNeg done rescheduled Port %d\n", Port));		}#endif /* DEBUG */		return(SK_HW_PS_NONE);	}	if (AutoNeg) {		if ((StatSum & PHY_ST_AN_OVER) != 0) {			SkHWLinkUp(pAC, IoC, Port);			Done = SkMacAutoNegDone(pAC, IoC, Port);			if (Done != SK_AND_OK) {				/* Get PHY parameters, for debugging only */				SkXmPhyRead(pAC, IoC, Port, PHY_LONE_AUNE_LP, &LpAb);				SkXmPhyRead(pAC, IoC, Port, PHY_LONE_1000T_STAT, &ExtStat);				SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,					("AutoNeg FAIL Port %d (LpAb %x, 1000TStat %x)\n",					 Port, LpAb, ExtStat));									/* Try next possible mode */				NextMode = SkHWSenseGetNext(pAC, IoC, Port);				SkHWLinkDown(pAC, IoC, Port);				if (Done == SK_AND_DUP_CAP) {					/* GoTo next mode */					SkHWSenseSetNext(pAC, IoC, Port, NextMode);				}				return(SK_HW_PS_RESTART);			}			else {				/*				 * Dummy Read interrupt status to prevent				 * extra link down/ups				 */				SkXmPhyRead(pAC, IoC, Port, PHY_LONE_INT_STAT, &ExtStat);				SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,					("AutoNeg done Port %d\n", Port));				return(SK_HW_PS_LINK);			}		}				/* AutoNeg not done, but HW link is up. Check for timeouts */		pPrt->PAutoNegTimeOut++;		if (pPrt->PAutoNegTimeOut >= SK_AND_MAX_TO) {			/* Timeout occured */			SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,				("AutoNeg timeout Port %d\n", Port));			if (pPrt->PLinkModeConf == SK_LMODE_AUTOSENSE &&				pPrt->PLipaAutoNeg != SK_LIPA_AUTO) {				/* Set Link manually up */				SkHWSenseSetNext(pAC, IoC, Port, SK_LMODE_FULL);				SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,					("Set manual full duplex Port %d\n", Port));			}			/* Do the restart */			return(SK_HW_PS_RESTART);		}	}	else {		/* Link is up and we don't need more */#ifdef DEBUG		if (pPrt->PLipaAutoNeg == SK_LIPA_AUTO) {			SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_CTRL,				("ERROR: Lipa auto detected on port %d\n", Port));		}#endif /* DEBUG */		/*		 * Dummy Read interrupt status to prevent		 * extra link down/ups		 */		SkXmPhyRead(pAC, IoC, Port, PHY_LONE_INT_STAT, &ExtStat);				SK_DBG_MSG(pAC, SK_DBGMOD_HWM, SK_DBGCAT_IRQ,			("Link sync(GP), Port %d\n", Port));		SkHWLinkUp(pAC, IoC, Port);				return(SK_HW_PS_LINK);	}	return(SK_HW_PS_NONE);}	/* SkGePortCheckUpLone *//****************************************************************************** * * SkGePortCheckUpNat() - Check if the link is up on National PHY * * return: *	0	o.k. nothing needed *	1	Restart needed on this port *	2	Link came up */static int SkGePortCheckUpNat(SK_AC	*pAC,		/* Adapter Context */SK_IOC	IoC,		/* IO Context */int		Port,		/* Which port should be checked */SK_BOOL	AutoNeg)	/* Is Auto-negotiation used ? */{	/* todo: National */	return(SK_HW_PS_NONE);}	/* SkGePortCheckUpNat */#endif /* OTHER_PHY *//****************************************************************************** * *	SkGeSirqEvent() - Event Service Routine * * Description: * * Notes: */int	SkGeSirqEvent(SK_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -