diff options
author | Andrew Morton <akpm@linux-foundation.org> | 2007-07-16 02:41:38 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-16 12:05:50 -0400 |
commit | cc2ea416b2aa04d0c34ff2281a23dae5b76b7b3b (patch) | |
tree | 15dd3cebcb85e21ef744f184ab33c163d8ffdacc /lib | |
parent | 4e7bd66318b3ae60fbba7d886d9a98b71ffbf74e (diff) |
uninline check_signature()
This is a rather bizarre thing to have inlined in io.h. Stick it in lib/
instead.
While we're there, despaghetti it a bit, and fix its off-by-one behaviour when
passed a zero length.
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Makefile | 2 | ||||
-rw-r--r-- | lib/check_signature.c | 26 |
2 files changed, 27 insertions, 1 deletions
diff --git a/lib/Makefile b/lib/Makefile index d1b366bdf86e..d7a93ff7f5a0 100644 --- a/lib/Makefile +++ b/lib/Makefile | |||
@@ -13,7 +13,7 @@ lib-$(CONFIG_SMP) += cpumask.o | |||
13 | lib-y += kobject.o kref.o kobject_uevent.o klist.o | 13 | lib-y += kobject.o kref.o kobject_uevent.o klist.o |
14 | 14 | ||
15 | obj-y += div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ | 15 | obj-y += div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ |
16 | bust_spinlocks.o hexdump.o | 16 | bust_spinlocks.o hexdump.o check_signature.o |
17 | 17 | ||
18 | ifeq ($(CONFIG_DEBUG_KOBJECT),y) | 18 | ifeq ($(CONFIG_DEBUG_KOBJECT),y) |
19 | CFLAGS_kobject.o += -DDEBUG | 19 | CFLAGS_kobject.o += -DDEBUG |
diff --git a/lib/check_signature.c b/lib/check_signature.c new file mode 100644 index 000000000000..fd6af199247b --- /dev/null +++ b/lib/check_signature.c | |||
@@ -0,0 +1,26 @@ | |||
1 | #include <linux/io.h> | ||
2 | #include <linux/module.h> | ||
3 | |||
4 | /** | ||
5 | * check_signature - find BIOS signatures | ||
6 | * @io_addr: mmio address to check | ||
7 | * @signature: signature block | ||
8 | * @length: length of signature | ||
9 | * | ||
10 | * Perform a signature comparison with the mmio address io_addr. This | ||
11 | * address should have been obtained by ioremap. | ||
12 | * Returns 1 on a match. | ||
13 | */ | ||
14 | |||
15 | int check_signature(const volatile void __iomem *io_addr, | ||
16 | const unsigned char *signature, int length) | ||
17 | { | ||
18 | while (length--) { | ||
19 | if (readb(io_addr) != *signature) | ||
20 | return 0; | ||
21 | io_addr++; | ||
22 | signature++; | ||
23 | } | ||
24 | return 1; | ||
25 | } | ||
26 | EXPORT_SYMBOL(check_signature); | ||