#include "memmap.h"
#include <target/memzero.h>
+#include <target/setenv.h>
+
/* for setting the root device */
#define MINORBITS 8
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
ext2_inode *pinode;
ext2_dir_entry *pde = 0;
addr_t load_address;
+ int o_argc;
+ int need_default_args = 0;
char *flash_option[] = {
0,
#endif
};
+ if (argc > 1) {
+ o_argc = argc;
+ }
+ else {
+ o_argc = get_option_count ();
+ }
+
+ {
+ char *o_argv[o_argc + 3];
+ if (argc > 1) {
+ for (i = 0; i < argc; i++) {
+ o_argv[i] = argv[i];
+ }
+ }
+ else {
+ if (o_argc <= 1) {
+ need_default_args = 1;
+ }
+ else {
+ get_options(o_argv);
+ }
+ }
+
if (!argc) {
if (*(volatile unsigned char *)(0x80000000 + PDDR) &
PDDR_FLASHBOOT) {
- argc = sizeof (flash_option) / sizeof (char *);
- argv = flash_option;
+ if (need_default_args) {
+ o_argc = sizeof (flash_option) / sizeof (char *);
+ for (i = 0; i < o_argc; i++) {
+ o_argv[i] = flash_option[i];
+ }
+ } else {
+ get_options(o_argv);
+ }
+
} else {
if (ide_detect_devices ()) {
return 0;
(" kernel", INITRD_LOAD_ADDRESS, LINUX_LOAD_ADDRESS);
boost_off ();
}
- argc = sizeof (cf_option) / sizeof (char *);
root[sizeof (root) - 2] = '1' + i;
- argv = cf_option;
+ if (need_default_args) {
+ o_argc = sizeof (cf_option) / sizeof (char *);
+ for (i = 0; i < o_argc; i++) {
+ o_argv[i] = cf_option[i];
+ }
+ }
}
}
+ argc = o_argc;
+ argv = o_argv;
if (argc < 1)
return -H_EUSAGE;
linux_cmdfunc (argc, argv);
+ }
+
return 0;
}
#define FLASH_CONFIG_START (FLASH_USERLAND_START + FLASH_USERLAND_SIZE)
#define FLASH_CONFIG_SIZE (FLASH_BANK1_START + FLASH_BANK1_SIZE - FLASH_CONFIG_START)
+#define FLASH_OPTION_SIZE 0x2000
+#define FLASH_OPTION_START (FLASH_KERNEL_START - FLASH_OPTION_SIZE)
+
#define FLASH_BOOTLOADER_NAME "bootloader"
#define FLASH_KERNEL_NAME "kernel"
#define FLASH_USERLAND_NAME "userland"