u-boot/include/extension_board.h
Kory Maincent (TI.com) f9b139342c boot: extension: Move overlay apply custom logic to command level
The extension_overlay_cmd environment variable approach is specific to
the U-Boot extension_board command, while other boot flows (pxe_utils,
bootstd) handle overlay loading differently.

Move the extension_overlay_cmd execution out of the core extension
framework to the command level. This decouples the framework from
command-specific behavior and prepares for future extension support
in other boot flows.

Signed-off-by: Kory Maincent (TI.com) <kory.maincent@bootlin.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
2025-11-03 10:02:39 -06:00

96 lines
2.5 KiB
C

/* SPDX-License-Identifier: GPL-2.0+ */
/*
* (C) Copyright 2021
* Köry Maincent, Bootlin, <kory.maincent@bootlin.com>
*/
#ifndef __EXTENSION_SUPPORT_H
#define __EXTENSION_SUPPORT_H
#include <alist.h>
#include <dm/device.h>
#include <linux/list.h>
#include <dm/platdata.h>
extern struct list_head extension_list;
/**
* extension_get_list - Get the extension list
* Return: The extension alist pointer, or NULL if no such list exists.
*
* The caller must not free the list.
*/
struct alist *extension_get_list(void);
/**
* extension_probe - Probe extension device
* @dev: Extension device that needs to be probed
* Return: Zero on success, negative on failure.
*/
int extension_probe(struct udevice *dev);
/**
* extension_remove - Remove extension device
* @dev: Extension device that needs to be removed
* Return: Zero on success, negative on failure.
*/
int extension_remove(struct udevice *dev);
/**
* extension_scan - Scan extension boards available.
* Return: Zero on success, negative on failure.
*/
int extension_scan(void);
/**
* extension_apply - Apply extension board overlay to the devicetree
* @working_fdt: Pointer to working flattened device tree
* @size: Size of the devicetree overlay
* Return: Zero on success, negative on failure.
*/
int extension_apply(struct fdt_header *working_fdt, ulong size);
/**
* extension - Description fields of an extension board
* @name: Name of the extension
* @owner: Owner of the extension
* @version: Version of the extension
* @overlay: Devicetree overlay name to be loaded for this extension
* @other: Other information of this extension
*/
struct extension {
char name[32];
char owner[32];
char version[32];
char overlay[64];
char other[32];
};
struct extension_ops {
/**
* scan - Add system-specific function to scan extension boards.
* @dev: extension device
* @extension_list: alist of extension to expand
* Return: The number of extension or a negative value in case of
* error.
*/
int (*scan)(struct udevice *dev, struct alist *extension_list);
};
#define extension_get_ops(dev) ((struct extension_ops *)(dev)->driver->ops)
/* Currently, only one extension driver enabled at a time is supported */
#define U_BOOT_EXTENSION(_name, _scan_func) \
U_BOOT_DRIVER(_name) = { \
.name = #_name, \
.id = UCLASS_EXTENSION, \
.probe = extension_probe, \
.remove = extension_remove, \
.ops = &(struct extension_ops) { \
.scan = _scan_func, \
}, \
.priv_auto = sizeof(struct alist), \
}
#endif /* __EXTENSION_SUPPORT_H */