/*******************************************************************************
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.

******************************************************************************/

/******************************************************************************/
/**                                                                          **/
/**  MODULE      : ONU EPON                                                  **/
/**                                                                          **/
/**  FILE        : eponOnuDb.c                                               **/
/**                                                                          **/
/**  DESCRIPTION : This file implements ONU EPON database functionality      **/
/**                                                                          **/
/******************************************************************************
 *                                                                            *                              
 *  MODIFICATION HISTORY:                                                     *
 *                                                                            *
 *   26Jan10  oren_ben_hayun    created                                       *  
 * ========================================================================== *      
 *                                                                          
 ******************************************************************************/

/* Include Files
------------------------------------------------------------------------------*/
#include "eponOnuHeader.h"

/* Local Constant
------------------------------------------------------------------------------*/                                               
#define __FILE_DESC__ "mv_pon/core/epon/eponOnuDb.c"

/* Global Variables
------------------------------------------------------------------------------*/
/* ONU GPON Database */
S_OnuEponDb onuEponDb_s;

#ifdef PON_FPGA
#define MV_MAC_ADDR_SIZE (6)
#endif /* PON_FPGA */

/* Local Variables
------------------------------------------------------------------------------*/
/* ONU EPON database init function */
MV_STATUS onuEponOnuMacTblInit(void);
MV_STATUS onuEponOnuGenTblInit(void);
MV_STATUS onuEponDbOnuDatapathTblInit(void);

/* Export Functions
------------------------------------------------------------------------------*/

/* Local Functions
------------------------------------------------------------------------------*/
MV_U32 swRprtMacTimerInterval; /* in 16 nano sec units */
MV_U32 swRprtTimerType;

MV_U8 fixMacAddrs[8][6] = {{0x00,0x00,0x00,0x00,0x00,0x82},
                           {0x00,0x00,0x00,0x00,0x00,0x83},
                           {0x00,0x00,0x00,0x00,0x00,0x84},
                           {0x00,0x00,0x00,0x00,0x00,0x85},
                           {0x00,0x00,0x00,0x00,0x00,0x86},
                           {0x00,0x00,0x00,0x00,0x00,0x87},
                           {0x00,0x00,0x00,0x00,0x00,0x88},
                           {0x00,0x00,0x00,0x00,0x00,0x89}};

extern u8 mvMacAddr[CONFIG_MV_ETH_PORTS_NUM][MV_MAC_ADDR_SIZE];

/******************************************************************************/
/* ========================================================================== */
/*                         Initialization Section                             */
/* ========================================================================== */
/******************************************************************************/

