devices/usb/backend/
error.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 base::TubeError;
6use remain::sorted;
7use thiserror::Error;
8use usb_util::Error as UsbUtilError;
9
10use crate::usb::backend::fido_backend::error::Error as FidoError;
11use crate::usb::xhci::scatter_gather_buffer::Error as BufferError;
12use crate::usb::xhci::xhci_transfer::Error as XhciTransferError;
13use crate::utils::Error as UtilsError;
14
15#[sorted]
16#[derive(Error, Debug)]
17pub enum Error {
18    #[error("failed to add to event loop: {0}")]
19    AddToEventLoop(UtilsError),
20    #[error("failed to alloc streams: {0}")]
21    AllocStreams(UsbUtilError),
22    #[error("backend provider is in a bad state")]
23    BadBackendProviderState,
24    #[error("xhci transfer is in a bad state")]
25    BadXhciTransferState,
26    #[error("failed to get buffer length: {0}")]
27    BufferLen(BufferError),
28    #[error("failed to clear halt: {0}")]
29    ClearHalt(UsbUtilError),
30    #[error("failed to create scatter gather buffer: {0}")]
31    CreateBuffer(XhciTransferError),
32    #[error("failed to create control tube: {0}")]
33    CreateControlTube(TubeError),
34    #[error("failed to create fido backend device: {0}")]
35    CreateFidoBackendDevice(FidoError),
36    #[error("failed to create host backend usb device: {0}")]
37    CreateHostUsbDevice(UsbUtilError),
38    #[error("failed to create libusb context: {0}")]
39    CreateLibUsbContext(UsbUtilError),
40    #[error("failed to create transfer: {0}")]
41    CreateTransfer(UsbUtilError),
42    #[error("failed to create USB request setup: {0}")]
43    CreateUsbRequestSetup(XhciTransferError),
44    #[error("failed to free streams: {0}")]
45    FreeStreams(UsbUtilError),
46    #[error("failed to get active config: {0}")]
47    GetActiveConfig(UsbUtilError),
48    #[error("failed to get config descriptor: {0}")]
49    GetConfigDescriptor(UsbUtilError),
50    #[error("failed to get device descriptor: {0}")]
51    GetDeviceDescriptor(UsbUtilError),
52    #[error("failed to get dma buffer")]
53    GetDmaBuffer,
54    #[error("failed to get endpoint descriptor for ep: {0}")]
55    GetEndpointDescriptor(u8),
56    #[error("failed to get endpoint type")]
57    GetEndpointType,
58    /// Cannot get interface descriptor for (interface, altsetting).
59    #[error("failed to get interface descriptor for interface {0}, alt setting {1}")]
60    GetInterfaceDescriptor(u8, u8),
61    #[error("failed to get xhci transfer type: {0}")]
62    GetXhciTransferType(XhciTransferError),
63    #[error("the backend received the wrong transfer request")]
64    MalformedBackendTransfer,
65    #[error("request missing required data buffer")]
66    MissingRequiredBuffer,
67    #[error("failed to proceed to next TD: {0}")]
68    Proceed(XhciTransferError),
69    #[error("failed to queue async job: {0}")]
70    QueueAsyncJob(UtilsError),
71    #[error("failed to read buffer: {0}")]
72    ReadBuffer(BufferError),
73    #[error("failed to read control tube: {0}")]
74    ReadControlTube(TubeError),
75    #[error("failed to release dma buffer")]
76    ReleaseDmaBuffer,
77    #[error("failed to remove device from event loop: {0}")]
78    RemoveFromEventLoop(UtilsError),
79    #[error("failed to reset: {0}")]
80    Reset(UsbUtilError),
81    #[error("failed to set active config: {0}")]
82    SetActiveConfig(UsbUtilError),
83    #[error("failed to set interface alt setting: {0}")]
84    SetInterfaceAltSetting(UsbUtilError),
85    #[error("failed to setup control tube: {0}")]
86    SetupControlTube(TubeError),
87    #[error("failed to start async job queue: {0}")]
88    StartAsyncJobQueue(UtilsError),
89    #[error("xhci transfer completed: {0}")]
90    TransferComplete(XhciTransferError),
91    #[error("failed to get max payload size for xhci transfer: {0}")]
92    TransferGetMaxPayload(XhciTransferError),
93    #[error("failed to cancel transfer: {0}")]
94    TransferHandle(UsbUtilError),
95    #[error("transfer has already completed when being cancelled")]
96    TransferHandleAlreadyComplete,
97    #[error("failed to write buffer: {0}")]
98    WriteBuffer(BufferError),
99    #[error("failed to write control tube: {0}")]
100    WriteControlTube(TubeError),
101}
102
103pub type Result<T> = std::result::Result<T, Error>;