/* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright (c) 2021 Linaro Limited * Author: AKASHI Takahiro */ #ifndef _DM_TAG_H #define _DM_TAG_H #include #include 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 */