From patchwork Wed Jan 18 01:21:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerin Jacob X-Patchwork-Id: 19668 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 E75ECF961; Wed, 18 Jan 2017 02:23:12 +0100 (CET) Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0059.outbound.protection.outlook.com [104.47.34.59]) by dpdk.org (Postfix) with ESMTP id 48516D592 for ; Wed, 18 Jan 2017 02:22:56 +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=OBw969v5YpEFWUtVLY5tvqeJW1miai5WtsS8w3jv8UE=; b=cbrXFvTlHnsD3HSZg+R/6Ux4yVm5xzBcbKxbtt//uwPCn+VvrdtzsSo6pXcBfpKbh6tP1mIS4EzkS9yq6jFY5GZmxLwc+zpP7/PspT6CFxsb6vnEr1t6NtxC6Hzq/6YH/3Ysd2jIzpVbwOOQn/fXbO7JG69oqe5lpqPpMhZfoXo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Jerin.Jacob@cavium.com; Received: from jerin.caveonetworks.com (111.93.218.67) by BY1PR0701MB1721.namprd07.prod.outlook.com (10.162.111.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12; Wed, 18 Jan 2017 01:22:52 +0000 From: Jerin Jacob To: CC: , , , , , , Jerin Jacob Date: Wed, 18 Jan 2017 06:51:24 +0530 Message-ID: <1484702502-25451-12-git-send-email-jerin.jacob@caviumnetworks.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1484702502-25451-1-git-send-email-jerin.jacob@caviumnetworks.com> References: <1484637244-7548-1-git-send-email-jerin.jacob@caviumnetworks.com> <1484702502-25451-1-git-send-email-jerin.jacob@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: MA1PR01CA0115.INDPRD01.PROD.OUTLOOK.COM (10.174.56.159) To BY1PR0701MB1721.namprd07.prod.outlook.com (10.162.111.140) X-MS-Office365-Filtering-Correlation-Id: 03005216-1da6-4712-5a24-08d43f40875b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BY1PR0701MB1721; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 3:V6BugrRqxr2fJXXsgP1ItTM9ZZCbtAEO8Whk9reyasjxw7f+jm4eXAl25UazFjKTJGRaebiwHcsIe9T8Jit9OWiV9wgicoeoKiZwtaiGVlSBDFN7niahSfBDucpWUPdgVUcerDGfqUPJ+MI9iiQVX6hbK8cgbsatn1e4b9V0AUAkxylxqOCbjOK7rObfH6xVhFfhSsBncyr6aOZWxmpC8tFdTkDeMBx+7T2D2M5GwE5bS5sVKq6Qq6DBSbEi3BIeIZnL/cFx0mQRASH95+e3Hg== X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 25:88ZWLngCWlRhAr7ebIFfiAbFICVbxIEGKpLHektr0M5Jp+hIVAzXxLgg29RvHuZaREwQg4S0ORtbCPrO9qMvcmTrnrON+ELRTMoAjB0xImkTQmbD8CcOacQPRbVwxGaoVDx6OrV+qRzHRuRnDj2WfQMRpPRAPM5/beF5/KVXiWk5wNBpbB7muX1T5EbjGYPRdDrekqORmatYIVGdPK8CnAVD9EmbR7qF413Mbb8VgaO3j/BhsGP0rPJ4CaN9fF3MkCD7r88Tt5q5KHOlIcCi3i+UB2KJd6+68V8jkSYn72tJ4yAtT/J5J8FgtWpNtpfuLo5V0XaHZucRVh/v5EFTxpIuNbUepI3Bp0BcIuUcIPPB60C1J2b657C/rBxaEoFUAbDWy1Q6VNTAfC8iST+hR//tYNw+A18fXFBMit1gsg7SeJijN1QGMV8XVLBrmNseJzR2CgKmrhZuoVp2lr0+nMS5XdlkOPpZHUWsqsbPuyI2R8QCBvHbtD9/btFAqMevTbM1kZR8fph/zPfH97CfWDuQb2RpHeJFjjaXv/NyLs466SllJkvgG8Sb4Bf+DW15a1NjuwCAPleJFH4CWR07jcKjzRqXZLBlLQzVbG+P4UAznduUD/eIRedKuSayQvqp0SuZPF+g8NwTC5d7q0iHxMd4StJXJToHTjekbg3h0rlJfBXQoKWYTJScP7shAFiIiCj+NrykUFsutkQNQtjrovjj4DlBdWpvB+Yo2rV9sHU2OQKwOhFJyZe1w2tibXAKw9bcHs5Tq7tyWSXP/yqtzw== X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 31:Mz91PbimiMiKNId5OHWE5pGOSdbbAVzGSrkNAeh8BtJed2oAgGW+Htjs7Q4849b7mnZq0Cto7J8H4YAKIlPor3BjdeHAROe4d3wvgz7BAh3fGJ4bQJ2oO6X5ou2GEP/1M2uNarbE5ExI4vwmatA9RKmfuQVyj+EbJtGYOsOvltvoRLJKBpph5n7KfiK9UCM6O4vEchWGRCLejzwsJP0ypFmiMA+5Y17O1HLYb3JeV5RaO5rl5jU4SJUaxJuK7tsiF7yVtddP/C7HhPx3TvW88g==; 20:wU3jP7rgwKa+SpQVzOA5QpdDZN25/aeCwV7bFWXJG3/5aJKgD2bAk7CpLGbnQUxJu+GyM+9A0/3eT+CrBtfKD66Akwz3X83yHiPSSYNFO1dmNQGQIngBtBgSlUeCB44XgGFFNbhkDAij+tOi2XRTxlgPGzO7vm+xWT6kJ/+bS562XAhdNzHDS3kdWaTZzdeMe6u5B+XsaKn/dQ0QcLEBhC7108KPWg9oJyExaBG+1XCBT5tt1Pdif1DGl/LV4dHmxg+Bj77i7GzFITZ2jB+1+QhGLiROJyx22Dp59R9lh8MmucSaWUFcYYo6rN8wDDMJ/cp5DqUiE+9DRNzye+rf2Nk8fNRJwzJuDgAFH3cE6JYm6ONmalKw47qhmQnUGXmT5Gufh9dIkWes54Ms0vT8MtHi/IQG/gB9FYy/nAInJkKwKzeyHX+ZXj+gVqN/b5d/Lj4hUUvdJax9ffStRVUbwK9DNvQP+JVhSlkCf33G7oS9uiRPzdeq5bCFma4moSuuY3Jm8HqLOrAJTYfbx7vPZ+f1zSfhiRiFrutgUYOn0WHfLuQP8n52I7yb38eopFELXNrMCOekIpMx9jWjv3YQYlux2G0yaOO9LRG2ojDr8F0= 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)(20161123560025)(20161123564025)(20161123555025)(20161123562025)(6072148); SRVR:BY1PR0701MB1721; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1721; X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 4:sAv9Lso+Kr53+TsWG7D+e+bs7wQckfXcquqmVzJ62ViAIASiOqQUTRhNfOPTAlRlUwPJGmVPLfoGVr+XmqYlj2F2j1gC+jUMqhgsaVSeI2sROtDUnP+Xg0Sfi2fVk20BgsIX9Jb9jrAipkMk1TksmK5BKOIoDEWesaOPUPyCs6Vn5u95bsmcoUzuyiD4QxAKvLcwvnlwTA2Qozg7PepavPZALUuaR6mrWttfYHhGi38FrmH8oMcbKHTg6snON4+kZYoyn8X9VDPA5twdTTS9VduRT4B+9Uc8/ryqQN5j1Mw2Et27RRsVJCAoOFTIgeW0IZJXa3+At6U5A4yNJgEwLAwkIxIdErtZoH3p65Koi4utRR2QJFncB24vuQUDS5RplYHxB7jTp0rJKpYLY5VLViX6dZbV1daFcNF3r/muYYOvB5yfdqn0ke1nqzuV+RA4PQ06lfeQciQkOPMsh/YpKoOSRA5sQCN88z8OCb2BGkxsJz8XJFJD+q1xDJ/X/vVb35vQl+J5MJ52VJ7SigOIj/hJGN9M+db2Qh/NJuzu91+rEBVN1xDtMiSdl+UPn4SqoONz2qnV/HBIbqpMhWf2Zw== X-Forefront-PRVS: 01917B1794 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(39450400003)(199003)(189002)(4326007)(6506006)(50986999)(97736004)(47776003)(107886002)(25786008)(189998001)(54906002)(66066001)(92566002)(101416001)(38730400001)(81156014)(81166006)(6486002)(2906002)(42186005)(53936002)(50226002)(8676002)(2351001)(68736007)(305945005)(53416004)(3846002)(50466002)(6666003)(105586002)(33646002)(6116002)(4001430100002)(5660300001)(6512007)(48376002)(69596002)(76176999)(42882006)(5003940100001)(5009440100003)(36756003)(7736002)(110136003)(6916009)(106356001)(2950100002)(7099028)(41533002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1721; H:jerin.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; BY1PR0701MB1721; 23:YO7V3y/zwHRkKvxda6bCtMfFLI/k5lADiVZry1x?= rR05ppgBmCKMFrdPursFMddiaOM1P0pnyMv3CRzrFbaOaKtwHXzGKE4YYytmoZ1ggk/XoeijVQcECPyu4Gcm1IuQuRmWnWAVtbcuAbu/mMhknB9sEcxIEeSpQBV/nX6jrXU8fybI/nPQAW7qbSTJPEZYgL8HGGLs3/mtz1Ou+SGJfYETzh702H40tBflJbDvhJ/v50FR6e+1jDA47XRJRaQymkZStcpwcVK3OInw9ULkoemtE4QNf1BPGnozVMSWZmfllYpsSodTKWHkE+Nm544ltVHGpxRaSS69SkGBhCbFvC2784BEZ8A+sDIjUTah3z8hrMZ+jIfcu06NhwWBMQMDncU0Wx8y+lMezzynmZrOqvDlLmHkKd7yCi1vms4KHBGVOVnj+1D00SPTRtom5m8YsUQehM9Ja/vh3qMIxqoOIwjno6ahgf27ULAFc2M5C2pIbicFRBXpkDxcvaHyocwMQx/KM+1sPA/QJkOC0RLX6pdFmOJDEG/QXFQo19zeloZWxOiqgaZpVgEte6oVV3Dw0fdH/CA0UQe7qiTqnk44j7NHzik/Stlvkg2VDf6Q8+A6kmW7w4A+zB6MFGOW82gz5Q1M6InrpDBDGK8xGX5llD3TStAz1HrhYIqMiyKep3DwEBfWY98JBF1R4tz0VJ8nkBZ2slvD1OFHco7Ty6kTxqEtas3QUWRbEAIdbAWjuIv1RkxHnBI9ir67y9916OG2mQJTiqnm33y5xAcVmjQRwuL2mo5IZXIwuUsrTY7uUvE4BMd3Awvb6GJU1kSSVRrzJCMyKRrMpJAXO+/9YT0i1pYWxB8UF4bcpfS6BiTvlzohJCtW/1vFFDASZAqoXzKAXrWuD1QIalsKIOIRrSMXKT8XbtoTRpiv0JhLtIn8HYdPIU417snehC3iq1RYrJgLvKWbQtevaGsm5uREO3BwD94mLewX0/HL6lOWhZTrPc68sXKe0Yz7Cmul6YHnxoZpt3nJZURud5HBUNGsAoSEgIoxTHi2yN+gD+19+lfAEZ4vhaz3IuFbAectHLWPl17DejgIKx50R+R6zHz5PPa/EpvRCFQ7c8FefDu0NWVGYM0v5vPtSkU5q36BqDuZnVwZaLrDnuGwDSDY21R9adMtauZQkGhP7hmE7a15tMFpoA2xvp1OtwKG64JDxpEsWCBCU+OhPVi0KmLIuZhjmUPuSpmhMXbp1V530oXHUWpjEuHzhJZmIAROc412nnMXZYR/8GK9+06IPZXwJYqPHWyv0m99tdhMi3TmHdPTiAKsEbD0= X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 6:SooeYOFPLELjgOnyx6GYg/z+QkyoQEBAJjvklckygumbofr6vDGYsq+wkU+ELBLPXOFaNdME9f/JnZ3WuwmrFZ/lXECLsJsGnJkVUwDT1ivg0IX1nbVbdVcrg1pEiYgWMmUZfbIO7xtO3/vRr/R3QSKETS+fBxKiaK09NJKEytA24pTIQsbWbmCHnLlqNpzLL3edEL/9n10ytmk85691XFQkEsYVkij1Ar4pQchH+3ipfU22oFZtExh4wUYU9pkbbCCNiXODwFK0CwhipqDlTW+M65hBveC5jhLGudU2ITQR0dDzKhw1O8YFNAH2nxdYQq1+NHGVMS4MI0x4sSHjh4c0v0KmQVdkq8pa8/zaNuP+MnCOOiX1hpLOMb7SDPLRd5fjtTzoF0EDNv8e4VNvPRf5PCaLM6lJ7+l2dYB4pnc=; 5:6WEzWalllNurmFgJi16Nqo+lXUm1NWh+OVuGmpJVULDkPpsNCyDfzpLP+8GmNC47MCWepE+/C1RYKNpnYlgdtjMbFS07pLmmCLNBD7AmidOp6pBXDkGln9L9+83z44IChersxoEfddTs17eq3UG3gjehQloKFvxqg+VxPW+SnOI=; 24:KVU2WA/XkQDmjYxkLJQMJ8BNBecAv4qs104akKwSHz6J2z1L9lj8Nbg/DHdT2NypY8xvjhqHtaACkqw7XCBY/sRoQm5ZwgFg0eabNlBrte4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY1PR0701MB1721; 7:Nly8KL3uxfm0DN6XsuAGBIiesEqZs7pK6gj7bM4GxFvm6lZjZDeCtQiFS5RZXR/nygNpbFZbrZ4IxiDvZAsQ72cC2+a8ZcpX/XimIfqqTkEzunW5Bazp9wkBvjlcsf64PQnMrcW/Uc1s6dyC/SvrmC5ETsZ35i5fSbiJx6dPm/cx/9gG/32RgF8NbMlXLGjZgrGT21MoP383VCB0VVi64vJmezwjCVoRYGOTT7tEwHuC65pC9i9QKyU1iW50jhUgRMK5TShSyJqj5ULjCWpquRWktTDu96HbQmWqB0pFhESLoEs0d8XlknESWrGLK4bCQeZWLq9epgJwZjUJ7NHAzEJLy0vUk5WsInZFwccrbABVZY7TB9vkUceR5CSNSGI+FDywQ0mZMjuJ85OO+fRe58ljrVzLWJ8H79aEcSW3sJwnCI8g6LvNB4w97mAatBDLywvIUfEt4lZJ6YkE+FD7gg== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2017 01:22:52.0117 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1721 Subject: [dpdk-dev] [PATCH v5 11/29] eal: generic implementation for I/O device read/write access 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 patch implements the generic version of rte_read[b/w/l/q]_[relaxed] and rte_write[b/w/l/q]_[relaxed] using rte_io_wmb() and rte_io_rmb() Signed-off-by: Jerin Jacob --- lib/librte_eal/common/include/generic/rte_io.h | 118 +++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/lib/librte_eal/common/include/generic/rte_io.h b/lib/librte_eal/common/include/generic/rte_io.h index edfebf8..d82ee69 100644 --- a/lib/librte_eal/common/include/generic/rte_io.h +++ b/lib/librte_eal/common/include/generic/rte_io.h @@ -34,6 +34,8 @@ #ifndef _RTE_IO_H_ #define _RTE_IO_H_ +#include + /** * @file * I/O device memory operations @@ -260,4 +262,120 @@ rte_write64(uint64_t value, volatile void *addr); #endif /* __DOXYGEN__ */ +#ifndef RTE_OVERRIDE_IO_H + +static inline uint8_t __attribute__((always_inline)) +rte_read8_relaxed(const volatile void *addr) +{ + return *(const volatile uint8_t *)addr; +} + +static inline uint16_t __attribute__((always_inline)) +rte_read16_relaxed(const volatile void *addr) +{ + return *(const volatile uint16_t *)addr; +} + +static inline uint32_t __attribute__((always_inline)) +rte_read32_relaxed(const volatile void *addr) +{ + return *(const volatile uint32_t *)addr; +} + +static inline uint64_t __attribute__((always_inline)) +rte_read64_relaxed(const volatile void *addr) +{ + return *(const volatile uint64_t *)addr; +} + +static inline void __attribute__((always_inline)) +rte_write8_relaxed(uint8_t value, volatile void *addr) +{ + *(volatile uint8_t *)addr = value; +} + +static inline void __attribute__((always_inline)) +rte_write16_relaxed(uint16_t value, volatile void *addr) +{ + *(volatile uint16_t *)addr = value; +} + +static inline void __attribute__((always_inline)) +rte_write32_relaxed(uint32_t value, volatile void *addr) +{ + *(volatile uint32_t *)addr = value; +} + +static inline void __attribute__((always_inline)) +rte_write64_relaxed(uint64_t value, volatile void *addr) +{ + *(volatile uint64_t *)addr = value; +} + +static inline uint8_t __attribute__((always_inline)) +rte_read8(const volatile void *addr) +{ + uint8_t val; + val = rte_read8_relaxed(addr); + rte_io_rmb(); + return val; +} + +static inline uint16_t __attribute__((always_inline)) +rte_read16(const volatile void *addr) +{ + uint16_t val; + val = rte_read16_relaxed(addr); + rte_io_rmb(); + return val; +} + +static inline uint32_t __attribute__((always_inline)) +rte_read32(const volatile void *addr) +{ + uint32_t val; + val = rte_read32_relaxed(addr); + rte_io_rmb(); + return val; +} + +static inline uint64_t __attribute__((always_inline)) +rte_read64(const volatile void *addr) +{ + uint64_t val; + val = rte_read64_relaxed(addr); + rte_io_rmb(); + return val; +} + +static inline void __attribute__((always_inline)) +rte_write8(uint8_t value, volatile void *addr) +{ + rte_io_wmb(); + rte_write8_relaxed(value, addr); +} + +static inline void __attribute__((always_inline)) +rte_write16(uint16_t value, volatile void *addr) +{ + rte_io_wmb(); + rte_write16_relaxed(value, addr); +} + +static inline void __attribute__((always_inline)) +rte_write32(uint32_t value, volatile void *addr) +{ + rte_io_wmb(); + rte_write32_relaxed(value, addr); +} + +static inline void __attribute__((always_inline)) +rte_write64(uint64_t value, volatile void *addr) +{ + rte_io_wmb(); + rte_write64_relaxed(value, addr); +} + +#endif /* RTE_OVERRIDE_IO_H */ + #endif /* _RTE_IO_H_ */