zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

netmap_virt.h (3964B) - Raw


      1 /*
      2  * Copyright (C) 2013-2016 Luigi Rizzo
      3  * Copyright (C) 2013-2016 Giuseppe Lettieri
      4  * Copyright (C) 2013-2018 Vincenzo Maffione
      5  * Copyright (C) 2015 Stefano Garzarella
      6  * All rights reserved.
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  *   1. Redistributions of source code must retain the above copyright
     12  *      notice, this list of conditions and the following disclaimer.
     13  *   2. Redistributions in binary form must reproduce the above copyright
     14  *      notice, this list of conditions and the following disclaimer in the
     15  *    documentation and/or other materials provided with the distribution.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     27  * SUCH DAMAGE.
     28  */
     29 
     30 #ifndef NETMAP_VIRT_H
     31 #define NETMAP_VIRT_H
     32 
     33 /*
     34  * Register offsets and other macros for the ptnetmap paravirtual devices:
     35  *   ptnetmap-memdev: device used to expose memory into the guest
     36  *   ptnet: paravirtualized NIC exposing a netmap port in the guest
     37  *
     38  * These macros are used in the hypervisor frontend (QEMU, bhyve) and in the
     39  * guest device driver.
     40  */
     41 
     42 /* PCI identifiers and PCI BARs for ptnetmap-memdev and ptnet. */
     43 #define PTNETMAP_MEMDEV_NAME            "ptnetmap-memdev"
     44 #define PTNETMAP_PCI_VENDOR_ID          0x1b36  /* QEMU virtual devices */
     45 #define PTNETMAP_PCI_DEVICE_ID          0x000c  /* memory device */
     46 #define PTNETMAP_PCI_NETIF_ID           0x000d  /* ptnet network interface */
     47 #define PTNETMAP_IO_PCI_BAR             0
     48 #define PTNETMAP_MEM_PCI_BAR            1
     49 #define PTNETMAP_MSIX_PCI_BAR           2
     50 
     51 /* Device registers for ptnetmap-memdev */
     52 #define PTNET_MDEV_IO_MEMSIZE_LO	0	/* netmap memory size (low) */
     53 #define PTNET_MDEV_IO_MEMSIZE_HI	4	/* netmap_memory_size (high) */
     54 #define PTNET_MDEV_IO_MEMID		8	/* memory allocator ID in the host */
     55 #define PTNET_MDEV_IO_IF_POOL_OFS	64
     56 #define PTNET_MDEV_IO_IF_POOL_OBJNUM	68
     57 #define PTNET_MDEV_IO_IF_POOL_OBJSZ	72
     58 #define PTNET_MDEV_IO_RING_POOL_OFS	76
     59 #define PTNET_MDEV_IO_RING_POOL_OBJNUM	80
     60 #define PTNET_MDEV_IO_RING_POOL_OBJSZ	84
     61 #define PTNET_MDEV_IO_BUF_POOL_OFS	88
     62 #define PTNET_MDEV_IO_BUF_POOL_OBJNUM	92
     63 #define PTNET_MDEV_IO_BUF_POOL_OBJSZ	96
     64 #define PTNET_MDEV_IO_END		100
     65 
     66 /* ptnetmap features */
     67 #define PTNETMAP_F_VNET_HDR        1
     68 
     69 /* Device registers for the ptnet network device. */
     70 #define PTNET_IO_PTFEAT		0
     71 #define PTNET_IO_PTCTL		4
     72 #define PTNET_IO_MAC_LO		8
     73 #define PTNET_IO_MAC_HI		12
     74 #define PTNET_IO_CSBBAH		16 /* deprecated */
     75 #define PTNET_IO_CSBBAL		20 /* deprecated */
     76 #define PTNET_IO_NIFP_OFS	24
     77 #define PTNET_IO_NUM_TX_RINGS	28
     78 #define PTNET_IO_NUM_RX_RINGS	32
     79 #define PTNET_IO_NUM_TX_SLOTS	36
     80 #define PTNET_IO_NUM_RX_SLOTS	40
     81 #define PTNET_IO_VNET_HDR_LEN	44
     82 #define PTNET_IO_HOSTMEMID	48
     83 #define PTNET_IO_CSB_GH_BAH     52
     84 #define PTNET_IO_CSB_GH_BAL     56
     85 #define PTNET_IO_CSB_HG_BAH     60
     86 #define PTNET_IO_CSB_HG_BAL     64
     87 #define PTNET_IO_END		68
     88 #define PTNET_IO_KICK_BASE	128
     89 #define PTNET_IO_MASK		0xff
     90 
     91 /* ptnet control commands (values for PTCTL register):
     92  *   - CREATE starts the host sync-kloop
     93  *   - DELETE stops the host sync-kloop
     94  */
     95 #define PTNETMAP_PTCTL_CREATE		1
     96 #define PTNETMAP_PTCTL_DELETE		2
     97 
     98 #endif /* NETMAP_VIRT_H */