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

📄 skgepnmi.c

📁 这是Marvell Technology Group Ltd. 4355 (rev 12)网卡在linux下的驱动程序源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
			pAC->Pnmi.PciBusWidth = 32;		}		/* Get chipset. */		switch (pAC->GIni.GIChipId) {		case CHIP_ID_YUKON:			pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_YUKON;			break;		case CHIP_ID_YUKON_LITE:			pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_YUKON_LITE;			break;		case CHIP_ID_YUKON_LP:			pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_YUKON_LP;			break;		case CHIP_ID_YUKON_XL:			pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_YUKON_XL;			break;		case CHIP_ID_YUKON_EC:			pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_YUKON_EC;			break;		case CHIP_ID_YUKON_FE:			pAC->Pnmi.Chipset = SK_PNMI_CHIPSET_YUKON_FE;			break;		default:			break;		}		/* Get PMD and Device Type. */		switch (pAC->GIni.GIPmdTyp) {		case 'S':			pAC->Pnmi.PMD = 3;			pAC->Pnmi.DeviceType = 0x00020001;			break;		case 'L':			pAC->Pnmi.PMD = 2;			pAC->Pnmi.DeviceType = 0x00020003;			break;		case 'C':			pAC->Pnmi.PMD = 4;			pAC->Pnmi.DeviceType = 0x00020005;			break;		case 'T':			pAC->Pnmi.PMD = 5;			pAC->Pnmi.DeviceType = 0x00020007;			break;		default :			pAC->Pnmi.PMD = 1;			pAC->Pnmi.DeviceType = 0;			break;		}		if (pAC->GIni.GIMacsFound > 1) {			pAC->Pnmi.DeviceType++;		}		/* Get connector type. */		switch (pAC->GIni.GIConTyp) {		case 'C':			pAC->Pnmi.Connector = 2;			break;		case 'D':			pAC->Pnmi.Connector = 3;			break;		case 'F':			pAC->Pnmi.Connector = 4;			break;		case 'J':			pAC->Pnmi.Connector = 5;			break;		case 'V':			pAC->Pnmi.Connector = 6;			break;		default:			pAC->Pnmi.Connector = 1;			break;		}		break;	case SK_INIT_RUN:		/* Start timer for RLMT change counter. */		SK_MEMSET((char *)&EventParam, 0, sizeof(EventParam));		SkTimerStart(pAC, IoC, &pAC->Pnmi.RlmtChangeEstimate.EstTimer,			SK_PNMI_EVT_TIMER_CHECK, SKGE_PNMI, SK_PNMI_EVT_CHG_EST_TIMER,			EventParam);		break;	default:		break; /* Nothing to do. */	}	return (0);}/***************************************************************************** * * SkPnmiGetVar - Retrieves the value of a single OID * * Description: *	Calls a general sub-function for all this stuff. If the instance *	-1 is passed, the values of all instances are returned in an *	array of values. * * Returns: *	SK_PNMI_ERR_OK           The request was successfully performed *	SK_PNMI_ERR_GENERAL      A general severe internal error occured *	SK_PNMI_ERR_TOO_SHORT    The passed buffer is too short to take *	                         the data. *	SK_PNMI_ERR_UNKNOWN_OID  The requested OID is unknown *	SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't *                           exist (e.g. port instance 3 on a two port *	                         adapter. */int SkPnmiGetVar(SK_AC *pAC,		/* Pointer to adapter context */SK_IOC IoC,		/* IO context handle */SK_U32 Id,		/* Object ID that is to be processed */void *pBuf,		/* Buffer to which the management data will be copied */unsigned int *pLen,	/* On call: buffer length. On return: used buffer */SK_U32 Instance,	/* Instance (1..n) that is to be queried or -1 */SK_U32 NetIndex)	/* NetIndex (0..n), in single net mode always zero */{	SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,		("PNMI: SkPnmiGetVar: Called, Id=0x%x, BufLen=%d, Instance=%d, NetIndex=%d\n",			Id, *pLen, Instance, NetIndex));	return (PnmiVar(pAC, IoC, SK_PNMI_GET, Id, (char *)pBuf, pLen,		Instance, NetIndex));}/***************************************************************************** * * SkPnmiPreSetVar - Presets the value of a single OID * * Description: *	Calls a general sub-function for all this stuff. The preset does *	the same as a set, but returns just before finally setting the *	new value. This is usefull to check if a set might be successfull. *	If the instance -1 is passed, an array of values is supposed and *	all instances of the OID will be set. * * Returns: *	SK_PNMI_ERR_OK           The request was successfully performed. *	SK_PNMI_ERR_GENERAL      A general severe internal error occured. *	SK_PNMI_ERR_TOO_SHORT    The passed buffer is too short to contain *	                         the correct data (e.g. a 32bit value is *	                         needed, but a 16 bit value was passed). *	SK_PNMI_ERR_BAD_VALUE    The passed value is not in the valid *	                         value range. *	SK_PNMI_ERR_READ_ONLY    The OID is read-only and cannot be set. *	SK_PNMI_ERR_UNKNOWN_OID  The requested OID is unknown. *	SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't *                           exist (e.g. port instance 3 on a two port *	                         adapter. */int SkPnmiPreSetVar(SK_AC *pAC,		/* Pointer to adapter context */SK_IOC IoC,		/* IO context handle */SK_U32 Id,		/* Object ID that is to be processed */void *pBuf,		/* Buffer to which the management data will be copied */unsigned int *pLen,	/* Total length of management data */SK_U32 Instance,	/* Instance (1..n) that is to be set or -1 */SK_U32 NetIndex)	/* NetIndex (0..n), in single net mode always zero */{	SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,		("PNMI: SkPnmiPreSetVar: Called, Id=0x%x, BufLen=%d, Instance=%d, NetIndex=%d\n",			Id, *pLen, Instance, NetIndex));	return (PnmiVar(pAC, IoC, SK_PNMI_PRESET, Id, (char *)pBuf, pLen,		Instance, NetIndex));}/***************************************************************************** * * SkPnmiSetVar - Sets the value of a single OID * * Description: *	Calls a general sub-function for all this stuff. The preset does *	the same as a set, but returns just before finally setting the *	new value. This is usefull to check if a set might be successfull. *	If the instance -1 is passed, an array of values is supposed and *	all instances of the OID will be set. * * Returns: *	SK_PNMI_ERR_OK           The request was successfully performed. *	SK_PNMI_ERR_GENERAL      A general severe internal error occured. *	SK_PNMI_ERR_TOO_SHORT    The passed buffer is too short to contain *	                         the correct data (e.g. a 32bit value is *	                         needed, but a 16 bit value was passed). *	SK_PNMI_ERR_BAD_VALUE    The passed value is not in the valid *	                         value range. *	SK_PNMI_ERR_READ_ONLY    The OID is read-only and cannot be set. *	SK_PNMI_ERR_UNKNOWN_OID  The requested OID is unknown. *	SK_PNMI_ERR_UNKNOWN_INST The requested instance of the OID doesn't *                           exist (e.g. port instance 3 on a two port *	                         adapter. */int SkPnmiSetVar(SK_AC *pAC,		/* Pointer to adapter context */SK_IOC IoC,		/* IO context handle */SK_U32 Id,		/* Object ID that is to be processed */void *pBuf,		/* Buffer to which the management data will be copied */unsigned int *pLen,	/* Total length of management data */SK_U32 Instance,	/* Instance (1..n) that is to be set or -1 */SK_U32 NetIndex)	/* NetIndex (0..n), in single net mode always zero */{	SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,		("PNMI: SkPnmiSetVar: Called, Id=0x%x, BufLen=%d, Instance=%d, NetIndex=%d\n",			Id, *pLen, Instance, NetIndex));	return (PnmiVar(pAC, IoC, SK_PNMI_SET, Id, (char *)pBuf, pLen,		Instance, NetIndex));}/***************************************************************************** * * SkPnmiGetStruct - Retrieves the management database in SK_PNMI_STRUCT_DATA * * Description: *	Runs through the IdTable, queries the single OIDs and stores the *	returned data into the management database structure *	SK_PNMI_STRUCT_DATA. The offset of the OID in the structure *	is stored in the IdTable. The return value of the function will also *	be stored in SK_PNMI_STRUCT_DATA if the passed buffer has the *	minimum size of SK_PNMI_MIN_STRUCT_SIZE. * * Returns: *	SK_PNMI_ERR_OK           The request was successfully performed *	SK_PNMI_ERR_GENERAL      A general severe internal error occured *	SK_PNMI_ERR_TOO_SHORT    The passed buffer is too short to take *	                         the data. *	SK_PNMI_ERR_UNKNOWN_NET  The requested NetIndex doesn't exist */int SkPnmiGetStruct(SK_AC *pAC,		/* Pointer to adapter context */SK_IOC IoC,		/* IO context handle */void *pBuf,		/* Buffer to which the management data will be copied. */unsigned int *pLen,	/* Length of buffer */SK_U32 NetIndex)	/* NetIndex (0..n), in single net mode always zero */{	int		Ret;	unsigned int	TableIndex;	unsigned int	DstOffset;	unsigned int	InstanceNo;	unsigned int	InstanceCnt;	SK_U32		Instance;	unsigned int	TmpLen;	char		KeyArr[SK_PNMI_VPD_ENTRIES][SK_PNMI_VPD_KEY_SIZE];	SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL,		("PNMI: SkPnmiGetStruct: Called, BufLen=%d, NetIndex=%d\n",			*pLen, NetIndex));	if (*pLen < SK_PNMI_STRUCT_SIZE) {		if (*pLen >= SK_PNMI_MIN_STRUCT_SIZE) {			SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_TOO_SHORT, (SK_U32)(-1));		}		*pLen = SK_PNMI_STRUCT_SIZE;		return (SK_PNMI_ERR_TOO_SHORT);	}	/* Check NetIndex. */	if (NetIndex >= pAC->Rlmt.NumNets) {		return (SK_PNMI_ERR_UNKNOWN_NET);	}	/* Update statistics. */	SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On call");	if ((Ret = MacUpdate(pAC, IoC, 0, pAC->GIni.GIMacsFound - 1)) !=		SK_PNMI_ERR_OK) {		SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));		*pLen = SK_PNMI_MIN_STRUCT_SIZE;		return (Ret);	}	if ((Ret = RlmtUpdate(pAC, IoC, NetIndex)) != SK_PNMI_ERR_OK) {		SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));		*pLen = SK_PNMI_MIN_STRUCT_SIZE;		return (Ret);	}	if ((Ret = SirqUpdate(pAC, IoC)) != SK_PNMI_ERR_OK) {		SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));		*pLen = SK_PNMI_MIN_STRUCT_SIZE;		return (Ret);	}	/* Increment semaphores to indicate that an update was already done. */	pAC->Pnmi.MacUpdatedFlag ++;	pAC->Pnmi.RlmtUpdatedFlag ++;	pAC->Pnmi.SirqUpdatedFlag ++;	/*	 * Get VPD keys for instance calculation.	 * Please read comment in Vpd().	 */	if (pAC->Pnmi.VpdKeyReadError == SK_FALSE) {		Ret = GetVpdKeyArr(pAC, IoC, &KeyArr[0][0], sizeof(KeyArr), &TmpLen);		if ((Ret != SK_PNMI_ERR_OK) && (pAC->Pnmi.VpdKeyReadError == SK_FALSE)){			pAC->Pnmi.MacUpdatedFlag --;			pAC->Pnmi.RlmtUpdatedFlag --;			pAC->Pnmi.SirqUpdatedFlag --;			SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On return");			SK_PNMI_SET_STAT(pBuf, Ret, (SK_U32)(-1));			*pLen = SK_PNMI_MIN_STRUCT_SIZE;			return (SK_PNMI_ERR_GENERAL);		}	}	/* Retrieve values. */	SK_MEMSET((char *)pBuf, 0, SK_PNMI_STRUCT_SIZE);	for (TableIndex = 0; TableIndex < ID_TABLE_SIZE; TableIndex ++) {		InstanceNo = IdTable[TableIndex].InstanceNo;		for (InstanceCnt = 1; InstanceCnt <= InstanceNo; InstanceCnt ++) {			DstOffset = IdTable[TableIndex].Offset +				(InstanceCnt - 1) *				IdTable[TableIndex].StructSize;			/*			 * For the VPD the instance is not an index number			 * but the key itself. Determin with the instance			 * counter the VPD key to be used.			 */			if (IdTable[TableIndex].Id == OID_SKGE_VPD_KEY ||				IdTable[TableIndex].Id == OID_SKGE_VPD_VALUE ||				IdTable[TableIndex].Id == OID_SKGE_VPD_ACCESS ||				IdTable[TableIndex].Id == OID_SKGE_VPD_ACTION) {				SK_STRNCPY((char *)&Instance, KeyArr[InstanceCnt - 1], 4);			}			else {				Instance = (SK_U32)InstanceCnt;			}			TmpLen = *pLen - DstOffset;			Ret = IdTable[TableIndex].Func(pAC, IoC, SK_PNMI_GET,				IdTable[TableIndex].Id, (char *)pBuf +				DstOffset, &TmpLen, Instance, TableIndex, NetIndex);			/*			 * An unknown instance error means that we reached			 * the last instance of that variable. Proceed with			 * the next OID in the table and ignore the return			 * code.			 */			if (Ret == SK_PNMI_ERR_UNKNOWN_INST) {				break;			}			if (Ret != SK_PNMI_ERR_OK) {				pAC->Pnmi.MacUpdatedFlag --;				pAC->Pnmi.RlmtUpdatedFlag --;				pAC->Pnmi.SirqUpdatedFlag --;				SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On return");				SK_PNMI_SET_STAT(pBuf, Ret, DstOffset);				*pLen = SK_PNMI_MIN_STRUCT_SIZE;				return (Ret);			}		}	}	pAC->Pnmi.MacUpdatedFlag --;	pAC->Pnmi.RlmtUpdatedFlag --;	pAC->Pnmi.SirqUpdatedFlag --;	*pLen = SK_PNMI_STRUCT_SIZE;	SK_PNMI_CHECKFLAGS("SkPnmiGetStruct: On return");	SK_PNMI_SET_STAT(pBuf, SK_PNMI_ERR_OK, (SK_U32)(-1));	return (SK_PNMI_ERR_OK);}/***************************************************************************** * * SkPnmiPreSetStruct - Presets the management database in SK_PNMI_STRUCT_DATA * * Description: *	Calls a general sub-function for all this set stuff. The preset does *	the same as a set, but returns just before finally setting the *	new value. This is usefull to check if a set might be successfull. *	The sub-function runs through the IdTable, checks which OIDs are able *	to set, and calls the handler function of the OID to perform the

⌨️ 快捷键说明

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