Changed bootloader and partition parameters to ease virgin unit
[openwrt/svn-archive/archive.git] / target / linux / at91-2.6 / image / u-boot / ubclient / ubpar.c
1 /*
2 * ubparams.c
3 *
4 * Generate a u-boot parameter block with correct crc
5 *
6 * (C) 1007 Guthrie Consulting
7 * hamish@prodigi.ch
8 *
9 */
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <string.h>
14
15 #ifndef __ASSEMBLY__
16 #define __ASSEMBLY__
17 #endif
18 #define __ASM_STUB_PROCESSOR_H__
19 #include <config.h>
20 #undef __ASSEMBLY__
21 #include <environment.h>
22
23 #define XMK_STR(x) #x
24 #define MK_STR(x) XMK_STR(x)
25
26 extern unsigned long crc32 (unsigned long, const unsigned char *, unsigned int);
27
28 #if !defined(ENV_CRC)
29 #define ENV_CRC ~0
30 #endif
31
32 #ifdef LAN_IP
33 #warning LAN_IP
34 #else
35 #warning LAN_IP NOT DEFINED
36 #endif
37 #ifdef LAN_SERVERIP
38 #warning LAN_SERVERIP
39 #else
40 #warning LAN_SERVERIP NOT DEFINED
41 #endif
42
43 static char *environment[] = {
44 "bootdelay=3\0"
45 "baudrate=115200\0"
46 "stdin=serial\0"
47 "stdout=serial\0"
48 "stderr=serial\0"
49 "fbargs=setenv bootargs root=/dev/mtdblock3 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0"
50 "rdba=setenv bootargs root=/dev/ram rw initrd=0x21200000,6000000 ramdisk_size=20000 init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0"
51 "rdram=run rdba; tftp 21000000 uImage; tftp 21200000 root.squashfs; bootm 21000000\0"
52 "flash=run fbargs; bootm 0xc0042000\0"
53 "bootargs=setenv bootargs root=/dev/mtdblock3 ro init=/etc/preinit console=/dev/ttyS0,115200,mem=32M\0"
54 "bootcmd=bootm 0xc0042000\0"
55 "ipaddr=" MK_STR(LAN_IP) "\0"
56 "serverip=" MK_STR(LAN_SERVERIP) "\0"
57 "\0"
58 };
59
60 int main(int argc, char *argv[]) {
61 env_t *envptr;
62 char *src, *srcptr;
63 char *dataptr;
64 FILE *params;
65 int argfail = 1;
66 char newmac[30];
67 char newser[30];
68 int paramlen = 0;
69 int progmac = 0;
70 int progser = 0;
71
72 if (argc < 3) {
73 printf ("Invalid arguments\n");
74 return 1;
75 }
76
77 switch (argc) {
78 case 5:
79 if (strcmp(argv[3], "--serial") == 0) {
80 argfail = 0;
81 sprintf(newser, "serial#=%s", argv[4]);
82 progser = 1;
83 }
84 case 3:
85 if (strcmp(argv[1], "--mac") == 0) {
86 argfail = 0;
87 sprintf(newmac, "ethaddr=%s", argv[2]);
88 progmac = 1;
89 }
90 else
91 argfail = 1;
92 }
93
94 if (argfail) {
95 printf("Invalid arguments\n");
96 return 1;
97 }
98
99
100 src = srcptr = *environment;
101 envptr = (env_t *)malloc(CFG_ENV_SIZE);
102 dataptr = (char *)envptr + ENV_HEADER_SIZE;
103
104 while(*srcptr) {
105 //printf("%d, %s\n", strlen(srcptr), srcptr);
106 paramlen += strlen(srcptr) + 1;
107 srcptr += strlen(srcptr) + 1;
108 }
109
110 printf("Make u-boot params\n");
111 printf("Params size is %d\n", CFG_ENV_SIZE);
112
113 memset(envptr, 0, CFG_ENV_SIZE);
114 memcpy(dataptr, src, paramlen);
115 dataptr += paramlen;
116
117 if (progmac) {
118 memcpy(dataptr, newmac, strlen(newmac));
119 dataptr += strlen(newmac) + 1;
120 }
121
122 if (progser) {
123 memcpy(dataptr, newser, strlen(newser));
124 dataptr += strlen(newser) + 1;
125 }
126
127 envptr->crc = crc32(0, envptr->data, ENV_SIZE);
128
129 params = fopen("/dev/mtd1", "w");
130 fwrite(envptr, CFG_ENV_SIZE, 1, params);
131 fclose(params);
132
133 free(envptr);
134 return 0;
135 }