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