Files
u-boot/include/bootctl/state.h
Simon Glass d9152ea75e bootctl: Initial experimentation
This provides a basic prototype for boot control.

Some documentation is in boot/bootctl/README.rst
2025-09-28 14:32:36 -06:00

229 lines
5.1 KiB
C

/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Uclass implementation for boot schema
*
* Copyright 2025 Canonical Ltd
* Written by Simon Glass <simon.glass@canonical.com>
*/
#ifndef __bootctl_state_h
#define __bootctl_state_h
#include <abuf.h>
#include <alist.h>
struct udevice;
/**
* struct state - State information which can be read and written
*
* @bflow: Bootflow for this OS
*/
struct bc_state {
struct alist subnodes;
};
/**
* struct bc_state_ops - Operations for the UI
*/
struct bc_state_ops {
/**
* read_bool() - Read a boolean value
*
* @dev: Device to access
* @key: Key to access
* @valp: Returns boolean value on success
* Return: 0 if OK, or -ve error code
*/
int (*read_bool)(struct udevice *dev, const char *key, bool *valp);
/**
* write_bool() - Write a boolean value
*
* @dev: Device to access
* @key: Key to access
* @val: Value to write
* Return: 0 if OK, or -ve error code
*/
int (*write_bool)(struct udevice *dev, const char *key, bool val);
/**
* read_int() - Read an integer value
*
* This holds a 64-bit integer
*
* @dev: Device to access
* @key: Key to access
* @valp: Returns integer value on success
* Return: 0 if OK, or -ve error code
*/
int (*read_int)(struct udevice *dev, const char *key, long *valp);
/**
* write_str() - Write an integer value
*
* This holds a 64-bit integer
*
* @dev: Device to access
* @key: Key to access
* @val: Value to write
* Return: 0 if OK, or -ve error code
*/
int (*write_int)(struct udevice *dev, const char *key, long val);
/**
* read_str() - Read a string value
*
* @dev: Device to access
* @key: Key to access
* @valp: Returns string value on success
* Return: 0 if OK, or -ve error code
*/
int (*read_str)(struct udevice *dev, const char *key,
const char **valp);
/**
* write_str() - Write a string value
*
* @dev: Device to access
* @key: Key to access
* @val: Value to write
* Return: 0 if OK, or -ve error code
*/
int (*write_str)(struct udevice *dev, const char *key, const char *val);
/**
* load() - Read in the current state
*
* Return: 0 if OK, or -ve error code
*/
int (*load)(struct udevice *dev);
/**
* save() - Write out the current state
*
* Return: 0 if OK, or -ve error code
*/
int (*save)(struct udevice *dev);
/**
* save_to_buf() - Write the current state to a buffer
*
* The buffer is inited and filled with the contents of the state as it
* would be written to a file
*
* Return: 0 if OK, or -ve error code
*/
int (*save_to_buf)(struct udevice *dev, struct abuf *buf);
/**
* clear() - Clear all values
*
* Return: 0 if OK, or -ve error code
*/
int (*clear)(struct udevice *dev);
};
#define bc_state_get_ops(dev) ((struct bc_state_ops *)(dev)->driver->ops)
/**
* bc_state_read_bool() - Read a boolean value
*
* @dev: Device to access
* @key: Key to access
* @valp: Returns boolean value on success
* Return: 0 if OK, or -ve error code
*/
int bc_state_read_bool(struct udevice *dev, const char *key, bool *valp);
/**
* bc_state_write_bool() - Write a boolean value
*
* Sets the value for a key, overwriting any existing value
*
* @dev: Device to access
* @key: Key to access
* @val: Value to write
* Return: 0 if OK, or -ve error code
*/
int bc_state_write_bool(struct udevice *dev, const char *key, bool val);
/**
* bc_state_read_int() - Read an integer value
*
* This holds a 64-bit integer
*
* @dev: Device to access
* @key: Key to access
* @valp: Returns integer value on success
* Return: 0 if OK, or -ve error code
*/
int bc_state_read_int(struct udevice *dev, const char *key, long *valp);
/**
* bc_state_write_str() - Write an integer value
*
* This holds a 64-bit integer
*
* @dev: Device to access
* @key: Key to access
* @val: Value to write
* Return: 0 if OK, or -ve error code
*/
int bc_state_write_int(struct udevice *dev, const char *key, long val);
/**
* bc_state_read_str() - Read a string value
*
* @dev: Device to access
* @key: Key to access
* @valp: Returns string value on success
* Return: 0 if OK, or -ve error code
*/
int bc_state_read_str(struct udevice *dev, const char *key, const char **valp);
/**
* bc_state_write_str() - Write a string value
*
* @dev: Device to access
* @key: Key to access
* @val: Value to write
* Return: 0 if OK, or -ve error code
*/
int bc_state_write_str(struct udevice *dev, const char *key, const char *val);
/**
* bc_state_load() - Load state from a file
*
* @dev: Device to access
* Return: 0 if OK, or -ve error code
*/
int bc_state_load(struct udevice *dev);
/**
* bc_state_save() - Save state to a file
*
* @dev: Device to access
* Return: 0 if OK, or -ve error code
*/
int bc_state_save(struct udevice *dev);
/**
* bc_state_save_to_buf() - Write the current state to a buffer
*
* The buffer is inited and filled with the contents of the state as it
* would be written to a file
*
* Return: 0 if OK, or -ve error code
*/
int bc_state_save_to_buf(struct udevice *dev, struct abuf *buf);
/**
* bc_state_clear() - Clear all values
*
* Return: 0 if OK, or -ve error code
*/
int bc_state_clear(struct udevice *dev);
#endif