/*******************************************************************************
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        : ponOnuLnxKsOs.c                                            **
**                                                                           **
**  DESCRIPTION : This file contains ONU GPON Linux OS resources             **
*******************************************************************************
*                                                                             *                              
*  MODIFICATION HISTORY:                                                      *
*                                                                             *
*   29Oct06  Oren Ben Hayun   created                                         *  
* =========================================================================== *      
******************************************************************************/
#ifndef _ONU_PON_LINUX_KS_OS_H
#define _ONU_PON_LINUX_KS_OS_H

/* Include Files
------------------------------------------------------------------------------*/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/string.h>
#include <linux/spinlock.h>
#include <linux/interrupt.h>
#include <linux/sched.h>
#include <linux/wait.h>
#include <linux/time.h>
#include <linux/timer.h> 
#include <linux/slab.h>
#include <linux/byteorder/generic.h>
#include <linux/random.h>
#include <linux/delay.h>
#include <linux/types.h>
#include <linux/capability.h>
#include <linux/platform_device.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/ioctl.h>
#include <linux/workqueue.h>

#include "mvTypes.h"
#include "mvCommon.h"
#include "mvOs.h"
#include "ctrlEnv/mvCtrlEnvSpec.h"
#include "boardEnv/mvBoardEnvLib.h"
#include "mv_netdev.h"

/* Definitions
------------------------------------------------------------------------------*/ 

/* Printing Definitions */
#define PON_PRINT_ERROR           (1)                                                                                   
#define PON_PRINT_INFO            (2)
#define PON_PRINT_DEBUG           (3)
                                  
#define MODULE_SHIFT              (16)
#define MODULE_MASK               (0x001F)
#define OPTIONS_MASK              (0xFFFF)
                                  
#define ONU_PON_SM_DEBUG_ATTR     (0x0001)                              
#define ONU_PON_SM_STATE_ATTR     (0x0002)
#define ONU_PON_SM_AES_ATTR       (0x0004)
#define ONU_PON_SM_ALLOC_ATTR     (0x0008)
#define ONU_PON_SM_OMCC_ATTR      (0x0010)
#define ONU_PON_SM_TIMER_ATTR     (0x0020)
#define ONU_PON_SM_ALARM_ATTR     (0x0040)

#define ONU_PON_MNG_DBA_ATTR      (0x0001)   
#define ONU_PON_MNG_SILENCE_ATTR  (0x0002)   
#define ONU_PON_MNG_MAC_ADDR_ATTR (0x0004)   
#define ONU_PON_MNG_OAM_TX_ATTR   (0x0008)   
#define ONU_PON_MNG_DBA_WA_ATTR   (0x0010)   
#define ONU_PON_MNG_DBA_FEC_ATTR  (0x0020)   
#define ONU_PON_MNG_DBA_TS_ATTR   (0x0040)   

#define ONU_PON_ISR_INT_ATTR      (0x0001)
#define ONU_PON_ISR_MISS_ATTR     (0x0002)
#define ONU_PON_ISR_STATE_ATTR    (0x0004)
#define ONU_PON_ISR_RAND_ATTR     (0x0008)

#define PON_MAC_MODULE            (1)      
#define PON_INIT_MODULE           (2)     
#define PON_ISR_MODULE            (3)      
#define PON_ISR_INT_MODULE        (3 | (ONU_PON_ISR_INT_ATTR   << MODULE_SHIFT))      
#define PON_ISR_MISS_MODULE       (3 | (ONU_PON_ISR_MISS_ATTR  << MODULE_SHIFT))      
#define PON_ISR_STATE_MODULE      (3 | (ONU_PON_ISR_STATE_ATTR << MODULE_SHIFT))      
#define PON_ISR_RAND_MODULE       (3 | (ONU_PON_ISR_RAND_ATTR  << MODULE_SHIFT))      
#define PON_CLI_MODULE            (4)      
#define PON_MNG_MODULE            (5) 
#define PON_MNG_DBA_MODULE        (5 | (ONU_PON_MNG_DBA_ATTR      << MODULE_SHIFT)) 
#define PON_MNG_SILENCE_MODULE    (5 | (ONU_PON_MNG_SILENCE_ATTR  << MODULE_SHIFT)) 
#define PON_MNG_MAC_ADDR_MODULE   (5 | (ONU_PON_MNG_MAC_ADDR_ATTR << MODULE_SHIFT)) 
#define PON_MNG_OAM_TX_MODULE     (5 | (ONU_PON_MNG_OAM_TX_ATTR   << MODULE_SHIFT)) 
#define PON_MNG_DBA_WA_MODULE     (5 | (ONU_PON_MNG_DBA_WA_ATTR   << MODULE_SHIFT)) 
#define PON_MNG_DBA_FEC_MODULE    (5 | (ONU_PON_MNG_DBA_FEC_ATTR  << MODULE_SHIFT)) 
#define PON_MNG_DBA_TS_MODULE     (5 | (ONU_PON_MNG_DBA_TS_ATTR   << MODULE_SHIFT)) 
#define PON_SM_MODULE             (6)
#define PON_SM_DEBUG_MODULE       (6 | (ONU_PON_SM_DEBUG_ATTR << MODULE_SHIFT))  
#define PON_SM_STATE_MODULE       (6 | (ONU_PON_SM_STATE_ATTR << MODULE_SHIFT))  
#define PON_SM_AES_MODULE         (6 | (ONU_PON_SM_AES_ATTR   << MODULE_SHIFT))  
#define PON_SM_ALLOC_MODULE       (6 | (ONU_PON_SM_ALLOC_ATTR << MODULE_SHIFT))  
#define PON_SM_OMCC_MODULE        (6 | (ONU_PON_SM_OMCC_ATTR  << MODULE_SHIFT))  
#define PON_SM_TIMER_MODULE       (6 | (ONU_PON_SM_TIMER_ATTR << MODULE_SHIFT))  
#define PON_SM_ALARM_MODULE       (6 | (ONU_PON_SM_ALARM_ATTR << MODULE_SHIFT))  
#define PON_PM_MODULE	          (7)
#define PON_ALARM_MODULE          (8)    
#define PON_BER_MODULE	          (9)
#define PON_API_MODULE            (10)      
#define PON_ALLOC_MODULE          (11)    
#define PON_LAST_MODULE           (12)    

