cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

reset-controller.h (3655B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _LINUX_RESET_CONTROLLER_H_
      3#define _LINUX_RESET_CONTROLLER_H_
      4
      5#include <linux/list.h>
      6
      7struct reset_controller_dev;
      8
      9/**
     10 * struct reset_control_ops - reset controller driver callbacks
     11 *
     12 * @reset: for self-deasserting resets, does all necessary
     13 *         things to reset the device
     14 * @assert: manually assert the reset line, if supported
     15 * @deassert: manually deassert the reset line, if supported
     16 * @status: return the status of the reset line, if supported
     17 */
     18struct reset_control_ops {
     19	int (*reset)(struct reset_controller_dev *rcdev, unsigned long id);
     20	int (*assert)(struct reset_controller_dev *rcdev, unsigned long id);
     21	int (*deassert)(struct reset_controller_dev *rcdev, unsigned long id);
     22	int (*status)(struct reset_controller_dev *rcdev, unsigned long id);
     23};
     24
     25struct module;
     26struct device_node;
     27struct of_phandle_args;
     28
     29/**
     30 * struct reset_control_lookup - represents a single lookup entry
     31 *
     32 * @list: internal list of all reset lookup entries
     33 * @provider: name of the reset controller device controlling this reset line
     34 * @index: ID of the reset controller in the reset controller device
     35 * @dev_id: name of the device associated with this reset line
     36 * @con_id: name of the reset line (can be NULL)
     37 */
     38struct reset_control_lookup {
     39	struct list_head list;
     40	const char *provider;
     41	unsigned int index;
     42	const char *dev_id;
     43	const char *con_id;
     44};
     45
     46#define RESET_LOOKUP(_provider, _index, _dev_id, _con_id)		\
     47	{								\
     48		.provider = _provider,					\
     49		.index = _index,					\
     50		.dev_id = _dev_id,					\
     51		.con_id = _con_id,					\
     52	}
     53
     54/**
     55 * struct reset_controller_dev - reset controller entity that might
     56 *                               provide multiple reset controls
     57 * @ops: a pointer to device specific struct reset_control_ops
     58 * @owner: kernel module of the reset controller driver
     59 * @list: internal list of reset controller devices
     60 * @reset_control_head: head of internal list of requested reset controls
     61 * @dev: corresponding driver model device struct
     62 * @of_node: corresponding device tree node as phandle target
     63 * @of_reset_n_cells: number of cells in reset line specifiers
     64 * @of_xlate: translation function to translate from specifier as found in the
     65 *            device tree to id as given to the reset control ops, defaults
     66 *            to :c:func:`of_reset_simple_xlate`.
     67 * @nr_resets: number of reset controls in this reset controller device
     68 */
     69struct reset_controller_dev {
     70	const struct reset_control_ops *ops;
     71	struct module *owner;
     72	struct list_head list;
     73	struct list_head reset_control_head;
     74	struct device *dev;
     75	struct device_node *of_node;
     76	int of_reset_n_cells;
     77	int (*of_xlate)(struct reset_controller_dev *rcdev,
     78			const struct of_phandle_args *reset_spec);
     79	unsigned int nr_resets;
     80};
     81
     82#if IS_ENABLED(CONFIG_RESET_CONTROLLER)
     83int reset_controller_register(struct reset_controller_dev *rcdev);
     84void reset_controller_unregister(struct reset_controller_dev *rcdev);
     85
     86struct device;
     87int devm_reset_controller_register(struct device *dev,
     88				   struct reset_controller_dev *rcdev);
     89
     90void reset_controller_add_lookup(struct reset_control_lookup *lookup,
     91				 unsigned int num_entries);
     92#else
     93static inline int reset_controller_register(struct reset_controller_dev *rcdev)
     94{
     95	return 0;
     96}
     97
     98static inline void reset_controller_unregister(struct reset_controller_dev *rcdev)
     99{
    100}
    101
    102static inline int devm_reset_controller_register(struct device *dev,
    103						 struct reset_controller_dev *rcdev)
    104{
    105	return 0;
    106}
    107
    108static inline void reset_controller_add_lookup(struct reset_control_lookup *lookup,
    109					       unsigned int num_entries)
    110{
    111}
    112#endif
    113
    114#endif