/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _SYS_XNF_H #define _SYS_XNF_H #ifdef __cplusplus extern "C" { #endif #define NET_TX_RING_SIZE __CONST_RING_SIZE(netif_tx, PAGESIZE) #define NET_RX_RING_SIZE __CONST_RING_SIZE(netif_rx, PAGESIZE) #define XNF_MAXPKT 1500 /* MTU size */ #define XNF_FRAMESIZE 1514 /* frame size including MAC header */ /* DEBUG flags */ #define XNF_DEBUG_DDI 0x01 #define XNF_DEBUG_TRACE 0x02 /* * Information about each receive buffer and any transmit look-aside * buffers. */ typedef struct xnf_buf { frtn_t free_rtn; struct xnf *xnfp; ddi_dma_handle_t dma_handle; caddr_t buf; /* DMA-able data buffer */ paddr_t buf_phys; mfn_t buf_mfn; size_t len; struct xnf_buf *next; /* For linking into free list */ ddi_acc_handle_t acc_handle; grant_ref_t grant_ref; /* grant table reference */ uint16_t id; /* buffer id */ unsigned int gen; } xnf_buf_t; /* * Information about each transmit buffer. */ typedef struct xnf_txbuf { struct xnf_txbuf *tx_next; mblk_t *tx_mp; /* mblk associated with packet */ netif_tx_request_t tx_txreq; caddr_t tx_bufp; ddi_dma_handle_t tx_dma_handle; mfn_t tx_mfn; xnf_buf_t *tx_bdesc; /* Look-aside buffer, if used. */ unsigned char tx_type; int16_t tx_status; RING_IDX tx_slot; #define TX_DATA 1 #define TX_MCAST_REQ 2 #define TX_MCAST_RSP 3 } xnf_txbuf_t; /* * Information about each outstanding transmit operation. */ typedef struct xnf_txid { uint16_t id; /* Id of this transmit buffer. */ uint16_t next; /* Freelist of ids. */ xnf_txbuf_t *txbuf; /* Buffer details. */ } xnf_txid_t; /* * Per-instance data. */ typedef struct xnf { /* most interesting stuff first to assist debugging */ dev_info_t *xnf_devinfo; mac_handle_t xnf_mh; unsigned char xnf_mac_addr[ETHERADDRL]; unsigned int xnf_gen; /* Increments on resume. */ boolean_t xnf_connected; boolean_t xnf_running; boolean_t xnf_be_rx_copy; boolean_t xnf_be_mcast_control; uint64_t xnf_stat_interrupts; uint64_t xnf_stat_unclaimed_interrupts; uint64_t xnf_stat_norxbuf; uint64_t xnf_stat_drop; uint64_t xnf_stat_errrx; uint64_t xnf_stat_tx_attempt; uint64_t xnf_stat_tx_pullup; uint64_t xnf_stat_tx_pagebndry; uint64_t xnf_stat_tx_defer; uint64_t xnf_stat_mac_rcv_error; uint64_t xnf_stat_runt; uint64_t xnf_stat_ipackets; uint64_t xnf_stat_opackets; uint64_t xnf_stat_rbytes; uint64_t xnf_stat_obytes; uint64_t xnf_stat_tx_cksum_deferred; uint64_t xnf_stat_rx_cksum_no_need; uint64_t xnf_stat_buf_allocated; uint64_t xnf_stat_buf_outstanding; uint64_t xnf_stat_gref_outstanding; uint64_t xnf_stat_gref_failure; uint64_t xnf_stat_gref_peak; uint64_t xnf_stat_rx_allocb_fail; uint64_t xnf_stat_rx_desballoc_fail; kstat_t *xnf_kstat_aux; ddi_iblock_cookie_t xnf_icookie; netif_tx_front_ring_t xnf_tx_ring; ddi_dma_handle_t xnf_tx_ring_dma_handle; ddi_acc_handle_t xnf_tx_ring_dma_acchandle; paddr_t xnf_tx_ring_phys_addr; grant_ref_t xnf_tx_ring_ref; xnf_txid_t xnf_tx_pkt_id[NET_TX_RING_SIZE]; uint16_t xnf_tx_pkt_id_head; kmutex_t xnf_txlock; kmutex_t xnf_schedlock; boolean_t xnf_need_sched; kcondvar_t xnf_cv_tx_slots; kmem_cache_t *xnf_tx_buf_cache; netif_rx_front_ring_t xnf_rx_ring; ddi_dma_handle_t xnf_rx_ring_dma_handle; ddi_acc_handle_t xnf_rx_ring_dma_acchandle; paddr_t xnf_rx_ring_phys_addr; grant_ref_t xnf_rx_ring_ref; xnf_buf_t *xnf_rx_pkt_info[NET_RX_RING_SIZE]; kmutex_t xnf_rxlock; mblk_t *xnf_rx_head; mblk_t *xnf_rx_tail; boolean_t xnf_rx_new_buffers_posted; kmem_cache_t *xnf_buf_cache; uint16_t xnf_evtchn; kmutex_t xnf_gref_lock; grant_ref_t xnf_gref_head; kcondvar_t xnf_cv_state; kcondvar_t xnf_cv_multicast; uint_t xnf_pending_multicast; } xnf_t; #ifdef __cplusplus } #endif #endif /* _SYS_XNF_H */