linux-IllusionX/arch/arm26/boot/compressed/hw-bse.c
Linus Torvalds 1da177e4c3 Linux-2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.

Let it rip!
2005-04-16 15:20:36 -07:00

74 lines
1.4 KiB
C

/*
* Bright Star Engineering Inc.
*
* code for readng parameters from the
* parameter blocks of the boot block
* flash memory
*
*/
static int strcmp(const char *s1, const char *s2)
{
while (*s1 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
return (*(unsigned char *) s1) - (*(unsigned char *) s2);
}
struct pblk_t {
char type;
unsigned short size;
};
static char *bse_getflashparam(char *name) {
unsigned int esize;
char *q,*r;
unsigned char *p,*e;
struct pblk_t *thepb = (struct pblk_t *) 0x00004000;
struct pblk_t *altpb = (struct pblk_t *) 0x00006000;
if (thepb->type&1) {
if (altpb->type&1) {
/* no valid param block */
return (char*)0;
} else {
/* altpb is valid */
struct pblk_t *tmp;
tmp = thepb;
thepb = altpb;
altpb = tmp;
}
}
p = (char*)thepb + sizeof(struct pblk_t);
e = p + thepb->size;
while (p < e) {
q = p;
esize = *p;
if (esize == 0xFF) break;
if (esize == 0) break;
if (esize > 127) {
esize = (esize&0x7F)<<8 | p[1];
q++;
}
q++;
r=q;
if (*r && ((name == 0) || (!strcmp(name,r)))) {
while (*q++) ;
return q;
}
p+=esize;
}
return (char*)0;
}
void bse_setup(void) {
/* extract the linux cmdline from flash */
char *name=bse_getflashparam("linuxboot");
char *x = (char *)0xc0000100;
if (name) {
while (*name) *x++=*name++;
}
*x=0;
}