/*******************************************************************************
**
**  onuEponDbInit
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function init onu database to default values
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK
**                   
*******************************************************************************/
MV_STATUS onuEponDbInit(void)
{
#ifndef PON_FPGA
  onuEponOnuMacTblInit();             
#endif /* PON_FPGA */
  onuEponOnuGenTblInit();             
  onuEponDbOnuDatapathTblInit();      

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbReInit
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function re-init onu database to default values
**               
**  PARAMETERS:  MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK
**                   
*******************************************************************************/
MV_STATUS onuEponDbReInit(MV_U32 macId)
{
  /* set onu to state 01 */
  onuEponDbOnuStateSet(ONU_EPON_02_REGISTER_PENDING, macId);

  /* set onu sync time to 0 */
  onuEponDbOnuSyncTimeSet(0, macId);

  onuEponDbPktTxLlidSet(ONU_DEF_TX_LLID, macId);
  onuEponDbPktRxLlidSet(ONU_DEF_RX_LLID, macId);

  if (macId == 0)
    onuPonLedHandler(ONU_PON_SYNC_LED, ACTIVE_LED_BLINK_SLOW);

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponOnuGenTblInit
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function init onu database MAC table
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK
**                   
*******************************************************************************/
MV_STATUS onuEponOnuMacTblInit(void)
{
  MV_U32 macId;
  MV_U8  macAddrSkeleton[MV_MAC_ADDR_SIZE];

  memcpy(macAddrSkeleton, mvMacAddr[2], MV_MAC_ADDR_SIZE);
  printk("macAddrSkeleton = %x:%x:%x:%x:%x:%x\n\r", 
         macAddrSkeleton[0], macAddrSkeleton[1], macAddrSkeleton[2],
         macAddrSkeleton[3], macAddrSkeleton[4], macAddrSkeleton[5]);

  for (macId = 0; macId < EPON_MAX_MAC_NUM; macId++) 
  {
    memcpy(fixMacAddrs[macId], macAddrSkeleton, MV_MAC_ADDR_SIZE);

    macAddrSkeleton[5]++;
    if (macAddrSkeleton[5] == 0x10) 
        macAddrSkeleton[5] = 0;

    printk("mac -%d- macAddr = %x:%x:%x:%x:%x:%x\n\r", macId,
           fixMacAddrs[macId][0], fixMacAddrs[macId][1], fixMacAddrs[macId][2],
           fixMacAddrs[macId][3], fixMacAddrs[macId][4], fixMacAddrs[macId][5]);
  }


  return(MV_OK); 
}

/*******************************************************************************
**
**  onuEponOnuGenTblInit
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function init onu database general table
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK
**                   
*******************************************************************************/
MV_STATUS onuEponOnuGenTblInit(void)
{
	MV_U32 macAddrLow;
	MV_U32 macAddrHigh;
	MV_U32 macId;
	MV_U32 queueSet;
	MV_U32 queueId;

	/* clear onu database general table */
	memset ((&(onuEponDb_s.onuEponGenTbl_s)), 0, sizeof (S_OnuEponGenTbl));

	/* set onu control type to MPCP - 8808 */
	onuEponDbOnuCtrlTypeSet(ONU_MPCP_CTRL_TYPE);

	/* set onu broadcast address */
	onuEponDbOnuBcastAddrSet(ONU_BROADCAST_ADDR_LOW, ONU_BROADCAST_ADDR_HIGH);

	for (macId = 0; macId < EPON_MAX_MAC_NUM; macId++) {
		/* set onu to valid */
		onuEponDbOnuValidSet(MV_TRUE, macId);

		/* set onu to state 01 */
		onuEponDbOnuStateSet(ONU_EPON_02_REGISTER_PENDING, macId);

		/* set onu sync time to 0 */
		onuEponDbOnuSyncTimeSet(0, macId);

		/* set onu mac address */
		macAddrLow  = ((fixMacAddrs[macId][5] & 0xFF)      ) |
			      ((fixMacAddrs[macId][4] & 0xFF) <<  8) |
			      ((fixMacAddrs[macId][3] & 0xFF) << 16) |
			      ((fixMacAddrs[macId][2] & 0xFF) << 24);
		macAddrHigh = ((fixMacAddrs[macId][1] & 0xFF)      ) |
			      ((fixMacAddrs[macId][0] & 0xFF) << 8 );

		onuEponDbOnuMacAddrSet(macAddrLow, macAddrHigh, macId);
	}

	/* set led */
	onuPonLedHandler(ONU_PON_SYNC_LED, ACTIVE_LED_BLINK_SLOW);

	/* set holdover */
	onuEponDbOnuHoldoverStateSet(ONU_HOLDOVER_NOT_ACTIVE);
    onuEponDbOnuHoldoverTimeSet(ONU_PON_TIMER_HOLDOVER_INTERVAL);
    onuEponDbOnuOpticalLosTimeSet(0);

    onuEponDbOnuPowerSavingMaxSleepDurationSet(ONU_PON_TIMER_MAX_SLEEP_INTERVAL);
    onuEponDbOnuPowerSavingWakeupSet(0);
    onuEponDbOnuSleepModeSet(E_EPON_SLEEP_MODE_CTRL_TX);
    onuEponDbOnuSleepDurationSet(ONU_PON_TIMER_SLEEP_DURATION);
    onuEponDbOnuWakeupDurationSet(ONU_PON_TIMER_WAKEUP_DURATION);
    onuEponDbOnuSleepWakeupStatusSet(E_EPON_NOT_POWER_SAVING_STATUS);

	/* set silence */
	onuEponDbOnuSilenceStateSet(ONU_SILENCE_NOT_ACTIVE);

	/* SW DBA params */
	onuEponDbOnuSwRprtTimerTypeSet(ONU_EPON_SW_DBA_RPRT_TIMER);
	onuEponDbOnuSwRprtMacTimerIntervalSet(62500); /* 1 msec in 16nano units */

	onuEponDbOnuDbaModeSet(ONU_DBA_SW_RPRT_MODE);
	onuEponDbOnuDbaSwModeQueuesetDirSet(ONU_DBA_SW_RPRT_NORMAL_DIR);
	onuEponDbOnuDbaSwModeQueueDirSet(ONU_DBA_SW_RPRT_NORMAL_DIR);

	for (macId = 0; macId < EPON_MAX_MAC_NUM; macId++) {
		if (macId == 0)
			onuEponDbOnuDbaLlidActiveStatusSet(ONU_DBA_ACTIVE_LLID, macId);
		else
			onuEponDbOnuDbaLlidActiveStatusSet(ONU_DBA_NON_ACTIVE_LLID, macId);

		onuEponDbOnuDbaHighestReportQueueSet(ONU_DBA_DEF_HIGHEST_QUEUE, macId);
		onuEponDbOnuDbaNumOfQueuesSet(ONU_DBA_DEF_NUM_OF_QUEUE, macId);
		onuEponDbOnuDbaNumOfQueuesetSet(ONU_DBA_DEF_NUM_OF_QUEUESET, macId);
		onuEponDbOnuDbaQueuesBitMapSet(ONU_DBA_DEF_QUEUES_BIT_MAP, macId);

		for (queueSet = 0; queueSet < ONU_DBA_DEF_NUM_OF_QUEUESET; queueSet++) {
			for (queueId = 0; queueId < ONU_DBA_DEF_NUM_OF_QUEUE; queueId++) {
				if (queueSet == 0)
					onuEponDbOnuDbaQueueThresholdSet(ONU_DBA_DEF_QUEUESET_DEF_THRESHOLD,
									 1, queueId, queueSet, macId);
				else if (queueSet == 1)
					onuEponDbOnuDbaQueueThresholdSet(ONU_DBA_DEF_QUEUESET_DEF_THRESHOLD,
									 1, queueId, queueSet, macId);
				else if (queueSet == 2)
					onuEponDbOnuDbaQueueThresholdSet(ONU_DBA_DEF_QUEUESET_DEF_THRESHOLD,
									 1, queueId, queueSet, macId);
				else
					onuEponDbOnuDbaQueueThresholdSet(ONU_DBA_DEF_QUEUESET_DEF_THRESHOLD,
									 1, queueId, queueSet, macId);
			}
		}
	}

	/* set onu configuration */
	onuEponDbOnuCfgSet(ONU_REG_REQ_AUTO_RES,
			   ONU_REG_ACK_AUTO_RES,
			   ONU_REPORT_AUTO_RES,
			   ONU_RX_PCS_FEC_DIS,
			   ONU_TX_PCS_FEC_DIS,
			   ONU_TX_FEC_DIS);

	onuEponDbOnuRxFecCfgSet(ONU_RX_PCS_FEC_DIS);

	onuEponDbStatusNotifySet(NULL);
	onuEponDbDgCallbackSet(NULL);
	onuEponDbModeSet(E_EPON_IOCTL_STD_MODE);

	return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDatapathTblInit
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function init onu database data path table
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     None
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDatapathTblInit(void)
{
  MV_U32 macId;

  /* clear onu database data path table */
  memset ((&(onuEponDb_s.onuEponDataPathTbl_s)), 0, sizeof (S_OnuEponDatapathTbl));

  for (macId = 0; macId < EPON_MAX_MAC_NUM; macId++) 
  {
    onuEponDb_s.onuEponDataPathTbl_s.onuEponRxLLID[macId] = ONU_UNUSED_LLID;
    onuEponDb_s.onuEponDataPathTbl_s.onuEponTxLLID[macId] = ONU_UNUSED_LLID;

    onuEponDbPktTxLlidSet(ONU_DEF_TX_LLID, macId);
    onuEponDbPktRxLlidSet(ONU_DEF_RX_LLID, macId);
  }

  onuEponDbPktForwardSet(ONU_SLOW_FRAME_TO_CTRL_QUEUE,  
                         ONU_SLOW_FRAME_TO_RPRT_QUEUE,  
                         ONU_RPRT_FRAME_TO_RPRT_QUEUE,  
                         ONU_RPRT_FRAME_TO_DATA_QUEUE,  
                         ONU_CTRL_FRAME_TO_CTRL_QUEUE,  
                         ONU_CTRL_FRAME_TO_DATA_QUEUE); 

  onuEponDbPktFilterPacketSet(ONU_FORWARD_LLID_ALL_PKT, 
                              ONU_FORWARD_LLID_XXXX_MODE_1_PKT, 
                              ONU_FORWARD_LLID_7FFF_MODE_1_PKT, 
                              ONU_FORWARD_LLID_7FFF_MODE_0_PKT, 
                              ONU_DROP_LLID_NNNN_MODE_1_PKT);

  onuEponDbPktFilterErrorSet(ONU_FORWARD_LLID_LEN_ERR_PKT, 
                             ONU_FORWARD_LLID_GMII_ERR_PKT, 
                             ONU_FORWARD_LLID_FCS_ERR_PKT, 
                             ONU_FORWARD_LLID_CRC_ERR_PKT);

  onuEponDbPktSizeSet(ONU_DEF_MIN_PKT_SIZE, ONU_DEF_MAX_PKT_SIZE);

  return(MV_OK);
}

/******************************************************************************/
/* ========================================================================== */
/*                         Interface Section                                  */
/* ========================================================================== */
/******************************************************************************/

/********************************************/
/* ======================================== */
/*   ONU EPON General Table API Functions   */
/* ======================================== */
/********************************************/
MV_STATUS matchDestAddressToMacId(MV_U8 *destAddr, MV_U32 *macId)
{
  MV_U32 addrIndex;

  for (addrIndex = 0; addrIndex < EPON_MAX_MAC_NUM; addrIndex++) 
  {
    if (memcmp(fixMacAddrs[addrIndex], destAddr, 6) == 0)
    {
      *macId = addrIndex;
      return(MV_OK);
    }
  }

  return(MV_ERROR);
}

/*******************************************************************************
**
**  onuEponDbOnuValidSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu valid in the database
**               
**  PARAMETERS:  MV_BOOL onuValid  
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuValidSet(MV_BOOL onuValid, MV_U32 macId)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponValid[macId] = onuValid;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuValidGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu valid 
**               
**  PARAMETERS:  MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     onu state
**                   
*******************************************************************************/
MV_BOOL onuEponDbOnuValidGet(MV_U32 macId)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponValid[macId]);
}

/*******************************************************************************
**
**  onuEponDbOnuStateSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu state in the database
**               
**  PARAMETERS:  MV_U32 onuState - ONU_EPON_02_REGISTER_PENDING
**                                 ONU_EPON_03_OPERATION         
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuStateSet(MV_U32 onuState, MV_U32 macId)
{
  if ((onuState < ONU_EPON_02_REGISTER_PENDING) ||
      (onuState > ONU_EPON_03_OPERATION))
  {
    return(MV_ERROR);
  }

  onuEponDb_s.onuEponGenTbl_s.onuEponState[macId] = onuState;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuStateGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu state 
**               
**  PARAMETERS:  MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     onu state
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuStateGet(MV_U32 macId)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponState[macId]);
}

/*******************************************************************************
**
**  onuEponDbOnuSignalDetectSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu signal detect in the database
**               
**  PARAMETERS:  MV_U32 state       
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuSignalDetectSet(MV_U32 state)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponSignalDetect = state;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuSignalDetectGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu state signal detect
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     onu state
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuSignalDetectGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponSignalDetect);
}

/*******************************************************************************
**
**  onuEponDbOnuDsSyncOkPcsSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu ds sync OK PCS in the database
**               
**  PARAMETERS:  MV_U32 state       
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDsSyncOkPcsSet(MV_U32 state)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDsSyncOkPcs = state;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDsSyncOkPcsGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu ds sync OK PCS
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     onu state
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuDsSyncOkPcsGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponDsSyncOkPcs);
}

/*******************************************************************************
**
**  onuEponDbOnuCtrlTypeSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu ether type in the database
**               
**  PARAMETERS:  MV_U32 ctrlType 
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuCtrlTypeSet(MV_U32 ctrlType)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponCtrlType = ctrlType;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuCtrlTypeGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu ether type 
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuCtrlTypeGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponCtrlType);
}

/*******************************************************************************
**
**  onuEponDbOnuSyncTimeSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu sync time in the database
**               
**  PARAMETERS:  MV_U32 syncTime
**               MV_U32 macId 
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuSyncTimeSet(MV_U32 syncTime, MV_U32 macId)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponSyncTime[macId] = syncTime;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuSyncTimeGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu sync time
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     onu sync time
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuSyncTimeGet(MV_U32 macId)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponSyncTime[macId]);
}

/*******************************************************************************
**
**  onuEponDbOnuMacAddrSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu mac address in the database
**               
**  PARAMETERS:  MV_U32 lowAddr
**               MV_U32 highAddr
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuMacAddrSet(MV_U32 lowAddr, MV_U32 highAddr, MV_U32 macId)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponMacAddr[macId].addressLow  = lowAddr;
  onuEponDb_s.onuEponGenTbl_s.onuEponMacAddr[macId].addressHigh = highAddr;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuMacAddrGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu mac address in the database
**               
**  PARAMETERS:  MV_U32 *lowAddr
**               MV_U32 *highAddr
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuMacAddrGet(MV_U32 *lowAddr, MV_U32 *highAddr, MV_U32 macId)
{
  *lowAddr  = onuEponDb_s.onuEponGenTbl_s.onuEponMacAddr[macId].addressLow; 
  *highAddr = onuEponDb_s.onuEponGenTbl_s.onuEponMacAddr[macId].addressHigh; 

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuBcastAddrSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu mac broadcast address in the database
**               
**  PARAMETERS:  MV_U32 lowAddr
**               MV_U32 highAddr
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuBcastAddrSet(MV_U32 lowAddr, MV_U32 highAddr)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponBcastAddr.addressLow  = lowAddr;
  onuEponDb_s.onuEponGenTbl_s.onuEponBcastAddr.addressHigh = highAddr;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuMacAddrGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu mac broadcast address in the database
**               
**  PARAMETERS:  MV_U32 *lowAddr
**               MV_U32 *highAddr
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuBcastAddrGet(MV_U32 *lowAddr, MV_U32 *highAddr)
{
  *lowAddr  = onuEponDb_s.onuEponGenTbl_s.onuEponBcastAddr.addressLow; 
  *highAddr = onuEponDb_s.onuEponGenTbl_s.onuEponBcastAddr.addressHigh; 

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuCfgAutoSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu mac auto configuration in the database
**               
**  PARAMETERS:  MV_U32 regReqAutoRes
**               MV_U32 regAckAutoRes
**               MV_U32 reportAutoRes
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuCfgAutoSet(MV_U32 regReqAutoRes, 
                                 MV_U32 regAckAutoRes, 
                                 MV_U32 reportAutoRes)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRegReqAutoRes = regReqAutoRes;
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRegAckAutoRes = regAckAutoRes;
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponReportAutoRes = reportAutoRes;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuCfgSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu mac configuration in the database
**               
**  PARAMETERS:  MV_U32 regReqAutoRes
**               MV_U32 regAckAutoRes
**               MV_U32 reportAutoRes
**               MV_U32 rxPcsFecEn        
**               MV_U32 txPcsFecEn   
**               MV_U32 txFecEn     
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuCfgSet(MV_U32 regReqAutoRes, 
                             MV_U32 regAckAutoRes, 
                             MV_U32 reportAutoRes, 
                             MV_U32 rxPcsFecEn, 
                             MV_U32 txPcsFecEn, 
                             MV_U32 txFecEn)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRegReqAutoRes = regReqAutoRes;
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRegAckAutoRes = regAckAutoRes;
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponReportAutoRes = reportAutoRes;
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRxPcsFecEn    = rxPcsFecEn;      
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponTxPcsFecEn    = txPcsFecEn;      
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponTxFecEn       = txFecEn;      

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuCfgGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu mac configuration in the database
**               
**  PARAMETERS:  MV_U32 regReqAutoRes
**               MV_U32 regAckAutoRes
**               MV_U32 reportAutoRes
**               MV_U32 rxFec        
**               MV_U32 txFec        
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuCfgGet(MV_U32 *regReqAutoRes, 
                             MV_U32 *regAckAutoRes, 
                             MV_U32 *reportAutoRes, 
                             MV_U32 *rxPcsFecEn, 
                             MV_U32 *txPcsFecEn,
                             MV_U32 *txFecEn)
{
  *regReqAutoRes = onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRegReqAutoRes;
  *regAckAutoRes = onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRegAckAutoRes;
  *reportAutoRes = onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponReportAutoRes;
  *rxPcsFecEn    = onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRxPcsFecEn;      
  *txPcsFecEn    = onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponTxPcsFecEn;      
  *txFecEn       = onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponTxFecEn;
                  
  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuRxFecCfgSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu mac Rx FEC configuration in the database
**               
**  PARAMETERS:  MV_U32 rxPcsFecEn        
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuRxFecCfgSet(MV_U32 rxPcsFecEn)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRxPcsFecEn = rxPcsFecEn;      

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuRxFecCfgGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu mac Rx FEC configuration in the database
**               
**  PARAMETERS:  MV_U32 rxFec        
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuRxFecCfgGet(MV_U32 *rxPcsFecEn)
{
  *rxPcsFecEn = onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponRxPcsFecEn;      
                  
  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuTxFecCfgGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu mac Tx FEC configuration in the database
**               
**  PARAMETERS:  MV_U32 txFec   
**               MV_U32 macId     
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuTxFecCfgGet(MV_U32 *txFecEn, MV_U32 macId)
{
  *txFecEn = ((onuEponDb_s.onuEponGenTbl_s.onuEponCfg.onuEponTxFecEn >> macId) & 0x1);      
                  
  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaModeSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu DBA mode 
**               
**  PARAMETERS:  MV_U32 mode - HW(0) SW(1)
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaModeSet(MV_U32 mode)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDbaMode = mode;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaModeSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu DBA mode 
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 mode - HW(0) SW(1)
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuDbaModeGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponDbaMode);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaSwModeQueuesetDirSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu SW mode queueset direction  
**               
**  PARAMETERS:  MV_U32 dir - Normal(0) Reverse(1)
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaSwModeQueuesetDirSet(MV_U32 dir)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDbaSwQueuesetDir = dir;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaSwModeQueuesetDirGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu SW mode queueset direction
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 dir - Normal(0) Reverse(1)
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuDbaSwModeQueuesetDirGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponDbaSwQueuesetDir);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaSwModeQueueDirSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu SW mode queues direction  
**               
**  PARAMETERS:  MV_U32 dir - Normal(0) Reverse(1)
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaSwModeQueueDirSet(MV_U32 dir)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDbaSwQueueDir = dir;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaSwModeQueueDirGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu SW mode queues direction
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 dir - Normal(0) Reverse(1)
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuDbaSwModeQueueDirGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponDbaSwQueueDir);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaLlidActiveStatusSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu DBA LLID active status 
**               
**  PARAMETERS:  MV_U32 status - Off(0) On(1)
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaLlidActiveStatusSet(MV_U32 status, MV_U32 macId)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].active = status;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaLlidActiveStatusGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu DBA mode 
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 status - Off(0) On(1)
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuDbaLlidActiveStatusGet(MV_U32 macId)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].active);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaHighestReportQueueSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu highest DBA report queue
**               
**  PARAMETERS:  MV_U32 queueNum 
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaHighestReportQueueSet(MV_U32 queueNum, MV_U32 macId)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].highestReportQueue = queueNum;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaHighestReportQueueGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu highest DBA report queue
**               
**  PARAMETERS:  MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuDbaHighestReportQueueGet(MV_U32 macId)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].highestReportQueue);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaQueuesBitMapSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu queues bit map per LLID
**               
**  PARAMETERS:  MV_U32 queuesBitMap 
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaQueuesBitMapSet(MV_U32 queuesBitMap, MV_U32 macId)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].queuesBitMap = queuesBitMap;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaQueuesBitMapGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu queues bit map per LLID
**               
**  PARAMETERS:  MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     onu queues bit map
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuDbaQueuesBitMapGet(MV_U32 macId)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].queuesBitMap);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaNumOfQueuesSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu number of queues per LLID
**               
**  PARAMETERS:  MV_U32 numOfQueues 
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaNumOfQueuesSet(MV_U32 numOfQueues, MV_U32 macId)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].numOfQueues = numOfQueues;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaNumOfQueuesGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu number of queues per LLID
**               
**  PARAMETERS:  MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuDbaNumOfQueuesGet(MV_U32 macId)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].numOfQueues);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaNumOfQueuesetSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu number of queueset per LLID
**               
**  PARAMETERS:  MV_U32 numOfQueueset 
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaNumOfQueuesetSet(MV_U32 numOfQueueset, MV_U32 macId)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].numOfQueueSets = numOfQueueset;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaNumOfQueuesetGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu number of queueset per LLID
**               
**  PARAMETERS:  MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuDbaNumOfQueuesetGet(MV_U32 macId)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].numOfQueueSets);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaQueueThresholdSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu queue threshold per LLID
**               
**  PARAMETERS:  MV_U32 threshold  
**               MV_U32 state
**               MV_U32 queueId 
**               MV_U32 queueSet
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaQueueThresholdSet(MV_U32 threshold, 
										   MV_U32 state, 
										   MV_U32 queueId, 
										   MV_U32 queueSet, 
										   MV_U32 macId)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].queueThreshold[queueSet][queueId].threshold = threshold;
  onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].queueThreshold[queueSet][queueId].state     = state;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaQueueThresholdGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu queue threshold per LLID
**               
**  PARAMETERS:  MV_U32 *threshold  
**               MV_U32 *state
**               MV_U32 queueId 
**               MV_U32 queueSet
**               MV_U32 macId
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaQueueThresholdGet(MV_U32 *threshold, 
										   MV_U32 *state, 
										   MV_U32 queueId, 
										   MV_U32 queueSet,
										   MV_U32 macId)
{
  *threshold = onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].queueThreshold[queueSet][queueId].threshold; 
  *state     = onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId].queueThreshold[queueSet][queueId].state; 

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuDbaLlidThresholdGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu llid threshold per LLID
**               
**  PARAMETERS:  S_OnuEponDba *llidDba 
**               MV_U32        macId
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuDbaLlidThresholdGet(S_OnuEponDba *llidDba, MV_U32 macId)
{
  memcpy(llidDba, &(onuEponDb_s.onuEponGenTbl_s.onuEponDba[macId]), sizeof(S_OnuEponDba));

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuHoldoverStateSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu holdover state in the database
**               
**  PARAMETERS:  MV_U32 state 
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuHoldoverStateSet(MV_U32 state)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponHoldoverState = state;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuHoldoverStateGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu holdover state
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuHoldoverStateGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponHoldoverState);
}
/*******************************************************************************
**
**  onuEponDbOnuHoldoverTimeSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu holdover time in the database
**               
**  PARAMETERS:  MV_U32 time 
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuHoldoverTimeSet(MV_U32 time)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponHoldoverTime = time;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuHoldoverTimeGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu holdover time
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuHoldoverTimeGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponHoldoverTime);
}

/*******************************************************************************
**
**  onuEponDbOnuHoldoverExecSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu holdover execute in the database
**               
**  PARAMETERS:  MV_U32 state 
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuHoldoverExecSet(MV_U32 state)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponHoldoverExecute = state;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuHoldoverExecGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu holdover execute
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuHoldoverExecGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponHoldoverExecute);
}

/*******************************************************************************
 **
 **  onuEponDbOnuOpticalLosTimeSet
 **  ____________________________________________________________________________
 ** 
 **  DESCRIPTION: The function sets time duration value in database 
 **               when no optical signal is detected
 **               
 **  PARAMETERS:  losTime - time duration
 **
 **  OUTPUTS:     None
 **
 **  RETURNS:     
 **                   
 *******************************************************************************/
MV_STATUS onuEponDbOnuOpticalLosTimeSet(MV_U16 losTime)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponOpticalLosTime = losTime;
    
    return MV_OK;
}

