#ifndef _SYS_NXGE_NXGE_H
#define _SYS_NXGE_NXGE_H
#ifdef __cplusplus
extern "C" {
#endif
#include <nxge_mac.h>
#include <nxge_ipp.h>
#include <nxge_fflp.h>
#define NXGE_IOC ((((('N' << 8) + 'X') << 8) + 'G') << 8)
#define NXGE_GET64 (NXGE_IOC|1)
#define NXGE_PUT64 (NXGE_IOC|2)
#define NXGE_GET_TX_RING_SZ (NXGE_IOC|3)
#define NXGE_GET_TX_DESC (NXGE_IOC|4)
#define NXGE_GLOBAL_RESET (NXGE_IOC|5)
#define NXGE_TX_SIDE_RESET (NXGE_IOC|6)
#define NXGE_RX_SIDE_RESET (NXGE_IOC|7)
#define NXGE_RESET_MAC (NXGE_IOC|8)
#define NXGE_GET_MII (NXGE_IOC|11)
#define NXGE_PUT_MII (NXGE_IOC|12)
#define NXGE_RTRACE (NXGE_IOC|13)
#define NXGE_RTRACE_TEST (NXGE_IOC|20)
#define NXGE_TX_REGS_DUMP (NXGE_IOC|21)
#define NXGE_RX_REGS_DUMP (NXGE_IOC|22)
#define NXGE_INT_REGS_DUMP (NXGE_IOC|23)
#define NXGE_VIR_REGS_DUMP (NXGE_IOC|24)
#define NXGE_VIR_INT_REGS_DUMP (NXGE_IOC|25)
#define NXGE_RDUMP (NXGE_IOC|26)
#define NXGE_RDC_GRPS_DUMP (NXGE_IOC|27)
#define NXGE_PIO_TEST (NXGE_IOC|28)
#define NXGE_GET_TCAM (NXGE_IOC|29)
#define NXGE_PUT_TCAM (NXGE_IOC|30)
#define NXGE_INJECT_ERR (NXGE_IOC|40)
#define NXGE_RX_CLASS (NXGE_IOC|41)
#define NXGE_RX_HASH (NXGE_IOC|42)
#define NXGE_OK 0
#define NXGE_ERROR 0x40000000
#define NXGE_DDI_FAILED 0x20000000
#define NXGE_GET_PORT_NUM(n) n
#define NXGE_IDNUM (0)
#define NXGE_DRIVER_NAME "nxge"
#define NXGE_MINPSZ (0)
#define NXGE_MAXPSZ (ETHERMTU)
#define NXGE_HIWAT (2048 * NXGE_MAXPSZ)
#define NXGE_LOWAT (1)
#define NXGE_HIWAT_MAX (192000 * NXGE_MAXPSZ)
#define NXGE_HIWAT_MIN (2 * NXGE_MAXPSZ)
#define NXGE_LOWAT_MAX (192000 * NXGE_MAXPSZ)
#define NXGE_LOWAT_MIN (1)
#ifndef D_HOTPLUG
#define D_HOTPLUG 0x00
#endif
#define INIT_BUCKET_SIZE 16
#define NXGE_CHECK_TIMER (5000)
#define KT_NIU_COMPATIBLE "SUNW,niusl-kt"
typedef enum {
param_instance,
param_main_instance,
param_function_number,
param_partition_id,
param_read_write_mode,
param_fw_version,
param_port_mode,
param_niu_cfg_type,
param_tx_quick_cfg,
param_rx_quick_cfg,
param_master_cfg_enable,
param_master_cfg_value,
param_autoneg,
param_anar_10gfdx,
param_anar_10ghdx,
param_anar_1000fdx,
param_anar_1000hdx,
param_anar_100T4,
param_anar_100fdx,
param_anar_100hdx,
param_anar_10fdx,
param_anar_10hdx,
param_anar_asmpause,
param_anar_pause,
param_use_int_xcvr,
param_enable_ipg0,
param_ipg0,
param_ipg1,
param_ipg2,
param_txdma_weight,
param_txdma_channels_begin,
param_txdma_channels,
param_txdma_info,
param_rxdma_channels_begin,
param_rxdma_channels,
param_rxdma_drr_weight,
param_rxdma_full_header,
param_rxdma_info,
param_rxdma_rbr_size,
param_rxdma_rcr_size,
param_default_port_rdc,
param_rxdma_intr_time,
param_rxdma_intr_pkts,
param_rdc_grps_start,
param_rx_rdc_grps,
param_default_grp0_rdc,
param_default_grp1_rdc,
param_default_grp2_rdc,
param_default_grp3_rdc,
param_default_grp4_rdc,
param_default_grp5_rdc,
param_default_grp6_rdc,
param_default_grp7_rdc,
param_info_rdc_groups,
param_start_ldg,
param_max_ldg,
param_mac_2rdc_grp,
param_vlan_2rdc_grp,
param_fcram_part_cfg,
param_fcram_access_ratio,
param_tcam_access_ratio,
param_tcam_enable,
param_hash_lookup_enable,
param_llc_snap_enable,
param_h1_init_value,
param_h2_init_value,
param_class_cfg_ether_usr1,
param_class_cfg_ether_usr2,
param_class_cfg_ip_usr4,
param_class_cfg_ip_usr5,
param_class_cfg_ip_usr6,
param_class_cfg_ip_usr7,
param_class_opt_ip_usr4,
param_class_opt_ip_usr5,
param_class_opt_ip_usr6,
param_class_opt_ip_usr7,
param_class_opt_ipv4_tcp,
param_class_opt_ipv4_udp,
param_class_opt_ipv4_ah,
param_class_opt_ipv4_sctp,
param_class_opt_ipv6_tcp,
param_class_opt_ipv6_udp,
param_class_opt_ipv6_ah,
param_class_opt_ipv6_sctp,
param_nxge_debug_flag,
param_npi_debug_flag,
param_dump_rdc,
param_dump_tdc,
param_dump_mac_regs,
param_dump_ipp_regs,
param_dump_fflp_regs,
param_dump_vlan_table,
param_dump_rdc_table,
param_dump_ptrs,
param_end
} nxge_param_index_t;
typedef enum {
SOLARIS_DOMAIN,
SOLARIS_SERVICE_DOMAIN,
SOLARIS_GUEST_DOMAIN,
LINUX_SERVICE_DOMAIN,
LINUX_GUEST_DOMAIN
} nxge_environs_t;
typedef int (*nxge_ndgetf_t)(p_nxge_t, queue_t *, MBLKP, caddr_t, cred_t *);
typedef int (*nxge_ndsetf_t)(p_nxge_t, queue_t *,
MBLKP, char *, caddr_t, cred_t *);
#define NXGE_PARAM_READ 0x00000001ULL
#define NXGE_PARAM_WRITE 0x00000002ULL
#define NXGE_PARAM_SHARED 0x00000004ULL
#define NXGE_PARAM_PRIV 0x00000008ULL
#define NXGE_PARAM_RW NXGE_PARAM_READ | NXGE_PARAM_WRITE
#define NXGE_PARAM_RWS NXGE_PARAM_RW | NXGE_PARAM_SHARED
#define NXGE_PARAM_RWP NXGE_PARAM_RW | NXGE_PARAM_PRIV
#define NXGE_PARAM_RXDMA 0x00000010ULL
#define NXGE_PARAM_TXDMA 0x00000020ULL
#define NXGE_PARAM_CLASS_GEN 0x00000040ULL
#define NXGE_PARAM_MAC 0x00000080ULL
#define NXGE_PARAM_CLASS_BIN NXGE_PARAM_CLASS_GEN | NXGE_PARAM_BASE_BIN
#define NXGE_PARAM_CLASS_HEX NXGE_PARAM_CLASS_GEN | NXGE_PARAM_BASE_HEX
#define NXGE_PARAM_CLASS NXGE_PARAM_CLASS_HEX
#define NXGE_PARAM_CMPLX 0x00010000ULL
#define NXGE_PARAM_NDD_WR_OK 0x00020000ULL
#define NXGE_PARAM_INIT_ONLY 0x00040000ULL
#define NXGE_PARAM_INIT_CONFIG 0x00080000ULL
#define NXGE_PARAM_READ_PROP 0x00100000ULL
#define NXGE_PARAM_PROP_ARR32 0x00200000ULL
#define NXGE_PARAM_PROP_ARR64 0x00400000ULL
#define NXGE_PARAM_PROP_STR 0x00800000ULL
#define NXGE_PARAM_BASE_DEC 0x00000000ULL
#define NXGE_PARAM_BASE_BIN 0x10000000ULL
#define NXGE_PARAM_BASE_HEX 0x20000000ULL
#define NXGE_PARAM_BASE_STR 0x40000000ULL
#define NXGE_PARAM_DONT_SHOW 0x80000000ULL
#define NXGE_PARAM_ARRAY_CNT_MASK 0x0000ffff00000000ULL
#define NXGE_PARAM_ARRAY_CNT_SHIFT 32ULL
#define NXGE_PARAM_ARRAY_ALLOC_MASK 0xffff000000000000ULL
#define NXGE_PARAM_ARRAY_ALLOC_SHIFT 48ULL
typedef struct _nxge_param_t {
int (*getf)();
int (*setf)();
uint64_t type;
uint64_t minimum;
uint64_t maximum;
uint64_t value;
uint64_t old_value;
char *fcode_name;
char *name;
} nxge_param_t, *p_nxge_param_t;
typedef enum {
nxge_lb_normal,
nxge_lb_ext10g,
nxge_lb_ext1000,
nxge_lb_ext100,
nxge_lb_ext10,
nxge_lb_phy10g,
nxge_lb_phy1000,
nxge_lb_phy,
nxge_lb_serdes10g,
nxge_lb_serdes1000,
nxge_lb_serdes,
nxge_lb_mac10g,
nxge_lb_mac1000,
nxge_lb_mac
} nxge_lb_t;
enum nxge_mac_state {
NXGE_MAC_STOPPED = 0,
NXGE_MAC_STARTED,
NXGE_MAC_STOPPING
};
typedef struct _nxge_dladdr_t {
ether_addr_st dl_phys;
uint16_t dl_sap;
} nxge_dladdr_t, *p_nxge_dladdr_t;
typedef struct _mc_addr_t {
ether_addr_st multcast_addr;
uint_t mc_addr_cnt;
} mc_addr_t, *p_mc_addr_t;
typedef struct _mc_bucket_t {
p_mc_addr_t addr_list;
uint_t list_size;
} mc_bucket_t, *p_mc_bucket_t;
typedef struct _mc_table_t {
p_mc_bucket_t bucket_list;
uint_t buckets_used;
} mc_table_t, *p_mc_table_t;
typedef struct _filter_t {
uint32_t all_phys_cnt;
uint32_t all_multicast_cnt;
uint32_t all_sap_cnt;
} filter_t, *p_filter_t;
typedef struct _nxge_port_stats_t {
size_t stats_size;
uint64_t ipackets;
uint64_t ierrors;
uint64_t opackets;
uint64_t oerrors;
uint64_t collisions;
uint64_t rbytes;
uint64_t obytes;
uint32_t multircv;
uint32_t multixmt;
uint32_t brdcstrcv;
uint32_t brdcstxmt;
uint32_t norcvbuf;
uint32_t noxmtbuf;
nxge_lb_t lb_mode;
uint32_t qos_mode;
uint32_t trunk_mode;
uint32_t poll_mode;
uint32_t tx_inits;
uint32_t tx_starts;
uint32_t tx_nocanput;
uint32_t tx_msgdup_fail;
uint32_t tx_allocb_fail;
uint32_t tx_no_desc;
uint32_t tx_dma_bind_fail;
uint32_t tx_uflo;
uint32_t tx_hdr_pkts;
uint32_t tx_ddi_pkts;
uint32_t tx_dvma_pkts;
uint32_t tx_max_pend;
uint32_t rx_inits;
uint32_t rx_hdr_pkts;
uint32_t rx_mtu_pkts;
uint32_t rx_split_pkts;
uint32_t rx_no_buf;
uint32_t rx_no_comp_wb;
uint32_t rx_ov_flow;
uint32_t rx_len_mm;
uint32_t rx_tag_err;
uint32_t rx_nocanput;
uint32_t rx_msgdup_fail;
uint32_t rx_allocb_fail;
uint32_t rx_new_pages;
uint32_t rx_new_hdr_pgs;
uint32_t rx_new_mtu_pgs;
uint32_t rx_new_nxt_pgs;
uint32_t rx_reused_pgs;
uint32_t rx_hdr_drops;
uint32_t rx_mtu_drops;
uint32_t rx_nxt_drops;
uint32_t rx_rel_flow;
uint32_t rx_rel_bit;
uint32_t rx_pkts_dropped;
uint32_t pci_bus_speed;
uint32_t pci_err;
uint32_t pci_rta_err;
uint32_t pci_rma_err;
uint32_t pci_parity_err;
uint32_t pci_bad_ack_err;
uint32_t pci_drto_err;
uint32_t pci_dmawz_err;
uint32_t pci_dmarz_err;
uint32_t rx_taskq_waits;
uint32_t tx_jumbo_pkts;
uint32_t user_defined;
} nxge_port_stats_t, *p_nxge_port_stats_t;
typedef struct _nxge_stats_t {
size_t stats_size;
kstat_t *ksp;
kstat_t *rdc_ksp[NXGE_MAX_RDCS];
kstat_t *tdc_ksp[NXGE_MAX_TDCS];
kstat_t *rdc_sys_ksp;
kstat_t *fflp_ksp[1];
kstat_t *ipp_ksp;
kstat_t *txc_ksp;
kstat_t *mac_ksp;
kstat_t *zcp_ksp;
kstat_t *port_ksp;
kstat_t *mmac_ksp;
nxge_mac_stats_t mac_stats;
nxge_xmac_stats_t xmac_stats;
nxge_bmac_stats_t bmac_stats;
nxge_rx_ring_stats_t rx_stats;
nxge_ipp_stats_t ipp_stats;
nxge_zcp_stats_t zcp_stats;
nxge_rx_ring_stats_t rdc_stats[NXGE_MAX_RDCS];
nxge_rdc_sys_stats_t rdc_sys_stats;
nxge_tx_ring_stats_t tx_stats;
nxge_txc_stats_t txc_stats;
nxge_tx_ring_stats_t tdc_stats[NXGE_MAX_TDCS];
nxge_fflp_stats_t fflp_stats;
nxge_port_stats_t port_stats;
nxge_mmac_stats_t mmac_stats;
} nxge_stats_t, *p_nxge_stats_t;
typedef struct _nxge_intr_t {
boolean_t intr_registered;
boolean_t intr_enabled;
boolean_t niu_msi_enable;
int intr_types;
int intr_type;
int max_int_cnt;
int start_inum;
int msi_intx_cnt;
int intr_added;
int intr_cap;
size_t intr_size;
ddi_intr_handle_t *htable;
int pri;
} nxge_intr_t, *p_nxge_intr_t;
typedef struct _nxge_ldgv_t {
uint8_t ndma_ldvs;
uint8_t nldvs;
uint8_t maxldgs;
uint8_t maxldvs;
uint8_t ldg_intrs;
uint32_t tmres;
p_nxge_ldg_t ldgp;
p_nxge_ldv_t ldvp;
p_nxge_ldv_t ldvp_syserr;
boolean_t ldvp_syserr_alloced;
} nxge_ldgv_t, *p_nxge_ldgv_t;
typedef enum {
NXGE_TRANSMIT_GROUP,
NXGE_RECEIVE_GROUP,
NXGE_VR_GROUP,
EXT_TRANSMIT_GROUP,
EXT_RECEIVE_GROUP
} nxge_grp_type_t;
#define NXGE_ILLEGAL_CHANNEL (NXGE_MAX_TDCS + 1)
typedef uint8_t nxge_channel_t;
typedef struct nxge_grp {
nxge_t *nxge;
nxge_grp_type_t type;
int sequence;
int index;
struct nx_dc *dc;
size_t count;
boolean_t active;
dc_map_t map;
nxge_channel_t legend[NXGE_MAX_TDCS];
} nxge_grp_t;
typedef struct {
lg_map_t map;
size_t count;
} lg_data_t;
typedef struct {
dc_map_t map;
size_t count;
} dc_data_t;
#define NXGE_DC_SET(map, channel) map |= (1 << channel)
#define NXGE_DC_RESET(map, channel) map &= (~(1 << channel))
#define NXGE_LOGICAL_GROUP_MAX NXGE_MAX_RDC_GROUPS
typedef struct {
int sequence;
nxge_grp_t *group[NXGE_LOGICAL_GROUP_MAX];
lg_data_t lg;
dc_data_t shared;
dc_data_t owned;
dc_data_t dead;
} nxge_grp_set_t;
typedef struct _nxge_ring_group_t {
mac_group_handle_t ghandle;
p_nxge_t nxgep;
boolean_t started;
boolean_t port_default_grp;
mac_ring_type_t type;
int gindex;
int sindex;
int rdctbl;
int n_mac_addrs;
} nxge_ring_group_t;
typedef struct _nxge_ring_handle_t {
p_nxge_t nxgep;
int index;
mac_ring_handle_t ring_handle;
uint64_t ring_gen_num;
uint32_t channel;
} nxge_ring_handle_t, *p_nxge_ring_handle_t;
typedef struct _nxge_share_handle_t {
p_nxge_t nxgep;
int index;
void *vrp;
uint64_t tmap;
uint64_t rmap;
int rxgroup;
boolean_t active;
} nxge_share_handle_t;
struct _nxge_t {
dev_info_t *dip;
dev_info_t *p_dip;
int instance;
int function_num;
int nports;
int board_ver;
int use_partition;
uint32_t drv_state;
uint64_t nxge_debug_level;
kmutex_t genlock[1];
enum nxge_mac_state nxge_mac_state;
p_dev_regs_t dev_regs;
npi_handle_t npi_handle;
npi_handle_t npi_pci_handle;
npi_handle_t npi_reg_handle;
npi_handle_t npi_msi_handle;
npi_handle_t npi_vreg_handle;
npi_handle_t npi_v2reg_handle;
nxge_xcvr_table_t xcvr;
boolean_t hot_swappable_phy;
boolean_t phy_absent;
uint32_t xcvr_addr;
uint16_t chip_id;
nxge_nlp_conn_t nlp_conn;
nxge_phy_prop_t phy_prop;
nxge_serdes_prop_t srds_prop;
nxge_mac_t mac;
nxge_ipp_t ipp;
nxge_txc_t txc;
nxge_classify_t classifier;
mac_handle_t mach;
p_nxge_stats_t statsp;
uint32_t param_count;
p_nxge_param_t param_arr;
uint32_t param_en_pause:1,
param_en_asym_pause:1,
param_en_1000fdx:1,
param_en_100fdx:1,
param_en_10fdx:1,
param_pad_to_32:27;
nxge_hw_list_t *nxge_hw_p;
niu_type_t niu_type;
platform_type_t platform_type;
boolean_t os_addr_mode32;
uint8_t def_rdc;
nxge_intr_t nxge_intr_type;
nxge_dma_pt_cfg_t pt_config;
nxge_class_pt_cfg_t class_config;
p_nxge_ldgv_t ldgvp;
npi_vpd_info_t vpd_info;
ether_addr_st factaddr;
ether_addr_st ouraddr;
boolean_t primary;
kmutex_t ouraddr_lock;
ddi_iblock_cookie_t interrupt_cookie;
uint32_t rx_default_block_size;
nxge_rx_block_size_t rx_bksize_code;
p_nxge_dma_pool_t rx_buf_pool_p;
p_nxge_dma_pool_t rx_cntl_pool_p;
p_nxge_dma_pool_t tx_buf_pool_p;
p_nxge_dma_pool_t tx_cntl_pool_p;
p_rx_rbr_rings_t rx_rbr_rings;
p_rx_rcr_rings_t rx_rcr_rings;
p_rx_mbox_areas_t rx_mbox_areas_p;
uint32_t rdc_mask;
p_tx_rings_t tx_rings;
p_tx_mbox_areas_t tx_mbox_areas_p;
ddi_dma_handle_t dmasparehandle;
ulong_t sys_page_sz;
ulong_t sys_page_mask;
int suspended;
mii_bmsr_t bmsr;
mii_bmsr_t soft_bmsr;
kmutex_t mif_lock;
void (*mii_read)();
void (*mii_write)();
void (*mii_poll)();
filter_t filter;
p_hash_filter_t hash_filter;
krwlock_t filter_lock;
ulong_t sys_burst_sz;
uint8_t cache_line;
timeout_id_t nxge_link_poll_timerid;
timeout_id_t nxge_timerid;
uint_t need_periodic_reclaim;
timeout_id_t reclaim_timer;
uint8_t msg_min;
uint8_t crc_size;
boolean_t hard_props_read;
uint32_t nxge_ncpus;
uint16_t intr_timeout;
uint16_t intr_threshold;
int fm_capabilities;
uint32_t nxge_port_rbr_size;
uint32_t nxge_port_rbr_spare_size;
uint32_t nxge_port_rcr_size;
uint32_t nxge_port_rx_cntl_alloc_size;
uint32_t nxge_port_tx_ring_size;
nxge_mmac_t nxge_mmac_info;
#if defined(sun4v)
boolean_t niu_hsvc_available;
hsvc_info_t niu_hsvc;
uint64_t niu_min_ver;
#endif
boolean_t link_notify;
int link_check_count;
kmutex_t poll_lock;
kcondvar_t poll_cv;
link_mon_enable_t poll_state;
#define NXGE_MAGIC 0x3ab434e3
uint32_t nxge_magic;
int soft_lso_enable;
nxge_environs_t environs;
ether_addr_t hio_mac_addr;
uint32_t niu_cfg_hdl;
kmutex_t group_lock;
struct nxge_hio_vr *hio_vr;
nxge_grp_set_t rx_set;
nxge_grp_set_t tx_set;
boolean_t tdc_is_shared[NXGE_MAX_TDCS];
nxge_ring_handle_t tx_ring_handles[NXGE_MAX_TDCS];
nxge_ring_handle_t rx_ring_handles[NXGE_MAX_RDCS];
nxge_ring_group_t tx_hio_groups[NXGE_MAX_TDC_GROUPS];
nxge_ring_group_t rx_hio_groups[NXGE_MAX_RDC_GROUPS];
nxge_share_handle_t shares[NXGE_MAX_VRS];
niu_hw_type_t niu_hw_type;
};
#define STATE_REGS_MAPPED 0x000000001
#define STATE_KSTATS_SETUP 0x000000002
#define STATE_NODE_CREATED 0x000000004
#define STATE_HW_CONFIG_CREATED 0x000000008
#define STATE_HW_INITIALIZED 0x000000010
#define STATE_MDIO_LOCK_INIT 0x000000020
#define STATE_MII_LOCK_INIT 0x000000040
#define STOP_POLL_THRESH 9
#define START_POLL_THRESH 2
typedef struct _nxge_port_kstat_t {
kstat_named_t xcvr_inits;
kstat_named_t xcvr_inuse;
kstat_named_t xcvr_addr;
kstat_named_t xcvr_id;
kstat_named_t cap_autoneg;
kstat_named_t cap_10gfdx;
kstat_named_t cap_10ghdx;
kstat_named_t cap_1000fdx;
kstat_named_t cap_1000hdx;
kstat_named_t cap_100T4;
kstat_named_t cap_100fdx;
kstat_named_t cap_100hdx;
kstat_named_t cap_10fdx;
kstat_named_t cap_10hdx;
kstat_named_t cap_asmpause;
kstat_named_t cap_pause;
kstat_named_t lp_cap_autoneg;
kstat_named_t lp_cap_10gfdx;
kstat_named_t lp_cap_10ghdx;
kstat_named_t lp_cap_1000fdx;
kstat_named_t lp_cap_1000hdx;
kstat_named_t lp_cap_100T4;
kstat_named_t lp_cap_100fdx;
kstat_named_t lp_cap_100hdx;
kstat_named_t lp_cap_10fdx;
kstat_named_t lp_cap_10hdx;
kstat_named_t lp_cap_asmpause;
kstat_named_t lp_cap_pause;
kstat_named_t link_T4;
kstat_named_t link_speed;
kstat_named_t link_duplex;
kstat_named_t link_asmpause;
kstat_named_t link_pause;
kstat_named_t link_up;
kstat_named_t mac_mtu;
kstat_named_t lb_mode;
kstat_named_t qos_mode;
kstat_named_t trunk_mode;
kstat_named_t ifspeed;
kstat_named_t promisc;
kstat_named_t rev_id;
kstat_named_t user_defined;
} nxge_port_kstat_t, *p_nxge_port_kstat_t;
typedef struct _nxge_rdc_kstat {
kstat_named_t ipackets;
kstat_named_t rbytes;
kstat_named_t errors;
kstat_named_t dcf_err;
kstat_named_t rcr_ack_err;
kstat_named_t dc_fifoflow_err;
kstat_named_t rcr_sha_par_err;
kstat_named_t rbr_pre_par_err;
kstat_named_t wred_drop;
kstat_named_t rbr_pre_emty;
kstat_named_t rcr_shadow_full;
kstat_named_t rbr_tmout;
kstat_named_t rsp_cnt_err;
kstat_named_t byte_en_bus;
kstat_named_t rsp_dat_err;
kstat_named_t pkt_too_long_err;
kstat_named_t compl_l2_err;
kstat_named_t compl_l4_cksum_err;
kstat_named_t compl_zcp_soft_err;
kstat_named_t compl_fflp_soft_err;
kstat_named_t config_err;
kstat_named_t rcrincon;
kstat_named_t rcrfull;
kstat_named_t rbr_empty;
kstat_named_t rbrfull;
kstat_named_t rbrlogpage;
kstat_named_t cfiglogpage;
kstat_named_t port_drop_pkt;
kstat_named_t rcr_to;
kstat_named_t rcr_thresh;
kstat_named_t rcr_mex;
kstat_named_t id_mismatch;
kstat_named_t zcp_eop_err;
kstat_named_t ipp_eop_err;
} nxge_rdc_kstat_t, *p_nxge_rdc_kstat_t;
typedef struct _nxge_rdc_sys_kstat {
kstat_named_t pre_par;
kstat_named_t sha_par;
kstat_named_t id_mismatch;
kstat_named_t ipp_eop_err;
kstat_named_t zcp_eop_err;
} nxge_rdc_sys_kstat_t, *p_nxge_rdc_sys_kstat_t;
typedef struct _nxge_tdc_kstat {
kstat_named_t opackets;
kstat_named_t obytes;
kstat_named_t oerrors;
kstat_named_t tx_inits;
kstat_named_t tx_no_buf;
kstat_named_t mbox_err;
kstat_named_t pkt_size_err;
kstat_named_t tx_ring_oflow;
kstat_named_t pref_buf_ecc_err;
kstat_named_t nack_pref;
kstat_named_t nack_pkt_rd;
kstat_named_t conf_part_err;
kstat_named_t pkt_prt_err;
kstat_named_t reset_fail;
kstat_named_t tx_starts;
kstat_named_t tx_nocanput;
kstat_named_t tx_msgdup_fail;
kstat_named_t tx_allocb_fail;
kstat_named_t tx_no_desc;
kstat_named_t tx_dma_bind_fail;
kstat_named_t tx_uflo;
kstat_named_t tx_hdr_pkts;
kstat_named_t tx_ddi_pkts;
kstat_named_t tx_dvma_pkts;
kstat_named_t tx_max_pend;
} nxge_tdc_kstat_t, *p_nxge_tdc_kstat_t;
typedef struct _nxge_txc_kstat {
kstat_named_t pkt_stuffed;
kstat_named_t pkt_xmit;
kstat_named_t ro_correct_err;
kstat_named_t ro_uncorrect_err;
kstat_named_t sf_correct_err;
kstat_named_t sf_uncorrect_err;
kstat_named_t address_failed;
kstat_named_t dma_failed;
kstat_named_t length_failed;
kstat_named_t pkt_assy_dead;
kstat_named_t reorder_err;
} nxge_txc_kstat_t, *p_nxge_txc_kstat_t;
typedef struct _nxge_ipp_kstat {
kstat_named_t eop_miss;
kstat_named_t sop_miss;
kstat_named_t dfifo_ue;
kstat_named_t ecc_err_cnt;
kstat_named_t pfifo_perr;
kstat_named_t pfifo_over;
kstat_named_t pfifo_und;
kstat_named_t bad_cs_cnt;
kstat_named_t pkt_dis_cnt;
} nxge_ipp_kstat_t, *p_nxge_ipp_kstat_t;
typedef struct _nxge_zcp_kstat {
kstat_named_t errors;
kstat_named_t inits;
kstat_named_t rrfifo_underrun;
kstat_named_t rrfifo_overrun;
kstat_named_t rspfifo_uncorr_err;
kstat_named_t buffer_overflow;
kstat_named_t stat_tbl_perr;
kstat_named_t dyn_tbl_perr;
kstat_named_t buf_tbl_perr;
kstat_named_t tt_program_err;
kstat_named_t rsp_tt_index_err;
kstat_named_t slv_tt_index_err;
kstat_named_t zcp_tt_index_err;
kstat_named_t access_fail;
kstat_named_t cfifo_ecc;
} nxge_zcp_kstat_t, *p_nxge_zcp_kstat_t;
typedef struct _nxge_mac_kstat {
kstat_named_t tx_frame_cnt;
kstat_named_t tx_underflow_err;
kstat_named_t tx_overflow_err;
kstat_named_t tx_maxpktsize_err;
kstat_named_t tx_fifo_xfr_err;
kstat_named_t tx_byte_cnt;
kstat_named_t rx_frame_cnt;
kstat_named_t rx_underflow_err;
kstat_named_t rx_overflow_err;
kstat_named_t rx_len_err_cnt;
kstat_named_t rx_crc_err_cnt;
kstat_named_t rx_viol_err_cnt;
kstat_named_t rx_byte_cnt;
kstat_named_t rx_hist1_cnt;
kstat_named_t rx_hist2_cnt;
kstat_named_t rx_hist3_cnt;
kstat_named_t rx_hist4_cnt;
kstat_named_t rx_hist5_cnt;
kstat_named_t rx_hist6_cnt;
kstat_named_t rx_hist7_cnt;
kstat_named_t rx_broadcast_cnt;
kstat_named_t rx_mult_cnt;
kstat_named_t rx_frag_cnt;
kstat_named_t rx_frame_align_err_cnt;
kstat_named_t rx_linkfault_err_cnt;
kstat_named_t rx_local_fault_err_cnt;
kstat_named_t rx_remote_fault_err_cnt;
} nxge_mac_kstat_t, *p_nxge_mac_kstat_t;
typedef struct _nxge_xmac_kstat {
kstat_named_t tx_frame_cnt;
kstat_named_t tx_underflow_err;
kstat_named_t tx_maxpktsize_err;
kstat_named_t tx_overflow_err;
kstat_named_t tx_fifo_xfr_err;
kstat_named_t tx_byte_cnt;
kstat_named_t rx_frame_cnt;
kstat_named_t rx_underflow_err;
kstat_named_t rx_overflow_err;
kstat_named_t rx_crc_err_cnt;
kstat_named_t rx_len_err_cnt;
kstat_named_t rx_viol_err_cnt;
kstat_named_t rx_byte_cnt;
kstat_named_t rx_hist1_cnt;
kstat_named_t rx_hist2_cnt;
kstat_named_t rx_hist3_cnt;
kstat_named_t rx_hist4_cnt;
kstat_named_t rx_hist5_cnt;
kstat_named_t rx_hist6_cnt;
kstat_named_t rx_hist7_cnt;
kstat_named_t rx_broadcast_cnt;
kstat_named_t rx_mult_cnt;
kstat_named_t rx_frag_cnt;
kstat_named_t rx_frame_align_err_cnt;
kstat_named_t rx_linkfault_err_cnt;
kstat_named_t rx_remote_fault_err_cnt;
kstat_named_t rx_local_fault_err_cnt;
kstat_named_t rx_pause_cnt;
kstat_named_t xpcs_deskew_err_cnt;
kstat_named_t xpcs_ln0_symbol_err_cnt;
kstat_named_t xpcs_ln1_symbol_err_cnt;
kstat_named_t xpcs_ln2_symbol_err_cnt;
kstat_named_t xpcs_ln3_symbol_err_cnt;
} nxge_xmac_kstat_t, *p_nxge_xmac_kstat_t;
typedef struct _nxge_bmac_kstat {
kstat_named_t tx_frame_cnt;
kstat_named_t tx_underrun_err;
kstat_named_t tx_max_pkt_err;
kstat_named_t tx_byte_cnt;
kstat_named_t rx_frame_cnt;
kstat_named_t rx_byte_cnt;
kstat_named_t rx_overflow_err;
kstat_named_t rx_align_err_cnt;
kstat_named_t rx_crc_err_cnt;
kstat_named_t rx_len_err_cnt;
kstat_named_t rx_viol_err_cnt;
kstat_named_t rx_pause_cnt;
kstat_named_t tx_pause_state;
kstat_named_t tx_nopause_state;
} nxge_bmac_kstat_t, *p_nxge_bmac_kstat_t;
typedef struct _nxge_fflp_kstat {
kstat_named_t fflp_tcam_perr;
kstat_named_t fflp_tcam_ecc_err;
kstat_named_t fflp_vlan_perr;
kstat_named_t fflp_hasht_lookup_err;
kstat_named_t fflp_hasht_data_err[MAX_PARTITION];
} nxge_fflp_kstat_t, *p_nxge_fflp_kstat_t;
typedef struct _nxge_mmac_kstat {
kstat_named_t mmac_max_addr_cnt;
kstat_named_t mmac_avail_addr_cnt;
kstat_named_t mmac_addr1;
kstat_named_t mmac_addr2;
kstat_named_t mmac_addr3;
kstat_named_t mmac_addr4;
kstat_named_t mmac_addr5;
kstat_named_t mmac_addr6;
kstat_named_t mmac_addr7;
kstat_named_t mmac_addr8;
kstat_named_t mmac_addr9;
kstat_named_t mmac_addr10;
kstat_named_t mmac_addr11;
kstat_named_t mmac_addr12;
kstat_named_t mmac_addr13;
kstat_named_t mmac_addr14;
kstat_named_t mmac_addr15;
kstat_named_t mmac_addr16;
} nxge_mmac_kstat_t, *p_nxge_mmac_kstat_t;
nxge_status_t nxge_init(p_nxge_t);
void nxge_uninit(p_nxge_t);
void nxge_get64(p_nxge_t, p_mblk_t);
void nxge_put64(p_nxge_t, p_mblk_t);
void nxge_pio_loop(p_nxge_t, p_mblk_t);
typedef void (*fptrv_t)();
timeout_id_t nxge_start_timer(p_nxge_t, fptrv_t, int);
void nxge_stop_timer(p_nxge_t, timeout_id_t);
#ifdef __cplusplus
}
#endif
#endif