From patchwork Tue Jan 17 07:13:45 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 19509 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id CF135F94F; Tue, 17 Jan 2017 08:15:24 +0100 (CET) Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0073.outbound.protection.outlook.com [104.47.42.73]) by dpdk.org (Postfix) with ESMTP id 218D7F961 for ; Tue, 17 Jan 2017 08:15:22 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=RdpoeNlwxSm9NFdiPlUaqrzFGg9PNTtZOMNiYzEuxPc=; b=RyRUwpb4mhZY+BywRLdwIsiY9LMg7h68DKm/jYo1iiftnUSInYvyspEp3L1zns70KrAxUBrLSpGG7wmSpXIB799OF1gnGBWSUK7cHiwJaKkuoLjw+AudHwRje/r/wW2QosaPPRjZxg0C66jHFaTGWiETdFY5S9Ao6IU1Rnbv6aI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerin.Jacob@cavium.com; Received: from localhost.caveonetworks.com (111.93.218.67) by BY1PR0701MB1724.namprd07.prod.outlook.com (10.162.111.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Tue, 17 Jan 2017 07:15:16 +0000 From: Jerin Jacob To: CC: , , , , , , Jerin Jacob Date: Tue, 17 Jan 2017 12:43:45 +0530 Message-ID: <1484637244-7548-11-git-send-email-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 2.5.5 In-Reply-To: <1484637244-7548-1-git-send-email-jerin.jacob@caviumnetworks.com> References: <1484212646-10338-1-git-send-email-jerin.jacob@caviumnetworks.com> <1484637244-7548-1-git-send-email-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: PN1PR01CA0030.INDPRD01.PROD.OUTLOOK.COM (10.164.137.37) To BY1PR0701MB1724.namprd07.prod.outlook.com (10.162.111.143) X-MS-Office365-Filtering-Correlation-Id: c4c745b2-3e10-44cf-dd83-08d43ea89843 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BY1PR0701MB1724; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 3:vxTD+wbs4vhfwyzUKjtxGkQwPsmCHCEJaYN7hUlqwLtGGkHNo2BRh7FaYnU2YTsE6vlpmEda3oMM58kvibXP/M3yDFN2gN1x0AMEC4FVn3z2z4177Q+Rw75H7ycIAnAUp98noZD/K7EneWTWWFFBZTiLNF1dZ4KAc7C8R6c+xBx6+JH3xKWqqasCKMgOaJLFMp2TiXq94CIKBjI2Qn8V6Ach7px6qjIEs4shEwklXDg7gPaatAHQS6sDVoSKVgYu4zYNcyaUxodjPPXcmp8MAw== X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 25:OSFUBJit0bgyCnN+w8XWY9FyisthOOGTg5Ta3jYoA6QixZVSmiBtViSKf8PlQc0fznMhfUaYz2zzGly8GAdEf2uk6BRsaK6G1uJWI0NJ7vqZ3DFaamU40rsVaKAsa5OfdhvcSn/kXYnvNAHNKSGjbQlW40xn/mUNSDELOZUBXceuaffhzy87jZlyjSaY1W1T5QOu7SiNaScfnXoUSCDXNmNRi1lcGdjYnW1UAgnim9+hY3dXkIpsBQkP2zo7/xt/VSq/Piue4Rc84w0r8GSKU/uByENAkX5ASFIaL7G0d3hd0XGu8AGDWGNBI7Hl9lYYQB6gBcfkLtqjRaqPj2Mdc0MhVDlkSlT/xaL4QSa0NHE+ZXK/+bamKenPPh7MJ+6FBNh9lQ0Rku4u75muXiUmM8F3IcelfErkX3Xbm9oBT2uKTHe8vl8a+nYLfCKDhCV6QHC9iAmEA0u3UbBYQ8fcmHluwEfF9IgmDuQyjeyDu1n86Sr5AafWEHNx610uahzB3+b0Fgpe4fZdEpmpf3DgdZHougikpCVC8TcTz3FBX2iKU9pXepUSiRtV1zkEUP5pPCZBFtgR0Q8UGscmTd6HtP/xBu0NbWuxIsN9jxyBZYHLQId0OYkI72jbLWGjkZ9Ay9o6AlZ/iwv5+lmYVMEvp2PiOUwwBLA4qtrrCh2TlkYYfkQW/vWcauIyzHyLckEI4Xjkq9DJjmsXdubrU/jGB8ThqMCLAfdOMj9VvRl6oyB6Da5lSN0rytUA+UahQeySseZWB/Zu5BFknhVvc29RWhr1qbF5uzKO+wUkpKcC3j9e21GKBXL0B4NnN0EA1arI X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 31:InPj2fTSqAmoFy0qqTv+pj/8p6YgIa3EiNAfkUEQB+kdXsQZ+ZXRbqbDLo/GbdKznp42C6GM0pIL5iq/j2ZWQGvsRVGpNMQOW1OwuTVUBvQ3bc0IOEI1EaIrF3S9HfUYbdJySw8aiunA+CUSS0Wq8Xr04rjHKQz5GL2/GL8TwBoONUl4woEgJDOY4uFVxHwRFQmOKEA+vr3JlVIlCTE6enwiX39tu7pPPgQnimB/MWRuifTrYy5lnmzFLDOzUYLtWc0tmwEliHHgbOCzZU6hJw==; 20:1wyrYIOLZvFgeRF48w/kqskenKK9+sRqsba4vHgssvG2KCDWJZkszU01vEBBdKD+nrw62/152uoYhRVPAUpPhx1mb2+bJpPmUiKaLwGwKJjDBp28sS2qzBFrTv6xEbdruwndGiDh3oQoW2NkbefS6mRSQKNwOc9ZGWS7O0GEduKRF2Boi1rhxKGFx7boD04+1fqLWTCJE7/pY8nIm2TuX8aAO2kPIzB+RZGSNX9bhNjaUr8uLnt9pj2nOpgvRexmTBT+vlUtvMbvbgsbNZ1c7c+y0nsanLurHZ/oT8sSRgL8jz5lPNIMmlE7e63oTH6ipaNrBsR0XQ8d1jSlrHl/dLmQXoQSmQTZti6G6v7EsPb1TGgGC+TAnLXqZ+GMQ1NVC0/NCiWt+8bydzB9Y00QE+sI3zyXpzRHVP7171FbsfrzjNEVZDNYT+PNvbrJ/PRCxiY6YCVcasIC80Jwx5atsfHTnyb9Cw1xt3Mv/22+YsT5oTPXo3YdZi/VUDnaETDtThlDerWgF81czQYRfb6OdZi0f0s2tI61t2/QSUWT3NCFfPtpkrc05/asoAuv1cbxUY+cPTdT+bxkxnFfxXEX299fR9bLgntS7FJ2qzI+6rY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(20161123562025)(20161123555025)(20161123564025)(20161123560025)(6072148); SRVR:BY1PR0701MB1724; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1724; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 4:ue+fthSaXASkojb4RMJRcejGgRwUiYVQJAk+aZBN79TI6UbttZjX6p00WEvWYk9G0Wvdt2n/rc2/wmas0DT2kb1BGGIS9Nzoy1g8ML6L26mRD3YsXv1cRGRAcmDpp+99YHpBKy+BGZt4rSo3ucnfC1JZ3Lgg5+WPw0klF1oV9F2nDkdQxBP37U3V7tBMcA/qbIow75lmct2oKUzvfOX8U1hrkMyBPItKp6MsmcYtmyZlE/thT0E5Ch8WcQvyZjxavJxWYZahkUy5WCQtmkrr7AenjLEYETETgFEeXB9lFkIZTWZRfTIk4ZbUhrBlu0HPzs6K64DU/c65YZb0PHSdzcfSv6CUvbXAqhIRLDf9P9Y9lnimEd+MnNs6y0KOPCGUVjCb/N/MuV/4jC1SilhGMUfN8XTlQMYb4JRtbPsdy8ogbMJD2ms1hfkC53WoK/E7LDB9g4LbA3CQA/zrqLkVAm03fcuNqYHziKdfnYfGOUSlOh8U0owgtGa4PHiQQfFKMbEbFAcW/+8wF0zI8P7kxy77VDV4x1JcIcyWFDNhgncAwEW+6sOk4TjCZ6r+UU3ldGud79LTb5Xp1qQ4aah40g== X-Forefront-PRVS: 01901B3451 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6069001)(6009001)(7916002)(39450400003)(199003)(189002)(2906002)(4326007)(76506005)(107886002)(53416004)(189998001)(92566002)(106356001)(38730400001)(47776003)(25786008)(6486002)(54906002)(66066001)(6506006)(305945005)(7736002)(6512007)(5009440100003)(81156014)(3846002)(50226002)(5003940100001)(68736007)(4001430100002)(6116002)(76176999)(50986999)(2351001)(97736004)(81166006)(5660300001)(8676002)(105586002)(69596002)(42186005)(48376002)(6666003)(36756003)(33646002)(101416001)(2950100002)(6916009)(110136003)(50466002)(42882006)(30001)(7099028); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1724; H:localhost.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY1PR0701MB1724; 23:RGyAcv3vL+wDzUuO4WQJ8Qef9s3AZCJVTA6jeol?= RTvHUUVy8V+mY7xyTEFjEFCT4k4p/rLgEmDYB3cY6A1LxptSo6VofQ1rQSwVkH90CMwgcADyrKbq7I+NzooL2ImKj2I0q2oO4NJeSVsC0JEKag93A6Y90fmE0mw3JZ5xzY8eK/UEbl2nOshVoMnhVysBjA763iPMoLiX/WFsSqpDNJXINC4//8uyox/2w44sXKMoTBd7BekDs6eQxGvbX4Y+OBjc5C1Cc6GVCItQgY2GpJJDJnVprjCHVWq7TyG3Cz0EIaRbuCS4iPB00D63jrcLuWi5UQiW1mlLZ74C3XHonFZImwWbBM7PSJ3HCgzh3xyFg+kSichIsM2pXEnsP5qOuov1WxFhY+F3LZGgKlOBSM7ggAE7ZOtn0J5Sa2B/TlX8ktwWyPIGfs+b4GIcKuQU/umiqGu5QAeYKvP+CpnsCPRTeQlBP18uJMdGq18aFesQtocsbw5T2m6MLFprhVxoe/GsX0nRv2BUu/9/htbAINwEO5XxvSynwaX9hCnydsB8oDJJV2mpvV5KmInVDBIGeNfM+ATk67M2Scxtd/COfAzkb6GNZgNpqpQ9L6ktYw/BQFi6Mq5IjSVFnkbxueHtuN/YM4PhBafkwnd6nvoivasHaltc1QCHcGpZkB1cSeIZzz2VnS6LopK5/0moW31FNGI4fAVDaas+L434vJdiuXfAXJwBQHZZdQXLLIuw1vR9IAEyP5SJmLjjU3k+7DHl+eLoF+8QN8BToIdY5/khMj/RbEY+k7YR+NvT06AvFRUtLoKPWhB3UFPUgwi4Oo/aeRkRA2jGBCLVi0P4Cbsqni8+MUgo/8ei5SrTMgTl6xF5MqH7bkrBTvP36xr+BnmarTg3IoeNEUGAJafxBODTdR72MfdDBRy03DBKemQe6ohkOvMVEUXtAKOp9MXMJjOd2a8YHNx2dnhMkIkZrLvn86hUoAEv/3o2N90/PrVWmtdBxG9iUEeWgMrt1FIQIoEe8ag1BV8Yo+bcqlemduhqto7Qhm01ZoQf4Ms0vkW2DrZY3sNMAHaz/5NHKndfC8tneom8X7pwFyCFiJJRVi03AZWPp+OT4MEOB2RLK/tXughdgNxHGCdmgMVIcgNc03IAP4NOIaEHxsuDxLAYxk+pfA8eODaUFJ9RIyuku0N8a4NTWCIg+ZXIhL0nICcdnIC7k1fSlF7YnjXgs6DmE77jywzSXQ2NeulC/cshPQaTqksriSMmbxEWgS0Il4l6To+HNKMRzlXg8RFHPI2uln7Zci8cktt1GlIpdF2Y0YtVTnxc= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 6:8MkHbtf9F8fmaAZNYHpFB/0CDQYuNBkcPU7ZM3CooE7L5KzQ8iqO63T3dLzlOug93juqD3dXiSzmPA9K5543oGwIFOFQMcs5ecV8Y8E8tYgcE8WuF1jUqcQ+s90DN4WJQU5uF2sDdbNwGf9NwESs1evRfVjXhczVyw42QnCH/znoK5UPuL/YQ+flxE+Q4sDk6Vm9B7X1slq7Ec+REm+g8xlOZ/+38HawmirR21YyOFfDyM1WbCBJV6ioqGisZs/7nBhZk2SKLBStbkSJrTHERGWlE7F/xV/YEaT+X5IsG5B6gaxXT+o+DQo5wSey6CeUO6E8LDyZbw+YAL6CSFdlsx3e6dMm29hSgVF2+1ENQJYC2KfEyZJb7UAUzSuQPcJr9cakfQdhZA3yld819Z5g6P3zl+EkrwIhEVNpjuKEgrk=; 5:10f6iLb7UcxE6m4ur4ZNmdD1fl7DLAUElNHB+QRbPJv9dt/8jKe0h8MHSYdXC5YGYVhEtV9rtWx/gu/7ciUI8qZPPhms+NzKKTV0NetCpPTgbbbFuV0rr91MaNji5N/sgu0PE4gyXotYuab9eQpQ7g==; 24:W833jgl+K5Wtm06Ke86kYJjhS8FZTPvwusE5xopIfg8aDfs8HGO3lPojJaUe4oAnZE/712D57OUFksWC+8GYqjfdPf8n4cUFhSyufqmLvr0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1724; 7:w0UV7ppBl1Ph+0hnFHgAzoc95lmtxjGodYKfF8kccwtvNxLt3cJPOOiBu4rQYlRceRy6QFXykCHXfHHZ5PFzXq4wY+/7towFHjDg7860aQhir+YK4IrzwK039Sc0GosbtTYf+0JbpCnpfNsz9dITMopyY7ysCrNmK990f+0yC6PmBXjzbhObNyRZMbYcQ3YgNmo83i0Dr8E7/CJEqY9bHUUM1Uj9I0RshVqpxRcsoCUNFQzI5VO2DdQUnbTnxyOAC1XnY50RCaKavutUTX4KaPkslQWYpYCWmsx0CnkyCoRqtaNCdyI8rhh3eGz50PBtsTA05HwRCgg/WIadQq+/V7kTYSqgScCOz7rWFGkD94CvrONlBod1KVCSk0LBZUD3UPJVAjHWkQdHPCrSlALT8vmJ9omX/cz3yhTMmRpFfVIoQlhfCPHuqdBk0chV0+rGMWB+5bmDSj87vReJaqTUqA== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jan 2017 07:15:16.6851 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1724 Subject: [dpdk-dev] [PATCH v4 10/29] eal: introduce I/O device memory read/write operations X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This commit introduces 8-bit, 16-bit, 32bit, 64bit I/O device memory read/write operations along with the relaxed versions. The weakly-ordered machine like ARM needs additional I/O barrier for device memory read/write access over PCI bus. By introducing the eal abstraction for I/O device memory read/write access, The drivers can access I/O device memory in architecture agnostic manner. The relaxed version does not have additional I/O memory barrier, useful in accessing the device registers of integrated controllers which implicitly strongly ordered with respect to memory access. Signed-off-by: Jerin Jacob --- doc/api/doxy-api-index.md | 3 +- lib/librte_eal/common/Makefile | 3 +- lib/librte_eal/common/include/generic/rte_io.h | 263 +++++++++++++++++++++++++ 3 files changed, 267 insertions(+), 2 deletions(-) create mode 100644 lib/librte_eal/common/include/generic/rte_io.h diff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md index d26d984..8b3b426 100644 --- a/doc/api/doxy-api-index.md +++ b/doc/api/doxy-api-index.md @@ -71,7 +71,8 @@ There are many libraries, so their headers may be grouped by topics: [cache prefetch] (@ref rte_prefetch.h), [SIMD] (@ref rte_vect.h), [byte order] (@ref rte_byteorder.h), - [CPU flags] (@ref rte_cpuflags.h) + [CPU flags] (@ref rte_cpuflags.h), + [I/O access] (@ref rte_io.h) - **CPU multicore**: [interrupts] (@ref rte_interrupts.h), diff --git a/lib/librte_eal/common/Makefile b/lib/librte_eal/common/Makefile index 09a3d3a..b34dce9 100644 --- a/lib/librte_eal/common/Makefile +++ b/lib/librte_eal/common/Makefile @@ -44,7 +44,8 @@ INC += rte_malloc.h rte_keepalive.h rte_time.h GENERIC_INC := rte_atomic.h rte_byteorder.h rte_cycles.h rte_prefetch.h GENERIC_INC += rte_spinlock.h rte_memcpy.h rte_cpuflags.h rte_rwlock.h -GENERIC_INC += rte_vect.h +GENERIC_INC += rte_vect.h rte_io.h + # defined in mk/arch/$(RTE_ARCH)/rte.vars.mk ARCH_DIR ?= $(RTE_ARCH) ARCH_INC := $(notdir $(wildcard $(RTE_SDK)/lib/librte_eal/common/include/arch/$(ARCH_DIR)/*.h)) diff --git a/lib/librte_eal/common/include/generic/rte_io.h b/lib/librte_eal/common/include/generic/rte_io.h new file mode 100644 index 0000000..edfebf8 --- /dev/null +++ b/lib/librte_eal/common/include/generic/rte_io.h @@ -0,0 +1,263 @@ +/* + * BSD LICENSE + * + * Copyright(c) 2016 Cavium networks. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Cavium networks nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _RTE_IO_H_ +#define _RTE_IO_H_ + +/** + * @file + * I/O device memory operations + * + * This file defines the generic API for I/O device memory read/write operations + */ + +#include +#include +#include + +#ifdef __DOXYGEN__ + +/** + * Read a 8-bit value from I/O device memory address *addr*. + * + * The relaxed version does not have additional I/O memory barrier, useful in + * accessing the device registers of integrated controllers which implicitly + * strongly ordered with respect to memory access. + * + * @param addr + * I/O memory address to read the value from + * @return + * read value + */ +static inline uint8_t +rte_read8_relaxed(const volatile void *addr); + +/** + * Read a 16-bit value from I/O device memory address *addr*. + * + * The relaxed version does not have additional I/O memory barrier, useful in + * accessing the device registers of integrated controllers which implicitly + * strongly ordered with respect to memory access. + * + * @param addr + * I/O memory address to read the value from + * @return + * read value + */ +static inline uint16_t +rte_read16_relaxed(const volatile void *addr); + +/** + * Read a 32-bit value from I/O device memory address *addr*. + * + * The relaxed version does not have additional I/O memory barrier, useful in + * accessing the device registers of integrated controllers which implicitly + * strongly ordered with respect to memory access. + * + * @param addr + * I/O memory address to read the value from + * @return + * read value + */ +static inline uint32_t +rte_read32_relaxed(const volatile void *addr); + +/** + * Read a 64-bit value from I/O device memory address *addr*. + * + * The relaxed version does not have additional I/O memory barrier, useful in + * accessing the device registers of integrated controllers which implicitly + * strongly ordered with respect to memory access. + * + * @param addr + * I/O memory address to read the value from + * @return + * read value + */ +static inline uint64_t +rte_read64_relaxed(const volatile void *addr); + +/** + * Write a 8-bit value to I/O device memory address *addr*. + * + * The relaxed version does not have additional I/O memory barrier, useful in + * accessing the device registers of integrated controllers which implicitly + * strongly ordered with respect to memory access. + * + * @param value + * Value to write + * @param addr + * I/O memory address to write the value to + */ + +static inline void +rte_write8_relaxed(uint8_t value, volatile void *addr); + +/** + * Write a 16-bit value to I/O device memory address *addr*. + * + * The relaxed version does not have additional I/O memory barrier, useful in + * accessing the device registers of integrated controllers which implicitly + * strongly ordered with respect to memory access. + * + * @param value + * Value to write + * @param addr + * I/O memory address to write the value to + */ +static inline void +rte_write16_relaxed(uint16_t value, volatile void *addr); + +/** + * Write a 32-bit value to I/O device memory address *addr*. + * + * The relaxed version does not have additional I/O memory barrier, useful in + * accessing the device registers of integrated controllers which implicitly + * strongly ordered with respect to memory access. + * + * @param value + * Value to write + * @param addr + * I/O memory address to write the value to + */ +static inline void +rte_write32_relaxed(uint32_t value, volatile void *addr); + +/** + * Write a 64-bit value to I/O device memory address *addr*. + * + * The relaxed version does not have additional I/O memory barrier, useful in + * accessing the device registers of integrated controllers which implicitly + * strongly ordered with respect to memory access. + * + * @param value + * Value to write + * @param addr + * I/O memory address to write the value to + */ +static inline void +rte_write64_relaxed(uint64_t value, volatile void *addr); + +/** + * Read a 8-bit value from I/O device memory address *addr*. + * + * @param addr + * I/O memory address to read the value from + * @return + * read value + */ +static inline uint8_t +rte_read8(const volatile void *addr); + +/** + * Read a 16-bit value from I/O device memory address *addr*. + * + * + * @param addr + * I/O memory address to read the value from + * @return + * read value + */ +static inline uint16_t +rte_read16(const volatile void *addr); + +/** + * Read a 32-bit value from I/O device memory address *addr*. + * + * @param addr + * I/O memory address to read the value from + * @return + * read value + */ +static inline uint32_t +rte_read32(const volatile void *addr); + +/** + * Read a 64-bit value from I/O device memory address *addr*. + * + * @param addr + * I/O memory address to read the value from + * @return + * read value + */ +static inline uint64_t +rte_read64(const volatile void *addr); + +/** + * Write a 8-bit value to I/O device memory address *addr*. + * + * @param value + * Value to write + * @param addr + * I/O memory address to write the value to + */ + +static inline void +rte_write8(uint8_t value, volatile void *addr); + +/** + * Write a 16-bit value to I/O device memory address *addr*. + * + * @param value + * Value to write + * @param addr + * I/O memory address to write the value to + */ +static inline void +rte_write16(uint16_t value, volatile void *addr); + +/** + * Write a 32-bit value to I/O device memory address *addr*. + * + * @param value + * Value to write + * @param addr + * I/O memory address to write the value to + */ +static inline void +rte_write32(uint32_t value, volatile void *addr); + +/** + * Write a 64-bit value to I/O device memory address *addr*. + * + * @param value + * Value to write + * @param addr + * I/O memory address to write the value to + */ +static inline void +rte_write64(uint64_t value, volatile void *addr); + +#endif /* __DOXYGEN__ */ + +#endif /* _RTE_IO_H_ */