Received: by 10.223.176.46 with SMTP id f43csp486899wra; Wed, 24 Jan 2018 01:06:56 -0800 (PST) X-Google-Smtp-Source: AH8x224A2BD+DQUPQiRi3R5/yhkrHYc8/F/VmCAYiTXzOelTFwMSSLVvkFm1/u6xfTCAzalTDWrM X-Received: by 10.99.96.199 with SMTP id u190mr10266904pgb.290.1516784816045; Wed, 24 Jan 2018 01:06:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516784816; cv=none; d=google.com; s=arc-20160816; b=nfEkElhNc7D5tJLq09SyxQn22qm8qt/A/nesXKBYcUNAI3DxnedVrFuxZTUlaPY77M 0GKyzlg7rVl0UjwbDkMTA9X3+QrUgeSYdJ+yLmM+yHnO1umnB1tfuy80di+9nEleZvi0 VTxPfLqXUSouCn/fSKGYFWKAF0hcIyUdzISknzNQ6mF+P6yTvkyTOhFeDqoWPIR/GNkj qi/7iwfLRtmAh7vdid55aUC3aX+WsOFqeqN9mY8Z9h2mQK6LyIj6QnSF5/zrIWAosA+y DByrs451e4WDAj7da/Z/131WVY9Wh+mjhFZhiT+KsORsLQnocq1y2AcMdJFW/e/Lt+g5 7acw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:spamdiagnosticmetadata :spamdiagnosticoutput:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature:arc-authentication-results; bh=2crrhqgzOa+enelW9tMKNYvMFjnuqRF3JTbJ9cqinh8=; b=nek/9L/jIn6GOeGI1oge7yj+Wr/JZ8Q/rZc/Xv7GIkfYauojiVkZ7MDzkKLxI62y6C 4TBfuegP7IA1y5X4+NPYwrrlRKpVzA2kwGSBnFkSd+sX4Wg/mfv0lCN7+dkOtdPhvsPU Kw/AGo10Rp4gzG8kvy3L8YyhM1pWGupOtGx5lpfabn2MzkNJKBV3KxNW+JTAPxt4HZ0h C9OGr9sQ0LZRoT0jeolPX48iQM6Acz7Qf8/I6tNebIisZ4R0P5ecGCsAKW7pjVLAe0Uo RZTMxjdl5FvBU5GTHiIGZnnL4nRxLkoDdvBORoqL2bNKJtlmt9hQal+dCg+1rsdu47M4 32Wg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@CAVIUMNETWORKS.onmicrosoft.com header.s=selector1-cavium-com header.b=ZetiVHgA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e11-v6si3555801plo.556.2018.01.24.01.06.42; Wed, 24 Jan 2018 01:06:56 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@CAVIUMNETWORKS.onmicrosoft.com header.s=selector1-cavium-com header.b=ZetiVHgA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932894AbeAXJGF (ORCPT + 99 others); Wed, 24 Jan 2018 04:06:05 -0500 Received: from mail-bn3nam01on0056.outbound.protection.outlook.com ([104.47.33.56]:6706 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932356AbeAXJFw (ORCPT ); Wed, 24 Jan 2018 04:05:52 -0500 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=2crrhqgzOa+enelW9tMKNYvMFjnuqRF3JTbJ9cqinh8=; b=ZetiVHgAtVnAVBUxxgd/o7TgoT9U5Z9CYnHU7P8gTM8cHPppTQ+7I87AGvTNGEqxNyWWwsF1+sC5oaKmP0TG1dK7t6ZHcMILuOYX2YtJlTt9fYtUndqzpqMrbikfcArDLrFo6sHFATgsKgrNiCh+p7At4yw3rQl+niHZ8V/jRdI= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Yuri.Norov@cavium.com; Received: from localhost (42.106.18.247) by MWHPR07MB2910.namprd07.prod.outlook.com (10.169.231.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.444.14; Wed, 24 Jan 2018 09:05:47 +0000 From: Yury Norov To: linux-arm-kernel@lists.infradead.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org Cc: Yury Norov , Al Viro , Andrew Morton , Andrew Pinski , Arnd Bergmann , Catalin Marinas , "David S . Miller" , Geethasowjanya Akula , Greg Kroah-Hartman , Ingo Molnar , Kees Cook , Laura Abbott , Nicholas Piggin , Sunil Goutham , Will Deacon Subject: [PATCH 1/3] UAPI: Introduce 128-bit types and byteswap operations Date: Wed, 24 Jan 2018 12:05:17 +0300 Message-Id: <20180124090519.6680-2-ynorov@caviumnetworks.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20180124090519.6680-1-ynorov@caviumnetworks.com> References: <20180124090519.6680-1-ynorov@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [42.106.18.247] X-ClientProxiedBy: DB3PR0202CA0006.eurprd02.prod.outlook.com (52.134.64.147) To MWHPR07MB2910.namprd07.prod.outlook.com (10.169.231.22) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 17fed08f-28d3-47a1-7bd6-08d56309a8f5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020);SRVR:MWHPR07MB2910; X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB2910;3:fhuUP0qnnk2C342iyPCfd/2S40LEDgl8wiDhk2erRAvxJLl47GYxfwNmf4YxLXznoCfwjTQ0pVycLIENg0VY8Se8eMHn2agfCarNoZ1WwTBEslXHtr5EA4MkxGbxjpRTFQ0vCJQ1vZQZ+j6M2mztGvplh9yBTOpn0YFC9mLsLYlf3cR7oH9+hs4pmsRWc8EIrvofZuaFnlKuV2D6mN4RYlvw7U6fzg+aQjcC2S1MhgoUbeqoJIl7QHdFZiPJmZn+;25:XOYP9/+/vz93M5OtOm4vR9nqvoOpvYlh679YY7IpgMwaClzKiYvr7twxqCz8lMdyWHLFYXvLaqcuBbShtM/IC73R7Yc76JN7D/aO8KvcH/Ivags28Etubj/6xSGZD+mmMuSUxU1boCNDl6/lFY9x1p01XV78V4z/+6Ih2/5Lvk4AGYD5F4YNdlBCKgNicJrDVJj2yCwL6j6WPNyc2dNu5UIyy320DvhYVRVbd1X+BAr7PRf5HWVxXsb27hYk07xLKrdq6FqTS0W6abhVwTtMhwwXaRCpLa3LKBKXUUgzV4qygSni5JxXZacm9h9QmxTIjCGrzSZnEYm1o06bKaOQ9A==;31:5VtsF93AF1b4QSluHCttIPtZ2ofBL8eQrikoqi+OgCK9tCT6WH2fCtjuJG1VCsCsmDWnbQEjz6X/dbkybp18QbpnK5VVbXER8pARJ5MxbFfkTGmnyMOx1V+291xKqGgXdyGtZH+IclTUHOCj/o3ITHRa5Pwfm7fCFXkDGxJanShepA541hnMQYumlJQi2SGxSk4B7T+MzblPlBDBx6ReZfwO1MjrC+G8Y4snEExfiz4= X-MS-TrafficTypeDiagnostic: MWHPR07MB2910: X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB2910;20:kMXpdD+VPSpkJJRGlON5LFjoF1GM08e7EhY2L6Mv4539BnXuYb84+Dpw6hTHZqRrOwyfNmGQua3TVSzWhwEdEPxJsN1CUI3D1ZUBdubD0ZBOYYGPP1ygH0I8gv2peBT83X+cCzcnN1/fiqFO/wh3XV/8A9OxVpNKBZVgEvcSWoc3VSHCCmYOxVW/yjApkYlskg6hPa+P5OQtVqR0b4oQwEazKfwxT/YsnxBg3WZOsUI1dAmKgtXdyND5ebAvKiyQDOf75FonJxYcne81u5TsgTl+sAjR2tlKgYh/XB6H25+YITA/t/t+V8S7TWtBZEltqqyk2jBN6mgExF271x8QFHbgpvNtAQyhmBMMl+nnvDMgrFfrARGFPixNsujPCSg5OvCXpnXlTDhs4uc08X/az1aQrZZ2fao7MawQdYsQf7owSXGpq1xoETagyRoJ9pJWazbcHTYlov3hgI2IM1E9XsU2RCc4IReZlZilh4q4oG65m1goZLUDCoQQCFQ2VQ748K5Oq+IJbhO/EKj9LgCfkkaKUgED4xtmWKhT6Di1R4l3WZJkrFMQlRetM+j5dwUwm7KW3kbjt9DnzcDI5XsV1hzpD/Kmvgj1UG0BM3bAgB0=;4:FcV6hutYbapaoZV6dni5JipvTCdVXOh4qBdfVOatqAxBq6qWDukJaYbu8Ns1xUbI48VswEIYhYApFcgfnH2llGiz6KguP17Ck/HhOtGXDlek4PO4eGQv5EoHYrXoXRpoVCZXshfp0ejJGDPcIrCWasHWxzmqI28GPNV4w5To8f9JUjLss3SD2lQf2bzXgK7IDZv7W2L89h0KAu8Nlwqa+PCRZvtrSDZvbjvMF6bhek4gWBz7Z7YVATuJX4onoaNCZLUnZ8ItIgpEqVo1XXHPvA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040501)(2401047)(5005006)(8121501046)(3002001)(3231023)(2400081)(944501161)(10201501046)(93006095)(6041288)(20161123564045)(20161123562045)(20161123558120)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011);SRVR:MWHPR07MB2910;BCL:0;PCL:0;RULEID:;SRVR:MWHPR07MB2910; X-Forefront-PRVS: 056297E276 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6069001)(396003)(39860400002)(346002)(39380400002)(366004)(376002)(189003)(199004)(81166006)(81156014)(50466002)(42882006)(7736002)(16526018)(5009440100003)(4326008)(16586007)(26005)(6496006)(47776003)(52116002)(51416003)(2906002)(36756003)(7416002)(25786009)(59450400001)(386003)(54906003)(76176011)(478600001)(39060400002)(305945005)(106356001)(316002)(8676002)(72206003)(66066001)(97736004)(3846002)(6116002)(1076002)(53936002)(105586002)(6486002)(50226002)(8936002)(575784001)(5660300001)(2950100002)(6666003)(76506005)(68736007)(48376002);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR07MB2910;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A: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;MWHPR07MB2910;23:cqeOKcySnwZdxZimFxhtT1nAblMf2RATvHMvTLM4P?= =?us-ascii?Q?c4OOK2nVoc3kFDAU2p7HQAFM4akFQIixOE6NSn1cI/qJF4SHCGs0W4+23OIR?= =?us-ascii?Q?PAQHE590lgXdQQEgiPtSJMqZSVHBVs98LqcQ0kYa8HpYdNB5luQcmQyCpH5P?= =?us-ascii?Q?Np8R+CCLZbNEKk38s95d/ZVZ63UdigeZ511BS193GfY4XcsGP8vye9oQgBGj?= =?us-ascii?Q?4IplDEhkBs40OUySGD06JwI65ofINhvAkZBU3rhM9F4GkGcYIcZIY9dHgjS+?= =?us-ascii?Q?boy3lWgM42qKmrNg/G8BNTWH5PzDzgMuVaof4WK6V/iOeAlg0OeXdLOvWYhl?= =?us-ascii?Q?2ttODUnAVVY8ROs2S88DcC31+ctWitlnebAt06v7bs+pHKzZ0A2EEQpb2L6j?= =?us-ascii?Q?uhCERrIRq7rCk0bqg7eeHivD/Gz/s9KRqi1z26hGSkbtYkBTIwIJ49LBisRY?= =?us-ascii?Q?9eS4VscBN6eqCLTo85wxw2ea8PcXYQGJIr3LZn9p3vS6WQ7cE/ngo4G+QtxJ?= =?us-ascii?Q?R1W4NEgYolStX30RPgL5hPD1RNR9jeXrNaBUm3RUIjwFJd+foDS+ERZ55Jbs?= =?us-ascii?Q?Pm5pAUv6D+WTtp+6bniGpDRhILCJ99kAZXh48fAM8hXN9XgWUD5MYWrQ6acg?= =?us-ascii?Q?98HmdspAuuPD4EnBWvMnkSc0EGkGZ1iIHvPCpfomuIcsQr4seu8fxsm960X0?= =?us-ascii?Q?jm23xGqO1tgRE+bAd9QAi4h/qIqGp/NK9PsAJ3ssDqJIb8gyOr9OOY5HXhZI?= =?us-ascii?Q?hwbwd66eEaKG7CACcIp8yvEF0AgXAjjcNp2iDdocT4w+QEnwsqUSSmV0kIjV?= =?us-ascii?Q?MXUVhlRr6EmmeQVswR3bBoIHi54kSprHIP3NsC92ZYHSYrkR2k8zebO6ZtSh?= =?us-ascii?Q?0aN9o40e8xhUvyu6Oj4XR6fZCfmWUKTPWXnwv+rmEhEl1SKfdLlPFmI6siTk?= =?us-ascii?Q?R0uR2JM6YIfW+Ezbx2JsMFzsGiN00j9yoZccmfsrCX1k4/o/kxX0pviJnuat?= =?us-ascii?Q?rsXG9jDb3osoJqOCgBuJB7mdvUtIqFkJGgBuh8lMsKWLQa3Vcyc1MHXtEwQ5?= =?us-ascii?Q?4YoHiFYzDGLMF9iLEMYj1Y5uUwzOPd6rQPwlCBOBQ2k2t/m24c21pzsPD8Qn?= =?us-ascii?Q?fKfiKTAfByPYLpYIpLIdjZXMw3ROtOuN9+YgRn9E9PHUURcl7mayHq9jCEhG?= =?us-ascii?Q?2Q9AUSOjbKoeG8EB5u0+07c9a68I7+0rBpl9gutmTxpIgDt+GIbJnHm19Bot?= =?us-ascii?Q?ODdye4B2TKLZdmQSES6EcC7AQhsh1Ark/4DbZjU?= X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB2910;6:PBT5B3ih/dT8jIvzMPRmcXFZJ5uejbt5+uzcZwvxz5N39U9sx86kYbQBMEZ4bdk4ukMcBSf/OuvqCTd1vZCknEoc+ONN82hCYl6AIgj0TpmObJi3tvWgr9P/BZ98aAd8rgNU8Nu/oR+Z3zcAuFXhJB4lJPSlgRgw6cGR95bd8SySt96z2lLZNXZzujgYFxhOOAO28Jjf551U6PiL7eYu/NtvBJC6c3/02jGKEsSouAmqY4Vae69uHAYrcg2gNtzNSUAuviVEjCrVwbYfGvsOvZoG5nFF3XKGEX/FoCzXud5Qb4/B/8S8+kJfM7DnP9WPjtOVm7tdhXOL3rS+ZJ0pTw/ez4ox1KWUTm0JI0iCYTE=;5:hEG6jsGeAaU06bVpEcwRe0EUxAunF4hipbbno3TyVcBcUoqf1FXYqZlCbMmb3Y5YNWk4crPnLYfTB3y02PJFDpgdUobOyLZFpv4B6QQtvzgAE5WVuThwUcnoqKhldUEaC6sWpvPIa4epvVf4DxASoF5EJ47iI1cSujO0pSV1bcc=;24:p3DZZ8yChSwMmXnSnFWG9IDrLe5gsCCnw+ldcVGVKlpgq+KjCCbWehQh70te0xsk9u+Aj1wShmzl6EM9zXQo4s2bzYbjIbvdZC2WxQIMf3E=;7:/rZLR/dMdB4fjPAwGVYTiP0cdch/oKWo9rgHroyfXX3eKPYORFEYsI2viq/Tt1w+w7Mtlio6kw8IQ6AgnUi675OFhABCOUA9O4grtY00bxCsW1zHA09gxkeAAFmoPqDLerL4v0JtjlFYRYCYfvV77Cr9jLczKnTDgGHqmmesm5y6rRIDRInjMTjZ5j6kuV1tfiJfjU7Dud/uGg9rcZ7ps7+PxhZW18PSmw9BH6n8up26flomTEuMfv69jcmeC0Wp SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jan 2018 09:05:47.2058 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 17fed08f-28d3-47a1-7bd6-08d56309a8f5 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB2910 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Architectures like arm64 support 128-bit integer types and operations. This patch introduces corresponding types and __swab128() operation for be/le conversions. They are required to implement 128-bit access to the memory, in following patches. Signed-off-by: Yury Norov --- include/linux/byteorder/generic.h | 8 ++++++++ include/uapi/asm-generic/int-ll64.h | 8 ++++++++ include/uapi/linux/byteorder/big_endian.h | 4 ++++ include/uapi/linux/byteorder/little_endian.h | 8 ++++++++ include/uapi/linux/swab.h | 22 ++++++++++++++++++++++ include/uapi/linux/types.h | 4 ++++ 6 files changed, 54 insertions(+) diff --git a/include/linux/byteorder/generic.h b/include/linux/byteorder/generic.h index 451aaa0786ae..aa61662ee3dc 100644 --- a/include/linux/byteorder/generic.h +++ b/include/linux/byteorder/generic.h @@ -85,12 +85,20 @@ #define cpu_to_le64 __cpu_to_le64 #define le64_to_cpu __le64_to_cpu +#ifdef CONFIG_HAVE_128BIT_ACCESS +#define cpu_to_le128 __cpu_to_le128 +#define le128_to_cpu __le128_to_cpu +#endif #define cpu_to_le32 __cpu_to_le32 #define le32_to_cpu __le32_to_cpu #define cpu_to_le16 __cpu_to_le16 #define le16_to_cpu __le16_to_cpu #define cpu_to_be64 __cpu_to_be64 #define be64_to_cpu __be64_to_cpu +#ifdef CONFIG_HAVE_128BIT_ACCESS +#define cpu_to_be128 __cpu_to_be128 +#define be128_to_cpu __be128_to_cpu +#endif #define cpu_to_be32 __cpu_to_be32 #define be32_to_cpu __be32_to_cpu #define cpu_to_be16 __cpu_to_be16 diff --git a/include/uapi/asm-generic/int-ll64.h b/include/uapi/asm-generic/int-ll64.h index 1ed06964257c..4bc2241988a9 100644 --- a/include/uapi/asm-generic/int-ll64.h +++ b/include/uapi/asm-generic/int-ll64.h @@ -29,9 +29,17 @@ typedef unsigned int __u32; #ifdef __GNUC__ __extension__ typedef __signed__ long long __s64; __extension__ typedef unsigned long long __u64; +#ifdef CONFIG_HAVE_128BIT_ACCESS +__extension__ typedef __int128_t __s128; +__extension__ typedef __uint128_t __u128; +#endif #else typedef __signed__ long long __s64; typedef unsigned long long __u64; +#ifdef CONFIG_HAVE_128BIT_ACCESS +typedef __int128_t __s128; +typedef __uint128_t __u128; +#endif #endif #endif /* __ASSEMBLY__ */ diff --git a/include/uapi/linux/byteorder/big_endian.h b/include/uapi/linux/byteorder/big_endian.h index 2199adc6a6c2..28a69ec10dd2 100644 --- a/include/uapi/linux/byteorder/big_endian.h +++ b/include/uapi/linux/byteorder/big_endian.h @@ -30,6 +30,10 @@ #define __constant_be16_to_cpu(x) ((__force __u16)(__be16)(x)) #define __cpu_to_le64(x) ((__force __le64)__swab64((x))) #define __le64_to_cpu(x) __swab64((__force __u64)(__le64)(x)) +#ifdef CONFIG_HAVE_128BIT_ACCESS +#define __cpu_to_le128(x) ((__force __le128)__swab128((x))) +#define __le128_to_cpu(x) __swab128((__force __u128)(__le128)(x)) +#endif #define __cpu_to_le32(x) ((__force __le32)__swab32((x))) #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x)) #define __cpu_to_le16(x) ((__force __le16)__swab16((x))) diff --git a/include/uapi/linux/byteorder/little_endian.h b/include/uapi/linux/byteorder/little_endian.h index 601c904fd5cd..15365bd0fe29 100644 --- a/include/uapi/linux/byteorder/little_endian.h +++ b/include/uapi/linux/byteorder/little_endian.h @@ -18,6 +18,10 @@ #define __constant_ntohs(x) ___constant_swab16((__force __be16)(x)) #define __constant_cpu_to_le64(x) ((__force __le64)(__u64)(x)) #define __constant_le64_to_cpu(x) ((__force __u64)(__le64)(x)) +#ifdef CONFIG_HAVE_128BIT_ACCESS +#define __constant_cpu_to_le128(x) ((__force __le128)(__u128)(x)) +#define __constant_le128_to_cpu(x) ((__force __u128)(__le128)(x)) +#endif #define __constant_cpu_to_le32(x) ((__force __le32)(__u32)(x)) #define __constant_le32_to_cpu(x) ((__force __u32)(__le32)(x)) #define __constant_cpu_to_le16(x) ((__force __le16)(__u16)(x)) @@ -30,6 +34,10 @@ #define __constant_be16_to_cpu(x) ___constant_swab16((__force __u16)(__be16)(x)) #define __cpu_to_le64(x) ((__force __le64)(__u64)(x)) #define __le64_to_cpu(x) ((__force __u64)(__le64)(x)) +#ifdef CONFIG_HAVE_128BIT_ACCESS +#define __cpu_to_le128(x) ((__force __le128)(__u128)(x)) +#define __le128_to_cpu(x) ((__force __u128)(__le128)(x)) +#endif #define __cpu_to_le32(x) ((__force __le32)(__u32)(x)) #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) #define __cpu_to_le16(x) ((__force __le16)(__u16)(x)) diff --git a/include/uapi/linux/swab.h b/include/uapi/linux/swab.h index 23cd84868cc3..a7e97eb06a3e 100644 --- a/include/uapi/linux/swab.h +++ b/include/uapi/linux/swab.h @@ -75,6 +75,20 @@ static inline __attribute_const__ __u64 __fswab64(__u64 val) #endif } +#ifdef CONFIG_HAVE_128BIT_ACCESS +static inline __attribute_const__ __u128 __fswab128(__u128 val) +{ +#if defined(__arch_swab128) + return __arch_swab128(val); +#else + __u64 h = (__u64) (val >> 64); + __u64 l = (__u64) val; + + return (((__u128)__fswab64(l)) << 64) | (__u128)(__fswab64(h)); +#endif +} +#endif + static inline __attribute_const__ __u32 __fswahw32(__u32 val) { #ifdef __arch_swahw32 @@ -132,6 +146,14 @@ static inline __attribute_const__ __u32 __fswahb32(__u32 val) __fswab64(x)) #endif +#ifdef CONFIG_HAVE_128BIT_ACCESS +/** + * __swab128 - return a byteswapped 128-bit value + * @x: value to byteswap + */ +#define __swab128(x) __fswab128(x) +#endif + /** * __swahw32 - return a word-swapped 32-bit value * @x: value to wordswap diff --git a/include/uapi/linux/types.h b/include/uapi/linux/types.h index cd4f0b897a48..a4500baaccd6 100644 --- a/include/uapi/linux/types.h +++ b/include/uapi/linux/types.h @@ -32,6 +32,10 @@ typedef __u32 __bitwise __le32; typedef __u32 __bitwise __be32; typedef __u64 __bitwise __le64; typedef __u64 __bitwise __be64; +#ifdef CONFIG_HAVE_128BIT_ACCESS +typedef __u128 __bitwise __le128; +typedef __u128 __bitwise __be128; +#endif typedef __u16 __bitwise __sum16; typedef __u32 __bitwise __wsum; -- 2.11.0