111374SSukumar.Swaminathan@Sun.COM /* 211374SSukumar.Swaminathan@Sun.COM * CDDL HEADER START 311374SSukumar.Swaminathan@Sun.COM * 411374SSukumar.Swaminathan@Sun.COM * The contents of this file are subject to the terms of the 511374SSukumar.Swaminathan@Sun.COM * Common Development and Distribution License (the "License"). 611374SSukumar.Swaminathan@Sun.COM * You may not use this file except in compliance with the License. 711374SSukumar.Swaminathan@Sun.COM * 811374SSukumar.Swaminathan@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 911374SSukumar.Swaminathan@Sun.COM * or http://www.opensolaris.org/os/licensing. 1011374SSukumar.Swaminathan@Sun.COM * See the License for the specific language governing permissions 1111374SSukumar.Swaminathan@Sun.COM * and limitations under the License. 1211374SSukumar.Swaminathan@Sun.COM * 1311374SSukumar.Swaminathan@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 1411374SSukumar.Swaminathan@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1511374SSukumar.Swaminathan@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 1611374SSukumar.Swaminathan@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 1711374SSukumar.Swaminathan@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 1811374SSukumar.Swaminathan@Sun.COM * 1911374SSukumar.Swaminathan@Sun.COM * CDDL HEADER END 2011374SSukumar.Swaminathan@Sun.COM */ 2111374SSukumar.Swaminathan@Sun.COM 2211374SSukumar.Swaminathan@Sun.COM /* 2312043SSukumar.Swaminathan@Sun.COM * Copyright 2010 Emulex. All rights reserved. 2411374SSukumar.Swaminathan@Sun.COM * Use is subject to license terms. 2511374SSukumar.Swaminathan@Sun.COM */ 2611374SSukumar.Swaminathan@Sun.COM 2711374SSukumar.Swaminathan@Sun.COM /* 2811374SSukumar.Swaminathan@Sun.COM * Driver specific data structures and function prototypes 2911374SSukumar.Swaminathan@Sun.COM */ 3011374SSukumar.Swaminathan@Sun.COM 3111374SSukumar.Swaminathan@Sun.COM #ifndef _OCE_IMPL_H_ 3211374SSukumar.Swaminathan@Sun.COM #define _OCE_IMPL_H_ 3311374SSukumar.Swaminathan@Sun.COM 3411374SSukumar.Swaminathan@Sun.COM #ifdef __cplusplus 3511374SSukumar.Swaminathan@Sun.COM extern "C" { 3611374SSukumar.Swaminathan@Sun.COM #endif 3711374SSukumar.Swaminathan@Sun.COM 3811374SSukumar.Swaminathan@Sun.COM #include <sys/types.h> 3911374SSukumar.Swaminathan@Sun.COM #include <sys/dditypes.h> 4011374SSukumar.Swaminathan@Sun.COM #include <sys/kstat.h> 4111374SSukumar.Swaminathan@Sun.COM #include <sys/ddi_intr.h> 4211374SSukumar.Swaminathan@Sun.COM #include <sys/cmn_err.h> 4311374SSukumar.Swaminathan@Sun.COM #include <sys/byteorder.h> 4411374SSukumar.Swaminathan@Sun.COM #include <sys/mac_provider.h> 4511374SSukumar.Swaminathan@Sun.COM #include <sys/mac_ether.h> 4611374SSukumar.Swaminathan@Sun.COM #include <sys/vlan.h> 4711374SSukumar.Swaminathan@Sun.COM #include <sys/bitmap.h> 4811374SSukumar.Swaminathan@Sun.COM #include <sys/ddidmareq.h> 4911374SSukumar.Swaminathan@Sun.COM #include <sys/kmem.h> 5011374SSukumar.Swaminathan@Sun.COM #include <sys/ddi.h> 5111374SSukumar.Swaminathan@Sun.COM #include <sys/sunddi.h> 5211374SSukumar.Swaminathan@Sun.COM #include <sys/modctl.h> 5311374SSukumar.Swaminathan@Sun.COM #include <sys/devops.h> 5411374SSukumar.Swaminathan@Sun.COM #include <sys/systm.h> 5511374SSukumar.Swaminathan@Sun.COM #include <sys/conf.h> 5611374SSukumar.Swaminathan@Sun.COM #include <sys/dlpi.h> 5711374SSukumar.Swaminathan@Sun.COM #include <sys/ethernet.h> 5811374SSukumar.Swaminathan@Sun.COM #include <sys/strsun.h> 5911374SSukumar.Swaminathan@Sun.COM #include <sys/pattr.h> 6011374SSukumar.Swaminathan@Sun.COM #include <sys/strsubr.h> 6111374SSukumar.Swaminathan@Sun.COM #include <sys/ddifm.h> 6211374SSukumar.Swaminathan@Sun.COM #include <sys/fm/protocol.h> 6311374SSukumar.Swaminathan@Sun.COM #include <sys/fm/util.h> 6411374SSukumar.Swaminathan@Sun.COM #include <sys/fm/io/ddi.h> 6511374SSukumar.Swaminathan@Sun.COM #include <sys/note.h> 66*13020SSukumar.Swaminathan@Sun.COM #include <sys/pci.h> 67*13020SSukumar.Swaminathan@Sun.COM #include <sys/random.h> 6811374SSukumar.Swaminathan@Sun.COM #include <oce_hw.h> 6911374SSukumar.Swaminathan@Sun.COM #include <oce_hw_eth.h> 7011374SSukumar.Swaminathan@Sun.COM #include <oce_io.h> 7111374SSukumar.Swaminathan@Sun.COM #include <oce_buf.h> 7211374SSukumar.Swaminathan@Sun.COM #include <oce_utils.h> 7311374SSukumar.Swaminathan@Sun.COM #include <oce_version.h> 7411374SSukumar.Swaminathan@Sun.COM 75*13020SSukumar.Swaminathan@Sun.COM #define SIZE_128 128 76*13020SSukumar.Swaminathan@Sun.COM #define SIZE_256 256 77*13020SSukumar.Swaminathan@Sun.COM #define SIZE_512 512 78*13020SSukumar.Swaminathan@Sun.COM #define SIZE_1K 1024 79*13020SSukumar.Swaminathan@Sun.COM #define SIZE_2K (2 * 1024) 80*13020SSukumar.Swaminathan@Sun.COM #define SIZE_4K (4 * 1024) 81*13020SSukumar.Swaminathan@Sun.COM #define SIZE_8K (8 * 1024) 82*13020SSukumar.Swaminathan@Sun.COM 83*13020SSukumar.Swaminathan@Sun.COM #define END 0xdeadface 84*13020SSukumar.Swaminathan@Sun.COM 85*13020SSukumar.Swaminathan@Sun.COM #define OCE_MAX_ETH_FRAME_SIZE 1500 86*13020SSukumar.Swaminathan@Sun.COM #define OCE_MAX_JUMBO_FRAME_SIZE 9018 87*13020SSukumar.Swaminathan@Sun.COM #define OCE_MIN_ETH_FRAME_SIZE 64 88*13020SSukumar.Swaminathan@Sun.COM #define OCE_LLC_SNAP_HDR_LEN 8 89*13020SSukumar.Swaminathan@Sun.COM 9011374SSukumar.Swaminathan@Sun.COM #define OCE_MIN_MTU 1500 9111374SSukumar.Swaminathan@Sun.COM #define OCE_MAX_MTU 9000 9211374SSukumar.Swaminathan@Sun.COM #define OCE_MAX_MCA 32 9311374SSukumar.Swaminathan@Sun.COM #define OCE_RQ_MAX_FRAME_SZ 9018 9411374SSukumar.Swaminathan@Sun.COM 9511374SSukumar.Swaminathan@Sun.COM #define OCE_MAX_EQ 8 9611374SSukumar.Swaminathan@Sun.COM #define OCE_MAX_CQ 1024 9711374SSukumar.Swaminathan@Sun.COM #define OCE_MAX_WQ 8 98*13020SSukumar.Swaminathan@Sun.COM #define OCE_MAX_RQ 5 99*13020SSukumar.Swaminathan@Sun.COM 100*13020SSukumar.Swaminathan@Sun.COM #define OCE_WQ_NUM_BUFFERS 2048 101*13020SSukumar.Swaminathan@Sun.COM #define OCE_WQ_BUF_SIZE 2048 102*13020SSukumar.Swaminathan@Sun.COM #define OCE_LSO_MAX_SIZE (64 * 1024) 103*13020SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_TX_BCOPY_LIMIT 512 10411723SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_RX_BCOPY_LIMIT 128 105*13020SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_WQ_EQD 16 106*13020SSukumar.Swaminathan@Sun.COM 107*13020SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_TX_RING_SIZE 2048 108*13020SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_RX_RING_SIZE 1024 109*13020SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_WQS 1 110*13020SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_RQS 1 111*13020SSukumar.Swaminathan@Sun.COM #define OCE_MAX_RQS 5 11211374SSukumar.Swaminathan@Sun.COM 113*13020SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_RX_PKT_PER_INTR (OCE_DEFAULT_RX_RING_SIZE / 2) 114*13020SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_TX_RECLAIM_THRESHOLD 1024 115*13020SSukumar.Swaminathan@Sun.COM #define OCE_MAX_RQ_POSTS 255 116*13020SSukumar.Swaminathan@Sun.COM #define OCE_RQ_NUM_BUFFERS 2048 117*13020SSukumar.Swaminathan@Sun.COM #define OCE_RQ_BUF_SIZE 8192 11811374SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_RECHARGE_THRESHOLD OCE_MAX_RQ_POSTS 119*13020SSukumar.Swaminathan@Sun.COM #define OCE_NUM_USED_VECTORS 2 120*13020SSukumar.Swaminathan@Sun.COM #define OCE_ITBL_SIZE 64 121*13020SSukumar.Swaminathan@Sun.COM #define OCE_HKEY_SIZE 40 122*13020SSukumar.Swaminathan@Sun.COM #define OCE_DMA_ALIGNMENT 0x1000ull 12311374SSukumar.Swaminathan@Sun.COM 124*13020SSukumar.Swaminathan@Sun.COM #define OCE_MIN_VECTORS 1 12511374SSukumar.Swaminathan@Sun.COM 126*13020SSukumar.Swaminathan@Sun.COM #define OCE_CAPAB_FLAGS (MBX_RX_IFACE_FLAGS_BROADCAST | \ 127*13020SSukumar.Swaminathan@Sun.COM MBX_RX_IFACE_FLAGS_PROMISCUOUS | \ 12811374SSukumar.Swaminathan@Sun.COM MBX_RX_IFACE_FLAGS_UNTAGGED | \ 12911374SSukumar.Swaminathan@Sun.COM MBX_RX_IFACE_FLAGS_MCAST_PROMISCUOUS | \ 13011374SSukumar.Swaminathan@Sun.COM MBX_RX_IFACE_FLAGS_PASS_L3L4) 13111374SSukumar.Swaminathan@Sun.COM 132*13020SSukumar.Swaminathan@Sun.COM #define OCE_CAPAB_ENABLE (MBX_RX_IFACE_FLAGS_BROADCAST | \ 13311374SSukumar.Swaminathan@Sun.COM MBX_RX_IFACE_FLAGS_UNTAGGED | \ 13411374SSukumar.Swaminathan@Sun.COM MBX_RX_IFACE_FLAGS_PASS_L3L4) 13511374SSukumar.Swaminathan@Sun.COM 13612043SSukumar.Swaminathan@Sun.COM #define OCE_FM_CAPABILITY (DDI_FM_EREPORT_CAPABLE | \ 13711374SSukumar.Swaminathan@Sun.COM DDI_FM_ACCCHK_CAPABLE | \ 13812043SSukumar.Swaminathan@Sun.COM DDI_FM_DMACHK_CAPABLE) 13911374SSukumar.Swaminathan@Sun.COM 140*13020SSukumar.Swaminathan@Sun.COM 141*13020SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_RSS_TYPE (RSS_ENABLE_IPV4|RSS_ENABLE_TCP_IPV4) 142*13020SSukumar.Swaminathan@Sun.COM 14311374SSukumar.Swaminathan@Sun.COM /* flow control definitions */ 14411374SSukumar.Swaminathan@Sun.COM #define OCE_FC_NONE 0x00000000 14511374SSukumar.Swaminathan@Sun.COM #define OCE_FC_TX 0x00000001 14611374SSukumar.Swaminathan@Sun.COM #define OCE_FC_RX 0x00000002 14711374SSukumar.Swaminathan@Sun.COM #define OCE_DEFAULT_FLOW_CONTROL (OCE_FC_TX | OCE_FC_RX) 14811374SSukumar.Swaminathan@Sun.COM 14911374SSukumar.Swaminathan@Sun.COM /* PCI Information */ 15011374SSukumar.Swaminathan@Sun.COM #define OCE_DEV_CFG_BAR 0x01 15111374SSukumar.Swaminathan@Sun.COM #define OCE_PCI_CSR_BAR 0x02 15211374SSukumar.Swaminathan@Sun.COM #define OCE_PCI_DB_BAR 0x03 15311374SSukumar.Swaminathan@Sun.COM 15411374SSukumar.Swaminathan@Sun.COM /* macros for device IO */ 15511374SSukumar.Swaminathan@Sun.COM #define OCE_READ_REG32(handle, addr) ddi_get32(handle, addr) 15611374SSukumar.Swaminathan@Sun.COM #define OCE_WRITE_REG32(handle, addr, value) ddi_put32(handle, addr, value) 15711374SSukumar.Swaminathan@Sun.COM 15811374SSukumar.Swaminathan@Sun.COM #define OCE_CSR_READ32(dev, offset) \ 15911374SSukumar.Swaminathan@Sun.COM OCE_READ_REG32((dev)->csr_handle, \ 16011374SSukumar.Swaminathan@Sun.COM (uint32_t *)(void *)((dev)->csr_addr + offset)) 16111374SSukumar.Swaminathan@Sun.COM 16211374SSukumar.Swaminathan@Sun.COM #define OCE_CSR_WRITE32(dev, offset, value) \ 16311374SSukumar.Swaminathan@Sun.COM OCE_WRITE_REG32((dev)->csr_handle, \ 16411374SSukumar.Swaminathan@Sun.COM (uint32_t *)(void *)((dev)->csr_addr + offset), value) 16511374SSukumar.Swaminathan@Sun.COM 16611374SSukumar.Swaminathan@Sun.COM #define OCE_DB_READ32(dev, offset) \ 16711374SSukumar.Swaminathan@Sun.COM OCE_READ_REG32((dev)->db_handle, \ 16811374SSukumar.Swaminathan@Sun.COM (uint32_t *)(void *)((dev)->db_addr + offset)) 16911374SSukumar.Swaminathan@Sun.COM 17011374SSukumar.Swaminathan@Sun.COM #define OCE_DB_WRITE32(dev, offset, value) \ 17111374SSukumar.Swaminathan@Sun.COM OCE_WRITE_REG32((dev)->db_handle, \ 17211374SSukumar.Swaminathan@Sun.COM (uint32_t *)(void *)((dev)->db_addr + offset), value) 17311374SSukumar.Swaminathan@Sun.COM 17411374SSukumar.Swaminathan@Sun.COM #define OCE_CFG_READ32(dev, offset) \ 17511374SSukumar.Swaminathan@Sun.COM OCE_READ_REG32((dev)->dev_cfg_handle, \ 17611374SSukumar.Swaminathan@Sun.COM (uint32_t *)(void *)((dev)->dev_cfg_addr + offset)) 17711374SSukumar.Swaminathan@Sun.COM 17811374SSukumar.Swaminathan@Sun.COM #define OCE_CFG_WRITE32(dev, offset, value) \ 17911374SSukumar.Swaminathan@Sun.COM OCE_WRITE_REG32((dev)->dev_cfg_handle, \ 18011374SSukumar.Swaminathan@Sun.COM (uint32_t *)(void *)((dev)->dev_cfg_addr + offset), value) 18111374SSukumar.Swaminathan@Sun.COM 18211374SSukumar.Swaminathan@Sun.COM #define OCE_PCI_FUNC(dev) \ 18311374SSukumar.Swaminathan@Sun.COM ((OCE_CFG_READ32(dev, PCICFG_INTR_CTRL) \ 18411374SSukumar.Swaminathan@Sun.COM >> HOSTINTR_PFUNC_SHIFT) & HOSTINTR_PFUNC_MASK) 18511374SSukumar.Swaminathan@Sun.COM 18611723SSukumar.Swaminathan@Sun.COM #define DEV_LOCK(dev) mutex_enter(&dev->dev_lock) 18711374SSukumar.Swaminathan@Sun.COM 18811723SSukumar.Swaminathan@Sun.COM #define DEV_UNLOCK(dev) mutex_exit(&dev->dev_lock) 18911374SSukumar.Swaminathan@Sun.COM 19011374SSukumar.Swaminathan@Sun.COM enum oce_ring_size { 19111374SSukumar.Swaminathan@Sun.COM RING_SIZE_256 = 256, 19211374SSukumar.Swaminathan@Sun.COM RING_SIZE_512 = 512, 19311374SSukumar.Swaminathan@Sun.COM RING_SIZE_1024 = 1024, 19411374SSukumar.Swaminathan@Sun.COM RING_SIZE_2048 = 2048 19511374SSukumar.Swaminathan@Sun.COM }; 19611374SSukumar.Swaminathan@Sun.COM 19711374SSukumar.Swaminathan@Sun.COM enum oce_driver_state { 19811374SSukumar.Swaminathan@Sun.COM STATE_INIT = 0x2, 19911374SSukumar.Swaminathan@Sun.COM STATE_MAC_STARTED = 0x4, 20011374SSukumar.Swaminathan@Sun.COM STATE_QUIESCE = 0x8, 20111374SSukumar.Swaminathan@Sun.COM STATE_MAC_STOPPING = 0x10 20211374SSukumar.Swaminathan@Sun.COM }; 20311374SSukumar.Swaminathan@Sun.COM 20411374SSukumar.Swaminathan@Sun.COM struct oce_dev { 205*13020SSukumar.Swaminathan@Sun.COM kmutex_t bmbx_lock; /* Bootstrap Lock */ 206*13020SSukumar.Swaminathan@Sun.COM kmutex_t dev_lock; /* lock for device */ 207*13020SSukumar.Swaminathan@Sun.COM 208*13020SSukumar.Swaminathan@Sun.COM /* Queues relarted */ 20911374SSukumar.Swaminathan@Sun.COM struct oce_wq *wq[OCE_MAX_WQ]; /* TXQ Array */ 21011374SSukumar.Swaminathan@Sun.COM struct oce_rq *rq[OCE_MAX_RQ]; /* RXQ Array */ 21111374SSukumar.Swaminathan@Sun.COM struct oce_cq *cq[OCE_MAX_CQ]; /* Completion Queues */ 21211374SSukumar.Swaminathan@Sun.COM struct oce_eq *eq[OCE_MAX_EQ]; /* Event Queues */ 213*13020SSukumar.Swaminathan@Sun.COM struct oce_mq *mq; /* MQ ring */ 214*13020SSukumar.Swaminathan@Sun.COM 215*13020SSukumar.Swaminathan@Sun.COM /* driver state machine */ 216*13020SSukumar.Swaminathan@Sun.COM enum oce_driver_state state; /* state */ 217*13020SSukumar.Swaminathan@Sun.COM boolean_t suspended; /* CPR */ 218*13020SSukumar.Swaminathan@Sun.COM uint32_t attach_state; /* attach progress */ 219*13020SSukumar.Swaminathan@Sun.COM 220*13020SSukumar.Swaminathan@Sun.COM oce_dma_buf_t *bmbx; /* Bootstrap MailBox */ 221*13020SSukumar.Swaminathan@Sun.COM 22211723SSukumar.Swaminathan@Sun.COM uint32_t tx_bcopy_limit; /* TX BCOPY Limit */ 22311723SSukumar.Swaminathan@Sun.COM uint32_t rx_bcopy_limit; /* RX BCOPY Limit */ 224*13020SSukumar.Swaminathan@Sun.COM uint32_t tx_reclaim_threshold; /* Tx reclaim */ 225*13020SSukumar.Swaminathan@Sun.COM uint32_t rx_pkt_per_intr; /* Rx pkts processed per intr */ 22611374SSukumar.Swaminathan@Sun.COM 227*13020SSukumar.Swaminathan@Sun.COM /* BARS */ 228*13020SSukumar.Swaminathan@Sun.COM int num_bars; 22911723SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t pci_cfg_handle; /* Config space handle */ 23011723SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t cfg_handle; /* MMIO PCI Config Space Regs */ 23111374SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t csr_handle; /* MMIO Control Status Regs */ 232*13020SSukumar.Swaminathan@Sun.COM caddr_t csr_addr; 23311374SSukumar.Swaminathan@Sun.COM caddr_t db_addr; 234*13020SSukumar.Swaminathan@Sun.COM caddr_t dev_cfg_addr; 23511374SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t db_handle; /* MMIO DoorBell Area */ 236*13020SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t dev_cfg_handle; /* MMIO CONFIG SPACE */ 23711374SSukumar.Swaminathan@Sun.COM mac_handle_t mac_handle; /* MAC HANDLE */ 23811374SSukumar.Swaminathan@Sun.COM 239*13020SSukumar.Swaminathan@Sun.COM /* device stats */ 24011374SSukumar.Swaminathan@Sun.COM kstat_t *oce_kstats; /* NIC STATS */ 24111374SSukumar.Swaminathan@Sun.COM oce_dma_buf_t *stats_dbuf; /* STATS BUFFER */ 24211374SSukumar.Swaminathan@Sun.COM struct mbx_get_nic_stats *hw_stats; 24311374SSukumar.Swaminathan@Sun.COM /* dev stats */ 24411374SSukumar.Swaminathan@Sun.COM uint32_t tx_errors; 24511374SSukumar.Swaminathan@Sun.COM uint32_t tx_noxmtbuf; 24611374SSukumar.Swaminathan@Sun.COM 24711374SSukumar.Swaminathan@Sun.COM /* link status */ 248*13020SSukumar.Swaminathan@Sun.COM link_state_t link_status; 249*13020SSukumar.Swaminathan@Sun.COM int32_t link_speed; /* Link speed in Mbps */ 25011374SSukumar.Swaminathan@Sun.COM 251*13020SSukumar.Swaminathan@Sun.COM /* OS */ 252*13020SSukumar.Swaminathan@Sun.COM uint32_t dev_id; /* device ID or instance number */ 253*13020SSukumar.Swaminathan@Sun.COM dev_info_t *dip; /* device info structure for device tree node */ 254*13020SSukumar.Swaminathan@Sun.COM 255*13020SSukumar.Swaminathan@Sun.COM /* Interrupt related */ 256*13020SSukumar.Swaminathan@Sun.COM int intr_type; /* INTR TYPE USED */ 257*13020SSukumar.Swaminathan@Sun.COM int num_vectors; /* number of vectors used */ 258*13020SSukumar.Swaminathan@Sun.COM uint_t intr_pri; /* interrupt priority */ 25911374SSukumar.Swaminathan@Sun.COM int intr_cap; 260*13020SSukumar.Swaminathan@Sun.COM ddi_intr_handle_t *htable; /* intr handler table */ 261*13020SSukumar.Swaminathan@Sun.COM int32_t hsize; 26211374SSukumar.Swaminathan@Sun.COM 26311374SSukumar.Swaminathan@Sun.COM /* device configuration */ 264*13020SSukumar.Swaminathan@Sun.COM uint32_t rq_max_bufs; /* maximum prealloced buffers */ 265*13020SSukumar.Swaminathan@Sun.COM uint32_t rq_frag_size; /* Rxq fragment size */ 26611374SSukumar.Swaminathan@Sun.COM enum oce_ring_size tx_ring_size; 26711374SSukumar.Swaminathan@Sun.COM enum oce_ring_size rx_ring_size; 268*13020SSukumar.Swaminathan@Sun.COM uint32_t neqs; /* No of event queues */ 269*13020SSukumar.Swaminathan@Sun.COM uint32_t nwqs; /* No of Work Queues */ 270*13020SSukumar.Swaminathan@Sun.COM uint32_t nrqs; /* No of Receive Queues */ 271*13020SSukumar.Swaminathan@Sun.COM uint32_t nifs; /* No of interfaces created */ 272*13020SSukumar.Swaminathan@Sun.COM uint32_t tx_rings; 273*13020SSukumar.Swaminathan@Sun.COM uint32_t rx_rings; 274*13020SSukumar.Swaminathan@Sun.COM uint32_t pmac_id; /* used to add or remove mac */ 275*13020SSukumar.Swaminathan@Sun.COM uint8_t unicast_addr[ETHERADDRL]; 276*13020SSukumar.Swaminathan@Sun.COM uint32_t mtu; 277*13020SSukumar.Swaminathan@Sun.COM int32_t fm_caps; 278*13020SSukumar.Swaminathan@Sun.COM boolean_t rss_enable; /* RSS support */ 279*13020SSukumar.Swaminathan@Sun.COM boolean_t lso_capable; /* LSO */ 280*13020SSukumar.Swaminathan@Sun.COM boolean_t promisc; /* PROMISC MODE */ 281*13020SSukumar.Swaminathan@Sun.COM uint32_t if_cap_flags; /* IF CAPAB */ 282*13020SSukumar.Swaminathan@Sun.COM uint32_t flow_control; /* flow control settings */ 283*13020SSukumar.Swaminathan@Sun.COM uint8_t mac_addr[ETHERADDRL]; /* hardware mac address */ 284*13020SSukumar.Swaminathan@Sun.COM uint16_t num_mca; /* MCA supported */ 285*13020SSukumar.Swaminathan@Sun.COM struct ether_addr multi_cast[OCE_MAX_MCA]; /* MC TABLE */ 286*13020SSukumar.Swaminathan@Sun.COM uint32_t cookie; /* used during fw download */ 28711374SSukumar.Swaminathan@Sun.COM 28811374SSukumar.Swaminathan@Sun.COM /* fw config: only relevant fields */ 289*13020SSukumar.Swaminathan@Sun.COM uint32_t config_number; 290*13020SSukumar.Swaminathan@Sun.COM uint32_t asic_revision; 291*13020SSukumar.Swaminathan@Sun.COM uint32_t port_id; 292*13020SSukumar.Swaminathan@Sun.COM uint32_t function_mode; 293*13020SSukumar.Swaminathan@Sun.COM uint32_t function_caps; 294*13020SSukumar.Swaminathan@Sun.COM uint32_t max_tx_rings; /* Max Rx rings available */ 295*13020SSukumar.Swaminathan@Sun.COM uint32_t max_rx_rings; /* Max rx rings available */ 296*13020SSukumar.Swaminathan@Sun.COM int32_t if_id; /* IF ID */ 297*13020SSukumar.Swaminathan@Sun.COM uint8_t fn; /* function number */ 298*13020SSukumar.Swaminathan@Sun.COM uint8_t fw_version[32]; /* fw version string */ 299*13020SSukumar.Swaminathan@Sun.COM 300*13020SSukumar.Swaminathan@Sun.COM /* Logging related */ 301*13020SSukumar.Swaminathan@Sun.COM uint16_t mod_mask; /* Log Mask */ 302*13020SSukumar.Swaminathan@Sun.COM int16_t severity; /* Log level */ 30311374SSukumar.Swaminathan@Sun.COM }; 30411374SSukumar.Swaminathan@Sun.COM 30511374SSukumar.Swaminathan@Sun.COM /* GLD handler functions */ 30611374SSukumar.Swaminathan@Sun.COM int oce_m_start(void *arg); 30711374SSukumar.Swaminathan@Sun.COM void oce_m_stop(void *arg); 30811374SSukumar.Swaminathan@Sun.COM mblk_t *oce_m_send(void *arg, mblk_t *pkt); 30911374SSukumar.Swaminathan@Sun.COM int oce_m_promiscuous(void *arg, boolean_t enable); 31011374SSukumar.Swaminathan@Sun.COM int oce_m_multicast(void *arg, boolean_t add, const uint8_t *mca); 31111374SSukumar.Swaminathan@Sun.COM int oce_m_unicast(void *arg, const uint8_t *uca); 31211374SSukumar.Swaminathan@Sun.COM boolean_t oce_m_getcap(void *arg, mac_capab_t cap, void *data); 31311374SSukumar.Swaminathan@Sun.COM void oce_m_ioctl(void *arg, queue_t *wq, mblk_t *mp); 31411374SSukumar.Swaminathan@Sun.COM int oce_m_setprop(void *arg, const char *name, mac_prop_id_t id, 31511374SSukumar.Swaminathan@Sun.COM uint_t size, const void *val); 31611374SSukumar.Swaminathan@Sun.COM int oce_m_getprop(void *arg, const char *name, mac_prop_id_t id, 31711878SVenu.Iyer@Sun.COM uint_t size, void *val); 31811878SVenu.Iyer@Sun.COM void oce_m_propinfo(void *arg, const char *pr_name, mac_prop_id_t pr_num, 31911878SVenu.Iyer@Sun.COM mac_prop_info_handle_t prh); 32011878SVenu.Iyer@Sun.COM 32111374SSukumar.Swaminathan@Sun.COM int oce_m_stat(void *arg, uint_t stat, uint64_t *val); 32211374SSukumar.Swaminathan@Sun.COM 32311374SSukumar.Swaminathan@Sun.COM /* Hardware start/stop functions */ 32411374SSukumar.Swaminathan@Sun.COM int oce_start(struct oce_dev *dev); 32511374SSukumar.Swaminathan@Sun.COM void oce_stop(struct oce_dev *dev); 32611374SSukumar.Swaminathan@Sun.COM 32711374SSukumar.Swaminathan@Sun.COM /* FMA support Functions */ 32811374SSukumar.Swaminathan@Sun.COM void oce_fm_init(struct oce_dev *dev); 32911374SSukumar.Swaminathan@Sun.COM void oce_fm_fini(struct oce_dev *dev); 33011374SSukumar.Swaminathan@Sun.COM void oce_set_dma_fma_flags(int fm_caps); 33111374SSukumar.Swaminathan@Sun.COM void oce_set_reg_fma_flags(int fm_caps); 33211374SSukumar.Swaminathan@Sun.COM void oce_set_tx_map_dma_fma_flags(int fm_caps); 33311374SSukumar.Swaminathan@Sun.COM void oce_fm_ereport(struct oce_dev *dev, char *detail); 33411374SSukumar.Swaminathan@Sun.COM int oce_fm_check_acc_handle(struct oce_dev *dev, 33511374SSukumar.Swaminathan@Sun.COM ddi_acc_handle_t acc_handle); 33611374SSukumar.Swaminathan@Sun.COM int oce_fm_check_dma_handle(struct oce_dev *dev, 33711374SSukumar.Swaminathan@Sun.COM ddi_dma_handle_t dma_handle); 33811374SSukumar.Swaminathan@Sun.COM 33911374SSukumar.Swaminathan@Sun.COM /* Interrupt handling */ 34011374SSukumar.Swaminathan@Sun.COM int oce_setup_intr(struct oce_dev *dev); 34111374SSukumar.Swaminathan@Sun.COM int oce_teardown_intr(struct oce_dev *dev); 34211374SSukumar.Swaminathan@Sun.COM int oce_setup_handlers(struct oce_dev *dev); 34311374SSukumar.Swaminathan@Sun.COM void oce_remove_handler(struct oce_dev *dev); 34411374SSukumar.Swaminathan@Sun.COM void oce_ei(struct oce_dev *dev); 34511374SSukumar.Swaminathan@Sun.COM void oce_di(struct oce_dev *dev); 34611374SSukumar.Swaminathan@Sun.COM void oce_chip_ei(struct oce_dev *dev); 34711374SSukumar.Swaminathan@Sun.COM void oce_chip_di(struct oce_dev *dev); 34811374SSukumar.Swaminathan@Sun.COM 34911723SSukumar.Swaminathan@Sun.COM /* HW initialisation */ 35011723SSukumar.Swaminathan@Sun.COM int oce_hw_init(struct oce_dev *dev); 35111723SSukumar.Swaminathan@Sun.COM void oce_hw_fini(struct oce_dev *dev); 35211723SSukumar.Swaminathan@Sun.COM int oce_setup_adapter(struct oce_dev *dev); 35311723SSukumar.Swaminathan@Sun.COM void oce_unsetup_adapter(struct oce_dev *dev); 35411723SSukumar.Swaminathan@Sun.COM 35511374SSukumar.Swaminathan@Sun.COM #ifdef __cplusplus 35611374SSukumar.Swaminathan@Sun.COM } 35711374SSukumar.Swaminathan@Sun.COM #endif 35811374SSukumar.Swaminathan@Sun.COM 35911374SSukumar.Swaminathan@Sun.COM #endif /* _OCE_IMPL_H_ */ 360