/*******************************************************************************
**
**  onuEponDbOnuOpticalLosTimeGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns time duration to be used 
**               when no optical signal is detected
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     time duration value
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuOpticalLosTimeGet()
{
    return onuEponDb_s.onuEponGenTbl_s.onuEponOpticalLosTime;
}

/*******************************************************************************
 **
 **  onuEponDbOnuMacLosTimeSet
 **  ____________________________________________________________________________
 ** 
 **  DESCRIPTION: The function sets time duration value in database 
 **               when no GATE MPCPDU is received
 **
 **  PARAMETERS:  losTime - time duration
 **
 **  OUTPUTS:     None
 **
 **  RETURNS:     
 **                   
 *******************************************************************************/
MV_STATUS onuEponDbOnuMacLosTimeSet(MV_U16 losTime)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponMacLosTime = losTime;
    
    return MV_OK;
}

/*******************************************************************************
**
**  onuEponDbOnuMacLosTimeGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns time duration to be used 
**               when no GATE MPCPDU is received
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     time duration value
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuMacLosTimeGet()
{
    return onuEponDb_s.onuEponGenTbl_s.onuEponMacLosTime;
}

/*******************************************************************************
 **
 **  onuEponDbOnuPowerSavingWakeupSet
 **  ____________________________________________________________________________
 ** 
 **  DESCRIPTION: The function sets the support for early wakeup 
 **               in power saving mode
 **
 **  PARAMETERS:  wakeUpEnable - Enable or disable the early wakeup support
 **
 **  OUTPUTS:     None
 **
 **  RETURNS:     
 **                   
 *******************************************************************************/
