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

📄 pistp.c

📁 vt6528芯片交换机API函数和文档运行程序
💻 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 + -