devices/usb/xhci/
xhci_backend_device.rs

1// Copyright 2019 The ChromiumOS Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use usb_util::DeviceSpeed;
6
7use crate::usb::backend::error::Result;
8
9/// Address of this usb device, as in Set Address standard usb device request.
10pub type UsbDeviceAddress = u32;
11
12/// The type USB device provided by the backend device.
13#[derive(PartialEq, Eq)]
14pub enum BackendType {
15    Usb2,
16    Usb3,
17}
18
19/// Xhci backend device is a virtual device connected to xHCI controller. It handles xhci transfers.
20pub trait XhciBackendDevice: Send + Sync {
21    /// Returns the type of USB device provided by this device.
22    fn get_backend_type(&self) -> BackendType;
23    /// Get vendor id of this device.
24    fn get_vid(&self) -> u16;
25    /// Get product id of this device.
26    fn get_pid(&self) -> u16;
27    /// Set address of this backend.
28    fn set_address(&mut self, address: UsbDeviceAddress);
29    /// Reset the backend device.
30    fn reset(&mut self) -> Result<()>;
31    /// Get speed of this device.
32    fn get_speed(&self) -> Option<DeviceSpeed>;
33    /// Allocate streams for the endpoint
34    fn alloc_streams(&self, ep: u8, num_streams: u16) -> Result<()>;
35    /// Free streams for the endpoint
36    fn free_streams(&self, ep: u8) -> Result<()>;
37    /// Stop the backend device, allowing it to execute cleanup routines.
38    fn stop(&mut self);
39}