Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp2936812imm; Mon, 24 Sep 2018 12:33:56 -0700 (PDT) X-Google-Smtp-Source: ACcGV62eLhIsRvo8xVHvWC1OS6W9DD33GVVAzOsCCXHKL0lHUl5OCc8VufH4Y4y2zc6kbucSmN5c X-Received: by 2002:a63:5605:: with SMTP id k5-v6mr225073pgb.189.1537817636720; Mon, 24 Sep 2018 12:33:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1537817636; cv=none; d=google.com; s=arc-20160816; b=qbkvGjSRgE4i3LEH+QpM4fbMi5CxYtaPXK244OToRR8+aOyslMlHP5vTJBWa07h/9O a0Au0Sd2UKaUby4wGSutkICMC8XWnkw5ibtLIawXPMuRhOc2bTA0tsq+i2y4iP4aXdzG eICGBBe7ovv7sbhcpb/yLZPB9b7Zv8UlOAyg08oQNDFZ/Ze09cGYmGoNjxZVF0EDpUte +8YwO2zrp4q7AFQuX7+ZkyvixjRCxRx/GwmwyQyaFUPvLrdtPO8AgA5FVQIAAmR+tAm3 nr4NAMkUxXfA4sRGohvLY2XDBTxbA2EOkcUO2jTHLO5PNoR3qUesKi3kduZ/gTqcLbOp 53mA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=6E4+VPjtB94gJyVOtzNM+qGka7vvhkBZMLrEEDusNF8=; b=kq6TkX0HPw1uZRavZhM4EobDVpayJWha8ZxedHL4apZ6ca6/xHwUao/0uu+NG2Ps51 9Sd2uIhZqu5mgQbzRuPc+zL6IraYHMUuM5dvR9ixLmx3PlZ/ztuHCWdVe1tG9vvnUugB 11/2LxvPdKgpw49M5FsxhO96xIr4CDO96UPbZb60qzwlJOC+j5zXEz58Bs7oIfKmpcEl lM/GccDyhytvoRxGvc5Og27OB+TEKh3lTCxBOFVpKxLgDbhnogjDVhvG/VXJBBX61hSd eIjx7m01LvxzQyrIMUyAe1QJnOdfnWq9lIb0LpIcFigi3ROQe5lFqbNgiwR8Su1bG9qZ 9DRw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=DFch6TlW; 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 y187-v6si131322pfy.151.2018.09.24.12.33.41; Mon, 24 Sep 2018 12:33:56 -0700 (PDT) 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=@baylibre-com.20150623.gappssmtp.com header.s=20150623 header.b=DFch6TlW; 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 S2388031AbeIYBIG (ORCPT + 99 others); Mon, 24 Sep 2018 21:08:06 -0400 Received: from mail-wr1-f67.google.com ([209.85.221.67]:46460 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731542AbeIYBIF (ORCPT ); Mon, 24 Sep 2018 21:08:05 -0400 Received: by mail-wr1-f67.google.com with SMTP id z3-v6so8957015wrr.13 for ; Mon, 24 Sep 2018 12:04:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=6E4+VPjtB94gJyVOtzNM+qGka7vvhkBZMLrEEDusNF8=; b=DFch6TlWvHU3BjCFhugwRc0uJ9IFby1P4WNiK8cTIU1UdggWNFcKpuznFtq8NjfW0R ylax0kvSksRMTx3SSnv/Aaozm1tA5sFgtIfcLSi/W5+FlZ25LIspLehEZMEAVOAbcHou WSt96xXlu66XmKc3Em9cQhCzVMEbKpxTOFqB7gAgzPXD3DesLBlat6fmMs6lIFs+FLy2 kVDkLSiaJ9oTzoLTAVg6CTcAL5Vj9Xqm2wZm/xUz4Q2Xe+aHb+OyF0L6jmJszHXG98vu stZGI/cEpUev7dtRXjRuuYu6ox5csQPt+S8yvaZ8+stUnd/LO0SyUdgSjm/NbCxdbcFm PHrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=6E4+VPjtB94gJyVOtzNM+qGka7vvhkBZMLrEEDusNF8=; b=iu0+FnEYelZ2OYQbGQBUUBGzflmixM8/uVKsTm9tUXu+qvy9hOdk6uiOkozu2V9YtZ VXI2kBpkluUqggoQhFsECzEMf6GGW4MnK0EKt2seyJAUft+fAEBKYIXt8RGPOvyZbFCe eaJ5Fbvtt9oX2M2FPYhyg+maFPgpV0/p2bLsOB7uah6BJsmC/PU7ehQQpMLoeqrl4zPi fKrRvUycPHmtoKdO3Jnq/qKbi7A9F/kkqW9Fj2DD/3dqpOuBpbwpXwTrwTpi4FDyAEdo cxImJkwToib3FahhFTLyCtV6+xGo13wOeuKeRjOXjzwpDklIAvpFPXVra+l0pJqSViAR qkKQ== X-Gm-Message-State: ABuFfoicsSf3kyZUqYThupoXr//2hJ34vaSYi7fnYDCR1Tvh1WCXg19O 2ttMpag9sM8ne5lwYTB6npvywg== X-Received: by 2002:a5d:61c1:: with SMTP id q1-v6mr150645wrv.33.1537815868736; Mon, 24 Sep 2018 12:04:28 -0700 (PDT) Received: from localhost.localdomain ([51.15.160.169]) by smtp.googlemail.com with ESMTPSA id e141-v6sm27721433wmd.32.2018.09.24.12.04.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 24 Sep 2018 12:04:28 -0700 (PDT) From: Corentin Labbe To: Gilles.Muller@lip6.fr, Julia.Lawall@lip6.fr, agust@denx.de, airlied@linux.ie, alexandre.torgue@st.com, alistair@popple.id.au, benh@kernel.crashing.org, carlo@caione.org, davem@davemloft.net, galak@kernel.crashing.org, joabreu@synopsys.com, khilman@baylibre.com, maxime.ripard@bootlin.com, michal.lkml@markovi.net, mpe@ellerman.id.au, mporter@kernel.crashing.org, narmstrong@baylibre.com, nicolas.palix@imag.fr, oss@buserror.net, paulus@samba.org, peppe.cavallaro@st.com, tj@kernel.org, vitb@kernel.crashing.org, wens@csie.org Cc: cocci@systeme.lip6.fr, dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, netdev@vger.kernel.org, Corentin Labbe Subject: [PATCH v2 2/7] include: add setbits32/clrbits32/clrsetbits32/setbits64/clrbits64/clrsetbits64 in linux/setbits.h Date: Mon, 24 Sep 2018 19:04:11 +0000 Message-Id: <1537815856-31728-3-git-send-email-clabbe@baylibre.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1537815856-31728-1-git-send-email-clabbe@baylibre.com> References: <1537815856-31728-1-git-send-email-clabbe@baylibre.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds setbits32/clrbits32/clrsetbits32 and setbits64/clrbits64/clrsetbits64 in linux/setbits.h header. Signed-off-by: Corentin Labbe --- include/linux/setbits.h | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 include/linux/setbits.h diff --git a/include/linux/setbits.h b/include/linux/setbits.h new file mode 100644 index 000000000000..6e7e257134ae --- /dev/null +++ b/include/linux/setbits.h @@ -0,0 +1,88 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __LINUX_SETBITS_H +#define __LINUX_SETBITS_H + +#include + +#define __setbits(readfunction, writefunction, addr, set) \ + writefunction((readfunction(addr) | (set)), addr) +#define __clrbits(readfunction, writefunction, addr, mask) \ + writefunction((readfunction(addr) & ~(mask)), addr) +#define __clrsetbits(readfunction, writefunction, addr, mask, set) \ + writefunction(((readfunction(addr) & ~(mask)) | (set)), addr) +#define __setclrbits(readfunction, writefunction, addr, mask, set) \ + writefunction(((readfunction(addr) | (set)) & ~(mask)), addr) + +#ifndef setbits_le32 +#define setbits_le32(addr, set) __setbits(readl, writel, addr, set) +#endif +#ifndef setbits_le32_relaxed +#define setbits_le32_relaxed(addr, set) __setbits(readl_relaxed, writel_relaxed, \ + addr, set) +#endif + +#ifndef clrbits_le32 +#define clrbits_le32(addr, mask) __clrbits(readl, writel, addr, mask) +#endif +#ifndef clrbits_le32_relaxed +#define clrbits_le32_relaxed(addr, mask) __clrbits(readl_relaxed, writel_relaxed, \ + addr, mask) +#endif + +#ifndef clrsetbits_le32 +#define clrsetbits_le32(addr, mask, set) __clrsetbits(readl, writel, addr, mask, set) +#endif +#ifndef clrsetbits_le32_relaxed +#define clrsetbits_le32_relaxed(addr, mask, set) __clrsetbits(readl_relaxed, \ + writel_relaxed, \ + addr, mask, set) +#endif + +#ifndef setclrbits_le32 +#define setclrbits_le32(addr, mask, set) __setclrbits(readl, writel, addr, mask, set) +#endif +#ifndef setclrbits_le32_relaxed +#define setclrbits_le32_relaxed(addr, mask, set) __setclrbits(readl_relaxed, \ + writel_relaxed, \ + addr, mask, set) +#endif + +/* We cannot use CONFIG_64BIT as some x86 drivers use non-atomicwriteq() */ +#if defined(writeq) && defined(readq) +#ifndef setbits_le64 +#define setbits_le64(addr, set) __setbits(readq, writeq, addr, set) +#endif +#ifndef setbits_le64_relaxed +#define setbits_le64_relaxed(addr, set) __setbits(readq_relaxed, writeq_relaxed, \ + addr, set) +#endif + +#ifndef clrbits_le64 +#define clrbits_le64(addr, mask) __clrbits(readq, writeq, addr, mask) +#endif +#ifndef clrbits_le64_relaxed +#define clrbits_le64_relaxed(addr, mask) __clrbits(readq_relaxed, writeq_relaxed, \ + addr, mask) +#endif + +#ifndef clrsetbits_le64 +#define clrsetbits_le64(addr, mask, set) __clrsetbits(readq, writeq, addr, mask, set) +#endif +#ifndef clrsetbits_le64_relaxed +#define clrsetbits_le64_relaxed(addr, mask, set) __clrsetbits(readq_relaxed, \ + writeq_relaxed, \ + addr, mask, set) +#endif + +#ifndef setclrbits_le64 +#define setclrbits_le64(addr, mask, set) __setclrbits(readq, writeq, addr, mask, set) +#endif +#ifndef setclrbits_le64_relaxed +#define setclrbits_le64_relaxed(addr, mask, set) __setclrbits(readq_relaxed, \ + writeq_relaxed, \ + addr, mask, set) +#endif + +#endif /* writeq/readq */ + +#endif /* __LINUX_SETBITS_H */ -- 2.16.4