VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   33 Branches   57 Tags
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100   1) #!/bin/sh
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100   2) # SPDX-License-Identifier: GPL-2.0
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100   3) # helpers for dealing with atomics.tbl
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100   4) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100   5) #meta_in(meta, match)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100   6) meta_in()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100   7) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100   8) 	case "$1" in
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100   9) 	[$2]) return 0;;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  10) 	esac
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  11) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  12) 	return 1
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  13) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  14) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  15) #meta_has_ret(meta)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  16) meta_has_ret()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  17) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  18) 	meta_in "$1" "bBiIfFlR"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  19) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  20) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  21) #meta_has_acquire(meta)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  22) meta_has_acquire()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  23) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  24) 	meta_in "$1" "BFIlR"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  25) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  26) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  27) #meta_has_release(meta)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  28) meta_has_release()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  29) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  30) 	meta_in "$1" "BFIRs"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  31) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  32) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  33) #meta_has_relaxed(meta)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  34) meta_has_relaxed()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  35) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  36) 	meta_in "$1" "BFIR"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  37) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  38) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  39) #find_fallback_template(pfx, name, sfx, order)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  40) find_fallback_template()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  41) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  42) 	local pfx="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  43) 	local name="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  44) 	local sfx="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  45) 	local order="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  46) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  47) 	local base=""
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  48) 	local file=""
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  49) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  50) 	# We may have fallbacks for a specific case (e.g. read_acquire()), or
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  51) 	# an entire class, e.g. *inc*().
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  52) 	#
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  53) 	# Start at the most specific, and fall back to the most general. Once
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  54) 	# we find a specific fallback, don't bother looking for more.
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  55) 	for base in "${pfx}${name}${sfx}${order}" "${name}"; do
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  56) 		file="${ATOMICDIR}/fallbacks/${base}"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  57) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  58) 		if [ -f "${file}" ]; then
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  59) 			printf "${file}"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  60) 			break
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  61) 		fi
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  62) 	done
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  63) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  64) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  65) #gen_ret_type(meta, int)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  66) gen_ret_type() {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  67) 	local meta="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  68) 	local int="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  69) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  70) 	case "${meta}" in
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  71) 	[sv]) printf "void";;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  72) 	[bB]) printf "bool";;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  73) 	[aiIfFlR]) printf "${int}";;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  74) 	esac
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  75) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  76) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  77) #gen_ret_stmt(meta)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  78) gen_ret_stmt()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  79) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  80) 	if meta_has_ret "${meta}"; then
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  81) 		printf "return ";
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  82) 	fi
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  83) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  84) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  85) # gen_param_name(arg)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  86) gen_param_name()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  87) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  88) 	# strip off the leading 'c' for 'cv'
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  89) 	local name="${1#c}"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  90) 	printf "${name#*:}"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  91) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  92) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  93) # gen_param_type(arg, int, atomic)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  94) gen_param_type()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  95) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  96) 	local type="${1%%:*}"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  97) 	local int="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  98) 	local atomic="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100  99) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 100) 	case "${type}" in
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 101) 	i) type="${int} ";;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 102) 	p) type="${int} *";;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 103) 	v) type="${atomic}_t *";;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 104) 	cv) type="const ${atomic}_t *";;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 105) 	esac
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 106) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 107) 	printf "${type}"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 108) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 109) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 110) #gen_param(arg, int, atomic)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 111) gen_param()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 112) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 113) 	local arg="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 114) 	local int="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 115) 	local atomic="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 116) 	local name="$(gen_param_name "${arg}")"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 117) 	local type="$(gen_param_type "${arg}" "${int}" "${atomic}")"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 118) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 119) 	printf "${type}${name}"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 120) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 121) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 122) #gen_params(int, atomic, arg...)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 123) gen_params()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 124) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 125) 	local int="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 126) 	local atomic="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 127) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 128) 	while [ "$#" -gt 0 ]; do
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 129) 		gen_param "$1" "${int}" "${atomic}"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 130) 		[ "$#" -gt 1 ] && printf ", "
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 131) 		shift;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 132) 	done
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 133) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 134) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 135) #gen_args(arg...)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 136) gen_args()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 137) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 138) 	while [ "$#" -gt 0 ]; do
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 139) 		printf "$(gen_param_name "$1")"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 140) 		[ "$#" -gt 1 ] && printf ", "
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 141) 		shift;
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 142) 	done
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 143) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 144) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 145) #gen_proto_order_variants(meta, pfx, name, sfx, ...)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 146) gen_proto_order_variants()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 147) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 148) 	local meta="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 149) 	local pfx="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 150) 	local name="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 151) 	local sfx="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 152) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 153) 	gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "" "$@"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 154) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 155) 	if meta_has_acquire "${meta}"; then
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 156) 		gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "_acquire" "$@"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 157) 	fi
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 158) 	if meta_has_release "${meta}"; then
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 159) 		gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "_release" "$@"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 160) 	fi
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 161) 	if meta_has_relaxed "${meta}"; then
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 162) 		gen_proto_order_variant "${meta}" "${pfx}" "${name}" "${sfx}" "_relaxed" "$@"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 163) 	fi
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 164) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 165) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 166) #gen_proto_variants(meta, name, ...)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 167) gen_proto_variants()
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 168) {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 169) 	local meta="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 170) 	local name="$1"; shift
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 171) 	local pfx=""
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 172) 	local sfx=""
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 173) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 174) 	meta_in "${meta}" "fF" && pfx="fetch_"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 175) 	meta_in "${meta}" "R" && sfx="_return"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 176) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 177) 	gen_proto_order_variants "${meta}" "${pfx}" "${name}" "${sfx}" "$@"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 178) }
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 179) 
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 180) #gen_proto(meta, ...)
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 181) gen_proto() {
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 182) 	local meta="$1"; shift
b14e77f89aca1 (Anders Roxell 2019-02-11 13:20:34 +0000 183) 	for m in $(echo "${meta}" | grep -o .); do
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 184) 		gen_proto_variants "${m}" "$@"
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 185) 	done
ace9bad4df268 (Mark Rutland  2018-09-04 11:48:25 +0100 186) }