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

role.h (3663B)


      1// SPDX-License-Identifier: GPL-2.0
      2
      3#ifndef __LINUX_USB_ROLE_H
      4#define __LINUX_USB_ROLE_H
      5
      6#include <linux/device.h>
      7
      8struct usb_role_switch;
      9
     10enum usb_role {
     11	USB_ROLE_NONE,
     12	USB_ROLE_HOST,
     13	USB_ROLE_DEVICE,
     14};
     15
     16typedef int (*usb_role_switch_set_t)(struct usb_role_switch *sw,
     17				     enum usb_role role);
     18typedef enum usb_role (*usb_role_switch_get_t)(struct usb_role_switch *sw);
     19
     20/**
     21 * struct usb_role_switch_desc - USB Role Switch Descriptor
     22 * @fwnode: The device node to be associated with the role switch
     23 * @usb2_port: Optional reference to the host controller port device (USB2)
     24 * @usb3_port: Optional reference to the host controller port device (USB3)
     25 * @udc: Optional reference to the peripheral controller device
     26 * @set: Callback for setting the role
     27 * @get: Callback for getting the role (optional)
     28 * @allow_userspace_control: If true userspace may change the role through sysfs
     29 * @driver_data: Private data pointer
     30 * @name: Name for the switch (optional)
     31 *
     32 * @usb2_port and @usb3_port will point to the USB host port and @udc to the USB
     33 * device controller behind the USB connector with the role switch. If
     34 * @usb2_port, @usb3_port and @udc are included in the description, the
     35 * reference count for them should be incremented by the caller of
     36 * usb_role_switch_register() before registering the switch.
     37 */
     38struct usb_role_switch_desc {
     39	struct fwnode_handle *fwnode;
     40	struct device *usb2_port;
     41	struct device *usb3_port;
     42	struct device *udc;
     43	usb_role_switch_set_t set;
     44	usb_role_switch_get_t get;
     45	bool allow_userspace_control;
     46	void *driver_data;
     47	const char *name;
     48};
     49
     50
     51#if IS_ENABLED(CONFIG_USB_ROLE_SWITCH)
     52int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role);
     53enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw);
     54struct usb_role_switch *usb_role_switch_get(struct device *dev);
     55struct usb_role_switch *fwnode_usb_role_switch_get(struct fwnode_handle *node);
     56void usb_role_switch_put(struct usb_role_switch *sw);
     57
     58struct usb_role_switch *
     59usb_role_switch_find_by_fwnode(const struct fwnode_handle *fwnode);
     60
     61struct usb_role_switch *
     62usb_role_switch_register(struct device *parent,
     63			 const struct usb_role_switch_desc *desc);
     64void usb_role_switch_unregister(struct usb_role_switch *sw);
     65
     66void usb_role_switch_set_drvdata(struct usb_role_switch *sw, void *data);
     67void *usb_role_switch_get_drvdata(struct usb_role_switch *sw);
     68const char *usb_role_string(enum usb_role role);
     69#else
     70static inline int usb_role_switch_set_role(struct usb_role_switch *sw,
     71		enum usb_role role)
     72{
     73	return 0;
     74}
     75
     76static inline enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw)
     77{
     78	return USB_ROLE_NONE;
     79}
     80
     81static inline struct usb_role_switch *usb_role_switch_get(struct device *dev)
     82{
     83	return ERR_PTR(-ENODEV);
     84}
     85
     86static inline struct usb_role_switch *
     87fwnode_usb_role_switch_get(struct fwnode_handle *node)
     88{
     89	return ERR_PTR(-ENODEV);
     90}
     91
     92static inline void usb_role_switch_put(struct usb_role_switch *sw) { }
     93
     94static inline struct usb_role_switch *
     95usb_role_switch_find_by_fwnode(const struct fwnode_handle *fwnode)
     96{
     97	return NULL;
     98}
     99
    100static inline struct usb_role_switch *
    101usb_role_switch_register(struct device *parent,
    102			 const struct usb_role_switch_desc *desc)
    103{
    104	return ERR_PTR(-ENODEV);
    105}
    106
    107static inline void usb_role_switch_unregister(struct usb_role_switch *sw) { }
    108
    109static inline void
    110usb_role_switch_set_drvdata(struct usb_role_switch *sw, void *data)
    111{
    112}
    113
    114static inline void *usb_role_switch_get_drvdata(struct usb_role_switch *sw)
    115{
    116	return NULL;
    117}
    118
    119static inline const char *usb_role_string(enum usb_role role)
    120{
    121	return "unknown";
    122}
    123
    124#endif
    125
    126#endif /* __LINUX_USB_ROLE_H */