/******************************************************************************
**
** FILE NAME    : ifx_atm.h
** PROJECT      : UEIP
** MODULES      : ATM
**
** DATE         : 17 Jun 2009
** AUTHOR       : Xu Liang
** DESCRIPTION  : Global ATM driver header file
** COPYRIGHT    :       Copyright (c) 2006
**                      Infineon Technologies AG
**                      Am Campeon 1-12, 85579 Neubiberg, Germany
**
**    This program is free software; you can redistribute it and/or modify
**    it under the terms of the GNU General Public License as published by
**    the Free Software Foundation; either version 2 of the License, or
**    (at your option) any later version.
**
** HISTORY
** $Date        $Author         $Comment
** 07 JUL 2009  Xu Liang        Init Version
*******************************************************************************/

#ifndef IFX_ATM_H
#define IFX_ATM_H



/*!
  \defgroup IFX_ATM UEIP Project - ATM driver module
  \brief UEIP Project - ATM driver module, support Danube, Amazon-SE, AR9, VR9.
 */

/*!
  \defgroup IFX_ATM_IOCTL IOCTL Commands
  \ingroup IFX_ATM
  \brief IOCTL Commands used by user application.
 */

/*!
  \defgroup IFX_ATM_STRUCT Structures
  \ingroup IFX_ATM
  \brief Structures used by user application.
 */

/*!
  \file ifx_atm.h
  \ingroup IFX_ATM
  \brief ATM driver header file
 */



/*
 * ####################################
 *              Definition
 * ####################################
 */

/*!
  \addtogroup IFX_ATM_STRUCT
 */
/*@{*/

/*
 *  ATM MIB
 */

/*!
  \struct atm_cell_ifEntry_t
  \brief Structure used for Cell Level MIB Counters.

  User application use this structure to call IOCTL command "PPE_ATM_MIB_CELL".
 */
typedef struct {
	__u32	ifHCInOctets_h;     /*!< byte counter of ingress cells (upper 32 bits, total 64 bits)   */
	__u32	ifHCInOctets_l;     /*!< byte counter of ingress cells (lower 32 bits, total 64 bits)   */
	__u32	ifHCOutOctets_h;    /*!< byte counter of egress cells (upper 32 bits, total 64 bits)    */
	__u32	ifHCOutOctets_l;    /*!< byte counter of egress cells (lower 32 bits, total 64 bits)    */
	__u32	ifInErrors;         /*!< counter of error ingress cells     */
	__u32	ifInUnknownProtos;  /*!< counter of unknown ingress cells   */
	__u32	ifOutErrors;        /*!< counter of error egress cells      */
} atm_cell_ifEntry_t;

/*!
  \struct atm_aal5_ifEntry_t
  \brief Structure used for AAL5 Frame Level MIB Counters.

  User application use this structure to call IOCTL command "PPE_ATM_MIB_AAL5".
 */
typedef struct {
	__u32	ifHCInOctets_h;     /*!< byte counter of ingress packets (upper 32 bits, total 64 bits) */
	__u32	ifHCInOctets_l;     /*!< byte counter of ingress packets (lower 32 bits, total 64 bits) */
	__u32	ifHCOutOctets_h;    /*!< byte counter of egress packets (upper 32 bits, total 64 bits)  */
	__u32	ifHCOutOctets_l;    /*!< byte counter of egress packets (lower 32 bits, total 64 bits)  */
	__u32	ifInUcastPkts;      /*!< counter of ingress packets         */
	__u32	ifOutUcastPkts;     /*!< counter of egress packets          */
	__u32	ifInErrors;         /*!< counter of error ingress packets   */
	__u32	ifInDiscards;       /*!< counter of dropped ingress packets */
	__u32	ifOutErros;         /*!< counter of error egress packets    */
	__u32	ifOutDiscards;      /*!< counter of dropped egress packets  */
} atm_aal5_ifEntry_t;

/*!
  \struct atm_aal5_vcc_t
  \brief Structure used for per PVC AAL5 Frame Level MIB Counters.

  This structure is a part of structure "atm_aal5_vcc_x_t".
 */
typedef struct {
	__u32	aal5VccCrcErrors;       /*!< counter of ingress packets with CRC error  */
	__u32	aal5VccSarTimeOuts;     /*!< counter of ingress packets with Re-assemble timeout    */  //no timer support yet
	__u32	aal5VccOverSizedSDUs;   /*!< counter of oversized ingress packets       */
} atm_aal5_vcc_t;

/*!
  \struct atm_aal5_vcc_x_t
  \brief Structure used for per PVC AAL5 Frame Level MIB Counters.

  User application use this structure to call IOCTL command "PPE_ATM_MIB_VCC".
 */
typedef struct {
	int             vpi;        /*!< VPI of the VCC to get MIB counters */
	int             vci;        /*!< VCI of the VCC to get MIB counters */
	atm_aal5_vcc_t  mib_vcc;    /*!< structure to get MIB counters      */
} atm_aal5_vcc_x_t;

/*@}*/



/*
 * ####################################
 *                IOCTL
 * ####################################
 */

/*!
  \addtogroup IFX_ATM_IOCTL
 */
/*@{*/

/*
 *  ioctl Command
 */
/*!
  \brief ATM IOCTL Magic Number
 */
#define PPE_ATM_IOC_MAGIC       'o'
/*!
  \brief ATM IOCTL Command - Get Cell Level MIB Counters

   This command is obsolete. User can get cell level MIB from DSL API.
   This command uses structure "atm_cell_ifEntry_t" as parameter for output of MIB counters.
 */
#define PPE_ATM_MIB_CELL        _IOW(PPE_ATM_IOC_MAGIC,  0, atm_cell_ifEntry_t)
/*!
  \brief ATM IOCTL Command - Get AAL5 Level MIB Counters

   Get AAL5 packet counters.
   This command uses structure "atm_aal5_ifEntry_t" as parameter for output of MIB counters.
 */
#define PPE_ATM_MIB_AAL5        _IOW(PPE_ATM_IOC_MAGIC,  1, atm_aal5_ifEntry_t)
/*!
  \brief ATM IOCTL Command - Get Per PVC MIB Counters

   Get AAL5 packet counters for each PVC.
   This command uses structure "atm_aal5_vcc_x_t" as parameter for input of VPI/VCI information and output of MIB counters.
 */
#define PPE_ATM_MIB_VCC         _IOWR(PPE_ATM_IOC_MAGIC, 2, atm_aal5_vcc_x_t)
/*!
  \brief Total Number of ATM IOCTL Commands
 */
#define PPE_ATM_IOC_MAXNR       3

/*@}*/



/*
 * ####################################
 *                 API
 * ####################################
 */

#ifdef __KERNEL__
struct port_cell_info {
    unsigned int    port_num;
    unsigned int    tx_link_rate[2];
};
#endif



#endif  //  IFX_ATM_H

