📄 pistp.c
字号:
/*
* Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
* All rights reserved.
*
* This software is copyrighted by and is the sole property of
* VIA Networking Technologies, Inc. This software may only be used
* in accordance with the corresponding license agreement. Any unauthorized
* use, duplication, transmission, distribution, or disclosure of this
* software is expressly forbidden.
*
* This software is provided by VIA Networking Technologies, Inc. "as is"
* and any express or implied warranties, including, but not limited to, the
* implied warranties of merchantability and fitness for a particular purpose
* are disclaimed. In no event shall VIA Networking Technologies, Inc.
* be liable for any direct, indirect, incidental, special, exemplary, or
* consequential damages.
*
*
* File: pistp.c
*
* Purpose: Spanning Tree module UI callback functions
*
* Author: Freeya Lin
*
* Date: Dec 10, 2003
*
* Functions:
*
* Revision History:
*
*/
#include "str.h"
#if !defined(__SWCFG_H__)
#include "swcfg.h"
#endif
#include "swstp.h"
#include "swmsg.h"
#include "pigencfg.h"
#include "pistp.h"
#include "piportmp.h"
#include "pidef.h"
/*--------------------- Static Definitions -------------------------*/
/*--------------------- Static Classes ----------------------------*/
/*--------------------- Static Variables --------------------------*/
/*--------------------- Static Functions --------------------------*/
static UINT8 s_bySetCfgToHW(SSTPPageCfg* pSPageCfg_STP);
/*--------------------- Export Variables --------------------------*/
/*--------------------- Export Macros -----------------------------*/
/*--------------------- Export Functions --------------------------*/
void PISTP_vInitPage(SSTPPageCfg* pSPageCfg_STP)
{
UINT8 byPanelPortID, byPhyPID, byCfg;
SSTPPageCfg SSPageCfgBuff;
STR_pvMemset(&SSPageCfgBuff, 0, sizeof(SSTPPageCfg));
STR_pvMemset(pSPageCfg_STP, 0, sizeof(SSTPPageCfg));
PIEEP_vGetCfgFromEep(EEP_ADDR_PROV_STP_CFG , EEP_SIZE_PROV_STP_CFG, (PUINT8)&SSPageCfgBuff);
pSPageCfg_STP->byMode = SSPageCfgBuff.byMode;
for (byPhyPID = 0; byPhyPID < SWITCH_PORT_NUM; byPhyPID++)
{
byPanelPortID = PIPORTMP_byPhyIdToLogPtr(byPhyPID);
SWSRAM_vExtractBitsByByte( SSPageCfgBuff.abySTPPortState, (UINT8)(byPhyPID*PORT_STP_STATE_BIT_NUM),
(UINT8)((byPhyPID+1)*PORT_STP_STATE_BIT_NUM-1), &byCfg);
SWSRAM_vModifyBitsByByte( pSPageCfg_STP->abySTPPortState, (UINT8)(byPanelPortID*PORT_STP_STATE_BIT_NUM),
(UINT8)((byPanelPortID+1)*PORT_STP_STATE_BIT_NUM-1), &byCfg);
}
}
void PISTP_vSetEepDefault(SSTPPageCfg* pSPageCfg_STP, BOOL bWriteDefault)
{
UINT8 byPhyPID, byCfg = DEFAULT_STP_PORT_STATE;
STR_pvMemset(pSPageCfg_STP, 0, sizeof(SSTPPageCfg));
pSPageCfg_STP->byMode = DEFAULT_STP_MODE;
for (byPhyPID = 0; byPhyPID < SWITCH_PORT_NUM; byPhyPID++) {
SWSRAM_vModifyBitsByByte( pSPageCfg_STP->abySTPPortState, (UINT8)(byPhyPID*PORT_STP_STATE_BIT_NUM),
(UINT8)((byPhyPID+1)*PORT_STP_STATE_BIT_NUM-1), &byCfg);
}
if (bWriteDefault) {
// Set value to nvram software cache
STR_pvMemcpy(g_pu8NVRSwCache + (EEP_ADDR_PROV_STP_CFG - NVR_ADDR_DATA_AREA_START), (PUINT8)pSPageCfg_STP, EEP_SIZE_PROV_STP_CFG);
}
else {
PIEEP_vSetCfgIntoEep((PUINT8)pSPageCfg_STP, EEP_ADDR_PROV_STP_CFG, EEP_SIZE_PROV_STP_CFG);
NVRAM_vUpdateChecksum(EEP_SIZE_DATA_AREA);
}
}
void PISTP_vSetHwFromEep(SSTPPageCfg* pSPageCfg_STP)
{
PIEEP_vGetCfgFromEep(EEP_ADDR_PROV_STP_CFG, EEP_SIZE_PROV_STP_CFG, (PUINT8)pSPageCfg_STP);
s_bySetCfgToHW(pSPageCfg_STP);
}
UINT8 PISTP_bySavePage(SSTPPageCfg* pSPageCfg_STP)
{
UINT8 byLogPortIndex, byPhyPID, byCfg;
UINT32 dwPhyPortMask = 0;
SSTPPageCfg SSPageCfgBuff;
UINT8 byRes;
STR_pvMemset(&SSPageCfgBuff, 0, sizeof(SSTPPageCfg));
if (pSPageCfg_STP->byMode) { //enable : transfer from logic to physical
for (byLogPortIndex = 0; byLogPortIndex < g_byLogIdNum; byLogPortIndex++) {
SWSRAM_vExtractBitsByByte( pSPageCfg_STP->abySTPPortState, (UINT8)(byLogPortIndex*PORT_STP_STATE_BIT_NUM),
(UINT8)((byLogPortIndex+1)*PORT_STP_STATE_BIT_NUM-1), &byCfg );
dwPhyPortMask = PIPORTMP_dwLogPtrToPhyMsk(byLogPortIndex);
for (byPhyPID = 0; byPhyPID < SWITCH_PORT_NUM; byPhyPID++) {
if (dwPhyPortMask & 0x00000001)
SWSRAM_vModifyBitsByByte( SSPageCfgBuff.abySTPPortState, (UINT8)(byPhyPID*PORT_STP_STATE_BIT_NUM),
(UINT8)((byPhyPID+1)*PORT_STP_STATE_BIT_NUM-1), &byCfg);
dwPhyPortMask >>= 1;
}
}
}
else { // disable: reset all config to default value
byCfg = DEFAULT_STP_PORT_STATE;
for (byPhyPID = 0; byPhyPID < SWITCH_PORT_NUM; byPhyPID++) {
SWSRAM_vModifyBitsByByte( SSPageCfgBuff.abySTPPortState, (UINT8)(byPhyPID*PORT_STP_STATE_BIT_NUM),
(UINT8)((byPhyPID+1)*PORT_STP_STATE_BIT_NUM-1), &byCfg);
}
}
SSPageCfgBuff.byMode = pSPageCfg_STP->byMode;
// Set config into HW
byRes = s_bySetCfgToHW(&SSPageCfgBuff);
if (byRes != OP_OK)
return byRes;
// Set config into EEPROM and return
PIEEP_vSetCfgIntoEep((PUINT8)&SSPageCfgBuff, EEP_ADDR_PROV_STP_CFG, EEP_SIZE_PROV_STP_CFG);
NVRAM_vUpdateChecksum(EEP_SIZE_DATA_AREA);
return byRes;
}
static UINT8 s_bySetCfgToHW(SSTPPageCfg* pSPageCfg_STP)
{
UINT8 byPhyPID, byCfg;
SWPROTO_vSetStpMode(pSPageCfg_STP->byMode);
for (byPhyPID = 0; byPhyPID < SWITCH_PORT_NUM; byPhyPID++)
{
SWSRAM_vExtractBitsByByte( pSPageCfg_STP->abySTPPortState, (UINT8)(byPhyPID*PORT_STP_STATE_BIT_NUM),
(UINT8)((byPhyPID+1)*PORT_STP_STATE_BIT_NUM-1), &byCfg);
SWPROTO_vStpSetPortState(byPhyPID, byCfg);
}
return OP_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -