From patchwork Tue Aug 26 02:07:47 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 209 Return-Path: Received: from mail-pa0-f45.google.com (mail-pa0-f45.google.com [209.85.220.45]) by dpdk.org (Postfix) with ESMTP id 08FBF3975 for ; Tue, 26 Aug 2014 04:04:42 +0200 (CEST) Received: by mail-pa0-f45.google.com with SMTP id eu11so22279702pac.18 for ; Mon, 25 Aug 2014 19:08:39 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:user-agent:date:from:to:cc:subject :references:mime-version:content-type:content-disposition; bh=sjUIBwtbsnJZD0cgSymNLSv5GsDVJUDrcF2N5fdYZk0=; b=l+CDaG49OrCZTPkcHkeXMenfW+WvpYlD+Hcr/38sGpKU0nXmFAJn4N4ie9k60ko9Kt b93Uldc86BXtmQNm7ln7oD1jsOxpRigMatsq+/FVa5zFkGWZl58QgGTxpQZjOmlWMBeC 6ke4zvPH8LOBKmIYXnza6Ca144U/116XWBVF9jiMSaOnnLAsmRWciFk1MPbSUhPNRkwq /PSxAYdHtDyXmZ6l/2Vw2d9ePIGWLLUsMkyxEBKneH9PFUFYgkZXSEnpdNiNkAOY71wi qNR4XeyJt5o5hRxAtAQxpkAckvxhIL6QUS96R+ByeUhVMGN1Dnlzks/5/J+lqtW14US2 BAFQ== X-Gm-Message-State: ALoCoQmurgkZho3leJdz7ooPvgZ9O9QzyNvB2YnrPSLI1NgFjHWbeSgU7lUvNwO6hNbn2eVMlqbc X-Received: by 10.70.118.9 with SMTP id ki9mr33461355pdb.104.1409018919860; Mon, 25 Aug 2014 19:08:39 -0700 (PDT) Received: from localhost (static-50-53-65-80.bvtn.or.frontiernet.net. [50.53.65.80]) by mx.google.com with ESMTPSA id bn4sm1179483pbc.40.2014.08.25.19.08.38 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Aug 2014 19:08:39 -0700 (PDT) Message-Id: <20140826020837.898427212@networkplumber.org> User-Agent: quilt/0.63-1 Date: Mon, 25 Aug 2014 19:07:47 -0700 From: Stephen Hemminger To: Ouyang Changchun References: <20140826020746.062748014@networkplumber.org> MIME-Version: 1.0 Content-Disposition: inline; filename=virtio-linux-portio.patch Cc: dev@dpdk.org Subject: [dpdk-dev] [RFC 01/10] virtio: rearrange resource initialization 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: Tue, 26 Aug 2014 02:04:43 -0000 For clarity make the setup of PCI resources for Linux into a function rather than block of code #ifdef'd in middle of dev_init. Acked-by: Changchun Ouyang --- lib/librte_pmd_virtio/virtio_ethdev.c | 76 +++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 33 deletions(-) --- a/lib/librte_pmd_virtio/virtio_ethdev.c 2014-08-25 19:00:03.622515574 -0700 +++ b/lib/librte_pmd_virtio/virtio_ethdev.c 2014-08-25 19:00:03.622515574 -0700 @@ -706,6 +706,41 @@ virtio_has_msix(const struct rte_pci_add return (d != NULL); } + +/* Extract I/O port numbers from sysfs */ +static int virtio_resource_init(struct rte_pci_device *pci_dev) +{ + char dirname[PATH_MAX]; + char filename[PATH_MAX]; + unsigned long start, size; + + if (get_uio_dev(&pci_dev->addr, dirname, sizeof(dirname)) < 0) + return -1; + + /* get portio size */ + snprintf(filename, sizeof(filename), + "%s/portio/port0/size", dirname); + if (parse_sysfs_value(filename, &size) < 0) { + PMD_INIT_LOG(ERR, "%s(): cannot parse size", + __func__); + return -1; + } + + /* get portio start */ + snprintf(filename, sizeof(filename), + "%s/portio/port0/start", dirname); + if (parse_sysfs_value(filename, &start) < 0) { + PMD_INIT_LOG(ERR, "%s(): cannot parse portio start", + __func__); + return -1; + } + pci_dev->mem_resource[0].addr = (void *)(uintptr_t)start; + pci_dev->mem_resource[0].len = (uint64_t)size; + PMD_INIT_LOG(DEBUG, + "PCI Port IO found start=0x%lx with size=0x%lx", + start, size); + return 0; +} #else static int virtio_has_msix(const struct rte_pci_addr *loc __rte_unused) @@ -713,6 +748,12 @@ virtio_has_msix(const struct rte_pci_add /* nic_uio does not enable interrupts, return 0 (false). */ return 0; } + +static int virtio_resource_init(struct rte_pci_device *pci_dev __rte_unused) +{ + /* no setup required */ + return 0; +} #endif /* @@ -749,40 +790,9 @@ eth_virtio_dev_init(__rte_unused struct return 0; pci_dev = eth_dev->pci_dev; + if (virtio_resource_init(pci_dev) < 0) + return -1; -#ifdef RTE_EXEC_ENV_LINUXAPP - { - char dirname[PATH_MAX]; - char filename[PATH_MAX]; - unsigned long start, size; - - if (get_uio_dev(&pci_dev->addr, dirname, sizeof(dirname)) < 0) - return -1; - - /* get portio size */ - snprintf(filename, sizeof(filename), - "%s/portio/port0/size", dirname); - if (parse_sysfs_value(filename, &size) < 0) { - PMD_INIT_LOG(ERR, "%s(): cannot parse size", - __func__); - return -1; - } - - /* get portio start */ - snprintf(filename, sizeof(filename), - "%s/portio/port0/start", dirname); - if (parse_sysfs_value(filename, &start) < 0) { - PMD_INIT_LOG(ERR, "%s(): cannot parse portio start", - __func__); - return -1; - } - pci_dev->mem_resource[0].addr = (void *)(uintptr_t)start; - pci_dev->mem_resource[0].len = (uint64_t)size; - PMD_INIT_LOG(DEBUG, - "PCI Port IO found start=0x%lx with size=0x%lx", - start, size); - } -#endif hw->use_msix = virtio_has_msix(&pci_dev->addr); hw->io_base = (uint32_t)(uintptr_t)pci_dev->mem_resource[0].addr;