| 1 | |
| 2 | |
| 3 |
|
| 4 | ATOMICDIR=$(dirname $0)
|
| 5 |
|
| 6 | . ${ATOMICDIR}/atomic-tbl.sh
|
| 7 |
|
| 8 | |
| 9 | gen_cast()
|
| 10 | {
|
| 11 | local arg="$1"; shift
|
| 12 | local int="$1"; shift
|
| 13 | local atomic="$1"; shift
|
| 14 |
|
| 15 | [ "${arg%%:*}" = "p" ] || return
|
| 16 |
|
| 17 | printf "($(gen_param_type "${arg}" "${int}" "${atomic}"))"
|
| 18 | }
|
| 19 |
|
| 20 | |
| 21 | gen_args_cast()
|
| 22 | {
|
| 23 | local int="$1"; shift
|
| 24 | local atomic="$1"; shift
|
| 25 |
|
| 26 | while [ "$#" -gt 0 ]; do
|
| 27 | local cast="$(gen_cast "$1" "${int}" "${atomic}")"
|
| 28 | local arg="$(gen_param_name "$1")"
|
| 29 | printf "${cast}${arg}"
|
| 30 | [ "$#" -gt 1 ] && printf ", "
|
| 31 | shift;
|
| 32 | done
|
| 33 | }
|
| 34 |
|
| 35 | |
| 36 | gen_proto_order_variant()
|
| 37 | {
|
| 38 | local meta="$1"; shift
|
| 39 | local pfx="$1"; shift
|
| 40 | local name="$1"; shift
|
| 41 | local sfx="$1"; shift
|
| 42 | local order="$1"; shift
|
| 43 |
|
| 44 | local atomicname="${pfx}${name}${sfx}${order}"
|
| 45 |
|
| 46 | local ret="$(gen_ret_type "${meta}" "long")"
|
| 47 | local params="$(gen_params "long" "atomic_long" "$@")"
|
| 48 | local argscast_32="$(gen_args_cast "int" "atomic" "$@")"
|
| 49 | local argscast_64="$(gen_args_cast "s64" "atomic64" "$@")"
|
| 50 | local retstmt="$(gen_ret_stmt "${meta}")"
|
| 51 |
|
| 52 | gen_kerneldoc "raw_" "${meta}" "${pfx}" "${name}" "${sfx}" "${order}" "atomic_long" "long" "$@"
|
| 53 |
|
| 54 | cat <<EOF
|
| 55 | static __always_inline ${ret}
|
| 56 | raw_atomic_long_${atomicname}(${params})
|
| 57 | {
|
| 58 | #ifdef CONFIG_64BIT
|
| 59 | ${retstmt}raw_atomic64_${atomicname}(${argscast_64});
|
| 60 | #else
|
| 61 | ${retstmt}raw_atomic_${atomicname}(${argscast_32});
|
| 62 | #endif
|
| 63 | }
|
| 64 |
|
| 65 | EOF
|
| 66 | }
|
| 67 |
|
| 68 | cat << EOF
|
| 69 | // SPDX-License-Identifier: GPL-2.0
|
| 70 |
|
| 71 | // Generated by $0
|
| 72 | // DO NOT MODIFY THIS FILE DIRECTLY
|
| 73 |
|
| 74 | #ifndef _LINUX_ATOMIC_LONG_H
|
| 75 | #define _LINUX_ATOMIC_LONG_H
|
| 76 |
|
| 77 | #include <linux/compiler.h>
|
| 78 | #include <asm/types.h>
|
| 79 |
|
| 80 | #ifdef CONFIG_64BIT
|
| 81 | typedef atomic64_t atomic_long_t;
|
| 82 | #define ATOMIC_LONG_INIT(i) ATOMIC64_INIT(i)
|
| 83 | #define atomic_long_cond_read_acquire atomic64_cond_read_acquire
|
| 84 | #define atomic_long_cond_read_relaxed atomic64_cond_read_relaxed
|
| 85 | #else
|
| 86 | typedef atomic_t atomic_long_t;
|
| 87 | #define ATOMIC_LONG_INIT(i) ATOMIC_INIT(i)
|
| 88 | #define atomic_long_cond_read_acquire atomic_cond_read_acquire
|
| 89 | #define atomic_long_cond_read_relaxed atomic_cond_read_relaxed
|
| 90 | #endif
|
| 91 |
|
| 92 | EOF
|
| 93 |
|
| 94 | grep '^[a-z]' "$1" | while read name meta args; do
|
| 95 | gen_proto "${meta}" "${name}" ${args}
|
| 96 | done
|
| 97 |
|
| 98 | cat <<EOF
|
| 99 | #endif /* _LINUX_ATOMIC_LONG_H */
|
| 100 | EOF
|