/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos720 src/bos/kernel/sys/cdli_entuser.musent.h 1.3.1.1                */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* Restricted Materials of IBM                                            */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 2011,2013              */
/* 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                                                     */
/* @(#)73       1.3.1.1  src/bos/kernel/sys/cdli_entuser.musent.h, pcimusent, bos720 1/8/13 06:24:23 */
#ifndef _H_CDLI_ENTUSER_MUSENT
#define _H_CDLI_ENTUSER_MUSENT

/*
 *  Miscellaneous definitions
 */
#define ENT_MU_JUMBO_MAX_MTU	(9014)		/* jumbo packet max data size */
#define ENT_MU_SX_PCI		0x00000001	    /* Gigabit Ethernet-SX PCIe */
#define ENT_MU_SX_PCI1		0x00000002	    /* Gigabit Ethernet-SX PCIe */
#define ENT_MU_SX_PCI2		0x00000004	    /* Gigabit Ethernet-SX PCIe */
#define ENT_AU_SX_PCI		0x00000008	    /* Gigabit Ethernet-SX PCIe */

/*
 *  Gigabit Ethernet adapter (14101403) device specific ndd_flags bits
 */
#define	NDD_MUSENT_32BIT		(16*NDD_SPECFLAGS) /* running in a 32bit slot */
#define	NDD_MUSENT_LINK_DOWN	(32*NDD_SPECFLAGS) /* link is down */
#define	NDD_MUSENT_AUTO_NEG	    (64*NDD_SPECFLAGS) /* establish(ed) link by */
						   /* on: autonegotiate link */
						   /* off: force gigabit and */
					           /* full duplex */
struct musent_txq_stats {
    uint64_t txq_ifOutUcastPkts;    /* # of transmit unicast packets          */
    uint64_t txq_ifOutMcastPkts;    /* # of transmit multicast packets        */
    uint64_t txq_ifOutBcastPkts;    /* # of transmit broadcast packets        */
    uint64_t txq_opackets;          /* # of transmit packets                  */
    uint64_t txq_obytes;            /* # of transmit bytes                    */
    uint64_t txq_tcpseg_pkts;       /* # of transmit TCP segmentation packets */
    uint32_t txq_opackets_drop;     /* # of transmit packets dropped          */
    uint32_t txq_xmitque_ovf;       /* # of transmit queue overflows          */
    uint32_t txq_xmitque_max;       /* maximum # of tranmit queue entries     */
    uint32_t txq_tcpseg_maxpkt;     /* maximum TCP segmentation packet size   */
    uint32_t reserved[32];         /* reserved for future use                 */
};
typedef struct musent_txq_stats musent_txq_stats_t;

struct musent_rxq_stats {
    uint64_t rxq_tcpaggr;           /* # of large receive packets             */
    uint64_t rxq_tcpaggr_pktcount;  /* # of RX TCP packets aggregated into    *
                                     * large receive packets                  */
    uint64_t rxq_tcpaggr_bytecount; /* # of RX TCP payload bytes aggregated   *
                                    * aggregated into large receive packets   */
    uint64_t rxq_sys_mbufs;         /* # of system mbufs allocated for receive*/
    uint64_t rxq_recv_intrs;        /* # of receive interrupts                */
    uint64_t rxq_ipackets;          /* # of receive packets                   */
    uint64_t rxq_ibytes;            /* # of receive bytes                     */
    uint64_t rxq_jumbo;             /* # of receive jumbo packets             */
    uint64_t rxq_sys_jum_mbufs;     /* # of system mbufs allocated for jumbo  */
    uint32_t rxq_ibadpackets;       /* # of received bad packets              */
    uint32_t rxq_ipackets_drop;     /* # of receive packets dropped           */
    uint32_t rxq_no_mbufs;          /* # of mbuf allocation failures          */
    uint32_t rxq_hog;               /* # of times rx_limit was reached        */
    uint32_t rxq_tcpaggr_maxpkt;    /* maximum large receive packets          */
    uint32_t reserved[32];          /* reserved for future use                */
};
typedef struct musent_rxq_stats musent_rxq_stats_t;

/*
 *  Gigabit Ethernet adapter (14101403) device specific statistics
 */
struct musent_stats {
	uint	tx_timeout_rtn;		/* # of entries to timeout routine */
	uint	link_negotiated;	/* negotiated link status */
	int	    coll_freq[16];		/* Frequency of no. of collisions */
	uint	speed_selected;		/* Selected speed and mode */
	uint	device_type;		/* Device type to display UTP */
					/* or Fiber adapter statistics */ 
#define	NDD_MUSENT_LNK_UP	    		0x80000000  /* link is operational    */
#define NDD_MUSENT_LNK_ENABLE	    	0x40000000  /* enable link */
#define NDD_MUSENT_LNK_NEGOTIATE    	0x20000000  /* enable autonegotiation */
#define NDD_MUSENT_LNK_RX_FLOW_CTL_Y 	0x00800000  /* do RX flow control */
#define NDD_MUSENT_LNK_TX_FLOW_CTL_Y 	0x00200000  /* do TX flow control */
#define NDD_MUSENT_LNK_HALF_DUPLEX   	0x00100000  /* half duplex */
#define NDD_MUSENT_LNK_FULL_DUPLEX   	0x00080000  /* full duplex */
#define NDD_MUSENT_LNK_1000MB	    	0x00040000  /* 1000 megabit data rate */
#define NDD_MUSENT_LNK_100MB	    	0x00020000  /* 100 megabit data rate */
#define NDD_MUSENT_LNK_10MB	    	    0x00010000  /* 10 megabit data rate */

#ifndef	MEDIA_10_HALF
#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*/
#endif
        uint        functions;          /* JUMBOF/TCPSEG                */
        uint    xonrxc;                 /* # of XON packets received      */
        uint    xontxc;                 /* # of XON packets transmitted   */
        uint    xoffrxc;                /* # of XOFF packets received     */
        uint    xofftxc;                /* # of XOFF packets transmitted  */
        uint64_t tx_tcpseg;             /* # of TX TCP seg. offld packets */
        uint32_t num_rx_queues;         /* # of RX queues currently configured     */
        uint32_t num_tx_queues;         /* # of TX queues currently configured     */
        uint32_t num_busintr;           /* # of bus interrupts that should be displayed */
        uint32_t busintr[8];            /* 8 value should be similar to MAX_BUS_INTERRUPTS */
        musent_txq_stats_t txq[5];      /* array of per TXQ statistics structs     */
        musent_rxq_stats_t rxq[5];      /* array of per RXQ statistics structs     */
        uint32_t reserved[32];          /* reserved for future use                 */
     
};
typedef struct musent_stats musent_stats_t;

struct musent_all_stats {
	struct	ndd_genstats ent_ndd_stats;	/* network generic stats  */
	struct	ent_genstats ent_gen_stats;	/* ethernet generic stats */
	struct	musent_stats  musent_stats;		/* device specific stats  */
};
typedef struct musent_all_stats musent_all_stats_t;

/* bitmaps for functions flag in musent_stats above */
#define JUMBOF          (0x4)
#define TCPAGGR         (0x10)

/*
 *  Gigabit ethernet adapter (14101403) trace hook numbers
 */
#define HKWD_MUSENT_RECV			0x66400000	/* receive events  */
#define HKWD_MUSENT_XMIT			0x66500000	/* transmit events */
#define HKWD_MUSENT_OTHER	 		0x66600000	/* other events    */

#endif  /* _H_CDLI_ENTUSER_MUSENT */