MV_STATUS onuEponDbOnuPowerSavingWakeupSet(MV_U8 wakeUpEnable)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponPowerSavingWakeup = wakeUpEnable;

    return (MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuPowerSavingWakeupGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns the support for early wakeup
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     enable or disable
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuPowerSavingWakeupGet()
{
    return onuEponDb_s.onuEponGenTbl_s.onuEponPowerSavingWakeup;
}

/*******************************************************************************
 **
 **  onuEponDbOnuPowerSavingMaxSleepDurationSet
 **  ____________________________________________________________________________
 ** 
 **  DESCRIPTION: The function sets the max sleep duration 
 **               in power saving mode
 **
 **  PARAMETERS:  maxSleepDuration - max sleep duration
 **
 **  OUTPUTS:     None
 **
 **  RETURNS:     
 **                   
 *******************************************************************************/
MV_STATUS onuEponDbOnuPowerSavingMaxSleepDurationSet(MV_U64 maxSleepDuration)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponPowerSavingMaxSleepDuration= maxSleepDuration;

    return (MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuPowerSavingMaxSleepDurationGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns the max sleep duration in power saving mode
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     max sleep duration
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuPowerSavingMaxSleepDurationGet()
{
    return onuEponDb_s.onuEponGenTbl_s.onuEponPowerSavingMaxSleepDuration;
}

/*******************************************************************************
 **
 **  onuEponDbOnuSleepModeSet
 **  ____________________________________________________________________________
 ** 
 **  DESCRIPTION: The function sets control mode for power saving
 **
 **  PARAMETERS:  mode - turn off tx or tx/rx
 **
 **  OUTPUTS:     None
 **
 **  RETURNS:     
 **                   
 *******************************************************************************/
MV_STATUS onuEponDbOnuSleepModeSet(MV_U8 mode)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponSleepMode = mode;

    return MV_OK;
}

/*******************************************************************************
**
**  onuEponDbOnuSleepModeGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns the sleep mode for power saving mode
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     sleep mode
**                   
*******************************************************************************/
E_EponSleepCtrlMode onuEponDbOnuSleepModeGet()
{
    return onuEponDb_s.onuEponGenTbl_s.onuEponSleepMode;
}

/*******************************************************************************
 **
 **  onuEponDbOnuSleepDurationSet
 **  ____________________________________________________________________________
 ** 
 **  DESCRIPTION: The function sets the periodical sleep duration 
 **               for power saving
 **
 **  PARAMETERS:  sleepDuration - periodical sleep duration
 **
 **  OUTPUTS:     None
 **
 **  RETURNS:     
 **                   
 *******************************************************************************/
MV_STATUS onuEponDbOnuSleepDurationSet(MV_U32 sleepDuration)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponSleepDuration = sleepDuration;

    return MV_OK;
}

