Loading...
// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright 2025 Canonical Ltd
 * Written by Simon Glass <simon.glass@canonical.com>
 */

#include <errno.h>
#include <event.h>
#include <qfw.h>

#if CONFIG_IS_ENABLED(EVENT)
static int qemu_get_bootcmd(void *ctx, struct event *event)
{
	struct event_bootcmd *bc = &event->data.bootcmd;
	enum fw_cfg_selector select;
	struct udevice *qfw_dev;
	ulong size;

	if (qfw_get_dev(&qfw_dev))
		return 0;

	if (qfw_locate_file(qfw_dev, "opt/u-boot/bootcmd", &select, &size))
		return 0;
	if (!size)
		return 0;

	/* Check if the command fits in the provided buffer with terminator */
	if (size >= bc->size)
		return -ENOSPC;

	qfw_read_entry(qfw_dev, select, size, bc->bootcmd);
	bc->bootcmd[size] = '\0';

	return 0;
}
EVENT_SPY_FULL(EVT_BOOTCMD, qemu_get_bootcmd);
#endif