| /* 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 dm_stats; |
| struct udevice; |
| |
| enum dm_tag_t { |
| /* Types of core tags that can be attached to devices */ |
| DM_TAG_PLAT, |
| DM_TAG_PARENT_PLAT, |
| DM_TAG_UC_PLAT, |
| |
| DM_TAG_PRIV, |
| DM_TAG_PARENT_PRIV, |
| DM_TAG_UC_PRIV, |
| DM_TAG_DRIVER_DATA, |
| DM_TAG_ATTACH_COUNT, |
| |
| /* EFI_LOADER */ |
| DM_TAG_EFI = DM_TAG_ATTACH_COUNT, |
| |
| 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); |
| |
| /** |
| * dev_tag_collect_stats() - Collect information on driver model performance |
| * |
| * This collects information on how driver model is performing. For now it only |
| * includes memory usage |
| * |
| * @stats: Place to put the collected information |
| */ |
| void dev_tag_collect_stats(struct dm_stats *stats); |
| |
| /** |
| * tag_get_name() - Get the name of a tag |
| * |
| * @tag: Tag to look up, which must be valid |
| * Returns: Name of tag |
| */ |
| const char *tag_get_name(enum dm_tag_t tag); |
| |
| #endif /* _DM_TAG_H */ |