xref: /linux/lib/check_signature.c (revision b2441318)
1*b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2cc2ea416SAndrew Morton #include <linux/io.h>
38bc3bcc9SPaul Gortmaker #include <linux/export.h>
4cc2ea416SAndrew Morton 
5cc2ea416SAndrew Morton /**
6cc2ea416SAndrew Morton  *	check_signature		-	find BIOS signatures
7cc2ea416SAndrew Morton  *	@io_addr: mmio address to check
8cc2ea416SAndrew Morton  *	@signature:  signature block
9cc2ea416SAndrew Morton  *	@length: length of signature
10cc2ea416SAndrew Morton  *
11cc2ea416SAndrew Morton  *	Perform a signature comparison with the mmio address io_addr. This
12cc2ea416SAndrew Morton  *	address should have been obtained by ioremap.
13cc2ea416SAndrew Morton  *	Returns 1 on a match.
14cc2ea416SAndrew Morton  */
15cc2ea416SAndrew Morton 
check_signature(const volatile void __iomem * io_addr,const unsigned char * signature,int length)16cc2ea416SAndrew Morton int check_signature(const volatile void __iomem *io_addr,
17cc2ea416SAndrew Morton 			const unsigned char *signature, int length)
18cc2ea416SAndrew Morton {
19cc2ea416SAndrew Morton 	while (length--) {
20cc2ea416SAndrew Morton 		if (readb(io_addr) != *signature)
21cc2ea416SAndrew Morton 			return 0;
22cc2ea416SAndrew Morton 		io_addr++;
23cc2ea416SAndrew Morton 		signature++;
24cc2ea416SAndrew Morton 	}
25cc2ea416SAndrew Morton 	return 1;
26cc2ea416SAndrew Morton }
27cc2ea416SAndrew Morton EXPORT_SYMBOL(check_signature);
28