diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-24 15:36:56 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-24 15:36:56 +0200 |
commit | d436b2117e5c054c9977f80cae9c2302ed50a5a6 (patch) | |
tree | ea29213acd0c5b67ccefdd3348cdca9125227a40 /sys/src/9/pc/bios32.c | |
parent | 86f323290c9f99b72e359ff2c37eed528f5b3976 (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.c | 36 |
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)); |