/*******************************************************************************
**
**  onuEponDbOnuSleepDurationGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns the periodical sleep duration for power saving
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     max sleep duration
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuSleepDurationGet()
{
    return onuEponDb_s.onuEponGenTbl_s.onuEponSleepDuration;
}

/*******************************************************************************
 **
 **  onuEponDbOnuWakeupDurationSet
 **  ____________________________________________________________________________
 ** 
 **  DESCRIPTION: The function sets the periodical wakeup duration 
 **               for power saving
 **
 **  PARAMETERS:  wakeupDuration - periodical wakeup duration
 **
 **  OUTPUTS:     None
 **
 **  RETURNS:     
 **                   
 *******************************************************************************/
MV_STATUS onuEponDbOnuWakeupDurationSet(MV_U32 wakeupDuration)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponWakeupDuration = wakeupDuration;

    return MV_OK;
}

/*******************************************************************************
**
**  onuEponDbOnuWakeupDurationGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns the periodical wakeup duration for power saving
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     max sleep duration
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuWakeupDurationGet()
{
    return onuEponDb_s.onuEponGenTbl_s.onuEponWakeupDuration;
}

/*******************************************************************************
 **
 **  onuEponDbOnuSleepWakeupStatusSet
 **  ____________________________________________________________________________
 ** 
 **  DESCRIPTION: The function sets power saving status
 **
 **  PARAMETERS:  status - no power saving/sleep/wakeup
 **
 **  OUTPUTS:     None
 **
 **  RETURNS:     
 **                   
 *******************************************************************************/
