15084Sjohnlev /* 25084Sjohnlev * CDDL HEADER START 35084Sjohnlev * 45084Sjohnlev * The contents of this file are subject to the terms of the 55084Sjohnlev * Common Development and Distribution License (the "License"). 65084Sjohnlev * You may not use this file except in compliance with the License. 75084Sjohnlev * 85084Sjohnlev * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 95084Sjohnlev * or http://www.opensolaris.org/os/licensing. 105084Sjohnlev * See the License for the specific language governing permissions 115084Sjohnlev * and limitations under the License. 125084Sjohnlev * 135084Sjohnlev * When distributing Covered Code, include this CDDL HEADER in each 145084Sjohnlev * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 155084Sjohnlev * If applicable, add the following below this CDDL HEADER, with the 165084Sjohnlev * fields enclosed by brackets "[]" replaced with your own identifying 175084Sjohnlev * information: Portions Copyright [yyyy] [name of copyright owner] 185084Sjohnlev * 195084Sjohnlev * CDDL HEADER END 205084Sjohnlev */ 215084Sjohnlev 225084Sjohnlev /* 23*10958Sdme@sun.com * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 245084Sjohnlev * Use is subject to license terms. 255084Sjohnlev */ 265084Sjohnlev 275084Sjohnlev #ifndef _SYS_XNF_H 285084Sjohnlev #define _SYS_XNF_H 295084Sjohnlev 305084Sjohnlev #ifdef __cplusplus 315084Sjohnlev extern "C" { 325084Sjohnlev #endif 335084Sjohnlev 345084Sjohnlev #define NET_TX_RING_SIZE __RING_SIZE((netif_tx_sring_t *)0, PAGESIZE) 355084Sjohnlev #define NET_RX_RING_SIZE __RING_SIZE((netif_rx_sring_t *)0, PAGESIZE) 365084Sjohnlev 375084Sjohnlev #define XNF_MAXPKT 1500 /* MTU size */ 385084Sjohnlev #define XNF_FRAMESIZE 1514 /* frame size including MAC header */ 395084Sjohnlev 405084Sjohnlev /* DEBUG flags */ 415084Sjohnlev #define XNF_DEBUG_DDI 0x01 425084Sjohnlev #define XNF_DEBUG_TRACE 0x02 435084Sjohnlev 44*10958Sdme@sun.com /* 45*10958Sdme@sun.com * Information about each receive buffer and any transmit look-aside 46*10958Sdme@sun.com * buffers. 47*10958Sdme@sun.com */ 48*10958Sdme@sun.com typedef struct xnf_buf { 49*10958Sdme@sun.com frtn_t free_rtn; 505084Sjohnlev struct xnf *xnfp; 515084Sjohnlev ddi_dma_handle_t dma_handle; 525084Sjohnlev caddr_t buf; /* DMA-able data buffer */ 535084Sjohnlev paddr_t buf_phys; 54*10958Sdme@sun.com mfn_t buf_mfn; 55*10958Sdme@sun.com size_t len; 56*10958Sdme@sun.com struct xnf_buf *next; /* For linking into free list */ 575084Sjohnlev ddi_acc_handle_t acc_handle; 585084Sjohnlev grant_ref_t grant_ref; /* grant table reference */ 595084Sjohnlev uint16_t id; /* buffer id */ 60*10958Sdme@sun.com unsigned int gen; 61*10958Sdme@sun.com } xnf_buf_t; 62*10958Sdme@sun.com 63*10958Sdme@sun.com /* 64*10958Sdme@sun.com * Information about each transmit buffer. 65*10958Sdme@sun.com */ 66*10958Sdme@sun.com typedef struct xnf_txbuf { 67*10958Sdme@sun.com struct xnf_txbuf *tx_next; 68*10958Sdme@sun.com mblk_t *tx_mp; /* mblk associated with packet */ 69*10958Sdme@sun.com netif_tx_request_t tx_txreq; 70*10958Sdme@sun.com caddr_t tx_bufp; 71*10958Sdme@sun.com ddi_dma_handle_t tx_dma_handle; 72*10958Sdme@sun.com mfn_t tx_mfn; 73*10958Sdme@sun.com xnf_buf_t *tx_bdesc; /* Look-aside buffer, if used. */ 74*10958Sdme@sun.com unsigned char tx_type; 75*10958Sdme@sun.com int16_t tx_status; 76*10958Sdme@sun.com RING_IDX tx_slot; 775084Sjohnlev 78*10958Sdme@sun.com #define TX_DATA 1 79*10958Sdme@sun.com #define TX_MCAST_REQ 2 80*10958Sdme@sun.com #define TX_MCAST_RSP 3 81*10958Sdme@sun.com } xnf_txbuf_t; 825084Sjohnlev 83*10958Sdme@sun.com /* 84*10958Sdme@sun.com * Information about each outstanding transmit operation. 85*10958Sdme@sun.com */ 86*10958Sdme@sun.com typedef struct xnf_txid { 87*10958Sdme@sun.com uint16_t id; /* Id of this transmit buffer. */ 88*10958Sdme@sun.com uint16_t next; /* Freelist of ids. */ 89*10958Sdme@sun.com xnf_txbuf_t *txbuf; /* Buffer details. */ 90*10958Sdme@sun.com } xnf_txid_t; 91*10958Sdme@sun.com 92*10958Sdme@sun.com /* 93*10958Sdme@sun.com * Per-instance data. 94*10958Sdme@sun.com */ 955084Sjohnlev typedef struct xnf { 965084Sjohnlev /* most interesting stuff first to assist debugging */ 97*10958Sdme@sun.com dev_info_t *xnf_devinfo; 98*10958Sdme@sun.com mac_handle_t xnf_mh; 995741Smrj unsigned char xnf_mac_addr[ETHERADDRL]; 100*10958Sdme@sun.com 101*10958Sdme@sun.com unsigned int xnf_gen; /* Increments on resume. */ 1025084Sjohnlev 1035741Smrj boolean_t xnf_connected; 1045741Smrj boolean_t xnf_running; 1055084Sjohnlev 106*10958Sdme@sun.com boolean_t xnf_be_rx_copy; 107*10958Sdme@sun.com boolean_t xnf_be_mcast_control; 1085084Sjohnlev 1095741Smrj uint64_t xnf_stat_interrupts; 1105741Smrj uint64_t xnf_stat_unclaimed_interrupts; 1115741Smrj uint64_t xnf_stat_norxbuf; 1126899Scz147101 uint64_t xnf_stat_drop; 1135741Smrj uint64_t xnf_stat_errrx; 1145084Sjohnlev 1155741Smrj uint64_t xnf_stat_tx_attempt; 1165741Smrj uint64_t xnf_stat_tx_pullup; 1175741Smrj uint64_t xnf_stat_tx_pagebndry; 1185741Smrj uint64_t xnf_stat_tx_defer; 1195741Smrj uint64_t xnf_stat_mac_rcv_error; 1205741Smrj uint64_t xnf_stat_runt; 1215084Sjohnlev 1225741Smrj uint64_t xnf_stat_ipackets; 1235741Smrj uint64_t xnf_stat_opackets; 1245741Smrj uint64_t xnf_stat_rbytes; 1255741Smrj uint64_t xnf_stat_obytes; 1265084Sjohnlev 1275741Smrj uint64_t xnf_stat_tx_cksum_deferred; 1285741Smrj uint64_t xnf_stat_rx_cksum_no_need; 129*10958Sdme@sun.com 130*10958Sdme@sun.com uint64_t xnf_stat_buf_allocated; 131*10958Sdme@sun.com uint64_t xnf_stat_buf_outstanding; 132*10958Sdme@sun.com uint64_t xnf_stat_gref_outstanding; 133*10958Sdme@sun.com uint64_t xnf_stat_gref_failure; 134*10958Sdme@sun.com uint64_t xnf_stat_gref_peak; 135*10958Sdme@sun.com uint64_t xnf_stat_rx_allocb_fail; 136*10958Sdme@sun.com uint64_t xnf_stat_rx_desballoc_fail; 1375084Sjohnlev 1385741Smrj kstat_t *xnf_kstat_aux; 1395084Sjohnlev 140*10958Sdme@sun.com ddi_iblock_cookie_t xnf_icookie; 1415084Sjohnlev 142*10958Sdme@sun.com netif_tx_front_ring_t xnf_tx_ring; 1435741Smrj ddi_dma_handle_t xnf_tx_ring_dma_handle; 1445741Smrj ddi_acc_handle_t xnf_tx_ring_dma_acchandle; 1455741Smrj paddr_t xnf_tx_ring_phys_addr; 1465741Smrj grant_ref_t xnf_tx_ring_ref; 1475084Sjohnlev 148*10958Sdme@sun.com xnf_txid_t xnf_tx_pkt_id[NET_TX_RING_SIZE]; 149*10958Sdme@sun.com uint16_t xnf_tx_pkt_id_head; 150*10958Sdme@sun.com kmutex_t xnf_txlock; 151*10958Sdme@sun.com kmutex_t xnf_schedlock; 152*10958Sdme@sun.com boolean_t xnf_need_sched; 153*10958Sdme@sun.com kcondvar_t xnf_cv_tx_slots; 154*10958Sdme@sun.com kmem_cache_t *xnf_tx_buf_cache; 155*10958Sdme@sun.com 156*10958Sdme@sun.com netif_rx_front_ring_t xnf_rx_ring; 1575741Smrj ddi_dma_handle_t xnf_rx_ring_dma_handle; 1585741Smrj ddi_acc_handle_t xnf_rx_ring_dma_acchandle; 1595741Smrj paddr_t xnf_rx_ring_phys_addr; 1605741Smrj grant_ref_t xnf_rx_ring_ref; 1615084Sjohnlev 162*10958Sdme@sun.com xnf_buf_t *xnf_rx_pkt_info[NET_RX_RING_SIZE]; 163*10958Sdme@sun.com kmutex_t xnf_rxlock; 164*10958Sdme@sun.com mblk_t *xnf_rx_head; 165*10958Sdme@sun.com mblk_t *xnf_rx_tail; 166*10958Sdme@sun.com boolean_t xnf_rx_new_buffers_posted; 167*10958Sdme@sun.com kmem_cache_t *xnf_buf_cache; 1685741Smrj 169*10958Sdme@sun.com uint16_t xnf_evtchn; 170*10958Sdme@sun.com 171*10958Sdme@sun.com kmutex_t xnf_gref_lock; 172*10958Sdme@sun.com grant_ref_t xnf_gref_head; 173*10958Sdme@sun.com 174*10958Sdme@sun.com kcondvar_t xnf_cv_state; 175*10958Sdme@sun.com kcondvar_t xnf_cv_multicast; 176*10958Sdme@sun.com uint_t xnf_pending_multicast; 1775084Sjohnlev } xnf_t; 1785084Sjohnlev 1795084Sjohnlev #ifdef __cplusplus 1805084Sjohnlev } 1815084Sjohnlev #endif 1825084Sjohnlev 1835084Sjohnlev #endif /* _SYS_XNF_H */ 184