13859Sml29623 /* 23859Sml29623 * CDDL HEADER START 33859Sml29623 * 43859Sml29623 * The contents of this file are subject to the terms of the 53859Sml29623 * Common Development and Distribution License (the "License"). 63859Sml29623 * You may not use this file except in compliance with the License. 73859Sml29623 * 83859Sml29623 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 93859Sml29623 * or http://www.opensolaris.org/os/licensing. 103859Sml29623 * See the License for the specific language governing permissions 113859Sml29623 * and limitations under the License. 123859Sml29623 * 133859Sml29623 * When distributing Covered Code, include this CDDL HEADER in each 143859Sml29623 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 153859Sml29623 * If applicable, add the following below this CDDL HEADER, with the 163859Sml29623 * fields enclosed by brackets "[]" replaced with your own identifying 173859Sml29623 * information: Portions Copyright [yyyy] [name of copyright owner] 183859Sml29623 * 193859Sml29623 * CDDL HEADER END 203859Sml29623 */ 213859Sml29623 /* 2211878SVenu.Iyer@Sun.COM * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 233859Sml29623 * Use is subject to license terms. 243859Sml29623 */ 253859Sml29623 263859Sml29623 #ifndef _SYS_NXGE_NXGE_IMPL_H 273859Sml29623 #define _SYS_NXGE_NXGE_IMPL_H 283859Sml29623 293859Sml29623 #ifdef __cplusplus 303859Sml29623 extern "C" { 313859Sml29623 #endif 323859Sml29623 333859Sml29623 /* 343859Sml29623 * NIU HV API version definitions. 3511304SJanie.Lu@Sun.COM * 3611304SJanie.Lu@Sun.COM * If additional major (HV API) is to be supported, 3711304SJanie.Lu@Sun.COM * please increment NIU_MAJOR_HI. 3811304SJanie.Lu@Sun.COM * If additional minor # is to be supported, 3911304SJanie.Lu@Sun.COM * please increment NIU_MINOR_HI. 403859Sml29623 */ 4111304SJanie.Lu@Sun.COM #define NIU_MAJOR_HI 2 4211304SJanie.Lu@Sun.COM #define NIU_MINOR_HI 1 433859Sml29623 #define NIU_MAJOR_VER 1 443859Sml29623 #define NIU_MINOR_VER 1 4511304SJanie.Lu@Sun.COM #define NIU_MAJOR_VER_2 2 463859Sml29623 478275SEric Cheng #if defined(sun4v) 488275SEric Cheng 493859Sml29623 /* 503859Sml29623 * NIU HV API v1.0 definitions 513859Sml29623 */ 523859Sml29623 #define N2NIU_RX_LP_CONF 0x142 533859Sml29623 #define N2NIU_RX_LP_INFO 0x143 543859Sml29623 #define N2NIU_TX_LP_CONF 0x144 553859Sml29623 #define N2NIU_TX_LP_INFO 0x145 563859Sml29623 578275SEric Cheng #endif /* defined(sun4v) */ 588275SEric Cheng 593859Sml29623 #ifndef _ASM 603859Sml29623 613859Sml29623 #include <sys/types.h> 623859Sml29623 #include <sys/byteorder.h> 633859Sml29623 #include <sys/debug.h> 643859Sml29623 #include <sys/stropts.h> 653859Sml29623 #include <sys/stream.h> 663859Sml29623 #include <sys/strlog.h> 673859Sml29623 #include <sys/strsubr.h> 683859Sml29623 #include <sys/cmn_err.h> 693859Sml29623 #include <sys/vtrace.h> 703859Sml29623 #include <sys/kmem.h> 713859Sml29623 #include <sys/ddi.h> 723859Sml29623 #include <sys/sunddi.h> 733859Sml29623 #include <sys/strsun.h> 743859Sml29623 #include <sys/stat.h> 753859Sml29623 #include <sys/cpu.h> 763859Sml29623 #include <sys/kstat.h> 773859Sml29623 #include <inet/common.h> 783859Sml29623 #include <inet/ip.h> 793859Sml29623 #include <sys/dlpi.h> 803859Sml29623 #include <inet/nd.h> 813859Sml29623 #include <netinet/in.h> 823859Sml29623 #include <sys/ethernet.h> 833859Sml29623 #include <sys/vlan.h> 843859Sml29623 #include <sys/pci.h> 853859Sml29623 #include <sys/taskq.h> 863859Sml29623 #include <sys/atomic.h> 873859Sml29623 883859Sml29623 #include <sys/nxge/nxge_defs.h> 893859Sml29623 #include <sys/nxge/nxge_hw.h> 903859Sml29623 #include <sys/nxge/nxge_mac.h> 913859Sml29623 #include <sys/nxge/nxge_mii.h> 923859Sml29623 #include <sys/nxge/nxge_fm.h> 933859Sml29623 #include <sys/netlb.h> 943859Sml29623 953859Sml29623 #include <sys/ddi_intr.h> 968275SEric Cheng #include <sys/mac_provider.h> 973859Sml29623 #include <sys/mac_ether.h> 983859Sml29623 993859Sml29623 #if defined(sun4v) 1003859Sml29623 #include <sys/hypervisor_api.h> 1013859Sml29623 #include <sys/machsystm.h> 1023859Sml29623 #include <sys/hsvc.h> 1033859Sml29623 #endif 1043859Sml29623 1056439Sml29623 #include <sys/dld.h> 1066439Sml29623 1073859Sml29623 /* 1083859Sml29623 * Handy macros (taken from bge driver) 1093859Sml29623 */ 1103859Sml29623 #define RBR_SIZE 4 1113859Sml29623 #define DMA_COMMON_CHANNEL(area) ((area.dma_channel)) 1123859Sml29623 #define DMA_COMMON_VPTR(area) ((area.kaddrp)) 1133859Sml29623 #define DMA_COMMON_VPTR_INDEX(area, index) \ 1143859Sml29623 (((char *)(area.kaddrp)) + \ 1153859Sml29623 (index * RBR_SIZE)) 1163859Sml29623 #define DMA_COMMON_HANDLE(area) ((area.dma_handle)) 1173859Sml29623 #define DMA_COMMON_ACC_HANDLE(area) ((area.acc_handle)) 1183859Sml29623 #define DMA_COMMON_IOADDR(area) ((area.dma_cookie.dmac_laddress)) 1193859Sml29623 #define DMA_COMMON_IOADDR_INDEX(area, index) \ 1203859Sml29623 ((area.dma_cookie.dmac_laddress) + \ 1213859Sml29623 (index * RBR_SIZE)) 1223859Sml29623 1233859Sml29623 #define DMA_NPI_HANDLE(area) ((area.npi_handle) 1243859Sml29623 1253859Sml29623 #define DMA_COMMON_SYNC(area, flag) ((void) ddi_dma_sync((area).dma_handle,\ 1263859Sml29623 (area).offset, (area).alength, \ 1273859Sml29623 (flag))) 1283859Sml29623 #define DMA_COMMON_SYNC_OFFSET(area, bufoffset, len, flag) \ 1293859Sml29623 ((void) ddi_dma_sync((area).dma_handle,\ 1303859Sml29623 (area.offset + bufoffset), len, \ 1313859Sml29623 (flag))) 1323859Sml29623 1333859Sml29623 #define DMA_COMMON_SYNC_RBR_DESC(area, index, flag) \ 1343859Sml29623 ((void) ddi_dma_sync((area).dma_handle,\ 1353859Sml29623 (index * RBR_SIZE), RBR_SIZE, \ 1363859Sml29623 (flag))) 1373859Sml29623 1383859Sml29623 #define DMA_COMMON_SYNC_RBR_DESC_MULTI(area, index, count, flag) \ 1393859Sml29623 ((void) ddi_dma_sync((area).dma_handle,\ 1403859Sml29623 (index * RBR_SIZE), count * RBR_SIZE, \ 1413859Sml29623 (flag))) 1423859Sml29623 #define DMA_COMMON_SYNC_ENTRY(area, index, flag) \ 1433859Sml29623 ((void) ddi_dma_sync((area).dma_handle,\ 1443859Sml29623 (index * (area).block_size), \ 1453859Sml29623 (area).block_size, \ 1463859Sml29623 (flag))) 1473859Sml29623 1483859Sml29623 #define NEXT_ENTRY(index, wrap) ((index + 1) & wrap) 1493859Sml29623 #define NEXT_ENTRY_PTR(ptr, first, last) \ 1503859Sml29623 ((ptr == last) ? first : (ptr + 1)) 1513859Sml29623 1523859Sml29623 /* 1533859Sml29623 * NPI related macros 1543859Sml29623 */ 1553859Sml29623 #define NXGE_DEV_NPI_HANDLE(nxgep) (nxgep->npi_handle) 1563859Sml29623 1573859Sml29623 #define NPI_PCI_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_pci_handle.regh = ah) 1583859Sml29623 #define NPI_PCI_ADD_HANDLE_SET(nxgep, ap) (nxgep->npi_pci_handle.regp = ap) 1593859Sml29623 1603859Sml29623 #define NPI_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_handle.regh = ah) 1613859Sml29623 #define NPI_ADD_HANDLE_SET(nxgep, ap) \ 1623859Sml29623 nxgep->npi_handle.is_vraddr = B_FALSE; \ 1633859Sml29623 nxgep->npi_handle.function.instance = nxgep->instance; \ 1643859Sml29623 nxgep->npi_handle.function.function = nxgep->function_num; \ 1653859Sml29623 nxgep->npi_handle.nxgep = (void *) nxgep; \ 1663859Sml29623 nxgep->npi_handle.regp = ap; 1673859Sml29623 1683859Sml29623 #define NPI_REG_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_reg_handle.regh = ah) 1693859Sml29623 #define NPI_REG_ADD_HANDLE_SET(nxgep, ap) \ 1703859Sml29623 nxgep->npi_reg_handle.is_vraddr = B_FALSE; \ 1713859Sml29623 nxgep->npi_handle.function.instance = nxgep->instance; \ 1723859Sml29623 nxgep->npi_handle.function.function = nxgep->function_num; \ 1733859Sml29623 nxgep->npi_reg_handle.nxgep = (void *) nxgep; \ 1743859Sml29623 nxgep->npi_reg_handle.regp = ap; 1753859Sml29623 1763859Sml29623 #define NPI_MSI_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_msi_handle.regh = ah) 1773859Sml29623 #define NPI_MSI_ADD_HANDLE_SET(nxgep, ap) (nxgep->npi_msi_handle.regp = ap) 1783859Sml29623 1793859Sml29623 #define NPI_VREG_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_vreg_handle.regh = ah) 1803859Sml29623 #define NPI_VREG_ADD_HANDLE_SET(nxgep, ap) \ 1813859Sml29623 nxgep->npi_vreg_handle.is_vraddr = B_TRUE; \ 1823859Sml29623 nxgep->npi_handle.function.instance = nxgep->instance; \ 1833859Sml29623 nxgep->npi_handle.function.function = nxgep->function_num; \ 1843859Sml29623 nxgep->npi_vreg_handle.nxgep = (void *) nxgep; \ 1853859Sml29623 nxgep->npi_vreg_handle.regp = ap; 1863859Sml29623 1873859Sml29623 #define NPI_V2REG_ACC_HANDLE_SET(nxgep, ah) (nxgep->npi_v2reg_handle.regh = ah) 1883859Sml29623 #define NPI_V2REG_ADD_HANDLE_SET(nxgep, ap) \ 1893859Sml29623 nxgep->npi_v2reg_handle.is_vraddr = B_TRUE; \ 1903859Sml29623 nxgep->npi_handle.function.instance = nxgep->instance; \ 1913859Sml29623 nxgep->npi_handle.function.function = nxgep->function_num; \ 1923859Sml29623 nxgep->npi_v2reg_handle.nxgep = (void *) nxgep; \ 1933859Sml29623 nxgep->npi_v2reg_handle.regp = ap; 1943859Sml29623 1953859Sml29623 #define NPI_PCI_ACC_HANDLE_GET(nxgep) (nxgep->npi_pci_handle.regh) 1963859Sml29623 #define NPI_PCI_ADD_HANDLE_GET(nxgep) (nxgep->npi_pci_handle.regp) 1973859Sml29623 #define NPI_ACC_HANDLE_GET(nxgep) (nxgep->npi_handle.regh) 1983859Sml29623 #define NPI_ADD_HANDLE_GET(nxgep) (nxgep->npi_handle.regp) 1993859Sml29623 #define NPI_REG_ACC_HANDLE_GET(nxgep) (nxgep->npi_reg_handle.regh) 2003859Sml29623 #define NPI_REG_ADD_HANDLE_GET(nxgep) (nxgep->npi_reg_handle.regp) 2013859Sml29623 #define NPI_MSI_ACC_HANDLE_GET(nxgep) (nxgep->npi_msi_handle.regh) 2023859Sml29623 #define NPI_MSI_ADD_HANDLE_GET(nxgep) (nxgep->npi_msi_handle.regp) 2033859Sml29623 #define NPI_VREG_ACC_HANDLE_GET(nxgep) (nxgep->npi_vreg_handle.regh) 2043859Sml29623 #define NPI_VREG_ADD_HANDLE_GET(nxgep) (nxgep->npi_vreg_handle.regp) 2053859Sml29623 #define NPI_V2REG_ACC_HANDLE_GET(nxgep) (nxgep->npi_v2reg_handle.regh) 2063859Sml29623 #define NPI_V2REG_ADD_HANDLE_GET(nxgep) (nxgep->npi_v2reg_handle.regp) 2073859Sml29623 2083859Sml29623 #define NPI_DMA_ACC_HANDLE_SET(dmap, ah) (dmap->npi_handle.regh = ah) 2093859Sml29623 #define NPI_DMA_ACC_HANDLE_GET(dmap) (dmap->npi_handle.regh) 2103859Sml29623 2113859Sml29623 /* 2123859Sml29623 * DMA handles. 2133859Sml29623 */ 2143859Sml29623 #define NXGE_DESC_D_HANDLE_GET(desc) (desc.dma_handle) 2153859Sml29623 #define NXGE_DESC_D_IOADD_GET(desc) (desc.dma_cookie.dmac_laddress) 2163859Sml29623 #define NXGE_DMA_IOADD_GET(dma_cookie) (dma_cookie.dmac_laddress) 2173859Sml29623 #define NXGE_DMA_AREA_IOADD_GET(dma_area) (dma_area.dma_cookie.dmac_laddress) 2183859Sml29623 2193859Sml29623 #define LDV_ON(ldv, vector) ((vector >> ldv) & 0x1) 2203859Sml29623 #define LDV2_ON_1(ldv, vector) ((vector >> (ldv - 64)) & 0x1) 2213859Sml29623 #define LDV2_ON_2(ldv, vector) (((vector >> 5) >> (ldv - 64)) & 0x1) 2223859Sml29623 2233859Sml29623 typedef uint32_t nxge_status_t; 2243859Sml29623 2253859Sml29623 typedef enum { 2263859Sml29623 IDLE, 2273859Sml29623 PROGRESS, 2283859Sml29623 CONFIGURED 2293859Sml29623 } dev_func_shared_t; 2303859Sml29623 2313859Sml29623 typedef enum { 2323859Sml29623 DVMA, 2333859Sml29623 DMA, 2343859Sml29623 SDMA 2353859Sml29623 } dma_method_t; 2363859Sml29623 2373859Sml29623 typedef enum { 2383859Sml29623 BKSIZE_4K, 2393859Sml29623 BKSIZE_8K, 2403859Sml29623 BKSIZE_16K, 2413859Sml29623 BKSIZE_32K 2423859Sml29623 } nxge_rx_block_size_t; 2433859Sml29623 2443859Sml29623 #ifdef TX_ONE_BUF 2453859Sml29623 #define TX_BCOPY_MAX 1514 2463859Sml29623 #else 2473859Sml29623 #if defined(sun4v) && defined(NIU_LP_WORKAROUND) 2483859Sml29623 #define TX_BCOPY_MAX 4096 2493859Sml29623 #define TX_BCOPY_SIZE 4096 2503859Sml29623 #else 2513859Sml29623 #define TX_BCOPY_MAX 2048 2523859Sml29623 #define TX_BCOPY_SIZE 2048 2533859Sml29623 #endif 2543859Sml29623 #endif 2553859Sml29623 2563859Sml29623 #define TX_STREAM_MIN 512 2573859Sml29623 #define TX_FASTDVMA_MIN 1024 2583859Sml29623 2595165Syc148097 /* 2605165Syc148097 * Send repeated FMA ereports or display messages about some non-fatal 2615165Syc148097 * hardware errors only the the first NXGE_ERROR_SHOW_MAX -1 times 2625165Syc148097 */ 2635165Syc148097 #define NXGE_ERROR_SHOW_MAX 2 2645165Syc148097 2653859Sml29623 2663859Sml29623 /* 2673859Sml29623 * Defaults 2683859Sml29623 */ 2698661SSantwona.Behera@Sun.COM #define NXGE_RDC_RCR_THRESHOLD 32 2708661SSantwona.Behera@Sun.COM #define NXGE_RDC_RCR_TIMEOUT 8 2713859Sml29623 2723859Sml29623 #define NXGE_RDC_RCR_THRESHOLD_MAX 1024 2733859Sml29623 #define NXGE_RDC_RCR_TIMEOUT_MAX 64 2748661SSantwona.Behera@Sun.COM #define NXGE_RDC_RCR_THRESHOLD_MIN 8 2753859Sml29623 #define NXGE_RDC_RCR_TIMEOUT_MIN 1 2763859Sml29623 #define NXGE_RCR_FULL_HEADER 1 2773859Sml29623 2783859Sml29623 #define NXGE_IS_VLAN_PACKET(ptr) \ 2793859Sml29623 ((((struct ether_vlan_header *)ptr)->ether_tpid) == \ 2803859Sml29623 htons(VLAN_ETHERTYPE)) 2813859Sml29623 2823859Sml29623 typedef enum { 2833859Sml29623 NONE, 2843859Sml29623 SMALL, 2853859Sml29623 MEDIUM, 2863859Sml29623 LARGE 2873859Sml29623 } dma_size_t; 2883859Sml29623 2893859Sml29623 typedef enum { 2903859Sml29623 USE_NONE, 2913859Sml29623 USE_BCOPY, 2923859Sml29623 USE_DVMA, 2933859Sml29623 USE_DMA, 2943859Sml29623 USE_SDMA 2953859Sml29623 } dma_type_t; 2963859Sml29623 2973859Sml29623 typedef enum { 2983859Sml29623 NOT_IN_USE, 2993859Sml29623 HDR_BUF, 3003859Sml29623 MTU_BUF, 3013859Sml29623 RE_ASSEMBLY_BUF, 3023859Sml29623 FREE_BUF 3033859Sml29623 } rx_page_state_t; 3043859Sml29623 3053859Sml29623 struct _nxge_block_mv_t { 3063859Sml29623 uint32_t msg_type; 3073859Sml29623 dma_type_t dma_type; 3083859Sml29623 }; 3093859Sml29623 3103859Sml29623 typedef struct _nxge_block_mv_t nxge_block_mv_t, *p_nxge_block_mv_t; 3113859Sml29623 3123859Sml29623 typedef enum { 3134732Sdavemq NIU_TYPE_NONE = 0, 3144732Sdavemq 3156835Syc148097 /* QGC NIC */ 3164732Sdavemq NEPTUNE_4_1GC = 3174732Sdavemq (NXGE_PORT_1G_COPPER | 3184732Sdavemq (NXGE_PORT_1G_COPPER << 4) | 3194732Sdavemq (NXGE_PORT_1G_COPPER << 8) | 3204732Sdavemq (NXGE_PORT_1G_COPPER << 12)), 3214732Sdavemq 3226835Syc148097 /* Huron: 2 fiber XAUI cards */ 3234732Sdavemq NEPTUNE_2_10GF = 3244732Sdavemq (NXGE_PORT_10G_FIBRE | 3254732Sdavemq (NXGE_PORT_10G_FIBRE << 4) | 3264732Sdavemq (NXGE_PORT_NONE << 8) | 3274732Sdavemq (NXGE_PORT_NONE << 12)), 3284732Sdavemq 3296835Syc148097 /* Huron: port0 is a TN1010 copper XAUI */ 3306835Syc148097 NEPTUNE_1_TN1010 = 3316835Syc148097 (NXGE_PORT_TN1010 | 3326835Syc148097 (NXGE_PORT_NONE << 4) | 3336835Syc148097 (NXGE_PORT_NONE << 8) | 3346835Syc148097 (NXGE_PORT_NONE << 12)), 3356835Syc148097 3366835Syc148097 /* Huron: port1 is a TN1010 copper XAUI */ 3376835Syc148097 NEPTUNE_1_NONE_1_TN1010 = 3386835Syc148097 (NXGE_PORT_NONE | 3396835Syc148097 (NXGE_PORT_TN1010 << 4) | 3406835Syc148097 (NXGE_PORT_NONE << 8) | 3416835Syc148097 (NXGE_PORT_NONE << 12)), 3426835Syc148097 3436835Syc148097 /* Huron: 2 TN1010 copper XAUI cards */ 3446835Syc148097 NEPTUNE_2_TN1010 = 3456835Syc148097 (NXGE_PORT_TN1010 | 3466835Syc148097 (NXGE_PORT_TN1010 << 4) | 3476835Syc148097 (NXGE_PORT_NONE << 8) | 3486835Syc148097 (NXGE_PORT_NONE << 12)), 3496835Syc148097 3506835Syc148097 /* Huron: port0 is fiber XAUI, port1 is copper XAUI */ 3516835Syc148097 NEPTUNE_1_10GF_1_TN1010 = 3526835Syc148097 (NXGE_PORT_10G_FIBRE | 3536835Syc148097 (NXGE_PORT_TN1010 << 4) | 3546835Syc148097 (NXGE_PORT_NONE << 8) | 3556835Syc148097 (NXGE_PORT_NONE << 12)), 3566835Syc148097 3576835Syc148097 /* Huron: port0 is copper XAUI, port1 is fiber XAUI */ 3586835Syc148097 NEPTUNE_1_TN1010_1_10GF = 3596835Syc148097 (NXGE_PORT_TN1010 | 3606835Syc148097 (NXGE_PORT_10G_FIBRE << 4) | 3616835Syc148097 (NXGE_PORT_NONE << 8) | 3626835Syc148097 (NXGE_PORT_NONE << 12)), 3636835Syc148097 3646835Syc148097 /* Maramba: port0 and port1 are fiber XAUIs */ 3654732Sdavemq NEPTUNE_2_10GF_2_1GC = 3664732Sdavemq (NXGE_PORT_10G_FIBRE | 3674732Sdavemq (NXGE_PORT_10G_FIBRE << 4) | 3684732Sdavemq (NXGE_PORT_1G_COPPER << 8) | 3694732Sdavemq (NXGE_PORT_1G_COPPER << 12)), 3704732Sdavemq 3716835Syc148097 /* Maramba: port0 and port1 are copper TN1010 XAUIs */ 3726835Syc148097 NEPTUNE_2_TN1010_2_1GC = 3736835Syc148097 (NXGE_PORT_TN1010 | 3746835Syc148097 (NXGE_PORT_TN1010 << 4) | 3756835Syc148097 (NXGE_PORT_1G_COPPER << 8) | 3766835Syc148097 (NXGE_PORT_1G_COPPER << 12)), 3776835Syc148097 3786835Syc148097 /* Maramba: port0 is copper XAUI, port1 is Fiber XAUI */ 3796835Syc148097 NEPTUNE_1_TN1010_1_10GF_2_1GC = 3806835Syc148097 (NXGE_PORT_TN1010 | 3816835Syc148097 (NXGE_PORT_10G_FIBRE << 4) | 3826835Syc148097 (NXGE_PORT_1G_COPPER << 8) | 3836835Syc148097 (NXGE_PORT_1G_COPPER << 12)), 3846835Syc148097 3856835Syc148097 /* Maramba: port0 is fiber XAUI, port1 is copper XAUI */ 3866835Syc148097 NEPTUNE_1_10GF_1_TN1010_2_1GC = 3876835Syc148097 (NXGE_PORT_10G_FIBRE | 3886835Syc148097 (NXGE_PORT_TN1010 << 4) | 3896835Syc148097 (NXGE_PORT_1G_COPPER << 8) | 3906835Syc148097 (NXGE_PORT_1G_COPPER << 12)), 3916835Syc148097 3926835Syc148097 /* Maramba: port0 is fiber XAUI */ 3934732Sdavemq NEPTUNE_1_10GF_3_1GC = 3944732Sdavemq (NXGE_PORT_10G_FIBRE | 3954732Sdavemq (NXGE_PORT_1G_COPPER << 4) | 3964732Sdavemq (NXGE_PORT_1G_COPPER << 8) | 3974732Sdavemq (NXGE_PORT_1G_COPPER << 12)), 3984732Sdavemq 3996835Syc148097 /* Maramba: port0 is TN1010 copper XAUI */ 4006835Syc148097 NEPTUNE_1_TN1010_3_1GC = 4016835Syc148097 (NXGE_PORT_TN1010 | 4026835Syc148097 (NXGE_PORT_1G_COPPER << 4) | 4036835Syc148097 (NXGE_PORT_1G_COPPER << 8) | 4046835Syc148097 (NXGE_PORT_1G_COPPER << 12)), 4056835Syc148097 4066835Syc148097 /* Maramba: port1 is fiber XAUI */ 4074732Sdavemq NEPTUNE_1_1GC_1_10GF_2_1GC = 4084732Sdavemq (NXGE_PORT_1G_COPPER | 4094732Sdavemq (NXGE_PORT_10G_FIBRE << 4) | 4104732Sdavemq (NXGE_PORT_1G_COPPER << 8) | 4114732Sdavemq (NXGE_PORT_1G_COPPER << 12)), 4124732Sdavemq 4136835Syc148097 /* Maramba: port1 is TN1010 copper XAUI */ 4146835Syc148097 NEPTUNE_1_1GC_1_TN1010_2_1GC = 4156835Syc148097 (NXGE_PORT_1G_COPPER | 4166835Syc148097 (NXGE_PORT_TN1010 << 4) | 4176835Syc148097 (NXGE_PORT_1G_COPPER << 8) | 4186835Syc148097 (NXGE_PORT_1G_COPPER << 12)), 4196835Syc148097 4206261Sjoycey NEPTUNE_2_1GRF = 4216261Sjoycey (NXGE_PORT_NONE | 4226261Sjoycey (NXGE_PORT_NONE << 4) | 4236261Sjoycey (NXGE_PORT_1G_RGMII_FIBER << 8) | 4246261Sjoycey (NXGE_PORT_1G_RGMII_FIBER << 12)), 4256261Sjoycey 4266261Sjoycey NEPTUNE_2_10GF_2_1GRF = 4276261Sjoycey (NXGE_PORT_10G_FIBRE | 4286261Sjoycey (NXGE_PORT_10G_FIBRE << 4) | 4296261Sjoycey (NXGE_PORT_1G_RGMII_FIBER << 8) | 4306261Sjoycey (NXGE_PORT_1G_RGMII_FIBER << 12)), 4316261Sjoycey 4324732Sdavemq N2_NIU = 4334732Sdavemq (NXGE_PORT_RSVD | 4344732Sdavemq (NXGE_PORT_RSVD << 4) | 4354732Sdavemq (NXGE_PORT_RSVD << 8) | 4364732Sdavemq (NXGE_PORT_RSVD << 12)) 4374732Sdavemq 4383859Sml29623 } niu_type_t; 4393859Sml29623 4406835Syc148097 /* 44111304SJanie.Lu@Sun.COM * The niu_hw_type is for non-PHY related functions 44211304SJanie.Lu@Sun.COM * designed on various versions of NIU chips (i.e. RF/NIU has 44311304SJanie.Lu@Sun.COM * additional classification features and communicates with 44411304SJanie.Lu@Sun.COM * a different SerDes than N2/NIU). 44511304SJanie.Lu@Sun.COM */ 44611304SJanie.Lu@Sun.COM typedef enum { 44711304SJanie.Lu@Sun.COM NIU_HW_TYPE_DEFAULT = 0, /* N2/NIU */ 44811304SJanie.Lu@Sun.COM NIU_HW_TYPE_RF = 1, /* RF/NIU */ 44911304SJanie.Lu@Sun.COM } niu_hw_type_t; 45011304SJanie.Lu@Sun.COM 45111304SJanie.Lu@Sun.COM /* 4526835Syc148097 * P_NEPTUNE_GENERIC: 4536835Syc148097 * The cover-all case for Neptune (as opposed to NIU) where we do not 4546835Syc148097 * care the exact platform as we do not do anything that is platform 4556835Syc148097 * specific. 4566835Syc148097 * P_NEPTUNE_ATLAS_2PORT: 4576835Syc148097 * Dual Port Fiber Neptune based NIC (2XGF) 4586835Syc148097 * P_NEPTUNE_ATLAS_4PORT: 4596835Syc148097 * Quad Port Copper Neptune based NIC (QGC) 4606835Syc148097 * P_NEPTUNE_NIU: 4616835Syc148097 * This is NIU. Could be Huron, Glendale, Monza or any other NIU based 4626835Syc148097 * platform. 4636835Syc148097 */ 4643859Sml29623 typedef enum { 4654732Sdavemq P_NEPTUNE_NONE, 4665572Ssbehera P_NEPTUNE_GENERIC, 4674977Sraghus P_NEPTUNE_ATLAS_2PORT, 4684977Sraghus P_NEPTUNE_ATLAS_4PORT, 4694732Sdavemq P_NEPTUNE_MARAMBA_P0, 4704732Sdavemq P_NEPTUNE_MARAMBA_P1, 4715196Ssbehera P_NEPTUNE_ALONSO, 4727801SSantwona.Behera@Sun.COM P_NEPTUNE_ROCK, 4734732Sdavemq P_NEPTUNE_NIU 4744732Sdavemq } platform_type_t; 4754732Sdavemq 4765196Ssbehera #define NXGE_IS_VALID_NEPTUNE_TYPE(nxgep) \ 4775196Ssbehera (((nxgep->platform_type) == P_NEPTUNE_ATLAS_2PORT) || \ 4785196Ssbehera ((nxgep->platform_type) == P_NEPTUNE_ATLAS_4PORT) || \ 4795196Ssbehera ((nxgep->platform_type) == P_NEPTUNE_MARAMBA_P0) || \ 4805196Ssbehera ((nxgep->platform_type) == P_NEPTUNE_MARAMBA_P1) || \ 4815572Ssbehera ((nxgep->platform_type) == P_NEPTUNE_GENERIC) || \ 4827801SSantwona.Behera@Sun.COM ((nxgep->platform_type) == P_NEPTUNE_ALONSO) || \ 4837801SSantwona.Behera@Sun.COM ((nxgep->platform_type) == P_NEPTUNE_ROCK)) 4844732Sdavemq 4855553Smisaki #define NXGE_IS_XAUI_PLATFORM(nxgep) \ 4865553Smisaki (((nxgep->platform_type) == P_NEPTUNE_NIU) || \ 4875553Smisaki ((nxgep->platform_type) == P_NEPTUNE_MARAMBA_P0) || \ 4885553Smisaki ((nxgep->platform_type) == P_NEPTUNE_MARAMBA_P1)) 4895553Smisaki 4905553Smisaki 4914732Sdavemq typedef enum { 4923859Sml29623 CFG_DEFAULT = 0, /* default cfg */ 4933859Sml29623 CFG_EQUAL, /* Equal */ 4943859Sml29623 CFG_FAIR, /* Equal */ 4953859Sml29623 CFG_CLASSIFY, 4963859Sml29623 CFG_L2_CLASSIFY, 4973859Sml29623 CFG_L3_CLASSIFY, 4983859Sml29623 CFG_L3_DISTRIBUTE, 4993859Sml29623 CFG_L3_WEB, 5003859Sml29623 CFG_L3_TCAM, 5013859Sml29623 CFG_NOT_SPECIFIED, 5023859Sml29623 CFG_CUSTOM /* Custom */ 5033859Sml29623 } cfg_type_t; 5043859Sml29623 5053859Sml29623 typedef enum { 5063859Sml29623 NO_MSG = 0x0, /* No message output or storage. */ 5073859Sml29623 CONSOLE = 0x1, /* Messages are go to the console. */ 5083859Sml29623 BUFFER = 0x2, /* Messages are go to the system buffer. */ 5093859Sml29623 CON_BUF = 0x3, /* Messages are go to the console and */ 5103859Sml29623 /* system buffer. */ 5113859Sml29623 VERBOSE = 0x4 /* Messages are go out only in VERBOSE node. */ 5123859Sml29623 } out_msg_t, *p_out_msg_t; 5133859Sml29623 5143859Sml29623 typedef enum { 5153859Sml29623 DBG_NO_MSG = 0x0, /* No message output or storage. */ 5163859Sml29623 DBG_CONSOLE = 0x1, /* Messages are go to the console. */ 5173859Sml29623 DBG_BUFFER = 0x2, /* Messages are go to the system buffer. */ 5183859Sml29623 DBG_CON_BUF = 0x3, /* Messages are go to the console and */ 5193859Sml29623 /* system buffer. */ 5203859Sml29623 STR_LOG = 4 /* Sessage sent to streams logging driver. */ 5213859Sml29623 } out_dbgmsg_t, *p_out_dbgmsg_t; 5223859Sml29623 5236495Sspeer typedef enum { 5246495Sspeer DDI_MEM_ALLOC, /* default (use ddi_dma_mem_alloc) */ 5256495Sspeer KMEM_ALLOC, /* use kmem_alloc(). */ 5266495Sspeer CONTIG_MEM_ALLOC /* use contig_mem_alloc() (N2/NIU only) */ 5276495Sspeer } buf_alloc_type_t; 5283859Sml29623 5296495Sspeer #define BUF_ALLOCATED 0x00000001 5306495Sspeer #define BUF_ALLOCATED_WAIT_FREE 0x00000002 5313859Sml29623 5323859Sml29623 typedef struct ether_addr ether_addr_st, *p_ether_addr_t; 5333859Sml29623 typedef struct ether_header ether_header_t, *p_ether_header_t; 5343859Sml29623 typedef queue_t *p_queue_t; 5353859Sml29623 typedef mblk_t *p_mblk_t; 5363859Sml29623 5373859Sml29623 /* 5384732Sdavemq * Generic phy table to support different phy types. 5396835Syc148097 * 5406835Syc148097 * The argument for check_link is nxgep, which is passed to check_link 5416835Syc148097 * as an argument to the timer routine. 5424732Sdavemq */ 5434732Sdavemq typedef struct _nxge_xcvr_table { 5444732Sdavemq nxge_status_t (*serdes_init) (); /* Serdes init routine */ 5454732Sdavemq nxge_status_t (*xcvr_init) (); /* xcvr init routine */ 5464732Sdavemq nxge_status_t (*link_intr_stop) (); /* Link intr disable routine */ 5474732Sdavemq nxge_status_t (*link_intr_start) (); /* Link intr enable routine */ 5484732Sdavemq nxge_status_t (*check_link) (); /* Link check routine */ 5494732Sdavemq 5504732Sdavemq uint32_t xcvr_inuse; 5514732Sdavemq } nxge_xcvr_table_t, *p_nxge_xcvr_table_t; 5524732Sdavemq 5534732Sdavemq /* 5543859Sml29623 * Common DMA data elements. 5553859Sml29623 */ 5566495Sspeer typedef struct _nxge_dma_pool_t nxge_dma_pool_t, *p_nxge_dma_pool_t; 5576495Sspeer 5583859Sml29623 struct _nxge_dma_common_t { 5593859Sml29623 uint16_t dma_channel; 5603859Sml29623 void *kaddrp; 5613859Sml29623 void *last_kaddrp; 5623859Sml29623 void *ioaddr_pp; 5633859Sml29623 void *first_ioaddr_pp; 5643859Sml29623 void *last_ioaddr_pp; 5653859Sml29623 ddi_dma_cookie_t dma_cookie; 5663859Sml29623 uint32_t ncookies; 5673859Sml29623 5683859Sml29623 ddi_dma_handle_t dma_handle; 5693859Sml29623 nxge_os_acc_handle_t acc_handle; 5703859Sml29623 npi_handle_t npi_handle; 5713859Sml29623 5723859Sml29623 size_t block_size; 5733859Sml29623 uint32_t nblocks; 5743859Sml29623 size_t alength; 5753859Sml29623 uint_t offset; 5763859Sml29623 uint_t dma_chunk_index; 5773859Sml29623 void *orig_ioaddr_pp; 5783859Sml29623 uint64_t orig_vatopa; 5793859Sml29623 void *orig_kaddrp; 5803859Sml29623 size_t orig_alength; 5813859Sml29623 boolean_t contig_alloc_type; 5826495Sspeer /* 5836495Sspeer * Receive buffers may be allocated using 5846495Sspeer * kmem_alloc(). The buffer free function 5856495Sspeer * depends on its allocation function. 5866495Sspeer */ 5876495Sspeer boolean_t kmem_alloc_type; 5886495Sspeer uint32_t buf_alloc_state; 5896495Sspeer buf_alloc_type_t buf_alloc_type; 5906495Sspeer p_nxge_dma_pool_t rx_buf_pool_p; 5913859Sml29623 }; 5923859Sml29623 5933859Sml29623 typedef struct _nxge_t nxge_t, *p_nxge_t; 5943859Sml29623 typedef struct _nxge_dma_common_t nxge_dma_common_t, *p_nxge_dma_common_t; 5953859Sml29623 5966495Sspeer struct _nxge_dma_pool_t { 5973859Sml29623 p_nxge_dma_common_t *dma_buf_pool_p; 5983859Sml29623 uint32_t ndmas; 5993859Sml29623 uint32_t *num_chunks; 6003859Sml29623 boolean_t buf_allocated; 6016495Sspeer }; 6023859Sml29623 6033859Sml29623 /* 6043859Sml29623 * Each logical device (69): 6053859Sml29623 * - LDG # 6063859Sml29623 * - flag bits 6073859Sml29623 * - masks. 6083859Sml29623 * - interrupt handler function. 6093859Sml29623 * 6103859Sml29623 * Generic system interrupt handler with two arguments: 6113859Sml29623 * (nxge_sys_intr_t) 6123859Sml29623 * Per device instance data structure 6133859Sml29623 * Logical group data structure. 6143859Sml29623 * 6153859Sml29623 * Logical device interrupt handler with two arguments: 6163859Sml29623 * (nxge_ldv_intr_t) 6173859Sml29623 * Per device instance data structure 6183859Sml29623 * Logical device number 6193859Sml29623 */ 6203859Sml29623 typedef struct _nxge_ldg_t nxge_ldg_t, *p_nxge_ldg_t; 6213859Sml29623 typedef struct _nxge_ldv_t nxge_ldv_t, *p_nxge_ldv_t; 6223859Sml29623 typedef uint_t (*nxge_sys_intr_t)(void *arg1, void *arg2); 6233859Sml29623 typedef uint_t (*nxge_ldv_intr_t)(void *arg1, void *arg2); 6243859Sml29623 6253859Sml29623 /* 6263859Sml29623 * Each logical device Group (64) needs to have the following 6273859Sml29623 * configurations: 6283859Sml29623 * - timer counter (6 bits) 6293859Sml29623 * - timer resolution (20 bits, number of system clocks) 6303859Sml29623 * - system data (7 bits) 6313859Sml29623 */ 6323859Sml29623 struct _nxge_ldg_t { 6333859Sml29623 uint8_t ldg; /* logical group number */ 6343859Sml29623 uint8_t vldg_index; 6353859Sml29623 boolean_t arm; 6363859Sml29623 uint16_t ldg_timer; /* counter */ 6373859Sml29623 uint8_t func; 6383859Sml29623 uint8_t vector; 6393859Sml29623 uint8_t intdata; 6403859Sml29623 uint8_t nldvs; 6413859Sml29623 p_nxge_ldv_t ldvp; 6423859Sml29623 nxge_sys_intr_t sys_intr_handler; 6433859Sml29623 p_nxge_t nxgep; 64411878SVenu.Iyer@Sun.COM uint32_t htable_idx; 6453859Sml29623 }; 6463859Sml29623 6473859Sml29623 struct _nxge_ldv_t { 6483859Sml29623 uint8_t ldg_assigned; 6493859Sml29623 uint8_t ldv; 6503859Sml29623 boolean_t is_rxdma; 6513859Sml29623 boolean_t is_txdma; 6523859Sml29623 boolean_t is_mif; 6533859Sml29623 boolean_t is_mac; 6543859Sml29623 boolean_t is_syserr; 6553859Sml29623 boolean_t use_timer; 6563859Sml29623 uint8_t channel; 6573859Sml29623 uint8_t vdma_index; 6583859Sml29623 uint8_t func; 6593859Sml29623 p_nxge_ldg_t ldgp; 6603859Sml29623 uint8_t ldv_flags; 6613859Sml29623 uint8_t ldv_ldf_masks; 6623859Sml29623 nxge_ldv_intr_t ldv_intr_handler; 6633859Sml29623 p_nxge_t nxgep; 6643859Sml29623 }; 6653859Sml29623 6663859Sml29623 typedef struct _nxge_logical_page_t { 6673859Sml29623 uint16_t dma; 6683859Sml29623 uint16_t page; 6693859Sml29623 boolean_t valid; 6703859Sml29623 uint64_t mask; 6713859Sml29623 uint64_t value; 6723859Sml29623 uint64_t reloc; 6733859Sml29623 uint32_t handle; 6743859Sml29623 } nxge_logical_page_t, *p_nxge_logical_page_t; 6753859Sml29623 6763859Sml29623 /* 6773859Sml29623 * (Internal) return values from ioctl subroutines. 6783859Sml29623 */ 6793859Sml29623 enum nxge_ioc_reply { 6803859Sml29623 IOC_INVAL = -1, /* bad, NAK with EINVAL */ 6813859Sml29623 IOC_DONE, /* OK, reply sent */ 6823859Sml29623 IOC_ACK, /* OK, just send ACK */ 6833859Sml29623 IOC_REPLY, /* OK, just send reply */ 6843859Sml29623 IOC_RESTART_ACK, /* OK, restart & ACK */ 6853859Sml29623 IOC_RESTART_REPLY /* OK, restart & reply */ 6863859Sml29623 }; 6873859Sml29623 6883859Sml29623 typedef struct _pci_cfg_t { 6893859Sml29623 uint16_t vendorid; 6903859Sml29623 uint16_t devid; 6913859Sml29623 uint16_t command; 6923859Sml29623 uint16_t status; 6933859Sml29623 uint8_t revid; 6943859Sml29623 uint8_t res0; 6953859Sml29623 uint16_t junk1; 6963859Sml29623 uint8_t cache_line; 6973859Sml29623 uint8_t latency; 6983859Sml29623 uint8_t header; 6993859Sml29623 uint8_t bist; 7003859Sml29623 uint32_t base; 7013859Sml29623 uint32_t base14; 7023859Sml29623 uint32_t base18; 7033859Sml29623 uint32_t base1c; 7043859Sml29623 uint32_t base20; 7053859Sml29623 uint32_t base24; 7063859Sml29623 uint32_t base28; 7073859Sml29623 uint32_t base2c; 7083859Sml29623 uint32_t base30; 7093859Sml29623 uint32_t res1[2]; 7103859Sml29623 uint8_t int_line; 7113859Sml29623 uint8_t int_pin; 7123859Sml29623 uint8_t min_gnt; 7133859Sml29623 uint8_t max_lat; 7143859Sml29623 } pci_cfg_t, *p_pci_cfg_t; 7153859Sml29623 7163859Sml29623 typedef struct _dev_regs_t { 7173859Sml29623 nxge_os_acc_handle_t nxge_pciregh; /* PCI config DDI IO handle */ 7183859Sml29623 p_pci_cfg_t nxge_pciregp; /* mapped PCI registers */ 7193859Sml29623 7203859Sml29623 nxge_os_acc_handle_t nxge_regh; /* device DDI IO (BAR 0) */ 7213859Sml29623 void *nxge_regp; /* mapped device registers */ 7223859Sml29623 7233859Sml29623 nxge_os_acc_handle_t nxge_msix_regh; /* MSI/X DDI handle (BAR 2) */ 7243859Sml29623 void *nxge_msix_regp; /* MSI/X register */ 7253859Sml29623 7263859Sml29623 nxge_os_acc_handle_t nxge_vir_regh; /* virtualization (BAR 4) */ 7273859Sml29623 unsigned char *nxge_vir_regp; /* virtualization register */ 7283859Sml29623 7293859Sml29623 nxge_os_acc_handle_t nxge_vir2_regh; /* second virtualization */ 7303859Sml29623 unsigned char *nxge_vir2_regp; /* second virtualization */ 7313859Sml29623 7323859Sml29623 nxge_os_acc_handle_t nxge_romh; /* fcode rom handle */ 7333859Sml29623 unsigned char *nxge_romp; /* fcode pointer */ 7343859Sml29623 } dev_regs_t, *p_dev_regs_t; 7353859Sml29623 7363859Sml29623 7373859Sml29623 typedef struct _nxge_mac_addr_t { 7383859Sml29623 ether_addr_t addr; 7393859Sml29623 uint_t flags; 7403859Sml29623 } nxge_mac_addr_t; 7413859Sml29623 7423859Sml29623 /* 7433859Sml29623 * The hardware supports 1 unique MAC and 16 alternate MACs (num_mmac) 7443859Sml29623 * for each XMAC port and supports 1 unique MAC and 7 alternate MACs 7453859Sml29623 * for each BMAC port. The number of MACs assigned by the factory is 7463859Sml29623 * different and is as follows, 7473859Sml29623 * BMAC port: num_factory_mmac = num_mmac = 7 7483859Sml29623 * XMAC port on a 2-port NIC: num_factory_mmac = num_mmac - 1 = 15 7493859Sml29623 * XMAC port on a 4-port NIC: num_factory_mmac = 7 7503859Sml29623 * So num_factory_mmac is smaller than num_mmac. nxge_m_mmac_add uses 7513859Sml29623 * num_mmac and nxge_m_mmac_reserve uses num_factory_mmac. 7523859Sml29623 * 7533859Sml29623 * total_factory_macs is the total number of factory MACs, including 7543859Sml29623 * the unique MAC, assigned to a Neptune based NIC card, it is 32. 7553859Sml29623 */ 7563859Sml29623 typedef struct _nxge_mmac_t { 7573859Sml29623 uint8_t total_factory_macs; 7583859Sml29623 uint8_t num_mmac; 7593859Sml29623 uint8_t num_factory_mmac; 7603859Sml29623 nxge_mac_addr_t mac_pool[XMAC_MAX_ADDR_ENTRY]; 7613859Sml29623 ether_addr_t factory_mac_pool[XMAC_MAX_ADDR_ENTRY]; 7623859Sml29623 uint8_t naddrfree; /* number of alt mac addr available */ 7633859Sml29623 } nxge_mmac_t; 7643859Sml29623 7653859Sml29623 /* 7663859Sml29623 * mmac stats structure 7673859Sml29623 */ 7683859Sml29623 typedef struct _nxge_mmac_stats_t { 7693859Sml29623 uint8_t mmac_max_cnt; 7703859Sml29623 uint8_t mmac_avail_cnt; 7713859Sml29623 struct ether_addr mmac_avail_pool[16]; 7723859Sml29623 } nxge_mmac_stats_t, *p_nxge_mmac_stats_t; 7733859Sml29623 7748275SEric Cheng /* 7758275SEric Cheng * Copied from mac.h. Should be cleaned up by driver. 7768275SEric Cheng */ 7778275SEric Cheng #define MMAC_SLOT_USED 0x1 /* address slot used */ 7788275SEric Cheng #define MMAC_VENDOR_ADDR 0x2 /* address returned is vendor supplied */ 7798275SEric Cheng 7808275SEric Cheng 7813859Sml29623 #define NXGE_MAX_MMAC_ADDRS 32 7823859Sml29623 #define NXGE_NUM_MMAC_ADDRS 8 7834185Sspeer #define NXGE_NUM_OF_PORTS_QUAD 4 7844185Sspeer #define NXGE_NUM_OF_PORTS_DUAL 2 7854185Sspeer 7864977Sraghus #define NXGE_QGC_LP_BM_STR "501-7606" 7874977Sraghus #define NXGE_2XGF_LP_BM_STR "501-7283" 7884977Sraghus #define NXGE_QGC_PEM_BM_STR "501-7765" 7894977Sraghus #define NXGE_2XGF_PEM_BM_STR "501-7626" 7905196Ssbehera #define NXGE_ALONSO_BM_STR "373-0202-01" 7915196Ssbehera #define NXGE_ALONSO_MODEL_STR "SUNW,CP3220" 7926075Ssbehera #define NXGE_RFEM_BM_STR "501-7961-01" 7936075Ssbehera #define NXGE_RFEM_MODEL_STR "SUNW,pcie-rfem" 7946261Sjoycey #define NXGE_ARTM_BM_STR "375-3544-01" 7956261Sjoycey #define NXGE_ARTM_MODEL_STR "SUNW,pcie-artm" 7967801SSantwona.Behera@Sun.COM /* ROCK OBP creates a compatible property for ROCK */ 7977801SSantwona.Behera@Sun.COM #define NXGE_ROCK_COMPATIBLE "SUNW,rock-pciex108e,abcd" 7984185Sspeer #define NXGE_EROM_LEN 1048576 7993859Sml29623 8003859Sml29623 #include <sys/nxge/nxge_common_impl.h> 8013859Sml29623 #include <sys/nxge/nxge_common.h> 8023859Sml29623 #include <sys/nxge/nxge_txc.h> 8033859Sml29623 #include <sys/nxge/nxge_rxdma.h> 8043859Sml29623 #include <sys/nxge/nxge_txdma.h> 8053859Sml29623 #include <sys/nxge/nxge_fflp.h> 8063859Sml29623 #include <sys/nxge/nxge_ipp.h> 8073859Sml29623 #include <sys/nxge/nxge_zcp.h> 8083859Sml29623 #include <sys/nxge/nxge_fzc.h> 8093859Sml29623 #include <sys/nxge/nxge_flow.h> 8103859Sml29623 #include <sys/nxge/nxge_virtual.h> 8113859Sml29623 8124185Sspeer #include <npi_espc.h> 8134185Sspeer #include <npi_vir.h> 8144185Sspeer 8153859Sml29623 #include <sys/nxge/nxge.h> 8163859Sml29623 8173859Sml29623 #include <sys/modctl.h> 8183859Sml29623 #include <sys/pattr.h> 8193859Sml29623 8203859Sml29623 extern int secpolicy_net_config(const cred_t *, boolean_t); 8213859Sml29623 extern void nxge_fm_report_error(p_nxge_t, uint8_t, 8223859Sml29623 uint8_t, nxge_fm_ereport_id_t); 8233859Sml29623 extern int fm_check_acc_handle(ddi_acc_handle_t); 8243859Sml29623 extern int fm_check_dma_handle(ddi_dma_handle_t); 8253859Sml29623 8263859Sml29623 /* nxge_classify.c */ 8273859Sml29623 nxge_status_t nxge_classify_init(p_nxge_t); 8283859Sml29623 nxge_status_t nxge_classify_uninit(p_nxge_t); 8293859Sml29623 nxge_status_t nxge_set_hw_classify_config(p_nxge_t); 8303859Sml29623 nxge_status_t nxge_classify_exit_sw(p_nxge_t); 8313859Sml29623 8323859Sml29623 /* nxge_fflp.c */ 8333859Sml29623 void nxge_put_tcam(p_nxge_t, p_mblk_t); 8343859Sml29623 void nxge_get_tcam(p_nxge_t, p_mblk_t); 8353859Sml29623 nxge_status_t nxge_classify_init_hw(p_nxge_t); 8363859Sml29623 nxge_status_t nxge_classify_init_sw(p_nxge_t); 8373859Sml29623 nxge_status_t nxge_fflp_ip_class_config_all(p_nxge_t); 8383859Sml29623 nxge_status_t nxge_fflp_ip_class_config(p_nxge_t, tcam_class_t, 8393859Sml29623 uint32_t); 8403859Sml29623 8413859Sml29623 nxge_status_t nxge_fflp_ip_class_config_get(p_nxge_t, 8423859Sml29623 tcam_class_t, 8433859Sml29623 uint32_t *); 8443859Sml29623 8453859Sml29623 nxge_status_t nxge_cfg_ip_cls_flow_key(p_nxge_t, tcam_class_t, 8463859Sml29623 uint32_t); 8473859Sml29623 8483859Sml29623 nxge_status_t nxge_fflp_ip_usr_class_config(p_nxge_t, tcam_class_t, 8493859Sml29623 uint32_t); 8503859Sml29623 8513859Sml29623 uint64_t nxge_classify_get_cfg_value(p_nxge_t, uint8_t, uint8_t); 8523859Sml29623 nxge_status_t nxge_add_flow(p_nxge_t, flow_resource_t *); 8533859Sml29623 nxge_status_t nxge_fflp_config_tcam_enable(p_nxge_t); 8543859Sml29623 nxge_status_t nxge_fflp_config_tcam_disable(p_nxge_t); 8553859Sml29623 8563859Sml29623 nxge_status_t nxge_fflp_config_hash_lookup_enable(p_nxge_t); 8573859Sml29623 nxge_status_t nxge_fflp_config_hash_lookup_disable(p_nxge_t); 8583859Sml29623 8593859Sml29623 nxge_status_t nxge_fflp_config_llc_snap_enable(p_nxge_t); 8603859Sml29623 nxge_status_t nxge_fflp_config_llc_snap_disable(p_nxge_t); 8613859Sml29623 8623859Sml29623 nxge_status_t nxge_logical_mac_assign_rdc_table(p_nxge_t, uint8_t); 8633859Sml29623 nxge_status_t nxge_fflp_config_vlan_table(p_nxge_t, uint16_t); 8643859Sml29623 8653859Sml29623 nxge_status_t nxge_fflp_set_hash1(p_nxge_t, uint32_t); 8663859Sml29623 8673859Sml29623 nxge_status_t nxge_fflp_set_hash2(p_nxge_t, uint16_t); 8683859Sml29623 8693859Sml29623 nxge_status_t nxge_fflp_init_hostinfo(p_nxge_t); 8703859Sml29623 8713859Sml29623 void nxge_handle_tcam_fragment_bug(p_nxge_t); 87211304SJanie.Lu@Sun.COM int nxge_rxclass_ioctl(p_nxge_t, queue_t *, mblk_t *); 87311304SJanie.Lu@Sun.COM int nxge_rxhash_ioctl(p_nxge_t, queue_t *, mblk_t *); 87411304SJanie.Lu@Sun.COM 8753859Sml29623 nxge_status_t nxge_fflp_hw_reset(p_nxge_t); 8763859Sml29623 nxge_status_t nxge_fflp_handle_sys_errors(p_nxge_t); 8773859Sml29623 nxge_status_t nxge_zcp_handle_sys_errors(p_nxge_t); 8783859Sml29623 8793859Sml29623 /* nxge_kstats.c */ 8803859Sml29623 void nxge_init_statsp(p_nxge_t); 8813859Sml29623 void nxge_setup_kstats(p_nxge_t); 8826495Sspeer void nxge_setup_rdc_kstats(p_nxge_t, int); 8836495Sspeer void nxge_setup_tdc_kstats(p_nxge_t, int); 8843859Sml29623 void nxge_destroy_kstats(p_nxge_t); 8853859Sml29623 int nxge_port_kstat_update(kstat_t *, int); 8863859Sml29623 void nxge_save_cntrs(p_nxge_t); 8873859Sml29623 8883859Sml29623 int nxge_m_stat(void *arg, uint_t, uint64_t *); 88911878SVenu.Iyer@Sun.COM int nxge_rx_ring_stat(mac_ring_driver_t, uint_t, uint64_t *); 89011878SVenu.Iyer@Sun.COM int nxge_tx_ring_stat(mac_ring_driver_t, uint_t, uint64_t *); 8913859Sml29623 8923859Sml29623 /* nxge_hw.c */ 8933859Sml29623 void 8943859Sml29623 nxge_hw_ioctl(p_nxge_t, queue_t *, mblk_t *, struct iocblk *); 8953859Sml29623 void nxge_loopback_ioctl(p_nxge_t, queue_t *, mblk_t *, struct iocblk *); 8966075Ssbehera nxge_status_t nxge_global_reset(p_nxge_t); 8973859Sml29623 uint_t nxge_intr(void *, void *); 8983859Sml29623 void nxge_intr_enable(p_nxge_t); 8993859Sml29623 void nxge_intr_disable(p_nxge_t); 9003859Sml29623 void nxge_hw_blank(void *arg, time_t, uint_t); 9013859Sml29623 void nxge_hw_id_init(p_nxge_t); 9023859Sml29623 void nxge_hw_init_niu_common(p_nxge_t); 9033859Sml29623 void nxge_intr_hw_enable(p_nxge_t); 9043859Sml29623 void nxge_intr_hw_disable(p_nxge_t); 9053859Sml29623 void nxge_hw_stop(p_nxge_t); 9063859Sml29623 void nxge_check_hw_state(p_nxge_t); 9073859Sml29623 9083859Sml29623 void nxge_rxdma_channel_put64(nxge_os_acc_handle_t, 9093859Sml29623 void *, uint32_t, uint16_t, 9103859Sml29623 uint64_t); 9113859Sml29623 uint64_t nxge_rxdma_channel_get64(nxge_os_acc_handle_t, void *, 9123859Sml29623 uint32_t, uint16_t); 9133859Sml29623 9143859Sml29623 9153859Sml29623 void nxge_get32(p_nxge_t, p_mblk_t); 9163859Sml29623 void nxge_put32(p_nxge_t, p_mblk_t); 9173859Sml29623 9183859Sml29623 void nxge_hw_set_mac_modes(p_nxge_t); 9193859Sml29623 9203859Sml29623 /* nxge_send.c. */ 9213859Sml29623 uint_t nxge_reschedule(caddr_t); 9228275SEric Cheng mblk_t *nxge_tx_ring_send(void *, mblk_t *); 9238275SEric Cheng int nxge_start(p_nxge_t, p_tx_ring_t, p_mblk_t); 9243859Sml29623 9253859Sml29623 /* nxge_rxdma.c */ 9263859Sml29623 nxge_status_t nxge_rxdma_cfg_rdcgrp_default_rdc(p_nxge_t, 9273859Sml29623 uint8_t, uint8_t); 9283859Sml29623 9293859Sml29623 nxge_status_t nxge_rxdma_cfg_port_default_rdc(p_nxge_t, 9303859Sml29623 uint8_t, uint8_t); 9313859Sml29623 nxge_status_t nxge_rxdma_cfg_rcr_threshold(p_nxge_t, uint8_t, 9323859Sml29623 uint16_t); 9333859Sml29623 nxge_status_t nxge_rxdma_cfg_rcr_timeout(p_nxge_t, uint8_t, 9343859Sml29623 uint16_t, uint8_t); 9353859Sml29623 9363859Sml29623 /* nxge_ndd.c */ 9373859Sml29623 void nxge_get_param_soft_properties(p_nxge_t); 9383859Sml29623 void nxge_copy_hw_default_to_param(p_nxge_t); 9393859Sml29623 void nxge_copy_param_hw_to_config(p_nxge_t); 9403859Sml29623 void nxge_setup_param(p_nxge_t); 9413859Sml29623 void nxge_init_param(p_nxge_t); 9423859Sml29623 void nxge_destroy_param(p_nxge_t); 9433859Sml29623 boolean_t nxge_check_rxdma_rdcgrp_member(p_nxge_t, uint8_t, uint8_t); 9443859Sml29623 boolean_t nxge_check_rxdma_port_member(p_nxge_t, uint8_t); 9453859Sml29623 boolean_t nxge_check_rdcgrp_port_member(p_nxge_t, uint8_t); 9463859Sml29623 9473859Sml29623 boolean_t nxge_check_txdma_port_member(p_nxge_t, uint8_t); 9483859Sml29623 9493859Sml29623 int nxge_param_get_generic(p_nxge_t, queue_t *, mblk_t *, caddr_t); 9503859Sml29623 int nxge_param_set_generic(p_nxge_t, queue_t *, mblk_t *, char *, caddr_t); 9513859Sml29623 int nxge_get_default(p_nxge_t, queue_t *, p_mblk_t, caddr_t); 9523859Sml29623 int nxge_set_default(p_nxge_t, queue_t *, p_mblk_t, char *, caddr_t); 9533859Sml29623 int nxge_nd_get_names(p_nxge_t, queue_t *, p_mblk_t, caddr_t); 9543859Sml29623 int nxge_mk_mblk_tail_space(p_mblk_t, p_mblk_t *, size_t); 9553859Sml29623 long nxge_strtol(char *, char **, int); 9563859Sml29623 boolean_t nxge_param_get_instance(queue_t *, mblk_t *); 9573859Sml29623 void nxge_param_ioctl(p_nxge_t, queue_t *, mblk_t *, struct iocblk *); 9583859Sml29623 boolean_t nxge_nd_load(caddr_t *, char *, pfi_t, pfi_t, caddr_t); 9593859Sml29623 void nxge_nd_free(caddr_t *); 9603859Sml29623 int nxge_nd_getset(p_nxge_t, queue_t *, caddr_t, p_mblk_t); 9613859Sml29623 9626075Ssbehera nxge_status_t nxge_set_lb_normal(p_nxge_t); 9633859Sml29623 boolean_t nxge_set_lb(p_nxge_t, queue_t *, p_mblk_t); 9646439Sml29623 boolean_t nxge_param_link_update(p_nxge_t); 9656439Sml29623 int nxge_param_set_ip_opt(p_nxge_t, queue_t *, mblk_t *, char *, caddr_t); 9666439Sml29623 int nxge_dld_get_ip_opt(p_nxge_t, caddr_t); 9676439Sml29623 int nxge_param_rx_intr_pkts(p_nxge_t, queue_t *, 9686439Sml29623 mblk_t *, char *, caddr_t); 9696439Sml29623 int nxge_param_rx_intr_time(p_nxge_t, queue_t *, 9706439Sml29623 mblk_t *, char *, caddr_t); 9716439Sml29623 9723859Sml29623 9733859Sml29623 /* nxge_virtual.c */ 9743859Sml29623 nxge_status_t nxge_cntlops(dev_info_t *, nxge_ctl_enum_t, void *, void *); 9753859Sml29623 void nxge_common_lock_get(p_nxge_t); 9763859Sml29623 void nxge_common_lock_free(p_nxge_t); 9773859Sml29623 9783859Sml29623 nxge_status_t nxge_get_config_properties(p_nxge_t); 9793859Sml29623 void nxge_get_xcvr_properties(p_nxge_t); 9803859Sml29623 void nxge_init_vlan_config(p_nxge_t); 9813859Sml29623 void nxge_init_mac_config(p_nxge_t); 9823859Sml29623 9833859Sml29623 9843859Sml29623 void nxge_init_logical_devs(p_nxge_t); 9853859Sml29623 int nxge_init_ldg_intrs(p_nxge_t); 9863859Sml29623 9873859Sml29623 void nxge_set_ldgimgmt(p_nxge_t, uint32_t, boolean_t, 9883859Sml29623 uint32_t); 9893859Sml29623 9903859Sml29623 void nxge_init_fzc_txdma_channels(p_nxge_t); 9913859Sml29623 9923859Sml29623 nxge_status_t nxge_init_fzc_txdma_channel(p_nxge_t, uint16_t, 9933859Sml29623 p_tx_ring_t, p_tx_mbox_t); 9943859Sml29623 nxge_status_t nxge_init_fzc_txdma_port(p_nxge_t); 9953859Sml29623 9966495Sspeer nxge_status_t nxge_init_fzc_rxdma_channel(p_nxge_t, uint16_t); 9973859Sml29623 9983859Sml29623 nxge_status_t nxge_init_fzc_rx_common(p_nxge_t); 9993859Sml29623 nxge_status_t nxge_init_fzc_rxdma_port(p_nxge_t); 10003859Sml29623 10013859Sml29623 nxge_status_t nxge_init_fzc_rxdma_channel_pages(p_nxge_t, 10023859Sml29623 uint16_t, p_rx_rbr_ring_t); 10033859Sml29623 nxge_status_t nxge_init_fzc_rxdma_channel_red(p_nxge_t, 10043859Sml29623 uint16_t, p_rx_rcr_ring_t); 10053859Sml29623 10063859Sml29623 nxge_status_t nxge_init_fzc_rxdma_channel_clrlog(p_nxge_t, 10073859Sml29623 uint16_t, p_rx_rbr_ring_t); 10083859Sml29623 10093859Sml29623 10103859Sml29623 nxge_status_t nxge_init_fzc_txdma_channel_pages(p_nxge_t, 10113859Sml29623 uint16_t, p_tx_ring_t); 10123859Sml29623 10133859Sml29623 nxge_status_t nxge_init_fzc_txdma_channel_drr(p_nxge_t, uint16_t, 10143859Sml29623 p_tx_ring_t); 10153859Sml29623 10163859Sml29623 nxge_status_t nxge_init_fzc_txdma_port(p_nxge_t); 10173859Sml29623 10183859Sml29623 void nxge_init_fzc_ldg_num(p_nxge_t); 10193859Sml29623 void nxge_init_fzc_sys_int_data(p_nxge_t); 10203859Sml29623 void nxge_init_fzc_ldg_int_timer(p_nxge_t); 10213859Sml29623 nxge_status_t nxge_intr_mask_mgmt_set(p_nxge_t, boolean_t on); 10223859Sml29623 10233859Sml29623 /* MAC functions */ 10243859Sml29623 nxge_status_t nxge_mac_init(p_nxge_t); 10253859Sml29623 nxge_status_t nxge_link_init(p_nxge_t); 10263859Sml29623 nxge_status_t nxge_xif_init(p_nxge_t); 10273859Sml29623 nxge_status_t nxge_pcs_init(p_nxge_t); 10285553Smisaki nxge_status_t nxge_mac_ctrl_init(p_nxge_t); 10293859Sml29623 nxge_status_t nxge_serdes_init(p_nxge_t); 10305196Ssbehera nxge_status_t nxge_serdes_reset(p_nxge_t); 10314977Sraghus nxge_status_t nxge_xcvr_find(p_nxge_t); 10324977Sraghus nxge_status_t nxge_get_xcvr_type(p_nxge_t); 10334732Sdavemq nxge_status_t nxge_setup_xcvr_table(p_nxge_t); 10343859Sml29623 nxge_status_t nxge_xcvr_init(p_nxge_t); 10353859Sml29623 nxge_status_t nxge_tx_mac_init(p_nxge_t); 10363859Sml29623 nxge_status_t nxge_rx_mac_init(p_nxge_t); 10373859Sml29623 nxge_status_t nxge_tx_mac_enable(p_nxge_t); 10383859Sml29623 nxge_status_t nxge_tx_mac_disable(p_nxge_t); 10393859Sml29623 nxge_status_t nxge_rx_mac_enable(p_nxge_t); 10403859Sml29623 nxge_status_t nxge_rx_mac_disable(p_nxge_t); 10413859Sml29623 nxge_status_t nxge_tx_mac_reset(p_nxge_t); 10423859Sml29623 nxge_status_t nxge_rx_mac_reset(p_nxge_t); 10433859Sml29623 nxge_status_t nxge_link_intr(p_nxge_t, link_intr_enable_t); 10443859Sml29623 nxge_status_t nxge_mii_xcvr_init(p_nxge_t); 10455196Ssbehera nxge_status_t nxge_mii_xcvr_fiber_init(p_nxge_t); 10463859Sml29623 nxge_status_t nxge_mii_read(p_nxge_t, uint8_t, 10473859Sml29623 uint8_t, uint16_t *); 10483859Sml29623 nxge_status_t nxge_mii_write(p_nxge_t, uint8_t, 10493859Sml29623 uint8_t, uint16_t); 10503859Sml29623 nxge_status_t nxge_mdio_read(p_nxge_t, uint8_t, uint8_t, 10513859Sml29623 uint16_t, uint16_t *); 10523859Sml29623 nxge_status_t nxge_mdio_write(p_nxge_t, uint8_t, 10533859Sml29623 uint8_t, uint16_t, uint16_t); 10543859Sml29623 nxge_status_t nxge_mii_check(p_nxge_t, mii_bmsr_t, 10553859Sml29623 mii_bmsr_t, nxge_link_state_t *); 10566835Syc148097 void nxge_pcs_check(p_nxge_t, uint8_t portn, nxge_link_state_t *); 10573859Sml29623 nxge_status_t nxge_add_mcast_addr(p_nxge_t, struct ether_addr *); 10583859Sml29623 nxge_status_t nxge_del_mcast_addr(p_nxge_t, struct ether_addr *); 10593859Sml29623 nxge_status_t nxge_set_mac_addr(p_nxge_t, struct ether_addr *); 10603859Sml29623 nxge_status_t nxge_check_bcm8704_link(p_nxge_t, boolean_t *); 10616835Syc148097 nxge_status_t nxge_check_tn1010_link(p_nxge_t); 10623859Sml29623 void nxge_link_is_down(p_nxge_t); 10633859Sml29623 void nxge_link_is_up(p_nxge_t); 10643859Sml29623 nxge_status_t nxge_link_monitor(p_nxge_t, link_mon_enable_t); 10653859Sml29623 uint32_t crc32_mchash(p_ether_addr_t); 10663859Sml29623 nxge_status_t nxge_set_promisc(p_nxge_t, boolean_t); 10673859Sml29623 nxge_status_t nxge_mac_handle_sys_errors(p_nxge_t); 10683859Sml29623 nxge_status_t nxge_10g_link_led_on(p_nxge_t); 10693859Sml29623 nxge_status_t nxge_10g_link_led_off(p_nxge_t); 10704732Sdavemq nxge_status_t nxge_scan_ports_phy(p_nxge_t, p_nxge_hw_list_t); 10714185Sspeer boolean_t nxge_is_valid_local_mac(ether_addr_st); 10726439Sml29623 nxge_status_t nxge_mac_set_framesize(p_nxge_t); 10733859Sml29623 10743859Sml29623 /* espc (sprom) prototypes */ 10753859Sml29623 nxge_status_t nxge_espc_mac_addrs_get(p_nxge_t); 10763859Sml29623 nxge_status_t nxge_espc_num_macs_get(p_nxge_t, uint8_t *); 10773859Sml29623 nxge_status_t nxge_espc_num_ports_get(p_nxge_t); 10783859Sml29623 nxge_status_t nxge_espc_phy_type_get(p_nxge_t); 10794732Sdavemq nxge_status_t nxge_espc_verify_chksum(p_nxge_t); 10804185Sspeer void nxge_espc_get_next_mac_addr(uint8_t *, uint8_t, struct ether_addr *); 10814977Sraghus void nxge_vpd_info_get(p_nxge_t); 10823859Sml29623 10833859Sml29623 10843859Sml29623 void nxge_debug_msg(p_nxge_t, uint64_t, char *, ...); 10854977Sraghus int nxge_get_nports(p_nxge_t); 10863859Sml29623 10876495Sspeer void nxge_free_buf(buf_alloc_type_t, uint64_t, uint32_t); 10886495Sspeer 10898275SEric Cheng #if defined(sun4v) 10908275SEric Cheng 10913859Sml29623 uint64_t hv_niu_rx_logical_page_conf(uint64_t, uint64_t, 10923859Sml29623 uint64_t, uint64_t); 10933859Sml29623 #pragma weak hv_niu_rx_logical_page_conf 10943859Sml29623 10953859Sml29623 uint64_t hv_niu_rx_logical_page_info(uint64_t, uint64_t, 10963859Sml29623 uint64_t *, uint64_t *); 10973859Sml29623 #pragma weak hv_niu_rx_logical_page_info 10983859Sml29623 10993859Sml29623 uint64_t hv_niu_tx_logical_page_conf(uint64_t, uint64_t, 11003859Sml29623 uint64_t, uint64_t); 11013859Sml29623 #pragma weak hv_niu_tx_logical_page_conf 11023859Sml29623 11033859Sml29623 uint64_t hv_niu_tx_logical_page_info(uint64_t, uint64_t, 11043859Sml29623 uint64_t *, uint64_t *); 11053859Sml29623 #pragma weak hv_niu_tx_logical_page_info 11063859Sml29623 11076495Sspeer uint64_t hv_niu_vr_assign(uint64_t vridx, uint64_t ldc_id, uint32_t *cookie); 11086495Sspeer #pragma weak hv_niu_vr_assign 11096495Sspeer 11106495Sspeer uint64_t hv_niu_vr_unassign(uint32_t cookie); 11116495Sspeer #pragma weak hv_niu_vr_unassign 11126495Sspeer 11136495Sspeer uint64_t hv_niu_vr_getinfo(uint32_t cookie, uint64_t *real_start, 11146495Sspeer uint64_t *size); 11156495Sspeer #pragma weak hv_niu_vr_getinfo 11166495Sspeer 11176495Sspeer uint64_t hv_niu_vr_get_rxmap(uint32_t cookie, uint64_t *dma_map); 11186495Sspeer #pragma weak hv_niu_vr_get_rxmap 11196495Sspeer 11206495Sspeer uint64_t hv_niu_vr_get_txmap(uint32_t cookie, uint64_t *dma_map); 11216495Sspeer #pragma weak hv_niu_vr_get_txmap 11226495Sspeer 11236495Sspeer uint64_t hv_niu_rx_dma_assign(uint32_t cookie, uint64_t chidx, 11246495Sspeer uint64_t *vchidx); 11256495Sspeer #pragma weak hv_niu_rx_dma_assign 11266495Sspeer 11276495Sspeer uint64_t hv_niu_rx_dma_unassign(uint32_t cookie, uint64_t chidx); 11286495Sspeer #pragma weak hv_niu_rx_dma_unassign 11296495Sspeer 11306495Sspeer uint64_t hv_niu_tx_dma_assign(uint32_t cookie, uint64_t chidx, 11316495Sspeer uint64_t *vchidx); 11326495Sspeer #pragma weak hv_niu_tx_dma_assign 11336495Sspeer 11346495Sspeer uint64_t hv_niu_tx_dma_unassign(uint32_t cookie, uint64_t chidx); 11356495Sspeer #pragma weak hv_niu_tx_dma_unassign 11366495Sspeer 11376495Sspeer uint64_t hv_niu_vrrx_logical_page_conf(uint32_t cookie, uint64_t chidx, 11386495Sspeer uint64_t pgidx, uint64_t raddr, uint64_t size); 11396495Sspeer #pragma weak hv_niu_vrrx_logical_page_conf 11406495Sspeer 11416495Sspeer uint64_t hv_niu_vrrx_logical_page_info(uint32_t cookie, uint64_t chidx, 11426495Sspeer uint64_t pgidx, uint64_t *raddr, uint64_t *size); 11436495Sspeer #pragma weak hv_niu_vrrx_logical_page_info 11446495Sspeer 11456495Sspeer uint64_t hv_niu_vrtx_logical_page_conf(uint32_t cookie, uint64_t chidx, 11466495Sspeer uint64_t pgidx, uint64_t raddr, uint64_t size); 11476495Sspeer #pragma weak hv_niu_vrtx_logical_page_conf 11486495Sspeer 11496495Sspeer uint64_t hv_niu_vrtx_logical_page_info(uint32_t cookie, uint64_t chidx, 11506495Sspeer uint64_t pgidx, uint64_t *raddr, uint64_t *size); 11516495Sspeer #pragma weak hv_niu_vrtx_logical_page_info 11526495Sspeer 115311304SJanie.Lu@Sun.COM uint64_t hv_niu_cfgh_rx_logical_page_conf(uint64_t, uint64_t, uint64_t, 115411304SJanie.Lu@Sun.COM uint64_t, uint64_t); 1155*11917Stc99174@train #pragma weak hv_niu_cfgh_rx_logical_page_conf 115611304SJanie.Lu@Sun.COM 115711304SJanie.Lu@Sun.COM uint64_t hv_niu_cfgh_rx_logical_page_info(uint64_t, uint64_t, uint64_t, 115811304SJanie.Lu@Sun.COM uint64_t *, uint64_t *); 1159*11917Stc99174@train #pragma weak hv_niu_cfgh_rx_logical_page_info 116011304SJanie.Lu@Sun.COM 116111304SJanie.Lu@Sun.COM uint64_t hv_niu_cfgh_tx_logical_page_conf(uint64_t, uint64_t, uint64_t, 116211304SJanie.Lu@Sun.COM uint64_t, uint64_t); 1163*11917Stc99174@train #pragma weak hv_niu_cfgh_tx_logical_page_conf 116411304SJanie.Lu@Sun.COM 116511304SJanie.Lu@Sun.COM uint64_t hv_niu_cfgh_tx_logical_page_info(uint64_t, uint64_t, uint64_t, 116611304SJanie.Lu@Sun.COM uint64_t *, uint64_t *); 1167*11917Stc99174@train #pragma weak hv_niu_cfgh_tx_logical_page_info 116811304SJanie.Lu@Sun.COM 116911304SJanie.Lu@Sun.COM uint64_t hv_niu_cfgh_vr_assign(uint64_t, uint64_t vridx, uint64_t ldc_id, 117011304SJanie.Lu@Sun.COM uint32_t *cookie); 1171*11917Stc99174@train #pragma weak hv_niu_cfgh_vr_assign 117211304SJanie.Lu@Sun.COM 11736495Sspeer // 11746495Sspeer // NIU-specific interrupt API 11756495Sspeer // 11766495Sspeer uint64_t hv_niu_vrrx_getinfo(uint32_t cookie, uint64_t v_chidx, 11776495Sspeer uint64_t *group, uint64_t *logdev); 11786495Sspeer #pragma weak hv_niu_vrrx_getinfo 11796495Sspeer 11806495Sspeer uint64_t hv_niu_vrtx_getinfo(uint32_t cookie, uint64_t v_chidx, 11816495Sspeer uint64_t *group, uint64_t *logdev); 11826495Sspeer #pragma weak hv_niu_vrtx_getinfo 11836495Sspeer 11846495Sspeer uint64_t hv_niu_vrrx_to_logical_dev(uint32_t cookie, uint64_t v_chidx, 11856495Sspeer uint64_t *ldn); 11866495Sspeer #pragma weak hv_niu_vrrx_to_logical_dev 11876495Sspeer 11886495Sspeer uint64_t hv_niu_vrtx_to_logical_dev(uint32_t cookie, uint64_t v_chidx, 11896495Sspeer uint64_t *ldn); 11906495Sspeer #pragma weak hv_niu_vrtx_to_logical_dev 11916495Sspeer 11928275SEric Cheng #endif /* defined(sun4v) */ 11938275SEric Cheng 11943859Sml29623 #ifdef NXGE_DEBUG 11953859Sml29623 char *nxge_dump_packet(char *, int); 11963859Sml29623 #endif 11973859Sml29623 11983859Sml29623 #endif /* !_ASM */ 11993859Sml29623 12003859Sml29623 #ifdef __cplusplus 12013859Sml29623 } 12023859Sml29623 #endif 12033859Sml29623 12043859Sml29623 #endif /* _SYS_NXGE_NXGE_IMPL_H */ 1205