/************************************************************************
* Copyright (C) 2010, Marvell Technology Group Ltd.
* All Rights Reserved.
*
* This is UNPUBLISHED PROPRIETARY SOURCE CODE of Marvell Technology Group;
* the contents of this file may not be disclosed to third parties, copied
* or duplicated in any form, in whole or in part, without the prior
* written permission of Marvell Technology Group.
*
*********************************************************************************
* 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.
*
*********************************************************************************
* mv_cust_flow_map.h
*
* DESCRIPTION:
*   Victor  - initial version created.   12/Dec/2011 
*
*******************************************************************************/
#ifndef __mv_cust_flow_map_h__
#define __mv_cust_flow_map_h__


/****************************************************************************** 
 *                        Data Enum and Structure                                                                                                                                  
 ******************************************************************************/
#define MVCUST_TRACE_PRINT(level, format, ...)   printk(level "%s(%d):"format, __FUNCTION__, __LINE__, ##__VA_ARGS__)

#define MV_CUST_OK                        (0)
#define MV_CUST_FAIL                      (1)

#define CPH_MAX_TCONT_NUM                 (8)    /* Maximum T-CONT number    */
#define CPH_INVALID_TRGT_QUEUE            (0xFF) /* Invalid target queue number  */

#define MV_CUST_VID_NOT_CARE_VALUE        (4096) /* Does not care for VID    */
#define MV_CUST_PBITS_NOT_CARE_VALUE      (8)    /* Does not care for P-bits */
#define MV_CUST_DSCP_NOT_CARE_VALUE       (64)   /* Does not care for DSCP   */

#define MV_CUST_MAX_TRG_PORT_VALUE        (8-1)  /* Maximum target port value, T-CONT7 */
#define MV_CUST_MAX_TRG_QUEUE_VALUE       (7)    /* Maximum target queue value         */
#define MV_CUST_MAX_GEM_PORT_VALUE        (4095) /* Maximum GEM port value             */

#define MV_CUST_INVALID_PBITS_TABLE_INDEX (0xff) /* Invalid Pbits table index value in VID index table*/

#define MV_CUST_DEFAULT_UNTAG_RULE        (4096+1)/* Default untagged  rule        */
#define MV_CUST_DEFAULT_SINGLE_TAG_RULE   (4096+2)/* Default sinlge tagged  rule   */
#define MV_CUST_DEFAULT_DOUBLE_UNTAG_RULE (4096+3)/* Default double tagged  rule   */

/* VLAN ID index table definition for flow mapping */
#define MV_CUST_VID_INDEX_TABLE_MAX_SIZE  (4096+4)
typedef struct {
    uint8_t pbits_map_index[MV_CUST_VID_INDEX_TABLE_MAX_SIZE];
} mv_cust_vid_index_t;

/* P-bits flow mapping table definition */
typedef uint32_t mv_cust_trg_port_type_t;
typedef uint32_t mv_cust_gem_port_key_t;
typedef struct mv_cust_pkt_frwd {
    uint32_t                in_use;
    mv_cust_trg_port_type_t trg_port;                                         
    uint32_t                trg_queue;                      
    uint32_t                trg_hwf_queue;    
    mv_cust_gem_port_key_t  gem_port;
} mv_cust_pkt_frwd_t;

#define MV_CUST_PBITS_MAP_MAX_ENTRY_NUM   (8+1)
#define MV_CUST_MAX_PBITS_MAP_TABLE_SIZE  (64)

typedef struct {
    uint32_t           in_use;
    int                mod_vid[MV_CUST_PBITS_MAP_MAX_ENTRY_NUM];
    int                mod_pbits[MV_CUST_PBITS_MAP_MAX_ENTRY_NUM];    
    mv_cust_pkt_frwd_t pkt_fwd[MV_CUST_PBITS_MAP_MAX_ENTRY_NUM];
} mv_cust_pbits_map_t;

/* DSCP to P-bits mapping table definition */
#define MV_CUST_DSCP_PBITS_TABLE_MAX_SIZE  (64)
typedef struct {
    uint32_t in_use;
    uint8_t  pbits[MV_CUST_DSCP_PBITS_TABLE_MAX_SIZE];
} mv_cust_dscp_pbits_t;
 
typedef enum
{
    MV_CUST_FLOW_DIR_US   = 0,
    MV_CUST_FLOW_DIR_DS   = 1,
    MV_CUST_FLOW_DIR_NUM  = 2
} mv_cust_flow_dir_e;

typedef struct
{
    mv_cust_flow_dir_e dir;
    int                vid;
    int                pbits;
    int                dscp;  
    int                mod_vid;
    int                mod_pbits;
    mv_cust_pkt_frwd_t pkt_frwd;
} mv_cust_ioctl_flow_map_t;

/****************************************************************************** 
 *                        Function Declaration                                                                                                                                  
 ******************************************************************************/
/*******************************************************************************
**
**    mv_cust_set_trace_flag
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function sets mv_cust trace flag.
**
**    INPUTS:
**      enTrace     - Enable or disable mv_cust trace.
**
**    OUTPUTS:
**      None. 
**
**    RETURNS:     
**      On success, the function returns (MV_CUST_OK). On error different types are 
**    returned according to the case.  
**
*******************************************************************************/    
int mv_cust_set_trace_flag(uint32_t enTrace);

