📄 skgepnmi.c
字号:
SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfFlowCtrlCapability), SK_PNMI_RO, MacPrivateConf, 0}, {OID_SKGE_FLOWCTRL_MODE, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_CONF), SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfFlowCtrlMode), SK_PNMI_RW, MacPrivateConf, 0}, {OID_SKGE_FLOWCTRL_STATUS, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_CONF), SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfFlowCtrlStatus), SK_PNMI_RO, MacPrivateConf, 0}, {OID_SKGE_PHY_OPERATION_CAP, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_CONF), SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPhyOperationCapability), SK_PNMI_RO, MacPrivateConf, 0}, {OID_SKGE_PHY_OPERATION_MODE, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_CONF), SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPhyOperationMode), SK_PNMI_RW, MacPrivateConf, 0}, {OID_SKGE_PHY_OPERATION_STATUS, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_CONF), SK_PNMI_OFF(Conf) + SK_PNMI_CNF_OFF(ConfPhyOperationStatus), SK_PNMI_RO, MacPrivateConf, 0}, {OID_SKGE_TRAP, 1, 0, SK_PNMI_MAI_OFF(Trap), SK_PNMI_RO, General, 0}, {OID_SKGE_TRAP_NUMBER, 1, 0, SK_PNMI_MAI_OFF(TrapNumber), SK_PNMI_RO, General, 0}, {OID_SKGE_RLMT_MODE, 1, 0, SK_PNMI_MAI_OFF(RlmtMode), SK_PNMI_RW, Rlmt, 0}, {OID_SKGE_RLMT_PORT_NUMBER, 1, 0, SK_PNMI_MAI_OFF(RlmtPortNumber), SK_PNMI_RO, Rlmt, 0}, {OID_SKGE_RLMT_PORT_ACTIVE, 1, 0, SK_PNMI_MAI_OFF(RlmtPortActive), SK_PNMI_RO, Rlmt, 0}, {OID_SKGE_RLMT_PORT_PREFERRED, 1, 0, SK_PNMI_MAI_OFF(RlmtPortPreferred), SK_PNMI_RW, Rlmt, 0}, {OID_SKGE_RLMT_CHANGE_CTS, 1, 0, SK_PNMI_MAI_OFF(RlmtChangeCts), SK_PNMI_RO, Rlmt, 0}, {OID_SKGE_RLMT_CHANGE_TIME, 1, 0, SK_PNMI_MAI_OFF(RlmtChangeTime), SK_PNMI_RO, Rlmt, 0}, {OID_SKGE_RLMT_CHANGE_ESTIM, 1, 0, SK_PNMI_MAI_OFF(RlmtChangeEstimate), SK_PNMI_RO, Rlmt, 0}, {OID_SKGE_RLMT_CHANGE_THRES, 1, 0, SK_PNMI_MAI_OFF(RlmtChangeThreshold), SK_PNMI_RW, Rlmt, 0}, {OID_SKGE_RLMT_PORT_INDEX, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_RLMT), SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtIndex), SK_PNMI_RO, RlmtStat, 0}, {OID_SKGE_RLMT_STATUS, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_RLMT), SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtStatus), SK_PNMI_RO, RlmtStat, 0}, {OID_SKGE_RLMT_TX_HELLO_CTS, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_RLMT), SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtTxHelloCts), SK_PNMI_RO, RlmtStat, 0}, {OID_SKGE_RLMT_RX_HELLO_CTS, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_RLMT), SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtRxHelloCts), SK_PNMI_RO, RlmtStat, 0}, {OID_SKGE_RLMT_TX_SP_REQ_CTS, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_RLMT), SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtTxSpHelloReqCts), SK_PNMI_RO, RlmtStat, 0}, {OID_SKGE_RLMT_RX_SP_CTS, SK_PNMI_MAC_ENTRIES, sizeof(SK_PNMI_RLMT), SK_PNMI_OFF(Rlmt) + SK_PNMI_RLM_OFF(RlmtRxSpHelloCts), SK_PNMI_RO, RlmtStat, 0}, {OID_SKGE_RLMT_MONITOR_NUMBER, 1, 0, SK_PNMI_MAI_OFF(RlmtMonitorNumber), SK_PNMI_RO, General, 0}, {OID_SKGE_RLMT_MONITOR_INDEX, SK_PNMI_MONITOR_ENTRIES, sizeof(SK_PNMI_RLMT_MONITOR), SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorIndex), SK_PNMI_RO, Monitor, 0}, {OID_SKGE_RLMT_MONITOR_ADDR, SK_PNMI_MONITOR_ENTRIES, sizeof(SK_PNMI_RLMT_MONITOR), SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorAddr), SK_PNMI_RO, Monitor, 0}, {OID_SKGE_RLMT_MONITOR_ERRS, SK_PNMI_MONITOR_ENTRIES, sizeof(SK_PNMI_RLMT_MONITOR), SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorErrorCts), SK_PNMI_RO, Monitor, 0}, {OID_SKGE_RLMT_MONITOR_TIMESTAMP, SK_PNMI_MONITOR_ENTRIES, sizeof(SK_PNMI_RLMT_MONITOR), SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorTimestamp), SK_PNMI_RO, Monitor, 0}, {OID_SKGE_RLMT_MONITOR_ADMIN, SK_PNMI_MONITOR_ENTRIES, sizeof(SK_PNMI_RLMT_MONITOR), SK_PNMI_OFF(RlmtMonitor) + SK_PNMI_MON_OFF(RlmtMonitorAdmin), SK_PNMI_RW, Monitor, 0}, {OID_SKGE_MTU, 1, 0, SK_PNMI_MAI_OFF(MtuSize), SK_PNMI_RW, MacPrivateConf, 0},};/* * Table for hardware register saving on resets and port switches */static const SK_PNMI_STATADDR StatAddress[SK_PNMI_MAX_IDX] = { /* 0 */ {TRUE, XM_TXF_OK}, /* 1 */ {TRUE, 0}, /* 2 */ {FALSE, 0}, /* 3 */ {TRUE, XM_TXF_BC_OK}, /* 4 */ {TRUE, XM_TXF_MC_OK}, /* 5 */ {TRUE, XM_TXF_UC_OK}, /* 6 */ {TRUE, XM_TXF_LONG}, /* 7 */ {TRUE, XM_TXE_BURST}, /* 8 */ {TRUE, XM_TXF_MPAUSE}, /* 9 */ {TRUE, XM_TXF_MCTRL}, /* 10 */ {TRUE, XM_TXF_SNG_COL}, /* 11 */ {TRUE, XM_TXF_MUL_COL}, /* 12 */ {TRUE, XM_TXF_ABO_COL}, /* 13 */ {TRUE, XM_TXF_LAT_COL}, /* 14 */ {TRUE, XM_TXF_DEF}, /* 15 */ {TRUE, XM_TXF_EX_DEF}, /* 16 */ {TRUE, XM_TXE_FIFO_UR}, /* 17 */ {TRUE, XM_TXE_CS_ERR}, /* 18 */ {FALSE, 0}, /* 19 */ {FALSE, 0}, /* 20 */ {TRUE, XM_TXF_64B}, /* 21 */ {TRUE, XM_TXF_127B}, /* 22 */ {TRUE, XM_TXF_255B}, /* 23 */ {TRUE, XM_TXF_511B}, /* 24 */ {TRUE, XM_TXF_1023B}, /* 25 */ {TRUE, XM_TXF_MAX_SZ}, /* 26 */ {FALSE, 0}, /* 27 */ {FALSE, 0}, /* 28 */ {FALSE, 0}, /* 29 */ {FALSE, 0}, /* 30 */ {FALSE, 0}, /* 31 */ {FALSE, 0}, /* 32 */ {TRUE, XM_RXF_OK}, /* 33 */ {TRUE, 0}, /* 34 */ {FALSE, 0}, /* 35 */ {TRUE, XM_RXF_BC_OK}, /* 36 */ {TRUE, XM_RXF_MC_OK}, /* 37 */ {TRUE, XM_RXF_UC_OK}, /* 38 */ {TRUE, XM_RXF_MPAUSE}, /* 39 */ {TRUE, XM_RXF_MCTRL}, /* 40 */ {TRUE, XM_RXF_INV_MP}, /* 41 */ {TRUE, XM_RXF_INV_MOC}, /* 42 */ {TRUE, XM_RXE_BURST}, /* 43 */ {TRUE, XM_RXE_FMISS}, /* 44 */ {TRUE, XM_RXF_FRA_ERR}, /* 45 */ {TRUE, XM_RXE_FIFO_OV}, /* 46 */ {TRUE, XM_RXF_JAB_PKT}, /* 47 */ {TRUE, XM_RXE_CAR_ERR}, /* 48 */ {TRUE, XM_RXF_LEN_ERR}, /* 49 */ {TRUE, XM_RXE_SYM_ERR}, /* 50 */ {TRUE, XM_RXE_SHT_ERR}, /* 51 */ {TRUE, XM_RXE_RUNT}, /* 52 */ {TRUE, XM_RXF_LNG_ERR}, /* 53 */ {TRUE, XM_RXF_FCS_ERR}, /* 54 */ {FALSE, 0}, /* 55 */ {TRUE, XM_RXF_CEX_ERR}, /* 56 */ {FALSE, 0}, /* 57 */ {FALSE, 0}, /* 58 */ {TRUE, XM_RXF_64B}, /* 59 */ {TRUE, XM_RXF_127B}, /* 60 */ {TRUE, XM_RXF_255B}, /* 61 */ {TRUE, XM_RXF_511B}, /* 62 */ {TRUE, XM_RXF_1023B}, /* 63 */ {TRUE, XM_RXF_MAX_SZ}, /* 64 */ {FALSE, 0}, /* 65 */ {FALSE, 0}, /* 66 */ {TRUE, 0}};/***************************************************************************** * * Public functions * *//***************************************************************************** * * SkPnmiInit - Init function of PNMI * * Description: * SK_INIT_DATA: Initialises the data structures * SK_INIT_IO: Resets the XMAC statistics, determines the device and * connector type. * SK_INIT_RUN: Starts a timer event for port switch per hour * calculation. * * Returns: * Always 0 */int SkPnmiInit(SK_AC *pAC, /* Pointer to adapter context */SK_IOC IoC, /* IO context handle */int Level) /* Initialization level */{ unsigned int PortMax; /* Number of ports */ unsigned int PortIndex; /* Current port index in loop */ SK_U16 Val16; /* Multiple purpose 16 bit variable */ SK_U8 Val8; /* Mulitple purpose 8 bit variable */ SK_EVPARA EventParam; /* Event struct for timer event */ SK_DBG_MSG(pAC, SK_DBGMOD_PNMI, SK_DBGCAT_CTRL, ("PNMI: SkPnmiInit: Called, level=%d\n", Level)); switch (Level) { case SK_INIT_DATA: SK_MEMSET((char *)&pAC->Pnmi, 0, sizeof(pAC->Pnmi)); pAC->Pnmi.TrapBufFree = SK_PNMI_TRAP_QUEUE_LEN; pAC->Pnmi.StartUpTime = SK_PNMI_HUNDREDS_SEC(SkOsGetTime(pAC)); pAC->Pnmi.RlmtChangeThreshold = SK_PNMI_DEF_RLMT_CHG_THRES; for (PortIndex = 0; PortIndex < SK_MAX_MACS; PortIndex ++) { pAC->Pnmi.Port[PortIndex].ActiveFlag = SK_FALSE; pAC->Pnmi.DualNetActiveFlag = SK_FALSE; } break; case SK_INIT_IO: /* * Reset MAC counters */ PortMax = pAC->GIni.GIMacsFound; for (PortIndex = 0; PortIndex < PortMax; PortIndex ++) { Val16 = XM_SC_CLR_RXC | XM_SC_CLR_TXC; XM_OUT16(IoC, PortIndex, XM_STAT_CMD, Val16); /* Clear two times according to Errata #3 */ XM_OUT16(IoC, PortIndex, XM_STAT_CMD, Val16); } /* * Get pci bus speed */ SK_IN16(IoC, B0_CTST, &Val16); if ((Val16 & CS_BUS_CLOCK) == 0) { pAC->Pnmi.PciBusSpeed = 33; } else { pAC->Pnmi.PciBusSpeed = 66; } /* * Get pci bus width */ SK_IN16(IoC, B0_CTST, &Val16); if ((Val16 & CS_BUS_SLOT_SZ) == 0) { pAC->Pnmi.PciBusWidth = 32; } else { pAC->Pnmi.PciBusWidth = 64; } /* * Get PMD and DeviceType */ SK_IN8(IoC, B2_PMD_TYP, &Val8); switch (Val8) { case 'S': pAC->Pnmi.PMD = 3; if (pAC->GIni.GIMacsFound > 1) { pAC->Pnmi.DeviceType = 0x00020002; } else { pAC->Pnmi.DeviceType = 0x00020001; } break; case 'L': pAC->Pnmi.PMD = 2; if (pAC->GIni.GIMacsFound > 1) { pAC->Pnmi.DeviceType = 0x00020004; } else { pAC->Pnmi.DeviceType = 0x00020003; } break; case 'C': pAC->Pnmi.PMD = 4; if (pAC->GIni.GIMacsFound > 1) { pAC->Pnmi.DeviceType = 0x00020006; } else { pAC->Pnmi.DeviceType = 0x00020005; } break; case 'T': pAC->Pnmi.PMD = 5; if (pAC->GIni.GIMacsFound > 1) { pAC->Pnmi.DeviceType = 0x00020008; } else { pAC->Pnmi.DeviceType = 0x00020007; } break; default : pAC->Pnmi.PMD = 1; pAC->Pnmi.DeviceType = 0; break; } /* * Get connector */ SK_IN8(IoC, B2_CONN_TYP, &Val8); switch (Val8) { 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, 28125000, SKGE_PNMI, SK_PNMI_EVT_CHG_EST_TIMER, EventParam); break; default: break; /* Nothing todo */ } return (0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -