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

otg.h (3158B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* USB OTG (On The Go) defines */
      3/*
      4 *
      5 * These APIs may be used between USB controllers.  USB device drivers
      6 * (for either host or peripheral roles) don't use these calls; they
      7 * continue to use just usb_device and usb_gadget.
      8 */
      9
     10#ifndef __LINUX_USB_OTG_H
     11#define __LINUX_USB_OTG_H
     12
     13#include <linux/phy/phy.h>
     14#include <linux/usb/phy.h>
     15
     16struct usb_otg {
     17	u8			default_a;
     18
     19	struct phy		*phy;
     20	/* old usb_phy interface */
     21	struct usb_phy		*usb_phy;
     22	struct usb_bus		*host;
     23	struct usb_gadget	*gadget;
     24
     25	enum usb_otg_state	state;
     26
     27	/* bind/unbind the host controller */
     28	int	(*set_host)(struct usb_otg *otg, struct usb_bus *host);
     29
     30	/* bind/unbind the peripheral controller */
     31	int	(*set_peripheral)(struct usb_otg *otg,
     32					struct usb_gadget *gadget);
     33
     34	/* effective for A-peripheral, ignored for B devices */
     35	int	(*set_vbus)(struct usb_otg *otg, bool enabled);
     36
     37	/* for B devices only:  start session with A-Host */
     38	int	(*start_srp)(struct usb_otg *otg);
     39
     40	/* start or continue HNP role switch */
     41	int	(*start_hnp)(struct usb_otg *otg);
     42
     43};
     44
     45/**
     46 * struct usb_otg_caps - describes the otg capabilities of the device
     47 * @otg_rev: The OTG revision number the device is compliant with, it's
     48 *		in binary-coded decimal (i.e. 2.0 is 0200H).
     49 * @hnp_support: Indicates if the device supports HNP.
     50 * @srp_support: Indicates if the device supports SRP.
     51 * @adp_support: Indicates if the device supports ADP.
     52 */
     53struct usb_otg_caps {
     54	u16 otg_rev;
     55	bool hnp_support;
     56	bool srp_support;
     57	bool adp_support;
     58};
     59
     60extern const char *usb_otg_state_string(enum usb_otg_state state);
     61
     62/* Context: can sleep */
     63static inline int
     64otg_start_hnp(struct usb_otg *otg)
     65{
     66	if (otg && otg->start_hnp)
     67		return otg->start_hnp(otg);
     68
     69	return -ENOTSUPP;
     70}
     71
     72/* Context: can sleep */
     73static inline int
     74otg_set_vbus(struct usb_otg *otg, bool enabled)
     75{
     76	if (otg && otg->set_vbus)
     77		return otg->set_vbus(otg, enabled);
     78
     79	return -ENOTSUPP;
     80}
     81
     82/* for HCDs */
     83static inline int
     84otg_set_host(struct usb_otg *otg, struct usb_bus *host)
     85{
     86	if (otg && otg->set_host)
     87		return otg->set_host(otg, host);
     88
     89	return -ENOTSUPP;
     90}
     91
     92/* for usb peripheral controller drivers */
     93
     94/* Context: can sleep */
     95static inline int
     96otg_set_peripheral(struct usb_otg *otg, struct usb_gadget *periph)
     97{
     98	if (otg && otg->set_peripheral)
     99		return otg->set_peripheral(otg, periph);
    100
    101	return -ENOTSUPP;
    102}
    103
    104static inline int
    105otg_start_srp(struct usb_otg *otg)
    106{
    107	if (otg && otg->start_srp)
    108		return otg->start_srp(otg);
    109
    110	return -ENOTSUPP;
    111}
    112
    113/* for OTG controller drivers (and maybe other stuff) */
    114extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
    115
    116enum usb_dr_mode {
    117	USB_DR_MODE_UNKNOWN,
    118	USB_DR_MODE_HOST,
    119	USB_DR_MODE_PERIPHERAL,
    120	USB_DR_MODE_OTG,
    121};
    122
    123/**
    124 * usb_get_dr_mode - Get dual role mode for given device
    125 * @dev: Pointer to the given device
    126 *
    127 * The function gets phy interface string from property 'dr_mode',
    128 * and returns the corresponding enum usb_dr_mode
    129 */
    130extern enum usb_dr_mode usb_get_dr_mode(struct device *dev);
    131extern enum usb_dr_mode usb_get_role_switch_default_mode(struct device *dev);
    132
    133#endif /* __LINUX_USB_OTG_H */