MV_STATUS onuEponDbOnuSleepWakeupStatusSet(MV_U32 status)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponPowerSavingStatus = status;
}

/*******************************************************************************
**
**  onuEponDbOnuSleepWakeupStatusGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns the power saving status
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     power saving status
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuSleepWakeupStatusGet()
{
    return onuEponDb_s.onuEponGenTbl_s.onuEponPowerSavingStatus;
}

/*******************************************************************************
**
**  onuEponDbOnuSilenceStateSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu silence state in the database
**               
**  PARAMETERS:  MV_U32 state 
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuSilenceStateSet(MV_U32 state)
{
  onuEponDb_s.onuEponGenTbl_s.onuEponSilenceState = state;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuSilenceStateGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu silence state
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     ctrl frame ether type
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuSilenceStateGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuEponSilenceState);
}

/********************************************/
/* ======================================== */
/*   ONU EPON DataPath Table API Functions  */
/* ======================================== */
/********************************************/

/*******************************************************************************
**
**  onuEponDbPktSizeSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu mac RX packet size
**               
**  PARAMETERS:  MV_U32 minSize 
**               MV_U32 maxSize
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktSizeSet(MV_U32 minSize, MV_U32 maxSize)
{
  onuEponDb_s.onuEponDataPathTbl_s.onuEponRxPktMinSize = minSize;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponRxPktMaxSize = maxSize;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktSizeGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu mac RX packet size
**               
**  PARAMETERS:  MV_U32 *minSize 
**               MV_U32 *maxSize
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktSizeGet(MV_U32 *minSize, MV_U32 *maxSize)
{
 *minSize = onuEponDb_s.onuEponDataPathTbl_s.onuEponRxPktMinSize;  
 *maxSize = onuEponDb_s.onuEponDataPathTbl_s.onuEponRxPktMaxSize;  

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktFilterPacketSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu filter packet configuration
**               
**  PARAMETERS:  MV_U32 forwardLlidAll 
**               MV_U32 forwardLlid1XXX
**               MV_U32 forwardLlid1FFF
**               MV_U32 forwardLlid0FFF
**               MV_U32 dropLlid1NNN
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktFilterPacketSet(MV_U32 forwardLlidAll, 
                                      MV_U32 forwardLlid1XXX, 
                                      MV_U32 forwardLlid1FFF, 
                                      MV_U32 forwardLlid0FFF,
                                      MV_U32 dropLlid1NNN)
{
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.forwardLlidAll  = forwardLlidAll;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.forwardLlid1XXX = forwardLlid1XXX;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.forwardLlid1FFF = forwardLlid1FFF;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.forwardLlid0FFF = forwardLlid0FFF;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.dropLlid1NNN    = dropLlid1NNN;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktFilterPacketGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu filter packet configuration
**               
**  PARAMETERS:  MV_U32 *forwardLlidAll 
**               MV_U32 *forwardLlid1XXX
**               MV_U32 *forwardLlid1FFF
**               MV_U32 *forwardLlid0FFF
**               MV_U32 *dropLlid1NNN
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktFilterPacketGet(MV_U32 *forwardLlidAll, 
                                      MV_U32 *forwardLlid1XXX, 
                                      MV_U32 *forwardLlid1FFF, 
                                      MV_U32 *forwardLlid0FFF,
                                      MV_U32 *dropLlid1NNN)
{
  *forwardLlidAll  = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.forwardLlidAll; 
  *forwardLlid1XXX = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.forwardLlid1XXX;
  *forwardLlid1FFF = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.forwardLlid1FFF;
  *forwardLlid0FFF = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.forwardLlid0FFF;
  *dropLlid1NNN    = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.dropLlid1NNN;


  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktFilterErrorSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu filter error configuration
**               
**  PARAMETERS:  MV_U32 ignoreLenErr   
**               MV_U32 ignoreGmiiErr  
**               MV_U32 ignoreFcsErr   
**               MV_U32 ignoreLlidCrcErr
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktFilterErrorSet(MV_U32 ignoreLenErr, 
                                     MV_U32 ignoreGmiiErr, 
                                     MV_U32 ignoreFcsErr, 
                                     MV_U32 ignoreLlidCrcErr)
{
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.ignoreLenErr     = ignoreLenErr;   
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.ignoreGmiiErr    = ignoreGmiiErr;  
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.ignoreFcsErr     = ignoreFcsErr;   
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.ignoreLlidCrcErr = ignoreLlidCrcErr;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktFilterErrorGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu filter error configuration
**               
**  PARAMETERS:  MV_U32 *ignoreLenErr   
**               MV_U32 *ignoreGmiiErr  
**               MV_U32 *ignoreFcsErr   
**               MV_U32 *ignoreLlidCrcErr
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktFilterErrorGet(MV_U32 *ignoreLenErr, 
                                     MV_U32 *ignoreGmiiErr, 
                                     MV_U32 *ignoreFcsErr, 
                                     MV_U32 *ignoreLlidCrcErr)
{
  *ignoreLenErr     = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.ignoreLenErr;  
  *ignoreGmiiErr    = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.ignoreGmiiErr; 
  *ignoreFcsErr     = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.ignoreFcsErr;  
  *ignoreLlidCrcErr = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktFilter.ignoreLlidCrcErr; 

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktForwardSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu forwarding configuration
**               
**  PARAMETERS:  MV_U32 slowFrameToCtrlQueue
**               MV_U32 slowFrameToRprtQueue
**               MV_U32 rprtFrameToRprtQueue
**               MV_U32 rprtFrameToDataQueue
**               MV_U32 ctrlFrameToCtrlQueue
**               MV_U32 ctrlFrameToDataQueue
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktForwardSet(MV_U32 slowFrameToCtrlQueue, 
                                 MV_U32 slowFrameToRprtQueue,
                                 MV_U32 rprtFrameToRprtQueue, 
                                 MV_U32 rprtFrameToDataQueue,
                                 MV_U32 ctrlFrameToCtrlQueue, 
                                 MV_U32 ctrlFrameToDataQueue)
{
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.slowFrameToCtrlQueue = slowFrameToCtrlQueue;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.slowFrameToRprtQueue = slowFrameToRprtQueue;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.rprtFrameToRprtQueue = rprtFrameToRprtQueue;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.rprtFrameToDataQueue = rprtFrameToDataQueue;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.ctrlFrameToCtrlQueue = ctrlFrameToCtrlQueue;
  onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.ctrlFrameToDataQueue = ctrlFrameToDataQueue;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktForwardGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu forwarding configuration
**               
**  PARAMETERS:  MV_U32 *slowFrameToCtrlQueue
**               MV_U32 *slowFrameToRprtQueue
**               MV_U32 *rprtFrameToRprtQueue
**               MV_U32 *rprtFrameToDataQueue
**               MV_U32 *ctrlFrameToCtrlQueue
**               MV_U32 *ctrlFrameToDataQueue
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktForwardGet(MV_U32 *slowFrameToCtrlQueue, 
                                 MV_U32 *slowFrameToRprtQueue,
                                 MV_U32 *rprtFrameToRprtQueue, 
                                 MV_U32 *rprtFrameToDataQueue,
                                 MV_U32 *ctrlFrameToCtrlQueue, 
                                 MV_U32 *ctrlFrameToDataQueue)
{
  *slowFrameToCtrlQueue = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.slowFrameToCtrlQueue;
  *slowFrameToRprtQueue = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.slowFrameToRprtQueue;
  *rprtFrameToRprtQueue = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.rprtFrameToRprtQueue;
  *rprtFrameToDataQueue = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.rprtFrameToDataQueue;
  *ctrlFrameToCtrlQueue = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.ctrlFrameToCtrlQueue;
  *ctrlFrameToDataQueue = onuEponDb_s.onuEponDataPathTbl_s.onuEponPktForward.ctrlFrameToDataQueue;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktRxLlidSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu Rx LLID
**               
**  PARAMETERS:  MV_U32 llid 
**               MV_U32 index
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktRxLlidSet(MV_U32 llid, MV_U32 index)
{
  if (index >= EPON_MAX_MAC_NUM) 
    return(MV_ERROR);

  onuEponDb_s.onuEponDataPathTbl_s.onuEponRxLLID[index] = llid;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktRxLlidGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu Rx LLID
**               
**  PARAMETERS:  MV_U32 *llid 
**               MV_U32 index
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktRxLlidGet(MV_U32 *llid, MV_U32 index)
{
  if (index >= EPON_MAX_MAC_NUM) 
    return(MV_ERROR);

  *llid = onuEponDb_s.onuEponDataPathTbl_s.onuEponRxLLID[index];

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktTxLlidSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set onu Tx LLID
**               
**  PARAMETERS:  MV_U32 llid 
**               MV_U32 index
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktTxLlidSet(MV_U32 llid, MV_U32 index)
{
  if (index >= EPON_MAX_MAC_NUM) 
    return(MV_ERROR);

  onuEponDb_s.onuEponDataPathTbl_s.onuEponTxLLID[index] = llid;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPktTxLlidGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu Tx LLID
**               
**  PARAMETERS:  MV_U32 *llid 
**               MV_U32 index
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPktTxLlidGet(MV_U32 *llid, MV_U32 index)
{
  if (index >= EPON_MAX_MAC_NUM) 
    return(MV_ERROR);

  *llid = onuEponDb_s.onuEponDataPathTbl_s.onuEponTxLLID[index];

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbStatusNotifySet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set Status Notify Callback in the database
**               
**  PARAMETERS:  STATUSNOTIFYFUNC statusCallback      
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbStatusNotifySet(STATUSNOTIFYFUNC statusCallback)
{
  onuEponDb_s.onuEponGenTbl_s.onuStatusCallback = statusCallback;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbStatusNotifyGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu Status Notify Callback
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     Status Notify Callback
**                   
*******************************************************************************/
STATUSNOTIFYFUNC onuEponDbStatusNotifyGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuStatusCallback);
}

