1*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 2*9a5557fdSlucy wang - Sun Microsystems - Beijing China * CDDL HEADER START 3*9a5557fdSlucy wang - Sun Microsystems - Beijing China * 4*9a5557fdSlucy wang - Sun Microsystems - Beijing China * The contents of this file are subject to the terms of the 5*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Common Development and Distribution License (the "License"). 6*9a5557fdSlucy wang - Sun Microsystems - Beijing China * You may not use this file except in compliance with the License. 7*9a5557fdSlucy wang - Sun Microsystems - Beijing China * 8*9a5557fdSlucy wang - Sun Microsystems - Beijing China * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*9a5557fdSlucy wang - Sun Microsystems - Beijing China * or http://www.opensolaris.org/os/licensing. 10*9a5557fdSlucy wang - Sun Microsystems - Beijing China * See the License for the specific language governing permissions 11*9a5557fdSlucy wang - Sun Microsystems - Beijing China * and limitations under the License. 12*9a5557fdSlucy wang - Sun Microsystems - Beijing China * 13*9a5557fdSlucy wang - Sun Microsystems - Beijing China * When distributing Covered Code, include this CDDL HEADER in each 14*9a5557fdSlucy wang - Sun Microsystems - Beijing China * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*9a5557fdSlucy wang - Sun Microsystems - Beijing China * If applicable, add the following below this CDDL HEADER, with the 16*9a5557fdSlucy wang - Sun Microsystems - Beijing China * fields enclosed by brackets "[]" replaced with your own identifying 17*9a5557fdSlucy wang - Sun Microsystems - Beijing China * information: Portions Copyright [yyyy] [name of copyright owner] 18*9a5557fdSlucy wang - Sun Microsystems - Beijing China * 19*9a5557fdSlucy wang - Sun Microsystems - Beijing China * CDDL HEADER END 20*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 21*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 22*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Copyright 2008 NetXen, Inc. All rights reserved. 23*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Use is subject to license terms. 24*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 25*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 26*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 27*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Use is subject to license terms. 28*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 29*9a5557fdSlucy wang - Sun Microsystems - Beijing China #ifndef _UNM_NIC_ 30*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define _UNM_NIC_ 31*9a5557fdSlucy wang - Sun Microsystems - Beijing China 32*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/inttypes.h> 33*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/rwlock.h> 34*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/mutex.h> 35*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/ddi.h> 36*9a5557fdSlucy wang - Sun Microsystems - Beijing China 37*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/sunddi.h> 38*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/types.h> 39*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/stream.h> 40*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/strsun.h> 41*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/strsubr.h> 42*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/dlpi.h> 43*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/devops.h> 44*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/stat.h> 45*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/pci.h> 46*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/note.h> 47*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/modctl.h> 48*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/kstat.h> 49*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/ethernet.h> 50*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/errno.h> 51*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <netinet/ip6.h> 52*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <inet/common.h> 53*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/pattr.h> 54*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <inet/mi.h> 55*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <inet/nd.h> 56*9a5557fdSlucy wang - Sun Microsystems - Beijing China 57*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/mac.h> 58*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/mac_ether.h> 59*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include <sys/miiregs.h> /* by fjlite out of intel */ 60*9a5557fdSlucy wang - Sun Microsystems - Beijing China 61*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_nic_hw.h" 62*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "nic_cmn.h" 63*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_inc.h" /* For MAX_RCV_CTX */ 64*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_brdcfg.h" 65*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_version.h" 66*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "nic_phan_reg.h" 67*9a5557fdSlucy wang - Sun Microsystems - Beijing China #include "unm_nic_ioctl.h" 68*9a5557fdSlucy wang - Sun Microsystems - Beijing China 69*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define MAX_ADDR_LEN 6 70*9a5557fdSlucy wang - Sun Microsystems - Beijing China 71*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define ADDR_IN_WINDOW1(off) \ 72*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((off > UNM_CRB_PCIX_HOST2) && (off < UNM_CRB_MAX)) ? 1 : 0 73*9a5557fdSlucy wang - Sun Microsystems - Beijing China 74*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef unsigned long uptr_t; 75*9a5557fdSlucy wang - Sun Microsystems - Beijing China 76*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define FIRST_PAGE_GROUP_START 0 77*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define FIRST_PAGE_GROUP_END 0x100000 78*9a5557fdSlucy wang - Sun Microsystems - Beijing China 79*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define SECOND_PAGE_GROUP_START 0x6000000 80*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define SECOND_PAGE_GROUP_END 0x68BC000 81*9a5557fdSlucy wang - Sun Microsystems - Beijing China 82*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define THIRD_PAGE_GROUP_START 0x70E4000 83*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define THIRD_PAGE_GROUP_END 0x8000000 84*9a5557fdSlucy wang - Sun Microsystems - Beijing China 85*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define FIRST_PAGE_GROUP_SIZE FIRST_PAGE_GROUP_END - FIRST_PAGE_GROUP_START 86*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define SECOND_PAGE_GROUP_SIZE SECOND_PAGE_GROUP_END - SECOND_PAGE_GROUP_START 87*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define THIRD_PAGE_GROUP_SIZE THIRD_PAGE_GROUP_END - THIRD_PAGE_GROUP_START 88*9a5557fdSlucy wang - Sun Microsystems - Beijing China 89*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 90*9a5557fdSlucy wang - Sun Microsystems - Beijing China * normalize a 64MB crb address to 32MB PCI window 91*9a5557fdSlucy wang - Sun Microsystems - Beijing China * To use CRB_NORMALIZE, window _must_ be set to 1 92*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 93*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define CRB_NORMAL(reg) \ 94*9a5557fdSlucy wang - Sun Microsystems - Beijing China (reg) - UNM_CRB_PCIX_HOST2 + UNM_CRB_PCIX_HOST 95*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define CRB_NORMALIZE(adapter, reg) \ 96*9a5557fdSlucy wang - Sun Microsystems - Beijing China (void *)(unsigned long)(pci_base_offset(adapter, CRB_NORMAL(reg))) 97*9a5557fdSlucy wang - Sun Microsystems - Beijing China 98*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define DB_NORMALIZE(adapter, off) \ 99*9a5557fdSlucy wang - Sun Microsystems - Beijing China (void *)((unsigned long)adapter->ahw.db_base + (off)) 100*9a5557fdSlucy wang - Sun Microsystems - Beijing China 101*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define find_diff_among(a, b, range) \ 102*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((a) < (b)?((b)-(a)):((b)+(range)-(a))) 103*9a5557fdSlucy wang - Sun Microsystems - Beijing China 104*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define __FUNCTION__ __func__ 105*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define nx_msleep(_msecs_) delay(drv_usectohz(_msecs_ * 1000)) 106*9a5557fdSlucy wang - Sun Microsystems - Beijing China 107*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define HOST_TO_LE_64 LE_64 108*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define HOST_TO_LE_32 LE_32 109*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define LE_TO_HOST_32 LE_32 110*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define HOST_TO_LE_16 LE_16 111*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define LE_TO_HOST_16 LE_16 112*9a5557fdSlucy wang - Sun Microsystems - Beijing China 113*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define dbwritel(DATA, ADDRESS) \ 114*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_put32(adapter->db_handle, (uint32_t *)(ADDRESS), (DATA)) 115*9a5557fdSlucy wang - Sun Microsystems - Beijing China 116*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 117*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Following macros require the mapped addresses to access 118*9a5557fdSlucy wang - Sun Microsystems - Beijing China * the Phantom memory. 119*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 120*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_PCI_READ_8(ADDRESS) \ 121*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_get8(adapter->regs_handle, (uint8_t *)(ADDRESS)) 122*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_PCI_READ_16(ADDRESS) \ 123*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_get16(adapter->regs_handle, (uint16_t *)(ADDRESS)) 124*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_PCI_READ_32(ADDRESS) \ 125*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_get32(adapter->regs_handle, (uint32_t *)(ADDRESS)) 126*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_PCI_READ_64(ADDRESS) \ 127*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_get64(adapter->regs_handle, (uint64_t *)(ADDRESS)) 128*9a5557fdSlucy wang - Sun Microsystems - Beijing China 129*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_PCI_WRITE_8(DATA, ADDRESS) \ 130*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_put8(adapter->regs_handle, (uint8_t *)(ADDRESS), (DATA)) 131*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_PCI_WRITE_16(DATA, ADDRESS) \ 132*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_put16(adapter->regs_handle, (uint16_t *)(ADDRESS), (DATA)) 133*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_PCI_WRITE_32(DATA, ADDRESS) \ 134*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_put32(adapter->regs_handle, (uint32_t *)(ADDRESS), (DATA)) 135*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_PCI_WRITE_64(DATA, ADDRESS) \ 136*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_put64(adapter->regs_handle, (uint64_t *)(ADDRESS), (DATA)) 137*9a5557fdSlucy wang - Sun Microsystems - Beijing China 138*9a5557fdSlucy wang - Sun Microsystems - Beijing China #ifdef DEBUG_LEVEL 139*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define DPRINTF(n, args) if (DEBUG_LEVEL > (n)) cmn_err args; 140*9a5557fdSlucy wang - Sun Microsystems - Beijing China #else 141*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define DPRINTF(n, args) 142*9a5557fdSlucy wang - Sun Microsystems - Beijing China #endif 143*9a5557fdSlucy wang - Sun Microsystems - Beijing China 144*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_SPIN_LOCK(_lp_) mutex_enter((_lp_)) 145*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_SPIN_UNLOCK(_lp_) mutex_exit((_lp_)) 146*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_SPIN_LOCK_ISR(_lp_) mutex_enter((_lp_)) 147*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_SPIN_UNLOCK_ISR(_lp_) mutex_exit((_lp_)) 148*9a5557fdSlucy wang - Sun Microsystems - Beijing China 149*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_WRITE_LOCK(_lp_) rw_enter((_lp_), RW_WRITER) 150*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_WRITE_UNLOCK(_lp_) rw_exit((_lp_)) 151*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_READ_LOCK(_lp_) rw_enter((_lp_), RW_READER) 152*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_READ_UNLOCK(_lp_) rw_exit((_lp_)) 153*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_WRITE_LOCK_IRQS(_lp_, _fl_) rw_enter((_lp_), RW_WRITER) 154*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_WRITE_UNLOCK_IRQR(_lp_, _fl_) rw_exit((_lp_)) 155*9a5557fdSlucy wang - Sun Microsystems - Beijing China 156*9a5557fdSlucy wang - Sun Microsystems - Beijing China extern char unm_nic_driver_name[]; 157*9a5557fdSlucy wang - Sun Microsystems - Beijing China extern int verbmsg; 158*9a5557fdSlucy wang - Sun Microsystems - Beijing China 159*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_dmah_node { 160*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_dmah_node *next; 161*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_handle_t dmahdl; 162*9a5557fdSlucy wang - Sun Microsystems - Beijing China }unm_dmah_node_t; 163*9a5557fdSlucy wang - Sun Microsystems - Beijing China 164*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct dma_area { 165*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_acc_handle_t acc_hdl; /* handle for memory */ 166*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_handle_t dma_hdl; /* DMA handle */ 167*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t ncookies; 168*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 dma_addr; 169*9a5557fdSlucy wang - Sun Microsystems - Beijing China void *vaddr; 170*9a5557fdSlucy wang - Sun Microsystems - Beijing China } dma_area_t; 171*9a5557fdSlucy wang - Sun Microsystems - Beijing China 172*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_cmd_buffer { 173*9a5557fdSlucy wang - Sun Microsystems - Beijing China dma_area_t dma_area; 174*9a5557fdSlucy wang - Sun Microsystems - Beijing China mblk_t *msg; 175*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_dmah_node_t *head, *tail; 176*9a5557fdSlucy wang - Sun Microsystems - Beijing China }; 177*9a5557fdSlucy wang - Sun Microsystems - Beijing China 178*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct pkt_info { 179*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t total_len; 180*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t mblk_no; 181*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t etype; 182*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t mac_hlen; 183*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t ip_hlen; 184*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t l4_proto; 185*9a5557fdSlucy wang - Sun Microsystems - Beijing China } pktinfo_t; 186*9a5557fdSlucy wang - Sun Microsystems - Beijing China 187*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_rcv_desc_context_s unm_rcv_desc_ctx_t; 188*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_adapter_s unm_adapter; 189*9a5557fdSlucy wang - Sun Microsystems - Beijing China 190*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_rx_buffer { 191*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_rx_buffer *next; 192*9a5557fdSlucy wang - Sun Microsystems - Beijing China dma_area_t dma_info; 193*9a5557fdSlucy wang - Sun Microsystems - Beijing China frtn_t rx_recycle; /* recycle function */ 194*9a5557fdSlucy wang - Sun Microsystems - Beijing China mblk_t *mp; 195*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_rcv_desc_ctx_t *rcv_desc; 196*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_adapter *adapter; 197*9a5557fdSlucy wang - Sun Microsystems - Beijing China }unm_rx_buffer_t; 198*9a5557fdSlucy wang - Sun Microsystems - Beijing China 199*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Board types */ 200*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_GBE 0x01 201*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_XGBE 0x02 202*9a5557fdSlucy wang - Sun Microsystems - Beijing China 203*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 204*9a5557fdSlucy wang - Sun Microsystems - Beijing China * One hardware_context{} per adapter 205*9a5557fdSlucy wang - Sun Microsystems - Beijing China * contains interrupt info as well shared hardware info. 206*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 207*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct _hardware_context { 208*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long pci_base0; 209*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long pci_len0; 210*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long pci_base1; 211*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long pci_len1; 212*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long pci_base2; 213*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long pci_len2; 214*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long first_page_group_end; 215*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long first_page_group_start; 216*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint8_t revision_id; 217*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint8_t cut_through; 218*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t board_type; 219*9a5557fdSlucy wang - Sun Microsystems - Beijing China int pci_func; 220*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t max_ports; 221*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_board_info_t boardcfg; 222*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t linkup; 223*9a5557fdSlucy wang - Sun Microsystems - Beijing China 224*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_s *adapter; 225*9a5557fdSlucy wang - Sun Microsystems - Beijing China cmdDescType0_t *cmdDescHead; 226*9a5557fdSlucy wang - Sun Microsystems - Beijing China 227*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t cmdProducer; 228*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t cmdConsumer; 229*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t rcvFlag; 230*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t crb_base; 231*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long db_base; /* base of mapped db memory */ 232*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long db_len; /* length of mapped db memory */ 233*9a5557fdSlucy wang - Sun Microsystems - Beijing China 234*9a5557fdSlucy wang - Sun Microsystems - Beijing China 235*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t cmdDesc_physAddr; 236*9a5557fdSlucy wang - Sun Microsystems - Beijing China int qdr_sn_window, ddr_mn_window; 237*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long mn_win_crb, ms_win_crb; 238*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_handle_t cmd_desc_dma_handle; 239*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_acc_handle_t cmd_desc_acc_handle; 240*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_cookie_t cmd_desc_dma_cookie; 241*9a5557fdSlucy wang - Sun Microsystems - Beijing China } hardware_context, *phardware_context; 242*9a5557fdSlucy wang - Sun Microsystems - Beijing China 243*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define NX_CT_DEFAULT_RX_BUF_LEN 2048 244*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define MTU_SIZE 1500 245*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define MAX_COOKIES_PER_CMD 16 246*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_DB_MAPSIZE_BYTES 0x1000 247*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define EXTRA_HANDLES 512 248*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_TX_BCOPY_THRESHOLD 128 249*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_RX_BCOPY_THRESHOLD 128 250*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define NX_MIN_DRIVER_RDS_SIZE 64 251*9a5557fdSlucy wang - Sun Microsystems - Beijing China 252*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_pauseparam { 253*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t rx_pause; 254*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t tx_pause; 255*9a5557fdSlucy wang - Sun Microsystems - Beijing China } unm_pauseparam_t; 256*9a5557fdSlucy wang - Sun Microsystems - Beijing China 257*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 258*9a5557fdSlucy wang - Sun Microsystems - Beijing China * The driver supports the NDD ioctls ND_GET/ND_SET, and the loopback 259*9a5557fdSlucy wang - Sun Microsystems - Beijing China * ioctls LB_GET_INFO_SIZE/LB_GET_INFO/LB_GET_MODE/LB_SET_MODE 260*9a5557fdSlucy wang - Sun Microsystems - Beijing China * 261*9a5557fdSlucy wang - Sun Microsystems - Beijing China * These are the values to use with LD_SET_MODE. 262*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 263*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_LOOP_NONE 0 264*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_LOOP_INTERNAL_PHY 1 265*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_LOOP_INTERNAL_MAC 2 266*9a5557fdSlucy wang - Sun Microsystems - Beijing China 267*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 268*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Named Data (ND) Parameter Management Structure 269*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 270*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct { 271*9a5557fdSlucy wang - Sun Microsystems - Beijing China int ndp_info; 272*9a5557fdSlucy wang - Sun Microsystems - Beijing China int ndp_min; 273*9a5557fdSlucy wang - Sun Microsystems - Beijing China int ndp_max; 274*9a5557fdSlucy wang - Sun Microsystems - Beijing China int ndp_val; 275*9a5557fdSlucy wang - Sun Microsystems - Beijing China char *ndp_name; 276*9a5557fdSlucy wang - Sun Microsystems - Beijing China } nd_param_t; /* 0x18 (24) bytes */ 277*9a5557fdSlucy wang - Sun Microsystems - Beijing China 278*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 279*9a5557fdSlucy wang - Sun Microsystems - Beijing China * NDD parameter indexes, divided into: 280*9a5557fdSlucy wang - Sun Microsystems - Beijing China * 281*9a5557fdSlucy wang - Sun Microsystems - Beijing China * read-only parameters describing the hardware's capabilities 282*9a5557fdSlucy wang - Sun Microsystems - Beijing China * read-write parameters controlling the advertised capabilities 283*9a5557fdSlucy wang - Sun Microsystems - Beijing China * read-only parameters describing the partner's capabilities 284*9a5557fdSlucy wang - Sun Microsystems - Beijing China * read-only parameters describing the link state 285*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 286*9a5557fdSlucy wang - Sun Microsystems - Beijing China enum { 287*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_AUTONEG_CAP = 0, 288*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_PAUSE_CAP, 289*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ASYM_PAUSE_CAP, 290*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_10000FDX_CAP, 291*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_1000FDX_CAP, 292*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_1000HDX_CAP, 293*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_100T4_CAP, 294*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_100FDX_CAP, 295*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_100HDX_CAP, 296*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_10FDX_CAP, 297*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_10HDX_CAP, 298*9a5557fdSlucy wang - Sun Microsystems - Beijing China 299*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_AUTONEG_CAP, 300*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_PAUSE_CAP, 301*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_ASYM_PAUSE_CAP, 302*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_10000FDX_CAP, 303*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_1000FDX_CAP, 304*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_1000HDX_CAP, 305*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_100T4_CAP, 306*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_100FDX_CAP, 307*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_100HDX_CAP, 308*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_10FDX_CAP, 309*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_ADV_10HDX_CAP, 310*9a5557fdSlucy wang - Sun Microsystems - Beijing China 311*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_LINK_STATUS, 312*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_LINK_SPEED, 313*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_LINK_DUPLEX, 314*9a5557fdSlucy wang - Sun Microsystems - Beijing China 315*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_LOOP_MODE, 316*9a5557fdSlucy wang - Sun Microsystems - Beijing China 317*9a5557fdSlucy wang - Sun Microsystems - Beijing China PARAM_COUNT 318*9a5557fdSlucy wang - Sun Microsystems - Beijing China }; 319*9a5557fdSlucy wang - Sun Microsystems - Beijing China 320*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_stats { 321*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t rcvdbadmsg; 322*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t xmitcalled; 323*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t xmitedframes; 324*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t xmitfinished; 325*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t badmsglen; 326*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t nocmddescriptor; 327*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t polled; 328*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t uphappy; 329*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t updropped; 330*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t uplcong; 331*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t uphcong; 332*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t upmcong; 333*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t updunno; 334*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t msgfreed; 335*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t txdropped; 336*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t txnullmsg; 337*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t csummed; 338*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t no_rcv; 339*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t rxbytes; 340*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t txbytes; 341*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t ints; 342*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t desballocfailed; 343*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t txcopyed; 344*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t txmapped; 345*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t outoftxdmahdl; 346*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t outofcmddesc; 347*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t rxcopyed; 348*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t rxmapped; 349*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t outofrxbuf; 350*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t promiscmode; 351*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t rxbufshort; 352*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t allocbfailed; 353*9a5557fdSlucy wang - Sun Microsystems - Beijing China }; 354*9a5557fdSlucy wang - Sun Microsystems - Beijing China 355*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* descriptor types */ 356*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define RCV_RING_STD RCV_DESC_NORMAL 357*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define RCV_RING_JUMBO RCV_DESC_JUMBO 358*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define RCV_RING_LRO RCV_DESC_LRO 359*9a5557fdSlucy wang - Sun Microsystems - Beijing China 360*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 361*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Rcv Descriptor Context. One such per Rcv Descriptor. There may 362*9a5557fdSlucy wang - Sun Microsystems - Beijing China * be one Rcv Descriptor for normal packets, one for jumbo, 363*9a5557fdSlucy wang - Sun Microsystems - Beijing China * one for LRO and may be expanded. 364*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 365*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_rcv_desc_context_s { 366*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t producer; 367*9a5557fdSlucy wang - Sun Microsystems - Beijing China 368*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t phys_addr; 369*9a5557fdSlucy wang - Sun Microsystems - Beijing China dev_info_t *phys_pdev; 370*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* address of rx ring in Phantom */ 371*9a5557fdSlucy wang - Sun Microsystems - Beijing China rcvDesc_t *desc_head; 372*9a5557fdSlucy wang - Sun Microsystems - Beijing China 373*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t MaxRxDescCount; 374*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t rx_desc_handled; 375*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t rx_buf_card; 376*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t rx_buf_total; 377*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t rx_buf_free; 378*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t rx_buf_recycle; 379*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_rx_buffer_t *rx_buf_pool; 380*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_rx_buffer_t *pool_list; 381*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_rx_buffer_t *recycle_list; 382*9a5557fdSlucy wang - Sun Microsystems - Beijing China kmutex_t pool_lock[1]; /* buffer pool lock */ 383*9a5557fdSlucy wang - Sun Microsystems - Beijing China kmutex_t recycle_lock[1]; /* buffer recycle lock */ 384*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* size of the receive buf */ 385*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t buf_size; 386*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* rx buffers for receive */ 387*9a5557fdSlucy wang - Sun Microsystems - Beijing China 388*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_handle_t rx_desc_dma_handle; 389*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_acc_handle_t rx_desc_acc_handle; 390*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_cookie_t rx_desc_dma_cookie; 391*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t host_rx_producer; 392*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t dma_size; 393*9a5557fdSlucy wang - Sun Microsystems - Beijing China }; 394*9a5557fdSlucy wang - Sun Microsystems - Beijing China 395*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 396*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Receive context. There is one such structure per instance of the 397*9a5557fdSlucy wang - Sun Microsystems - Beijing China * receive processing. Any state information that is relevant to 398*9a5557fdSlucy wang - Sun Microsystems - Beijing China * the receive, and is must be in this structure. The global data may be 399*9a5557fdSlucy wang - Sun Microsystems - Beijing China * present elsewhere. 400*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 401*9a5557fdSlucy wang - Sun Microsystems - Beijing China typedef struct unm_recv_context_s { 402*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_rcv_desc_ctx_t rcv_desc[NUM_RCV_DESC_RINGS]; 403*9a5557fdSlucy wang - Sun Microsystems - Beijing China 404*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t statusRxConsumer; 405*9a5557fdSlucy wang - Sun Microsystems - Beijing China 406*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t rcvStatusDesc_physAddr; 407*9a5557fdSlucy wang - Sun Microsystems - Beijing China statusDesc_t *rcvStatusDescHead; 408*9a5557fdSlucy wang - Sun Microsystems - Beijing China 409*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_handle_t status_desc_dma_handle; 410*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_acc_handle_t status_desc_acc_handle; 411*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_cookie_t status_desc_dma_cookie; 412*9a5557fdSlucy wang - Sun Microsystems - Beijing China 413*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t state, host_sds_consumer; 414*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t context_id, virt_port; 415*9a5557fdSlucy wang - Sun Microsystems - Beijing China } unm_recv_context_t; 416*9a5557fdSlucy wang - Sun Microsystems - Beijing China 417*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_MSI_ENABLED 0x02 418*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_NIC_MSIX_ENABLED 0x04 419*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_IS_MSI_FAMILY(ADAPTER) \ 420*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((ADAPTER)->flags & (UNM_NIC_MSI_ENABLED | UNM_NIC_MSIX_ENABLED)) 421*9a5557fdSlucy wang - Sun Microsystems - Beijing China 422*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define NX_USE_MSIX 423*9a5557fdSlucy wang - Sun Microsystems - Beijing China 424*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* msix defines */ 425*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define MSIX_ENTRIES_PER_ADAPTER 8 426*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_MSIX_TBL_SPACE 8192 427*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_PCI_REG_MSIX_TBL 0x44 428*9a5557fdSlucy wang - Sun Microsystems - Beijing China 429*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 430*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Bug: word or char write on MSI-X capcabilities register (0x40) in PCI config 431*9a5557fdSlucy wang - Sun Microsystems - Beijing China * space has no effect on register values. Need to write dword. 432*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 433*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_HWBUG_8_WORKAROUND 434*9a5557fdSlucy wang - Sun Microsystems - Beijing China 435*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 436*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Bug: Can not reset bit 32 (msix enable bit) on MSI-X capcabilities 437*9a5557fdSlucy wang - Sun Microsystems - Beijing China * register (0x40) independently. 438*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Need to write 0x0 (zero) to MSI-X capcabilities register in order to reset 439*9a5557fdSlucy wang - Sun Microsystems - Beijing China * msix enable bit. On writing zero rest of the bits are not touched. 440*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 441*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_HWBUG_9_WORKAROUND 442*9a5557fdSlucy wang - Sun Microsystems - Beijing China 443*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_MC_COUNT 38 /* == ((UNM_ADDR_L2LU_COUNT-1)/4) -2 */ 444*9a5557fdSlucy wang - Sun Microsystems - Beijing China 445*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Following structure is for specific port information */ 446*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_s { 447*9a5557fdSlucy wang - Sun Microsystems - Beijing China hardware_context ahw; 448*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint8_t id[32]; 449*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t portnum; 450*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t physical_port; 451*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t link_speed; 452*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t link_duplex; 453*9a5557fdSlucy wang - Sun Microsystems - Beijing China 454*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_stats stats; 455*9a5557fdSlucy wang - Sun Microsystems - Beijing China int rx_csum; 456*9a5557fdSlucy wang - Sun Microsystems - Beijing China int status; 457*9a5557fdSlucy wang - Sun Microsystems - Beijing China kmutex_t stats_lock; 458*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned char mac_addr[MAX_ADDR_LEN]; 459*9a5557fdSlucy wang - Sun Microsystems - Beijing China int mtu; /* active mtu */ 460*9a5557fdSlucy wang - Sun Microsystems - Beijing China int maxmtu; /* max possible mtu value */ 461*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t promisc; 462*9a5557fdSlucy wang - Sun Microsystems - Beijing China 463*9a5557fdSlucy wang - Sun Microsystems - Beijing China mac_resource_handle_t mac_rx_ring_ha; 464*9a5557fdSlucy wang - Sun Microsystems - Beijing China mac_handle_t mach; 465*9a5557fdSlucy wang - Sun Microsystems - Beijing China int flags; 466*9a5557fdSlucy wang - Sun Microsystems - Beijing China 467*9a5557fdSlucy wang - Sun Microsystems - Beijing China int instance; 468*9a5557fdSlucy wang - Sun Microsystems - Beijing China dev_info_t *dip; 469*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_acc_handle_t pci_cfg_handle; 470*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_acc_handle_t regs_handle; 471*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_attr_t gc_dma_attr_desc; 472*9a5557fdSlucy wang - Sun Microsystems - Beijing China 473*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct ddi_device_acc_attr gc_attr_desc; 474*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_iblock_cookie_t iblock_cookie; 475*9a5557fdSlucy wang - Sun Microsystems - Beijing China const char *name; 476*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_acc_handle_t db_handle; 477*9a5557fdSlucy wang - Sun Microsystems - Beijing China 478*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_intr_handle_t intr_handle; 479*9a5557fdSlucy wang - Sun Microsystems - Beijing China int intr_type; 480*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint_t intr_pri; 481*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_dmah_node_t *dmahdl_pool; 482*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_dmah_node_t tx_dma_hdls[MAX_CMD_DESCRIPTORS+EXTRA_HANDLES]; 483*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t freehdls; 484*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t freecmds; 485*9a5557fdSlucy wang - Sun Microsystems - Beijing China int tx_bcopy_threshold; 486*9a5557fdSlucy wang - Sun Microsystems - Beijing China kmutex_t tx_lock; 487*9a5557fdSlucy wang - Sun Microsystems - Beijing China krwlock_t adapter_lock; 488*9a5557fdSlucy wang - Sun Microsystems - Beijing China kmutex_t lock; 489*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct nx_legacy_intr_set legacy_intr; 490*9a5557fdSlucy wang - Sun Microsystems - Beijing China timeout_id_t watchdog_timer; 491*9a5557fdSlucy wang - Sun Microsystems - Beijing China kstat_t *kstats[1]; 492*9a5557fdSlucy wang - Sun Microsystems - Beijing China 493*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t curr_window; 494*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t crb_win; 495*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t cmdProducer; 496*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t *cmdConsumer; 497*9a5557fdSlucy wang - Sun Microsystems - Beijing China 498*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t interrupt_crb; 499*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t fw_major; 500*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t crb_addr_cmd_producer; 501*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t crb_addr_cmd_consumer; 502*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint16_t tx_context_id; 503*9a5557fdSlucy wang - Sun Microsystems - Beijing China short context_alloced; 504*9a5557fdSlucy wang - Sun Microsystems - Beijing China int max_rds_rings; 505*9a5557fdSlucy wang - Sun Microsystems - Beijing China 506*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t lastCmdConsumer; 507*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Num of bufs posted in phantom */ 508*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t pendingCmdCount; 509*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t MaxTxDescCount; 510*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t MaxRxDescCount; 511*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t MaxJumboRxDescCount; 512*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t MaxLroRxDescCount; 513*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Num of instances active on cmd buffer ring */ 514*9a5557fdSlucy wang - Sun Microsystems - Beijing China int resched_needed; 515*9a5557fdSlucy wang - Sun Microsystems - Beijing China 516*9a5557fdSlucy wang - Sun Microsystems - Beijing China int driver_mismatch; 517*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t temp; 518*9a5557fdSlucy wang - Sun Microsystems - Beijing China 519*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_cmd_buffer *cmd_buf_arr; /* Command buffers for xmit */ 520*9a5557fdSlucy wang - Sun Microsystems - Beijing China int rx_bcopy_threshold; 521*9a5557fdSlucy wang - Sun Microsystems - Beijing China 522*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 523*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Receive instances. These can be either one per port, 524*9a5557fdSlucy wang - Sun Microsystems - Beijing China * or one per peg, etc. 525*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 526*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_recv_context_t recv_ctx[MAX_RCV_CTX]; 527*9a5557fdSlucy wang - Sun Microsystems - Beijing China int is_up; 528*9a5557fdSlucy wang - Sun Microsystems - Beijing China 529*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* context interface shared between card and host */ 530*9a5557fdSlucy wang - Sun Microsystems - Beijing China RingContext *ctxDesc; 531*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t ctxDesc_physAddr; 532*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_handle_t ctxDesc_dma_handle; 533*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_acc_handle_t ctxDesc_acc_handle; 534*9a5557fdSlucy wang - Sun Microsystems - Beijing China 535*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct { 536*9a5557fdSlucy wang - Sun Microsystems - Beijing China void *addr; 537*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint64_t phys_addr; 538*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_handle_t dma_handle; 539*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_acc_handle_t acc_handle; 540*9a5557fdSlucy wang - Sun Microsystems - Beijing China } dummy_dma; 541*9a5557fdSlucy wang - Sun Microsystems - Beijing China 542*9a5557fdSlucy wang - Sun Microsystems - Beijing China void (*unm_nic_pci_change_crbwindow)(struct unm_adapter_s *, 543*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t); 544*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_crb_writelit_adapter)(struct unm_adapter_s *, 545*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long, int); 546*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long 547*9a5557fdSlucy wang - Sun Microsystems - Beijing China (*unm_nic_pci_set_window)(struct unm_adapter_s *, 548*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long); 549*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_fill_statistics)(struct unm_adapter_s *, 550*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_statistics *); 551*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_clear_statistics)(struct unm_adapter_s *); 552*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_hw_write_wx)(struct unm_adapter_s *, u64, 553*9a5557fdSlucy wang - Sun Microsystems - Beijing China void *, int); 554*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_hw_read_wx)(struct unm_adapter_s *, u64, void *, int); 555*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_hw_write_ioctl)(struct unm_adapter_s *, u64, void *, 556*9a5557fdSlucy wang - Sun Microsystems - Beijing China int); 557*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_hw_read_ioctl)(struct unm_adapter_s *, u64, void *, 558*9a5557fdSlucy wang - Sun Microsystems - Beijing China int); 559*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_pci_mem_write)(struct unm_adapter_s *, u64, void *, 560*9a5557fdSlucy wang - Sun Microsystems - Beijing China int); 561*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_pci_mem_read)(struct unm_adapter_s *, u64, void *, 562*9a5557fdSlucy wang - Sun Microsystems - Beijing China int); 563*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_pci_write_immediate)(struct unm_adapter_s *, u64, 564*9a5557fdSlucy wang - Sun Microsystems - Beijing China u32 *); 565*9a5557fdSlucy wang - Sun Microsystems - Beijing China int (*unm_nic_pci_read_immediate)(struct unm_adapter_s *, u64, 566*9a5557fdSlucy wang - Sun Microsystems - Beijing China u32 *); 567*9a5557fdSlucy wang - Sun Microsystems - Beijing China void (*unm_nic_pci_write_normalize)(struct unm_adapter_s *, u64, 568*9a5557fdSlucy wang - Sun Microsystems - Beijing China u32); 569*9a5557fdSlucy wang - Sun Microsystems - Beijing China u32 (*unm_nic_pci_read_normalize)(struct unm_adapter_s *, u64); 570*9a5557fdSlucy wang - Sun Microsystems - Beijing China 571*9a5557fdSlucy wang - Sun Microsystems - Beijing China caddr_t nd_data_p; 572*9a5557fdSlucy wang - Sun Microsystems - Beijing China nd_param_t nd_params[PARAM_COUNT]; 573*9a5557fdSlucy wang - Sun Microsystems - Beijing China }; /* unm_adapter structure */ 574*9a5557fdSlucy wang - Sun Microsystems - Beijing China 575*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_HOST_DUMMY_DMA_SIZE 1024 576*9a5557fdSlucy wang - Sun Microsystems - Beijing China 577*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Following structure is for specific port information */ 578*9a5557fdSlucy wang - Sun Microsystems - Beijing China 579*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define PCI_OFFSET_FIRST_RANGE(adapter, off) \ 580*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((adapter)->ahw.pci_base0 + off) 581*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define PCI_OFFSET_SECOND_RANGE(adapter, off) \ 582*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((adapter)->ahw.pci_base1 + off - SECOND_PAGE_GROUP_START) 583*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define PCI_OFFSET_THIRD_RANGE(adapter, off) \ 584*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((adapter)->ahw.pci_base2 + off - THIRD_PAGE_GROUP_START) 585*9a5557fdSlucy wang - Sun Microsystems - Beijing China 586*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define pci_base_offset(adapter, off) \ 587*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((((off) < ((adapter)->ahw.first_page_group_end)) && \ 588*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((off) >= ((adapter)->ahw.first_page_group_start))) ? \ 589*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((adapter)->ahw.pci_base0 + (off)) : \ 590*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((((off) < SECOND_PAGE_GROUP_END) && \ 591*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((off) >= SECOND_PAGE_GROUP_START)) ? \ 592*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((adapter)->ahw.pci_base1 + \ 593*9a5557fdSlucy wang - Sun Microsystems - Beijing China (off) - SECOND_PAGE_GROUP_START) : \ 594*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((((off) < THIRD_PAGE_GROUP_END) && \ 595*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((off) >= THIRD_PAGE_GROUP_START)) ? \ 596*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((adapter)->ahw.pci_base2 + (off) - \ 597*9a5557fdSlucy wang - Sun Microsystems - Beijing China THIRD_PAGE_GROUP_START) : \ 598*9a5557fdSlucy wang - Sun Microsystems - Beijing China 0))) 599*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define unm_nic_reg_write(_adp_, _off_, _val_) \ 600*9a5557fdSlucy wang - Sun Microsystems - Beijing China { \ 601*9a5557fdSlucy wang - Sun Microsystems - Beijing China __uint32_t _v1_ = (_val_); \ 602*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((_adp_)->unm_nic_hw_write_wx((_adp_), (_off_), \ 603*9a5557fdSlucy wang - Sun Microsystems - Beijing China &_v1_, 4)); \ 604*9a5557fdSlucy wang - Sun Microsystems - Beijing China } 605*9a5557fdSlucy wang - Sun Microsystems - Beijing China 606*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define unm_nic_reg_read(_adp_, _off_, _ptr_) \ 607*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((_adp_)->unm_nic_hw_read_wx((_adp_), (_off_), (_ptr_), 4)) 608*9a5557fdSlucy wang - Sun Microsystems - Beijing China 609*9a5557fdSlucy wang - Sun Microsystems - Beijing China 610*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define unm_nic_write_w0(_adp_, _idx_, _val_) \ 611*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((_adp_)->unm_nic_hw_write_wx((_adp_), (_idx_), &(_val_), 4)) 612*9a5557fdSlucy wang - Sun Microsystems - Beijing China 613*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define unm_nic_read_w0(_adp_, _idx_, _val_) \ 614*9a5557fdSlucy wang - Sun Microsystems - Beijing China ((_adp_)->unm_nic_hw_read_wx((_adp_), (_idx_), (_val_), 4)) 615*9a5557fdSlucy wang - Sun Microsystems - Beijing China 616*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* Functions available from unm_nic_hw.c */ 617*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_get_board_info(struct unm_adapter_s *adapter); 618*9a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_write_crb(struct unm_adapter_s *adapter, uint32_t index, 619*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t value); 620*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_write_crb(struct unm_adapter_s *adapter, uint32_t index, 621*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t value); 622*9a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_read_crb(struct unm_adapter_s *adapter, uint32_t index, 623*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t *value); 624*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_read_crb(struct unm_adapter_s *adapter, uint32_t index, 625*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t *value); 626*9a5557fdSlucy wang - Sun Microsystems - Beijing China // int unm_nic_reg_read (unm_adapter *adapter, u64 off); 627*9a5557fdSlucy wang - Sun Microsystems - Beijing China int _unm_nic_hw_write(struct unm_adapter_s *adapter, 628*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 off, void *data, int len); 629*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write(struct unm_adapter_s *adapter, 630*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 off, void *data, int len); 631*9a5557fdSlucy wang - Sun Microsystems - Beijing China int _unm_nic_hw_read(struct unm_adapter_s *adapter, 632*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 off, void *data, int len); 633*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read(struct unm_adapter_s *adapter, 634*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 off, void *data, int len); 635*9a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_hw_block_read(struct unm_adapter_s *adapter, 636*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 off, void *data, int num_words); 637*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_hw_block_read(struct unm_adapter_s *adapter, 638*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 off, void *data, int num_words); 639*9a5557fdSlucy wang - Sun Microsystems - Beijing China void _unm_nic_hw_block_write(struct unm_adapter_s *adapter, 640*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 off, void *data, int num_words); 641*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_hw_block_write(struct unm_adapter_s *adapter, 642*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 off, void *data, int num_words); 643*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_write(struct unm_adapter_s *adapter, 644*9a5557fdSlucy wang - Sun Microsystems - Beijing China u64 off, void *data, int size); 645*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_mem_block_read(struct unm_adapter_s *adapter, u64 off, 646*9a5557fdSlucy wang - Sun Microsystems - Beijing China void *data, int num_words); 647*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_mem_block_write(struct unm_adapter_s *adapter, u64 off, 648*9a5557fdSlucy wang - Sun Microsystems - Beijing China void *data, int num_words); 649*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_ioctl(unm_adapter *adapter, u64 off, void *data, int len); 650*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_ioctl(unm_adapter *adapter, u64 off, void *data, int len); 651*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_macaddr_set(struct unm_adapter_s *, __uint8_t *addr); 652*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_tcl_resetall(struct unm_adapter_s *adapter); 653*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_tcl_phaninit(struct unm_adapter_s *adapter); 654*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_tcl_postimage(struct unm_adapter_s *adapter); 655*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_set_mtu(struct unm_adapter_s *adapter, int new_mtu); 656*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_nic_phy_read(unm_adapter *adapter, long reg, __uint32_t *); 657*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_nic_init_port(struct unm_adapter_s *adapter); 658*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_crb_write_adapter(unsigned long off, void *data, 659*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_s *adapter); 660*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_read_adapter(unsigned long off, void *data, 661*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_s *adapter); 662*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_read_val_adapter(unsigned long off, 663*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_adapter_s *adapter); 664*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_stop_port(struct unm_adapter_s *adapter); 665*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_set_promisc_mode(struct unm_adapter_s *adapter); 666*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_unset_promisc_mode(struct unm_adapter_s *adapter); 667*9a5557fdSlucy wang - Sun Microsystems - Beijing China 668*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_hw.c */ 669*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_change_crbwindow_128M(unm_adapter *adapter, uint32_t wndw); 670*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_writelit_adapter_128M(struct unm_adapter_s *, unsigned long, int); 671*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_wx_128M(unm_adapter *adapter, u64 off, void *data, 672*9a5557fdSlucy wang - Sun Microsystems - Beijing China int len); 673*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_wx_128M(unm_adapter *adapter, u64 off, void *data, int len); 674*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_ioctl_128M(unm_adapter *adapter, u64 off, void *data, 675*9a5557fdSlucy wang - Sun Microsystems - Beijing China int len); 676*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_ioctl_128M(unm_adapter *adapter, u64 off, void *data, 677*9a5557fdSlucy wang - Sun Microsystems - Beijing China int len); 678*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_write_128M(struct unm_adapter_s *adapter, u64 off, 679*9a5557fdSlucy wang - Sun Microsystems - Beijing China void *data, int size); 680*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_read_128M(struct unm_adapter_s *adapter, u64 off, 681*9a5557fdSlucy wang - Sun Microsystems - Beijing China void *data, int size); 682*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_write_normalize_128M(unm_adapter *adapter, u64 off, u32 data); 683*9a5557fdSlucy wang - Sun Microsystems - Beijing China u32 unm_nic_pci_read_normalize_128M(unm_adapter *adapter, u64 off); 684*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_write_immediate_128M(unm_adapter *adapter, u64 off, u32 *data); 685*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_read_immediate_128M(unm_adapter *adapter, u64 off, u32 *data); 686*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long unm_nic_pci_set_window_128M(unm_adapter *adapter, 687*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long addr); 688*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_clear_statistics_128M(struct unm_adapter_s *adapter); 689*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_fill_statistics_128M(struct unm_adapter_s *adapter, 690*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_statistics *unm_stats); 691*9a5557fdSlucy wang - Sun Microsystems - Beijing China 692*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_change_crbwindow_2M(unm_adapter *adapter, uint32_t wndw); 693*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_crb_writelit_adapter_2M(struct unm_adapter_s *, unsigned long, int); 694*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_write_wx_2M(unm_adapter *adapter, u64 off, void *data, int len); 695*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_write_2M(struct unm_adapter_s *adapter, u64 off, 696*9a5557fdSlucy wang - Sun Microsystems - Beijing China void *data, int size); 697*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_mem_read_2M(struct unm_adapter_s *adapter, u64 off, 698*9a5557fdSlucy wang - Sun Microsystems - Beijing China void *data, int size); 699*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_hw_read_wx_2M(unm_adapter *adapter, u64 off, void *data, int len); 700*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_pci_write_normalize_2M(unm_adapter *adapter, u64 off, u32 data); 701*9a5557fdSlucy wang - Sun Microsystems - Beijing China u32 unm_nic_pci_read_normalize_2M(unm_adapter *adapter, u64 off); 702*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_write_immediate_2M(unm_adapter *adapter, u64 off, u32 *data); 703*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_pci_read_immediate_2M(unm_adapter *adapter, u64 off, u32 *data); 704*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long unm_nic_pci_set_window_2M(unm_adapter *adapter, 705*9a5557fdSlucy wang - Sun Microsystems - Beijing China unsigned long long addr); 706*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_clear_statistics_2M(struct unm_adapter_s *adapter); 707*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nic_fill_statistics_2M(struct unm_adapter_s *adapter, 708*9a5557fdSlucy wang - Sun Microsystems - Beijing China struct unm_statistics *unm_stats); 709*9a5557fdSlucy wang - Sun Microsystems - Beijing China void nx_p3_nic_set_multi(unm_adapter *adapter); 710*9a5557fdSlucy wang - Sun Microsystems - Beijing China 711*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_init.c */ 712*9a5557fdSlucy wang - Sun Microsystems - Beijing China int phantom_init(struct unm_adapter_s *adapter, int first_time); 713*9a5557fdSlucy wang - Sun Microsystems - Beijing China int load_from_flash(struct unm_adapter_s *adapter); 714*9a5557fdSlucy wang - Sun Microsystems - Beijing China int pinit_from_rom(unm_adapter *adapter, int verbose); 715*9a5557fdSlucy wang - Sun Microsystems - Beijing China int rom_fast_read(struct unm_adapter_s *adapter, int addr, int *valp); 716*9a5557fdSlucy wang - Sun Microsystems - Beijing China 717*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_isr.c */ 718*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_handle_phy_intr(unm_adapter *adapter); 719*9a5557fdSlucy wang - Sun Microsystems - Beijing China 720*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* niu.c */ 721*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_set_promiscuous_mode(struct unm_adapter_s *adapter, 722*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_niu_prom_mode_t mode); 723*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_xg_set_promiscuous_mode(struct unm_adapter_s *adapter, 724*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_niu_prom_mode_t mode); 725*9a5557fdSlucy wang - Sun Microsystems - Beijing China 726*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_xg_macaddr_set(struct unm_adapter_s *adapter, 727*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_ethernet_macaddr_t addr); 728*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_disable_xg_port(struct unm_adapter_s *adapter); 729*9a5557fdSlucy wang - Sun Microsystems - Beijing China 730*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_niu_gbe_init_port(long port); 731*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_enable_gbe_port(struct unm_adapter_s *adapter, 732*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_niu_gbe_ifmode_t mode); 733*9a5557fdSlucy wang - Sun Microsystems - Beijing China native_t unm_niu_disable_gbe_port(struct unm_adapter_s *adapter); 734*9a5557fdSlucy wang - Sun Microsystems - Beijing China 735*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_macaddr_get(struct unm_adapter_s *adapter, unsigned char *addr); 736*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_macaddr_set(struct unm_adapter_s *adapter, 737*9a5557fdSlucy wang - Sun Microsystems - Beijing China unm_ethernet_macaddr_t addr); 738*9a5557fdSlucy wang - Sun Microsystems - Beijing China 739*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_xg_set_tx_flow_ctl(struct unm_adapter_s *adapter, int enable); 740*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_gbe_set_rx_flow_ctl(struct unm_adapter_s *adapter, int enable); 741*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_niu_gbe_set_tx_flow_ctl(struct unm_adapter_s *adapter, int enable); 742*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_niu_gbe_disable_phy_interrupts(struct unm_adapter_s *); 743*9a5557fdSlucy wang - Sun Microsystems - Beijing China long unm_niu_gbe_phy_read(struct unm_adapter_s *, 744*9a5557fdSlucy wang - Sun Microsystems - Beijing China long reg, unm_crbword_t *readval); 745*9a5557fdSlucy wang - Sun Microsystems - Beijing China 746*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_ctx.c */ 747*9a5557fdSlucy wang - Sun Microsystems - Beijing China int netxen_create_rxtx(struct unm_adapter_s *adapter); 748*9a5557fdSlucy wang - Sun Microsystems - Beijing China void netxen_destroy_rxtx(struct unm_adapter_s *adapter); 749*9a5557fdSlucy wang - Sun Microsystems - Beijing China int nx_fw_cmd_set_mtu(struct unm_adapter_s *adapter, int mtu); 750*9a5557fdSlucy wang - Sun Microsystems - Beijing China 751*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_nic_main.c */ 752*9a5557fdSlucy wang - Sun Microsystems - Beijing China int receive_peg_ready(struct unm_adapter_s *adapter); 753*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nic_update_cmd_producer(struct unm_adapter_s *adapter, 754*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint32_t crb_producer); 755*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_desc_dma_sync(ddi_dma_handle_t handle, uint_t start, uint_t count, 756*9a5557fdSlucy wang - Sun Microsystems - Beijing China uint_t range, uint_t unit_size, uint_t direction); 757*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_pci_alloc_consistent(unm_adapter *, int, caddr_t *, 758*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_dma_cookie_t *, ddi_dma_handle_t *, ddi_acc_handle_t *); 759*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_pci_free_consistent(ddi_dma_handle_t *, ddi_acc_handle_t *); 760*9a5557fdSlucy wang - Sun Microsystems - Beijing China 761*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_ndd.c */ 762*9a5557fdSlucy wang - Sun Microsystems - Beijing China int unm_nd_init(unm_adapter *adapter); 763*9a5557fdSlucy wang - Sun Microsystems - Beijing China enum ioc_reply unm_nd_ioctl(unm_adapter *adapter, queue_t *wq, 764*9a5557fdSlucy wang - Sun Microsystems - Beijing China mblk_t *mp, struct iocblk *iocp); 765*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_nd_cleanup(unm_adapter *adapter); 766*9a5557fdSlucy wang - Sun Microsystems - Beijing China 767*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* unm_gem.c */ 768*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_destroy_intr(unm_adapter *adapter); 769*9a5557fdSlucy wang - Sun Microsystems - Beijing China void unm_free_dummy_dma(unm_adapter *adapter); 770*9a5557fdSlucy wang - Sun Microsystems - Beijing China 771*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 772*9a5557fdSlucy wang - Sun Microsystems - Beijing China * (Internal) return values from ioctl subroutines 773*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 774*9a5557fdSlucy wang - Sun Microsystems - Beijing China enum ioc_reply { 775*9a5557fdSlucy wang - Sun Microsystems - Beijing China IOC_INVAL = -1, /* bad, NAK with EINVAL */ 776*9a5557fdSlucy wang - Sun Microsystems - Beijing China IOC_DONE, /* OK, reply sent */ 777*9a5557fdSlucy wang - Sun Microsystems - Beijing China IOC_ACK, /* OK, just send ACK */ 778*9a5557fdSlucy wang - Sun Microsystems - Beijing China IOC_REPLY, /* OK, just send reply */ 779*9a5557fdSlucy wang - Sun Microsystems - Beijing China IOC_RESTART_ACK, /* OK, restart & ACK */ 780*9a5557fdSlucy wang - Sun Microsystems - Beijing China IOC_RESTART_REPLY /* OK, restart & reply */ 781*9a5557fdSlucy wang - Sun Microsystems - Beijing China }; 782*9a5557fdSlucy wang - Sun Microsystems - Beijing China 783*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 784*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Shorthand for the NDD parameters 785*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 786*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_autoneg nd_params[PARAM_ADV_AUTONEG_CAP].ndp_val 787*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_pause nd_params[PARAM_ADV_PAUSE_CAP].ndp_val 788*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_asym_pause nd_params[PARAM_ADV_ASYM_PAUSE_CAP].ndp_val 789*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_10000fdx nd_params[PARAM_ADV_10000FDX_CAP].ndp_val 790*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_1000fdx nd_params[PARAM_ADV_1000FDX_CAP].ndp_val 791*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_1000hdx nd_params[PARAM_ADV_1000HDX_CAP].ndp_val 792*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_100fdx nd_params[PARAM_ADV_100FDX_CAP].ndp_val 793*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_100hdx nd_params[PARAM_ADV_100HDX_CAP].ndp_val 794*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_10fdx nd_params[PARAM_ADV_10FDX_CAP].ndp_val 795*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_adv_10hdx nd_params[PARAM_ADV_10HDX_CAP].ndp_val 796*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_link_up nd_params[PARAM_LINK_STATUS].ndp_val 797*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_link_speed nd_params[PARAM_LINK_SPEED].ndp_val 798*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_link_duplex nd_params[PARAM_LINK_DUPLEX].ndp_val 799*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define param_loop_mode nd_params[PARAM_LOOP_MODE].ndp_val 800*9a5557fdSlucy wang - Sun Microsystems - Beijing China 801*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 802*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Property lookups 803*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 804*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_PROP_EXISTS(d, n) \ 805*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_prop_exists(DDI_DEV_T_ANY, (d), DDI_PROP_DONTPASS, (n)) 806*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_PROP_GET_INT(d, n) \ 807*9a5557fdSlucy wang - Sun Microsystems - Beijing China ddi_prop_get_int(DDI_DEV_T_ANY, (d), DDI_PROP_DONTPASS, (n), -1) 808*9a5557fdSlucy wang - Sun Microsystems - Beijing China 809*9a5557fdSlucy wang - Sun Microsystems - Beijing China /* 810*9a5557fdSlucy wang - Sun Microsystems - Beijing China * Bit flags in the 'debug' word ... 811*9a5557fdSlucy wang - Sun Microsystems - Beijing China */ 812*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_DBG_TRACE 0x00000002 /* general flow tracing */ 813*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define UNM_DBG_NDD 0x20000000 /* NDD operations */ 814*9a5557fdSlucy wang - Sun Microsystems - Beijing China 815*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define MBPS_10 10 816*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define MBPS_100 100 817*9a5557fdSlucy wang - Sun Microsystems - Beijing China #define MBPS_1000 1000 818*9a5557fdSlucy wang - Sun Microsystems - Beijing China 819*9a5557fdSlucy wang - Sun Microsystems - Beijing China #endif /* !_UNM_NIC_ */ 820