sanitize_name_x86() {
	sed -e '
		y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;
		s/[^a-z0-9_-]\+/-/g;
		s/^-//;
		s/-$//;
	' "$@"
}

do_sysinfo_x86() {
	local vendor product file

	for file in sys_vendor board_vendor; do
		vendor="$(cat /sys/devices/virtual/dmi/id/$file 2>/dev/null)"
		case "$vendor" in
		empty | \
		Default\ string | \
		System\ manufacturer | \
		To\ [bB]e\ [fF]illed\ [bB]y\ O\.E\.M\.)
			continue
			;;
		esac
		[ -n "$vendor" ] && break
	done

	for file in product_name board_name; do
		product="$(cat /sys/devices/virtual/dmi/id/$file 2>/dev/null)"
		case "$vendor:$product" in
		?*:empty | \
		?*:Default\ string | \
		?*:System\ Product\ Name | \
		?*:To\ [bB]e\ [fF]illed\ [bB]y\ O\.E\.M\.)
			continue
			;;
		"PC Engines:APU")
			product="apu1"
			break
			;;
		"Sophos:SG"|"Sophos:XG")
			local product_version
			product_version="$(cat /sys/devices/virtual/dmi/id/product_version 2>/dev/null)"
			case "$product_version" in
			105*|106*|115*|125*|135*| \
			210*|230*|310*|330*|430*|450*| \
			550*|650*|750*|85*|86*)
				product="${product}-${product_version}"
				break
				;;
			esac
			;;
		"Supermicro:Super Server")
			continue
			;;
		?*:?*)
			break
			;;
		esac
	done

	[ -n "$vendor" -a -n "$product" ] || return

	mkdir -p /tmp/sysinfo

	echo "$vendor $product" > /tmp/sysinfo/model

	sanitize_name_x86 /tmp/sysinfo/model > /tmp/sysinfo/board_name
}

boot_hook_add preinit_main do_sysinfo_x86
