blob: 4fa0d531001a843e1da8b88ca400e98f68df41ee [file] [log] [blame]
Simon Glassef5e3892022-04-24 23:31:06 -06001/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Standard U-Boot boot framework
4 *
5 * Copyright 2021 Google LLC
6 * Written by Simon Glass <sjg@chromium.org>
7 */
8
9#ifndef __bootstd_h
10#define __bootstd_h
11
Simon Glasse64c2952023-01-06 08:52:42 -060012#include <dm/ofnode_decl.h>
13
Simon Glassef5e3892022-04-24 23:31:06 -060014struct udevice;
15
16/**
17 * struct bootstd_priv - priv data for the bootstd driver
18 *
19 * This is attached to the (only) bootstd device, so there is only one instance
20 * of this struct. It provides overall information about bootdevs and bootflows.
21 *
22 * @prefixes: NULL-terminated list of prefixes to use for bootflow filenames,
23 * e.g. "/", "/boot/"; NULL if none
24 * @bootdev_order: Order to use for bootdevs (or NULL if none), with each item
25 * being a bootdev label, e.g. "mmc2", "mmc1";
26 * @cur_bootdev: Currently selected bootdev (for commands)
27 * @cur_bootflow: Currently selected bootflow (for commands)
28 * @glob_head: Head for the global list of all bootflows across all bootdevs
29 * @bootmeth_count: Number of bootmeth devices in @bootmeth_order
30 * @bootmeth_order: List of bootmeth devices to use, in order, NULL-terminated
Simon Glass4c7418f2022-07-30 15:52:32 -060031 * @vbe_bootmeth: Currently selected VBE bootmeth, NULL if none
Simon Glasse64c2952023-01-06 08:52:42 -060032 * @theme: Node containing the theme information
Simon Glassef5e3892022-04-24 23:31:06 -060033 */
34struct bootstd_priv {
35 const char **prefixes;
36 const char **bootdev_order;
37 struct udevice *cur_bootdev;
38 struct bootflow *cur_bootflow;
39 struct list_head glob_head;
40 int bootmeth_count;
41 struct udevice **bootmeth_order;
Simon Glass4c7418f2022-07-30 15:52:32 -060042 struct udevice *vbe_bootmeth;
Simon Glasse64c2952023-01-06 08:52:42 -060043 ofnode theme;
Simon Glassef5e3892022-04-24 23:31:06 -060044};
45
46/**
47 * bootstd_get_bootdev_order() - Get the boot-order list
48 *
49 * This reads the boot order, e.g. {"mmc0", "mmc2", NULL}
50 *
51 * The list is alloced by the bootstd driver so should not be freed. That is the
52 * reason for all the const stuff in the function signature
53 *
54 * Return: list of string points, terminated by NULL; or NULL if no boot order
55 */
56const char *const *const bootstd_get_bootdev_order(struct udevice *dev);
57
58/**
59 * bootstd_get_prefixes() - Get the filename-prefixes list
60 *
61 * This reads the prefixes, e.g. {"/", "/bpot", NULL}
62 *
63 * The list is alloced by the bootstd driver so should not be freed. That is the
64 * reason for all the const stuff in the function signature
65 *
66 * Return: list of string points, terminated by NULL; or NULL if no boot order
67 */
68const char *const *const bootstd_get_prefixes(struct udevice *dev);
69
70/**
71 * bootstd_get_priv() - Get the (single) state for the bootstd system
72 *
73 * The state holds a global list of all bootflows that have been found.
74 *
75 * Return: 0 if OK, -ve if the uclass does not exist
76 */
77int bootstd_get_priv(struct bootstd_priv **stdp);
78
79/**
80 * bootstd_clear_glob() - Clear the global list of bootflows
81 *
82 * This removes all bootflows globally and across all bootdevs.
83 */
84void bootstd_clear_glob(void);
85
86#endif