16f45ec7bSml29623 /* 26f45ec7bSml29623 * CDDL HEADER START 36f45ec7bSml29623 * 46f45ec7bSml29623 * The contents of this file are subject to the terms of the 56f45ec7bSml29623 * Common Development and Distribution License (the "License"). 66f45ec7bSml29623 * You may not use this file except in compliance with the License. 76f45ec7bSml29623 * 86f45ec7bSml29623 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 96f45ec7bSml29623 * or http://www.opensolaris.org/os/licensing. 106f45ec7bSml29623 * See the License for the specific language governing permissions 116f45ec7bSml29623 * and limitations under the License. 126f45ec7bSml29623 * 136f45ec7bSml29623 * When distributing Covered Code, include this CDDL HEADER in each 146f45ec7bSml29623 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 156f45ec7bSml29623 * If applicable, add the following below this CDDL HEADER, with the 166f45ec7bSml29623 * fields enclosed by brackets "[]" replaced with your own identifying 176f45ec7bSml29623 * information: Portions Copyright [yyyy] [name of copyright owner] 186f45ec7bSml29623 * 196f45ec7bSml29623 * CDDL HEADER END 206f45ec7bSml29623 */ 216f45ec7bSml29623 /* 2289282175SSantwona Behera * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 236f45ec7bSml29623 */ 246f45ec7bSml29623 256f45ec7bSml29623 #ifndef _SYS_NXGE_NXGE_H 266f45ec7bSml29623 #define _SYS_NXGE_NXGE_H 276f45ec7bSml29623 286f45ec7bSml29623 #ifdef __cplusplus 296f45ec7bSml29623 extern "C" { 306f45ec7bSml29623 #endif 316f45ec7bSml29623 326f45ec7bSml29623 #include <nxge_mac.h> 336f45ec7bSml29623 #include <nxge_ipp.h> 346f45ec7bSml29623 #include <nxge_fflp.h> 356f45ec7bSml29623 366f45ec7bSml29623 /* 376f45ec7bSml29623 * NXGE diagnostics IOCTLS. 386f45ec7bSml29623 */ 396f45ec7bSml29623 #define NXGE_IOC ((((('N' << 8) + 'X') << 8) + 'G') << 8) 406f45ec7bSml29623 416f45ec7bSml29623 #define NXGE_GET64 (NXGE_IOC|1) 426f45ec7bSml29623 #define NXGE_PUT64 (NXGE_IOC|2) 436f45ec7bSml29623 #define NXGE_GET_TX_RING_SZ (NXGE_IOC|3) 446f45ec7bSml29623 #define NXGE_GET_TX_DESC (NXGE_IOC|4) 456f45ec7bSml29623 #define NXGE_GLOBAL_RESET (NXGE_IOC|5) 466f45ec7bSml29623 #define NXGE_TX_SIDE_RESET (NXGE_IOC|6) 476f45ec7bSml29623 #define NXGE_RX_SIDE_RESET (NXGE_IOC|7) 486f45ec7bSml29623 #define NXGE_RESET_MAC (NXGE_IOC|8) 496f45ec7bSml29623 506f45ec7bSml29623 #define NXGE_GET_MII (NXGE_IOC|11) 516f45ec7bSml29623 #define NXGE_PUT_MII (NXGE_IOC|12) 526f45ec7bSml29623 #define NXGE_RTRACE (NXGE_IOC|13) 536f45ec7bSml29623 #define NXGE_RTRACE_TEST (NXGE_IOC|20) 546f45ec7bSml29623 #define NXGE_TX_REGS_DUMP (NXGE_IOC|21) 556f45ec7bSml29623 #define NXGE_RX_REGS_DUMP (NXGE_IOC|22) 566f45ec7bSml29623 #define NXGE_INT_REGS_DUMP (NXGE_IOC|23) 576f45ec7bSml29623 #define NXGE_VIR_REGS_DUMP (NXGE_IOC|24) 586f45ec7bSml29623 #define NXGE_VIR_INT_REGS_DUMP (NXGE_IOC|25) 596f45ec7bSml29623 #define NXGE_RDUMP (NXGE_IOC|26) 606f45ec7bSml29623 #define NXGE_RDC_GRPS_DUMP (NXGE_IOC|27) 616f45ec7bSml29623 #define NXGE_PIO_TEST (NXGE_IOC|28) 626f45ec7bSml29623 636f45ec7bSml29623 #define NXGE_GET_TCAM (NXGE_IOC|29) 646f45ec7bSml29623 #define NXGE_PUT_TCAM (NXGE_IOC|30) 656f45ec7bSml29623 #define NXGE_INJECT_ERR (NXGE_IOC|40) 666f45ec7bSml29623 674df55fdeSJanie Lu #define NXGE_RX_CLASS (NXGE_IOC|41) 684df55fdeSJanie Lu #define NXGE_RX_HASH (NXGE_IOC|42) 694df55fdeSJanie Lu 706f45ec7bSml29623 #define NXGE_OK 0 716f45ec7bSml29623 #define NXGE_ERROR 0x40000000 726f45ec7bSml29623 #define NXGE_DDI_FAILED 0x20000000 736f45ec7bSml29623 #define NXGE_GET_PORT_NUM(n) n 746f45ec7bSml29623 756f45ec7bSml29623 /* 766f45ec7bSml29623 * Definitions for module_info. 776f45ec7bSml29623 */ 786f45ec7bSml29623 #define NXGE_IDNUM (0) /* module ID number */ 796f45ec7bSml29623 #define NXGE_DRIVER_NAME "nxge" /* module name */ 806f45ec7bSml29623 816f45ec7bSml29623 #define NXGE_MINPSZ (0) /* min packet size */ 826f45ec7bSml29623 #define NXGE_MAXPSZ (ETHERMTU) /* max packet size */ 836f45ec7bSml29623 #define NXGE_HIWAT (2048 * NXGE_MAXPSZ) /* hi-water mark */ 846f45ec7bSml29623 #define NXGE_LOWAT (1) /* lo-water mark */ 856f45ec7bSml29623 #define NXGE_HIWAT_MAX (192000 * NXGE_MAXPSZ) 866f45ec7bSml29623 #define NXGE_HIWAT_MIN (2 * NXGE_MAXPSZ) 876f45ec7bSml29623 #define NXGE_LOWAT_MAX (192000 * NXGE_MAXPSZ) 886f45ec7bSml29623 #define NXGE_LOWAT_MIN (1) 896f45ec7bSml29623 906f45ec7bSml29623 #ifndef D_HOTPLUG 916f45ec7bSml29623 #define D_HOTPLUG 0x00 926f45ec7bSml29623 #endif 936f45ec7bSml29623 946f45ec7bSml29623 #define INIT_BUCKET_SIZE 16 /* Initial Hash Bucket Size */ 956f45ec7bSml29623 966f45ec7bSml29623 #define NXGE_CHECK_TIMER (5000) 976f45ec7bSml29623 984df55fdeSJanie Lu /* KT/NIU OBP creates a compatible property for KT */ 994df55fdeSJanie Lu #define KT_NIU_COMPATIBLE "SUNW,niusl-kt" 1004df55fdeSJanie Lu 1016f45ec7bSml29623 typedef enum { 1026f45ec7bSml29623 param_instance, 1036f45ec7bSml29623 param_main_instance, 1046f45ec7bSml29623 param_function_number, 1056f45ec7bSml29623 param_partition_id, 1066f45ec7bSml29623 param_read_write_mode, 10756d930aeSspeer param_fw_version, 1082e59129aSraghus param_port_mode, 1096f45ec7bSml29623 param_niu_cfg_type, 1106f45ec7bSml29623 param_tx_quick_cfg, 1116f45ec7bSml29623 param_rx_quick_cfg, 1126f45ec7bSml29623 param_master_cfg_enable, 1136f45ec7bSml29623 param_master_cfg_value, 1146f45ec7bSml29623 1156f45ec7bSml29623 param_autoneg, 1166f45ec7bSml29623 param_anar_10gfdx, 1176f45ec7bSml29623 param_anar_10ghdx, 1186f45ec7bSml29623 param_anar_1000fdx, 1196f45ec7bSml29623 param_anar_1000hdx, 1206f45ec7bSml29623 param_anar_100T4, 1216f45ec7bSml29623 param_anar_100fdx, 1226f45ec7bSml29623 param_anar_100hdx, 1236f45ec7bSml29623 param_anar_10fdx, 1246f45ec7bSml29623 param_anar_10hdx, 1256f45ec7bSml29623 1266f45ec7bSml29623 param_anar_asmpause, 1276f45ec7bSml29623 param_anar_pause, 1286f45ec7bSml29623 param_use_int_xcvr, 1296f45ec7bSml29623 param_enable_ipg0, 1306f45ec7bSml29623 param_ipg0, 1316f45ec7bSml29623 param_ipg1, 1326f45ec7bSml29623 param_ipg2, 1336f45ec7bSml29623 param_txdma_weight, 1346f45ec7bSml29623 param_txdma_channels_begin, 1356f45ec7bSml29623 1366f45ec7bSml29623 param_txdma_channels, 1376f45ec7bSml29623 param_txdma_info, 1386f45ec7bSml29623 param_rxdma_channels_begin, 1396f45ec7bSml29623 param_rxdma_channels, 1406f45ec7bSml29623 param_rxdma_drr_weight, 1416f45ec7bSml29623 param_rxdma_full_header, 1426f45ec7bSml29623 param_rxdma_info, 1436f45ec7bSml29623 param_rxdma_rbr_size, 1446f45ec7bSml29623 param_rxdma_rcr_size, 1456f45ec7bSml29623 param_default_port_rdc, 1466f45ec7bSml29623 param_rxdma_intr_time, 1476f45ec7bSml29623 param_rxdma_intr_pkts, 1486f45ec7bSml29623 1496f45ec7bSml29623 param_rdc_grps_start, 1506f45ec7bSml29623 param_rx_rdc_grps, 1516f45ec7bSml29623 param_default_grp0_rdc, 1526f45ec7bSml29623 param_default_grp1_rdc, 1536f45ec7bSml29623 param_default_grp2_rdc, 1546f45ec7bSml29623 param_default_grp3_rdc, 1556f45ec7bSml29623 param_default_grp4_rdc, 1566f45ec7bSml29623 param_default_grp5_rdc, 1576f45ec7bSml29623 param_default_grp6_rdc, 1586f45ec7bSml29623 param_default_grp7_rdc, 1596f45ec7bSml29623 1606f45ec7bSml29623 param_info_rdc_groups, 1616f45ec7bSml29623 param_start_ldg, 1626f45ec7bSml29623 param_max_ldg, 1636f45ec7bSml29623 param_mac_2rdc_grp, 1646f45ec7bSml29623 param_vlan_2rdc_grp, 1656f45ec7bSml29623 param_fcram_part_cfg, 1666f45ec7bSml29623 param_fcram_access_ratio, 1676f45ec7bSml29623 param_tcam_access_ratio, 1686f45ec7bSml29623 param_tcam_enable, 1696f45ec7bSml29623 param_hash_lookup_enable, 1706f45ec7bSml29623 param_llc_snap_enable, 1716f45ec7bSml29623 1726f45ec7bSml29623 param_h1_init_value, 1736f45ec7bSml29623 param_h2_init_value, 1746f45ec7bSml29623 param_class_cfg_ether_usr1, 1756f45ec7bSml29623 param_class_cfg_ether_usr2, 1766f45ec7bSml29623 param_class_cfg_ip_usr4, 1776f45ec7bSml29623 param_class_cfg_ip_usr5, 1786f45ec7bSml29623 param_class_cfg_ip_usr6, 1796f45ec7bSml29623 param_class_cfg_ip_usr7, 1806f45ec7bSml29623 param_class_opt_ip_usr4, 1816f45ec7bSml29623 param_class_opt_ip_usr5, 1826f45ec7bSml29623 param_class_opt_ip_usr6, 1836f45ec7bSml29623 param_class_opt_ip_usr7, 1846f45ec7bSml29623 param_class_opt_ipv4_tcp, 1856f45ec7bSml29623 param_class_opt_ipv4_udp, 1866f45ec7bSml29623 param_class_opt_ipv4_ah, 1876f45ec7bSml29623 param_class_opt_ipv4_sctp, 1886f45ec7bSml29623 param_class_opt_ipv6_tcp, 1896f45ec7bSml29623 param_class_opt_ipv6_udp, 1906f45ec7bSml29623 param_class_opt_ipv6_ah, 1916f45ec7bSml29623 param_class_opt_ipv6_sctp, 1926f45ec7bSml29623 param_nxge_debug_flag, 1936f45ec7bSml29623 param_npi_debug_flag, 1946f45ec7bSml29623 param_dump_rdc, 1956f45ec7bSml29623 param_dump_tdc, 1966f45ec7bSml29623 param_dump_mac_regs, 1976f45ec7bSml29623 param_dump_ipp_regs, 1986f45ec7bSml29623 param_dump_fflp_regs, 1996f45ec7bSml29623 param_dump_vlan_table, 2006f45ec7bSml29623 param_dump_rdc_table, 2016f45ec7bSml29623 param_dump_ptrs, 2026f45ec7bSml29623 param_end 2036f45ec7bSml29623 } nxge_param_index_t; 2046f45ec7bSml29623 205678453a8Sspeer typedef enum { 206678453a8Sspeer SOLARIS_DOMAIN, 207678453a8Sspeer SOLARIS_SERVICE_DOMAIN, 208678453a8Sspeer SOLARIS_GUEST_DOMAIN, 209678453a8Sspeer LINUX_SERVICE_DOMAIN, 210678453a8Sspeer LINUX_GUEST_DOMAIN 211678453a8Sspeer } nxge_environs_t; 2126f45ec7bSml29623 2136f45ec7bSml29623 /* 2146f45ec7bSml29623 * Named Dispatch Parameter Management Structure 2156f45ec7bSml29623 */ 2166f45ec7bSml29623 typedef int (*nxge_ndgetf_t)(p_nxge_t, queue_t *, MBLKP, caddr_t, cred_t *); 2176f45ec7bSml29623 typedef int (*nxge_ndsetf_t)(p_nxge_t, queue_t *, 2186f45ec7bSml29623 MBLKP, char *, caddr_t, cred_t *); 2196f45ec7bSml29623 2206f45ec7bSml29623 #define NXGE_PARAM_READ 0x00000001ULL 2216f45ec7bSml29623 #define NXGE_PARAM_WRITE 0x00000002ULL 2226f45ec7bSml29623 #define NXGE_PARAM_SHARED 0x00000004ULL 2236f45ec7bSml29623 #define NXGE_PARAM_PRIV 0x00000008ULL 2246f45ec7bSml29623 #define NXGE_PARAM_RW NXGE_PARAM_READ | NXGE_PARAM_WRITE 2256f45ec7bSml29623 #define NXGE_PARAM_RWS NXGE_PARAM_RW | NXGE_PARAM_SHARED 2266f45ec7bSml29623 #define NXGE_PARAM_RWP NXGE_PARAM_RW | NXGE_PARAM_PRIV 2276f45ec7bSml29623 2286f45ec7bSml29623 #define NXGE_PARAM_RXDMA 0x00000010ULL 2296f45ec7bSml29623 #define NXGE_PARAM_TXDMA 0x00000020ULL 2306f45ec7bSml29623 #define NXGE_PARAM_CLASS_GEN 0x00000040ULL 2316f45ec7bSml29623 #define NXGE_PARAM_MAC 0x00000080ULL 2326f45ec7bSml29623 #define NXGE_PARAM_CLASS_BIN NXGE_PARAM_CLASS_GEN | NXGE_PARAM_BASE_BIN 2336f45ec7bSml29623 #define NXGE_PARAM_CLASS_HEX NXGE_PARAM_CLASS_GEN | NXGE_PARAM_BASE_HEX 2346f45ec7bSml29623 #define NXGE_PARAM_CLASS NXGE_PARAM_CLASS_HEX 2356f45ec7bSml29623 2366f45ec7bSml29623 #define NXGE_PARAM_CMPLX 0x00010000ULL 2376f45ec7bSml29623 #define NXGE_PARAM_NDD_WR_OK 0x00020000ULL 2386f45ec7bSml29623 #define NXGE_PARAM_INIT_ONLY 0x00040000ULL 2396f45ec7bSml29623 #define NXGE_PARAM_INIT_CONFIG 0x00080000ULL 2406f45ec7bSml29623 2416f45ec7bSml29623 #define NXGE_PARAM_READ_PROP 0x00100000ULL 2426f45ec7bSml29623 #define NXGE_PARAM_PROP_ARR32 0x00200000ULL 2436f45ec7bSml29623 #define NXGE_PARAM_PROP_ARR64 0x00400000ULL 2446f45ec7bSml29623 #define NXGE_PARAM_PROP_STR 0x00800000ULL 2456f45ec7bSml29623 2466f45ec7bSml29623 #define NXGE_PARAM_BASE_DEC 0x00000000ULL 2476f45ec7bSml29623 #define NXGE_PARAM_BASE_BIN 0x10000000ULL 2486f45ec7bSml29623 #define NXGE_PARAM_BASE_HEX 0x20000000ULL 2496f45ec7bSml29623 #define NXGE_PARAM_BASE_STR 0x40000000ULL 2506f45ec7bSml29623 #define NXGE_PARAM_DONT_SHOW 0x80000000ULL 2516f45ec7bSml29623 2526f45ec7bSml29623 #define NXGE_PARAM_ARRAY_CNT_MASK 0x0000ffff00000000ULL 2536f45ec7bSml29623 #define NXGE_PARAM_ARRAY_CNT_SHIFT 32ULL 2546f45ec7bSml29623 #define NXGE_PARAM_ARRAY_ALLOC_MASK 0xffff000000000000ULL 2556f45ec7bSml29623 #define NXGE_PARAM_ARRAY_ALLOC_SHIFT 48ULL 2566f45ec7bSml29623 2576f45ec7bSml29623 typedef struct _nxge_param_t { 2586f45ec7bSml29623 int (*getf)(); 2596f45ec7bSml29623 int (*setf)(); /* null for read only */ 2606f45ec7bSml29623 uint64_t type; /* R/W/ Common/Port/ .... */ 2616f45ec7bSml29623 uint64_t minimum; 2626f45ec7bSml29623 uint64_t maximum; 2636f45ec7bSml29623 uint64_t value; /* for array params, pointer to value array */ 2646f45ec7bSml29623 uint64_t old_value; /* for array params, pointer to old_value array */ 2656f45ec7bSml29623 char *fcode_name; 2666f45ec7bSml29623 char *name; 2676f45ec7bSml29623 } nxge_param_t, *p_nxge_param_t; 2686f45ec7bSml29623 2696f45ec7bSml29623 270321febdeSsbehera /* 271321febdeSsbehera * Do not change the order of the elements of this enum as that will 272321febdeSsbehera * break the driver code. 273321febdeSsbehera */ 2746f45ec7bSml29623 typedef enum { 2756f45ec7bSml29623 nxge_lb_normal, 2766f45ec7bSml29623 nxge_lb_ext10g, 2776f45ec7bSml29623 nxge_lb_ext1000, 2786f45ec7bSml29623 nxge_lb_ext100, 2796f45ec7bSml29623 nxge_lb_ext10, 2806f45ec7bSml29623 nxge_lb_phy10g, 2816f45ec7bSml29623 nxge_lb_phy1000, 2826f45ec7bSml29623 nxge_lb_phy, 2836f45ec7bSml29623 nxge_lb_serdes10g, 2846f45ec7bSml29623 nxge_lb_serdes1000, 2856f45ec7bSml29623 nxge_lb_serdes, 2866f45ec7bSml29623 nxge_lb_mac10g, 2876f45ec7bSml29623 nxge_lb_mac1000, 2886f45ec7bSml29623 nxge_lb_mac 2896f45ec7bSml29623 } nxge_lb_t; 2906f45ec7bSml29623 2916f45ec7bSml29623 enum nxge_mac_state { 2926f45ec7bSml29623 NXGE_MAC_STOPPED = 0, 293678453a8Sspeer NXGE_MAC_STARTED, 294678453a8Sspeer NXGE_MAC_STOPPING 2956f45ec7bSml29623 }; 2966f45ec7bSml29623 2976f45ec7bSml29623 /* 2986f45ec7bSml29623 * Private DLPI full dlsap address format. 2996f45ec7bSml29623 */ 3006f45ec7bSml29623 typedef struct _nxge_dladdr_t { 3016f45ec7bSml29623 ether_addr_st dl_phys; 3026f45ec7bSml29623 uint16_t dl_sap; 3036f45ec7bSml29623 } nxge_dladdr_t, *p_nxge_dladdr_t; 3046f45ec7bSml29623 3056f45ec7bSml29623 typedef struct _mc_addr_t { 3066f45ec7bSml29623 ether_addr_st multcast_addr; 3076f45ec7bSml29623 uint_t mc_addr_cnt; 3086f45ec7bSml29623 } mc_addr_t, *p_mc_addr_t; 3096f45ec7bSml29623 3106f45ec7bSml29623 typedef struct _mc_bucket_t { 3116f45ec7bSml29623 p_mc_addr_t addr_list; 3126f45ec7bSml29623 uint_t list_size; 3136f45ec7bSml29623 } mc_bucket_t, *p_mc_bucket_t; 3146f45ec7bSml29623 3156f45ec7bSml29623 typedef struct _mc_table_t { 3166f45ec7bSml29623 p_mc_bucket_t bucket_list; 3176f45ec7bSml29623 uint_t buckets_used; 3186f45ec7bSml29623 } mc_table_t, *p_mc_table_t; 3196f45ec7bSml29623 3206f45ec7bSml29623 typedef struct _filter_t { 3216f45ec7bSml29623 uint32_t all_phys_cnt; 3226f45ec7bSml29623 uint32_t all_multicast_cnt; 3236f45ec7bSml29623 uint32_t all_sap_cnt; 3246f45ec7bSml29623 } filter_t, *p_filter_t; 3256f45ec7bSml29623 326da14cebeSEric Cheng 3276f45ec7bSml29623 typedef struct _nxge_port_stats_t { 3286f45ec7bSml29623 /* 3296f45ec7bSml29623 * Overall structure size 3306f45ec7bSml29623 */ 3316f45ec7bSml29623 size_t stats_size; 3326f45ec7bSml29623 3336f45ec7bSml29623 /* 3346f45ec7bSml29623 * Link Input/Output stats 3356f45ec7bSml29623 */ 3366f45ec7bSml29623 uint64_t ipackets; 3376f45ec7bSml29623 uint64_t ierrors; 3386f45ec7bSml29623 uint64_t opackets; 3396f45ec7bSml29623 uint64_t oerrors; 3406f45ec7bSml29623 uint64_t collisions; 3416f45ec7bSml29623 3426f45ec7bSml29623 /* 3436f45ec7bSml29623 * MIB II variables 3446f45ec7bSml29623 */ 3456f45ec7bSml29623 uint64_t rbytes; /* # bytes received */ 3466f45ec7bSml29623 uint64_t obytes; /* # bytes transmitted */ 3476f45ec7bSml29623 uint32_t multircv; /* # multicast packets received */ 3486f45ec7bSml29623 uint32_t multixmt; /* # multicast packets for xmit */ 3496f45ec7bSml29623 uint32_t brdcstrcv; /* # broadcast packets received */ 3506f45ec7bSml29623 uint32_t brdcstxmt; /* # broadcast packets for xmit */ 3516f45ec7bSml29623 uint32_t norcvbuf; /* # rcv packets discarded */ 3526f45ec7bSml29623 uint32_t noxmtbuf; /* # xmit packets discarded */ 3536f45ec7bSml29623 3546f45ec7bSml29623 /* 3556f45ec7bSml29623 * Lets the user know the MTU currently in use by 3566f45ec7bSml29623 * the physical MAC port. 3576f45ec7bSml29623 */ 3586f45ec7bSml29623 nxge_lb_t lb_mode; 3596f45ec7bSml29623 uint32_t qos_mode; 3606f45ec7bSml29623 uint32_t trunk_mode; 3616f45ec7bSml29623 uint32_t poll_mode; 3626f45ec7bSml29623 3636f45ec7bSml29623 /* 3646f45ec7bSml29623 * Tx Statistics. 3656f45ec7bSml29623 */ 3666f45ec7bSml29623 uint32_t tx_inits; 3676f45ec7bSml29623 uint32_t tx_starts; 3686f45ec7bSml29623 uint32_t tx_nocanput; 3696f45ec7bSml29623 uint32_t tx_msgdup_fail; 3706f45ec7bSml29623 uint32_t tx_allocb_fail; 3716f45ec7bSml29623 uint32_t tx_no_desc; 3726f45ec7bSml29623 uint32_t tx_dma_bind_fail; 3736f45ec7bSml29623 uint32_t tx_uflo; 3746f45ec7bSml29623 uint32_t tx_hdr_pkts; 3756f45ec7bSml29623 uint32_t tx_ddi_pkts; 3766f45ec7bSml29623 uint32_t tx_dvma_pkts; 3776f45ec7bSml29623 3786f45ec7bSml29623 uint32_t tx_max_pend; 3796f45ec7bSml29623 3806f45ec7bSml29623 /* 3816f45ec7bSml29623 * Rx Statistics. 3826f45ec7bSml29623 */ 3836f45ec7bSml29623 uint32_t rx_inits; 3846f45ec7bSml29623 uint32_t rx_hdr_pkts; 3856f45ec7bSml29623 uint32_t rx_mtu_pkts; 3866f45ec7bSml29623 uint32_t rx_split_pkts; 3876f45ec7bSml29623 uint32_t rx_no_buf; 3886f45ec7bSml29623 uint32_t rx_no_comp_wb; 3896f45ec7bSml29623 uint32_t rx_ov_flow; 3906f45ec7bSml29623 uint32_t rx_len_mm; 3916f45ec7bSml29623 uint32_t rx_tag_err; 3926f45ec7bSml29623 uint32_t rx_nocanput; 3936f45ec7bSml29623 uint32_t rx_msgdup_fail; 3946f45ec7bSml29623 uint32_t rx_allocb_fail; 3956f45ec7bSml29623 3966f45ec7bSml29623 /* 3976f45ec7bSml29623 * Receive buffer management statistics. 3986f45ec7bSml29623 */ 3996f45ec7bSml29623 uint32_t rx_new_pages; 4006f45ec7bSml29623 uint32_t rx_new_hdr_pgs; 4016f45ec7bSml29623 uint32_t rx_new_mtu_pgs; 4026f45ec7bSml29623 uint32_t rx_new_nxt_pgs; 4036f45ec7bSml29623 uint32_t rx_reused_pgs; 4046f45ec7bSml29623 uint32_t rx_hdr_drops; 4056f45ec7bSml29623 uint32_t rx_mtu_drops; 4066f45ec7bSml29623 uint32_t rx_nxt_drops; 4076f45ec7bSml29623 4086f45ec7bSml29623 /* 4096f45ec7bSml29623 * Receive flow statistics 4106f45ec7bSml29623 */ 4116f45ec7bSml29623 uint32_t rx_rel_flow; 4126f45ec7bSml29623 uint32_t rx_rel_bit; 4136f45ec7bSml29623 4146f45ec7bSml29623 uint32_t rx_pkts_dropped; 4156f45ec7bSml29623 4166f45ec7bSml29623 /* 4176f45ec7bSml29623 * PCI-E Bus Statistics. 4186f45ec7bSml29623 */ 4196f45ec7bSml29623 uint32_t pci_bus_speed; 4206f45ec7bSml29623 uint32_t pci_err; 4216f45ec7bSml29623 uint32_t pci_rta_err; 4226f45ec7bSml29623 uint32_t pci_rma_err; 4236f45ec7bSml29623 uint32_t pci_parity_err; 4246f45ec7bSml29623 uint32_t pci_bad_ack_err; 4256f45ec7bSml29623 uint32_t pci_drto_err; 4266f45ec7bSml29623 uint32_t pci_dmawz_err; 4276f45ec7bSml29623 uint32_t pci_dmarz_err; 4286f45ec7bSml29623 4296f45ec7bSml29623 uint32_t rx_taskq_waits; 4306f45ec7bSml29623 4316f45ec7bSml29623 uint32_t tx_jumbo_pkts; 4326f45ec7bSml29623 4336f45ec7bSml29623 /* 4346f45ec7bSml29623 * Some statistics added to support bringup, these 4356f45ec7bSml29623 * should be removed. 4366f45ec7bSml29623 */ 4376f45ec7bSml29623 uint32_t user_defined; 4386f45ec7bSml29623 } nxge_port_stats_t, *p_nxge_port_stats_t; 4396f45ec7bSml29623 4406f45ec7bSml29623 4416f45ec7bSml29623 typedef struct _nxge_stats_t { 4426f45ec7bSml29623 /* 4436f45ec7bSml29623 * Overall structure size 4446f45ec7bSml29623 */ 4456f45ec7bSml29623 size_t stats_size; 4466f45ec7bSml29623 4476f45ec7bSml29623 kstat_t *ksp; 4486f45ec7bSml29623 kstat_t *rdc_ksp[NXGE_MAX_RDCS]; 4496f45ec7bSml29623 kstat_t *tdc_ksp[NXGE_MAX_TDCS]; 4506f45ec7bSml29623 kstat_t *rdc_sys_ksp; 4516f45ec7bSml29623 kstat_t *fflp_ksp[1]; 4526f45ec7bSml29623 kstat_t *ipp_ksp; 4536f45ec7bSml29623 kstat_t *txc_ksp; 4546f45ec7bSml29623 kstat_t *mac_ksp; 4556f45ec7bSml29623 kstat_t *zcp_ksp; 4566f45ec7bSml29623 kstat_t *port_ksp; 4576f45ec7bSml29623 kstat_t *mmac_ksp; 4586f45ec7bSml29623 4596f45ec7bSml29623 nxge_mac_stats_t mac_stats; /* Common MAC Statistics */ 4606f45ec7bSml29623 nxge_xmac_stats_t xmac_stats; /* XMAC Statistics */ 4616f45ec7bSml29623 nxge_bmac_stats_t bmac_stats; /* BMAC Statistics */ 4626f45ec7bSml29623 4636f45ec7bSml29623 nxge_rx_ring_stats_t rx_stats; /* per port RX stats */ 4646f45ec7bSml29623 nxge_ipp_stats_t ipp_stats; /* per port IPP stats */ 4656f45ec7bSml29623 nxge_zcp_stats_t zcp_stats; /* per port IPP stats */ 4666f45ec7bSml29623 nxge_rx_ring_stats_t rdc_stats[NXGE_MAX_RDCS]; /* per rdc stats */ 4676f45ec7bSml29623 nxge_rdc_sys_stats_t rdc_sys_stats; /* per port RDC stats */ 4686f45ec7bSml29623 4696f45ec7bSml29623 nxge_tx_ring_stats_t tx_stats; /* per port TX stats */ 4706f45ec7bSml29623 nxge_txc_stats_t txc_stats; /* per port TX stats */ 4716f45ec7bSml29623 nxge_tx_ring_stats_t tdc_stats[NXGE_MAX_TDCS]; /* per tdc stats */ 4726f45ec7bSml29623 nxge_fflp_stats_t fflp_stats; /* fflp stats */ 4736f45ec7bSml29623 nxge_port_stats_t port_stats; /* fflp stats */ 4746f45ec7bSml29623 nxge_mmac_stats_t mmac_stats; /* Multi mac. stats */ 4756f45ec7bSml29623 4766f45ec7bSml29623 } nxge_stats_t, *p_nxge_stats_t; 4776f45ec7bSml29623 478da14cebeSEric Cheng 479da14cebeSEric Cheng 4806f45ec7bSml29623 typedef struct _nxge_intr_t { 4816f45ec7bSml29623 boolean_t intr_registered; /* interrupts are registered */ 4826f45ec7bSml29623 boolean_t intr_enabled; /* interrupts are enabled */ 4836f45ec7bSml29623 boolean_t niu_msi_enable; /* debug or configurable? */ 4846f45ec7bSml29623 int intr_types; /* interrupt types supported */ 4856f45ec7bSml29623 int intr_type; /* interrupt type to add */ 4866f45ec7bSml29623 int max_int_cnt; /* max MSIX/INT HW supports */ 4876f45ec7bSml29623 int start_inum; /* start inum (in sequence?) */ 4886f45ec7bSml29623 int msi_intx_cnt; /* # msi/intx ints returned */ 4896f45ec7bSml29623 int intr_added; /* # ints actually needed */ 4906f45ec7bSml29623 int intr_cap; /* interrupt capabilities */ 4916f45ec7bSml29623 size_t intr_size; /* size of array to allocate */ 4926f45ec7bSml29623 ddi_intr_handle_t *htable; /* For array of interrupts */ 4936f45ec7bSml29623 /* Add interrupt number for each interrupt vector */ 4946f45ec7bSml29623 int pri; 4956f45ec7bSml29623 } nxge_intr_t, *p_nxge_intr_t; 4966f45ec7bSml29623 4976f45ec7bSml29623 typedef struct _nxge_ldgv_t { 4986f45ec7bSml29623 uint8_t ndma_ldvs; 4996f45ec7bSml29623 uint8_t nldvs; 5006f45ec7bSml29623 uint8_t maxldgs; 5016f45ec7bSml29623 uint8_t maxldvs; 5026f45ec7bSml29623 uint8_t ldg_intrs; 5036f45ec7bSml29623 uint32_t tmres; 5046f45ec7bSml29623 p_nxge_ldg_t ldgp; 5056f45ec7bSml29623 p_nxge_ldv_t ldvp; 5066f45ec7bSml29623 p_nxge_ldv_t ldvp_syserr; 507da14cebeSEric Cheng boolean_t ldvp_syserr_alloced; 5086f45ec7bSml29623 } nxge_ldgv_t, *p_nxge_ldgv_t; 5096f45ec7bSml29623 510678453a8Sspeer typedef enum { 511678453a8Sspeer NXGE_TRANSMIT_GROUP, /* Legacy transmit group */ 512678453a8Sspeer NXGE_RECEIVE_GROUP, /* Legacy receive group */ 513678453a8Sspeer NXGE_VR_GROUP, /* Virtualization Region group */ 514678453a8Sspeer EXT_TRANSMIT_GROUP, /* External (Crossbow) transmit group */ 515678453a8Sspeer EXT_RECEIVE_GROUP /* External (Crossbow) receive group */ 516678453a8Sspeer } nxge_grp_type_t; 517678453a8Sspeer 518678453a8Sspeer #define NXGE_ILLEGAL_CHANNEL (NXGE_MAX_TDCS + 1) 519678453a8Sspeer 520678453a8Sspeer typedef uint8_t nxge_channel_t; 521678453a8Sspeer 522678453a8Sspeer typedef struct nxge_grp { 523678453a8Sspeer nxge_t *nxge; 524678453a8Sspeer nxge_grp_type_t type; /* Tx or Rx */ 525678453a8Sspeer 526678453a8Sspeer int sequence; /* When it was created. */ 527678453a8Sspeer int index; /* nxge_grp_set_t.group[index] */ 528678453a8Sspeer 529678453a8Sspeer struct nx_dc *dc; /* Linked list of DMA channels. */ 530678453a8Sspeer size_t count; /* A count of <dc> above. */ 531678453a8Sspeer 532678453a8Sspeer boolean_t active; /* Is it being used? */ 533678453a8Sspeer 534678453a8Sspeer dc_map_t map; /* A bitmap of the channels in <dc>. */ 535678453a8Sspeer nxge_channel_t legend[NXGE_MAX_TDCS]; 536678453a8Sspeer 537678453a8Sspeer } nxge_grp_t; 538678453a8Sspeer 539678453a8Sspeer typedef struct { 540678453a8Sspeer lg_map_t map; 541678453a8Sspeer size_t count; 542678453a8Sspeer } lg_data_t; 543678453a8Sspeer 544678453a8Sspeer typedef struct { 545678453a8Sspeer dc_map_t map; 546678453a8Sspeer size_t count; 547678453a8Sspeer } dc_data_t; 548678453a8Sspeer 549678453a8Sspeer #define NXGE_DC_SET(map, channel) map |= (1 << channel) 550678453a8Sspeer #define NXGE_DC_RESET(map, channel) map &= (~(1 << channel)) 551678453a8Sspeer 552da14cebeSEric Cheng /* For now, we only support up to 8 RDC/TDC groups */ 553da14cebeSEric Cheng #define NXGE_LOGICAL_GROUP_MAX NXGE_MAX_RDC_GROUPS 554678453a8Sspeer 555678453a8Sspeer typedef struct { 556678453a8Sspeer int sequence; /* To order groups in time. */ 557678453a8Sspeer 558678453a8Sspeer /* These are this instance's logical groups. */ 559678453a8Sspeer nxge_grp_t *group[NXGE_LOGICAL_GROUP_MAX]; 560678453a8Sspeer lg_data_t lg; 561678453a8Sspeer 562678453a8Sspeer dc_data_t shared; /* These DCs are being shared. */ 563678453a8Sspeer dc_data_t owned; /* These DCs belong to me. */ 564678453a8Sspeer dc_data_t dead; /* These DCs are in an error state. */ 565678453a8Sspeer 566678453a8Sspeer } nxge_grp_set_t; 567678453a8Sspeer 568678453a8Sspeer /* 569da14cebeSEric Cheng * Transmit Ring Group 570da14cebeSEric Cheng * TX groups will be used exclusively for the purpose of Hybrid I/O. From 571da14cebeSEric Cheng * the point of view of the nxge driver, the groups will be software 572da14cebeSEric Cheng * constructs which will be used to establish the relationship between TX 573da14cebeSEric Cheng * rings and shares. 574da14cebeSEric Cheng * 575678453a8Sspeer * Receive Ring Group 576678453a8Sspeer * One of the advanced virtualization features is the ability to bundle 577678453a8Sspeer * multiple Receive Rings in a single group. One or more MAC addresses may 578678453a8Sspeer * be assigned to a group. Incoming packets destined to the group's MAC 579678453a8Sspeer * address(es) are delivered to any ring member, according to a programmable 580678453a8Sspeer * or predefined RTS policy. Member rings can be polled individually. 581678453a8Sspeer * RX ring groups can come with a predefined set of member rings, or they 582678453a8Sspeer * are programmable by adding and removing rings to/from them. 583678453a8Sspeer */ 584da14cebeSEric Cheng typedef struct _nxge_ring_group_t { 585678453a8Sspeer mac_group_handle_t ghandle; 586678453a8Sspeer p_nxge_t nxgep; 587da14cebeSEric Cheng boolean_t started; 5882cf06b0dSMichael Speer boolean_t port_default_grp; 589da14cebeSEric Cheng mac_ring_type_t type; 590678453a8Sspeer int gindex; 591678453a8Sspeer int sindex; 592da14cebeSEric Cheng int rdctbl; 593da14cebeSEric Cheng int n_mac_addrs; 594da14cebeSEric Cheng } nxge_ring_group_t; 595678453a8Sspeer 596678453a8Sspeer /* 597678453a8Sspeer * Ring Handle 598678453a8Sspeer */ 599678453a8Sspeer typedef struct _nxge_ring_handle_t { 600678453a8Sspeer p_nxge_t nxgep; 601678453a8Sspeer int index; /* port-wise */ 602678453a8Sspeer mac_ring_handle_t ring_handle; 6030dc2366fSVenugopal Iyer uint64_t ring_gen_num; /* For RX Ring Start */ 6040dc2366fSVenugopal Iyer uint32_t channel; 605da14cebeSEric Cheng } nxge_ring_handle_t, *p_nxge_ring_handle_t; 606678453a8Sspeer 607678453a8Sspeer /* 608678453a8Sspeer * Share Handle 609678453a8Sspeer */ 610678453a8Sspeer typedef struct _nxge_share_handle_t { 611678453a8Sspeer p_nxge_t nxgep; /* Driver Handle */ 612678453a8Sspeer int index; 613678453a8Sspeer void *vrp; 614678453a8Sspeer uint64_t tmap; 615678453a8Sspeer uint64_t rmap; 616678453a8Sspeer int rxgroup; 617678453a8Sspeer boolean_t active; 618678453a8Sspeer } nxge_share_handle_t; 619678453a8Sspeer 6206f45ec7bSml29623 /* 6216f45ec7bSml29623 * Neptune Device instance state information. 6226f45ec7bSml29623 * 6236f45ec7bSml29623 * Each instance is dynamically allocated on first attach. 6246f45ec7bSml29623 */ 6256f45ec7bSml29623 struct _nxge_t { 6266f45ec7bSml29623 dev_info_t *dip; /* device instance */ 6276f45ec7bSml29623 dev_info_t *p_dip; /* Parent's device instance */ 6286f45ec7bSml29623 int instance; /* instance number */ 6296f45ec7bSml29623 int function_num; /* device function number */ 6306f45ec7bSml29623 int nports; /* # of ports on this device */ 6316f45ec7bSml29623 int board_ver; /* Board Version */ 6326f45ec7bSml29623 int use_partition; /* partition is enabled */ 6336f45ec7bSml29623 uint32_t drv_state; /* driver state bit flags */ 6346f45ec7bSml29623 uint64_t nxge_debug_level; /* driver state bit flags */ 6356f45ec7bSml29623 kmutex_t genlock[1]; 6366f45ec7bSml29623 enum nxge_mac_state nxge_mac_state; 6376f45ec7bSml29623 6386f45ec7bSml29623 p_dev_regs_t dev_regs; 6396f45ec7bSml29623 npi_handle_t npi_handle; 6406f45ec7bSml29623 npi_handle_t npi_pci_handle; 6416f45ec7bSml29623 npi_handle_t npi_reg_handle; 6426f45ec7bSml29623 npi_handle_t npi_msi_handle; 6436f45ec7bSml29623 npi_handle_t npi_vreg_handle; 6446f45ec7bSml29623 npi_handle_t npi_v2reg_handle; 6456f45ec7bSml29623 64659ac0c16Sdavemq nxge_xcvr_table_t xcvr; 6472d17280bSsbehera boolean_t hot_swappable_phy; 6482d17280bSsbehera boolean_t phy_absent; 6492d17280bSsbehera uint32_t xcvr_addr; 6502d17280bSsbehera uint16_t chip_id; 65189282175SSantwona Behera nxge_nlp_conn_t nlp_conn; 652*9d587972SSantwona Behera nxge_phy_prop_t phy_prop; 653*9d587972SSantwona Behera nxge_serdes_prop_t srds_prop; 65489282175SSantwona Behera 6556f45ec7bSml29623 nxge_mac_t mac; 6566f45ec7bSml29623 nxge_ipp_t ipp; 6576f45ec7bSml29623 nxge_txc_t txc; 6586f45ec7bSml29623 nxge_classify_t classifier; 6596f45ec7bSml29623 6606f45ec7bSml29623 mac_handle_t mach; /* mac module handle */ 6616f45ec7bSml29623 p_nxge_stats_t statsp; 6626f45ec7bSml29623 uint32_t param_count; 6636f45ec7bSml29623 p_nxge_param_t param_arr; 6641bd6825cSml29623 6651bd6825cSml29623 uint32_t param_en_pause:1, 6661bd6825cSml29623 param_en_asym_pause:1, 6671bd6825cSml29623 param_en_1000fdx:1, 6681bd6825cSml29623 param_en_100fdx:1, 6691bd6825cSml29623 param_en_10fdx:1, 6701bd6825cSml29623 param_pad_to_32:27; 6711bd6825cSml29623 6726f45ec7bSml29623 nxge_hw_list_t *nxge_hw_p; /* pointer to per Neptune */ 6736f45ec7bSml29623 niu_type_t niu_type; 6742e59129aSraghus platform_type_t platform_type; 6756f45ec7bSml29623 boolean_t os_addr_mode32; /* set to 1 for 32 bit mode */ 676678453a8Sspeer 6776f45ec7bSml29623 uint8_t def_rdc; 6786f45ec7bSml29623 6796f45ec7bSml29623 nxge_intr_t nxge_intr_type; 6806f45ec7bSml29623 nxge_dma_pt_cfg_t pt_config; 6816f45ec7bSml29623 nxge_class_pt_cfg_t class_config; 6826f45ec7bSml29623 6836f45ec7bSml29623 /* Logical device and group data structures. */ 6846f45ec7bSml29623 p_nxge_ldgv_t ldgvp; 6856f45ec7bSml29623 68656d930aeSspeer npi_vpd_info_t vpd_info; 6876f45ec7bSml29623 6886f45ec7bSml29623 ether_addr_st factaddr; /* factory mac address */ 6896f45ec7bSml29623 ether_addr_st ouraddr; /* individual address */ 6902cf06b0dSMichael Speer boolean_t primary; /* primary addr set?. */ 6916f45ec7bSml29623 kmutex_t ouraddr_lock; /* lock to protect to uradd */ 6926f45ec7bSml29623 6936f45ec7bSml29623 ddi_iblock_cookie_t interrupt_cookie; 6946f45ec7bSml29623 6956f45ec7bSml29623 /* 6966f45ec7bSml29623 * Blocks of memory may be pre-allocated by the 6976f45ec7bSml29623 * partition manager or the driver. They may include 6986f45ec7bSml29623 * blocks for configuration and buffers. The idea is 6996f45ec7bSml29623 * to preallocate big blocks of contiguous areas in 7006f45ec7bSml29623 * system memory (i.e. with IOMMU). These blocks then 7016f45ec7bSml29623 * will be broken up to a fixed number of blocks with 7026f45ec7bSml29623 * each block having the same block size (4K, 8K, 16K or 7036f45ec7bSml29623 * 32K) in the case of buffer blocks. For systems that 7046f45ec7bSml29623 * do not support DVMA, more than one big block will be 7056f45ec7bSml29623 * allocated. 7066f45ec7bSml29623 */ 7076f45ec7bSml29623 uint32_t rx_default_block_size; 7086f45ec7bSml29623 nxge_rx_block_size_t rx_bksize_code; 7096f45ec7bSml29623 7106f45ec7bSml29623 p_nxge_dma_pool_t rx_buf_pool_p; 7116f45ec7bSml29623 p_nxge_dma_pool_t rx_cntl_pool_p; 7126f45ec7bSml29623 7136f45ec7bSml29623 p_nxge_dma_pool_t tx_buf_pool_p; 7146f45ec7bSml29623 p_nxge_dma_pool_t tx_cntl_pool_p; 7156f45ec7bSml29623 7166f45ec7bSml29623 /* Receive buffer block ring and completion ring. */ 7176f45ec7bSml29623 p_rx_rbr_rings_t rx_rbr_rings; 7186f45ec7bSml29623 p_rx_rcr_rings_t rx_rcr_rings; 7196f45ec7bSml29623 p_rx_mbox_areas_t rx_mbox_areas_p; 7206f45ec7bSml29623 7216f45ec7bSml29623 uint32_t rdc_mask; 7226f45ec7bSml29623 7236f45ec7bSml29623 /* Transmit descriptors rings */ 7246f45ec7bSml29623 p_tx_rings_t tx_rings; 7256f45ec7bSml29623 p_tx_mbox_areas_t tx_mbox_areas_p; 7266f45ec7bSml29623 7276f45ec7bSml29623 ddi_dma_handle_t dmasparehandle; 7286f45ec7bSml29623 7296f45ec7bSml29623 ulong_t sys_page_sz; 7306f45ec7bSml29623 ulong_t sys_page_mask; 7316f45ec7bSml29623 int suspended; 7326f45ec7bSml29623 7336f45ec7bSml29623 mii_bmsr_t bmsr; /* xcvr status at last poll. */ 7346f45ec7bSml29623 mii_bmsr_t soft_bmsr; /* xcvr status kept by SW. */ 7356f45ec7bSml29623 7366f45ec7bSml29623 kmutex_t mif_lock; /* Lock to protect the list. */ 7376f45ec7bSml29623 7386f45ec7bSml29623 void (*mii_read)(); 7396f45ec7bSml29623 void (*mii_write)(); 7406f45ec7bSml29623 void (*mii_poll)(); 7416f45ec7bSml29623 filter_t filter; /* Current instance filter */ 7426f45ec7bSml29623 p_hash_filter_t hash_filter; /* Multicast hash filter. */ 7436f45ec7bSml29623 krwlock_t filter_lock; /* Lock to protect filters. */ 7446f45ec7bSml29623 7456f45ec7bSml29623 ulong_t sys_burst_sz; 7466f45ec7bSml29623 7476f45ec7bSml29623 uint8_t cache_line; 7486f45ec7bSml29623 7496f45ec7bSml29623 timeout_id_t nxge_link_poll_timerid; 7506f45ec7bSml29623 timeout_id_t nxge_timerid; 7516f45ec7bSml29623 7526f45ec7bSml29623 uint_t need_periodic_reclaim; 7536f45ec7bSml29623 timeout_id_t reclaim_timer; 7546f45ec7bSml29623 7556f45ec7bSml29623 uint8_t msg_min; 7566f45ec7bSml29623 uint8_t crc_size; 7576f45ec7bSml29623 7586f45ec7bSml29623 boolean_t hard_props_read; 7596f45ec7bSml29623 7606f45ec7bSml29623 uint32_t nxge_ncpus; 7616f45ec7bSml29623 uint16_t intr_timeout; 7626f45ec7bSml29623 uint16_t intr_threshold; 7636f45ec7bSml29623 7646f45ec7bSml29623 int fm_capabilities; /* FMA capabilities */ 7656f45ec7bSml29623 7666f45ec7bSml29623 uint32_t nxge_port_rbr_size; 767678453a8Sspeer uint32_t nxge_port_rbr_spare_size; 7686f45ec7bSml29623 uint32_t nxge_port_rcr_size; 769678453a8Sspeer uint32_t nxge_port_rx_cntl_alloc_size; 7706f45ec7bSml29623 uint32_t nxge_port_tx_ring_size; 7716f45ec7bSml29623 nxge_mmac_t nxge_mmac_info; 7726f45ec7bSml29623 #if defined(sun4v) 7736f45ec7bSml29623 boolean_t niu_hsvc_available; 7746f45ec7bSml29623 hsvc_info_t niu_hsvc; 7756f45ec7bSml29623 uint64_t niu_min_ver; 7766f45ec7bSml29623 #endif 7776f45ec7bSml29623 boolean_t link_notify; 778774da109Stc99174@train int link_check_count; 77998ecde52Stm144005 78098ecde52Stm144005 kmutex_t poll_lock; 78198ecde52Stm144005 kcondvar_t poll_cv; 78298ecde52Stm144005 link_mon_enable_t poll_state; 78398ecde52Stm144005 #define NXGE_MAGIC 0x3ab434e3 78498ecde52Stm144005 uint32_t nxge_magic; 7853d16f8e7Sml29623 7863d16f8e7Sml29623 int soft_lso_enable; 787678453a8Sspeer /* The following fields are LDOMs-specific additions. */ 788678453a8Sspeer nxge_environs_t environs; 789678453a8Sspeer ether_addr_t hio_mac_addr; 790678453a8Sspeer uint32_t niu_cfg_hdl; 791678453a8Sspeer kmutex_t group_lock; 792678453a8Sspeer 793678453a8Sspeer struct nxge_hio_vr *hio_vr; 794678453a8Sspeer 795678453a8Sspeer nxge_grp_set_t rx_set; 796678453a8Sspeer nxge_grp_set_t tx_set; 797330cd344SMichael Speer boolean_t tdc_is_shared[NXGE_MAX_TDCS]; 798678453a8Sspeer 799da14cebeSEric Cheng /* Ring Handles */ 800da14cebeSEric Cheng nxge_ring_handle_t tx_ring_handles[NXGE_MAX_TDCS]; 801da14cebeSEric Cheng nxge_ring_handle_t rx_ring_handles[NXGE_MAX_RDCS]; 802da14cebeSEric Cheng 803da14cebeSEric Cheng nxge_ring_group_t tx_hio_groups[NXGE_MAX_TDC_GROUPS]; 804da14cebeSEric Cheng nxge_ring_group_t rx_hio_groups[NXGE_MAX_RDC_GROUPS]; 805da14cebeSEric Cheng 806678453a8Sspeer nxge_share_handle_t shares[NXGE_MAX_VRS]; 8074df55fdeSJanie Lu 8084df55fdeSJanie Lu /* 8094df55fdeSJanie Lu * KT-NIU: 8104df55fdeSJanie Lu * KT family will have up to 4 NIUs per system. 8114df55fdeSJanie Lu * Differences between N2/NIU and KT/NIU: 8124df55fdeSJanie Lu * SerDes, Hypervisor interfaces, 8134df55fdeSJanie Lu * additional NIU classification features. 8144df55fdeSJanie Lu */ 8154df55fdeSJanie Lu niu_hw_type_t niu_hw_type; 8166f45ec7bSml29623 }; 8176f45ec7bSml29623 8186f45ec7bSml29623 /* 8196f45ec7bSml29623 * Driver state flags. 8206f45ec7bSml29623 */ 8216f45ec7bSml29623 #define STATE_REGS_MAPPED 0x000000001 /* device registers mapped */ 8226f45ec7bSml29623 #define STATE_KSTATS_SETUP 0x000000002 /* kstats allocated */ 8236f45ec7bSml29623 #define STATE_NODE_CREATED 0x000000004 /* device node created */ 8246f45ec7bSml29623 #define STATE_HW_CONFIG_CREATED 0x000000008 /* hardware properties */ 8256f45ec7bSml29623 #define STATE_HW_INITIALIZED 0x000000010 /* hardware initialized */ 8266f45ec7bSml29623 #define STATE_MDIO_LOCK_INIT 0x000000020 /* mdio lock initialized */ 8276f45ec7bSml29623 #define STATE_MII_LOCK_INIT 0x000000040 /* mii lock initialized */ 8286f45ec7bSml29623 8296f45ec7bSml29623 #define STOP_POLL_THRESH 9 8306f45ec7bSml29623 #define START_POLL_THRESH 2 8316f45ec7bSml29623 8326f45ec7bSml29623 typedef struct _nxge_port_kstat_t { 8336f45ec7bSml29623 /* 8346f45ec7bSml29623 * Transciever state informations. 8356f45ec7bSml29623 */ 8366f45ec7bSml29623 kstat_named_t xcvr_inits; 8376f45ec7bSml29623 kstat_named_t xcvr_inuse; 8386f45ec7bSml29623 kstat_named_t xcvr_addr; 8396f45ec7bSml29623 kstat_named_t xcvr_id; 8406f45ec7bSml29623 kstat_named_t cap_autoneg; 8416f45ec7bSml29623 kstat_named_t cap_10gfdx; 8426f45ec7bSml29623 kstat_named_t cap_10ghdx; 8436f45ec7bSml29623 kstat_named_t cap_1000fdx; 8446f45ec7bSml29623 kstat_named_t cap_1000hdx; 8456f45ec7bSml29623 kstat_named_t cap_100T4; 8466f45ec7bSml29623 kstat_named_t cap_100fdx; 8476f45ec7bSml29623 kstat_named_t cap_100hdx; 8486f45ec7bSml29623 kstat_named_t cap_10fdx; 8496f45ec7bSml29623 kstat_named_t cap_10hdx; 8506f45ec7bSml29623 kstat_named_t cap_asmpause; 8516f45ec7bSml29623 kstat_named_t cap_pause; 8526f45ec7bSml29623 8536f45ec7bSml29623 /* 8546f45ec7bSml29623 * Link partner capabilities. 8556f45ec7bSml29623 */ 8566f45ec7bSml29623 kstat_named_t lp_cap_autoneg; 8576f45ec7bSml29623 kstat_named_t lp_cap_10gfdx; 8586f45ec7bSml29623 kstat_named_t lp_cap_10ghdx; 8596f45ec7bSml29623 kstat_named_t lp_cap_1000fdx; 8606f45ec7bSml29623 kstat_named_t lp_cap_1000hdx; 8616f45ec7bSml29623 kstat_named_t lp_cap_100T4; 8626f45ec7bSml29623 kstat_named_t lp_cap_100fdx; 8636f45ec7bSml29623 kstat_named_t lp_cap_100hdx; 8646f45ec7bSml29623 kstat_named_t lp_cap_10fdx; 8656f45ec7bSml29623 kstat_named_t lp_cap_10hdx; 8666f45ec7bSml29623 kstat_named_t lp_cap_asmpause; 8676f45ec7bSml29623 kstat_named_t lp_cap_pause; 8686f45ec7bSml29623 8696f45ec7bSml29623 /* 8706f45ec7bSml29623 * Shared link setup. 8716f45ec7bSml29623 */ 8726f45ec7bSml29623 kstat_named_t link_T4; 8736f45ec7bSml29623 kstat_named_t link_speed; 8746f45ec7bSml29623 kstat_named_t link_duplex; 8756f45ec7bSml29623 kstat_named_t link_asmpause; 8766f45ec7bSml29623 kstat_named_t link_pause; 8776f45ec7bSml29623 kstat_named_t link_up; 8786f45ec7bSml29623 8796f45ec7bSml29623 /* 8806f45ec7bSml29623 * Lets the user know the MTU currently in use by 8816f45ec7bSml29623 * the physical MAC port. 8826f45ec7bSml29623 */ 8836f45ec7bSml29623 kstat_named_t mac_mtu; 8846f45ec7bSml29623 kstat_named_t lb_mode; 8856f45ec7bSml29623 kstat_named_t qos_mode; 8866f45ec7bSml29623 kstat_named_t trunk_mode; 8876f45ec7bSml29623 8886f45ec7bSml29623 /* 8896f45ec7bSml29623 * Misc MAC statistics. 8906f45ec7bSml29623 */ 8916f45ec7bSml29623 kstat_named_t ifspeed; 8926f45ec7bSml29623 kstat_named_t promisc; 8936f45ec7bSml29623 kstat_named_t rev_id; 8946f45ec7bSml29623 8956f45ec7bSml29623 /* 8966f45ec7bSml29623 * Some statistics added to support bringup, these 8976f45ec7bSml29623 * should be removed. 8986f45ec7bSml29623 */ 8996f45ec7bSml29623 kstat_named_t user_defined; 9006f45ec7bSml29623 } nxge_port_kstat_t, *p_nxge_port_kstat_t; 9016f45ec7bSml29623 9026f45ec7bSml29623 typedef struct _nxge_rdc_kstat { 9036f45ec7bSml29623 /* 9046f45ec7bSml29623 * Receive DMA channel statistics. 9056f45ec7bSml29623 */ 9066f45ec7bSml29623 kstat_named_t ipackets; 9076f45ec7bSml29623 kstat_named_t rbytes; 9086f45ec7bSml29623 kstat_named_t errors; 9096f45ec7bSml29623 kstat_named_t dcf_err; 9106f45ec7bSml29623 kstat_named_t rcr_ack_err; 9116f45ec7bSml29623 9126f45ec7bSml29623 kstat_named_t dc_fifoflow_err; 9136f45ec7bSml29623 kstat_named_t rcr_sha_par_err; 9146f45ec7bSml29623 kstat_named_t rbr_pre_par_err; 9156f45ec7bSml29623 kstat_named_t wred_drop; 9166f45ec7bSml29623 kstat_named_t rbr_pre_emty; 9176f45ec7bSml29623 9186f45ec7bSml29623 kstat_named_t rcr_shadow_full; 9196f45ec7bSml29623 kstat_named_t rbr_tmout; 9206f45ec7bSml29623 kstat_named_t rsp_cnt_err; 9216f45ec7bSml29623 kstat_named_t byte_en_bus; 9226f45ec7bSml29623 kstat_named_t rsp_dat_err; 9236f45ec7bSml29623 9244202ea4bSsbehera kstat_named_t pkt_too_long_err; 9256f45ec7bSml29623 kstat_named_t compl_l2_err; 9266f45ec7bSml29623 kstat_named_t compl_l4_cksum_err; 9276f45ec7bSml29623 kstat_named_t compl_zcp_soft_err; 9286f45ec7bSml29623 kstat_named_t compl_fflp_soft_err; 9296f45ec7bSml29623 kstat_named_t config_err; 9306f45ec7bSml29623 9316f45ec7bSml29623 kstat_named_t rcrincon; 9326f45ec7bSml29623 kstat_named_t rcrfull; 9336f45ec7bSml29623 kstat_named_t rbr_empty; 9346f45ec7bSml29623 kstat_named_t rbrfull; 9356f45ec7bSml29623 kstat_named_t rbrlogpage; 9366f45ec7bSml29623 9376f45ec7bSml29623 kstat_named_t cfiglogpage; 9386f45ec7bSml29623 kstat_named_t port_drop_pkt; 9396f45ec7bSml29623 kstat_named_t rcr_to; 9406f45ec7bSml29623 kstat_named_t rcr_thresh; 9416f45ec7bSml29623 kstat_named_t rcr_mex; 9426f45ec7bSml29623 kstat_named_t id_mismatch; 9436f45ec7bSml29623 kstat_named_t zcp_eop_err; 9446f45ec7bSml29623 kstat_named_t ipp_eop_err; 9456f45ec7bSml29623 } nxge_rdc_kstat_t, *p_nxge_rdc_kstat_t; 9466f45ec7bSml29623 9476f45ec7bSml29623 typedef struct _nxge_rdc_sys_kstat { 9486f45ec7bSml29623 /* 9496f45ec7bSml29623 * Receive DMA system statistics. 9506f45ec7bSml29623 */ 9516f45ec7bSml29623 kstat_named_t pre_par; 9526f45ec7bSml29623 kstat_named_t sha_par; 9536f45ec7bSml29623 kstat_named_t id_mismatch; 9546f45ec7bSml29623 kstat_named_t ipp_eop_err; 9556f45ec7bSml29623 kstat_named_t zcp_eop_err; 9566f45ec7bSml29623 } nxge_rdc_sys_kstat_t, *p_nxge_rdc_sys_kstat_t; 9576f45ec7bSml29623 9586f45ec7bSml29623 typedef struct _nxge_tdc_kstat { 9596f45ec7bSml29623 /* 9606f45ec7bSml29623 * Transmit DMA channel statistics. 9616f45ec7bSml29623 */ 9626f45ec7bSml29623 kstat_named_t opackets; 9636f45ec7bSml29623 kstat_named_t obytes; 9646f45ec7bSml29623 kstat_named_t oerrors; 9656f45ec7bSml29623 kstat_named_t tx_inits; 9666f45ec7bSml29623 kstat_named_t tx_no_buf; 9676f45ec7bSml29623 9686f45ec7bSml29623 kstat_named_t mbox_err; 9696f45ec7bSml29623 kstat_named_t pkt_size_err; 9706f45ec7bSml29623 kstat_named_t tx_ring_oflow; 9716f45ec7bSml29623 kstat_named_t pref_buf_ecc_err; 9726f45ec7bSml29623 kstat_named_t nack_pref; 9736f45ec7bSml29623 kstat_named_t nack_pkt_rd; 9746f45ec7bSml29623 kstat_named_t conf_part_err; 9756f45ec7bSml29623 kstat_named_t pkt_prt_err; 9766f45ec7bSml29623 kstat_named_t reset_fail; 9776f45ec7bSml29623 /* used to in the common (per port) counter */ 9786f45ec7bSml29623 9796f45ec7bSml29623 kstat_named_t tx_starts; 9806f45ec7bSml29623 kstat_named_t tx_nocanput; 9816f45ec7bSml29623 kstat_named_t tx_msgdup_fail; 9826f45ec7bSml29623 kstat_named_t tx_allocb_fail; 9836f45ec7bSml29623 kstat_named_t tx_no_desc; 9846f45ec7bSml29623 kstat_named_t tx_dma_bind_fail; 9856f45ec7bSml29623 kstat_named_t tx_uflo; 9866f45ec7bSml29623 kstat_named_t tx_hdr_pkts; 9876f45ec7bSml29623 kstat_named_t tx_ddi_pkts; 9886f45ec7bSml29623 kstat_named_t tx_dvma_pkts; 9896f45ec7bSml29623 kstat_named_t tx_max_pend; 9906f45ec7bSml29623 } nxge_tdc_kstat_t, *p_nxge_tdc_kstat_t; 9916f45ec7bSml29623 9926f45ec7bSml29623 typedef struct _nxge_txc_kstat { 9936f45ec7bSml29623 /* 9946f45ec7bSml29623 * Transmit port TXC block statistics. 9956f45ec7bSml29623 */ 9966f45ec7bSml29623 kstat_named_t pkt_stuffed; 9976f45ec7bSml29623 kstat_named_t pkt_xmit; 9986f45ec7bSml29623 kstat_named_t ro_correct_err; 9996f45ec7bSml29623 kstat_named_t ro_uncorrect_err; 10006f45ec7bSml29623 kstat_named_t sf_correct_err; 10016f45ec7bSml29623 kstat_named_t sf_uncorrect_err; 10026f45ec7bSml29623 kstat_named_t address_failed; 10036f45ec7bSml29623 kstat_named_t dma_failed; 10046f45ec7bSml29623 kstat_named_t length_failed; 10056f45ec7bSml29623 kstat_named_t pkt_assy_dead; 10066f45ec7bSml29623 kstat_named_t reorder_err; 10076f45ec7bSml29623 } nxge_txc_kstat_t, *p_nxge_txc_kstat_t; 10086f45ec7bSml29623 10096f45ec7bSml29623 typedef struct _nxge_ipp_kstat { 10106f45ec7bSml29623 /* 10116f45ec7bSml29623 * Receive port IPP block statistics. 10126f45ec7bSml29623 */ 10136f45ec7bSml29623 kstat_named_t eop_miss; 10146f45ec7bSml29623 kstat_named_t sop_miss; 10156f45ec7bSml29623 kstat_named_t dfifo_ue; 10166f45ec7bSml29623 kstat_named_t ecc_err_cnt; 1017846a903dSml29623 kstat_named_t pfifo_perr; 10186f45ec7bSml29623 kstat_named_t pfifo_over; 10196f45ec7bSml29623 kstat_named_t pfifo_und; 10206f45ec7bSml29623 kstat_named_t bad_cs_cnt; 10216f45ec7bSml29623 kstat_named_t pkt_dis_cnt; 10226f45ec7bSml29623 } nxge_ipp_kstat_t, *p_nxge_ipp_kstat_t; 10236f45ec7bSml29623 10246f45ec7bSml29623 typedef struct _nxge_zcp_kstat { 10256f45ec7bSml29623 /* 10266f45ec7bSml29623 * ZCP statistics. 10276f45ec7bSml29623 */ 10286f45ec7bSml29623 kstat_named_t errors; 10296f45ec7bSml29623 kstat_named_t inits; 10306f45ec7bSml29623 kstat_named_t rrfifo_underrun; 10316f45ec7bSml29623 kstat_named_t rrfifo_overrun; 10326f45ec7bSml29623 kstat_named_t rspfifo_uncorr_err; 10336f45ec7bSml29623 kstat_named_t buffer_overflow; 10346f45ec7bSml29623 kstat_named_t stat_tbl_perr; 10356f45ec7bSml29623 kstat_named_t dyn_tbl_perr; 10366f45ec7bSml29623 kstat_named_t buf_tbl_perr; 10376f45ec7bSml29623 kstat_named_t tt_program_err; 10386f45ec7bSml29623 kstat_named_t rsp_tt_index_err; 10396f45ec7bSml29623 kstat_named_t slv_tt_index_err; 10406f45ec7bSml29623 kstat_named_t zcp_tt_index_err; 10416f45ec7bSml29623 kstat_named_t access_fail; 10426f45ec7bSml29623 kstat_named_t cfifo_ecc; 10436f45ec7bSml29623 } nxge_zcp_kstat_t, *p_nxge_zcp_kstat_t; 10446f45ec7bSml29623 10456f45ec7bSml29623 typedef struct _nxge_mac_kstat { 10466f45ec7bSml29623 /* 10476f45ec7bSml29623 * Transmit MAC statistics. 10486f45ec7bSml29623 */ 10496f45ec7bSml29623 kstat_named_t tx_frame_cnt; 10506f45ec7bSml29623 kstat_named_t tx_underflow_err; 10516f45ec7bSml29623 kstat_named_t tx_overflow_err; 10526f45ec7bSml29623 kstat_named_t tx_maxpktsize_err; 10536f45ec7bSml29623 kstat_named_t tx_fifo_xfr_err; 10546f45ec7bSml29623 kstat_named_t tx_byte_cnt; 10556f45ec7bSml29623 10566f45ec7bSml29623 /* 10576f45ec7bSml29623 * Receive MAC statistics. 10586f45ec7bSml29623 */ 10596f45ec7bSml29623 kstat_named_t rx_frame_cnt; 10606f45ec7bSml29623 kstat_named_t rx_underflow_err; 10616f45ec7bSml29623 kstat_named_t rx_overflow_err; 10626f45ec7bSml29623 kstat_named_t rx_len_err_cnt; 10636f45ec7bSml29623 kstat_named_t rx_crc_err_cnt; 10646f45ec7bSml29623 kstat_named_t rx_viol_err_cnt; 10656f45ec7bSml29623 kstat_named_t rx_byte_cnt; 10666f45ec7bSml29623 kstat_named_t rx_hist1_cnt; 10676f45ec7bSml29623 kstat_named_t rx_hist2_cnt; 10686f45ec7bSml29623 kstat_named_t rx_hist3_cnt; 10696f45ec7bSml29623 kstat_named_t rx_hist4_cnt; 10706f45ec7bSml29623 kstat_named_t rx_hist5_cnt; 10716f45ec7bSml29623 kstat_named_t rx_hist6_cnt; 1072321febdeSsbehera kstat_named_t rx_hist7_cnt; 10736f45ec7bSml29623 kstat_named_t rx_broadcast_cnt; 10746f45ec7bSml29623 kstat_named_t rx_mult_cnt; 10756f45ec7bSml29623 kstat_named_t rx_frag_cnt; 10766f45ec7bSml29623 kstat_named_t rx_frame_align_err_cnt; 10776f45ec7bSml29623 kstat_named_t rx_linkfault_err_cnt; 10786f45ec7bSml29623 kstat_named_t rx_local_fault_err_cnt; 10796f45ec7bSml29623 kstat_named_t rx_remote_fault_err_cnt; 10806f45ec7bSml29623 } nxge_mac_kstat_t, *p_nxge_mac_kstat_t; 10816f45ec7bSml29623 10826f45ec7bSml29623 typedef struct _nxge_xmac_kstat { 10836f45ec7bSml29623 /* 10846f45ec7bSml29623 * XMAC statistics. 10856f45ec7bSml29623 */ 10866f45ec7bSml29623 kstat_named_t tx_frame_cnt; 10876f45ec7bSml29623 kstat_named_t tx_underflow_err; 10886f45ec7bSml29623 kstat_named_t tx_maxpktsize_err; 10896f45ec7bSml29623 kstat_named_t tx_overflow_err; 10906f45ec7bSml29623 kstat_named_t tx_fifo_xfr_err; 10916f45ec7bSml29623 kstat_named_t tx_byte_cnt; 10926f45ec7bSml29623 kstat_named_t rx_frame_cnt; 10936f45ec7bSml29623 kstat_named_t rx_underflow_err; 10946f45ec7bSml29623 kstat_named_t rx_overflow_err; 10956f45ec7bSml29623 kstat_named_t rx_crc_err_cnt; 10966f45ec7bSml29623 kstat_named_t rx_len_err_cnt; 10976f45ec7bSml29623 kstat_named_t rx_viol_err_cnt; 10986f45ec7bSml29623 kstat_named_t rx_byte_cnt; 10996f45ec7bSml29623 kstat_named_t rx_hist1_cnt; 11006f45ec7bSml29623 kstat_named_t rx_hist2_cnt; 11016f45ec7bSml29623 kstat_named_t rx_hist3_cnt; 11026f45ec7bSml29623 kstat_named_t rx_hist4_cnt; 11036f45ec7bSml29623 kstat_named_t rx_hist5_cnt; 11046f45ec7bSml29623 kstat_named_t rx_hist6_cnt; 11056f45ec7bSml29623 kstat_named_t rx_hist7_cnt; 11066f45ec7bSml29623 kstat_named_t rx_broadcast_cnt; 11076f45ec7bSml29623 kstat_named_t rx_mult_cnt; 11086f45ec7bSml29623 kstat_named_t rx_frag_cnt; 11096f45ec7bSml29623 kstat_named_t rx_frame_align_err_cnt; 11106f45ec7bSml29623 kstat_named_t rx_linkfault_err_cnt; 11116f45ec7bSml29623 kstat_named_t rx_remote_fault_err_cnt; 11126f45ec7bSml29623 kstat_named_t rx_local_fault_err_cnt; 11136f45ec7bSml29623 kstat_named_t rx_pause_cnt; 11146f45ec7bSml29623 kstat_named_t xpcs_deskew_err_cnt; 11156f45ec7bSml29623 kstat_named_t xpcs_ln0_symbol_err_cnt; 11166f45ec7bSml29623 kstat_named_t xpcs_ln1_symbol_err_cnt; 11176f45ec7bSml29623 kstat_named_t xpcs_ln2_symbol_err_cnt; 11186f45ec7bSml29623 kstat_named_t xpcs_ln3_symbol_err_cnt; 11196f45ec7bSml29623 } nxge_xmac_kstat_t, *p_nxge_xmac_kstat_t; 11206f45ec7bSml29623 11216f45ec7bSml29623 typedef struct _nxge_bmac_kstat { 11226f45ec7bSml29623 /* 11236f45ec7bSml29623 * BMAC statistics. 11246f45ec7bSml29623 */ 11256f45ec7bSml29623 kstat_named_t tx_frame_cnt; 11266f45ec7bSml29623 kstat_named_t tx_underrun_err; 11276f45ec7bSml29623 kstat_named_t tx_max_pkt_err; 11286f45ec7bSml29623 kstat_named_t tx_byte_cnt; 11296f45ec7bSml29623 kstat_named_t rx_frame_cnt; 11306f45ec7bSml29623 kstat_named_t rx_byte_cnt; 11316f45ec7bSml29623 kstat_named_t rx_overflow_err; 11326f45ec7bSml29623 kstat_named_t rx_align_err_cnt; 11336f45ec7bSml29623 kstat_named_t rx_crc_err_cnt; 11346f45ec7bSml29623 kstat_named_t rx_len_err_cnt; 11356f45ec7bSml29623 kstat_named_t rx_viol_err_cnt; 11366f45ec7bSml29623 kstat_named_t rx_pause_cnt; 11376f45ec7bSml29623 kstat_named_t tx_pause_state; 11386f45ec7bSml29623 kstat_named_t tx_nopause_state; 11396f45ec7bSml29623 } nxge_bmac_kstat_t, *p_nxge_bmac_kstat_t; 11406f45ec7bSml29623 11416f45ec7bSml29623 11426f45ec7bSml29623 typedef struct _nxge_fflp_kstat { 11436f45ec7bSml29623 /* 11446f45ec7bSml29623 * FFLP statistics. 11456f45ec7bSml29623 */ 11466f45ec7bSml29623 11476f45ec7bSml29623 kstat_named_t fflp_tcam_perr; 1148979818aeSmisaki kstat_named_t fflp_tcam_ecc_err; 11496f45ec7bSml29623 kstat_named_t fflp_vlan_perr; 11506f45ec7bSml29623 kstat_named_t fflp_hasht_lookup_err; 11516f45ec7bSml29623 kstat_named_t fflp_hasht_data_err[MAX_PARTITION]; 11526f45ec7bSml29623 } nxge_fflp_kstat_t, *p_nxge_fflp_kstat_t; 11536f45ec7bSml29623 11546f45ec7bSml29623 typedef struct _nxge_mmac_kstat { 11556f45ec7bSml29623 kstat_named_t mmac_max_addr_cnt; 11566f45ec7bSml29623 kstat_named_t mmac_avail_addr_cnt; 11576f45ec7bSml29623 kstat_named_t mmac_addr1; 11586f45ec7bSml29623 kstat_named_t mmac_addr2; 11596f45ec7bSml29623 kstat_named_t mmac_addr3; 11606f45ec7bSml29623 kstat_named_t mmac_addr4; 11616f45ec7bSml29623 kstat_named_t mmac_addr5; 11626f45ec7bSml29623 kstat_named_t mmac_addr6; 11636f45ec7bSml29623 kstat_named_t mmac_addr7; 11646f45ec7bSml29623 kstat_named_t mmac_addr8; 11656f45ec7bSml29623 kstat_named_t mmac_addr9; 11666f45ec7bSml29623 kstat_named_t mmac_addr10; 11676f45ec7bSml29623 kstat_named_t mmac_addr11; 11686f45ec7bSml29623 kstat_named_t mmac_addr12; 11696f45ec7bSml29623 kstat_named_t mmac_addr13; 11706f45ec7bSml29623 kstat_named_t mmac_addr14; 11716f45ec7bSml29623 kstat_named_t mmac_addr15; 11726f45ec7bSml29623 kstat_named_t mmac_addr16; 11736f45ec7bSml29623 } nxge_mmac_kstat_t, *p_nxge_mmac_kstat_t; 11746f45ec7bSml29623 11756f45ec7bSml29623 /* 11766f45ec7bSml29623 * Prototype definitions. 11776f45ec7bSml29623 */ 11786f45ec7bSml29623 nxge_status_t nxge_init(p_nxge_t); 11796f45ec7bSml29623 void nxge_uninit(p_nxge_t); 11806f45ec7bSml29623 void nxge_get64(p_nxge_t, p_mblk_t); 11816f45ec7bSml29623 void nxge_put64(p_nxge_t, p_mblk_t); 11826f45ec7bSml29623 void nxge_pio_loop(p_nxge_t, p_mblk_t); 11836f45ec7bSml29623 11846f45ec7bSml29623 typedef void (*fptrv_t)(); 11856f45ec7bSml29623 timeout_id_t nxge_start_timer(p_nxge_t, fptrv_t, int); 11866f45ec7bSml29623 void nxge_stop_timer(p_nxge_t, timeout_id_t); 11876f45ec7bSml29623 11886f45ec7bSml29623 #ifdef __cplusplus 11896f45ec7bSml29623 } 11906f45ec7bSml29623 #endif 11916f45ec7bSml29623 11926f45ec7bSml29623 #endif /* _SYS_NXGE_NXGE_H */ 1193