summary refs log tree commit diff
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2019-05-01 16:36:26 -0700
committerchrome-bot <chrome-bot@chromium.org>2019-05-10 15:26:01 -0700
commit659b1779e2c24fe4c8acf8b91dae066d46743e64 (patch)
tree1d5c681fee4052bfffc2f7e748ed8911b93ddef7
parentd9990845398e40eb5bdac40610c895dacd9c1ee3 (diff)
downloadcrosvm-659b1779e2c24fe4c8acf8b91dae066d46743e64.tar
crosvm-659b1779e2c24fe4c8acf8b91dae066d46743e64.tar.gz
crosvm-659b1779e2c24fe4c8acf8b91dae066d46743e64.tar.bz2
crosvm-659b1779e2c24fe4c8acf8b91dae066d46743e64.tar.lz
crosvm-659b1779e2c24fe4c8acf8b91dae066d46743e64.tar.xz
crosvm-659b1779e2c24fe4c8acf8b91dae066d46743e64.tar.zst
crosvm-659b1779e2c24fe4c8acf8b91dae066d46743e64.zip
usb: remove pointless Options in UsbRequestSetup
The get_type and get_direction helpers return Options, even though
they can only possibly return a non-None value; all bit patterns of the
fields they are interpreting are defined.  Drop the Options and return
the enum values directly to simplify callers and remove dead code.

Fix up a typo ("recipienet" -> "recipient") while we're in the
neighborhood.

BUG=chromium:831850
TEST=Test adb in Crostini

Change-Id: Ie26a1ed1c15f5f17b5ae80be78ce5f8ff51fab28
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1593713
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Zach Reizner <zachr@chromium.org>
-rw-r--r--devices/src/usb/host_backend/error.rs2
-rw-r--r--devices/src/usb/host_backend/host_device.rs11
-rw-r--r--usb_util/src/types.rs22
3 files changed, 15 insertions, 20 deletions
diff --git a/devices/src/usb/host_backend/error.rs b/devices/src/usb/host_backend/error.rs
index 17ac191..ef097f9 100644
--- a/devices/src/usb/host_backend/error.rs
+++ b/devices/src/usb/host_backend/error.rs
@@ -32,7 +32,6 @@ pub enum Error {
     /// Cannot get interface descriptor for (interface, altsetting).
     GetInterfaceDescriptor((i32, u16)),
     GetEndpointDescriptor(u8),
-    GetRequestSetupType,
     BadXhciTransferState,
     BadBackendProviderState,
 }
@@ -68,7 +67,6 @@ impl Display for Error {
             GetEndpointDescriptor(ep_idx) => {
                 write!(f, "failed to get endpoint descriptor for ep: {}", ep_idx)
             }
-            GetRequestSetupType => write!(f, "failed to get request setup"),
             BadXhciTransferState => write!(f, "xhci transfer is in a bad state"),
             BadBackendProviderState => write!(f, "backend provider is in a bad state"),
         }