/* Timers Definitions */
#define ONU_PON_TIMER_T01_INTERVAL           (10000) /* 10 sec */
#define ONU_PON_TIMER_T02_INTERVAL           (100)   /* 100 msec */
#define ONU_PON_TIMER_FIFO_AUDIT_INTERVAL    (20)    /* 20 msec */
#define ONU_PON_TIMER_PM_INTERVAL            (1000)  /* 1 sec */
#define ONU_PON_TIMER_PEE_INTERVAL           (3000)  /* 3 sec */
#define ONU_PON_TIMER_PON_EVT_CLEAN_INTERVAL (5000)  /* 5 sec */
#define ONU_PON_TIMER_XVR_RST_INTERVAL       (10)    /* 10 msec */
#define ONU_PON_TIMER_MPCP_INTERVAL          (1000)  /* 1 sec */
#define ONU_PON_TIMER_RPRT_INTERVAL          (1)     /* 1 msec */
#define ONU_PON_TIMER_HW_RPRT_T0_INTERVAL    (2)     /* 2 msec */
#define ONU_PON_TIMER_HW_RPRT_T1_INTERVAL    (150)   /* 150 msec */
#define ONU_PON_TIMER_HOLDOVER_INTERVAL      (200)   /* 200 msec */
#define ONU_PON_TIMER_MAX_SLEEP_INTERVAL     (60000) /* 60 sec */
#define ONU_PON_TIMER_SLEEP_DURATION         (500)    /* 0.5 sec */
#define ONU_PON_TIMER_WAKEUP_DURATION        (500)    /* 0.5 sec */
#define ONU_PON_TIMER_SILENCE_INTERVAL       (60000) /* 60 sec */
#define ONU_PON_TIMER_TX_MOD_INTERVAL        (1)   /* 1 msec */
#define ONU_PON_TIMER_EVENT_MISS_INTERVAL    (10)   /* 10 msec */
#define ONU_PON_TIMER_TX_PWR_INTERVAL        (1000)  /* 1 sec */

#define ONU_PON_TIMER_ACTIVE                 (1)
#define ONU_PON_TIMER_NOT_ACTIVE             (0)

/* Enums                              
------------------------------------------------------------------------------*/ 

/* Typedefs
------------------------------------------------------------------------------*/
typedef void (*PTIMER_FUNCPTR)(unsigned long data);
typedef void (*STATUSNOTIFYFUNC)(MV_U32 status);
typedef void (*DYINGGASPFUNC)(void);
typedef void (*LINKSTATUSFUNC)(MV_BOOL);

/* Timer Id */
typedef struct
{
  struct timer_list onuPonTimerId;
  PTIMER_FUNCPTR    onuPonTimerFunc;
  MV_U32            onuPonTimerActive;
  MV_U32            onuPonTimerInterval; 
  MV_U32            onuPonTimerPeriodic;
}S_OnuPonTimer;

/* Interrupt */
typedef struct
{
  int                   onuPonIrqNum;
#ifndef PON_FPGA
  int                   onuDgIrqNum;
#endif /* PON_FPGA */
  spinlock_t            onuPonIrqLock;
  struct tasklet_struct onuPonTasklet;
}S_onuPonIrq;


