|
@@ -1,74 +0,0 @@
|
|
-/*
|
|
|
|
- * 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;
|
|
|
|
-}
|
|
|