diff --git a/devices/src/usb/host_backend/host_device.rs b/devices/src/usb/host_backend/host_device.rs
index 6e0b684..c3b8d90 100644
--- a/devices/src/usb/host_backend/host_device.rs
+++ b/devices/src/usb/host_backend/host_device.rs
@@ -53,7 +53,7 @@ impl HostToDeviceControlRequest {
     pub fn analyze_request_setup(
         request_setup: &UsbRequestSetup,
     ) -> Result<HostToDeviceControlRequest> {
-        match request_setup.get_type().ok_or(Error::GetRequestSetupType)? {
+        match request_setup.get_type() {
             ControlRequestType::Standard => {}
             _ => return Ok(HostToDeviceControlRequest::Other),
         };
@@ -162,7 +162,7 @@ impl HostDevice {
 
         let direction = self.control_request_setup.get_direction();
 
-        let buffer = if direction == Some(ControlRequestDataPhaseTransferDirection::HostToDevice) {
+        let buffer = if direction == ControlRequestDataPhaseTransferDirection::HostToDevice {
             if let Some(buffer) = buffer {
                 buffer
                     .read(&mut control_transfer.buffer_mut().data_buffer)
@@ -191,7 +191,7 @@ impl HostDevice {
                 XhciTransferState::Completed => {
                     let status = t.status();
                     let actual_length = t.actual_length();
-                    if direction == Some(ControlRequestDataPhaseTransferDirection::DeviceToHost) {
+                    if direction == ControlRequestDataPhaseTransferDirection::DeviceToHost {
                         if let Some(buffer) = &buffer {
                             buffer
                                 .write(&t.buffer().data_buffer)
@@ -270,7 +270,7 @@ impl HostDevice {
                 }
                 let buffer = self.buffer.take();
                 match self.control_request_setup.get_direction() {
-                    Some(ControlRequestDataPhaseTransferDirection::HostToDevice) => {
+                    ControlRequestDataPhaseTransferDirection::HostToDevice => {
                         match HostToDeviceControlRequest::analyze_request_setup(
                             &self.control_request_setup,
                         )? {
@@ -308,10 +308,9 @@ impl HostDevice {
                             }
                         };
                     }
-                    Some(ControlRequestDataPhaseTransferDirection::DeviceToHost) => {
+                    ControlRequestDataPhaseTransferDirection::DeviceToHost => {
                         self.execute_control_transfer(xhci_transfer, buffer)?;
                     }
-                    None => error!("Unknown transfer direction!"),
                 }
 
                 self.ctl_ep_state = ControlEndpointState::SetupStage;
diff --git a/usb_util/src/types.rs b/usb_util/src/types.rs
index 0c7250d..eaebc70 100644
--- a/usb_util/src/types.rs
+++ b/usb_util/src/types.rs
@@ -142,31 +142,29 @@ impl UsbRequestSetup {
     }
 
     /// Get type of request.
-    pub fn get_type(&self) -> Option<ControlRequestType> {
+    pub fn get_type(&self) -> ControlRequestType {
         let ty = (self.request_type & CONTROL_REQUEST_TYPE) >> CONTROL_REQUEST_TYPE_OFFSET;
         match ty {
-            0 => Some(ControlRequestType::Standard),
-            1 => Some(ControlRequestType::Class),
-            2 => Some(ControlRequestType::Vendor),
-            3 => Some(ControlRequestType::Reserved),
-            _ => None,
+            0 => ControlRequestType::Standard,
+            1 => ControlRequestType::Class,
+            2 => ControlRequestType::Vendor,
+            _ => ControlRequestType::Reserved,
         }
     }
 
     /// Get request direction.
-    pub fn get_direction(&self) -> Option<ControlRequestDataPhaseTransferDirection> {
+    pub fn get_direction(&self) -> ControlRequestDataPhaseTransferDirection {
         let dir = (self.request_type & DATA_PHASE_DIRECTION) >> DATA_PHASE_DIRECTION_OFFSET;
         match dir {
-            0 => Some(ControlRequestDataPhaseTransferDirection::HostToDevice),
-            1 => Some(ControlRequestDataPhaseTransferDirection::DeviceToHost),
-            _ => None,
+            0 => ControlRequestDataPhaseTransferDirection::HostToDevice,
+            _ => ControlRequestDataPhaseTransferDirection::DeviceToHost,
         }
     }
 
     /// Get recipient of this control transfer.
     pub fn get_recipient(&self) -> ControlRequestRecipient {
-        let recipienet = self.request_type & REQUEST_RECIPIENT_TYPE;
-        match recipienet {
+        let recipient = self.request_type & REQUEST_RECIPIENT_TYPE;
+        match recipient {
             0 => ControlRequestRecipient::Device,
             1 => ControlRequestRecipient::Interface,
             2 => ControlRequestRecipient::Endpoint,