This provides a basic prototype for boot control. Some documentation is in boot/bootctl/README.rst
229 lines
5.1 KiB
C
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
|