blob: add7173dbfa94c36d18ca9ac477085d66955204d [file] [log] [blame]
/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates
This software file (the "File") is owned and distributed by Marvell
International Ltd. and/or its affiliates ("Marvell") under the following
alternative licensing terms. Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.
********************************************************************************
Marvell Commercial License Option
If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.
********************************************************************************
Marvell GPL License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED. The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File under the following licensing terms.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of Marvell nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
/******************************************************************************
** FILE : gponOnuLnxKsUI.c **
** **
** DESCRIPTION : This file implements ONU GPON CLI functionality **
*******************************************************************************
* *
* MODIFICATION HISTORY: *
* *
* 29Oct06 Oren Ben Hayun created *
* =========================================================================== *
******************************************************************************/
/* Include Files
------------------------------------------------------------------------------*/
#include "gponOnuHeader.h"
#include "gponOnuGoogle.h"
#ifndef PON_FPGA
#include "mvSysPonConfig.h"
#endif /* PON_FPGA */
/* Local Constant
------------------------------------------------------------------------------*/
#define __FILE_DESC__ "mv_pon/perf/gpon/gponOnuLnxKsUI.c"
/* Global Variables
------------------------------------------------------------------------------*/
extern MV_BOOL onuGponLogEnable;
/* Local Variables
------------------------------------------------------------------------------*/
MV_BOOL infoGponCntReadClearInd = MV_TRUE;
MV_U32 maxPloamsSend = 270;
/* Export Functions
------------------------------------------------------------------------------*/
/* Local Functions
------------------------------------------------------------------------------*/
/******************************************************************************/
/* ========================================================================== */
/* Info Commands */
/* ========================================================================== */
/******************************************************************************/
/*******************************************************************************
**
** onuGponUiInfoShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu information
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiInfoShow(char* buf)
{
MV_U8 *stateText[] = {"",
"INITIAL",
"STANDBY",
"SERIAL NUMBER",
"RANGING",
"OPERATION",
"POPUP",
"EMERGENCY STOP"};
MV_U8 *boolText[] = {"FALSE","TRUE"};
MV_U8 serialNumber[8];
MV_U8 password[10];
MV_U32 onuId,onuState;
MV_BOOL init,omcc,snMaskEnable,snMaskMatchMode;
MV_U32 berInt, dummy,omccPort;
MV_U32 guard,pre1Size;
MV_U32 pre2Size,pre3RaSize,pre3OpSize,pre3Pat;
MV_U32 dbDelimiter,asicDelimiter,sd,sf;
MV_U32 intDelay,eqdDb,eqdAsic,fDelay;
MV_U32 snMsg[3], idleMsg[3];
MV_U8 *mchText[] = {"NO MATCH","MATCH "};
MV_U16 ponIdTxOpticalLevel;
MV_U8 ponIdTypeAbit;
MV_U8 ponIdClassType;
MV_U8 ponIdBytes[ONU_GPON_PON_ID_BYTES_LEN];
int off = 0;
onuGponDbSerialNumGet(serialNumber);
onuState = onuGponDbOnuStateGet();
onuId = onuGponDbOnuIdGet();
init = onuGponDbInitGet();
omcc = onuGponDbOmccValidGet();
omccPort = onuGponDbOmccPortGet();
snMaskEnable = onuGponDbSerialNumberMaskEnableGet();
snMaskMatchMode = onuGponDbSerialNumberMaskMatchGet();
onuGponDbPasswordGet(password);
guard = onuGponDbGuardBitsGet();
berInt = onuGponDbBerIntervalGet();
onuGponDbPreambleGet(ONU_GPON_PREM_TYPE_01,&dummy,&pre1Size);
onuGponDbPreambleGet(ONU_GPON_PREM_TYPE_02,&dummy,&pre2Size);
onuGponDbPreambleGet(ONU_GPON_PREM_TYPE_03,&pre3Pat,&dummy);
pre3OpSize = onuGponDbExtPreambleOperGet();
pre3RaSize = onuGponDbExtPreambleSyncGet();
sd = onuGponDbSdThresholdGet();
sf = onuGponDbSfThresholdGet();
intDelay = onuGponDbConstDelayGet();
eqdDb = onuGponDbEqualizationDelayGet();
mvOnuGponMacRxEqualizationDelayGet(&eqdAsic);
mvOnuGponMacTxFinalDelayGet(&fDelay);
dbDelimiter = onuGponDbDelimiterGet(ONU_GPON_DELM_BYTE_01) |
(onuGponDbDelimiterGet(ONU_GPON_DELM_BYTE_02) << 8) |
(onuGponDbDelimiterGet(ONU_GPON_DELM_BYTE_03) << 16);
mvOnuGponMacTxDelimiterGet(&asicDelimiter,&dummy);
onuGponDbSnMsgGet(snMsg);
onuGponDbIdleMsgGet(idleMsg);
// PON-ID Manufacturer info
ponIdTypeAbit = onuGponDbPONIdTypeABitGet();
ponIdClassType = onuGponDbPONIdClassTypeGet();
onuGponDbPONIdBytesInfoGet(&(ponIdBytes[0]));
ponIdTxOpticalLevel = onuGponDbPONIdOpticalLevelGet();
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "ONT Full Information:\n");
off += mvOsSPrintf(buf+off, "---------------------\n");
off += mvOsSPrintf(buf+off, "SN[VENDOR ID]: %02X:%02X:%02X:%02X [%c%c%c%c]\n",
serialNumber[0],serialNumber[1],serialNumber[2],serialNumber[3],
serialNumber[0],serialNumber[1],serialNumber[2],serialNumber[3]);
off += mvOsSPrintf(buf+off, "SN[Serial Number]: %02X:%02X:%02X:%02X\n",
serialNumber[4],serialNumber[5],serialNumber[6],serialNumber[7]);
off += mvOsSPrintf(buf+off, "ONU ID: %d\n", onuId);
off += mvOsSPrintf(buf+off, "ONU STATE: %d [%s]\n", onuState, stateText[onuState]);
off += mvOsSPrintf(buf+off, "INIT STATE: %s\n", boolText[init]);
off += mvOsSPrintf(buf+off, "OMCC Valid: %s\n", boolText[omcc]);
off += mvOsSPrintf(buf+off, "OMCC Port: %d\n", omccPort);
off += mvOsSPrintf(buf+off, "Password: %02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X.%02X\n",
password[0],password[1],password[2],password[3],password[4],
password[5],password[6],password[7],password[8],password[9]);
off += mvOsSPrintf(buf+off, "BER Interval: %d\n", berInt);
off += mvOsSPrintf(buf+off, "SD Threshold: %d\n", sd);
off += mvOsSPrintf(buf+off, "SF Threshold: %d\n", sf);
off += mvOsSPrintf(buf+off, "Guard Bits: %d\n", guard);
off += mvOsSPrintf(buf+off, "Preamble Type1 Size: %d\n", pre1Size);
off += mvOsSPrintf(buf+off, "Preamble Type2 Size: %d\n", pre2Size);
off += mvOsSPrintf(buf+off, "Preamble Type3 Pattern: 0x%02X\n", pre3Pat);
off += mvOsSPrintf(buf+off, "Preamble Type3 Range Size: %d\n", pre3RaSize);
off += mvOsSPrintf(buf+off, "Preamble Type3 Oper Size: %d\n", pre3OpSize);
off += mvOsSPrintf(buf+off, "Delimiter: 0x%08X [0x%08X]\n", dbDelimiter, asicDelimiter);
off += mvOsSPrintf(buf+off, "Internal Delay: %d [0x%x]\n", intDelay, intDelay);
off += mvOsSPrintf(buf+off, "Equalization Delay: %d [0x%x] (HW:0x%x)\n", eqdDb, eqdDb, eqdAsic);
off += mvOsSPrintf(buf+off, "Final Delay: %d\n", fDelay);
off += mvOsSPrintf(buf+off, "Const Idle Ploam: [0x%08X][0x%08X][0x%08X]\n", idleMsg[0],idleMsg[1],idleMsg[2]);
off += mvOsSPrintf(buf+off, "Const Serial Number Ploam: [0x%08X][0x%08X][0x%08X]\n", snMsg[0],snMsg[1],snMsg[2]);
off += mvOsSPrintf(buf+off, "Serial Number Mask Enable: %s\n", boolText[snMaskEnable]);
off += mvOsSPrintf(buf+off, "Serial Number Mask Match Mode: %s\n", mchText [snMaskMatchMode]);
off += mvOsSPrintf(buf+off, "Debug Mode: %s\n", boolText[onuGponPonMngDebugModeGet()]);
off += mvOsSPrintf(buf+off, "Overhead Manual Mode: %s\n", boolText[onuGponPonMngOverheadManualModeGet()]);
off += mvOsSPrintf(buf+off, "ponIdTypeAbit: %d\n", ponIdTypeAbit);
off += mvOsSPrintf(buf+off, "ponIdClassType: %s (%d)\n", onuGponDbPONIdClassTypeStrGet(), ponIdClassType);
off += mvOsSPrintf(buf+off, "ponIdTxOpticalLevel: 0x%02X\n", ponIdTxOpticalLevel);
off += mvOsSPrintf(buf+off, "ponIdBytes: [0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x]\n",
ponIdBytes[0], ponIdBytes[1], ponIdBytes[2], ponIdBytes[3],
ponIdBytes[4], ponIdBytes[5], ponIdBytes[6]);
return(off);
}
/*******************************************************************************
**
** onuGponUiAlarmShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu alarms
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiAlarmShow(char* buf)
{
MV_STATUS rcode;
MV_U32 alarms;
MV_U32 iAlarm;
MV_U8 *alarmText[] = {"LOS ","LOF ","LCDA","LCDG"," SF "," SD "," TF ",
"SUF ","MEM ","DACT","DIS ","MIS ","PEE ","RDI "};
MV_U8 *statusText[] = {"OFF","ON "};
MV_U32 status;
int off = 0;
rcode = onuGponApiAlarmsGet(&alarms);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get alarms status, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "------------------\n");
off += mvOsSPrintf(buf+off, "|ONU ALARMS: |\n");
off += mvOsSPrintf(buf+off, "------------------\n");
off += mvOsSPrintf(buf+off, "| ALARM | STATUS |\n");
off += mvOsSPrintf(buf+off, "------------------\n");
for (iAlarm = 0 ; iAlarm < ONU_GPON_MAX_ALARMS ; iAlarm++)
{
status = (alarms >> iAlarm) & 0x01;
off += mvOsSPrintf(buf+off, " %s | %s |\n", alarmText[iAlarm], statusText[status]);
}
off += mvOsSPrintf(buf+off, "------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiFifoShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function prints US PLOAM statistics
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiFifoShow(char* buf)
{
S_MacFifoCtrl* fifo;
int auditEn, auditAc, fifoSup;
int msgSend, allocFifo, freeFifo, ploamSend;
int off = 0;
mvOnuGponMacFifoGetInfo(&fifo, &fifoSup);
mvOnuGponMacFifoGetStat(&msgSend, &allocFifo, &freeFifo, &ploamSend);
mvOnuGponMacFifoAuditGetStat(&auditEn, &auditAc);
if (fifoSup)
{
off += mvOsSPrintf(buf+off, "===========================\n");
off += mvOsSPrintf(buf+off, "GPON SW FIFO\n");
off += mvOsSPrintf(buf+off, "===========================\n");
off += mvOsSPrintf(buf+off, "FIFO size %d\n", GPON_SW_FIFO_SIZE);
off += mvOsSPrintf(buf+off, "Write index %d\n", fifo->fifoWriteIndex);
off += mvOsSPrintf(buf+off, "Read index %d\n", fifo->fifoReadIndex);
off += mvOsSPrintf(buf+off, "Repeating cycle number %d\n", fifo->fifoReparoundNum);
off += mvOsSPrintf(buf+off, "===========================\n");
off += mvOsSPrintf(buf+off, "FIFO Audit Enter cnt. %d\n", auditEn);
off += mvOsSPrintf(buf+off, "FIFO Audit Action cnt. %d\n", auditAc);
}
off += mvOsSPrintf(buf+off, "===========================\n");
off += mvOsSPrintf(buf+off, "US msg. send cnt. %d\n", msgSend);
if (fifoSup)
{
off += mvOsSPrintf(buf+off, "Add to SW FIFO cnt. %d\n", allocFifo);
off += mvOsSPrintf(buf+off, "Free SW FIFO cnt. %d\n", freeFifo);
}
off += mvOsSPrintf(buf+off, "Add to HW FIFO cnt. %d\n", ploamSend);
off += mvOsSPrintf(buf+off, "===========================\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiFecStatus
** ____________________________________________________________________________
**
** DESCRIPTION: The function prints DS FEC Statsus
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiFecStatus(char* buf)
{
MV_U32 fecMode;
int off = 0;
onuGponApiFecStatusGet(&fecMode);
off += mvOsSPrintf(buf+off, "GPON FEC Status - %s\n", (fecMode == 0) ? ("Off") : ("On"));
return(off);
}
/*******************************************************************************
**
** onuGponUiInfoHelpShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print info help
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiInfoHelpShow(char* buf)
{
int off = 0;
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Display Commands: cat <file>\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " cat info - dump onu information\n");
off += mvOsSPrintf(buf+off, " cat alarm - dump onu alarms\n");
off += mvOsSPrintf(buf+off, " cat fecStatus - dump onu fec status\n");
off += mvOsSPrintf(buf+off, " cat swfifo - dump onu SW FIFO info\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
return(off);
}
/******************************************************************************/
/* ========================================================================== */
/* PM Commands */
/* ========================================================================== */
/******************************************************************************/
/*******************************************************************************
**
** onuGponUiCountersReadClearFlag
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu FEC counters
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: void
**
*******************************************************************************/
void onuGponUiCountersReadClearFlag(MV_BOOL clear)
{
infoGponCntReadClearInd = clear;
}
/*******************************************************************************
**
** onuGponBwMapCountersEnDisFlag
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu FEC counters
**
** PARAMETERS: MV_BOOL enable
**
** OUTPUTS: None
**
** RETURNS: MV_OK or error
**
*******************************************************************************/
MV_STATUS onuGponBwMapCountersEnDisFlag(MV_BOOL enable)
{
return (onuGponApiPmRxBwMapPmDumpSet(enable));
}
/*******************************************************************************
**
** onuGponUiFecCountersShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu FEC counters
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiFecCountersShow(char* buf)
{
MV_STATUS rcode;
S_GponIoctlFecPm counters;
int off = 0;
MV_U8 *counterText[] = {"FEC received Bytes ",
"FEC corrected Bytes ",
"FEC corrected Bits ",
"FEC received CodeWords ",
"FEC uncorrected CodeWords"};
rcode = onuGponApiPmFecPmGet(&counters,infoGponCntReadClearInd);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get counters value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "------------------\n");
off += mvOsSPrintf(buf+off, "| FEC COUNTERS: |\n");
off += mvOsSPrintf(buf+off, "--------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| COUNTER | VALUE |\n");
off += mvOsSPrintf(buf+off, "--------------------------------------------\n");
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[0],counters.receivedBytes);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[1],counters.correctedBytes);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[2],counters.correctedBits);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[3],counters.receivedCodeWords);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[4],counters.uncorrectedCodeWords);
off += mvOsSPrintf(buf+off, "--------------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiRxPloamCountersShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu Rx Ploam counters
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiRxPloamCountersShow(char* buf)
{
MV_STATUS rcode;
S_GponIoctlPloamRxPm counters;
S_GponIoctlPloamTxPm countDummy;
MV_U32 MsgId;
int off = 0;
MV_U8 *counterText[] = {"Idle Ploam Counter ",
"CRC Error Ploam Counter ",
"FIFO Overflaw Error Ploam Counter ",
"received Broadcast Ploam Counter ",
"Received Onu Id Ploam Counter "};
MV_U8 *msgIdCntText = {"Total PLOAM "};
MV_U8 *msgIdText[] = {"ERROR PLOAM ",
"OVERHEAD ",
"SN_MASK ",
"ASSIGN_ONU_ID ",
"RANGING_TIME ",
"DACT_ONU_ID ",
"DIS_SN ",
"CONFIG_VP_VC ",
"ENCRYPT_VPI_PORT_ID",
"REQ_PASSWORD ",
"ASSIGN_ALLOC_ID ",
"NO_MESSAGE ",
"POPUP ",
"REQ_KEY ",
"CONFIG_PORT_ID ",
"PHYSICAL_EQUIP_ERR ",
"CHANGE_POWER_LEVEL ",
"PST ",
"BER_INTERVAL ",
"KEY_SWITCH_TIME ",
"EXT_BURST_LEN "};
rcode = onuGponApiPmRxPloamPmGet(&counters, infoGponCntReadClearInd);
rcode |= onuGponApiAdvancedPloamsCounterGet(&countDummy, &counters, infoGponCntReadClearInd);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get counters value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "-------------------------\n");
off += mvOsSPrintf(buf+off, "|RX PLOAM COUNTERS: |\n");
off += mvOsSPrintf(buf+off, "------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| HW COUNTERS | VALUE |\n");
off += mvOsSPrintf(buf+off, "------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[0],counters.rxIdlePloam);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[1],counters.rxCrcErrorPloam);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[2],counters.rxFifoOverErrorPloam);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[3],counters.rxBroadcastPloam);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[4],counters.rxOnuIdPloam);
off += mvOsSPrintf(buf+off, "------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| SW COUNTERS | VALUE |\n");
off += mvOsSPrintf(buf+off, "--------------------------------------\n");
off += mvOsSPrintf(buf+off, " %s | %10u |\n", msgIdCntText, counters.rxMsgTotalPloam);
for (MsgId = 0; MsgId <= ONU_GPON_DS_MSG_LAST; MsgId++)
off += mvOsSPrintf(buf+off, " %s | %10u |\n", msgIdText[MsgId], counters.rxMsgIdPloam[MsgId]);
off += mvOsSPrintf(buf+off, "--------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiTxPloamCountersShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu Tx Ploam counters
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiTxPloamCountersShow(char* buf)
{
MV_STATUS rcode;
S_GponIoctlPloamRxPm countDummy;
S_GponIoctlPloamTxPm counters;
MV_U32 MsgId;
int off = 0;
MV_U8 *msgIdText[] = {"Total Ploams Recived",
"SN_ONU ",
"PASSWORD ",
"DYING_GASP ",
"NO_MESSAGE ",
"ENCRYPT_KEY ",
"PHYSICAL_EQUIP_ERR ",
"PST ",
"REI ",
"ACK "};
rcode = onuGponApiAdvancedPloamsCounterGet(&counters, &countDummy, infoGponCntReadClearInd);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get counters value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "-------------------------\n");
off += mvOsSPrintf(buf+off, "|TX PLOAM COUNTERS: |\n");
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
off += mvOsSPrintf(buf+off, "| COUNTER | VALUE |\n");
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
off += mvOsSPrintf(buf+off, " %s | %10d |\n", msgIdText[0], counters.txMsgTotalPloam);
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
off += mvOsSPrintf(buf+off, "| TX Error | VALUE |\n");
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
for (MsgId=1;MsgId <= ONU_GPON_US_MSG_LAST; MsgId++)
{
off += mvOsSPrintf(buf+off, " %s | %10d |\n", msgIdText[MsgId], counters.txErrMsgIdPloam[MsgId]);
}
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
off += mvOsSPrintf(buf+off, "| TX Correct | VALUE |\n");
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
for (MsgId=1;MsgId <= ONU_GPON_US_MSG_LAST; MsgId++)
{
off += mvOsSPrintf(buf+off, " %s | %10d |\n", msgIdText[MsgId], counters.txMsgIdPloam[MsgId]);
}
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiBwMapCountersShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu bw map counters
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiBwMapCountersShow(char* buf)
{
MV_STATUS rcode;
S_GponIoctlBwMapPm counters;
int off = 0;
MV_U8 *counterText[] = {"Alloc Crc Error ",
"Alloc Correctable Crc Error ",
"Alloc UnCorrectable Crc Error ",
"Alloc Correct ",
"Total Received Alloc Bytes "};
rcode = onuGponApiPmRxBwMapPmGet(&counters, infoGponCntReadClearInd);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get counters value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "----------------------\n");
off += mvOsSPrintf(buf+off, "| BWMAP COUNTERS: |\n");
off += mvOsSPrintf(buf+off, "------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| COUNTER | VALUE |\n");
off += mvOsSPrintf(buf+off, "------------------------------------------------\n");
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[0],counters.allocCrcErr);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[1],counters.allocCorrectableCrcErr);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[2],counters.allocUnCorrectableCrcErr);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[3],counters.allocCorrec);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[4],counters.totalReceivedAllocBytes);
off += mvOsSPrintf(buf+off, "------------------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiStandardCountersShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu standard counters
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiStandardCountersShow(char* buf)
{
MV_STATUS rcode;
S_RxStandardApiPm counters;
int off = 0;
MV_U8 *counterText[] = {"bip8 Error Counter ",
"plend Counter "};
rcode = onuGponApiPmRxStandardPmGet(&counters, infoGponCntReadClearInd);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get counters value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "-------------------------\n");
off += mvOsSPrintf(buf+off, "|STANDARD COUNTERS: |\n");
off += mvOsSPrintf(buf+off, "-----------------------------------------\n");
off += mvOsSPrintf(buf+off, "| COUNTER | VALUE |\n");
off += mvOsSPrintf(buf+off, "-----------------------------------------\n");
off += mvOsSPrintf(buf+off, " %s | %8u |\n", counterText[0],counters.bip8);
off += mvOsSPrintf(buf+off, " %s | %8u |\n",counterText[1],counters.plend);
off += mvOsSPrintf(buf+off, "-----------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiGemCountersShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu gem counters
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiGemCountersShow(char* buf)
{
MV_STATUS rcode;
S_GponIoctlGemRxPm counters;
int off = 0;
MV_U8 *counterText[] = {"Received Idle Gem Frames ",
"Received Valid Gem Frames ",
"Received Undefined Gem Frames ",
"Received Omci Frames ",
"Dropped Gem Frames ",
"Dropped Omci Frames ",
"Received Gem Frames With Uncorr Hec Error ",
"Received Gem Frames With One Fixed Hec Error ",
"Received Gem Frames With Two Fixed Hec Error ",
"Received Valid Gem Frames Total Byte Count ",
"Received Undefined Gem Frames Total Byte Count ",
"Gem Reassemble Memory Flush ",
"Gem Synch Lost ",
"Received Eth Frames With Correct FCS ",
"Received Eth Frames With FCS Error ",
"Received Omci Frames With Correct CRC ",
"Received Omci Frames With CRC Error "};
rcode = onuGponApiGemRxCounterGet(&counters, infoGponCntReadClearInd);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get counters value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "----------------------\n");
off += mvOsSPrintf(buf+off, "|GEM COUNTERS: |\n");
off += mvOsSPrintf(buf+off, "------------------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| COUNTER | VALUE |\n");
off += mvOsSPrintf(buf+off, "------------------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[0], counters.gemRxIdleGemFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[1], counters.gemRxValidGemFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[2], counters.gemRxUndefinedGemFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[3], counters.gemRxOmciFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[4], counters.gemRxDroppedGemFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[5], counters.gemRxDroppedOmciFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[6], counters.gemRxGemFramesWithUncorrHecErr);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[7], counters.gemRxGemFramesWithOneFixedHecErr);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[8], counters.gemRxGemFramesWithTwoFixedHecErr);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[9], counters.gemRxTotalByteCountOfReceivedValidGemFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[10],counters.gemRxTotalByteCountOfReceivedUndefinedGemFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[11],counters.gemRxGemReassembleMemoryFlush);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[12],counters.gemRxGemSynchLost);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[13],counters.gemRxEthFramesWithCorrFcs);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[14],counters.gemRxEthFramesWithFcsError);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[15],counters.gemRxOmciFramesWithCorrCrc);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[16],counters.gemRxOmciFramesWithCrcError);
off += mvOsSPrintf(buf+off, "------------------------------------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiTxCountersShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu tx counters
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiTxCountersShow(char* buf)
{
MV_STATUS rcode;
S_GponIoctlGemTxPm counters;
MV_BOOL exist;
MV_U32 tcont;
int off = 0;
MV_U8 *counterText[] = {"Transmitted Gem Pti Type-1 Frames ",
"Transmitted Gem Pti Type-0 Frames ",
"Transmitted Idle Gem Frames ",
"Transmitted Eth Frames Via Tcont ",
"Transmitted Eth Bytes Via Tcont ",
"Transmitted Gem Frames Via Tcont ",
"Transmitted Idle Gem Frames Via Tcont "};
rcode = onuGponApiGemTxCounterGet(&counters, infoGponCntReadClearInd);
if (rcode != MV_OK) {
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get counters value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "----------------------\n");
off += mvOsSPrintf(buf+off, "|TX COUNTERS: |\n");
off += mvOsSPrintf(buf+off, "------------------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| COUNTER | VALUE |\n");
off += mvOsSPrintf(buf+off, "------------------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[0],counters.gemTxGemPtiTypeOneFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[1],counters.gemTxGemPtiTypeZeroFrames);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[2],counters.gemTxIdleGemFrames);
for (tcont = 0; tcont < ONU_GPON_MAX_NUM_OF_T_CONTS; tcont++) {
rcode = onuGponDbBwTcontExist(tcont, &exist);
if ((rcode == MV_OK) && (exist != MV_FALSE)) {
off += mvOsSPrintf(buf+off, "T-Cont [%d] Counters |\n", tcont);
off += mvOsSPrintf(buf+off, "------------------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[3],counters.gemTxEthFramesViaTconti[tcont]);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[4],counters.gemTxEthBytesViaTconti[tcont]);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[5],counters.gemTxGemFramesViaTconti[tcont]);
off += mvOsSPrintf(buf+off, " %s | %10u |\n", counterText[6],counters.gemTxIdleGemFramesViaTconti[tcont]);
}
}
off += mvOsSPrintf(buf+off, "------------------------------------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiRawCounters
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu counters
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiRaw_1Counters(char* buf)
{
MV_U32 suspected;
MV_U32 decided;
S_RxPloamPm inRxPloamCounters;
S_RxBwMapPm inRxBwMapCounters;
S_RxBip8Pm inBip8Counter;
S_RxPlendPm inPlendCounter;
S_RxFecPm inRxFecCounters;
S_GemPm gemCounters;
int off = 0;
decided = onuGponPonMngrFifoErrCountersGet(&suspected);
onuGponPmFecPmGet(&inRxFecCounters);
onuGponPmRxBwMapPmGet(&inRxBwMapCounters);
onuGponPmRxBip8PmGet(&inBip8Counter);
onuGponPmRxPlendPmGet(&inPlendCounter);
onuGponPmRxPloamPmGet(&inRxPloamCounters);
onuGponPmGemPmGet(&gemCounters);
off += mvOsSPrintf(buf+off, "ONT GPON Counters\n");
off += mvOsSPrintf(buf+off, "----------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "PLOAM FIFO SYNC ERROR SUSPECTED: %u\n", suspected);
off += mvOsSPrintf(buf+off, "PLOAM FIFO SYNC ERROR DECIDED: %u\n", decided);
off += mvOsSPrintf(buf+off, "This ONU ID PLOAMs: %u\n", inRxPloamCounters.receivedOnuIdPloamCounter);
off += mvOsSPrintf(buf+off, "Broadcast PLOAMs: %u\n", inRxPloamCounters.receivedBroadcastPloamCounter);
off += mvOsSPrintf(buf+off, "Idles PLOAMs: %u\n", inRxPloamCounters.idlePloamCounter);
off += mvOsSPrintf(buf+off, "CRC Error PLOAMs: %u\n", inRxPloamCounters.crcErrorPloamCounter);
off += mvOsSPrintf(buf+off, "FIFO Full Dropped PLOAMs: %u\n", inRxPloamCounters.fifoOverErrorPloamCounter);
off += mvOsSPrintf(buf+off, "BW Error Free Allocs: %u\n", inRxBwMapCounters.allocCorrec);
off += mvOsSPrintf(buf+off, "BW Uncorrectable Allocs: %u\n", inRxBwMapCounters.allocUnCorrectableCrcErr);
off += mvOsSPrintf(buf+off, "BW Bad CRC Allocs: %u\n", inRxBwMapCounters.allocCrcErr);
off += mvOsSPrintf(buf+off, "BW Error Free and Correctable Allocs: %u\n", inRxBwMapCounters.allocCorrectableCrcErr);
off += mvOsSPrintf(buf+off, "BW Total Allocation: %u\n", inRxBwMapCounters.totalReceivedAllocBytes);
off += mvOsSPrintf(buf+off, "Bip8: %u\n", inBip8Counter.bip8);
off += mvOsSPrintf(buf+off, "Plend: %u\n", inPlendCounter.plend);
off += mvOsSPrintf(buf+off, "FEC correctedBits: %u\n", inRxFecCounters.correctedBits);
off += mvOsSPrintf(buf+off, "FEC correctedBytes: %u\n", inRxFecCounters.correctedBytes);
off += mvOsSPrintf(buf+off, "FEC receivedBytes: %u\n", inRxFecCounters.receivedBytes);
off += mvOsSPrintf(buf+off, "FEC receivedCodeWords: %u\n", inRxFecCounters.receivedCodeWords);
off += mvOsSPrintf(buf+off, "FEC uncorrectedCodeWords: %u\n", inRxFecCounters.uncorrectedCodeWords);
off += mvOsSPrintf(buf+off, "GEM Received Idle Gem Frames %u\n", gemCounters.receivedIdleGemFrames);
off += mvOsSPrintf(buf+off, "GEM Received Valid Gem Frames %u\n", gemCounters.receivedValidGemFrames);
off += mvOsSPrintf(buf+off, "GEM Received Undefined Gem Frames %u\n", gemCounters.receivedUndefinedGemFrames);
off += mvOsSPrintf(buf+off, "GEM Received Omci Frames %u\n", gemCounters.receivedOmciFrames);
off += mvOsSPrintf(buf+off, "GEM Dropped Gem Frames %u\n", gemCounters.droppedGemFrames);
off += mvOsSPrintf(buf+off, "GEM Dropped Omci Frames %u\n", gemCounters.droppedOmciFrames);
off += mvOsSPrintf(buf+off, "GEM Received Gem Frames With Uncorr Hec Error %u\n", gemCounters.receivedGemFramesWithUncorrHecErr);
off += mvOsSPrintf(buf+off, "GEM Received Gem Frames With One Fixed Hec Error %u\n", gemCounters.receivedGemFramesWithOneFixedHecErr);
off += mvOsSPrintf(buf+off, "GEM Received Gem Frames With Two Fixed Hec Error %u\n", gemCounters.receivedGemFramesWithTwoFixedHecErr);
off += mvOsSPrintf(buf+off, "GEM Received Valid Gem Frames Total Byte Count %u\n", gemCounters.totalByteCountOfReceivedValidGemFrames);
off += mvOsSPrintf(buf+off, "GEM Received Undefined Gem Frames Total Byte Count %u\n", gemCounters.totalByteCountOfReceivedUndefinedGemFrames);
off += mvOsSPrintf(buf+off, "GEM Gem Reassemble Memory Flush %u\n", gemCounters.gemReassembleMemoryFlush);
off += mvOsSPrintf(buf+off, "GEM Gem Synch Lost %u\n", gemCounters.gemSynchLost);
off += mvOsSPrintf(buf+off, "GEM Received Eth Frames With Correct FCS %u\n", gemCounters.receivedEthFramesWithCorrFcs);
off += mvOsSPrintf(buf+off, "GEM Received Eth Frames With FCS Error %u\n", gemCounters.receivedEthFramesWithFcsError);
off += mvOsSPrintf(buf+off, "GEM Received Omci Frames With Correct CRC %u\n", gemCounters.receivedOmciFramesWithCorrCrc);
off += mvOsSPrintf(buf+off, "GEM Received Omci Frames With CRC Error %u\n", gemCounters.receivedOmciFramesWithCrcError);
return(off);
}
int onuGponUiRaw_2Counters(char* buf)
{
S_GponTxPm txCounters;
MV_U32 tcont;
int off = 0;
onuGponPmTxPmGet(&txCounters);
off += mvOsSPrintf(buf+off, "ONT GPON Raw Counters\n");
off += mvOsSPrintf(buf+off, "----------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "Transmitted Gem Pti Type-1 Frames %u\n", txCounters.transmittedGemPtiTypeOneFrames);
off += mvOsSPrintf(buf+off, "Transmitted Gem Pti Type-0 Frames %u\n", txCounters.transmittedGemPtiTypeZeroFrames);
off += mvOsSPrintf(buf+off, "Transmitted Idle Gem Frames %u\n", txCounters.transmittedIdleGemFrames);
off += mvOsSPrintf(buf+off, "Transmitted Tx Enable Count %u\n", txCounters.transmittedTxEnableCount);
for (tcont = 0; tcont < ONU_GPON_MAX_NUM_OF_T_CONTS; tcont++)
{
off += mvOsSPrintf(buf+off, "T-Cont [%d] Counters \n", tcont);
off += mvOsSPrintf(buf+off, "----------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "Transmitted Eth Frames Via Tcont %u\n", txCounters.transmittedEthFramesViaTconti[tcont]);
off += mvOsSPrintf(buf+off, "Transmitted Eth Bytes Via Tcont %u\n", txCounters.transmittedEthBytesViaTconti[tcont]);
off += mvOsSPrintf(buf+off, "Transmitted Gem Frames Via Tcont %u\n", txCounters.transmittedGemFramesViaTconti[tcont]);
off += mvOsSPrintf(buf+off, "Transmitted Idle Gem Frames Via Tcont %u\n", txCounters.transmittedIdleGemFramesViaTconti[tcont]);
}
return(off);
}
/*******************************************************************************
**
** onuGponUiPmHelpShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print pm help
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiPmHelpShow(char* buf)
{
int off = 0;
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Configuration Commands[DEC]\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " echo [state] > cntRdClrFlState - onu counters flag, Read[0], Read Clear[1]\n");
off += mvOsSPrintf(buf+off, " echo [state] > bwMapCntByState - dump bw map counters before changing ONU state\n");
off += mvOsSPrintf(buf+off, " Disable[0], Enable[1] \n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Display Commands: cat <file>\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " cat rxPloamCnt - dump Rx PLOAM counters\n");
off += mvOsSPrintf(buf+off, " cat txPloamCnt - dump Tx PLOAM counters\n");
off += mvOsSPrintf(buf+off, " cat bwMapCnt - dump bw map counters\n");
off += mvOsSPrintf(buf+off, " cat stdCnt - dump standard counters\n");
off += mvOsSPrintf(buf+off, " cat fecCnt - dump fec counters\n");
off += mvOsSPrintf(buf+off, " cat gemCnt - dump gem counters\n");
off += mvOsSPrintf(buf+off, " cat txCnt - dump Tx counters\n");
off += mvOsSPrintf(buf+off, " cat rawCnt_1 - dump raw counters\n");
off += mvOsSPrintf(buf+off, " cat rawCnt_2 - dump raw counters\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
return(off);
}
/******************************************************************************/
/* ========================================================================== */
/* Data Commands */
/* ========================================================================== */
/******************************************************************************/
/*******************************************************************************
**
** onuGponUiTcontConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu tcont <--> alloc
**
** PARAMETERS: MV_U32 alloc
** MV_U32 tcont
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiTcontConfig(MV_U32 alloc, MV_U32 tcont)
{
MV_STATUS rcode;
rcode = onuGponApiTcontConfig(alloc, tcont);
if (rcode != MV_OK)
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"ONU Allocation Id(%d) to T-CONT(%d) Config - FAIL\n", alloc, tcont);
}
/*******************************************************************************
**
** onuGponUiClearTcontConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function clear onu tcont
**
** PARAMETERS: MV_U32 tcont
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiClearTcontConfig(MV_U32 tcont)
{
MV_STATUS rcode;
rcode = onuGponApiTcontClear(tcont);
if (rcode != MV_OK)
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"ONU T-CONT(%d) Clear - FAIL\n", tcont);
}
/*******************************************************************************
**
** onuGponUiResetTcontsConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function reset onu bw map table
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiResetTcontsConfig(void)
{
onuGponApiTcontsReset();
}
/*******************************************************************************
**
** onuGponUiDebugTcont
** ____________________________________________________________________________
**
** DESCRIPTION: The function handle onu tcont
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiDebugTcont(char* buf)
{
MV_U32 allocId;
MV_U32 idleAllocId;
MV_U32 validCount = 0;
MV_BOOL valid;
MV_BOOL exist;
MV_U32 i;
MV_U8 *boolText[2] = {"NO ","YES"};
MV_U32 fAllocId;
MV_BOOL fEna;
MV_U32 fTcont;
MV_U32 knowTcont;
MV_U8 *knowTcontText[] = {"T-CONT 0 ","T-CONT 1 ","T-CONT 2 ",
"T-CONT 3 ","T-CONT 4 ","T-CONT 5 ",
"T-CONT 6 ","T-CONT 7 ","T-CONT 8 ",
"T-Def ","T-Idle "};
int off = 0;
MV_STATUS status;
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
off += mvOsSPrintf(buf+off, "| Alloc Id Table |\n");
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
off += mvOsSPrintf(buf+off, "| Assigned || Idle |\n");
off += mvOsSPrintf(buf+off, "|-----------------------------------|\n");
off += mvOsSPrintf(buf+off, "| ALLOC-ID | Valid || |\n");
off += mvOsSPrintf(buf+off, "|-----------------------------------|\n");
for (i = 0 ; i < ONU_GPON_MAX_NUM_OF_T_CONTS; i++) {
onuGponDbBwAllocGet(i, &allocId, &valid);
onuGponDbBwIdleAllocGet(i, &idleAllocId);
if (idleAllocId != PON_ONU_ALLOC_NOT_EXIST) {
off += mvOsSPrintf(buf+off, "| %04d | %3s || %04d |\n",
allocId, boolText[valid], idleAllocId);
} else {
off += mvOsSPrintf(buf+off, "| %04d | %3s || ==== |\n",
allocId, boolText[valid]);
}
}
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
off += mvOsSPrintf(buf+off, "| Alloc Id to T-CONT Connect Table |\n");
off += mvOsSPrintf(buf+off, "|-----------------------------------|\n");
off += mvOsSPrintf(buf+off, "| T-CONT | Exist | ALLOC-ID | Valid |\n");
off += mvOsSPrintf(buf+off, "|-----------------------------------|\n");
for (i = 0 ; i < ONU_GPON_MAX_NUM_OF_T_CONTS; i++) {
onuGponDbBwTcontGet(i, &exist, &allocId, &valid);
off += mvOsSPrintf(buf+off, "| %02d | %s | %04d | %s |\n", i, boolText[exist], allocId, boolText[valid]);
if (valid != MV_FALSE) validCount++;
}
off += mvOsSPrintf(buf+off, "-------------------------------------\n");
off += mvOsSPrintf(buf+off, "----------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| BW MAC - SoC Table | |\n");
off += mvOsSPrintf(buf+off, "|-----------------------------------| |\n");
off += mvOsSPrintf(buf+off, "| Index | ALLOC-ID | T-CONT | Valid | KNOWN T-CONT |\n");
off += mvOsSPrintf(buf+off, "|--------------------------------------------------|\n");
for (i = 0 ; i < ONU_GPON_MAX_NUM_OF_T_CONTS ; i++) {
status = mvOnuGponMacRxBwMapGet(i, &fAllocId, &fEna, &fTcont);
if (status != MV_OK)
off += mvOsSPrintf(buf+off, "Error calling mvOnuGponMacRxBwMapGet, Tcont(%d)\n", i);
if (fTcont == PON_ONU_DEFAULT_ALLOC_TCONT)
knowTcont = 9;
else {
if ((fTcont == onuGponIdleAllocIdTcontGet()) && (validCount < 8))
knowTcont = 10;
else
knowTcont = fTcont;
}
off += mvOsSPrintf(buf+off, "| %02d | %04d | %02d | %s | %s |\n",
i,fAllocId, fTcont, boolText[fEna],knowTcontText[knowTcont]);
}
off += mvOsSPrintf(buf+off, "----------------------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiDebugGemPortidValidSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function enable gem port Id valid configuration
**
** PARAMETERS: MV_U32 portId
** MV_U32 enable
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugGemPortidValidSet(MV_U32 portId, MV_U32 enable)
{
if (enable != 0) onuGponApiGemPortIdConfig(portId);
else onuGponApiGemPortIdClear(portId);
}
/*******************************************************************************
**
** onuGponUiDebugGemPortidValidSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function enable gem port Id valid configuration
**
** PARAMETERS: MV_U32 enable
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugAllGemPortidValidSet(MV_U32 enable)
{
MV_U32 portId;
if (enable != 0) {
for (portId = 0; portId < 4096; portId++)
onuGponApiGemPortIdConfig(portId);
} else {
for (portId = 0; portId < 4096; portId++)
onuGponApiGemPortIdClear(portId);
}
}
/*******************************************************************************
**
** onuGponUiDebugGemPmSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function start or stop Gem PM.
**
** PARAMETERS: MV_U32 portId
** MV_U32 enable
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugGemPmSet(MV_U32 portId, MV_U32 enable)
{
S_GponIoctlGemPortPmConfig gemPm;
gemPm.gem_port = portId;
if(enable !=0)
gemPm.command = GEMPORTPMCMD_START;
else
gemPm.command = GEMPORTPMCMD_STOP;
onuGponApiGemPortPmConfig(&gemPm);
}
/*******************************************************************************
**
** onuGponUiDebugGemPmReset
** ____________________________________________________________________________
**
** DESCRIPTION: The function resets GEM PM MIB counters
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugGemPmReset(void)
{
onuGponApiGemPortPmReset();
}
/*******************************************************************************
**
** onuGponUiDebugGemPmListShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function prints Gem PM ports enabled to collect MIB counters
**
** PARAMETERS: MV_U32 portId
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
int onuGponUiDebugGemPmListShow(char* buf)
{
S_apiGemPortPmConfig gemPortCfg;
int off = 0;
MV_U16 dbIdx;
MV_STATUS rc;
off += mvOsSPrintf(buf+off, "GEM port ids list\n");
off += mvOsSPrintf(buf+off, "=================\n");
off += mvOsSPrintf(buf+off, " Counter GEM \n");
off += mvOsSPrintf(buf+off, " set port \n");
off += mvOsSPrintf(buf+off, "=================\n");
for (dbIdx = 0; dbIdx < MAX_SUPPORTED_GEMPORTS_FOR_PM; dbIdx++)
{
rc = onuGponPmGemPortPmConfigGet(dbIdx, &gemPortCfg);
if (rc == MV_OK)
{
off += mvOsSPrintf(buf+off, " %d %d\n", dbIdx, gemPortCfg.gem_port);
}
}
off += mvOsSPrintf(buf+off, "=================\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiDebugGemPmGet
** ____________________________________________________________________________
**
** DESCRIPTION: The function prints Gem PM counters
**
** PARAMETERS: MV_U32 portId
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugGemPmGet(MV_U32 portId)
{
S_GponIoctlGemPortMibCounters mibCounters;
MV_STATUS rcode;
MV_U8 *counterText[] = {"Received Eth broadcast Frames ",
"Received Eth multicast Frames ",
"Received Eth good Frames ",
"Received Eth good Frames length 65-127 "};
memset(&mibCounters, 0, sizeof(S_GponIoctlGemPortMibCounters));
mibCounters.gem_port = portId;
rcode = onuGponApiGemPortPmGet(&mibCounters);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get mibCounters value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
mvOsPrintf("\n");
mvOsPrintf("------------------------------------------------------------------\n");
mvOsPrintf("|MIB COUNTERS for GEM port: %d\n", portId);
mvOsPrintf("------------------------------------------------------------------\n");
mvOsPrintf("|COUNTER | VALUE |\n");
mvOsPrintf("------------------------------------------------------------------\n");
mvOsPrintf(" %s | %10u |\n", counterText[0], mibCounters.broadcast_frames_received);
mvOsPrintf(" %s | %10u |\n", counterText[1], mibCounters.multicast_frames_received);
mvOsPrintf(" %s | %10u |\n", counterText[2], mibCounters.good_frames_received);
mvOsPrintf(" %s | %10u |\n", counterText[3], mibCounters.frames_65_to_127_octets);
mvOsPrintf("------------------------------------------------------------------\n");
}
/*******************************************************************************
**
** onuGponUiDebugGemPortid
** ____________________________________________________________________________
**
** DESCRIPTION: The function return gem port Id valid configuration
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiDebugGemPortid(char* buf, int range)
{
MV_BOOL enable;
MV_U32 portId;
MV_U32 startRange;
MV_U32 endRange;
int off = 0;
off += mvOsSPrintf(buf+off, "GEM port ids list\n");
off += mvOsSPrintf(buf+off, "=================\n");
switch (range)
{
case 1: startRange = 1000; endRange = 1999; break;
case 2: startRange = 2000; endRange = 2999; break;
case 3: startRange = 3000; endRange = 4096; break;
default: startRange = 0; endRange = 999; break;
}
for (portId = startRange ; portId < endRange ; portId++)
{
enable = mvOnuGponMacPortIdValidGet(portId);
if (enable == MV_TRUE) off += mvOsSPrintf(buf+off, "[%04d]", portId);
if ((portId / 14) == 0) off += mvOsSPrintf(buf+off, "\n");
}
off += mvOsSPrintf(buf+off, "\n");
return(off);
}
#ifdef MV_GPON_STATIC_GEM_PORT
/*******************************************************************************
**
** onuGponUiDebugDummyGemPortFlagSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function set dummy gem port flag
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugDummyGemPortFlagSet(MV_U32 flag)
{
onuGponApiGemPortIdStaticConfigFlag(flag);
}
/*******************************************************************************
**
** onuGponUiDebugDummyGemPortReset
** ____________________________________________________________________________
**
** DESCRIPTION: The function reset dummy gem port table
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: OK or ERROR
**
*******************************************************************************/
void onuGponUiDebugDummyGemPortReset(void)
{
onuGponApiGemPortIdStaticConfigReset();
}
#endif /* MV_GPON_STATIC_GEM_PORT */
/*******************************************************************************
**
** onuGponUiDataHelpShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print data help
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiDataHelpShow(char* buf)
{
int off = 0;
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Configuration Commands[DEC]\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " echo [AllocId] [T-Cont] > cfgTcont - config alloc to tcont\n");
off += mvOsSPrintf(buf+off, " echo [T-Cont] > clrTcont - clear alloc Ids from T-Cont\n");
off += mvOsSPrintf(buf+off, " echo [0] > rstTcont - clear T-Cont configuration\n");
off += mvOsSPrintf(buf+off, " echo [GemPort] [Valid] > cfgGem - config gem port valid state, Disable[0], Enable[1]\n");
off += mvOsSPrintf(buf+off, " echo [Valid] > cfgAllGem - config all gem ports valid state, Disable[0], Enable[1]\n");
off += mvOsSPrintf(buf+off, " echo [gemport] [state] > cfgMibPm - Config onu gem port for MIB PM: start count[1], stop count[0]\n");
off += mvOsSPrintf(buf+off, " echo [dummy] > resetMibPm - Reset MIB PM\n");
off += mvOsSPrintf(buf+off, " echo [gemport] > getMibPm - Get MIB PM for a Gem port\n");
#ifdef MV_GPON_STATIC_GEM_PORT
off += mvOsSPrintf(buf+off, " echo [state] > dummyGemState - static gem port flag, Disable[0], Enable[1]\n");
off += mvOsSPrintf(buf+off, " echo [0] > dummyGemRst - clear static gem port table\n");
#endif /* MV_GPON_STATIC_GEM_PORT */
off += mvOsSPrintf(buf+off, " echo [PortId] [State] > cfgAesPort - config gem port encryption state\n");
off += mvOsSPrintf(buf+off, " echo [State] > cfgAllAes - config all gem ports encryption state\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Display Commands: cat <file>\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " cat showTcont - dump T-Cont configuration\n");
off += mvOsSPrintf(buf+off, " cat showMibGemPorts - dump a list of gem ports enabled for MIB PM\n");
off += mvOsSPrintf(buf+off, " cat showGem0xxx showGem1xxx showGem2xxx showGem3xxx - dump valid gem port list\n");
off += mvOsSPrintf(buf+off, " cat showAes0xxx showAes1xxx showAes2xxx showAes3xxx - dump encrypted gem port list\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
return(off);
}
/******************************************************************************/
/* ========================================================================== */
/* Introp Commands */
/* ========================================================================== */
/******************************************************************************/
/*******************************************************************************
**
** onuGponUiOverrideShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu override parameters info
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiOverrideShow(char* buf)
{
MV_U8 *parametersText[] = {"ExtendedBurst",
"Delimiter ",
"OnuId ",
"OmccPortId ",
"EqualizationDelay"};
MV_U8 *enableText[] = {"disabled","enabled"};
MV_U32 tempValue1;
MV_U32 tempValue2;
MV_U32 status;
int off = 0;
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "--------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| ONU OVERRIDE: |\n");
off += mvOsSPrintf(buf+off, "--------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| PARAMETER | VALUE | STATUS |\n");
off += mvOsSPrintf(buf+off, "--------------------------------------------\n");
tempValue1 = onuGponDbExtendedBurstOperOverrideValueGet();
tempValue2 = onuGponDbExtendedBurstSyncOverrideValueGet();
status = (MV_U32)onuGponDbExtendedBurstOverrideGet();
off += mvOsSPrintf(buf+off, "| %s SYNC | %8u | %s |\n", parametersText[0], tempValue1, enableText[status]);
off += mvOsSPrintf(buf+off, "| %s OPER | %8u | %s |\n", parametersText[0], tempValue2, enableText[status]);
tempValue1 = onuGponDbDelimiterOverrideValueGet();
status = (MV_U32)onuGponDbDelimiterOverrideGet();
off += mvOsSPrintf(buf+off, "| %s | %8u | %s |\n", parametersText[1], tempValue1, enableText[status]);
tempValue1 = onuGponDbOnuIdOverrideValueGet();
status = (MV_U32)onuGponDbOnuIdOverrideGet();
off += mvOsSPrintf(buf+off, "| %s | %8u | %s |\n", parametersText[2], tempValue1, enableText[status]);
tempValue1 = onuGponDbOmccPortOverrideValueGet();
status = (MV_U32)onuGponDbOmccPortOverrideGet();
off += mvOsSPrintf(buf+off, "| %s | %8u | %s |\n", parametersText[3], tempValue1, enableText[status]);
tempValue1 = onuGponDbEqualizationDelayOverrideValueGet();
status = (MV_U32)onuGponDbEqualizationDelayOverrideGet();
off += mvOsSPrintf(buf+off, "| %s | %8u | %s |\n", parametersText[4], tempValue1, enableText[status]);
off += mvOsSPrintf(buf+off, "--------------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiDelimiterConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu delimiter
**
** PARAMETERS: MV_U32 enable
** MV_U32 DelValue
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDelimiterConfig(MV_U32 enable, MV_U32 DelValue)
{
onuGponApiDelimiterSet((MV_BOOL)enable, DelValue);
}
/*******************************************************************************
**
** onuGponUiOnuIdConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu Id
**
** PARAMETERS: MV_U32 onuId
** MV_U32 enable
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiOnuIdConfig(MV_U32 onuId, MV_U32 enable)
{
onuGponApiOnuIdSet((MV_BOOL)enable, onuId);
}
/*******************************************************************************
**
** onuGponUiPortIdConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu omcc port Id
**
** PARAMETERS: MV_U32 portId
** MV_U32 enable
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiPortIdConfig(MV_U32 portId, MV_U32 enable)
{
onuGponApiOmccPortIdSet((MV_BOOL)enable, portId);
}
/*******************************************************************************
**
** onuGponUiEquDelaySetConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu equalization delay
**
** PARAMETERS: MV_U32 equDelayVal
** MV_U32 enable
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiEquDelaySetConfig(MV_U32 equDelayVal, MV_U32 enable)
{
onuGponApiEqualizationDelaySet((MV_BOOL)enable, equDelayVal);
}
/*******************************************************************************
**
** onuGponUiEquDelayChangeConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function change onu equalization delay
**
** PARAMETERS: MV_U32 direction
** MV_U32 size
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiEquDelayChangeConfig(MV_U32 direction, MV_U32 size)
{
onuGponApiEqualizationDelayChange(direction, size);
}
/*******************************************************************************
**
** onuGponUiExtendedBurstConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu extended burst
**
** PARAMETERS: MV_U32 enable
** MV_U32 rangeValue
** MV_U32 operValue
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiExtendedBurstConfig(MV_U32 enable, MV_U32 rangeValue, MV_U32 operValue)
{
onuGponApiExtendedBurstSet ((MV_BOOL)enable, rangeValue, operValue);
}
/*******************************************************************************
**
** onuGponUiExtendedBurstDelayConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure delay for the received onu extended burst
**
** PARAMETERS: MV_U32 enable
** MV_U32 rangeValue
** MV_U32 operValue
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiExtendedBurstDelayConfig(MV_U32 enable, MV_U32 rangeValue, MV_U32 operValue)
{
onuGponApiExtendedBurstDelaySet ((MV_BOOL)enable, rangeValue, operValue);
}
/*******************************************************************************
**
** onuGponUiDebugOverheadMode
** ____________________________________________________________________________
**
** DESCRIPTION: The function handle onu overhead mode
**
** PARAMETERS: MV_U32 overMode
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugOverheadMode(MV_U32 overMode)
{
MV_BOOL mode = (overMode == 0)? MV_FALSE : MV_TRUE;
onuGponPonMngOverheadManualModeSet(mode);
}
/*******************************************************************************
**
** onuGponUiDebugOverheadGuard
** ____________________________________________________________________________
**
** DESCRIPTION: The function handle onu overhead guard bits
**
** PARAMETERS: MV_U32 guard
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugOverheadGuard(MV_U32 guard)
{
onuGponDbGuardBitsSet(guard);
}
/*******************************************************************************
**
** onuGponUiDebugOverheadPreamble
** ____________________________________________________________________________
**
** DESCRIPTION: The function handle onu overhead preamble
**
** PARAMETERS: MV_U32 pream3RangeCnt
** MV_U32 pream3OperCnt
** MV_U32 pream3PattCnt
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugOverheadPreamble(MV_U32 pream3RangeCnt,
MV_U32 pream3OperCnt,
MV_U32 pream3PattCnt)
{
MV_U32 onuState;
onuGponDbPreambleSet(ONU_GPON_PREM_TYPE_03, pream3PattCnt, 0);
onuGponDbExtPreambleSyncSet(pream3RangeCnt);
onuGponDbExtPreambleOperSet(pream3OperCnt);
onuState = onuGponDbOnuStateGet();
if (onuState == ONU_GPON_05_OPERATION) mvOnuGponMacPreambleType3Set(pream3PattCnt,pream3OperCnt);
else mvOnuGponMacPreambleType3Set(pream3PattCnt,pream3RangeCnt);
}
/*******************************************************************************
**
** onuGponUiIntropHelpShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print introp help
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiIntropHelpShow(char* buf)
{
int off = 0;
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Configuration Commands[DEC]\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " echo [OnuId] [Enable] > onuIdCfg - override configured OnuId\n");
off += mvOsSPrintf(buf+off, " echo [PortId] [Enable] > portIdCfg - override configured omcc portId\n");
off += mvOsSPrintf(buf+off, " echo [EquDelay] [Enable] > eqdCfg - override configured Equ Delay\n");
off += mvOsSPrintf(buf+off, " echo [Direction] [Size] > eqdChange - change Equ Delay\n");
off += mvOsSPrintf(buf+off, " echo [Enable] [RangeValue] [OperValue] > extBurstCfg - override configured external burst\n");
off += mvOsSPrintf(buf+off, " echo [Enable] [RangeValue] [OperValue] > extBurstDelayCfg - add configured delay to received external burst\n");
off += mvOsSPrintf(buf+off, " echo [Enable] [Value] > delimiterCfg - override configured delimiter\n");
off += mvOsSPrintf(buf+off, " echo [RangeValue] [OperValue] [Pattern] > preambleCfg - override configured preamble type3\n");
off += mvOsSPrintf(buf+off, " echo [Guard Bits] > guardCfg - configure guard bits\n");
off += mvOsSPrintf(buf+off, " echo [Mode] > manModeCfg - configure override parameters mode\n");
off += mvOsSPrintf(buf+off, " echo [Mode] > adminCfg - configure onu Tx mode:(0)Enable, (1)Disable\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Display Commands: cat <file>\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " cat manMode - override parameters mode\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
return(off);
}
/******************************************************************************/
/* ========================================================================== */
/* Protocol Commands */
/* ========================================================================== */
/******************************************************************************/
/*******************************************************************************
**
** onuGponUiDebugBurstConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu tx burst
**
** PARAMETERS: MV_U32 start
** MV_U32 stop
** MV_U32 order
** MV_U32 polarity
** MV_U32 mask
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugBurstConfig(MV_U32 start,
MV_U32 stop,
MV_U32 order,
MV_U32 polarity,
MV_U32 mask)
{
S_apiBurstConfig burstConfig;
burstConfig.start = start;
burstConfig.stop = stop;
burstConfig.order = order;
burstConfig.polarity = polarity;
burstConfig.mask = mask;
onuGponApiBurstConfigSet(&burstConfig);
}
/*******************************************************************************
**
** onuGponUiDebugBurstInfo
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu tx burst info
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiDebugBurstInfo(char* buf)
{
S_apiBurstConfig burstConfig;
int off = 0;
onuGponApiBurstConfigGet(&burstConfig);
off += mvOsSPrintf(buf+off, "----------------------------------------------\n");
off += mvOsSPrintf(buf+off, "| Burst Parameters |\n");
off += mvOsSPrintf(buf+off, "|--------------------------------------------|\n");
off += mvOsSPrintf(buf+off, "| Start | Stop | Order |Polarity| Mask |\n");
off += mvOsSPrintf(buf+off, "|--------------------------------------------|\n");
off += mvOsSPrintf(buf+off, "| %02d | %02d | %02d | %02d | %02d |\n",
burstConfig.start, burstConfig.stop, burstConfig.order,
burstConfig.polarity, burstConfig.mask);
off += mvOsSPrintf(buf+off, "|--------------------------------------------|\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiInfoBerDebug
** ____________________________________________________________________________
**
** DESCRIPTION: The function get Global OLT BER Information
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiInfoBerDebug(char* buf)
{
S_BerCoefficient coeff;
MV_U32 seconds;
MV_U32 ber;
MV_U32 intervalBer;
MV_U32 bip,lastBip;
MV_U32 sdThreshold;
MV_U32 sfThreshold;
MV_U32 sdDetectValue;
MV_U32 sdCancelValue;
MV_U32 sfDetectValue;
MV_U32 sfCancelValue;
int off = 0;
coeff = onuGponBerCoefficientGet();
seconds = onuGponBerIntervalSecondsGet();
sdThreshold = onuGponDbSdThresholdGet();
sfThreshold = onuGponDbSfThresholdGet();
sdDetectValue = onuGponBerPower(10 ,(11 - sdThreshold));
sdCancelValue = onuGponBerPower(10 ,(11 - sdThreshold - 1));
sfDetectValue = onuGponBerPower(10 ,(11 - sfThreshold));
sfCancelValue = onuGponBerPower(10 ,(11 - sfThreshold - 1));
ber = onuGponBerBerValueGet();
intervalBer = onuGponBerIntervalBerValueGet();
bip = onuGponBerBip8CounterGet();
lastBip = onuGponBerLastIntervalBip8CounterGet();
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "----------------------------------------\n");
off += mvOsSPrintf(buf+off, "| BER Information |\n");
off += mvOsSPrintf(buf+off, "|--------------------------------------|\n");
off += mvOsSPrintf(buf+off, "|Interval of %2d Seconds |\n", seconds);
off += mvOsSPrintf(buf+off, "|Coefficient is %2d/%2d |\n", coeff.numerator, coeff.denominator);
off += mvOsSPrintf(buf+off, "-----------------------------------------------------\n");
off += mvOsSPrintf(buf+off, "|Interval BER| BER | BIP8 | Inter.BIP8 |\n");
off += mvOsSPrintf(buf+off, "-----------------------------------------------------\n");
off += mvOsSPrintf(buf+off, " %010u | %010u | %010u | %010u |\n", intervalBer, ber ,bip, lastBip);
off += mvOsSPrintf(buf+off, "------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, " | DET SD TH | CNC SD TH | DET SF TH | CNC SF TH |\n");
off += mvOsSPrintf(buf+off, "------------------------------------------------------\n");
off += mvOsSPrintf(buf+off, " %010u | %010u | %010u | %010u |\n", sdDetectValue, sdCancelValue, sfDetectValue, sfCancelValue);
off += mvOsSPrintf(buf+off, "------------------------------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiDebugBerIntervalDebug
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu ber interval
**
** PARAMETERS: MV_U32 interval
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugBerIntervalDebug(MV_U32 interval)
{
onuGponApiBerIntervalConfig(interval);
}
/*******************************************************************************
**
** onuGponUiDebugBerCoefficientDebug
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu ber coefficient
**
** PARAMETERS: MV_U32 numerator
** MV_U32 denominator
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugBerCoefficientDebug(MV_U32 numerator, MV_U32 denominator)
{
onuGponApiBerCoefficientConfig(denominator,numerator);
}
/*******************************************************************************
**
** onuGponUiBerThresholdsConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu ber thresholds
**
** PARAMETERS: MV_U32 sd
** MV_U32 sf
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiBerThresholdsConfig(MV_U32 sd, MV_U32 sf)
{
onuGponApiBerThresholdConfig(sd, sf);
}
/*******************************************************************************
**
** onuGponUiDebugAesSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function handle onu AES port configuration
**
** PARAMETERS: MV_U32 portId
** MV_U32 enable
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugAesSet(MV_U32 portId, MV_U32 enable)
{
MV_STATUS rcode = MV_OK;
MV_BOOL enaBool;
MV_BOOL valid;
/* to start AES on a port Id, it should be valid */
if (enable == 1)
{
valid = onuGponDbGemPortValidGet(portId);
if (valid != MV_TRUE)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"Set GEM Port AES: Port(%d) is not Valid\n", portId);
return;
}
}
enaBool = (enable == 0) ? MV_FALSE : MV_TRUE;
rcode = mvOnuGponMacAesPortIdSet(portId, enaBool);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"Set GEM Port AES: Port(%d) enable(%d) failed\n", portId, enable);
}
onuGponDbGemPortAesSet(portId, enaBool);
}
/*******************************************************************************
**
** onuGponUiDebugAesSetAll
** ____________________________________________________________________________
**
** DESCRIPTION: The function handle onu AES port configuration
**
** PARAMETERS: MV_U32 enable
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugAesSetAll(MV_U32 enable)
{
MV_STATUS rcode = MV_OK;
MV_BOOL enaBool;
MV_BOOL valid;
MV_U32 portId;
for (portId = 0; portId < 4096; portId++)
{
/* to start AES on a port Id, it should be valid */
if (enable == 1)
{
valid = onuGponDbGemPortValidGet(portId);
if (valid != MV_TRUE)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"Set GEM Port AES: Port(%d) is not Valid\n", portId);
return;
}
}
enaBool = (enable == 0) ? MV_FALSE : MV_TRUE;
rcode = mvOnuGponMacAesPortIdSet(portId, enaBool);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"Set GEM Port AES: Port(%d) enable(%d) failed\n", portId, enable);
}
onuGponDbGemPortAesSet(portId,enaBool);
}
}
/*******************************************************************************
**
** onuGponUiDebugAesGemAll
** ____________________________________________________________________________
**
** DESCRIPTION: The function return a list of all gem port AES and status
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiDebugAesGemAll(char* buf, int range)
{
MV_U32 portId;
MV_BOOL enable;
MV_U32 startRange;
MV_U32 endRange;
int off = 0;
off += mvOsSPrintf(buf+off, "Encrypted GEM port ids list\n");
off += mvOsSPrintf(buf+off, "===========================\n");
switch (range)
{
case 1: startRange = 1000; endRange = 1999; break;
case 2: startRange = 2000; endRange = 2999; break;
case 3: startRange = 3000; endRange = 4096; break;
default: startRange = 0; endRange = 999; break;
}
for (portId = startRange ; portId < endRange ; portId++)
{
if (onuGponDbGemPortValidGet(portId)== MV_TRUE) {
enable = onuGponDbGemPortAesGet(portId);
if (enable == MV_TRUE) off += mvOsSPrintf(buf+off, "[%04d]", portId);
}
if ((portId / 14) == 0) off += mvOsSPrintf(buf+off, "\n");
}
return(off);
}
/*******************************************************************************
**
** onuGponUiDebugManagerSendPloam
** ____________________________________________________________________________
**
** DESCRIPTION: The function transmit US ploam message
**
** PARAMETERS: MV_U32 msgId
** MV_U32 onuId
** MV_U32 data1
** MV_U32 data2
** MV_U32 data3
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugManagerSendPloam(MV_U32 msgId,
MV_U32 onuId,
MV_U32 data1,
MV_U32 data2,
MV_U32 data3)
{
MV_U8 msgData[12];
MV_STATUS rcode;
msgData[0] = (MV_U8)((data1 >> 24) & 0xFF);
msgData[1] = (MV_U8)((data1 >> 16) & 0xFF);
msgData[2] = (MV_U8)((data1 >> 8) & 0xFF);
msgData[3] = (MV_U8)((data1) & 0xFF);
msgData[4] = (MV_U8)((data2 >> 24) & 0xFF);
msgData[5] = (MV_U8)((data2 >> 16) & 0xFF);
msgData[6] = (MV_U8)((data2 >> 8) & 0xFF);
msgData[7] = (MV_U8)((data2) & 0xFF);
msgData[8] = (MV_U8)((data3 >> 24) & 0xFF);
msgData[9] = (MV_U8)((data3 >> 16) & 0xFF);
msgData[10] = (MV_U8)((data3 >> 8) & 0xFF);
msgData[11] = (MV_U8)((data3) & 0xFF);
rcode = mvOnuGponMacMessageSend(onuId, msgId, msgData);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"mvOnuGponMacMessageSend failed\n");
}
}
/*******************************************************************************
**
** onuGponUiDebugManagerReceivePloam
** ____________________________________________________________________________
**
** DESCRIPTION: The function receive DS ploam message
**
** PARAMETERS: MV_U32 msgId
** MV_U32 onuId
** MV_U32 data1
** MV_U32 data2
** MV_U32 data3
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugManagerReceivePloam(MV_U32 msgId,
MV_U32 onuId,
MV_U32 data1,
MV_U32 data2,
MV_U32 data3)
{
MV_U8 msgData[12];
msgData[0] = (MV_U8)((data1 >> 24) & 0xFF);
msgData[1] = (MV_U8)((data1 >> 16) & 0xFF);
msgData[2] = (MV_U8)((data1 >> 8) & 0xFF);
msgData[3] = (MV_U8)((data1) & 0xFF);
msgData[4] = (MV_U8)((data2 >> 24) & 0xFF);
msgData[5] = (MV_U8)((data2 >> 16) & 0xFF);
msgData[6] = (MV_U8)((data2 >> 8) & 0xFF);
msgData[7] = (MV_U8)((data2) & 0xFF);
msgData[8] = (MV_U8)((data3 >> 24) & 0xFF);
msgData[9] = (MV_U8)((data3 >> 16) & 0xFF);
msgData[10] = (MV_U8)((data3 >> 8) & 0xFF);
msgData[11] = (MV_U8)((data3) & 0xFF);
onuGponPonMngPloamProcess((MV_U8)onuId, (MV_U8)msgId, msgData);
}
/*******************************************************************************
**
** onuGponUiDebugManagerRcvBurstPloams
** ____________________________________________________________________________
**
** DESCRIPTION: The function receives DS ploam messages
**
** PARAMETERS: MV_U32 msgId
** MV_U32 onuId
** MV_U32 data1
** MV_U32 data2
** MV_U32 data3
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugManagerRcvBurstPloams(MV_U32 msgId,
MV_U32 onuId,
MV_U32 data1,
MV_U32 data2,
MV_U32 data3)
{
int i;
for (i=0; i<maxPloamsSend; i++) {
onuGponUiDebugManagerReceivePloam(msgId, onuId, data1, data2, data3);
}
}
/*******************************************************************************
**
** onuGponUiDebugManagerRcvBurstCfg
** ____________________________________________________________________________
**
** DESCRIPTION: The function configures DS PLOAM burst size
**
** PARAMETERS: MV_U32 size
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugManagerRcvBurstCfg(MV_U32 size)
{
maxPloamsSend = size;
}
/*******************************************************************************
**
** onuGponUiDebugManagerFifoCntsClear
** ____________________________________________________________________________
**
** DESCRIPTION: The function clears SW FIFO counters
**
** PARAMETERS: MV_U32 size
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugManagerFifoCntsClear(MV_U32 value)
{
mvOnuGponMacFifoCountersSet(value);
}
/*******************************************************************************
**
** onuGponUiDebugManagerFifoSupportSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function enables or disables SW FIFO support
**
** PARAMETERS: MV_U32 size
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugManagerFifoSupportSet (MV_U32 enDis)
{
mvOnuGponMacFifoSupportSet(enDis);
}
/*******************************************************************************
**
** onuGponUiDebugManagerAcCouplingSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function configures TX AC coupling parameters
**
** PARAMETERS: MV_U32 mode
** MV_U32 time
** MV_U32 pattern1
** MV_U32 pattern2
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugManagerAcCouplingSet(MV_U32 mode, MV_U32 time, MV_U32 pattern1, MV_U32 pattern2)
{
mvOnuGponMacTxConfigAcCouplingSet(mode, time, pattern1, pattern2);
}
/*******************************************************************************
**
** onuGponUiDebugManagerAcCouplingGet
** ____________________________________________________________________________
**
** DESCRIPTION: The function prints TX AC coupling parameters
**
** PARAMETERS: char *buf
**
** OUTPUTS: char *buf
**
** RETURNS: None
**
*******************************************************************************/
int onuGponUiDebugManagerAcCouplingGet(char *buf)
{
int off = 0;
MV_U32 mode, time;
MV_U8 pattern1, pattern2;
MV_STATUS status;
status = mvOnuGponMacTxConfigAcCouplingGet(&mode, &time, &pattern1, &pattern2);
if (status != MV_OK)
off += mvOsSPrintf(buf+off, "Failed to obtain AC coupling configuration!\n");
else {
off += mvOsSPrintf(buf+off, "------------------------------------\n");
off += mvOsSPrintf(buf+off, "| AC Coupling Parameters (HEX val) |\n");
off += mvOsSPrintf(buf+off, "|-----------------------------------|\n");
off += mvOsSPrintf(buf+off, "| Mode | Time | Pattern1 | Pattern2 |\n");
off += mvOsSPrintf(buf+off, "|-----------------------------------|\n");
off += mvOsSPrintf(buf+off, "| %02x | %04x | %02x | %02x |\n",
mode, time, pattern1, pattern2);
off += mvOsSPrintf(buf+off, "|-----------------------------------|\n");
}
return(off);
}
/*******************************************************************************
**
** onuGponUiDebugManagerActiveTxBitmapSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function configures UTM Active TX Bitmap
**
** PARAMETERS: MV_U32 bitmap - bitmap
** MV_U32 valid - valid
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugManagerActiveTxBitmapSet(MV_U32 bitmap, MV_U32 valid)
{
mvOnuGponMacUtmActiveTxBitmapSet(bitmap);
mvOnuGponMacUtmActiveTxBitmapValidSet(valid);
}
/*******************************************************************************
**
** onuGponUiDebugManagerActiveTxBitmapGet
** ____________________________________________________________________________
**
** DESCRIPTION: The function prints UTM Active TX bitmap
**
** PARAMETERS: char *buf
**
** OUTPUTS: char *buf
**
** RETURNS: None
**
*******************************************************************************/
int onuGponUiDebugManagerActiveTxBitmapGet(char *buf)
{
int off = 0;
MV_U32 bitmap, valid;
MV_STATUS status;
status = mvOnuGponMacUtmActiveTxBitmapConfigGet(&bitmap, &valid);
if (status != MV_OK)
off += mvOsSPrintf(buf+off, "Failed to obtain UTM Active TX bitmap!\n");
else
off += mvOsSPrintf(buf+off, "UTM Active TX bitmap = %#x valid = %d\n", bitmap, valid);
return(off);
}
/*******************************************************************************
**
** onuGponUiGemOmciPortIdConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function change onu omci port Id
**
** PARAMETERS: MV_U32 portId
** MV_U32 valid
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiGemOmciPortIdConfig(MV_U32 portId, MV_U32 valid)
{
mvOnuGponMacGemOmciPortIdSet(portId, valid); /* Rx */
mvOnuGponMacUtmOmciPortIdSet(portId, valid); /* Tx */
onuGponDbOmccPortSet(portId);
onuGponDbOmccValidSet(valid);
}
/*******************************************************************************
**
** onuGponUiGemOmciPortIdShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu omcc port Id
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiGemOmciPortIdShow(char* buf)
{
MV_STATUS rcode;
MV_U32 gemPortId;
MV_U32 gemPortValid;
MV_U32 utmPortId;
MV_U32 utmPortValid;
int off = 0;
rcode = mvOnuGponMacGemOmciPortIdGet(&gemPortId, &gemPortValid);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get Rx(gem) omci portId, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
rcode = mvOnuGponMacUtmOmciPortIdGet(&utmPortId, &utmPortValid);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get Tx(Utm) omci portId, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "OMCI Rx(Gem) PortId %8d valid %s\n", gemPortId, (gemPortValid == 0) ? ("FALSE") : ("TRUE"));
off += mvOsSPrintf(buf+off, "OMCI Tx(Utm) PortId %8d valid %s\n", utmPortId, (utmPortValid == 0) ? ("FALSE") : ("TRUE"));
return(off);
}
/*******************************************************************************
**
** onuGponUiGemFrameLengthShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print onu frame lengths
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiGemFrameLengthShow(char* buf)
{
MV_STATUS rcode;
MV_U32 payloadlen;
MV_U32 maxEthFrameLen;
MV_U32 minEthFrameLen;
MV_U32 maxOmciFrameLen;
MV_U32 minOmciFrameLen;
int off = 0;
rcode = mvOnuGponMacGemPayloadLenGet(&payloadlen);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get gem payload length value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
rcode = mvOnuGponMacGemEthFrameLenGet(&maxEthFrameLen, &minEthFrameLen);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get ethernet frame length value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
rcode = mvOnuGponMacGemOmciFrameLenGet(&maxOmciFrameLen, &minOmciFrameLen);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to get omci frame value, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
off += mvOsSPrintf(buf+off, "\n");
off += mvOsSPrintf(buf+off, "----------------------\n");
off += mvOsSPrintf(buf+off, "|Frame Length |\n");
off += mvOsSPrintf(buf+off, "-----------------------------------\n");
off += mvOsSPrintf(buf+off, "| Frame | VALUE |\n");
off += mvOsSPrintf(buf+off, "-----------------------------------\n");
off += mvOsSPrintf(buf+off, "Gem payload | %10d |\n", payloadlen);
off += mvOsSPrintf(buf+off, "Gem min eth frame | %10d |\n", minEthFrameLen);
off += mvOsSPrintf(buf+off, "Gem max eth frame | %10d |\n", maxEthFrameLen);
off += mvOsSPrintf(buf+off, "Gem min omci frame | %10d |\n", minOmciFrameLen);
off += mvOsSPrintf(buf+off, "Gem max omci frame | %10d |\n", maxOmciFrameLen);
off += mvOsSPrintf(buf+off, "-----------------------------------\n");
return(off);
}
/*******************************************************************************
**
** onuGponUiGemPayloadLenConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function change onu gem payload length
**
** PARAMETERS: MV_U32 payloadLen
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiGemPayloadLenConfig(MV_U32 payloadLen)
{
mvOnuGponMacGemPayloadLenSet(payloadLen);
}
/*******************************************************************************
**
** onuGponUiGemEthFrameLenConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function change onu ethernet min/max frame length
**
** PARAMETERS: MV_U32 minFrameLenArg
** MV_U32 maxFrameLenArg
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiGemEthFrameLenConfig(MV_U32 minFrameLenArg, MV_U32 maxFrameLenArg)
{
mvOnuGponMacGemEthFrameLenSet(maxFrameLenArg, minFrameLenArg);
}
/*******************************************************************************
**
** onuGponUiGemOmciFrameLenConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function change onu omci min/max frame length
**
** PARAMETERS: MV_U32 minFrameLenArg
** MV_U32 maxFrameLenArg
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiGemOmciFrameLenConfig(MV_U32 minFrameLenArg, MV_U32 maxFrameLenArg)
{
mvOnuGponMacGemOmciFrameLenSet(maxFrameLenArg, minFrameLenArg);
}
/*******************************************************************************
**
** onuGponUiProtoHelpShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print protocol help
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiProtoHelpShow(char* buf)
{
int off = 0;
MV_U32 devId = mvCtrlModelGet();
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Configuration Commands[DEC]\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " echo [BER Interval] > berIntervalCfg - config ber interval\n");
off += mvOsSPrintf(buf+off, " echo [Numerator] [Denominator] > berCoeffCfg - "
"config ber coeff numerator, denominator\n");
off += mvOsSPrintf(buf+off, " echo [SD] [SF] > berThesholdCfg - "
"config ber SD, SF thresholds\n");
off += mvOsSPrintf(buf+off, " echo [OmccPortId] [State] > omciPortCfg - config omcc gem port state\n");
off += mvOsSPrintf(buf+off, " echo [Len] > gemFrameLenCfg - "
"config gem frame payload len\n");
off += mvOsSPrintf(buf+off, " echo [MinLen] [MaxLen] > ethFrameLenCfg - "
"config eth frame min & max lengths\n");
off += mvOsSPrintf(buf+off, " echo [MinLen] [MaxLen] > omciFrameLenCfg - "
"config omci frame min & max lengths\n");
off += mvOsSPrintf(buf+off, " echo [Start] [Stop] [Order] [Pola] [Mask] > txBurstCfg - config tx burst\n");
off += mvOsSPrintf(buf+off, " echo [MsgId] [OnuId] [Data] [Data] [Data] > ploamMsgSend - "
"simulate transmit of US PLOAM msg\n");
off += mvOsSPrintf(buf+off, " echo [MsgId] [OnuId] [Data] [Data] [Data] > ploamMsgRece - "
"simulate reception and process of DS PLOAM msg\n");
off += mvOsSPrintf(buf+off, " echo [MsgId] [OnuId] [Data] [Data] [Data] > ploamBurstRcv - "
"simulate reception and process of DS burst PLOAM msgs\n");
off += mvOsSPrintf(buf+off, " echo [DS burst size] > ploamBurstCfg - config DS PLOAM burst size\n");
off += mvOsSPrintf(buf+off, " echo 0 > clearFifoCnts - clear all SW FIFO counters\n");
off += mvOsSPrintf(buf+off, " echo [enable(1) or disable(0)] > fifoSupport - config US SW FIFO support\n");
if (devId == MV_6601_DEV_ID){
off += mvOsSPrintf(buf+off, " echo [Mode] [Burst_Time] [Pattern1] [Pattern2] > acCoupling - "
"configure TX AC Coupling parameters\r\n");
off += mvOsSPrintf(buf+off, " echo [Bitmap] [Valid] > activeTxBm - "
"configure UTM Active TX Bitmap\n");
}
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Display Commands: cat <file>\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " cat txBurst - dump tx burst info\n");
off += mvOsSPrintf(buf+off, " cat gemFrameLen - dump frame lengths\n");
if (devId == MV_6601_DEV_ID){
off += mvOsSPrintf(buf+off, " cat acCoupling - "
"dump TX AC Coupling parameters\n");
off += mvOsSPrintf(buf+off, " cat activeTxBm - "
"show UTM Active TX Bitmap\n");
}
off += mvOsSPrintf(buf+off, "============================================================================\n");
return(off);
}
/******************************************************************************/
/* ========================================================================== */
/* Misc Commands */
/* ========================================================================== */
/******************************************************************************/
/*******************************************************************************
**
** onuGponUiDebugSerialNumberSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function set ONU serial Number
**
** PARAMETERS: ON_U32 serialNumber1
** MV_U32 serialNumber2
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugSerialNumberSet(MV_U32 serialNumber1, MV_U32 serialNumber2)
{
MV_STATUS rcode;
MV_U8 serialNumber[8];
serialNumber[0] = (MV_U8)((serialNumber1 >> 24) & 0xFF);
serialNumber[1] = (MV_U8)((serialNumber1 >> 16) & 0xFF);
serialNumber[2] = (MV_U8)((serialNumber1 >> 8) & 0xFF);
serialNumber[3] = (MV_U8)((serialNumber1) & 0xFF);
serialNumber[4] = (MV_U8)((serialNumber2 >> 24) & 0xFF);
serialNumber[5] = (MV_U8)((serialNumber2 >> 16) & 0xFF);
serialNumber[6] = (MV_U8)((serialNumber2 >> 8) & 0xFF);
serialNumber[7] = (MV_U8)((serialNumber2) & 0xFF);
rcode = onuGponSrvcSerialNumberSet(serialNumber);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to set Serial Number, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
}
/*******************************************************************************
**
** onuGponUiDebugSerialNumberSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function set ONU serial Number
**
** PARAMETERS: ON_U32 serialNumber1
** MV_U32 serialNumber2
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugPasswordSet(MV_U32 passwordNumber1,
MV_U32 passwordNumber2,
MV_U32 passwordNumber3)
{
MV_STATUS rcode;
MV_U8 password[10];
password[0] = (MV_U8)((passwordNumber1 >> 24) & 0xFF);
password[1] = (MV_U8)((passwordNumber1 >> 16) & 0xFF);
password[2] = (MV_U8)((passwordNumber1 >> 8) & 0xFF);
password[3] = (MV_U8)((passwordNumber1) & 0xFF);
password[4] = (MV_U8)((passwordNumber2 >> 24) & 0xFF);
password[5] = (MV_U8)((passwordNumber2 >> 16) & 0xFF);
password[6] = (MV_U8)((passwordNumber2 >> 8) & 0xFF);
password[7] = (MV_U8)((passwordNumber2) & 0xFF);
password[8] = (MV_U8)((passwordNumber3 >> 24) & 0xFF);
password[9] = (MV_U8)((passwordNumber3 >> 16) & 0xFF);
rcode = onuGponDbPasswordSet(password);
if (rcode != MV_OK)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%s:%d, failed to set password, rcode(%d)\n", __FILE_DESC__, __LINE__, rcode);
}
}
/*******************************************************************************
**
** onuGponUiTxEnThresholdConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function change onu tx enable threshold
**
** PARAMETERS: MV_U32 threshold
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiTxEnThresholdConfig(MV_U32 threshold)
{
mvOnuGponMacTxTxEnableCounterThresholdSet(threshold);
}
/*******************************************************************************
**
** onuGponUiUtmTcPeriodConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function change onu utm tc period
**
** PARAMETERS: MV_U32 period
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiUtmTcPeriodConfig(MV_U32 period)
{
mvOnuGponMacUtmTcPeriodSet(period);
}
/*******************************************************************************
**
** onuGponUiUtmTcValidConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function change onu utm tc valid
**
** PARAMETERS: MV_U32 valid
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiUtmTcValidConfig(MV_U32 valid)
{
mvOnuGponMacUtmTcValidSet(valid);
}
/*******************************************************************************
**
** onuGponUitxDbrBlockSizeConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function change onu dbr block size
**
** PARAMETERS: MV_U32 blockSize
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUitxDbrBlockSizeConfig(MV_U32 blockSize)
{
MV_U32 configuredBlockSize;
onuGponSrvcDbrBlockSizeSet(blockSize, &configuredBlockSize);
}
/*******************************************************************************
**
** onuGponUiDebugMemReadReg
** ____________________________________________________________________________
**
** DESCRIPTION: The function test requested address space
**
** PARAMETERS: MV_U32 readOffset
** MV_U32 readEntry
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugReadReg(MV_U32 readOffset, MV_U32 readEntry)
{
MV_U32 regValue;
#ifndef PON_FPGA
regValue = MV_REG_READ((MV_GPON_MAC_REGS_BASE) + readOffset + (readEntry * sizeof (MV_U32)));
#else /* PON_FPGA */
regValue = MV_REG_READ((MV_GPON_REG_BASE) + readOffset + (readEntry * sizeof (MV_U32)));
#endif /* PON_FPGA */
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"Read register offset 0x%x, entry %d = [0x%08X]\n\r", readOffset, readEntry, regValue);
}
/*******************************************************************************
**
** onuGponUiDebugWriteReg
** ____________________________________________________________________________
**
** DESCRIPTION: The function test requested address space
**
** PARAMETERS: MV_U32 writeOffset
** MV_U32 writeEntry
** MV_U32 regValue
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugWriteReg(MV_U32 writeOffset, MV_U32 writeEntry, MV_U32 regValue)
{
#ifndef PON_FPGA
MV_REG_WRITE((MV_GPON_MAC_REGS_BASE) + writeOffset + (writeEntry * sizeof (MV_U32)), regValue);
#else /* PON_FPGA */
MV_REG_WRITE((MV_GPON_REG_BASE) + writeOffset + (writeEntry * sizeof (MV_U32)), regValue);
#endif /* PON_FPGA */
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"Write register offset 0x%x, entry %d = [0x%08X]\n\r", writeOffset, writeEntry, regValue);
}
/*******************************************************************************
**
** onuGponUiDebugDebugModeSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu denug mode
**
** PARAMETERS: MV_U32 debugMode
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugDebugModeSet(MV_U32 debugMode)
{
MV_BOOL mode;
mode = (debugMode == 0)? MV_FALSE : MV_TRUE;
onuGponPonMngDebugModeSet(mode);
}
/*******************************************************************************
**
** onuGponUiDebugUponModeSet
** ____________________________________________________________________________
**
** DESCRIPTION: The function configure onu UPON mode
**
** PARAMETERS: MV_U32 debugMode
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugUponModeSet(MV_U32 uponMode)
{
MV_BOOL mode;
mode = (uponMode == 0)? MV_FALSE : MV_TRUE;
onuGponApiUponDebugSet(mode);
}
/*******************************************************************************
**** onuGponUiCfgSetUserPatternBurst
** ____________________________________________________________________________
**
** DESCRIPTION: The function config start onu transmission of user-defined
** pattern burst
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: void
**
*******************************************************************************/
void onuGponUiCfgSetUserPatternBurst(MV_U32 patternMSB, MV_U32 pattern, MV_U32 patternLSB)
{
MV_U32 userPattern[3];
userPattern[0] = patternLSB;
userPattern[1] = pattern;
userPattern[2] = patternMSB;
mvOnuPonMacPrbsUserDefinedPatternSet(userPattern);
}
/*******************************************************************************
**** onuGponUiCfgSetDefinedPatternBurst
** ____________________________________________________________________________
**
** DESCRIPTION: The function config start onu transmission of pre-defined
** pattern burst
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: void
**
*******************************************************************************/
void onuGponUiCfgSetDefinedPatternBurst(MV_U32 enable, MV_U32 pattern, MV_U32 burst, MV_U32 duration, MV_U32 period)
{
if (enable == 0) {
onuPonPatternBurstOff();
}
else
{
onuPonTxPowerOn(MV_TRUE);
onuPonPatternBurstOn(pattern, (MV_BOOL)burst, period, duration);
}
}
/*******************************************************************************
**
** onuGponUiDebugAdminMode
** ____________________________________________________________________________
**
** DESCRIPTION: The function handle onu admin mode
**
** PARAMETERS: MV_U32 admin
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiDebugAdminMode(MV_U32 mode)
{
onuGponApiAdminStateSet(mode);
}
#ifdef MV_GPON_PERFORMANCE_CHECK
/*******************************************************************************
**
** onuGponCliDebugPerformanceCheck
** ____________________________________________________________________________
**
** DESCRIPTION: The function
**
** PARAMETERS: MV_U32 step
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponCliDebugPerformanceCheck(MV_U32 step)
{
MV_U32 minCheck = 0;
MV_U32 maxCheck = 0;
MV_U32 aveCheck = 0;
MV_U32 aveCount = 0;
MV_U32 tempCheck = 0;
MV_U32 minMaxTemp = 0;
MV_U32 index;
S_GponPerformanceCheckNode *tmpPmCheckNode;
char* pmStepDesc[] =
{
"ISR ",
"MNG1 ",
"MNG2 ",
"MNG3 ",
"ExtB ",
"Key Switch ",
"Cfg Port ",
"Req Key ",
"AllocId ",
"Password ",
"Enc Port ",
"Dis ",
"Dact ",
"Rng ",
"OnuId ",
"Over "
};
if (step >= PON_MAX_PERFORMANCE)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"Invalid performance step(%d)\n", step);
return;
}
tmpPmCheckNode = &(g_GponPmCheck.pmCheckNode[step]);
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
" Interval Minimum Maximum Average\n");
aveCount = 0;
for (index = 0; index < tmpPmCheckNode->uSecCntIdx; index++)
{
tempCheck = tmpPmCheckNode->uSecCntStop[index] -
tmpPmCheckNode->uSecCntStart[index];
if (tempCheck < 1000)
{
aveCheck += tempCheck;
aveCount++;
if (minMaxTemp == 0)
{
minCheck = maxCheck = tempCheck;
minMaxTemp = 1;
}
else
{
if (tempCheck > maxCheck) maxCheck = tempCheck;
else if (tempCheck < minCheck) minCheck = tempCheck;
}
}
}
if (aveCount > 0) aveCheck = aveCheck / aveCount;
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%11s %8u %7lu %7lu %7lu\n",
pmStepDesc[step], tmpPmCheckNode->uSecCntIdx, minCheck, maxCheck, aveCheck);
if (tmpPmCheckNode->uSecCntIdx > 0)
{
for (index = 0; index < tmpPmCheckNode->uSecCntIdx - 1; index++)
{
mvPonPrint(PON_PRINT_INFO, PON_CLI_MODULE,
"%11s Start %u Stop %u diff %u\n",
pmStepDesc[step],
tmpPmCheckNode->uSecCntStart[index],
tmpPmCheckNode->uSecCntStop[index],
(tmpPmCheckNode->uSecCntStop[index] - tmpPmCheckNode->uSecCntStart[index]));
}
}
}
/*******************************************************************************
**
** onuGponCliDebugPerformanceClear
** ____________________________________________________________________________
**
** DESCRIPTION: The function
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponCliDebugPerformanceClear(void)
{
MV_U32 step;
MV_U32 index;
S_GponPerformanceCheckNode *tmpPmCheckNode;
for (step = 0; step < PON_MAX_PERFORMANCE; step++)
{
tmpPmCheckNode = &(g_GponPmCheck.pmCheckNode[step]);
for (index = 0; index < tmpPmCheckNode->uSecCntIdx; index++)
{
tmpPmCheckNode->uSecCntStop[index] = 0;
tmpPmCheckNode->uSecCntStart[index] = 0;
}
tmpPmCheckNode->uSecCntIdx = 0;
}
}
#endif /* MV_GPON_PERFORMANCE_CHECK */
/*******************************************************************************
**
** onuGponUiT01IntervalConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiT01IntervalConfig(MV_U32 interval)
{
S_OnuPonTimer *timerId = &(onuPonResourceTbl_s.onuGponT01_TimerId);
if (timerId->onuPonTimerActive != ONU_PON_TIMER_ACTIVE) {
onuPonTimerUpdate(timerId,
timerId->onuPonTimerId.data,
interval,
0);
} else
printk(KERN_ERR "GPON T01 timer is running, the value is not accepted\n");
}
/*******************************************************************************
**
** onuGponUiT02IntervalConfig
** ____________________________________________________________________________
**
** DESCRIPTION: The function
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiT02IntervalConfig(MV_U32 interval)
{
S_OnuPonTimer *timerId = &(onuPonResourceTbl_s.onuGponT02_TimerId);
if (timerId->onuPonTimerActive != ONU_PON_TIMER_ACTIVE) {
onuPonTimerUpdate(timerId,
timerId->onuPonTimerId.data,
interval,
0);
} else
printk(KERN_ERR "GPON T02 timer is running, the value is not accepted\n");
}
/*******************************************************************************
**
** onuGponUiCfgPrbsUserPattern
** ____________________________________________________________________________
**
** DESCRIPTION: The function print PRBS user defined pattern
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: void
**
*******************************************************************************/
int onuGponUiCfgPrbsUserPattern(char* buf)
{
MV_U32 userPattern[3];
int off = 0;
mvOnuPonMacPrbsUserDefinedPatternGet(userPattern);
off += mvOsSPrintf(buf+off, "PRBS User Pattern 0x%4x%8x%8x\n",
userPattern[2], userPattern[1], userPattern[0]);
return(off);
}
/*******************************************************************************
**
** onuGponUiSyncLogEnable
** ____________________________________________________________________________
**
** DESCRIPTION: The function
**
** PARAMETERS: MV_U32 enable
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiSyncLogEnable(MV_U32 enable)
{
onuGponSyncLogEnable(enable);
}
/*******************************************************************************
**
** onuGponUiSyncLogPrint
** ____________________________________________________________________________
**
** DESCRIPTION: The function
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: None
**
*******************************************************************************/
void onuGponUiSyncLogPrint(void)
{
onuGponSyncLogPrint();
}
/*******************************************************************************
**
** onuGponLaserChannelShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function shows the laser channel from the PON ID message
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponLaserChannelShow(char *buf)
{
return onuGponLaserChannelPrint(buf);
}
/*******************************************************************************
**
** onuGponUiMiscHelpShow
** ____________________________________________________________________________
**
** DESCRIPTION: The function print misc help
**
** PARAMETERS: char* buf
**
** OUTPUTS: char* buf
**
** RETURNS: message length
**
*******************************************************************************/
int onuGponUiMiscHelpShow(char* buf)
{
int off = 0;
MV_U32 devId = mvCtrlModelGet();
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Configuration Commands[HEX]\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " echo [SN1] [SN2] > serialNumCfg - config serial number\n");
off += mvOsSPrintf(buf+off, " echo [PWD1] [PWD2] [PWD3] > passwordCfg - config password\n");
off += mvOsSPrintf(buf+off, " 10 bytes: PWD1, PWD2, 2 MSB of PWD3\n");
off += mvOsSPrintf(buf+off, " echo [TxEnThreshold] > txEnThresCfg - config tx enable threshold\n");
off += mvOsSPrintf(buf+off, " echo [TC Period] > utmTxPeriodCfg - config utm tc period\n");
off += mvOsSPrintf(buf+off, " echo [TC Valid] > utmTcValidCfg - config utm tc valid\n");
off += mvOsSPrintf(buf+off, " echo [DBR Block Size] > txDbrBlkSizeCfg - config dbr block size\n");
off += mvOsSPrintf(buf+off, " echo [Offset] [Entry] > readReg - "
"read onu reg [Id from mvPonOnuRegs.h]\n");
off += mvOsSPrintf(buf+off, " echo [Offset] [Entry] [Value] > writeReg - "
"write onu reg [Id from mvPonOnuRegs.h]\n");
off += mvOsSPrintf(buf+off, " echo [Mode] > debugModeCfg - config debug mode\n");
off += mvOsSPrintf(buf+off, " echo [Mode] > stopPonSw - "
"stop PON switching (enabled/disabled)\n");
off += mvOsSPrintf(buf+off, " echo [Section] > pmCheck - performance check section\n");
off += mvOsSPrintf(buf+off, " echo [0] > pmClear - performance check reset\n");
off += mvOsSPrintf(buf+off, " echo [module] [Level] [Options] > printMask - change printing options\n");
off += mvOsSPrintf(buf+off, " echo [state] > adminCfg - "
"change PON BE (TX EN) state 0=Enable, 1=Disable\n");
off += mvOsSPrintf(buf+off, " echo [patternMSB][pattern][patternLSB]\n");
off += mvOsSPrintf(buf+off, " > prbsUserDefinedPattern - /* 80bit user data: 16bit patternMLSB + 32bit pattern + 32bit patternLSB\n");
off += mvOsSPrintf(buf+off, " echo [enable][pattern][burst][duration][period]\n");
off += mvOsSPrintf(buf+off, " > prbsPreDefinedPattern\n");
off += mvOsSPrintf(buf+off, " - start enable[1] or stop [0] transmission of\n");
off += mvOsSPrintf(buf+off, " pattern: 0x1-1T, 0x2-2T, 0x5-User, 0x80-PRBS-7, 0x81-PRBS-9, 0x82-PRBS-15\n");
off += mvOsSPrintf(buf+off, " burst: 0-static, 1-periodic\n");
off += mvOsSPrintf(buf+off, " duration: peak time interval[micro seconds]\n");
off += mvOsSPrintf(buf+off, " period - full cycle time interval[micro seconds]\n");
off += mvOsSPrintf(buf+off, " echo [T01 Interval] > t01IntervalCfg - "
"config T01 timer interval in mS\n");
off += mvOsSPrintf(buf+off, " echo [T02 Interval] > t02IntervalCfg - "
"config T02 timer interval in mS\n");
off += mvOsSPrintf(buf+off, " echo [0] > syncLogEnable - Enable or Disable record GPON range log\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, "Display Commands: cat <file>\n");
off += mvOsSPrintf(buf+off, "============================================================================\n");
off += mvOsSPrintf(buf+off, " cat printMask - dump printing options\n");
off += mvOsSPrintf(buf+off, " cat syncLogEnable - dump GPON range log enable status\n");
off += mvOsSPrintf(buf+off, " cat syncLog - print GPON range log\n");
return(off);
}
int onuGponUiSyncLogEnableShow()
{
printk("The Sync Log is ");
if (onuGponLogEnable == MV_TRUE)
{
printk("enabled\r\n");
}
else
{
printk("disabled\r\n");
}
return 0;
}
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/* ========================================================================== */
/* ========================================================================== */
/* ========================================================================== */
/* ========================================================================== */
/* ONU SYS FS Definition */
/* ========================================================================== */
/* ========================================================================== */
/* ========================================================================== */
/* ========================================================================== */
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/* ========================================================================== */
/* Misc Commands */
/* ========================================================================== */
static ssize_t misc_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
const char* name = attr->attr.name;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
if (!strcmp(name, "printMask"))
return ponOnuPrintStatus(buf);
else if (!strcmp(name, "prbsUserPattern"))
return onuGponUiCfgPrbsUserPattern(buf);
else if (!strcmp(name, "helpMisc"))
return onuGponUiMiscHelpShow(buf);
else if (!strcmp(name, "syncLogEnable")) /* sync log enable or disable */
onuGponUiSyncLogEnableShow();
else if (!strcmp(name, "syncLog")) /* sync log stop */
onuGponUiSyncLogPrint();
else if (!strcmp(name, "laserChannel"))
return onuGponLaserChannelShow(buf);
return 0;
}
static ssize_t misc_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
const char* name = attr->attr.name;
unsigned long flags;
unsigned int param1 = 0;
unsigned int param2 = 0;
unsigned int param3 = 0;
unsigned int param4 = 0;
unsigned int param5 = 0;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
sscanf(buf, "%x %x %x %x %x", &param1, &param2, &param3, &param4, &param5);
raw_local_irq_save(flags);
if (!strcmp(name, "serialNumCfg")) /* serialNumber1, serialNumber2 */
onuGponUiDebugSerialNumberSet((MV_U32)param1, (MV_U32)param2);
else if (!strcmp(name, "passwordCfg")) /* serialNumber1, serialNumber2 */
onuGponUiDebugPasswordSet((MV_U32)param1, (MV_U32)param2, (MV_U32)param3);
else if (!strcmp(name, "txEnThresCfg")) /* threshold */
onuGponUiTxEnThresholdConfig((MV_U32)param1);
else if (!strcmp(name, "utmTxPeriodCfg")) /* period */
onuGponUiUtmTcPeriodConfig((MV_U32)param1);
else if (!strcmp(name, "utmTcValidCfg")) /* valid */
onuGponUiUtmTcValidConfig((MV_U32)param1);
else if (!strcmp(name, "txDbrBlkSizeCfg")) /* blockSize */
onuGponUitxDbrBlockSizeConfig((MV_U32)param1);
else if (!strcmp(name, "readReg")) /* readOffset, readEntry */
onuGponUiDebugReadReg((MV_U32)param1, (MV_U32)param2);
else if (!strcmp(name, "writeReg")) /* writeOffset, writeEntry, regValue */
onuGponUiDebugWriteReg((MV_U32)param1, (MV_U32)param2, (MV_U32)param3);
else if (!strcmp(name, "debugModeCfg")) /* debugMode */
onuGponUiDebugDebugModeSet((MV_U32)param1);
else if (!strcmp(name, "stopPonSw")) /* uponMode */
onuGponUiDebugUponModeSet((MV_U32)param1);
#ifdef MV_GPON_PERFORMANCE_CHECK
else if (!strcmp(name, "pmCheck")) /* step */
onuGponCliDebugPerformanceCheck((MV_U32)param1);
else if (!strcmp(name, "pmClear"))
onuGponCliDebugPerformanceClear();
#endif /* MV_GPON_PERFORMANCE_CHECK */
else if (!strcmp(name, "printMask")) /* module, print level, options */
ponOnuChangePrintStatus((MV_U32)param1, (MV_U32)param2, (MV_U32)param3);
else if (!strcmp(name, "prbsUserDefinedPattern"))
onuGponUiCfgSetUserPatternBurst((MV_U32)param1, (MV_U32)param2, (MV_U32)param3); /* 80bit user data: 16bit patternMLSB + 32bit pattern + 32bit patternLSB\n" */
else if (!strcmp(name, "prbsPreDefinedPattern"))
onuGponUiCfgSetDefinedPatternBurst((MV_U32)param1, (MV_U32)param2, (MV_U32)param3 , (MV_U32)param4 , (MV_U32)param5); /* pattern type, burst type, duration, period */
else if (!strcmp(name, "adminCfg")) /* admin 0=enable 1 = disable */
onuGponUiDebugAdminMode((MV_U32)param1);
else if (!strcmp(name, "t01IntervalCfg")) /* T01 interval in mS */
onuGponUiT01IntervalConfig((MV_U32)param1);
else if (!strcmp(name, "t02IntervalCfg")) /* T02 interval in mS */
onuGponUiT02IntervalConfig((MV_U32)param1);
else if (!strcmp(name, "syncLogEnable")) /* sync log enable or disable */
onuGponUiSyncLogEnable((MV_U32)param1);
else
printk(KERN_ERR "%s: illegal operation <%s>\n", __func__, attr->attr.name);
raw_local_irq_restore(flags);
return(len);
}
/* ========================================================================== */
/* Misc Attributes */
/* ========================================================================== */
static DEVICE_ATTR(serialNumCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(passwordCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(txEnThresCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(utmTxPeriodCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(utmTcValidCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(txDbrBlkSizeCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(readReg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(writeReg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(debugModeCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(stopPonSw, S_IWUSR, misc_show, misc_store);
#ifdef MV_GPON_PERFORMANCE_CHECK
static DEVICE_ATTR(pmCheck, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(pmClear, S_IWUSR, misc_show, misc_store);
#endif /* MV_GPON_PERFORMANCE_CHECK */
static DEVICE_ATTR(prbsUserDefinedPattern,S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(prbsPreDefinedPattern, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(adminCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(printMask, S_IRUSR | S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(helpMisc, S_IRUSR, misc_show, misc_store);
static DEVICE_ATTR(prbsUserPattern, S_IRUSR | S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(t01IntervalCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(t02IntervalCfg, S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(syncLogEnable, S_IRUSR | S_IWUSR, misc_show, misc_store);
static DEVICE_ATTR(syncLog, S_IRUSR, misc_show, misc_store);
static DEVICE_ATTR(laserChannel, S_IRUSR, misc_show, misc_store);
static struct attribute *misc_attrs[] = {
&dev_attr_serialNumCfg.attr,
&dev_attr_passwordCfg.attr,
&dev_attr_txEnThresCfg.attr,
&dev_attr_utmTxPeriodCfg.attr,
&dev_attr_utmTcValidCfg.attr,
&dev_attr_txDbrBlkSizeCfg.attr,
&dev_attr_readReg.attr,
&dev_attr_writeReg.attr,
&dev_attr_debugModeCfg.attr,
&dev_attr_stopPonSw.attr,
#ifdef MV_GPON_PERFORMANCE_CHECK
&dev_attr_pmCheck.attr,
&dev_attr_pmClear.attr,
#endif /* MV_GPON_PERFORMANCE_CHECK */
&dev_attr_prbsUserDefinedPattern.attr,
&dev_attr_prbsPreDefinedPattern.attr,
&dev_attr_adminCfg.attr,
&dev_attr_printMask.attr,
&dev_attr_helpMisc.attr,
&dev_attr_prbsUserPattern.attr,
&dev_attr_t01IntervalCfg.attr,
&dev_attr_t02IntervalCfg.attr,
&dev_attr_syncLogEnable.attr,
&dev_attr_syncLog.attr,
&dev_attr_laserChannel.attr,
NULL
};
static struct attribute_group misc_group =
{
.name = "misc",
.attrs = misc_attrs,
};
/******************************************************************************/
/* ========================================================================== */
/* Protocol Group */
/* ========================================================================== */
/******************************************************************************/
/* ========================================================================== */
/* Protocol Commands */
/* ========================================================================== */
static ssize_t protocol_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
const char* name = attr->attr.name;
MV_U32 devId = mvCtrlModelGet();
if (!capable(CAP_NET_ADMIN))
return -EPERM;
if (!strcmp(name, "txBurst"))
return(onuGponUiDebugBurstInfo(buf));
else if (!strcmp(name, "gemFrameLen"))
return(onuGponUiGemFrameLengthShow(buf));
else if (!strcmp(name, "helpProto"))
return(onuGponUiProtoHelpShow(buf));
else if (devId == MV_6601_DEV_ID) {
if (!strcmp(name, "acCoupling"))
return onuGponUiDebugManagerAcCouplingGet(buf);
else if (!strcmp(name, "activeTxBm"))
return onuGponUiDebugManagerActiveTxBitmapGet(buf);
}
return 0;
}
static ssize_t protocol_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
const char* name = attr->attr.name;
unsigned long flags;
unsigned int param1 = 0;
unsigned int param2 = 0;
unsigned int param3 = 0;
unsigned int param4 = 0;
unsigned int param5 = 0;
MV_U32 devId = mvCtrlModelGet();
if (!capable(CAP_NET_ADMIN))
return -EPERM;
sscanf(buf, "%d %d %d %d %d", &param1, &param2, &param3, &param4, &param5);
raw_local_irq_save(flags);
if (!strcmp(name, "txBurstCfg")) /* start, stop, order, polarity, mask */
onuGponUiDebugBurstConfig((MV_U32)param1, (MV_U32)param2, (MV_U32)param3,
(MV_U32)param4, (MV_U32)param5);
else if (!strcmp(name, "berIntervalCfg")) /* interval */
onuGponUiDebugBerIntervalDebug((MV_U32)param1);
else if (!strcmp(name, "berCoeffCfg")) /* numerator, denominator*/
onuGponUiDebugBerCoefficientDebug((MV_U32)param1, (MV_U32)param2);
else if (!strcmp(name, "berThesholdCfg")) /* sd, sf */
onuGponUiBerThresholdsConfig((MV_U32)param1, (MV_U32)param2);
else if (!strcmp(name, "omciPortCfg")) /* portId, valid */
onuGponUiGemOmciPortIdConfig((MV_U32)param1, (MV_U32)param2);
else if (!strcmp(name, "gemFrameLenCfg")) /* payloadLen */
onuGponUiGemPayloadLenConfig((MV_U32)param1);
else if (!strcmp(name, "ethFrameLenCfg")) /* minFrameLenArg, maxFrameLenArg */
onuGponUiGemEthFrameLenConfig((MV_U32)param1, (MV_U32)param2);
else if (!strcmp(name, "omciFrameLenCfg")) /* minFrameLenArg, maxFrameLenArg */
onuGponUiGemOmciFrameLenConfig((MV_U32)param1, (MV_U32)param2);
else if (!strcmp(name, "ploamMsgSend")) /* msgId, onuId, data1, data2, data3 */
onuGponUiDebugManagerSendPloam((MV_U32)param1, (MV_U32)param2, (MV_U32)param3,
(MV_U32)param4, (MV_U32)param5);
else if (!strcmp(name, "ploamMsgRece")) /* msgId, onuId, data1, data2, data3 */
onuGponUiDebugManagerReceivePloam((MV_U32)param1, (MV_U32)param2, (MV_U32)param3,
(MV_U32)param4, (MV_U32)param5);
else if (!strcmp(name, "ploamBurstRcv")) /* msgId, onuId, data1, data2, data3 */
onuGponUiDebugManagerRcvBurstPloams((MV_U32)param1, (MV_U32)param2, (MV_U32)param3,
(MV_U32)param4, (MV_U32)param5);
else if (!strcmp(name, "ploamBurstCfg")) /* burst size */
onuGponUiDebugManagerRcvBurstCfg((MV_U32)param1);
else if (!strcmp(name, "clearFifoCnts")) /* value */
onuGponUiDebugManagerFifoCntsClear((MV_U32)param1);
else if (!strcmp(name, "fifoSupport")) /* enable/disable */
onuGponUiDebugManagerFifoSupportSet((MV_U32)param1);
else if (devId == MV_6601_DEV_ID) {
if (!strcmp(name, "acCoupling"))
/* mode, time, pattern1, pattern2 */
onuGponUiDebugManagerAcCouplingSet((MV_U32)param1, (MV_U32)param2, (MV_U32)param3, (MV_U32)param4);
else if (!strcmp(name, "activeTxBm")) /* bitmap, valid */
onuGponUiDebugManagerActiveTxBitmapSet((MV_U32)param1, (MV_U32)param2);
else
printk(KERN_ERR "%s: illegal operation <%s>\n", __func__, attr->attr.name);
} else
printk(KERN_ERR "%s: illegal operation <%s>\n", __func__, attr->attr.name);
raw_local_irq_restore(flags);
return(len);
}
/* ========================================================================== */
/* Protocol Attributes */
/* ========================================================================== */
static DEVICE_ATTR(txBurstCfg, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(txBurst, S_IRUSR, protocol_show, protocol_store);
static DEVICE_ATTR(berIntervalCfg, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(berCoeffCfg, S_IRUSR, protocol_show, protocol_store);
static DEVICE_ATTR(berThesholdCfg, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(omciPortCfg, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(gemFrameLen, S_IRUSR, protocol_show, protocol_store);
static DEVICE_ATTR(gemFrameLenCfg, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(ethFrameLenCfg, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(omciFrameLenCfg, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(ploamMsgSend, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(ploamMsgRece, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(ploamBurstRcv, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(ploamBurstCfg, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(clearFifoCnts, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(fifoSupport, S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(acCoupling, S_IRUSR | S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(activeTxBm, S_IRUSR | S_IWUSR, protocol_show, protocol_store);
static DEVICE_ATTR(helpProto, S_IRUSR, protocol_show, protocol_store);
static struct attribute *protocol_attrs[] = {
&dev_attr_txBurstCfg.attr,
&dev_attr_txBurst.attr,
&dev_attr_berIntervalCfg.attr,
&dev_attr_berCoeffCfg.attr,
&dev_attr_berThesholdCfg.attr,
&dev_attr_omciPortCfg.attr,
&dev_attr_gemFrameLen.attr,
&dev_attr_gemFrameLenCfg.attr,
&dev_attr_ethFrameLenCfg.attr,
&dev_attr_omciFrameLenCfg.attr,
&dev_attr_ploamMsgSend.attr,
&dev_attr_ploamMsgRece.attr,
&dev_attr_ploamBurstRcv.attr,
&dev_attr_ploamBurstCfg.attr,
&dev_attr_clearFifoCnts.attr,
&dev_attr_fifoSupport.attr,
&dev_attr_acCoupling.attr,
&dev_attr_activeTxBm.attr,
&dev_attr_helpProto.attr,
NULL
};
static struct attribute_group protocol_group =
{
.name = "protocol",
.attrs = protocol_attrs,
};
/******************************************************************************/
/* ========================================================================== */
/* Introp Group */
/* ========================================================================== */
/******************************************************************************/
/* ========================================================================== */
/* Introp Commands */
/* ========================================================================== */
static ssize_t introp_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
const char* name = attr->attr.name;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
if (!strcmp(name, "manMode"))
return (onuGponUiOverrideShow(buf));
else if (!strcmp(name, "helpIot"))
return (onuGponUiIntropHelpShow(buf));
return 0;
}
static ssize_t introp_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
const char* name = attr->attr.name;
unsigned long flags;
unsigned int param1 = 0;
unsigned int param2 = 0;
unsigned int param3 = 0;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
sscanf(buf, "%d %d %d", &param1, &param2, &param3);
raw_local_irq_save(flags);
if (!strcmp(name, "onuIdCfg"))
onuGponUiOnuIdConfig((MV_U32)param1, (MV_U32)param2); /* onuId, enable */
else if (!strcmp(name, "portIdCfg"))
onuGponUiPortIdConfig((MV_U32)param1, (MV_U32)param2); /* portId, enable */
else if (!strcmp(name, "eqdCfg"))
onuGponUiEquDelaySetConfig((MV_U32)param1, (MV_U32)param2); /* equDelayVal, enable*/
else if (!strcmp(name, "eqdChange"))
onuGponUiEquDelayChangeConfig((MV_U32)param1, (MV_U32)param2); /* direction, size */
else if (!strcmp(name, "extBurstCfg"))
onuGponUiExtendedBurstConfig((MV_U32)param1, (MV_U32)param2, (MV_U32)param3); /* enable, rangeValue, operValue */
else if (!strcmp(name, "extBurstDelayCfg"))
onuGponUiExtendedBurstDelayConfig((MV_U32)param1, (MV_U32)param2, (MV_U32)param3); /* enable, rangeValue, operValue */
else if (!strcmp(name, "delimiterCfg"))
onuGponUiDelimiterConfig((MV_U32)param1, (MV_U32)param2); /* enable , value*/
else if (!strcmp(name, "preambleCfg"))
onuGponUiDebugOverheadPreamble((MV_U32)param1, (MV_U32)param2, (MV_U32)param3); /* pream3RangeCnt, pream3OperCnt, pream3PattCnt */
else if (!strcmp(name, "guardCfg"))
onuGponUiDebugOverheadGuard((MV_U32)param1); /* guard */
else if (!strcmp(name, "manModeCfg"))
onuGponUiDebugOverheadMode((MV_U32)param1); /* overMode */
else
printk("%s: illegal operation <%s>\n", __FUNCTION__, attr->attr.name);
raw_local_irq_restore(flags);
return(len);
}
/* ========================================================================== */
/* Introp Attributes */
/* ========================================================================== */
static DEVICE_ATTR(onuIdCfg, S_IWUSR, introp_show, introp_store);
static DEVICE_ATTR(portIdCfg, S_IWUSR, introp_show, introp_store);
static DEVICE_ATTR(eqdCfg, S_IWUSR, introp_show, introp_store);
static DEVICE_ATTR(eqdChange, S_IRUSR, introp_show, introp_store);
static DEVICE_ATTR(extBurstCfg, S_IWUSR, introp_show, introp_store);
static DEVICE_ATTR(extBurstDelayCfg,S_IWUSR, introp_show, introp_store);
static DEVICE_ATTR(delimiterCfg, S_IWUSR, introp_show, introp_store);
static DEVICE_ATTR(preambleCfg, S_IWUSR, introp_show, introp_store);
static DEVICE_ATTR(guardCfg, S_IWUSR, introp_show, introp_store);
static DEVICE_ATTR(manModeCfg, S_IWUSR, introp_show, introp_store);
static DEVICE_ATTR(manMode, S_IRUSR, introp_show, introp_store);
static DEVICE_ATTR(helpIot, S_IRUSR, introp_show, introp_store);
static struct attribute *introp_attrs[] = {
&dev_attr_onuIdCfg.attr,
&dev_attr_portIdCfg.attr,
&dev_attr_eqdCfg.attr,
&dev_attr_eqdChange.attr,
&dev_attr_extBurstCfg.attr,
&dev_attr_extBurstDelayCfg.attr,
&dev_attr_delimiterCfg.attr,
&dev_attr_preambleCfg.attr,
&dev_attr_guardCfg.attr,
&dev_attr_manModeCfg.attr,
&dev_attr_manMode.attr,
&dev_attr_helpIot.attr,
NULL
};
static struct attribute_group introp_group =
{
.name = "introp",
.attrs = introp_attrs,
};
/******************************************************************************/
/* ========================================================================== */
/* Data Group */
/* ========================================================================== */
/******************************************************************************/
/* ========================================================================== */
/* Data Commands */
/* ========================================================================== */
static ssize_t data_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
const char* name = attr->attr.name;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
if (!strcmp(name, "showTcont"))
return (onuGponUiDebugTcont(buf));
else if (!strcmp(name, "showGem0xxx"))
return (onuGponUiDebugGemPortid(buf, 0));
else if (!strcmp(name, "showGem1xxx"))
return (onuGponUiDebugGemPortid(buf, 1));
else if (!strcmp(name, "showGem2xxx"))
return (onuGponUiDebugGemPortid(buf, 2));
else if (!strcmp(name, "showGem3xxx"))
return (onuGponUiDebugGemPortid(buf, 3));
else if (!strcmp(name, "showAes0xxx"))
return (onuGponUiDebugAesGemAll(buf, 0));
else if (!strcmp(name, "showAes1xxx"))
return (onuGponUiDebugAesGemAll(buf, 1));
else if (!strcmp(name, "showAes2xxx"))
return (onuGponUiDebugAesGemAll(buf, 2));
else if (!strcmp(name, "showAes3xxx"))
return (onuGponUiDebugAesGemAll(buf, 3));
else if (!strcmp(name, "showMibGemPorts"))
return (onuGponUiDebugGemPmListShow(buf));
else if (!strcmp(name, "helpData"))
return (onuGponUiDataHelpShow(buf));
return 0;
}
static ssize_t data_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
const char* name = attr->attr.name;
unsigned long flags;
unsigned int param1 = 0;
unsigned int param2 = 0;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
sscanf(buf, "%d %d", &param1, &param2);
raw_local_irq_save(flags);
if (!strcmp(name, "cfgTcont"))
onuGponUiTcontConfig((MV_U32)param1, (MV_U32)param2); /* alloc, tcont */
else if (!strcmp(name, "clrTcont"))
onuGponUiClearTcontConfig((MV_U32)param1); /* tcont */
else if (!strcmp(name, "rstTcont"))
onuGponUiResetTcontsConfig();
else if (!strcmp(name, "cfgGem"))
onuGponUiDebugGemPortidValidSet((MV_U32)param1, (MV_U32)param2); /* portId, enable */
else if (!strcmp(name, "cfgAllGem"))
onuGponUiDebugAllGemPortidValidSet((MV_U32)param1); /* enable */
else if (!strcmp(name, "cfgMibPm"))
onuGponUiDebugGemPmSet((MV_U32)param1, (MV_U32)param2); /* Start or stop Gem port PM */
else if (!strcmp(name, "resetMibPm"))
onuGponUiDebugGemPmReset(); /* Reset PM*/
else if (!strcmp(name, "getMibPm"))
onuGponUiDebugGemPmGet((MV_U32)param1); /* Get GEM PM counters */
#ifdef MV_GPON_STATIC_GEM_PORT
else if (!strcmp(name, "dummyGemState"))
onuGponUiDebugDummyGemPortFlagSet((MV_U32)param1); /* flag */
else if (!strcmp(name, "dummyGemRst"))
onuGponUiDebugDummyGemPortReset();
#endif /* MV_GPON_STATIC_GEM_PORT */
else if (!strcmp(name, "cfgAesPort"))
onuGponUiDebugAesSet((MV_U32)param1, (MV_U32)param2); /* portId, enable */
else if (!strcmp(name, "cfgAllAes"))
onuGponUiDebugAesSetAll((MV_U32)param1); /* enable */
else
printk("%s: illegal operation <%s>\n", __FUNCTION__, attr->attr.name);
raw_local_irq_restore(flags);
return(len);
}
/* ========================================================================== */
/* Data Attributes */
/* ========================================================================== */
static DEVICE_ATTR(cfgTcont, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(clrTcont, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(rstTcont, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(showTcont, S_IRUSR, data_show, data_store);
static DEVICE_ATTR(cfgGem, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(cfgAllGem, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(showGem0xxx, S_IRUSR, data_show, data_store);
static DEVICE_ATTR(showGem1xxx, S_IRUSR, data_show, data_store);
static DEVICE_ATTR(showGem2xxx, S_IRUSR, data_show, data_store);
static DEVICE_ATTR(showGem3xxx, S_IRUSR, data_show, data_store);
#ifdef MV_GPON_STATIC_GEM_PORT
static DEVICE_ATTR(dummyGemState, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(dummyGemRst, S_IWUSR, data_show, data_store);
#endif /* MV_GPON_STATIC_GEM_PORT */
static DEVICE_ATTR(cfgAesPort, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(cfgMibPm, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(resetMibPm, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(getMibPm, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(showMibGemPorts, S_IRUSR, data_show, data_store);
static DEVICE_ATTR(cfgAllAes, S_IWUSR, data_show, data_store);
static DEVICE_ATTR(showAes0xxx, S_IRUSR, data_show, data_store);
static DEVICE_ATTR(showAes1xxx, S_IRUSR, data_show, data_store);
static DEVICE_ATTR(showAes2xxx, S_IRUSR, data_show, data_store);
static DEVICE_ATTR(showAes3xxx, S_IRUSR, data_show, data_store);
static DEVICE_ATTR(helpData, S_IRUSR, data_show, data_store);
static struct attribute *data_attrs[] = {
&dev_attr_cfgTcont.attr,
&dev_attr_clrTcont.attr,
&dev_attr_rstTcont.attr,
&dev_attr_showTcont.attr,
&dev_attr_cfgGem.attr,
&dev_attr_cfgAllGem.attr,
&dev_attr_cfgMibPm.attr,
&dev_attr_resetMibPm.attr,
&dev_attr_getMibPm.attr,
&dev_attr_showMibGemPorts.attr,
&dev_attr_showGem0xxx.attr,
&dev_attr_showGem1xxx.attr,
&dev_attr_showGem2xxx.attr,
&dev_attr_showGem3xxx.attr,
#ifdef MV_GPON_STATIC_GEM_PORT
&dev_attr_dummyGemState.attr,
&dev_attr_dummyGemRst.attr,
#endif /* MV_GPON_STATIC_GEM_PORT */
&dev_attr_cfgAesPort.attr,
&dev_attr_cfgAllAes.attr,
&dev_attr_showAes0xxx.attr,
&dev_attr_showAes1xxx.attr,
&dev_attr_showAes2xxx.attr,
&dev_attr_showAes3xxx.attr,
&dev_attr_helpData.attr,
NULL
};
static struct attribute_group data_group =
{
.name = "data",
.attrs = data_attrs,
};
/******************************************************************************/
/* ========================================================================== */
/* Pm Group */
/* ========================================================================== */
/******************************************************************************/
/* ========================================================================== */
/* Pm Commands */
/* ========================================================================== */
static ssize_t gpon_pm_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
const char* name = attr->attr.name;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
if (!strcmp(name, "fecCnt"))
return (onuGponUiFecCountersShow(buf));
else if (!strcmp(name, "rxPloamCnt"))
return (onuGponUiRxPloamCountersShow(buf));
else if (!strcmp(name, "txPloamCnt"))
return (onuGponUiTxPloamCountersShow(buf));
else if (!strcmp(name, "bwMapCnt"))
return (onuGponUiBwMapCountersShow(buf));
else if (!strcmp(name, "stdCnt"))
return (onuGponUiStandardCountersShow(buf));
else if (!strcmp(name, "gemCnt"))
return (onuGponUiGemCountersShow(buf));
else if (!strcmp(name, "txPktCnt"))
return (onuGponUiTxCountersShow(buf));
else if (!strcmp(name, "rawCnt_1"))
return (onuGponUiRaw_1Counters(buf));
else if (!strcmp(name, "rawCnt_2"))
return (onuGponUiRaw_2Counters(buf));
else if (!strcmp(name, "helpGPm"))
return (onuGponUiPmHelpShow(buf));
return 0;
}
static ssize_t gpon_pm_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
const char* name = attr->attr.name;
unsigned long flags;
unsigned int param = 0;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
sscanf(buf, "%d", &param);
raw_local_irq_save(flags);
if (!strcmp(name, "cntRdClrFlState"))
onuGponUiCountersReadClearFlag((MV_BOOL)param);
if (!strcmp(name, "bwMapCntByState"))
onuGponBwMapCountersEnDisFlag((MV_BOOL)param);
else
printk("%s: illegal operation <%s>\n", __FUNCTION__, attr->attr.name);
raw_local_irq_restore(flags);
return(len);
}
/* ========================================================================== */
/* PM Attributes */
/* ========================================================================== */
static DEVICE_ATTR(fecCnt, S_IRUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(rxPloamCnt, S_IRUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(txPloamCnt, S_IRUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(bwMapCnt, S_IRUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(stdCnt, S_IRUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(gemCnt, S_IRUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(txPktCnt, S_IRUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(rawCnt_1, S_IRUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(rawCnt_2, S_IRUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(cntRdClrFlState,S_IWUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(bwMapCntByState,S_IWUSR, gpon_pm_show, gpon_pm_store);
static DEVICE_ATTR(helpGPm, S_IRUSR, gpon_pm_show, gpon_pm_store);
static struct attribute *gpon_pm_attrs[] = {
&dev_attr_fecCnt.attr,
&dev_attr_rxPloamCnt.attr,
&dev_attr_txPloamCnt.attr,
&dev_attr_bwMapCnt.attr,
&dev_attr_stdCnt.attr,
&dev_attr_gemCnt.attr,
&dev_attr_txPktCnt.attr,
&dev_attr_rawCnt_1.attr,
&dev_attr_rawCnt_2.attr,
&dev_attr_cntRdClrFlState.attr,
&dev_attr_bwMapCntByState.attr,
&dev_attr_helpGPm.attr,
NULL
};
static struct attribute_group gpon_pm_group =
{
.name = "pm",
.attrs = gpon_pm_attrs,
};
/******************************************************************************/
/* ========================================================================== */
/* Info Group */
/* ========================================================================== */
/******************************************************************************/
/* ========================================================================== */
/* Info Commands */
/* ========================================================================== */
static ssize_t gpon_info_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
const char* name = attr->attr.name;
if (!capable(CAP_NET_ADMIN))
return -EPERM;
if (!strcmp(name, "infoGpon"))
return(onuGponUiInfoShow(buf));
else if (!strcmp(name, "alarmGpon"))
return(onuGponUiAlarmShow(buf));
else if (!strcmp(name, "swfifoGpon"))
return(onuGponUiFifoShow(buf));
else if (!strcmp(name, "fecStatus"))
return(onuGponUiFecStatus(buf));
else if (!strcmp(name, "helpGInfo"))
return(onuGponUiInfoHelpShow(buf));
return 0;
}
static ssize_t gpon_info_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t len)
{
return(0);
}
/* ========================================================================== */
/* Info Attributes */
/* ========================================================================== */
static DEVICE_ATTR(infoGpon, S_IRUSR, gpon_info_show, gpon_info_store);
static DEVICE_ATTR(alarmGpon, S_IRUSR, gpon_info_show, gpon_info_store);
static DEVICE_ATTR(swfifoGpon, S_IRUSR, gpon_info_show, gpon_info_store);
static DEVICE_ATTR(fecStatus, S_IRUSR, gpon_info_show, gpon_info_store);
static DEVICE_ATTR(helpGInfo, S_IRUSR, gpon_info_show, gpon_info_store);
static struct attribute *gpon_info_attrs[] = {
&dev_attr_infoGpon.attr,
&dev_attr_alarmGpon.attr,
&dev_attr_swfifoGpon.attr,
&dev_attr_fecStatus.attr,
&dev_attr_helpGInfo.attr,
NULL
};
static struct attribute_group gpon_info_group =
{
.name = "info",
.attrs = gpon_info_attrs,
};
/******************************************************************************/
/* ========================================================================== */
/* ONU SYS FS */
/* ========================================================================== */
/******************************************************************************/
int __devinit gpon_sysfs_init(void)
{
int err;
struct device *pd;
pd = bus_find_device_by_name(&platform_bus_type, NULL, "gpon");
if (!pd) {
platform_device_register_simple("gpon", -1, NULL, 0);
pd = bus_find_device_by_name(&platform_bus_type, NULL, "gpon");
}
if (!pd) {
printk(KERN_ERR"%s: cannot find gpon device\n", __FUNCTION__);
pd = &platform_bus;
}
err = sysfs_create_group(&pd->kobj, &gpon_info_group);
if (err) {
printk(KERN_INFO "sysfs group failed %d\n", err);
goto out;
}
err = sysfs_create_group(&pd->kobj, &gpon_pm_group);
if (err) {
printk(KERN_INFO "sysfs group failed %d\n", err);
goto out;
}
err = sysfs_create_group(&pd->kobj, &data_group);
if (err) {
printk(KERN_INFO "sysfs group failed %d\n", err);
goto out;
}
err = sysfs_create_group(&pd->kobj, &introp_group);
if (err) {
printk(KERN_INFO "sysfs group failed %d\n", err);
goto out;
}
err = sysfs_create_group(&pd->kobj, &protocol_group);
if (err) {
printk(KERN_INFO "sysfs group failed %d\n", err);
goto out;
}
err = sysfs_create_group(&pd->kobj, &misc_group);
if (err) {
printk(KERN_INFO "sysfs group failed %d\n", err);
goto out;
}
printk(KERN_INFO "= PON Module SYS FS Init ended successfully =\n");
out:
return err;
}
void gpon_sysfs_delete(void)
{
struct device *pd;
pd = bus_find_device_by_name(&platform_bus_type, NULL, "gpon");
if (!pd)
{
printk("%s: cannot find gpon device\n", __FUNCTION__);
return;
}
sysfs_remove_group(&pd->kobj, &gpon_info_group);
sysfs_remove_group(&pd->kobj, &gpon_pm_group);
sysfs_remove_group(&pd->kobj, &data_group);
sysfs_remove_group(&pd->kobj, &introp_group);
sysfs_remove_group(&pd->kobj, &protocol_group);
sysfs_remove_group(&pd->kobj, &misc_group);
printk(KERN_INFO "= PON Module SYS FS Remove ended successfully =\n");
}
/*******************************************************************************
**
** onuGponUsrInterfaceCreate
** ____________________________________________________________________________
**
** DESCRIPTION: The function create user interface - sys fs
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: MV_OK or MV_ERROR
**
*******************************************************************************/
MV_STATUS onuGponUsrInterfaceCreate(void)
{
if (gpon_sysfs_init() != 0)
return(MV_ERROR);
return(MV_OK);
}
/*******************************************************************************
**
** onuGponUsrInterfaceRelease
** ____________________________________________________________________________
**
** DESCRIPTION: The function release user interface - sys fs
**
** PARAMETERS: None
**
** OUTPUTS: None
**
** RETURNS: MV_OK or MV_ERROR
**
*******************************************************************************/
MV_STATUS onuGponUsrInterfaceRelease(void)
{
gpon_sysfs_delete();
return(MV_OK);
}