/* Work queue */
typedef struct
{
  struct work_struct ponWork;
  int    action;
  int    param;
}S_onuPonWork;

typedef struct
{
  struct workqueue_struct *ponWq;
}S_onuPonWorkQueue;

/* ONU GPON resource table */
typedef struct
{
  /* Timer */
  S_OnuPonTimer onuGponT01_TimerId;         /* ONU GPON T01 timer */
  S_OnuPonTimer onuGponT02_TimerId;         /* ONU GPON T02 timer */
  S_OnuPonTimer onuGponPeeTimerId;          /* ONU GPON PEE timer */
  S_OnuPonTimer onuPonSwFIFOTimerId;        /* ONU GPON SW FIFO timer */
                                            
  S_OnuPonTimer onuPonMpcpTimerId;          /* ONU EPON MPCP timer */
  S_OnuPonTimer onuPonHwRprtTimerId;        /* ONU EPON Hw Periodic Report timer */
  S_OnuPonTimer onuPonHwRprtTxModTimerId;   /* ONU EPON Tx Module timer */
  S_OnuPonTimer onuPonIsrMissTimerId;       /* ONU EPON ISR Miss timer */
  S_OnuPonTimer onuPonHoldoverTimerId;      /* ONU EPON Holdover timer */
  S_OnuPonTimer onuPonSilenceTimerId[8];    /* ONU EPON Silence timer */

  S_OnuPonTimer onuPonTxPwrTimerId;         /* ONU PON TX Power timer */
  S_OnuPonTimer onuPonPmTimerId;            /* ONU PON PM timer */
  S_OnuPonTimer onuPonPatternBurstTimerId;  /* ONU PON Pattern Burst timer */

    S_OnuPonTimer onuEponTxControlTimerId;      /* EPON tx_control delay timer */
    S_OnuPonTimer onuEponMaxSleepTimerId;       /* EPON power_saving mode: max sleep duration timer */
    S_OnuPonTimer onuEponSleepDurationTimerId;  /* EPON power_saving mode: sleep duration and wait duration timer */
  
#ifndef PON_FPGA                            
  S_OnuPonTimer onuPonIsrXvrRstTimerId;     /* ONU PON XVR Reset timer */
#endif /* PON_FPGA */                       


  /* Interrupt */
  S_onuPonIrq   onuPonIrqId;           
}S_OnuPonResourceTbl;

/* Printing Options */
typedef struct
{
  MV_U32 modulePrintLevel; /* Severity printing level per module */
  MV_U32 moduleOptions;    /* Optional module printing options */
}S_PonModulePrint;

/* Global variables
------------------------------------------------------------------------------*/
extern S_OnuPonResourceTbl onuPonResourceTbl_s;
extern spinlock_t onuPonIrqLock;

/* Global functions
------------------------------------------------------------------------------*/
/* Init API */
extern MV_STATUS onuPonRtosResourceInit(void);

/* Timer API */
extern MV_STATUS onuPonTimerCreate(S_OnuPonTimer *timerId, 
                                   MV_U8         *timerDesc, 
                                   PTIMER_FUNCPTR timerFunc, 
                                   MV_U32         timerParam, 
                                   MV_U32         timerInterval, 
                                   MV_U32         timerPeriodic);
extern int       onuPonTimerUpdate(S_OnuPonTimer *timerId, 
								   MV_U32         data, 
								   MV_U32         interval, 
								   MV_U32         state);
extern int       onuPonTimerEnable(S_OnuPonTimer *timerId);
extern int       onuPonTimerDisable(S_OnuPonTimer *timerId);


/* Memory API */
extern MV_STATUS ponOnuGlbAddrInit(void);
extern void*     onuPonMemAlloc(unsigned int size); 
extern void      onuPonMemRelease(void); 

/* Interrupt API */
MV_STATUS onuPonIrqInit(void);

extern MV_STATUS onuPonIrqNumInit(void);
extern int       onuPonIrqEnable(S_onuPonIrq *irqId);
extern int       onuPonIrqDisable(S_onuPonIrq *irqId);

/* Printing API */
extern MV_STATUS mvPonPrint(MV_U32 level, MV_U32 bitMask, const char *format, ...);
extern MV_STATUS ponOnuCheckPrintStatus(MV_U32 printLevel, MV_U32 moduleOptions);
extern MV_STATUS ponOnuChangePrintStatus(MV_U32 module, MV_U32 printLevel, MV_U32 moduleOptions);
extern MV_STATUS ponOnuGetPrintStatus(MV_U32 module, MV_U32 *printLevel, MV_U32 *moduleOptions);
extern int       ponOnuPrintStatus(char* buf);

extern int 	 onuGponUiCfgPrbsUserPattern(char* buf);

/* Macros
------------------------------------------------------------------------------*/    

#endif /* _ONU_PON_LINUX_KS_OS_H */