/*******************************************************************************
**
**    mv_cust_map_rule_set
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function sets GPON flow mapping rules
**
**    INPUTS:
**      cust_flow  - VLAN ID, 802.1p value, pkt_fwd information.
**
**    OUTPUTS:
**      None. 
**
**    RETURNS:     
**      On success, the function returns (MV_CUST_OK). On error different types are 
**    returned according to the case.  
**
*******************************************************************************/
int mv_cust_map_rule_set(mv_cust_ioctl_flow_map_t *cust_flow);

/*******************************************************************************
**
**    mv_cust_dscp_map_set
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function sets GPON DSCP to P-bits mapping rules
**
**  INPUTS:
**    dscp_map   - DSCP to P-bits mapping rules.
**
**  OUTPUTS:
**    None. 
**
**    RETURNS:     
**    On success, the function returns (0). On error different types are 
**  returned according to the case.  
**
*******************************************************************************/
int mv_cust_dscp_map_set(mv_cust_dscp_pbits_t *dscp_map);

/*******************************************************************************
**
**    mv_cust_map_rule_del
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function deletes GPON flow mapping rules
**
**    INPUTS:
**      vid         - VLAN ID.
**      pbits      - 802.1p value.
**
**    OUTPUTS:
**      None 
**
**    RETURNS:     
**      On success, the function returns (MV_CUST_OK). On error different types are 
**    returned according to the case.  
**
*******************************************************************************/
int mv_cust_map_rule_del(uint16_t vid, uint8_t pbits, mv_cust_flow_dir_e dir);

/*******************************************************************************
**
**    mv_cust_dscp_map_del
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function deletes DSCP to P-bits mapping rules
**
**  INPUTS:
**    None.
**
**  OUTPUTS:
**    None. 
**
**    RETURNS:     
**    On success, the function returns (0). On error different types are 
**  returned according to the case.  
**
*******************************************************************************/
int mv_cust_dscp_map_del(void);

/*******************************************************************************
**
**    mv_cust_map_rule_clear
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function clears all GPON flow mapping rules
**
**  INPUTS:
**    None.
**
**  OUTPUTS:
**    None. 
**
**    RETURNS:     
**    On success, the function returns (0). On error different types are 
**  returned according to the case.  
**
*******************************************************************************/
int mv_cust_map_rule_clear(void);

/*******************************************************************************
**
**    mv_cust_tag_map_rule_get
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function gets GPON flow mapping rule for tagged frames.
**
**  INPUTS:
**    cust_flow  - parsing vid, pbits, dir
**
**  OUTPUTS:
**    cust_flow  - out packet forwarding information, including GEM port, T-CONT, queue.
**                 and packet modification for VID, P-bits
**
**    RETURNS:     
**    On success, the function returns (0). On error different types are 
**  returned according to the case.  
**
*******************************************************************************/
int mv_cust_tag_map_rule_get(mv_cust_ioctl_flow_map_t *cust_flow);

/*******************************************************************************
**
**    mv_cust_untag_map_rule_get
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function gets GPON flow mapping rule for untagged frames.
**
**    INPUTS:
**      dscp         - DSCP value.
**
**    OUTPUTS:
**      cust_flow    - packet forwarding information, including GEM port, T-CONT, queue.
**
**    RETURNS:     
**      On success, the function returns (MV_CUST_OK). On error different types are 
**    returned according to the case.  
**
*******************************************************************************/
int mv_cust_untag_map_rule_get(mv_cust_ioctl_flow_map_t *cust_flow);

/*******************************************************************************
**
**    mv_cust_map_table_print
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function displays valid GPON flow mapping tables and DSCP 
**               to P-bits mapping tablefor untagged frames.
**
**  INPUTS:
**    None.
**
**  OUTPUTS:
**    None.
**
**    RETURNS:     
**    On success, the function returns (0). On error different types are 
**  returned according to the case.  
**
*******************************************************************************/
int mv_cust_map_table_print(void);

/*******************************************************************************
**
**    mv_cust_flow_map_init
**    ___________________________________________________________________________
**
**    DESCRIPTION: The function initializes mv_cust flow mapping data structure.
**
**    INPUTS:
**      None.
**
**    OUTPUTS:
**      None. 
**
**    RETURNS:     
**      On success, the function returns (0). On error different types are 
**    returned according to the case.  
**
*******************************************************************************/    
int mv_cust_flow_map_init(void);

/*******************************************************************************
**
** mv_cust_get_tcont_state
** ___________________________________________________________________________
**
** DESCRIPTION: The function get T-CONT state
**
** INPUTS:
**   tcont - T-CONT
**
** OUTPUTS:
**   None. 
**
** RETURNS:     
**   state - State of T-CONT, enabled or disabled.  
**
*******************************************************************************/
bool mv_cust_get_tcont_state(uint32_t tcont);

/*******************************************************************************
**
** mv_cust_set_tcont_state
** ___________________________________________________________________________
**
** DESCRIPTION: The function sets T-CONT state in mv_cust
**
** INPUTS:
**   tcont - T-CONT
**   state - State of T-CONT, enabled or disabled.
**
** OUTPUTS:
**   None. 
**
** RETURNS:     
**  On success, the function returns (MV_OK). On error different types are 
**  returned according to the case.  
**
*******************************************************************************/
MV_STATUS mv_cust_set_tcont_state(uint32_t tcont, bool state);

#endif /* __mv_cust_flow_map_h__ */
