summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/bios32.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-08-24 15:36:56 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-08-24 15:36:56 +0200
commitd436b2117e5c054c9977f80cae9c2302ed50a5a6 (patch)
treeea29213acd0c5b67ccefdd3348cdca9125227a40 /sys/src/9/pc/bios32.c
parent86f323290c9f99b72e359ff2c37eed528f5b3976 (diff)
add unified sigsearch() function to look for bios data structures
replace the various functions that searched for bios data structures by a single sigsearch() one in pc/memory.c that will probe the various bios data areas. also, a new checksum() function was added that is to be used to validate the structures found.
Diffstat (limited to 'sys/src/9/pc/bios32.c')
-rw-r--r--sys/src/9/pc/bios32.c36
1 files changed, 2 insertions, 34 deletions
diff --git a/sys/src/9/pc/bios32.c b/sys/src/9/pc/bios32.c
index e0858b9ab..e2976abfd 100644
--- a/sys/src/9/pc/bios32.c
+++ b/sys/src/9/pc/bios32.c
@@ -7,7 +7,6 @@
#define VFLAG(...) if(vflag) print(__VA_ARGS__)
-#define BIOSSEG(a) KADDR(((uint)(a))<<4)
#define UPTR2INT(p) ((uintptr)(p))
#define l16get(p) (((p)[1]<<8)|(p)[0])
@@ -48,37 +47,6 @@ bios32ci(BIOS32si* si, BIOS32ci* ci)
return r;
}
-static void*
-rsdchecksum(void* addr, int length)
-{
- u8int *p, sum;
-
- sum = 0;
- for(p = addr; length-- > 0; p++)
- sum += *p;
- if(sum == 0)
- return addr;
-
- return nil;
-}
-
-static void*
-rsdscan(u8int* addr, int len, char* signature)
-{
- int sl;
- u8int *e, *p;
-
- e = addr+len;
- sl = strlen(signature);
- for(p = addr; p+sl < e; p += 16){
- if(memcmp(p, signature, sl))
- continue;
- return p;
- }
-
- return nil;
-}
-
static int
bios32locate(void)
{
@@ -86,9 +54,9 @@ bios32locate(void)
BIOS32sdh *sdh;
VFLAG("bios32link\n");
- if((sdh = rsdscan(BIOSSEG(0xE000), 0x20000, "_32_")) == nil)
+ if((sdh = sigsearch("_32_")) == nil)
return -1;
- if(rsdchecksum(sdh, sizeof(BIOS32sdh)) == nil)
+ if(checksum(sdh, sizeof(BIOS32sdh)))
return -1;
VFLAG("sdh @ %#p, entry %#ux\n", sdh, l32get(sdh->physaddr));