1*8892ea20SAggelos Economopoulos /******************************************************************************* 2*8892ea20SAggelos Economopoulos 3*8892ea20SAggelos Economopoulos Copyright (c) 2006-2009, Myricom Inc. 4*8892ea20SAggelos Economopoulos All rights reserved. 5*8892ea20SAggelos Economopoulos 6*8892ea20SAggelos Economopoulos Redistribution and use in source and binary forms, with or without 7*8892ea20SAggelos Economopoulos modification, are permitted provided that the following conditions are met: 8*8892ea20SAggelos Economopoulos 9*8892ea20SAggelos Economopoulos 1. Redistributions of source code must retain the above copyright notice, 10*8892ea20SAggelos Economopoulos this list of conditions and the following disclaimer. 11*8892ea20SAggelos Economopoulos 12*8892ea20SAggelos Economopoulos 2. Neither the name of the Myricom Inc, nor the names of its 13*8892ea20SAggelos Economopoulos contributors may be used to endorse or promote products derived from 14*8892ea20SAggelos Economopoulos this software without specific prior written permission. 15*8892ea20SAggelos Economopoulos 16*8892ea20SAggelos Economopoulos THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17*8892ea20SAggelos Economopoulos AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*8892ea20SAggelos Economopoulos IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*8892ea20SAggelos Economopoulos ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 20*8892ea20SAggelos Economopoulos LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21*8892ea20SAggelos Economopoulos CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22*8892ea20SAggelos Economopoulos SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23*8892ea20SAggelos Economopoulos INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24*8892ea20SAggelos Economopoulos CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25*8892ea20SAggelos Economopoulos ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26*8892ea20SAggelos Economopoulos POSSIBILITY OF SUCH DAMAGE. 27*8892ea20SAggelos Economopoulos 28*8892ea20SAggelos Economopoulos $FreeBSD: src/sys/dev/mxge/if_mxge_var.h,v 1.30 2009/06/24 21:09:56 gallatin Exp $ 29*8892ea20SAggelos Economopoulos 30*8892ea20SAggelos Economopoulos ***************************************************************************/ 31*8892ea20SAggelos Economopoulos 32*8892ea20SAggelos Economopoulos #define MXGE_ETH_STOPPED 0 33*8892ea20SAggelos Economopoulos #define MXGE_ETH_STOPPING 1 34*8892ea20SAggelos Economopoulos #define MXGE_ETH_STARTING 2 35*8892ea20SAggelos Economopoulos #define MXGE_ETH_RUNNING 3 36*8892ea20SAggelos Economopoulos #define MXGE_ETH_OPEN_FAILED 4 37*8892ea20SAggelos Economopoulos 38*8892ea20SAggelos Economopoulos #define MXGE_FW_OFFSET 1024*1024 39*8892ea20SAggelos Economopoulos #define MXGE_EEPROM_STRINGS_SIZE 256 40*8892ea20SAggelos Economopoulos #define MXGE_MAX_SEND_DESC 128 41*8892ea20SAggelos Economopoulos 42*8892ea20SAggelos Economopoulos #if ((__FreeBSD_version > 800000 && __FreeBSD_version < 800005) \ 43*8892ea20SAggelos Economopoulos || __FreeBSD_version < 700111) 44*8892ea20SAggelos Economopoulos #define MXGE_VIRT_JUMBOS 1 45*8892ea20SAggelos Economopoulos #else 46*8892ea20SAggelos Economopoulos #define MXGE_VIRT_JUMBOS 0 47*8892ea20SAggelos Economopoulos #endif 48*8892ea20SAggelos Economopoulos 49*8892ea20SAggelos Economopoulos #if (__FreeBSD_version > 800082) 50*8892ea20SAggelos Economopoulos #define IFNET_BUF_RING 1 51*8892ea20SAggelos Economopoulos #endif 52*8892ea20SAggelos Economopoulos 53*8892ea20SAggelos Economopoulos #ifndef VLAN_CAPABILITIES 54*8892ea20SAggelos Economopoulos #define VLAN_CAPABILITIES(ifp) 55*8892ea20SAggelos Economopoulos #define mxge_vlans_active(sc) (sc)->ifp->if_nvlans 56*8892ea20SAggelos Economopoulos #else 57*8892ea20SAggelos Economopoulos #define mxge_vlans_active(sc) (sc)->ifp->if_vlantrunk 58*8892ea20SAggelos Economopoulos #endif 59*8892ea20SAggelos Economopoulos 60*8892ea20SAggelos Economopoulos #ifndef VLAN_TAG_VALUE 61*8892ea20SAggelos Economopoulos #define MXGE_NEW_VLAN_API 62*8892ea20SAggelos Economopoulos #endif 63*8892ea20SAggelos Economopoulos 64*8892ea20SAggelos Economopoulos #ifndef IFCAP_LRO 65*8892ea20SAggelos Economopoulos #define IFCAP_LRO 0 66*8892ea20SAggelos Economopoulos #endif 67*8892ea20SAggelos Economopoulos 68*8892ea20SAggelos Economopoulos #ifndef IFCAP_TSO 69*8892ea20SAggelos Economopoulos #define IFCAP_TSO 0 70*8892ea20SAggelos Economopoulos #endif 71*8892ea20SAggelos Economopoulos 72*8892ea20SAggelos Economopoulos #ifndef IFCAP_TSO4 73*8892ea20SAggelos Economopoulos #define IFCAP_TSO4 0 74*8892ea20SAggelos Economopoulos #endif 75*8892ea20SAggelos Economopoulos 76*8892ea20SAggelos Economopoulos #ifndef CSUM_TSO 77*8892ea20SAggelos Economopoulos #define CSUM_TSO 0 78*8892ea20SAggelos Economopoulos #endif 79*8892ea20SAggelos Economopoulos 80*8892ea20SAggelos Economopoulos 81*8892ea20SAggelos Economopoulos typedef struct { 82*8892ea20SAggelos Economopoulos void *addr; 83*8892ea20SAggelos Economopoulos bus_addr_t bus_addr; 84*8892ea20SAggelos Economopoulos bus_dma_tag_t dmat; 85*8892ea20SAggelos Economopoulos bus_dmamap_t map; 86*8892ea20SAggelos Economopoulos } mxge_dma_t; 87*8892ea20SAggelos Economopoulos 88*8892ea20SAggelos Economopoulos 89*8892ea20SAggelos Economopoulos typedef struct { 90*8892ea20SAggelos Economopoulos mcp_slot_t *entry; 91*8892ea20SAggelos Economopoulos mxge_dma_t dma; 92*8892ea20SAggelos Economopoulos int cnt; 93*8892ea20SAggelos Economopoulos int idx; 94*8892ea20SAggelos Economopoulos int mask; 95*8892ea20SAggelos Economopoulos } mxge_rx_done_t; 96*8892ea20SAggelos Economopoulos 97*8892ea20SAggelos Economopoulos typedef struct 98*8892ea20SAggelos Economopoulos { 99*8892ea20SAggelos Economopoulos uint32_t data0; 100*8892ea20SAggelos Economopoulos uint32_t data1; 101*8892ea20SAggelos Economopoulos uint32_t data2; 102*8892ea20SAggelos Economopoulos } mxge_cmd_t; 103*8892ea20SAggelos Economopoulos 104*8892ea20SAggelos Economopoulos struct mxge_rx_buffer_state { 105*8892ea20SAggelos Economopoulos struct mbuf *m; 106*8892ea20SAggelos Economopoulos bus_dmamap_t map; 107*8892ea20SAggelos Economopoulos }; 108*8892ea20SAggelos Economopoulos 109*8892ea20SAggelos Economopoulos struct mxge_tx_buffer_state { 110*8892ea20SAggelos Economopoulos struct mbuf *m; 111*8892ea20SAggelos Economopoulos bus_dmamap_t map; 112*8892ea20SAggelos Economopoulos int flag; 113*8892ea20SAggelos Economopoulos }; 114*8892ea20SAggelos Economopoulos 115*8892ea20SAggelos Economopoulos typedef struct 116*8892ea20SAggelos Economopoulos { 117*8892ea20SAggelos Economopoulos volatile mcp_kreq_ether_recv_t *lanai; /* lanai ptr for recv ring */ 118*8892ea20SAggelos Economopoulos mcp_kreq_ether_recv_t *shadow; /* host shadow of recv ring */ 119*8892ea20SAggelos Economopoulos struct mxge_rx_buffer_state *info; 120*8892ea20SAggelos Economopoulos bus_dma_tag_t dmat; 121*8892ea20SAggelos Economopoulos bus_dmamap_t extra_map; 122*8892ea20SAggelos Economopoulos int cnt; 123*8892ea20SAggelos Economopoulos int nbufs; 124*8892ea20SAggelos Economopoulos int cl_size; 125*8892ea20SAggelos Economopoulos int alloc_fail; 126*8892ea20SAggelos Economopoulos int mask; /* number of rx slots -1 */ 127*8892ea20SAggelos Economopoulos int mlen; 128*8892ea20SAggelos Economopoulos } mxge_rx_ring_t; 129*8892ea20SAggelos Economopoulos 130*8892ea20SAggelos Economopoulos typedef struct 131*8892ea20SAggelos Economopoulos { 132*8892ea20SAggelos Economopoulos struct mtx mtx; 133*8892ea20SAggelos Economopoulos #ifdef IFNET_BUF_RING 134*8892ea20SAggelos Economopoulos struct buf_ring *br; 135*8892ea20SAggelos Economopoulos #endif 136*8892ea20SAggelos Economopoulos volatile mcp_kreq_ether_send_t *lanai; /* lanai ptr for sendq */ 137*8892ea20SAggelos Economopoulos volatile uint32_t *send_go; /* doorbell for sendq */ 138*8892ea20SAggelos Economopoulos volatile uint32_t *send_stop; /* doorbell for sendq */ 139*8892ea20SAggelos Economopoulos mcp_kreq_ether_send_t *req_list; /* host shadow of sendq */ 140*8892ea20SAggelos Economopoulos char *req_bytes; 141*8892ea20SAggelos Economopoulos bus_dma_segment_t *seg_list; 142*8892ea20SAggelos Economopoulos struct mxge_tx_buffer_state *info; 143*8892ea20SAggelos Economopoulos bus_dma_tag_t dmat; 144*8892ea20SAggelos Economopoulos int req; /* transmits submitted */ 145*8892ea20SAggelos Economopoulos int mask; /* number of transmit slots -1 */ 146*8892ea20SAggelos Economopoulos int done; /* transmits completed */ 147*8892ea20SAggelos Economopoulos int pkt_done; /* packets completed */ 148*8892ea20SAggelos Economopoulos int max_desc; /* max descriptors per xmit */ 149*8892ea20SAggelos Economopoulos int queue_active; /* fw currently polling this queue*/ 150*8892ea20SAggelos Economopoulos int activate; 151*8892ea20SAggelos Economopoulos int deactivate; 152*8892ea20SAggelos Economopoulos int stall; /* #times hw queue exhausted */ 153*8892ea20SAggelos Economopoulos int wake; /* #times irq re-enabled xmit */ 154*8892ea20SAggelos Economopoulos int watchdog_req; /* cache of req */ 155*8892ea20SAggelos Economopoulos int watchdog_done; /* cache of done */ 156*8892ea20SAggelos Economopoulos int watchdog_rx_pause; /* cache of pause rq recvd */ 157*8892ea20SAggelos Economopoulos int defrag; 158*8892ea20SAggelos Economopoulos char mtx_name[16]; 159*8892ea20SAggelos Economopoulos } mxge_tx_ring_t; 160*8892ea20SAggelos Economopoulos 161*8892ea20SAggelos Economopoulos struct lro_entry; 162*8892ea20SAggelos Economopoulos struct lro_entry 163*8892ea20SAggelos Economopoulos { 164*8892ea20SAggelos Economopoulos SLIST_ENTRY(lro_entry) next; 165*8892ea20SAggelos Economopoulos struct mbuf *m_head; 166*8892ea20SAggelos Economopoulos struct mbuf *m_tail; 167*8892ea20SAggelos Economopoulos int timestamp; 168*8892ea20SAggelos Economopoulos struct ip *ip; 169*8892ea20SAggelos Economopoulos uint32_t tsval; 170*8892ea20SAggelos Economopoulos uint32_t tsecr; 171*8892ea20SAggelos Economopoulos uint32_t source_ip; 172*8892ea20SAggelos Economopoulos uint32_t dest_ip; 173*8892ea20SAggelos Economopoulos uint32_t next_seq; 174*8892ea20SAggelos Economopoulos uint32_t ack_seq; 175*8892ea20SAggelos Economopoulos uint32_t len; 176*8892ea20SAggelos Economopoulos uint32_t data_csum; 177*8892ea20SAggelos Economopoulos uint16_t window; 178*8892ea20SAggelos Economopoulos uint16_t source_port; 179*8892ea20SAggelos Economopoulos uint16_t dest_port; 180*8892ea20SAggelos Economopoulos uint16_t append_cnt; 181*8892ea20SAggelos Economopoulos uint16_t mss; 182*8892ea20SAggelos Economopoulos 183*8892ea20SAggelos Economopoulos }; 184*8892ea20SAggelos Economopoulos SLIST_HEAD(lro_head, lro_entry); 185*8892ea20SAggelos Economopoulos 186*8892ea20SAggelos Economopoulos struct mxge_softc; 187*8892ea20SAggelos Economopoulos typedef struct mxge_softc mxge_softc_t; 188*8892ea20SAggelos Economopoulos 189*8892ea20SAggelos Economopoulos struct mxge_slice_state { 190*8892ea20SAggelos Economopoulos mxge_softc_t *sc; 191*8892ea20SAggelos Economopoulos mxge_tx_ring_t tx; /* transmit ring */ 192*8892ea20SAggelos Economopoulos mxge_rx_ring_t rx_small; 193*8892ea20SAggelos Economopoulos mxge_rx_ring_t rx_big; 194*8892ea20SAggelos Economopoulos mxge_rx_done_t rx_done; 195*8892ea20SAggelos Economopoulos mcp_irq_data_t *fw_stats; 196*8892ea20SAggelos Economopoulos volatile uint32_t *irq_claim; 197*8892ea20SAggelos Economopoulos u_long ipackets; 198*8892ea20SAggelos Economopoulos u_long opackets; 199*8892ea20SAggelos Economopoulos u_long obytes; 200*8892ea20SAggelos Economopoulos u_long omcasts; 201*8892ea20SAggelos Economopoulos u_long oerrors; 202*8892ea20SAggelos Economopoulos int if_drv_flags; 203*8892ea20SAggelos Economopoulos struct lro_head lro_active; 204*8892ea20SAggelos Economopoulos struct lro_head lro_free; 205*8892ea20SAggelos Economopoulos int lro_queued; 206*8892ea20SAggelos Economopoulos int lro_flushed; 207*8892ea20SAggelos Economopoulos int lro_bad_csum; 208*8892ea20SAggelos Economopoulos mxge_dma_t fw_stats_dma; 209*8892ea20SAggelos Economopoulos struct sysctl_oid *sysctl_tree; 210*8892ea20SAggelos Economopoulos struct sysctl_ctx_list sysctl_ctx; 211*8892ea20SAggelos Economopoulos char scratch[256]; 212*8892ea20SAggelos Economopoulos }; 213*8892ea20SAggelos Economopoulos 214*8892ea20SAggelos Economopoulos struct mxge_softc { 215*8892ea20SAggelos Economopoulos struct ifnet* ifp; 216*8892ea20SAggelos Economopoulos struct mxge_slice_state *ss; 217*8892ea20SAggelos Economopoulos int csum_flag; /* rx_csums? */ 218*8892ea20SAggelos Economopoulos int tx_boundary; /* boundary transmits cannot cross*/ 219*8892ea20SAggelos Economopoulos int lro_cnt; 220*8892ea20SAggelos Economopoulos bus_dma_tag_t parent_dmat; 221*8892ea20SAggelos Economopoulos volatile uint8_t *sram; 222*8892ea20SAggelos Economopoulos int sram_size; 223*8892ea20SAggelos Economopoulos volatile uint32_t *irq_deassert; 224*8892ea20SAggelos Economopoulos mcp_cmd_response_t *cmd; 225*8892ea20SAggelos Economopoulos mxge_dma_t cmd_dma; 226*8892ea20SAggelos Economopoulos mxge_dma_t zeropad_dma; 227*8892ea20SAggelos Economopoulos struct pci_dev *pdev; 228*8892ea20SAggelos Economopoulos int legacy_irq; 229*8892ea20SAggelos Economopoulos int link_state; 230*8892ea20SAggelos Economopoulos unsigned int rdma_tags_available; 231*8892ea20SAggelos Economopoulos int intr_coal_delay; 232*8892ea20SAggelos Economopoulos volatile uint32_t *intr_coal_delay_ptr; 233*8892ea20SAggelos Economopoulos int wc; 234*8892ea20SAggelos Economopoulos struct mtx cmd_mtx; 235*8892ea20SAggelos Economopoulos struct mtx driver_mtx; 236*8892ea20SAggelos Economopoulos int wake_queue; 237*8892ea20SAggelos Economopoulos int stop_queue; 238*8892ea20SAggelos Economopoulos int down_cnt; 239*8892ea20SAggelos Economopoulos int watchdog_resets; 240*8892ea20SAggelos Economopoulos int watchdog_countdown; 241*8892ea20SAggelos Economopoulos int pause; 242*8892ea20SAggelos Economopoulos struct resource *mem_res; 243*8892ea20SAggelos Economopoulos struct resource *irq_res; 244*8892ea20SAggelos Economopoulos struct resource **msix_irq_res; 245*8892ea20SAggelos Economopoulos struct resource *msix_table_res; 246*8892ea20SAggelos Economopoulos struct resource *msix_pba_res; 247*8892ea20SAggelos Economopoulos void *ih; 248*8892ea20SAggelos Economopoulos void **msix_ih; 249*8892ea20SAggelos Economopoulos char *fw_name; 250*8892ea20SAggelos Economopoulos char eeprom_strings[MXGE_EEPROM_STRINGS_SIZE]; 251*8892ea20SAggelos Economopoulos char fw_version[128]; 252*8892ea20SAggelos Economopoulos int fw_ver_major; 253*8892ea20SAggelos Economopoulos int fw_ver_minor; 254*8892ea20SAggelos Economopoulos int fw_ver_tiny; 255*8892ea20SAggelos Economopoulos int adopted_rx_filter_bug; 256*8892ea20SAggelos Economopoulos device_t dev; 257*8892ea20SAggelos Economopoulos struct ifmedia media; 258*8892ea20SAggelos Economopoulos int read_dma; 259*8892ea20SAggelos Economopoulos int write_dma; 260*8892ea20SAggelos Economopoulos int read_write_dma; 261*8892ea20SAggelos Economopoulos int fw_multicast_support; 262*8892ea20SAggelos Economopoulos int link_width; 263*8892ea20SAggelos Economopoulos int max_mtu; 264*8892ea20SAggelos Economopoulos int tx_defrag; 265*8892ea20SAggelos Economopoulos int media_flags; 266*8892ea20SAggelos Economopoulos int need_media_probe; 267*8892ea20SAggelos Economopoulos int num_slices; 268*8892ea20SAggelos Economopoulos int rx_ring_size; 269*8892ea20SAggelos Economopoulos int dying; 270*8892ea20SAggelos Economopoulos mxge_dma_t dmabench_dma; 271*8892ea20SAggelos Economopoulos struct callout co_hdl; 272*8892ea20SAggelos Economopoulos struct sysctl_oid *slice_sysctl_tree; 273*8892ea20SAggelos Economopoulos struct sysctl_ctx_list slice_sysctl_ctx; 274*8892ea20SAggelos Economopoulos char *mac_addr_string; 275*8892ea20SAggelos Economopoulos uint8_t mac_addr[6]; /* eeprom mac address */ 276*8892ea20SAggelos Economopoulos char product_code_string[64]; 277*8892ea20SAggelos Economopoulos char serial_number_string[64]; 278*8892ea20SAggelos Economopoulos char cmd_mtx_name[16]; 279*8892ea20SAggelos Economopoulos char driver_mtx_name[16]; 280*8892ea20SAggelos Economopoulos }; 281*8892ea20SAggelos Economopoulos 282*8892ea20SAggelos Economopoulos #define MXGE_PCI_VENDOR_MYRICOM 0x14c1 283*8892ea20SAggelos Economopoulos #define MXGE_PCI_DEVICE_Z8E 0x0008 284*8892ea20SAggelos Economopoulos #define MXGE_PCI_DEVICE_Z8E_9 0x0009 285*8892ea20SAggelos Economopoulos #define MXGE_PCI_REV_Z8E 0 286*8892ea20SAggelos Economopoulos #define MXGE_PCI_REV_Z8ES 1 287*8892ea20SAggelos Economopoulos #define MXGE_XFP_COMPLIANCE_BYTE 131 288*8892ea20SAggelos Economopoulos #define MXGE_SFP_COMPLIANCE_BYTE 3 289*8892ea20SAggelos Economopoulos 290*8892ea20SAggelos Economopoulos #define MXGE_HIGHPART_TO_U32(X) \ 291*8892ea20SAggelos Economopoulos (sizeof (X) == 8) ? ((uint32_t)((uint64_t)(X) >> 32)) : (0) 292*8892ea20SAggelos Economopoulos #define MXGE_LOWPART_TO_U32(X) ((uint32_t)(X)) 293*8892ea20SAggelos Economopoulos 294*8892ea20SAggelos Economopoulos struct mxge_media_type 295*8892ea20SAggelos Economopoulos { 296*8892ea20SAggelos Economopoulos int flag; 297*8892ea20SAggelos Economopoulos uint8_t bitmask; 298*8892ea20SAggelos Economopoulos char *name; 299*8892ea20SAggelos Economopoulos }; 300*8892ea20SAggelos Economopoulos 301*8892ea20SAggelos Economopoulos /* implement our own memory barriers, since bus_space_barrier 302*8892ea20SAggelos Economopoulos cannot handle write-combining regions */ 303*8892ea20SAggelos Economopoulos 304*8892ea20SAggelos Economopoulos #if __FreeBSD_version < 800053 305*8892ea20SAggelos Economopoulos 306*8892ea20SAggelos Economopoulos #if defined (__GNUC__) 307*8892ea20SAggelos Economopoulos #if #cpu(i386) || defined __i386 || defined i386 || defined __i386__ || #cpu(x86_64) || defined __x86_64__ 308*8892ea20SAggelos Economopoulos #define wmb() __asm__ __volatile__ ("sfence;": : :"memory") 309*8892ea20SAggelos Economopoulos #elif #cpu(sparc64) || defined sparc64 || defined __sparcv9 310*8892ea20SAggelos Economopoulos #define wmb() __asm__ __volatile__ ("membar #MemIssue": : :"memory") 311*8892ea20SAggelos Economopoulos #elif #cpu(sparc) || defined sparc || defined __sparc__ 312*8892ea20SAggelos Economopoulos #define wmb() __asm__ __volatile__ ("stbar;": : :"memory") 313*8892ea20SAggelos Economopoulos #else 314*8892ea20SAggelos Economopoulos #define wmb() /* XXX just to make this compile */ 315*8892ea20SAggelos Economopoulos #endif 316*8892ea20SAggelos Economopoulos #else 317*8892ea20SAggelos Economopoulos #error "unknown compiler" 318*8892ea20SAggelos Economopoulos #endif 319*8892ea20SAggelos Economopoulos 320*8892ea20SAggelos Economopoulos #endif 321*8892ea20SAggelos Economopoulos 322*8892ea20SAggelos Economopoulos static inline void 323*8892ea20SAggelos Economopoulos mxge_pio_copy(volatile void *to_v, void *from_v, size_t size) 324*8892ea20SAggelos Economopoulos { 325*8892ea20SAggelos Economopoulos register volatile uintptr_t *to; 326*8892ea20SAggelos Economopoulos volatile uintptr_t *from; 327*8892ea20SAggelos Economopoulos size_t i; 328*8892ea20SAggelos Economopoulos 329*8892ea20SAggelos Economopoulos to = (volatile uintptr_t *) to_v; 330*8892ea20SAggelos Economopoulos from = from_v; 331*8892ea20SAggelos Economopoulos for (i = (size / sizeof (uintptr_t)); i; i--) { 332*8892ea20SAggelos Economopoulos *to = *from; 333*8892ea20SAggelos Economopoulos to++; 334*8892ea20SAggelos Economopoulos from++; 335*8892ea20SAggelos Economopoulos } 336*8892ea20SAggelos Economopoulos 337*8892ea20SAggelos Economopoulos } 338*8892ea20SAggelos Economopoulos 339*8892ea20SAggelos Economopoulos void mxge_lro_flush(struct mxge_slice_state *ss, struct lro_entry *lro); 340*8892ea20SAggelos Economopoulos int mxge_lro_rx(struct mxge_slice_state *ss, struct mbuf *m_head, 341*8892ea20SAggelos Economopoulos uint32_t csum); 342*8892ea20SAggelos Economopoulos 343*8892ea20SAggelos Economopoulos 344*8892ea20SAggelos Economopoulos 345*8892ea20SAggelos Economopoulos /* 346*8892ea20SAggelos Economopoulos This file uses Myri10GE driver indentation. 347*8892ea20SAggelos Economopoulos 348*8892ea20SAggelos Economopoulos Local Variables: 349*8892ea20SAggelos Economopoulos c-file-style:"linux" 350*8892ea20SAggelos Economopoulos tab-width:8 351*8892ea20SAggelos Economopoulos End: 352*8892ea20SAggelos Economopoulos */ 353