mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
dm: add tag support
With dm-tag feature, any U-Boot subsystem is allowed to associate arbitrary number of data with a particular udevice. This can been see as expanding "struct udevice" without modifying the definition. As a first user, UEFI subsystem makes use of tags to associate an efi_disk object with a block device. Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
committed by
Heinrich Schuchardt
parent
75a9d75041
commit
6b7a6210fd
110
include/dm/tag.h
Normal file
110
include/dm/tag.h
Normal file
@@ -0,0 +1,110 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright (c) 2021 Linaro Limited
|
||||
* Author: AKASHI Takahiro
|
||||
*/
|
||||
|
||||
#ifndef _DM_TAG_H
|
||||
#define _DM_TAG_H
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
struct udevice;
|
||||
|
||||
enum dm_tag_t {
|
||||
/* EFI_LOADER */
|
||||
DM_TAG_EFI = 0,
|
||||
|
||||
DM_TAG_COUNT,
|
||||
};
|
||||
|
||||
/**
|
||||
* dmtag_node
|
||||
*
|
||||
* @sibling: List of dm-tag nodes
|
||||
* @dev: Associated udevice
|
||||
* @tag: Tag type
|
||||
* @ptr: Pointer as a value
|
||||
* @val: Value
|
||||
*/
|
||||
struct dmtag_node {
|
||||
struct list_head sibling;
|
||||
struct udevice *dev;
|
||||
enum dm_tag_t tag;
|
||||
union {
|
||||
void *ptr;
|
||||
ulong val;
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* dev_tag_set_ptr() - set a tag's value as a pointer
|
||||
* @dev: Device to operate
|
||||
* @tag: Tag type
|
||||
* @ptr: Pointer to set
|
||||
*
|
||||
* Set the value, @ptr, as of @tag associated with the device, @dev
|
||||
*
|
||||
* Return: 0 on success, -ve on error
|
||||
*/
|
||||
int dev_tag_set_ptr(struct udevice *dev, enum dm_tag_t tag, void *ptr);
|
||||
|
||||
/**
|
||||
* dev_tag_set_val() set a tag's value as an integer
|
||||
* @dev: Device to operate
|
||||
* @tag: Tag type
|
||||
* @val: Value to set
|
||||
*
|
||||
* Set the value, @val, as of @tag associated with the device, @dev
|
||||
*
|
||||
* Return: on success, -ve on error
|
||||
*/
|
||||
int dev_tag_set_val(struct udevice *dev, enum dm_tag_t tag, ulong val);
|
||||
|
||||
/**
|
||||
* dev_tag_get_ptr() - get a tag's value as a pointer
|
||||
* @dev: Device to operate
|
||||
* @tag: Tag type
|
||||
* @ptrp: Pointer to tag's value (pointer)
|
||||
*
|
||||
* Get a tag's value as a pointer
|
||||
*
|
||||
* Return: on success, -ve on error
|
||||
*/
|
||||
int dev_tag_get_ptr(struct udevice *dev, enum dm_tag_t tag, void **ptrp);
|
||||
|
||||
/**
|
||||
* dev_tag_get_val() - get a tag's value as an integer
|
||||
* @dev: Device to operate
|
||||
* @tag: Tag type
|
||||
* @valp: Pointer to tag's value (ulong)
|
||||
*
|
||||
* Get a tag's value as an integer
|
||||
*
|
||||
* Return: 0 on success, -ve on error
|
||||
*/
|
||||
int dev_tag_get_val(struct udevice *dev, enum dm_tag_t tag, ulong *valp);
|
||||
|
||||
/**
|
||||
* dev_tag_del() - delete a tag
|
||||
* @dev: Device to operate
|
||||
* @tag: Tag type
|
||||
*
|
||||
* Delete a tag of @tag associated with the device, @dev
|
||||
*
|
||||
* Return: 0 on success, -ve on error
|
||||
*/
|
||||
int dev_tag_del(struct udevice *dev, enum dm_tag_t tag);
|
||||
|
||||
/**
|
||||
* dev_tag_del_all() - delete all tags
|
||||
* @dev: Device to operate
|
||||
*
|
||||
* Delete all the tags associated with the device, @dev
|
||||
*
|
||||
* Return: 0 on success, -ve on error
|
||||
*/
|
||||
int dev_tag_del_all(struct udevice *dev);
|
||||
|
||||
#endif /* _DM_TAG_H */
|
||||
Reference in New Issue
Block a user