/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos720 src/bos/kernel/sys/cdli_entuser.kxent.h 1.3                     */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* Restricted Materials of IBM                                            */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 2007                   */
/* All Rights Reserved                                                    */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or            */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.      */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/* @(#)72	1.1  src/bos/kernel/sys/cdli_entuser.kxent.h, pcikxent, bos53L 6/25/07 16:20:21 */
#ifndef _H_CDLI_ENTUSER_KXENT
#define _H_CDLI_ENTUSER_KXENT

/* device_type field in kxent_stats_t holds one of the following values */
#define ENT_KXENT_PCI_LR	0x00000011 /* IBM 10Gb LR PCIe Adapter       */
#define ENT_KXENT_PCI_SR	0x00000012 /* IBM 10Gb SR PCIe Adapter       */

/* Miscellaneous definitions */
#define ENT_KX_JUMBO_MAX_MTU    (9014)     /* jumbo packet max data size     */

/* device specific statistics */
#ifndef LINK_UP
#define LINK_UP		(1)		   /* Link is UP                     */
#define LINK_DOWN	(0)		   /* Link is DOWN 		     */
#define LINK_RESET	(2)		   /* Link is being RESET            */
#define MEDIA_10_HALF	(0)		   /* 10 Mbps Half Duplex            */
#define MEDIA_10_FULL	(1)		   /* 10 Mbps Full Duplex            */
#define MEDIA_100_HALF	(2)		   /* 100 Mbps Half Duplex           */
#define MEDIA_100_FULL	(3)		   /* 100 Mbps Full Duplex           */
#define MEDIA_AUTO	(4)		   /* Autonegotiation                */
#define MEDIA_1000_FULL	(5)		   /* 1000 Mbps Full Duplex          */
#define MEDIA_10000_FULL (6)		   /* 10 Gbps Full Duplex            */
#endif

struct kxent_stats {
	uint32_t    	link_status;               /* negotiated link status         */
	uint32_t	speed_selected;		   /* speed/mode selected by user    */
	uint32_t	speed_negotiated;	   /* speed/mode negotiated by card  */
	uint32_t	device_type;		   /* Device type to display UTP     *
					    	    * or Fiber adapter statistics    */
	uint32_t	functions;		   /* TXFLOW/RXFLOW/JUMBOF/TCPSEG    */
        uint32_t	xonrxc;			   /* # of XON packets received      */
        uint32_t	xontxc;			   /* # of XON packets transmitted   */
        uint32_t	xoffrxc;		   /* # of XOFF packets received     */
        uint32_t	xofftxc;		   /* # of XOFF packets transmitted  */
	uint32_t	fcrth;			   /* flow ctrl rx thresh high       */
	uint32_t	fcrtl;			   /* flow ctrl rx thresh low        */
        uint32_t    	pcie_mode;                 /* PCIe LW/RO/TLP/MRR values      */
        uint32_t	tx_tcpseg_maxsize;         /* maximum large send size        */
        uint32_t	rx_tcpaggr_maxpkt;         /* maximum large receive pkts     */
	uint64_t	tx_tcpseg;		   /* # of large send offload packets*/
        uint64_t	rx_tcpaggr;                /* # of large receive packets     */
        uint64_t	rx_tcpaggr_pktcount;       /* # of RX TCP packets aggregated *
                                                    * into large receive packets     */
        uint64_t	rx_tcpaggr_bytecount;      /* # of RX TCP payload bytes      *
                                                    * aggregated into large receive  *
                                                    * packets                        */
	uint64_t 	reserved[128];		   /* reserved for future use	     */
};
typedef struct kxent_stats kxent_stats_t;

/* bitmaps for functions flag in kxent_stats above */
#define	TXFLOW		(0x1)
#define RXFLOW		(0x2)
#define	JUMBOF		(0x4)
#define TCPSEG		(0x8)
#define TCPAGGR		(0x10)

/* bitmaps for pcie_mode in kxent_stats above */
#define	KXENT_PCIE_LW_MASK	(0x000003f0)
#define KXENT_PCIE_LW_X1	(0x00000010)
#define KXENT_PCIE_LW_X2	(0x00000020)
#define KXENT_PCIE_LW_X4	(0x00000040)
#define KXENT_PCIE_LW_X8	(0x00000080)
#define	KXENT_PCIE_RO_MASK	(0x00100000)
#define	KXENT_PCIE_RO_ON	(0x00100000)
#define	KXENT_PCIE_TLP_MASK	(0x00e00000)
#define	KXENT_PCIE_TLP_128	(0x00000000)
#define	KXENT_PCIE_TLP_256	(0x00200000)
#define	KXENT_PCIE_MRR_MASK	(0x70000000)
#define	KXENT_PCIE_MRR_128	(0x00000000)
#define	KXENT_PCIE_MRR_256	(0x10000000)
#define	KXENT_PCIE_MRR_512	(0x20000000)
#define	KXENT_PCIE_MRR_1024	(0x30000000)
#define	KXENT_PCIE_MRR_2048	(0x40000000)
#define	KXENT_PCIE_MRR_4096	(0x50000000)

struct kxent_all_stats {
	struct ndd_genstats ent_ndd_stats;	/* network generic stats     */
	struct ent_genstats ent_gen_stats;	/* ethernet generic stats    */
	struct kxent_stats  kxent_stats;	/* device specific stats     */
};
typedef struct kxent_all_stats kxent_all_stats_t;

/* performance tuning settings for PCI-E adapters */
#define KXENT_RXPBSIZE0         0x80000	/* Single 512KB RX Packet Buffer     */
#define KXENT_RF_FCRTL0         0x10000	/* RX RF flow control XON 64KB       */
#define KXENT_RF_FCRTH0         0x20000	/* RX RF flow control XOFF 128KB     */
#define KXENT_JF_FCRTL0         0x10000	/* RX JF flow control XON 64KB       */
#define KXENT_JF_FCRTH0         0x20000	/* RX JF flow control XOFF 128KB     */

/* trace hook numbers */
#define HKWD_KXENT_XMIT		0x5ED	        /* transmit events	     */
#define	HKWD_KXENT_RECV		0x5EE	        /* receive events            */
#define HKWD_KXENT_OTHER	0x5EF	        /* other events              */

#endif	/* _H_CDLI_ENTUSER_KXENT */
