From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f181.google.com (mail-pf0-f181.google.com [209.85.192.181]) by dpdk.org (Postfix) with ESMTP id 198DFC5C4 for ; Fri, 29 Jan 2016 19:24:07 +0100 (CET) Received: by mail-pf0-f181.google.com with SMTP id x125so46264205pfb.0 for ; Fri, 29 Jan 2016 10:24:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mvista-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6880GADsV3UBGdVzgNoaAjSPiXLfTtzHAIgG2mCGuvk=; b=kulD6L0+cRd8ieezDMyoDHH42bZurjCWrUWKpYcsN6HxkEfk2PViXSArB6ajd0Q7KG rPIZwUvieWr9jxPbo/szLT9xo1L2u5cG0EB3uVhkvJfZK7q0S+QO1pu6X6C8tVG8ljIN yli7YeE7T+vMjFSBFJzZ6NbXxy8nE5oF7w7uLl2+aZcFuQJDkxBW18h20wou63Fv7QcA t6gFsyxy7nHQvRMRRQFE2VGJ80jBGSTFLf3Kz+NkLibwgloNbDXKw6SvuY6Ic0kmM7Cv kP5qQjSeb64N3N0Lweabh+COUb8BqpDIvVPkHQJd+uXEZk6q20+r6EgBPyAGPlV5cAu/ LhfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6880GADsV3UBGdVzgNoaAjSPiXLfTtzHAIgG2mCGuvk=; b=ObEdMdJibqEN7Jhd72GCDRK9KAEsJ/YlCgPcicYlRDJzIA0ZP6isuHAUYPxhMfjZsz 5SNp+GTH4xc4FuuWB7SfiEIiOM1yp8CPf0RQAYKbHYM9f8hje73XYEGmSsrveABc7o5f V5H18OEKBDGnoVncCc2nv45q7RwRP79u9nRhCP4DNjtwM0AjUqPtN6iDbohX0pf4/uQS D1SuMsAbcS2OX9Y0SBYBVvkOvKLYvJmbi9kPJTVMPmhVpn8y2j3XoAePmZZ/6M+kxTHi 3LgAEto2xm67ZyTzGSF4i0AMaVLtnHdtdLm0raCw83LNQGGoOgGSZzzNtDnUAsm2mFXZ U5ZQ== X-Gm-Message-State: AG10YOQeAFm63IfYJejlGwYa1XwrT/RvezpS7SqSuLgS4PXXHZ3GpwYLQZz8mQJgwcQllTSp X-Received: by 10.98.31.221 with SMTP id l90mr15619312pfj.92.1454091846545; Fri, 29 Jan 2016 10:24:06 -0800 (PST) Received: from santosh-Latitude-E5530-non-vPro.mvista.com ([106.51.29.23]) by smtp.gmail.com with ESMTPSA id 85sm11161750pfl.18.2016.01.29.10.23.48 (version=TLS1_1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 29 Jan 2016 10:24:05 -0800 (PST) From: Santosh Shukla To: dev@dpdk.org Date: Fri, 29 Jan 2016 23:51:56 +0530 Message-Id: <1454091717-32251-7-git-send-email-sshukla@mvista.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1454091717-32251-1-git-send-email-sshukla@mvista.com> References: <0000-cover-letter.patch> <1454091717-32251-1-git-send-email-sshukla@mvista.com> Subject: [dpdk-dev] [PATCH v6 7/8] virtio: extend pci rw api for vfio X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 29 Jan 2016 18:24:07 -0000 So far virtio handle rw access for uio / ioport interface, This patch to extend the support for vfio. Signed-off-by: Santosh Shukla --- drivers/net/virtio/virtio_io.h | 2 +- drivers/net/virtio/virtio_pci.c | 110 ++++++++++++++++++++++++++++++++++----- 2 files changed, 98 insertions(+), 14 deletions(-) diff --git a/drivers/net/virtio/virtio_io.h b/drivers/net/virtio/virtio_io.h index bfa1341..ce59e3f 100644 --- a/drivers/net/virtio/virtio_io.h +++ b/drivers/net/virtio/virtio_io.h @@ -35,7 +35,7 @@ #define _VIRTIO_IO_H_ #include -#include "virtio_logs.h" +#include "virtio_vfio_io.h" #if defined(RTE_ARCH_X86_64) || defined(RTE_ARCH_I686) diff --git a/drivers/net/virtio/virtio_pci.c b/drivers/net/virtio/virtio_pci.c index 064f234..71d4a07 100644 --- a/drivers/net/virtio/virtio_pci.c +++ b/drivers/net/virtio/virtio_pci.c @@ -37,10 +37,10 @@ #include #endif -#include "virtio_io.h" #include "virtio_pci.h" #include "virtio_logs.h" #include "virtqueue.h" +#include "virtio_io.h" /* * Following macros are derieved from linux/pci_regs.h, however, @@ -54,20 +54,104 @@ #define VIRTIO_PCI_REG_ADDR(hw, reg) \ (unsigned short)((hw)->io_base + (reg)) -#define VIRTIO_READ_REG_1(hw, reg) \ - inb((VIRTIO_PCI_REG_ADDR((hw), (reg)))) -#define VIRTIO_WRITE_REG_1(hw, reg, value) \ - outb_p((unsigned char)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg)))) +static inline uint8_t +virtio_read_reg_1(struct virtio_hw *hw, uint64_t reg_offset) +{ + uint8_t ret; + struct rte_pci_device *dev; + + dev = hw->dev; + if (dev->kdrv == RTE_KDRV_VFIO) + vfio_inb(dev, reg_offset, &ret); + else + ret = inb(VIRTIO_PCI_REG_ADDR(hw, reg_offset)); + + return ret; +} + +static inline uint16_t +virtio_read_reg_2(struct virtio_hw *hw, uint64_t reg_offset) +{ + uint16_t ret; + struct rte_pci_device *dev; + + dev = hw->dev; + if (dev->kdrv == RTE_KDRV_VFIO) + vfio_inw(dev, reg_offset, &ret); + else + ret = inw(VIRTIO_PCI_REG_ADDR(hw, reg_offset)); + + return ret; +} + +static inline uint32_t +virtio_read_reg_4(struct virtio_hw *hw, uint64_t reg_offset) +{ + uint32_t ret; + struct rte_pci_device *dev; + + dev = hw->dev; + if (dev->kdrv == RTE_KDRV_VFIO) + vfio_inl(dev, reg_offset, &ret); + else + ret = inl(VIRTIO_PCI_REG_ADDR(hw, reg_offset)); + + return ret; +} + +static inline void +virtio_write_reg_1(struct virtio_hw *hw, uint64_t reg_offset, uint8_t value) +{ + struct rte_pci_device *dev; + + dev = hw->dev; + if (dev->kdrv == RTE_KDRV_VFIO) + vfio_outb_p(dev, reg_offset, value); + else + outb_p((unsigned char)value, + VIRTIO_PCI_REG_ADDR(hw, reg_offset)); +} + +static inline void +virtio_write_reg_2(struct virtio_hw *hw, uint64_t reg_offset, uint16_t value) +{ + struct rte_pci_device *dev; + + dev = hw->dev; + if (dev->kdrv == RTE_KDRV_VFIO) + vfio_outw_p(dev, reg_offset, value); + else + outw_p((unsigned short)value, + VIRTIO_PCI_REG_ADDR(hw, reg_offset)); +} + +static inline void +virtio_write_reg_4(struct virtio_hw *hw, uint64_t reg_offset, uint32_t value) +{ + struct rte_pci_device *dev; + + dev = hw->dev; + if (dev->kdrv == RTE_KDRV_VFIO) + vfio_outl_p(dev, reg_offset, value); + else + outl_p((unsigned int)value, + VIRTIO_PCI_REG_ADDR(hw, reg_offset)); +} + +#define VIRTIO_READ_REG_1(hw, reg) \ + virtio_read_reg_1((hw), (reg)) +#define VIRTIO_WRITE_REG_1(hw, reg, value) \ + virtio_write_reg_1((hw), (reg), (value)) -#define VIRTIO_READ_REG_2(hw, reg) \ - inw((VIRTIO_PCI_REG_ADDR((hw), (reg)))) -#define VIRTIO_WRITE_REG_2(hw, reg, value) \ - outw_p((unsigned short)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg)))) +#define VIRTIO_READ_REG_2(hw, reg) \ + virtio_read_reg_2((hw), (reg)) +#define VIRTIO_WRITE_REG_2(hw, reg, value) \ + virtio_write_reg_2((hw), (reg), (value)) -#define VIRTIO_READ_REG_4(hw, reg) \ - inl((VIRTIO_PCI_REG_ADDR((hw), (reg)))) -#define VIRTIO_WRITE_REG_4(hw, reg, value) \ - outl_p((unsigned int)(value), (VIRTIO_PCI_REG_ADDR((hw), (reg)))) +#define VIRTIO_READ_REG_4(hw, reg) \ + virtio_read_reg_4((hw), (reg)) +#define VIRTIO_WRITE_REG_4(hw, reg, value) \ + virtio_write_reg_4((hw), (reg), (value)) static void legacy_read_dev_config(struct virtio_hw *hw, uint64_t offset, -- 1.7.9.5