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

usb.h (7606B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Released under the GPLv2 only.
      4 */
      5
      6#include <linux/pm.h>
      7#include <linux/acpi.h>
      8
      9struct usb_hub_descriptor;
     10struct usb_dev_state;
     11
     12/* Functions local to drivers/usb/core/ */
     13
     14extern int usb_create_sysfs_dev_files(struct usb_device *dev);
     15extern void usb_remove_sysfs_dev_files(struct usb_device *dev);
     16extern void usb_create_sysfs_intf_files(struct usb_interface *intf);
     17extern void usb_remove_sysfs_intf_files(struct usb_interface *intf);
     18extern int usb_create_ep_devs(struct device *parent,
     19				struct usb_host_endpoint *endpoint,
     20				struct usb_device *udev);
     21extern void usb_remove_ep_devs(struct usb_host_endpoint *endpoint);
     22
     23extern void usb_enable_endpoint(struct usb_device *dev,
     24		struct usb_host_endpoint *ep, bool reset_toggle);
     25extern void usb_enable_interface(struct usb_device *dev,
     26		struct usb_interface *intf, bool reset_toggles);
     27extern void usb_disable_endpoint(struct usb_device *dev, unsigned int epaddr,
     28		bool reset_hardware);
     29extern void usb_disable_interface(struct usb_device *dev,
     30		struct usb_interface *intf, bool reset_hardware);
     31extern void usb_release_interface_cache(struct kref *ref);
     32extern void usb_disable_device(struct usb_device *dev, int skip_ep0);
     33extern int usb_deauthorize_device(struct usb_device *);
     34extern int usb_authorize_device(struct usb_device *);
     35extern void usb_deauthorize_interface(struct usb_interface *);
     36extern void usb_authorize_interface(struct usb_interface *);
     37extern void usb_detect_quirks(struct usb_device *udev);
     38extern void usb_detect_interface_quirks(struct usb_device *udev);
     39extern void usb_release_quirk_list(void);
     40extern bool usb_endpoint_is_ignored(struct usb_device *udev,
     41		struct usb_host_interface *intf,
     42		struct usb_endpoint_descriptor *epd);
     43extern int usb_remove_device(struct usb_device *udev);
     44
     45extern int usb_get_device_descriptor(struct usb_device *dev,
     46		unsigned int size);
     47extern int usb_set_isoch_delay(struct usb_device *dev);
     48extern int usb_get_bos_descriptor(struct usb_device *dev);
     49extern void usb_release_bos_descriptor(struct usb_device *dev);
     50extern char *usb_cache_string(struct usb_device *udev, int index);
     51extern int usb_set_configuration(struct usb_device *dev, int configuration);
     52extern int usb_choose_configuration(struct usb_device *udev);
     53extern int usb_generic_driver_probe(struct usb_device *udev);
     54extern void usb_generic_driver_disconnect(struct usb_device *udev);
     55extern int usb_generic_driver_suspend(struct usb_device *udev,
     56		pm_message_t msg);
     57extern int usb_generic_driver_resume(struct usb_device *udev,
     58		pm_message_t msg);
     59
     60static inline unsigned usb_get_max_power(struct usb_device *udev,
     61		struct usb_host_config *c)
     62{
     63	/* SuperSpeed power is in 8 mA units; others are in 2 mA units */
     64	unsigned mul = (udev->speed >= USB_SPEED_SUPER ? 8 : 2);
     65
     66	return c->desc.bMaxPower * mul;
     67}
     68
     69extern void usb_kick_hub_wq(struct usb_device *dev);
     70extern int usb_match_one_id_intf(struct usb_device *dev,
     71				 struct usb_host_interface *intf,
     72				 const struct usb_device_id *id);
     73extern int usb_match_device(struct usb_device *dev,
     74			    const struct usb_device_id *id);
     75extern const struct usb_device_id *usb_device_match_id(struct usb_device *udev,
     76				const struct usb_device_id *id);
     77extern bool usb_driver_applicable(struct usb_device *udev,
     78				  struct usb_device_driver *udrv);
     79extern void usb_forced_unbind_intf(struct usb_interface *intf);
     80extern void usb_unbind_and_rebind_marked_interfaces(struct usb_device *udev);
     81
     82extern void usb_hub_release_all_ports(struct usb_device *hdev,
     83		struct usb_dev_state *owner);
     84extern bool usb_device_is_owned(struct usb_device *udev);
     85
     86extern int  usb_hub_init(void);
     87extern void usb_hub_cleanup(void);
     88extern int usb_major_init(void);
     89extern void usb_major_cleanup(void);
     90extern int usb_device_supports_lpm(struct usb_device *udev);
     91extern int usb_port_disable(struct usb_device *udev);
     92
     93#ifdef	CONFIG_PM
     94
     95extern int usb_suspend(struct device *dev, pm_message_t msg);
     96extern int usb_resume(struct device *dev, pm_message_t msg);
     97extern int usb_resume_complete(struct device *dev);
     98
     99extern int usb_port_suspend(struct usb_device *dev, pm_message_t msg);
    100extern int usb_port_resume(struct usb_device *dev, pm_message_t msg);
    101
    102extern void usb_autosuspend_device(struct usb_device *udev);
    103extern int usb_autoresume_device(struct usb_device *udev);
    104extern int usb_remote_wakeup(struct usb_device *dev);
    105extern int usb_runtime_suspend(struct device *dev);
    106extern int usb_runtime_resume(struct device *dev);
    107extern int usb_runtime_idle(struct device *dev);
    108extern int usb_enable_usb2_hardware_lpm(struct usb_device *udev);
    109extern int usb_disable_usb2_hardware_lpm(struct usb_device *udev);
    110
    111extern void usbfs_notify_suspend(struct usb_device *udev);
    112extern void usbfs_notify_resume(struct usb_device *udev);
    113
    114#else
    115
    116static inline int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
    117{
    118	return 0;
    119}
    120
    121static inline int usb_port_resume(struct usb_device *udev, pm_message_t msg)
    122{
    123	return 0;
    124}
    125
    126#define usb_autosuspend_device(udev)		do {} while (0)
    127static inline int usb_autoresume_device(struct usb_device *udev)
    128{
    129	return 0;
    130}
    131
    132static inline int usb_enable_usb2_hardware_lpm(struct usb_device *udev)
    133{
    134	return 0;
    135}
    136
    137static inline int usb_disable_usb2_hardware_lpm(struct usb_device *udev)
    138{
    139	return 0;
    140}
    141
    142#endif
    143
    144extern struct bus_type usb_bus_type;
    145extern struct mutex usb_port_peer_mutex;
    146extern struct device_type usb_device_type;
    147extern struct device_type usb_if_device_type;
    148extern struct device_type usb_ep_device_type;
    149extern struct device_type usb_port_device_type;
    150extern struct usb_device_driver usb_generic_driver;
    151
    152static inline int is_usb_device(const struct device *dev)
    153{
    154	return dev->type == &usb_device_type;
    155}
    156
    157static inline int is_usb_interface(const struct device *dev)
    158{
    159	return dev->type == &usb_if_device_type;
    160}
    161
    162static inline int is_usb_endpoint(const struct device *dev)
    163{
    164	return dev->type == &usb_ep_device_type;
    165}
    166
    167static inline int is_usb_port(const struct device *dev)
    168{
    169	return dev->type == &usb_port_device_type;
    170}
    171
    172static inline int is_root_hub(struct usb_device *udev)
    173{
    174	return (udev->parent == NULL);
    175}
    176
    177/* Do the same for device drivers and interface drivers. */
    178
    179static inline int is_usb_device_driver(struct device_driver *drv)
    180{
    181	return container_of(drv, struct usbdrv_wrap, driver)->
    182			for_devices;
    183}
    184
    185/* for labeling diagnostics */
    186extern const char *usbcore_name;
    187
    188/* sysfs stuff */
    189extern const struct attribute_group *usb_device_groups[];
    190extern const struct attribute_group *usb_interface_groups[];
    191
    192/* usbfs stuff */
    193extern struct usb_driver usbfs_driver;
    194extern const struct file_operations usbfs_devices_fops;
    195extern const struct file_operations usbdev_file_operations;
    196
    197extern int usb_devio_init(void);
    198extern void usb_devio_cleanup(void);
    199
    200/*
    201 * Firmware specific cookie identifying a port's location. '0' == no location
    202 * data available
    203 */
    204typedef u32 usb_port_location_t;
    205
    206/* internal notify stuff */
    207extern void usb_notify_add_device(struct usb_device *udev);
    208extern void usb_notify_remove_device(struct usb_device *udev);
    209extern void usb_notify_add_bus(struct usb_bus *ubus);
    210extern void usb_notify_remove_bus(struct usb_bus *ubus);
    211extern void usb_hub_adjust_deviceremovable(struct usb_device *hdev,
    212		struct usb_hub_descriptor *desc);
    213
    214#ifdef CONFIG_ACPI
    215extern int usb_acpi_register(void);
    216extern void usb_acpi_unregister(void);
    217extern acpi_handle usb_get_hub_port_acpi_handle(struct usb_device *hdev,
    218	int port1);
    219#else
    220static inline int usb_acpi_register(void) { return 0; };
    221static inline void usb_acpi_unregister(void) { };
    222#endif