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 claim interface {0}: {1}")]
29    ClaimInterface(u8, UsbUtilError),
30    #[error("failed to clear halt: {0}")]
31    ClearHalt(UsbUtilError),
32    #[error("failed to create scatter gather buffer: {0}")]
33    CreateBuffer(XhciTransferError),
34    #[error("failed to create control tube: {0}")]
35    CreateControlTube(TubeError),
36    #[error("failed to create fido backend device: {0}")]
37    CreateFidoBackendDevice(FidoError),
38    #[error("failed to create host backend usb device: {0}")]
39    CreateHostUsbDevice(UsbUtilError),
40    #[error("failed to create libusb context: {0}")]
41    CreateLibUsbContext(UsbUtilError),
42    #[error("failed to create transfer: {0}")]
43    CreateTransfer(UsbUtilError),
44    #[error("failed to create USB request setup: {0}")]
45    CreateUsbRequestSetup(XhciTransferError),
46    #[error("failed to free streams: {0}")]
47    FreeStreams(UsbUtilError),
48    #[error("failed to get active config: {0}")]
49    GetActiveConfig(UsbUtilError),
50    #[error("failed to get config descriptor: {0}")]
51    GetConfigDescriptor(UsbUtilError),
52    #[error("failed to get device descriptor: {0}")]
53    GetDeviceDescriptor(UsbUtilError),
54    #[error("failed to get dma buffer")]
55    GetDmaBuffer,
56    #[error("failed to get endpoint descriptor for ep: {0}")]
57    GetEndpointDescriptor(u8),
58    #[error("failed to get endpoint type")]
59    GetEndpointType,
60    /// Cannot get interface descriptor for (interface, altsetting).
61    #[error("failed to get interface descriptor for interface {0}, alt setting {1}")]
62    GetInterfaceDescriptor(u8, u8),
63    #[error("the backend received the wrong transfer request")]
64    MalformedBackendTransfer,
65    #[error("request missing required data buffer")]
66    MissingRequiredBuffer,
67    #[error("failed to queue async job: {0}")]
68    QueueAsyncJob(UtilsError),
69    #[error("failed to read buffer: {0}")]
70    ReadBuffer(BufferError),
71    #[error("failed to read control tube: {0}")]
72    ReadControlTube(TubeError),
73    #[error("failed to release dma buffer")]
74    ReleaseDmaBuffer,
75    #[error("failed to remove device from event loop: {0}")]
76    RemoveFromEventLoop(UtilsError),
77    #[error("failed to reset: {0}")]
78    Reset(UsbUtilError),
79    #[error("failed to set active config: {0}")]
80    SetActiveConfig(UsbUtilError),
81    #[error("failed to set interface alt setting: {0}")]
82    SetInterfaceAltSetting(UsbUtilError),
83    #[error("failed to setup control tube: {0}")]
84    SetupControlTube(TubeError),
85    #[error("failed to start async job queue: {0}")]
86    StartAsyncJobQueue(UtilsError),
87    #[error("xhci transfer completed: {0}")]
88    TransferComplete(XhciTransferError),
89    #[error("failed to get max payload size for xhci transfer: {0}")]
90    TransferGetMaxPayload(XhciTransferError),
91    #[error("failed to cancel transfer: {0}")]
92    TransferHandle(UsbUtilError),
93    #[error("transfer has already completed when being cancelled")]
94    TransferHandleAlreadyComplete,
95    #[error("failed to write buffer: {0}")]
96    WriteBuffer(BufferError),
97    #[error("failed to write control tube: {0}")]
98    WriteControlTube(TubeError),
99}
100
101pub type Result<T> = std::result::Result<T, Error>;