Hey Peter,
I need some advice. I'm adding a -dtb option to qemu for specifying a
dtb filename to be passed on to the kernel, similar to how the -initrd
flag works. The dtb filename needs to then be passed on to the
selected machine, and it looks like the machine->init() callback is
the best way to do that.
However, the current init callback prototype looks like this:
typedef void QEMUMachineInitFunc(ram_addr_t ram_size,
const char *boot_device,
const char *kernel_filename,
const char *kernel_cmdline,
const char *initrd_filename,
const char *cpu_model);
Now, I could simply add an new "dtb_filename" to the argument list and
fix up all of the users (looks to be about 90 machines), but that
seems like a lot of churn that will need to be repeated the next time
a new argument needs to be passed to the init func.
Alternately, I could do something like this:
struct machine_args {
ram_addr_t ram_size;
const char *boot_device;
const char *kernel_filename,
const char *kernel_cmdline,
const char *initrd_filename,
const char *dtb_filename,
const char *cpu_model,
};
typedef void QEMUMachineInitFunc(const struct machine_args *args);
And then I'd fix up all the users, which would be about the same
amount of churn, but subsequent additions would be a lot easier.
A third option would be to add a new ".dt_init()" that is executed
instead of .init() if populated, but that seems like an ugly band-aid
to me.
How should I approach this? Or is there a better way to pass data to
so that it is available at machine->init() time?
g.