/************************************************************************
* 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_mng_if.h                                           
*                                                                           
* DESCRIPTION : This file contains ONU MV CUST Management Interface        
********************************************************************************/
#ifndef _MV_CUST_MNG_IF_H_
#define _MV_CUST_MNG_IF_H_

/* Include Files
------------------------------------------------------------------------------*/
#include <linux/cdev.h>

/* Definitions
------------------------------------------------------------------------------*/
#define MV_CUST_IOCTL_OMCI_SET                _IOW(MV_CUST_IOCTL_MAGIC,  1,  unsigned int)
#define MV_CUST_IOCTL_EOAM_LLID_SET           _IOW(MV_CUST_IOCTL_MAGIC,  2,  unsigned int)
#define MV_CUST_IOCTL_EOAM_ENABLE             _IOW(MV_CUST_IOCTL_MAGIC,  3,  unsigned int)
#define MV_CUST_IOCTL_OMCI_ENABLE             _IOW(MV_CUST_IOCTL_MAGIC,  4,  unsigned int)
#define MV_CUST_IOCTL_MAP_RULE_SET            _IOW(MV_CUST_IOCTL_MAGIC,  5,  unsigned int)
#define MV_CUST_IOCTL_DSCP_MAP_SET            _IOW(MV_CUST_IOCTL_MAGIC,  6,  unsigned int)
#define MV_CUST_IOCTL_MAP_RULE_DEL            _IOW(MV_CUST_IOCTL_MAGIC,  7,  unsigned int)
#define MV_CUST_IOCTL_DSCP_MAP_DEL            _IOW(MV_CUST_IOCTL_MAGIC,  8,  unsigned int)
#define MV_CUST_IOCTL_MAP_RULE_CLEAR          _IOW(MV_CUST_IOCTL_MAGIC,  9,  unsigned int)
#define MV_CUST_IOCTL_TAG_MAP_RULE_GET        _IOR(MV_CUST_IOCTL_MAGIC,  10, unsigned int)
#define MV_CUST_IOCTL_UNTAG_MAP_RULE_GET      _IOR(MV_CUST_IOCTL_MAGIC,  11, unsigned int)
#define MV_CUST_IOCTL_APP_ETH_TYPE_SET        _IOW(MV_CUST_IOCTL_MAGIC,  12, unsigned int)

/* Enums
------------------------------------------------------------------------------*/

/* Typedefs
------------------------------------------------------------------------------*/
typedef struct
{
    int                tcont;
    int                txq;
    int                gemport;
    int                keep_rx_mh;
} mv_cust_ioctl_omci_set_t;

typedef struct
{
    int                llid;
    int                txq;
    uint8_t            llid_mac[6];
} mv_cust_ioctl_llid_set_t;

typedef struct
{
    mv_cust_dscp_pbits_t dscp_map;
} mv_cust_ioctl_dscp_map_t;

typedef struct
{
    mv_cust_app_type_e app_type;
    uint16_t           eth_type;
} mv_cust_ioctl_app_etype_t;

/* MV_CUST Char Device Structure */
/* ========================= */
typedef struct
{
  mv_cust_ioctl_omci_set_t      mv_cust_ioctl_omci_set;
  mv_cust_ioctl_llid_set_t      mv_cust_ioctl_llid_set;
  mv_cust_ioctl_flow_map_t      mv_cust_ioctl_flow_map;
  mv_cust_ioctl_dscp_map_t      mv_cust_ioctl_dscp_map;
  mv_cust_ioctl_app_etype_t     mv_cust_ioctl_app_etype;

  struct cdev  cdev;
} mv_cust_cdev_t;

/* Global variables
------------------------------------------------------------------------------*/

/* Global functions
------------------------------------------------------------------------------*/

/* Global variables
------------------------------------------------------------------------------*/

/* Global functions
------------------------------------------------------------------------------*/

/* Macros
------------------------------------------------------------------------------*/

#endif /* _MV_CUST_MNG_IF_H_ */
