xref: /linux/scripts/atomic/gen-rust-atomic-helpers.sh (revision 88b489385bfe3713497a63c0dcf4dd7852cf4568)
1*fdd7c7e0SBoqun Feng#!/bin/sh
2*fdd7c7e0SBoqun Feng# SPDX-License-Identifier: GPL-2.0
3*fdd7c7e0SBoqun Feng
4*fdd7c7e0SBoqun FengATOMICDIR=$(dirname $0)
5*fdd7c7e0SBoqun Feng
6*fdd7c7e0SBoqun Feng. ${ATOMICDIR}/atomic-tbl.sh
7*fdd7c7e0SBoqun Feng
8*fdd7c7e0SBoqun Feng#gen_proto_order_variant(meta, pfx, name, sfx, order, atomic, int, arg...)
9*fdd7c7e0SBoqun Fenggen_proto_order_variant()
10*fdd7c7e0SBoqun Feng{
11*fdd7c7e0SBoqun Feng	local meta="$1"; shift
12*fdd7c7e0SBoqun Feng	local pfx="$1"; shift
13*fdd7c7e0SBoqun Feng	local name="$1"; shift
14*fdd7c7e0SBoqun Feng	local sfx="$1"; shift
15*fdd7c7e0SBoqun Feng	local order="$1"; shift
16*fdd7c7e0SBoqun Feng	local atomic="$1"; shift
17*fdd7c7e0SBoqun Feng	local int="$1"; shift
18*fdd7c7e0SBoqun Feng
19*fdd7c7e0SBoqun Feng	local atomicname="${atomic}_${pfx}${name}${sfx}${order}"
20*fdd7c7e0SBoqun Feng
21*fdd7c7e0SBoqun Feng	local ret="$(gen_ret_type "${meta}" "${int}")"
22*fdd7c7e0SBoqun Feng	local params="$(gen_params "${int}" "${atomic}" "$@")"
23*fdd7c7e0SBoqun Feng	local args="$(gen_args "$@")"
24*fdd7c7e0SBoqun Feng	local retstmt="$(gen_ret_stmt "${meta}")"
25*fdd7c7e0SBoqun Feng
26*fdd7c7e0SBoqun Fengcat <<EOF
27*fdd7c7e0SBoqun Feng__rust_helper ${ret}
28*fdd7c7e0SBoqun Fengrust_helper_${atomicname}(${params})
29*fdd7c7e0SBoqun Feng{
30*fdd7c7e0SBoqun Feng	${retstmt}${atomicname}(${args});
31*fdd7c7e0SBoqun Feng}
32*fdd7c7e0SBoqun Feng
33*fdd7c7e0SBoqun FengEOF
34*fdd7c7e0SBoqun Feng}
35*fdd7c7e0SBoqun Feng
36*fdd7c7e0SBoqun Fengcat << EOF
37*fdd7c7e0SBoqun Feng// SPDX-License-Identifier: GPL-2.0
38*fdd7c7e0SBoqun Feng
39*fdd7c7e0SBoqun Feng// Generated by $0
40*fdd7c7e0SBoqun Feng// DO NOT MODIFY THIS FILE DIRECTLY
41*fdd7c7e0SBoqun Feng
42*fdd7c7e0SBoqun Feng/*
43*fdd7c7e0SBoqun Feng * This file provides helpers for the various atomic functions for Rust.
44*fdd7c7e0SBoqun Feng */
45*fdd7c7e0SBoqun Feng#ifndef _RUST_ATOMIC_API_H
46*fdd7c7e0SBoqun Feng#define _RUST_ATOMIC_API_H
47*fdd7c7e0SBoqun Feng
48*fdd7c7e0SBoqun Feng#include <linux/atomic.h>
49*fdd7c7e0SBoqun Feng
50*fdd7c7e0SBoqun Feng// TODO: Remove this after INLINE_HELPERS support is added.
51*fdd7c7e0SBoqun Feng#ifndef __rust_helper
52*fdd7c7e0SBoqun Feng#define __rust_helper
53*fdd7c7e0SBoqun Feng#endif
54*fdd7c7e0SBoqun Feng
55*fdd7c7e0SBoqun FengEOF
56*fdd7c7e0SBoqun Feng
57*fdd7c7e0SBoqun Fenggrep '^[a-z]' "$1" | while read name meta args; do
58*fdd7c7e0SBoqun Feng	gen_proto "${meta}" "${name}" "atomic" "int" ${args}
59*fdd7c7e0SBoqun Fengdone
60*fdd7c7e0SBoqun Feng
61*fdd7c7e0SBoqun Fenggrep '^[a-z]' "$1" | while read name meta args; do
62*fdd7c7e0SBoqun Feng	gen_proto "${meta}" "${name}" "atomic64" "s64" ${args}
63*fdd7c7e0SBoqun Fengdone
64*fdd7c7e0SBoqun Feng
65*fdd7c7e0SBoqun Fengcat <<EOF
66*fdd7c7e0SBoqun Feng#endif /* _RUST_ATOMIC_API_H */
67*fdd7c7e0SBoqun FengEOF
68