Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
google
GitHub Repository: google/crosvm
Path: blob/main/devices/src/usb/backend/error.rs
5394 views
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
5
use base::TubeError;
6
use remain::sorted;
7
use thiserror::Error;
8
use usb_util::Error as UsbUtilError;
9
10
use crate::usb::backend::fido_backend::error::Error as FidoError;
11
use crate::usb::xhci::scatter_gather_buffer::Error as BufferError;
12
use crate::usb::xhci::xhci_transfer::Error as XhciTransferError;
13
use crate::utils::Error as UtilsError;
14
15
#[sorted]
16
#[derive(Error, Debug)]
17
pub 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("the backend received the wrong transfer request")]
62
MalformedBackendTransfer,
63
#[error("request missing required data buffer")]
64
MissingRequiredBuffer,
65
#[error("failed to queue async job: {0}")]
66
QueueAsyncJob(UtilsError),
67
#[error("failed to read buffer: {0}")]
68
ReadBuffer(BufferError),
69
#[error("failed to read control tube: {0}")]
70
ReadControlTube(TubeError),
71
#[error("failed to release dma buffer")]
72
ReleaseDmaBuffer,
73
#[error("failed to remove device from event loop: {0}")]
74
RemoveFromEventLoop(UtilsError),
75
#[error("failed to reset: {0}")]
76
Reset(UsbUtilError),
77
#[error("failed to set active config: {0}")]
78
SetActiveConfig(UsbUtilError),
79
#[error("failed to set interface alt setting: {0}")]
80
SetInterfaceAltSetting(UsbUtilError),
81
#[error("failed to setup control tube: {0}")]
82
SetupControlTube(TubeError),
83
#[error("failed to start async job queue: {0}")]
84
StartAsyncJobQueue(UtilsError),
85
#[error("xhci transfer completed: {0}")]
86
TransferComplete(XhciTransferError),
87
#[error("failed to cancel transfer: {0}")]
88
TransferHandle(UsbUtilError),
89
#[error("transfer has already completed when being cancelled")]
90
TransferHandleAlreadyComplete,
91
#[error("failed to write buffer: {0}")]
92
WriteBuffer(BufferError),
93
#[error("failed to write control tube: {0}")]
94
WriteControlTube(TubeError),
95
}
96
97
pub type Result<T> = std::result::Result<T, Error>;
98
99