162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#include <linux/io.h>
362306a36Sopenharmony_ci#include <linux/export.h>
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci/**
662306a36Sopenharmony_ci *	check_signature		-	find BIOS signatures
762306a36Sopenharmony_ci *	@io_addr: mmio address to check
862306a36Sopenharmony_ci *	@signature:  signature block
962306a36Sopenharmony_ci *	@length: length of signature
1062306a36Sopenharmony_ci *
1162306a36Sopenharmony_ci *	Perform a signature comparison with the mmio address io_addr. This
1262306a36Sopenharmony_ci *	address should have been obtained by ioremap.
1362306a36Sopenharmony_ci *	Returns 1 on a match.
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciint check_signature(const volatile void __iomem *io_addr,
1762306a36Sopenharmony_ci			const unsigned char *signature, int length)
1862306a36Sopenharmony_ci{
1962306a36Sopenharmony_ci	while (length--) {
2062306a36Sopenharmony_ci		if (readb(io_addr) != *signature)
2162306a36Sopenharmony_ci			return 0;
2262306a36Sopenharmony_ci		io_addr++;
2362306a36Sopenharmony_ci		signature++;
2462306a36Sopenharmony_ci	}
2562306a36Sopenharmony_ci	return 1;
2662306a36Sopenharmony_ci}
2762306a36Sopenharmony_ciEXPORT_SYMBOL(check_signature);
28