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 */ 99