mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-12-19 16:31:27 +01:00
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>
96 lines
2.5 KiB
C
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 */
|