110393SSaurabh.Mishra@Sun.COM /* 210393SSaurabh.Mishra@Sun.COM * CDDL HEADER START 310393SSaurabh.Mishra@Sun.COM * 410393SSaurabh.Mishra@Sun.COM * The contents of this file are subject to the terms of the 510393SSaurabh.Mishra@Sun.COM * Common Development and Distribution License (the "License"). 610393SSaurabh.Mishra@Sun.COM * You may not use this file except in compliance with the License. 710393SSaurabh.Mishra@Sun.COM * 810393SSaurabh.Mishra@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 910393SSaurabh.Mishra@Sun.COM * or http://www.opensolaris.org/os/licensing. 1010393SSaurabh.Mishra@Sun.COM * See the License for the specific language governing permissions 1110393SSaurabh.Mishra@Sun.COM * and limitations under the License. 1210393SSaurabh.Mishra@Sun.COM * 1310393SSaurabh.Mishra@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 1410393SSaurabh.Mishra@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1510393SSaurabh.Mishra@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 1610393SSaurabh.Mishra@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 1710393SSaurabh.Mishra@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 1810393SSaurabh.Mishra@Sun.COM * 1910393SSaurabh.Mishra@Sun.COM * CDDL HEADER END 2010393SSaurabh.Mishra@Sun.COM */ 2110393SSaurabh.Mishra@Sun.COM /* 22*11878SVenu.Iyer@Sun.COM * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 2310393SSaurabh.Mishra@Sun.COM * Use is subject to license terms. 2410393SSaurabh.Mishra@Sun.COM */ 2510393SSaurabh.Mishra@Sun.COM 2610393SSaurabh.Mishra@Sun.COM #ifndef _ATGE_H 2710393SSaurabh.Mishra@Sun.COM #define _ATGE_H 2810393SSaurabh.Mishra@Sun.COM 2910393SSaurabh.Mishra@Sun.COM #ifdef __cplusplus 3010393SSaurabh.Mishra@Sun.COM extern "C" { 3110393SSaurabh.Mishra@Sun.COM #endif 3210393SSaurabh.Mishra@Sun.COM 33*11878SVenu.Iyer@Sun.COM #include <sys/ethernet.h> 3410393SSaurabh.Mishra@Sun.COM #include <sys/mac_provider.h> 3510393SSaurabh.Mishra@Sun.COM #include "atge_l1e_reg.h" 3610393SSaurabh.Mishra@Sun.COM 3710393SSaurabh.Mishra@Sun.COM #define ATGE_PCI_REG_NUMBER 1 3810393SSaurabh.Mishra@Sun.COM 3910393SSaurabh.Mishra@Sun.COM #define ROUNDUP(x, a) (((x) + (a) - 1) & ~((a) - 1)) 4010393SSaurabh.Mishra@Sun.COM 4110393SSaurabh.Mishra@Sun.COM /* 4210393SSaurabh.Mishra@Sun.COM * Flags. 4310393SSaurabh.Mishra@Sun.COM */ 4410393SSaurabh.Mishra@Sun.COM #define ATGE_FLAG_PCIE 0x0001 4510393SSaurabh.Mishra@Sun.COM #define ATGE_FIXED_TYPE 0x0002 4610393SSaurabh.Mishra@Sun.COM #define ATGE_MSI_TYPE 0x0004 4710393SSaurabh.Mishra@Sun.COM #define ATGE_MSIX_TYPE 0x0008 4810393SSaurabh.Mishra@Sun.COM #define ATGE_FLAG_FASTETHER 0x0010 4910393SSaurabh.Mishra@Sun.COM #define ATGE_FLAG_JUMBO 0x0020 5011353SSaurabh.Mishra@Sun.COM #define ATGE_MII_CHECK 0x0040 5110393SSaurabh.Mishra@Sun.COM 5210393SSaurabh.Mishra@Sun.COM #define ATGE_CHIP_L1_DEV_ID 0x1048 5310393SSaurabh.Mishra@Sun.COM #define ATGE_CHIP_L2_DEV_ID 0x2048 5410393SSaurabh.Mishra@Sun.COM #define ATGE_CHIP_L1E_DEV_ID 0x1026 5510393SSaurabh.Mishra@Sun.COM 5610393SSaurabh.Mishra@Sun.COM #define ATGE_PROMISC 0x001 5710393SSaurabh.Mishra@Sun.COM #define ATGE_ALL_MULTICST 0x002 5810393SSaurabh.Mishra@Sun.COM 5910393SSaurabh.Mishra@Sun.COM /* 6010393SSaurabh.Mishra@Sun.COM * Timer for one second interval. 6110393SSaurabh.Mishra@Sun.COM */ 6210393SSaurabh.Mishra@Sun.COM #define ATGE_TIMER_INTERVAL (1000 * 1000 * 1000) 6310393SSaurabh.Mishra@Sun.COM 6410393SSaurabh.Mishra@Sun.COM /* 6510393SSaurabh.Mishra@Sun.COM * Chip state. 6610393SSaurabh.Mishra@Sun.COM */ 6710393SSaurabh.Mishra@Sun.COM #define ATGE_CHIP_INITIALIZED 0x0001 6810393SSaurabh.Mishra@Sun.COM #define ATGE_CHIP_RUNNING 0x0002 6910393SSaurabh.Mishra@Sun.COM #define ATGE_CHIP_STOPPED 0x0004 7010393SSaurabh.Mishra@Sun.COM #define ATGE_CHIP_SUSPENDED 0x0008 7110393SSaurabh.Mishra@Sun.COM 7210393SSaurabh.Mishra@Sun.COM #define ETHER_CRC_LEN 0x4 7310393SSaurabh.Mishra@Sun.COM 7410393SSaurabh.Mishra@Sun.COM /* 7510393SSaurabh.Mishra@Sun.COM * Descriptor increment and decrment operation. 7610393SSaurabh.Mishra@Sun.COM */ 7711353SSaurabh.Mishra@Sun.COM #define ATGE_INC_SLOT(x, y) \ 7811353SSaurabh.Mishra@Sun.COM ((x) = ((x) + 1) % (y)) 7911353SSaurabh.Mishra@Sun.COM 8011353SSaurabh.Mishra@Sun.COM #define ATGE_DEC_SLOT(x, y) \ 8111353SSaurabh.Mishra@Sun.COM (x = ((x + y - 1) % y)) 8210393SSaurabh.Mishra@Sun.COM 8310393SSaurabh.Mishra@Sun.COM /* 8410393SSaurabh.Mishra@Sun.COM * I/O instructions 8510393SSaurabh.Mishra@Sun.COM */ 8610393SSaurabh.Mishra@Sun.COM #define OUTB(atge, p, v) \ 8710393SSaurabh.Mishra@Sun.COM ddi_put8((atge)->atge_io_handle, \ 8810393SSaurabh.Mishra@Sun.COM (void *)((caddr_t)((atge)->atge_io_regs) + (p)), v) 8910393SSaurabh.Mishra@Sun.COM 9010393SSaurabh.Mishra@Sun.COM #define OUTW(atge, p, v) \ 9110393SSaurabh.Mishra@Sun.COM ddi_put16((atge)->atge_io_handle, \ 9210393SSaurabh.Mishra@Sun.COM (void *)((caddr_t)((atge)->atge_io_regs) + (p)), v) 9310393SSaurabh.Mishra@Sun.COM 9410393SSaurabh.Mishra@Sun.COM #define OUTL(atge, p, v) \ 9510393SSaurabh.Mishra@Sun.COM ddi_put32((atge)->atge_io_handle, \ 9610393SSaurabh.Mishra@Sun.COM (void *)((caddr_t)((atge)->atge_io_regs) + (p)), v) 9710393SSaurabh.Mishra@Sun.COM 9810393SSaurabh.Mishra@Sun.COM #define INB(atge, p) \ 9910393SSaurabh.Mishra@Sun.COM ddi_get8((atge)->atge_io_handle, \ 10010393SSaurabh.Mishra@Sun.COM (void *)(((caddr_t)(atge)->atge_io_regs) + (p))) 10110393SSaurabh.Mishra@Sun.COM #define INW(atge, p) \ 10210393SSaurabh.Mishra@Sun.COM ddi_get16((atge)->atge_io_handle, \ 10310393SSaurabh.Mishra@Sun.COM (void *)(((caddr_t)(atge)->atge_io_regs) + (p))) 10410393SSaurabh.Mishra@Sun.COM 10510393SSaurabh.Mishra@Sun.COM #define INL(atge, p) \ 10610393SSaurabh.Mishra@Sun.COM ddi_get32((atge)->atge_io_handle, \ 10710393SSaurabh.Mishra@Sun.COM (void *)(((caddr_t)(atge)->atge_io_regs) + (p))) 10810393SSaurabh.Mishra@Sun.COM 10910393SSaurabh.Mishra@Sun.COM #define FLUSH(atge, reg) \ 11010393SSaurabh.Mishra@Sun.COM (void) INL(atge, reg) 11110393SSaurabh.Mishra@Sun.COM 11210393SSaurabh.Mishra@Sun.COM #define OUTL_OR(atge, reg, v) \ 11310393SSaurabh.Mishra@Sun.COM OUTL(atge, reg, (INL(atge, reg) | v)) 11410393SSaurabh.Mishra@Sun.COM 11510393SSaurabh.Mishra@Sun.COM #define OUTL_AND(atge, reg, v) \ 11610393SSaurabh.Mishra@Sun.COM OUTL(atge, reg, (INL(atge, reg) & v)) 11710393SSaurabh.Mishra@Sun.COM 11810393SSaurabh.Mishra@Sun.COM /* 11910393SSaurabh.Mishra@Sun.COM * Descriptor and other endianess aware access. 12010393SSaurabh.Mishra@Sun.COM */ 12110393SSaurabh.Mishra@Sun.COM #define ATGE_PUT64(dma, addr, v) \ 12210393SSaurabh.Mishra@Sun.COM ddi_put64(dma->acchdl, (addr), (v)) 12310393SSaurabh.Mishra@Sun.COM 12410393SSaurabh.Mishra@Sun.COM #define ATGE_PUT32(dma, addr, v) \ 12510393SSaurabh.Mishra@Sun.COM ddi_put32(dma->acchdl, (addr), (v)) 12610393SSaurabh.Mishra@Sun.COM 12710393SSaurabh.Mishra@Sun.COM #define ATGE_GET32(dma, addr) \ 12810393SSaurabh.Mishra@Sun.COM ddi_get32(dma->acchdl, (addr)) 12910393SSaurabh.Mishra@Sun.COM 13010393SSaurabh.Mishra@Sun.COM #define ATGE_GET64(dma, addr) \ 13110393SSaurabh.Mishra@Sun.COM ddi_get64(dma->acchdl, (addr)) 13210393SSaurabh.Mishra@Sun.COM 13310393SSaurabh.Mishra@Sun.COM #define DMA_SYNC(dma, s, l, d) \ 13410393SSaurabh.Mishra@Sun.COM (void) ddi_dma_sync(dma->hdl, (off_t)(s), (l), d) 13510393SSaurabh.Mishra@Sun.COM 13610393SSaurabh.Mishra@Sun.COM 13710393SSaurabh.Mishra@Sun.COM #define ATGE_ADDR_LO(x) ((uint64_t)(x) & 0xFFFFFFFF) 13810393SSaurabh.Mishra@Sun.COM #define ATGE_ADDR_HI(x) ((uint64_t)(x) >> 32) 13910393SSaurabh.Mishra@Sun.COM 14010393SSaurabh.Mishra@Sun.COM 14110393SSaurabh.Mishra@Sun.COM /* 14210393SSaurabh.Mishra@Sun.COM * General purpose macros. 14310393SSaurabh.Mishra@Sun.COM */ 14410393SSaurabh.Mishra@Sun.COM #define ATGE_MODEL(atgep) atgep->atge_model 14510393SSaurabh.Mishra@Sun.COM 14610393SSaurabh.Mishra@Sun.COM /* 14710393SSaurabh.Mishra@Sun.COM * Different type of chip models. 14810393SSaurabh.Mishra@Sun.COM */ 14910393SSaurabh.Mishra@Sun.COM typedef enum { 15010393SSaurabh.Mishra@Sun.COM ATGE_CHIP_L1 = 1, 15110393SSaurabh.Mishra@Sun.COM ATGE_CHIP_L2, 15210393SSaurabh.Mishra@Sun.COM ATGE_CHIP_L1E, 15310393SSaurabh.Mishra@Sun.COM } atge_model_t; 15410393SSaurabh.Mishra@Sun.COM 15510393SSaurabh.Mishra@Sun.COM typedef struct atge_cards { 15610393SSaurabh.Mishra@Sun.COM uint16_t vendor_id; /* PCI vendor id */ 15710393SSaurabh.Mishra@Sun.COM uint16_t device_id; /* PCI device id */ 15810393SSaurabh.Mishra@Sun.COM char *cardname; /* Description of the card */ 15910393SSaurabh.Mishra@Sun.COM atge_model_t model; /* Model of the card */ 16010393SSaurabh.Mishra@Sun.COM } atge_cards_t; 16110393SSaurabh.Mishra@Sun.COM 16210393SSaurabh.Mishra@Sun.COM /* 16310393SSaurabh.Mishra@Sun.COM * Number of Descriptors for TX and RX Ring. 16410393SSaurabh.Mishra@Sun.COM */ 16510393SSaurabh.Mishra@Sun.COM #define ATGE_TX_NUM_DESC 256 16610393SSaurabh.Mishra@Sun.COM #define ATGE_RX_NUM_DESC 256 16710393SSaurabh.Mishra@Sun.COM 16810393SSaurabh.Mishra@Sun.COM /* 16910393SSaurabh.Mishra@Sun.COM * DMA Handle for all DMA work. 17010393SSaurabh.Mishra@Sun.COM */ 17110393SSaurabh.Mishra@Sun.COM typedef struct atge_dma_data { 17210393SSaurabh.Mishra@Sun.COM ddi_dma_handle_t hdl; 17310393SSaurabh.Mishra@Sun.COM ddi_acc_handle_t acchdl; 17410393SSaurabh.Mishra@Sun.COM ddi_dma_cookie_t cookie; 17510393SSaurabh.Mishra@Sun.COM caddr_t addr; 17610393SSaurabh.Mishra@Sun.COM size_t len; 17710393SSaurabh.Mishra@Sun.COM uint_t count; 17810393SSaurabh.Mishra@Sun.COM } atge_dma_t; 17910393SSaurabh.Mishra@Sun.COM 18010393SSaurabh.Mishra@Sun.COM struct atge; 18110393SSaurabh.Mishra@Sun.COM 18210393SSaurabh.Mishra@Sun.COM /* 18310393SSaurabh.Mishra@Sun.COM * Structure for ring data (TX/RX). 18410393SSaurabh.Mishra@Sun.COM */ 18510393SSaurabh.Mishra@Sun.COM typedef struct atge_ring { 18610393SSaurabh.Mishra@Sun.COM struct atge *r_atge; 18710393SSaurabh.Mishra@Sun.COM atge_dma_t **r_buf_tbl; 18810393SSaurabh.Mishra@Sun.COM atge_dma_t *r_desc_ring; 18910393SSaurabh.Mishra@Sun.COM int r_ndesc; 19010393SSaurabh.Mishra@Sun.COM int r_consumer; 19110393SSaurabh.Mishra@Sun.COM int r_producer; 19210393SSaurabh.Mishra@Sun.COM int r_avail_desc; 19310393SSaurabh.Mishra@Sun.COM } atge_ring_t; 19410393SSaurabh.Mishra@Sun.COM 19510393SSaurabh.Mishra@Sun.COM /* 19610393SSaurabh.Mishra@Sun.COM * L1E specific private data. 19710393SSaurabh.Mishra@Sun.COM */ 19810393SSaurabh.Mishra@Sun.COM typedef struct atge_l1e_data { 19910393SSaurabh.Mishra@Sun.COM atge_dma_t **atge_l1e_rx_page; 20010393SSaurabh.Mishra@Sun.COM atge_dma_t *atge_l1e_rx_cmb; 20110393SSaurabh.Mishra@Sun.COM int atge_l1e_pagesize; 20210393SSaurabh.Mishra@Sun.COM int atge_l1e_rx_curp; 20310393SSaurabh.Mishra@Sun.COM uint16_t atge_l1e_rx_seqno; 20410393SSaurabh.Mishra@Sun.COM uint32_t atge_l1e_proc_max; 20510393SSaurabh.Mishra@Sun.COM uint32_t atge_l1e_rx_page_cons; 20610393SSaurabh.Mishra@Sun.COM uint32_t atge_l1e_rx_page_prods[L1E_RX_PAGES]; 20710393SSaurabh.Mishra@Sun.COM } atge_l1e_data_t; 20810393SSaurabh.Mishra@Sun.COM 20910393SSaurabh.Mishra@Sun.COM /* 21011353SSaurabh.Mishra@Sun.COM * L1 specific private data. 21111353SSaurabh.Mishra@Sun.COM */ 21211353SSaurabh.Mishra@Sun.COM typedef struct atge_l1_data { 21311353SSaurabh.Mishra@Sun.COM atge_ring_t *atge_rx_ring; 21411353SSaurabh.Mishra@Sun.COM atge_dma_t *atge_l1_cmb; 21511353SSaurabh.Mishra@Sun.COM atge_dma_t *atge_l1_rr; 21611353SSaurabh.Mishra@Sun.COM atge_dma_t *atge_l1_smb; 21711353SSaurabh.Mishra@Sun.COM int atge_l1_rr_consumers; 21811353SSaurabh.Mishra@Sun.COM uint32_t atge_l1_intr_status; 21911353SSaurabh.Mishra@Sun.COM uint32_t atge_l1_rx_prod_cons; 22011353SSaurabh.Mishra@Sun.COM uint32_t atge_l1_tx_prod_cons; 22111353SSaurabh.Mishra@Sun.COM } atge_l1_data_t; 22211353SSaurabh.Mishra@Sun.COM 22311353SSaurabh.Mishra@Sun.COM /* 22411353SSaurabh.Mishra@Sun.COM * TX descriptor table is same with L1, L1E and L2E chips. 22511353SSaurabh.Mishra@Sun.COM */ 22611353SSaurabh.Mishra@Sun.COM #pragma pack(1) 22711353SSaurabh.Mishra@Sun.COM typedef struct atge_tx_desc { 22811353SSaurabh.Mishra@Sun.COM uint64_t addr; 22911353SSaurabh.Mishra@Sun.COM uint32_t len; 23011353SSaurabh.Mishra@Sun.COM uint32_t flags; 23111353SSaurabh.Mishra@Sun.COM } atge_tx_desc_t; 23211353SSaurabh.Mishra@Sun.COM #pragma pack() 23311353SSaurabh.Mishra@Sun.COM 23411353SSaurabh.Mishra@Sun.COM #define ATGE_TX_RING_CNT 256 23511353SSaurabh.Mishra@Sun.COM #define ATGE_TX_RING_SZ \ 23611353SSaurabh.Mishra@Sun.COM (sizeof (struct atge_tx_desc) * ATGE_TX_RING_CNT) 23711353SSaurabh.Mishra@Sun.COM 23811353SSaurabh.Mishra@Sun.COM /* 23910393SSaurabh.Mishra@Sun.COM * Private instance data structure (per-instance soft-state). 24010393SSaurabh.Mishra@Sun.COM */ 24110393SSaurabh.Mishra@Sun.COM typedef struct atge { 24210393SSaurabh.Mishra@Sun.COM /* 24310393SSaurabh.Mishra@Sun.COM * Lock for the TX ring, RX ring and interrupt. In order to align 24410393SSaurabh.Mishra@Sun.COM * these locks at 8-byte boundary, we have kept it at the beginning 24510393SSaurabh.Mishra@Sun.COM * of atge_t. 24610393SSaurabh.Mishra@Sun.COM */ 24710393SSaurabh.Mishra@Sun.COM kmutex_t atge_tx_lock; 24810393SSaurabh.Mishra@Sun.COM kmutex_t atge_rx_lock; 24910393SSaurabh.Mishra@Sun.COM kmutex_t atge_intr_lock; 25010393SSaurabh.Mishra@Sun.COM kmutex_t atge_mii_lock; 25111353SSaurabh.Mishra@Sun.COM kmutex_t atge_mbox_lock; 25210393SSaurabh.Mishra@Sun.COM 25310393SSaurabh.Mishra@Sun.COM /* 25410393SSaurabh.Mishra@Sun.COM * Instance number and devinfo pointer. 25510393SSaurabh.Mishra@Sun.COM */ 25610393SSaurabh.Mishra@Sun.COM int atge_unit; 25710393SSaurabh.Mishra@Sun.COM dev_info_t *atge_dip; 25810393SSaurabh.Mishra@Sun.COM char atge_name[8]; 25910393SSaurabh.Mishra@Sun.COM atge_model_t atge_model; 26010393SSaurabh.Mishra@Sun.COM int atge_chip_rev; 26110393SSaurabh.Mishra@Sun.COM uint8_t atge_revid; 26210393SSaurabh.Mishra@Sun.COM 26310393SSaurabh.Mishra@Sun.COM /* 26410393SSaurabh.Mishra@Sun.COM * Mac handle. 26510393SSaurabh.Mishra@Sun.COM */ 26610393SSaurabh.Mishra@Sun.COM mac_handle_t atge_mh; 26710393SSaurabh.Mishra@Sun.COM 26810393SSaurabh.Mishra@Sun.COM /* 26910393SSaurabh.Mishra@Sun.COM * MII layer handle. 27010393SSaurabh.Mishra@Sun.COM */ 27110393SSaurabh.Mishra@Sun.COM mii_handle_t atge_mii; 27210393SSaurabh.Mishra@Sun.COM link_state_t atge_link_state; 27310393SSaurabh.Mishra@Sun.COM 27410393SSaurabh.Mishra@Sun.COM /* 27510393SSaurabh.Mishra@Sun.COM * Config Space Handle. 27610393SSaurabh.Mishra@Sun.COM */ 27710393SSaurabh.Mishra@Sun.COM ddi_acc_handle_t atge_conf_handle; 27810393SSaurabh.Mishra@Sun.COM 27910393SSaurabh.Mishra@Sun.COM /* 28010393SSaurabh.Mishra@Sun.COM * IO registers mapped by DDI. 28110393SSaurabh.Mishra@Sun.COM */ 28210393SSaurabh.Mishra@Sun.COM ddi_acc_handle_t atge_io_handle; 28310393SSaurabh.Mishra@Sun.COM caddr_t atge_io_regs; 28410393SSaurabh.Mishra@Sun.COM uint_t atge_intrs; 28510393SSaurabh.Mishra@Sun.COM 28610393SSaurabh.Mishra@Sun.COM /* 28710393SSaurabh.Mishra@Sun.COM * Interrupt management structures. 28810393SSaurabh.Mishra@Sun.COM */ 28910393SSaurabh.Mishra@Sun.COM ddi_intr_handle_t *atge_intr_handle; 29010393SSaurabh.Mishra@Sun.COM int atge_intr_types; 29110393SSaurabh.Mishra@Sun.COM int atge_intr_cnt; 29210393SSaurabh.Mishra@Sun.COM uint_t atge_intr_pri; 29310393SSaurabh.Mishra@Sun.COM int atge_intr_size; 29410393SSaurabh.Mishra@Sun.COM int atge_intr_cap; 29510393SSaurabh.Mishra@Sun.COM 29610393SSaurabh.Mishra@Sun.COM /* 29710393SSaurabh.Mishra@Sun.COM * Common structures. 29810393SSaurabh.Mishra@Sun.COM */ 29910393SSaurabh.Mishra@Sun.COM atge_ring_t *atge_tx_ring; 30010393SSaurabh.Mishra@Sun.COM int atge_tx_resched; 30110393SSaurabh.Mishra@Sun.COM int atge_mtu; 30210393SSaurabh.Mishra@Sun.COM int atge_int_mod; 30310393SSaurabh.Mishra@Sun.COM int atge_max_frame_size; 30410393SSaurabh.Mishra@Sun.COM 30511353SSaurabh.Mishra@Sun.COM 30610393SSaurabh.Mishra@Sun.COM /* 30710393SSaurabh.Mishra@Sun.COM * Ethernet addresses. 30810393SSaurabh.Mishra@Sun.COM */ 30910393SSaurabh.Mishra@Sun.COM ether_addr_t atge_ether_addr; 31010393SSaurabh.Mishra@Sun.COM ether_addr_t atge_dev_addr; 31110393SSaurabh.Mishra@Sun.COM uint64_t atge_mchash; 31210393SSaurabh.Mishra@Sun.COM uint32_t atge_mchash_ref_cnt[64]; 31310393SSaurabh.Mishra@Sun.COM 31410393SSaurabh.Mishra@Sun.COM /* 31510393SSaurabh.Mishra@Sun.COM * PHY register. 31610393SSaurabh.Mishra@Sun.COM */ 31710393SSaurabh.Mishra@Sun.COM int atge_phyaddr; 31810393SSaurabh.Mishra@Sun.COM 31910393SSaurabh.Mishra@Sun.COM /* 32010393SSaurabh.Mishra@Sun.COM * Flags. 32110393SSaurabh.Mishra@Sun.COM */ 32210393SSaurabh.Mishra@Sun.COM int atge_flags; 32310393SSaurabh.Mishra@Sun.COM uint32_t atge_dma_rd_burst; 32410393SSaurabh.Mishra@Sun.COM uint32_t atge_dma_wr_burst; 32510393SSaurabh.Mishra@Sun.COM int atge_filter_flags; 32610393SSaurabh.Mishra@Sun.COM int atge_chip_state; 32710393SSaurabh.Mishra@Sun.COM 32810393SSaurabh.Mishra@Sun.COM /* 32910393SSaurabh.Mishra@Sun.COM * Private data for the chip. 33010393SSaurabh.Mishra@Sun.COM */ 33110393SSaurabh.Mishra@Sun.COM void *atge_private_data; 33210393SSaurabh.Mishra@Sun.COM 33310393SSaurabh.Mishra@Sun.COM /* 33410393SSaurabh.Mishra@Sun.COM * Buffer length. 33510393SSaurabh.Mishra@Sun.COM */ 33610393SSaurabh.Mishra@Sun.COM int atge_rx_buf_len; 33710393SSaurabh.Mishra@Sun.COM int atge_tx_buf_len; 33810393SSaurabh.Mishra@Sun.COM 33910393SSaurabh.Mishra@Sun.COM /* 34010393SSaurabh.Mishra@Sun.COM * Common stats. 34110393SSaurabh.Mishra@Sun.COM */ 34210393SSaurabh.Mishra@Sun.COM void *atge_hw_stats; 34310393SSaurabh.Mishra@Sun.COM uint64_t atge_ipackets; 34410393SSaurabh.Mishra@Sun.COM uint64_t atge_opackets; 34510393SSaurabh.Mishra@Sun.COM uint64_t atge_rbytes; 34610393SSaurabh.Mishra@Sun.COM uint64_t atge_obytes; 34710393SSaurabh.Mishra@Sun.COM uint64_t atge_brdcstxmt; 34810393SSaurabh.Mishra@Sun.COM uint64_t atge_multixmt; 34910393SSaurabh.Mishra@Sun.COM uint64_t atge_brdcstrcv; 35010393SSaurabh.Mishra@Sun.COM uint64_t atge_multircv; 35110393SSaurabh.Mishra@Sun.COM unsigned atge_norcvbuf; 35210393SSaurabh.Mishra@Sun.COM unsigned atge_errrcv; 35310393SSaurabh.Mishra@Sun.COM unsigned atge_errxmt; 35410393SSaurabh.Mishra@Sun.COM unsigned atge_missed; 35510393SSaurabh.Mishra@Sun.COM unsigned atge_underflow; 35610393SSaurabh.Mishra@Sun.COM unsigned atge_overflow; 35710393SSaurabh.Mishra@Sun.COM unsigned atge_align_errors; 35810393SSaurabh.Mishra@Sun.COM unsigned atge_fcs_errors; 35910393SSaurabh.Mishra@Sun.COM unsigned atge_carrier_errors; 36010393SSaurabh.Mishra@Sun.COM unsigned atge_collisions; 36110393SSaurabh.Mishra@Sun.COM unsigned atge_ex_collisions; 36210393SSaurabh.Mishra@Sun.COM unsigned atge_tx_late_collisions; 36310393SSaurabh.Mishra@Sun.COM unsigned atge_defer_xmts; 36410393SSaurabh.Mishra@Sun.COM unsigned atge_first_collisions; 36510393SSaurabh.Mishra@Sun.COM unsigned atge_multi_collisions; 36610393SSaurabh.Mishra@Sun.COM unsigned atge_sqe_errors; 36710393SSaurabh.Mishra@Sun.COM unsigned atge_macxmt_errors; 36810393SSaurabh.Mishra@Sun.COM unsigned atge_macrcv_errors; 36910393SSaurabh.Mishra@Sun.COM unsigned atge_toolong_errors; 37010393SSaurabh.Mishra@Sun.COM unsigned atge_runt; 37110393SSaurabh.Mishra@Sun.COM unsigned atge_jabber; 37210393SSaurabh.Mishra@Sun.COM unsigned atge_noxmtbuf; 37310393SSaurabh.Mishra@Sun.COM } atge_t; 37410393SSaurabh.Mishra@Sun.COM 37510393SSaurabh.Mishra@Sun.COM /* 37610393SSaurabh.Mishra@Sun.COM * extern functions. 37710393SSaurabh.Mishra@Sun.COM */ 37810393SSaurabh.Mishra@Sun.COM extern void atge_error(dev_info_t *, char *, ...); 37910393SSaurabh.Mishra@Sun.COM 38010393SSaurabh.Mishra@Sun.COM /* 38110393SSaurabh.Mishra@Sun.COM * Debugging Support. 38210393SSaurabh.Mishra@Sun.COM */ 38310393SSaurabh.Mishra@Sun.COM #ifdef DEBUG 38410393SSaurabh.Mishra@Sun.COM #define ATGE_DB(arg) atge_debug_func arg 38510393SSaurabh.Mishra@Sun.COM #else 38610393SSaurabh.Mishra@Sun.COM #define ATGE_DB(arg) 38710393SSaurabh.Mishra@Sun.COM #endif 38810393SSaurabh.Mishra@Sun.COM 38910393SSaurabh.Mishra@Sun.COM extern int atge_debug; 39010393SSaurabh.Mishra@Sun.COM extern void atge_debug_func(char *, ...); 39110393SSaurabh.Mishra@Sun.COM extern atge_dma_t *atge_alloc_a_dma_blk(atge_t *, ddi_dma_attr_t *, 39210393SSaurabh.Mishra@Sun.COM int, int); 39310393SSaurabh.Mishra@Sun.COM extern void atge_free_a_dma_blk(atge_dma_t *); 39410393SSaurabh.Mishra@Sun.COM extern atge_dma_t *atge_buf_alloc(atge_t *, size_t, int); 39510393SSaurabh.Mishra@Sun.COM extern void atge_buf_free(atge_dma_t *); 39610393SSaurabh.Mishra@Sun.COM extern mblk_t *atge_get_mblk(int); 39710393SSaurabh.Mishra@Sun.COM extern void atge_device_restart(atge_t *); 39810393SSaurabh.Mishra@Sun.COM extern int atge_alloc_buffers(atge_ring_t *, size_t, size_t, int); 39910393SSaurabh.Mishra@Sun.COM extern void atge_free_buffers(atge_ring_t *, size_t); 40010393SSaurabh.Mishra@Sun.COM extern void atge_stop_timer(atge_t *); 40110393SSaurabh.Mishra@Sun.COM extern void atge_start_timer(atge_t *); 40210393SSaurabh.Mishra@Sun.COM extern void atge_mii_write(void *, uint8_t, uint8_t, uint16_t); 40311353SSaurabh.Mishra@Sun.COM extern uint16_t atge_mii_read(void *, uint8_t, uint8_t); 40411353SSaurabh.Mishra@Sun.COM extern void atge_device_stop(atge_t *); 40511353SSaurabh.Mishra@Sun.COM extern void atge_tx_reclaim(atge_t *, int); 40611353SSaurabh.Mishra@Sun.COM 40710393SSaurabh.Mishra@Sun.COM 40810393SSaurabh.Mishra@Sun.COM #ifdef __cplusplus 40910393SSaurabh.Mishra@Sun.COM } 41010393SSaurabh.Mishra@Sun.COM #endif 41110393SSaurabh.Mishra@Sun.COM 41210393SSaurabh.Mishra@Sun.COM #endif /* _ATGE_H */ 413