diff options
| author | Simon Rettberg | 2026-01-28 12:53:53 +0100 |
|---|---|---|
| committer | Simon Rettberg | 2026-01-28 12:53:53 +0100 |
| commit | 8e82785c584dc13e20f9229decb95bd17bbe9cd1 (patch) | |
| tree | a8b359e59196be5b2e3862bed189107f4bc9975f /src/hci/commands/fdt_cmd.c | |
| parent | Merge branch 'master' into openslx (diff) | |
| parent | [prefix] Make unlzma.S compatible with 386 class CPUs (diff) | |
| download | ipxe-openslx.tar.gz ipxe-openslx.tar.xz ipxe-openslx.zip | |
Merge branch 'master' into openslxopenslx
Diffstat (limited to 'src/hci/commands/fdt_cmd.c')
| -rw-r--r-- | src/hci/commands/fdt_cmd.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/hci/commands/fdt_cmd.c b/src/hci/commands/fdt_cmd.c new file mode 100644 index 000000000..7cd39279b --- /dev/null +++ b/src/hci/commands/fdt_cmd.c @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2025 Michael Brown <mbrown@fensystems.co.uk>. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + * You can also choose to distribute this program under the terms of + * the Unmodified Binary Distribution Licence (as given in the file + * COPYING.UBDL), provided that you have satisfied its requirements. + */ + +FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); + +#include <getopt.h> +#include <ipxe/command.h> +#include <ipxe/parseopt.h> +#include <usr/imgmgmt.h> +#include <usr/fdtmgmt.h> + +/** @file + * + * Flattened Device Tree commands + * + */ + +/** "fdt" options */ +struct fdt_options { + /** Download timeout */ + unsigned long timeout; +}; + +/** "fdt" option list */ +static struct option_descriptor fdt_opts[] = { + OPTION_DESC ( "timeout", 't', required_argument, + struct fdt_options, timeout, parse_timeout ), +}; + +/** "fdt" command descriptor */ +static struct command_descriptor fdt_cmd = + COMMAND_DESC ( struct fdt_options, fdt_opts, 0, 1, "[<uri>]" ); + +/** + * The "fdt" command + * + * @v argc Argument count + * @v argv Argument list + * @ret rc Return status code + */ +static int fdt_exec ( int argc, char **argv ) { + struct fdt_options opts; + struct image *image = NULL; + char *name_uri; + int rc; + + /* Parse options */ + if ( ( rc = parse_options ( argc, argv, &fdt_cmd, &opts ) ) != 0 ) + goto err_parse; + + /* Parse name/URI string */ + name_uri = argv[optind]; + + /* Acquire image, if applicable */ + if ( name_uri && ( ( rc = imgacquire ( name_uri, opts.timeout, + &image ) ) != 0 ) ) { + goto err_image; + } + + /* (Un)register as FDT */ + if ( ( rc = imgfdt ( image ) ) != 0 ) + goto err_fdt; + + err_fdt: + err_image: + err_parse: + return rc; +} + +/** Flattened Device Tree commands */ +COMMAND ( fdt, fdt_exec ); |
