• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2019 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 use crate::usb::xhci::scatter_gather_buffer::Error as BufferError;
6 use crate::usb::xhci::xhci_transfer::Error as XhciTransferError;
7 use crate::utils::Error as UtilsError;
8 
9 use base::TubeError;
10 use remain::sorted;
11 use thiserror::Error;
12 use usb_util::Error as UsbUtilError;
13 
14 #[sorted]
15 #[derive(Error, Debug)]
16 pub enum Error {
17     #[error("failed to add to event loop: {0}")]
18     AddToEventLoop(UtilsError),
19     #[error("backend provider is in a bad state")]
20     BadBackendProviderState,
21     #[error("xhci transfer is in a bad state")]
22     BadXhciTransferState,
23     #[error("failed to get buffer length: {0}")]
24     BufferLen(BufferError),
25     #[error("failed to clear halt: {0}")]
26     ClearHalt(UsbUtilError),
27     #[error("failed to create contro tube: {0}")]
28     CreateControlTube(TubeError),
29     #[error("failed to create libusb context: {0}")]
30     CreateLibUsbContext(UsbUtilError),
31     #[error("failed to create transfer: {0}")]
32     CreateTransfer(UsbUtilError),
33     #[error("failed to get active config: {0}")]
34     GetActiveConfig(UsbUtilError),
35     #[error("failed to get config descriptor: {0}")]
36     GetConfigDescriptor(UsbUtilError),
37     #[error("failed to get device descriptor: {0}")]
38     GetDeviceDescriptor(UsbUtilError),
39     #[error("failed to get endpoint descriptor for ep: {0}")]
40     GetEndpointDescriptor(u8),
41     #[error("failed to get endpoint type")]
42     GetEndpointType,
43     /// Cannot get interface descriptor for (interface, altsetting).
44     #[error("failed to get interface descriptor for interface {0}, alt setting {1}")]
45     GetInterfaceDescriptor(u8, u8),
46     #[error("failed to get xhci transfer type: {0}")]
47     GetXhciTransferType(XhciTransferError),
48     #[error("request missing required data buffer")]
49     MissingRequiredBuffer,
50     #[error("failed to queue async job: {0}")]
51     QueueAsyncJob(UtilsError),
52     #[error("failed to read buffer: {0}")]
53     ReadBuffer(BufferError),
54     #[error("failed to read control tube: {0}")]
55     ReadControlTube(TubeError),
56     #[error("failed to reset: {0}")]
57     Reset(UsbUtilError),
58     #[error("failed to set active config: {0}")]
59     SetActiveConfig(UsbUtilError),
60     #[error("failed to set interface alt setting: {0}")]
61     SetInterfaceAltSetting(UsbUtilError),
62     #[error("failed to setup control tube: {0}")]
63     SetupControlTube(TubeError),
64     #[error("failed to start async job queue: {0}")]
65     StartAsyncJobQueue(UtilsError),
66     #[error("xhci transfer completed: {0}")]
67     TransferComplete(XhciTransferError),
68     #[error("failed to write buffer: {0}")]
69     WriteBuffer(BufferError),
70     #[error("failed to write control tube: {0}")]
71     WriteControlTube(TubeError),
72 }
73 
74 pub type Result<T> = std::result::Result<T, Error>;
75