14 { " -wait", L4_kernel_options::F_wait },
15 { " -serial_esc", L4_kernel_options::F_serial_esc },
16 { " -noserial", L4_kernel_options::F_noserial },
17 { " -noscreen", L4_kernel_options::F_noscreen },
18 { " -esc", L4_kernel_options::F_esc },
19 { " -nojdb", L4_kernel_options::F_nojdb },
20 { " -nokdb", L4_kernel_options::F_nokdb },
21 { " -nohlt", L4_kernel_options::F_nohlt },
22 { " -apic", L4_kernel_options::F_apic },
23 { " -loadcnt", L4_kernel_options::F_loadcnt },
24 { " -watchdog", L4_kernel_options::F_watchdog },
25 { " -irq0", L4_kernel_options::F_irq0 },
26 { " -nosfn", L4_kernel_options::F_nosfn },
27 { " -jdb_never_stop", L4_kernel_options::F_jdb_never_stop },
35 { " -kmemsize", L4_kernel_options::F_kmemsize,
36 offsetof(L4_kernel_options::Options, kmemsize) },
37 { " -tbuf_entries", L4_kernel_options::F_tbuf_entries,
38 offsetof(L4_kernel_options::Options, tbuf_entries) },
39 { " -out_buf", L4_kernel_options::F_out_buf,
40 offsetof(L4_kernel_options::Options, out_buf) },
43 #define MEMBERSIZE(type, member) sizeof(((type *)0)->member)
51 { " -jdb_cmd", L4_kernel_options::F_jdb_cmd,
52 MEMBERSIZE(L4_kernel_options::Options, jdb_cmd),
53 offsetof(L4_kernel_options::Options, jdb_cmd) },
56 static void kcmdline_show(L4_kernel_options::Options *lko)
58 printf("Location: %016lx Size: %zd Bytes\n",
59 (unsigned long)lko, sizeof(*lko));
60 printf("Flags: %08x\n", lko->flags);
61 for (unsigned i = 0; i < sizeof(boolean_opts) / sizeof(boolean_opts[0]); ++i)
63 if (lko->flags & boolean_opts[i].flag)
64 printf(" %s\n", boolean_opts[i].s);
67 if (lko->flags & L4_kernel_options::F_kmemsize)
68 printf("Kmemsize: %dKiB\n", lko->kmemsize);
69 if (lko->flags & L4_kernel_options::F_tbuf_entries)
70 printf("Tbuf entries: %d\n", lko->tbuf_entries);
71 if (lko->flags & L4_kernel_options::F_out_buf)
72 printf("Out bufs: %d\n", lko->out_buf);
75 printf("JDB command: %s\n", lko->jdb_cmd);
78 #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
80 void kcmdline_parse(char const *cmdline,
81 L4_kernel_options::Options *lko)
84 printf("Kernel command-line: %s\n", cmdline);
87 for (unsigned i = 0; i < ARRAY_SIZE(boolean_opts); ++i)
88 if (strstr(cmdline, boolean_opts[i].s))
89 lko->flags |= boolean_opts[i].flag;
92 for (unsigned i = 0; i < ARRAY_SIZE(unsigned_opts); ++i)
95 unsigned len = strlen(unsigned_opts[i].s);
96 if ((c = strstr(cmdline, unsigned_opts[i].s))
97 && (c[len] == ' ' || c[len] == '='))
99 lko->flags |= unsigned_opts[i].flag;
100 *(unsigned *)((char *)lko + unsigned_opts[i].offset)
101 = strtol(c + len + 1, 0, 0);
106 for (unsigned i = 0; i < ARRAY_SIZE(string_opts); ++i)
109 unsigned len = strlen(string_opts[i].s);
110 if ((c = strstr(cmdline, string_opts[i].s))
111 && (c[len] == ' ' || c[len] == '='))
113 char *dst = (char *)lko + string_opts[i].offset;
114 lko->flags |= string_opts[i].flag;
116 while (*c && *c != ' '
117 && (dst < (char *)lko + string_opts[i].offset +
118 string_opts[i].size - 1))
125 if (strstr(cmdline, "-comport")
126 || strstr(cmdline, "-comspeed")
127 || strstr(cmdline, "-comirq"))
128 printf("WARNING: Command line options -comport, -comspeed and -comirq\n"
129 " have been moved to bootstrap and are shared beetween\n"
130 " Fiasco and bootstrap now. Please remove them from\n"
131 " your Fiasco command line, they do not have an effect\n"