xref: /dflybsd-src/sys/dev/netif/mxge/if_mxge_var.h (revision 137195a67be095303b2bb5694fb2aaf6af20199a)
18892ea20SAggelos Economopoulos /*******************************************************************************
28892ea20SAggelos Economopoulos 
38892ea20SAggelos Economopoulos Copyright (c) 2006-2009, Myricom Inc.
48892ea20SAggelos Economopoulos All rights reserved.
58892ea20SAggelos Economopoulos 
68892ea20SAggelos Economopoulos Redistribution and use in source and binary forms, with or without
78892ea20SAggelos Economopoulos modification, are permitted provided that the following conditions are met:
88892ea20SAggelos Economopoulos 
98892ea20SAggelos Economopoulos  1. Redistributions of source code must retain the above copyright notice,
108892ea20SAggelos Economopoulos     this list of conditions and the following disclaimer.
118892ea20SAggelos Economopoulos 
128892ea20SAggelos Economopoulos  2. Neither the name of the Myricom Inc, nor the names of its
138892ea20SAggelos Economopoulos     contributors may be used to endorse or promote products derived from
148892ea20SAggelos Economopoulos     this software without specific prior written permission.
158892ea20SAggelos Economopoulos 
168892ea20SAggelos Economopoulos THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
178892ea20SAggelos Economopoulos AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
188892ea20SAggelos Economopoulos IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
198892ea20SAggelos Economopoulos ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
208892ea20SAggelos Economopoulos LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
218892ea20SAggelos Economopoulos CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
228892ea20SAggelos Economopoulos SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
238892ea20SAggelos Economopoulos INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
248892ea20SAggelos Economopoulos CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
258892ea20SAggelos Economopoulos ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
268892ea20SAggelos Economopoulos POSSIBILITY OF SUCH DAMAGE.
278892ea20SAggelos Economopoulos 
288892ea20SAggelos Economopoulos $FreeBSD: src/sys/dev/mxge/if_mxge_var.h,v 1.30 2009/06/24 21:09:56 gallatin Exp $
298892ea20SAggelos Economopoulos 
308892ea20SAggelos Economopoulos ***************************************************************************/
318892ea20SAggelos Economopoulos 
328892ea20SAggelos Economopoulos #define MXGE_ETH_STOPPED 0
338892ea20SAggelos Economopoulos #define MXGE_ETH_STOPPING 1
348892ea20SAggelos Economopoulos #define MXGE_ETH_STARTING 2
358892ea20SAggelos Economopoulos #define MXGE_ETH_RUNNING 3
368892ea20SAggelos Economopoulos #define MXGE_ETH_OPEN_FAILED 4
378892ea20SAggelos Economopoulos 
388892ea20SAggelos Economopoulos #define MXGE_FW_OFFSET 1024*1024
398892ea20SAggelos Economopoulos #define MXGE_EEPROM_STRINGS_SIZE 256
408892ea20SAggelos Economopoulos #define MXGE_MAX_SEND_DESC 128
418892ea20SAggelos Economopoulos 
428892ea20SAggelos Economopoulos #if ((__FreeBSD_version > 800000 && __FreeBSD_version < 800005) \
438892ea20SAggelos Economopoulos      || __FreeBSD_version < 700111)
448892ea20SAggelos Economopoulos #define MXGE_VIRT_JUMBOS 1
458892ea20SAggelos Economopoulos #else
468892ea20SAggelos Economopoulos #define MXGE_VIRT_JUMBOS 0
478892ea20SAggelos Economopoulos #endif
488892ea20SAggelos Economopoulos 
498892ea20SAggelos Economopoulos #if (__FreeBSD_version > 800082)
508892ea20SAggelos Economopoulos #define IFNET_BUF_RING 1
518892ea20SAggelos Economopoulos #endif
528892ea20SAggelos Economopoulos 
538892ea20SAggelos Economopoulos #ifndef VLAN_CAPABILITIES
548892ea20SAggelos Economopoulos #define VLAN_CAPABILITIES(ifp)
558892ea20SAggelos Economopoulos #define mxge_vlans_active(sc) (sc)->ifp->if_nvlans
568892ea20SAggelos Economopoulos #else
578892ea20SAggelos Economopoulos #define mxge_vlans_active(sc) (sc)->ifp->if_vlantrunk
588892ea20SAggelos Economopoulos #endif
598892ea20SAggelos Economopoulos 
608892ea20SAggelos Economopoulos #ifndef VLAN_TAG_VALUE
618892ea20SAggelos Economopoulos #define MXGE_NEW_VLAN_API
628892ea20SAggelos Economopoulos #endif
638892ea20SAggelos Economopoulos 
648892ea20SAggelos Economopoulos #ifndef IFCAP_LRO
658892ea20SAggelos Economopoulos #define IFCAP_LRO 0
668892ea20SAggelos Economopoulos #endif
678892ea20SAggelos Economopoulos 
688892ea20SAggelos Economopoulos #ifndef IFCAP_TSO
698892ea20SAggelos Economopoulos #define IFCAP_TSO 0
708892ea20SAggelos Economopoulos #endif
718892ea20SAggelos Economopoulos 
728892ea20SAggelos Economopoulos #ifndef IFCAP_TSO4
738892ea20SAggelos Economopoulos #define IFCAP_TSO4 0
748892ea20SAggelos Economopoulos #endif
758892ea20SAggelos Economopoulos 
768892ea20SAggelos Economopoulos #ifndef CSUM_TSO
778892ea20SAggelos Economopoulos #define CSUM_TSO 0
788892ea20SAggelos Economopoulos #endif
798892ea20SAggelos Economopoulos 
808892ea20SAggelos Economopoulos 
818892ea20SAggelos Economopoulos typedef struct {
828892ea20SAggelos Economopoulos 	void *addr;
838892ea20SAggelos Economopoulos 	bus_addr_t bus_addr;
848892ea20SAggelos Economopoulos 	bus_dma_tag_t dmat;
858892ea20SAggelos Economopoulos 	bus_dmamap_t map;
868892ea20SAggelos Economopoulos } mxge_dma_t;
878892ea20SAggelos Economopoulos 
888892ea20SAggelos Economopoulos 
898892ea20SAggelos Economopoulos typedef struct {
908892ea20SAggelos Economopoulos 	mcp_slot_t *entry;
918892ea20SAggelos Economopoulos 	mxge_dma_t dma;
928892ea20SAggelos Economopoulos 	int cnt;
938892ea20SAggelos Economopoulos 	int idx;
948892ea20SAggelos Economopoulos 	int mask;
958892ea20SAggelos Economopoulos } mxge_rx_done_t;
968892ea20SAggelos Economopoulos 
978892ea20SAggelos Economopoulos typedef struct
988892ea20SAggelos Economopoulos {
998892ea20SAggelos Economopoulos   uint32_t data0;
1008892ea20SAggelos Economopoulos   uint32_t data1;
1018892ea20SAggelos Economopoulos   uint32_t data2;
1028892ea20SAggelos Economopoulos } mxge_cmd_t;
1038892ea20SAggelos Economopoulos 
1048892ea20SAggelos Economopoulos struct mxge_rx_buffer_state {
1058892ea20SAggelos Economopoulos 	struct mbuf *m;
1068892ea20SAggelos Economopoulos 	bus_dmamap_t map;
1078892ea20SAggelos Economopoulos };
1088892ea20SAggelos Economopoulos 
1098892ea20SAggelos Economopoulos struct mxge_tx_buffer_state {
1108892ea20SAggelos Economopoulos 	struct mbuf *m;
1118892ea20SAggelos Economopoulos 	bus_dmamap_t map;
1128892ea20SAggelos Economopoulos 	int flag;
1138892ea20SAggelos Economopoulos };
1148892ea20SAggelos Economopoulos 
1158892ea20SAggelos Economopoulos typedef struct
1168892ea20SAggelos Economopoulos {
1178892ea20SAggelos Economopoulos 	volatile mcp_kreq_ether_recv_t *lanai;	/* lanai ptr for recv ring */
1188892ea20SAggelos Economopoulos 	mcp_kreq_ether_recv_t *shadow;	/* host shadow of recv ring */
1198892ea20SAggelos Economopoulos 	struct mxge_rx_buffer_state *info;
1208892ea20SAggelos Economopoulos 	bus_dma_tag_t dmat;
1218892ea20SAggelos Economopoulos 	bus_dmamap_t extra_map;
1228892ea20SAggelos Economopoulos 	int cnt;
1238892ea20SAggelos Economopoulos 	int nbufs;
1248892ea20SAggelos Economopoulos 	int cl_size;
1258892ea20SAggelos Economopoulos 	int alloc_fail;
1268892ea20SAggelos Economopoulos 	int mask;			/* number of rx slots -1 */
1278892ea20SAggelos Economopoulos 	int mlen;
1288892ea20SAggelos Economopoulos } mxge_rx_ring_t;
1298892ea20SAggelos Economopoulos 
1308892ea20SAggelos Economopoulos typedef struct
1318892ea20SAggelos Economopoulos {
132b3535a6fSAggelos Economopoulos 	struct lock lock;
1338892ea20SAggelos Economopoulos #ifdef IFNET_BUF_RING
1348892ea20SAggelos Economopoulos 	struct buf_ring *br;
1358892ea20SAggelos Economopoulos #endif
1368892ea20SAggelos Economopoulos 	volatile mcp_kreq_ether_send_t *lanai;	/* lanai ptr for sendq	*/
1378892ea20SAggelos Economopoulos 	volatile uint32_t *send_go;		/* doorbell for sendq */
1388892ea20SAggelos Economopoulos 	volatile uint32_t *send_stop;		/* doorbell for sendq */
1398892ea20SAggelos Economopoulos 	mcp_kreq_ether_send_t *req_list;	/* host shadow of sendq */
1408892ea20SAggelos Economopoulos 	char *req_bytes;
1418892ea20SAggelos Economopoulos 	bus_dma_segment_t *seg_list;
1428892ea20SAggelos Economopoulos 	struct mxge_tx_buffer_state *info;
1438892ea20SAggelos Economopoulos 	bus_dma_tag_t dmat;
1448892ea20SAggelos Economopoulos 	int req;			/* transmits submitted	*/
1458892ea20SAggelos Economopoulos 	int mask;			/* number of transmit slots -1 */
1468892ea20SAggelos Economopoulos 	int done;			/* transmits completed	*/
1478892ea20SAggelos Economopoulos 	int pkt_done;			/* packets completed */
1488892ea20SAggelos Economopoulos 	int max_desc;			/* max descriptors per xmit */
1498892ea20SAggelos Economopoulos 	int queue_active;		/* fw currently polling this queue*/
1508892ea20SAggelos Economopoulos 	int activate;
1518892ea20SAggelos Economopoulos 	int deactivate;
1528892ea20SAggelos Economopoulos 	int stall;			/* #times hw queue exhausted */
1538892ea20SAggelos Economopoulos 	int wake;			/* #times irq re-enabled xmit */
1548892ea20SAggelos Economopoulos 	int watchdog_req;		/* cache of req */
1558892ea20SAggelos Economopoulos 	int watchdog_done;		/* cache of done */
1568892ea20SAggelos Economopoulos 	int watchdog_rx_pause;		/* cache of pause rq recvd */
1578892ea20SAggelos Economopoulos 	int defrag;
158b3535a6fSAggelos Economopoulos 	char lock_name[16];
1598892ea20SAggelos Economopoulos } mxge_tx_ring_t;
1608892ea20SAggelos Economopoulos 
1618892ea20SAggelos Economopoulos struct lro_entry;
1628892ea20SAggelos Economopoulos struct lro_entry
1638892ea20SAggelos Economopoulos {
1648892ea20SAggelos Economopoulos 	SLIST_ENTRY(lro_entry) next;
1658892ea20SAggelos Economopoulos 	struct mbuf  	*m_head;
1668892ea20SAggelos Economopoulos 	struct mbuf	*m_tail;
1678892ea20SAggelos Economopoulos 	int		timestamp;
1688892ea20SAggelos Economopoulos 	struct ip	*ip;
1698892ea20SAggelos Economopoulos 	uint32_t	tsval;
1708892ea20SAggelos Economopoulos 	uint32_t	tsecr;
1718892ea20SAggelos Economopoulos 	uint32_t	source_ip;
1728892ea20SAggelos Economopoulos 	uint32_t	dest_ip;
1738892ea20SAggelos Economopoulos 	uint32_t	next_seq;
1748892ea20SAggelos Economopoulos 	uint32_t	ack_seq;
1758892ea20SAggelos Economopoulos 	uint32_t	len;
1768892ea20SAggelos Economopoulos 	uint32_t	data_csum;
1778892ea20SAggelos Economopoulos 	uint16_t	window;
1788892ea20SAggelos Economopoulos 	uint16_t	source_port;
1798892ea20SAggelos Economopoulos 	uint16_t	dest_port;
1808892ea20SAggelos Economopoulos 	uint16_t	append_cnt;
1818892ea20SAggelos Economopoulos 	uint16_t	mss;
1828892ea20SAggelos Economopoulos 
1838892ea20SAggelos Economopoulos };
1848892ea20SAggelos Economopoulos SLIST_HEAD(lro_head, lro_entry);
1858892ea20SAggelos Economopoulos 
1868892ea20SAggelos Economopoulos struct mxge_softc;
1878892ea20SAggelos Economopoulos typedef struct mxge_softc mxge_softc_t;
1888892ea20SAggelos Economopoulos 
1898892ea20SAggelos Economopoulos struct mxge_slice_state {
1908892ea20SAggelos Economopoulos 	mxge_softc_t *sc;
1918892ea20SAggelos Economopoulos 	mxge_tx_ring_t tx;		/* transmit ring 	*/
1928892ea20SAggelos Economopoulos 	mxge_rx_ring_t rx_small;
1938892ea20SAggelos Economopoulos 	mxge_rx_ring_t rx_big;
1948892ea20SAggelos Economopoulos 	mxge_rx_done_t rx_done;
1958892ea20SAggelos Economopoulos 	mcp_irq_data_t *fw_stats;
1968892ea20SAggelos Economopoulos 	volatile uint32_t *irq_claim;
1978892ea20SAggelos Economopoulos 	u_long ipackets;
1988892ea20SAggelos Economopoulos 	u_long opackets;
1998892ea20SAggelos Economopoulos 	u_long obytes;
2008892ea20SAggelos Economopoulos 	u_long omcasts;
2018892ea20SAggelos Economopoulos 	u_long oerrors;
2028892ea20SAggelos Economopoulos 	int if_drv_flags;
2038892ea20SAggelos Economopoulos 	struct lro_head lro_active;
2048892ea20SAggelos Economopoulos 	struct lro_head lro_free;
2058892ea20SAggelos Economopoulos 	int lro_queued;
2068892ea20SAggelos Economopoulos 	int lro_flushed;
2078892ea20SAggelos Economopoulos 	int lro_bad_csum;
2088892ea20SAggelos Economopoulos 	mxge_dma_t fw_stats_dma;
2098892ea20SAggelos Economopoulos 	struct sysctl_oid *sysctl_tree;
2108892ea20SAggelos Economopoulos 	struct sysctl_ctx_list sysctl_ctx;
2118892ea20SAggelos Economopoulos 	char scratch[256];
2128892ea20SAggelos Economopoulos };
2138892ea20SAggelos Economopoulos 
2148892ea20SAggelos Economopoulos struct mxge_softc {
215*137195a6SAggelos Economopoulos 	struct arpcom arpcom;
2168892ea20SAggelos Economopoulos 	struct ifnet* ifp;
2178892ea20SAggelos Economopoulos 	struct mxge_slice_state *ss;
2188892ea20SAggelos Economopoulos 	int csum_flag;			/* rx_csums? 		*/
2198892ea20SAggelos Economopoulos 	int tx_boundary;		/* boundary transmits cannot cross*/
2208892ea20SAggelos Economopoulos 	int lro_cnt;
2218892ea20SAggelos Economopoulos 	bus_dma_tag_t	parent_dmat;
2228892ea20SAggelos Economopoulos 	volatile uint8_t *sram;
2238892ea20SAggelos Economopoulos 	int sram_size;
2248892ea20SAggelos Economopoulos 	volatile uint32_t *irq_deassert;
2258892ea20SAggelos Economopoulos 	mcp_cmd_response_t *cmd;
2268892ea20SAggelos Economopoulos 	mxge_dma_t cmd_dma;
2278892ea20SAggelos Economopoulos 	mxge_dma_t zeropad_dma;
2288892ea20SAggelos Economopoulos 	struct pci_dev *pdev;
2298892ea20SAggelos Economopoulos 	int legacy_irq;
2308892ea20SAggelos Economopoulos 	int link_state;
2318892ea20SAggelos Economopoulos 	unsigned int rdma_tags_available;
2328892ea20SAggelos Economopoulos 	int intr_coal_delay;
2338892ea20SAggelos Economopoulos 	volatile uint32_t *intr_coal_delay_ptr;
2348892ea20SAggelos Economopoulos 	int wc;
235e0a4850bSAggelos Economopoulos 	struct lock cmd_lock;
236e0a4850bSAggelos Economopoulos 	struct lock driver_lock;
2378892ea20SAggelos Economopoulos 	int wake_queue;
2388892ea20SAggelos Economopoulos 	int stop_queue;
2398892ea20SAggelos Economopoulos 	int down_cnt;
2408892ea20SAggelos Economopoulos 	int watchdog_resets;
2418892ea20SAggelos Economopoulos 	int watchdog_countdown;
2428892ea20SAggelos Economopoulos 	int pause;
2438892ea20SAggelos Economopoulos 	struct resource *mem_res;
2448892ea20SAggelos Economopoulos 	struct resource *irq_res;
2458892ea20SAggelos Economopoulos 	struct resource **msix_irq_res;
2468892ea20SAggelos Economopoulos 	struct resource *msix_table_res;
2478892ea20SAggelos Economopoulos 	struct resource *msix_pba_res;
2488892ea20SAggelos Economopoulos 	void *ih;
2498892ea20SAggelos Economopoulos 	void **msix_ih;
2508892ea20SAggelos Economopoulos 	char *fw_name;
2518892ea20SAggelos Economopoulos 	char eeprom_strings[MXGE_EEPROM_STRINGS_SIZE];
2528892ea20SAggelos Economopoulos 	char fw_version[128];
2538892ea20SAggelos Economopoulos 	int fw_ver_major;
2548892ea20SAggelos Economopoulos 	int fw_ver_minor;
2558892ea20SAggelos Economopoulos 	int fw_ver_tiny;
2568892ea20SAggelos Economopoulos 	int adopted_rx_filter_bug;
2578892ea20SAggelos Economopoulos 	device_t dev;
2588892ea20SAggelos Economopoulos 	struct ifmedia media;
2598892ea20SAggelos Economopoulos 	int read_dma;
2608892ea20SAggelos Economopoulos 	int write_dma;
2618892ea20SAggelos Economopoulos 	int read_write_dma;
2628892ea20SAggelos Economopoulos 	int fw_multicast_support;
2638892ea20SAggelos Economopoulos 	int link_width;
2648892ea20SAggelos Economopoulos 	int max_mtu;
2658892ea20SAggelos Economopoulos 	int tx_defrag;
2668892ea20SAggelos Economopoulos 	int media_flags;
2678892ea20SAggelos Economopoulos 	int need_media_probe;
2688892ea20SAggelos Economopoulos 	int num_slices;
2698892ea20SAggelos Economopoulos 	int rx_ring_size;
2708892ea20SAggelos Economopoulos 	int dying;
2718892ea20SAggelos Economopoulos 	mxge_dma_t dmabench_dma;
2728892ea20SAggelos Economopoulos 	struct callout co_hdl;
273b6737651SAggelos Economopoulos 	struct sysctl_ctx_list sysctl_ctx;
274b6737651SAggelos Economopoulos 	struct sysctl_oid *sysctl_tree;
2758892ea20SAggelos Economopoulos 	struct sysctl_oid *slice_sysctl_tree;
2768892ea20SAggelos Economopoulos 	struct sysctl_ctx_list slice_sysctl_ctx;
2778892ea20SAggelos Economopoulos 	char *mac_addr_string;
2788892ea20SAggelos Economopoulos 	uint8_t	mac_addr[6];		/* eeprom mac address */
2798892ea20SAggelos Economopoulos 	char product_code_string[64];
2808892ea20SAggelos Economopoulos 	char serial_number_string[64];
281b3535a6fSAggelos Economopoulos 	char cmd_lock_name[16];
282e0a4850bSAggelos Economopoulos 	char driver_lock_name[16];
2838892ea20SAggelos Economopoulos };
2848892ea20SAggelos Economopoulos 
2858892ea20SAggelos Economopoulos #define MXGE_PCI_VENDOR_MYRICOM 	0x14c1
2868892ea20SAggelos Economopoulos #define MXGE_PCI_DEVICE_Z8E 	0x0008
2878892ea20SAggelos Economopoulos #define MXGE_PCI_DEVICE_Z8E_9 	0x0009
2888892ea20SAggelos Economopoulos #define MXGE_PCI_REV_Z8E	0
2898892ea20SAggelos Economopoulos #define MXGE_PCI_REV_Z8ES	1
2908892ea20SAggelos Economopoulos #define MXGE_XFP_COMPLIANCE_BYTE	131
2918892ea20SAggelos Economopoulos #define MXGE_SFP_COMPLIANCE_BYTE	  3
2928892ea20SAggelos Economopoulos 
2938892ea20SAggelos Economopoulos #define MXGE_HIGHPART_TO_U32(X) \
2948892ea20SAggelos Economopoulos (sizeof (X) == 8) ? ((uint32_t)((uint64_t)(X) >> 32)) : (0)
2958892ea20SAggelos Economopoulos #define MXGE_LOWPART_TO_U32(X) ((uint32_t)(X))
2968892ea20SAggelos Economopoulos 
2978892ea20SAggelos Economopoulos struct mxge_media_type
2988892ea20SAggelos Economopoulos {
2998892ea20SAggelos Economopoulos 	int flag;
3008892ea20SAggelos Economopoulos 	uint8_t bitmask;
3018892ea20SAggelos Economopoulos 	char *name;
3028892ea20SAggelos Economopoulos };
3038892ea20SAggelos Economopoulos 
3048892ea20SAggelos Economopoulos /* implement our own memory barriers, since bus_space_barrier
3058892ea20SAggelos Economopoulos    cannot handle write-combining regions */
3068892ea20SAggelos Economopoulos 
3078892ea20SAggelos Economopoulos #if __FreeBSD_version < 800053
3088892ea20SAggelos Economopoulos 
3098892ea20SAggelos Economopoulos #if defined (__GNUC__)
3108892ea20SAggelos Economopoulos   #if #cpu(i386) || defined __i386 || defined i386 || defined __i386__ || #cpu(x86_64) || defined __x86_64__
3118892ea20SAggelos Economopoulos     #define wmb()  __asm__ __volatile__ ("sfence;": : :"memory")
3128892ea20SAggelos Economopoulos   #elif #cpu(sparc64) || defined sparc64 || defined __sparcv9
3138892ea20SAggelos Economopoulos     #define wmb()  __asm__ __volatile__ ("membar #MemIssue": : :"memory")
3148892ea20SAggelos Economopoulos   #elif #cpu(sparc) || defined sparc || defined __sparc__
3158892ea20SAggelos Economopoulos     #define wmb()  __asm__ __volatile__ ("stbar;": : :"memory")
3168892ea20SAggelos Economopoulos   #else
3178892ea20SAggelos Economopoulos     #define wmb() 	/* XXX just to make this compile */
3188892ea20SAggelos Economopoulos   #endif
3198892ea20SAggelos Economopoulos #else
3208892ea20SAggelos Economopoulos   #error "unknown compiler"
3218892ea20SAggelos Economopoulos #endif
3228892ea20SAggelos Economopoulos 
3238892ea20SAggelos Economopoulos #endif
3248892ea20SAggelos Economopoulos 
3258892ea20SAggelos Economopoulos static inline void
3268892ea20SAggelos Economopoulos mxge_pio_copy(volatile void *to_v, void *from_v, size_t size)
3278892ea20SAggelos Economopoulos {
3288892ea20SAggelos Economopoulos   register volatile uintptr_t *to;
3298892ea20SAggelos Economopoulos   volatile uintptr_t *from;
3308892ea20SAggelos Economopoulos   size_t i;
3318892ea20SAggelos Economopoulos 
3328892ea20SAggelos Economopoulos   to = (volatile uintptr_t *) to_v;
3338892ea20SAggelos Economopoulos   from = from_v;
3348892ea20SAggelos Economopoulos   for (i = (size / sizeof (uintptr_t)); i; i--) {
3358892ea20SAggelos Economopoulos 	  *to = *from;
3368892ea20SAggelos Economopoulos 	  to++;
3378892ea20SAggelos Economopoulos 	  from++;
3388892ea20SAggelos Economopoulos   }
3398892ea20SAggelos Economopoulos 
3408892ea20SAggelos Economopoulos }
3418892ea20SAggelos Economopoulos 
3428892ea20SAggelos Economopoulos void mxge_lro_flush(struct mxge_slice_state *ss, struct lro_entry *lro);
3438892ea20SAggelos Economopoulos int mxge_lro_rx(struct mxge_slice_state *ss, struct mbuf *m_head,
3448892ea20SAggelos Economopoulos 		uint32_t csum);
3458892ea20SAggelos Economopoulos 
3468892ea20SAggelos Economopoulos 
3478892ea20SAggelos Economopoulos 
3488892ea20SAggelos Economopoulos /*
3498892ea20SAggelos Economopoulos   This file uses Myri10GE driver indentation.
3508892ea20SAggelos Economopoulos 
3518892ea20SAggelos Economopoulos   Local Variables:
3528892ea20SAggelos Economopoulos   c-file-style:"linux"
3538892ea20SAggelos Economopoulos   tab-width:8
3548892ea20SAggelos Economopoulos   End:
3558892ea20SAggelos Economopoulos */
356