/*******************************************************************************
**
**  onuEponDbOnuSwRprtTimerTypeSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set SW report timer type MAC or OS
**               
**  PARAMETERS:  MV_U32 timer type      
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuSwRprtTimerTypeSet(MV_U32 timerType)
{
  swRprtTimerType = timerType;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuSwRprtTimerTypeGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return SW report timer type MAC or OS
**               
**  PARAMETERS:  None     
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 timer type 
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuSwRprtTimerTypeGet(void)
{
  return(swRprtTimerType);
}

/*******************************************************************************
**
**  onuEponDbOnuSwRprtTimerTypeSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set SW report MAC timer interval
**               
**  PARAMETERS:  MV_U32 timer interval      
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOnuSwRprtMacTimerIntervalSet(MV_U32 timerInterval)
{
  swRprtMacTimerInterval = timerInterval;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOnuSwRprtMacTimerIntervalGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return SW report MAC timer interval
**               
**  PARAMETERS:  None     
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 timer interval 
**                   
*******************************************************************************/
MV_U32 onuEponDbOnuSwRprtMacTimerIntervalGet(void)
{
  return(swRprtMacTimerInterval);
}


/*******************************************************************************
**
**  onuEponDbModeSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function sets EPON mode in the database
**               
**  PARAMETERS:  MV_U32 mode
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbModeSet(MV_U32   mode)
{
    if (mode >= E_EPON_IOCTL_MAX_MODE_NUM) 
      return(MV_ERROR);

    onuEponDb_s.onuEponGenTbl_s.onuEponMode = mode;

    return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbModeGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns current EPON mode
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 mode
**                   
*******************************************************************************/
MV_U32 onuEponDbModeGet(void)
{
    return(onuEponDb_s.onuEponGenTbl_s.onuEponMode);
}

/*******************************************************************************
**
**  onuEponDbP2PForceModeSet
**  ____________________________________________________________________________
**
**  DESCRIPTION: The function sets EPON P2P Force mode in the database
**
**  PARAMETERS:  MV_U32 mode
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**
*******************************************************************************/
MV_STATUS onuEponDbP2PForceModeSet(MV_U32  forceMode)
{
    if (forceMode >= E_EPON_IOCTL_MAX_MODE_NUM)
      return(MV_ERROR);

    onuEponDb_s.onuEponGenTbl_s.onuEponP2PForceMode = forceMode;

    return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbP2PForceModeGet
**  ____________________________________________________________________________
**
**  DESCRIPTION: The function returns current EPON P2P Force mode
**
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 mode
**
*******************************************************************************/
MV_U32 onuEponDbP2PForceModeGet(void)
{
    return(onuEponDb_s.onuEponGenTbl_s.onuEponP2PForceMode);
}

/*******************************************************************************
**
**  onuEponDbPcsCfgSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function sets EPON PCS configuration register value in the database
**               
**  PARAMETERS:  MV_U32 val
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbPcsCfgSet(MV_U32   val)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponPcsCfg = val;

    return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbPcsCfgGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns EPON PCS configuration register value
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 mode
**                   
*******************************************************************************/
MV_U32 onuEponDbPcsCfgGet(void)
{
    return(onuEponDb_s.onuEponGenTbl_s.onuEponPcsCfg);
}

/*******************************************************************************
**
**  onuEponDbOverheadSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function sets EPON Overhead register value in the database
**               
**  PARAMETERS:  MV_U32 val
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbOverheadSet(MV_U32   val)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponOverHead = val;

    return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbOverheadGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function returns EPON Overhead register value
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_U32 mode
**                   
*******************************************************************************/
MV_U32 onuEponDbOverheadGet(void)
{
    return(onuEponDb_s.onuEponGenTbl_s.onuEponOverHead);
}

/*******************************************************************************
**
**  onuEponDbBurstEnablePolaritySet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function sets EPON XVR burst enable polarity value in the database
**               
**  PARAMETERS:  MV_U32 val
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbBurstEnablePolaritySet(MV_U32 val)
{
    onuEponDb_s.onuEponGenTbl_s.onuEponXvrBurstEnPolarity = val;

    return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbBurstEnablePolarityGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function gets EPON XVR burst enable polarity value in the database
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     polarity
**                   
*******************************************************************************/
MV_U32 onuEponDbBurstEnablePolarityGet(void)
{
    return onuEponDb_s.onuEponGenTbl_s.onuEponXvrBurstEnPolarity;
}

/*******************************************************************************
**
**  onuEponDbDgCallbackSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set Dying Gasp Callback in the database
**               
**  PARAMETERS:  DYINGGASPFUNC dgCallback      
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbDgCallbackSet(DYINGGASPFUNC dgCallback)
{
  onuEponDb_s.onuEponGenTbl_s.onuDgCallback = dgCallback;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbDgCallbackGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu Dying Gasp Callback
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     Dying Gasp Callback
**                   
*******************************************************************************/
DYINGGASPFUNC onuEponDbDgCallbackGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuDgCallback);
}

/*******************************************************************************
**
**  onuEponDbLinkStatusCallbackSet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function set Link Status Callback in the database
**               
**  PARAMETERS:  LINKSTATUSFUNC linkStatusCallback    
**
**  OUTPUTS:     None
**
**  RETURNS:     MV_OK or error
**                   
*******************************************************************************/
MV_STATUS onuEponDbLinkStatusCallbackSet(LINKSTATUSFUNC linkStatusCallback)
{
  onuEponDb_s.onuEponGenTbl_s.onuLinkStatusCallback = linkStatusCallback;

  return(MV_OK);
}

/*******************************************************************************
**
**  onuEponDbLinkStatusCallbackGet
**  ____________________________________________________________________________
** 
**  DESCRIPTION: The function return onu Link Status Callback
**               
**  PARAMETERS:  None
**
**  OUTPUTS:     None
**
**  RETURNS:     Link Status Callback
**                   
*******************************************************************************/
LINKSTATUSFUNC onuEponDbLinkStatusCallbackGet(void)
{
  return(onuEponDb_s.onuEponGenTbl_s.onuLinkStatusCallback);
}

