From d9ecf5f373dab3ddaf7579c0b725705c7178d4b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Thu, 31 Jul 2014 22:43:48 +0200 Subject: [PATCH] usb_disk: extract specs into a public header. --- headers/os/drivers/usb/USB_massbulk.h | 48 +++++++++++++++++++ .../drivers/disk/usb/usb_disk/usb_disk.cpp | 2 +- .../drivers/disk/usb/usb_disk/usb_disk.h | 33 ++----------- 3 files changed, 52 insertions(+), 31 deletions(-) create mode 100644 headers/os/drivers/usb/USB_massbulk.h diff --git a/headers/os/drivers/usb/USB_massbulk.h b/headers/os/drivers/usb/USB_massbulk.h new file mode 100644 index 0000000000..e16632afc6 --- /dev/null +++ b/headers/os/drivers/usb/USB_massbulk.h @@ -0,0 +1,48 @@ +/* + * Copyright 2014, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT License. + */ +#ifndef _USB_MSC_H +#define _USB_MSC_H + + +// (Partial) USB Class Definitions for Mass Storage Devices (MSC), version 1.0 +// Reference: http://www.usb.org/developers/devclass_docs/usbmassbulk_10.pdf + + +#define USB_MASS_STORAGE_DEVICE_CLASS 0x08 + +#define CBW_SIGNATURE 0x43425355 +#define CBW_DATA_OUTPUT 0x00 +#define CBW_DATA_INPUT 0x80 + +#define CSW_SIGNATURE 0x53425355 +#define CSW_STATUS_COMMAND_PASSED 0x00 +#define CSW_STATUS_COMMAND_FAILED 0x01 +#define CSW_STATUS_PHASE_ERROR 0x02 + +#define REQUEST_MASS_STORAGE_RESET 0xff +#define REQUEST_GET_MAX_LUN 0xfe + + +typedef struct { + uint32 signature; + uint32 tag; + uint32 data_transfer_length; + uint8 flags; + uint8 lun; + uint8 command_block_length; + uint8 command_block[16]; +} _PACKED command_block_wrapper; + + +typedef struct { + uint32 signature; + uint32 tag; + uint32 data_residue; + uint8 status; +} _PACKED command_status_wrapper; + + +#endif + diff --git a/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp b/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp index 0c0a7e4206..d5613d1093 100644 --- a/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp +++ b/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.cpp @@ -709,7 +709,7 @@ usb_disk_device_added(usb_device newDevice, void **cookie) if (interface == NULL) continue; - if (interface->descr->interface_class == 0x08 /* mass storage */ + if (interface->descr->interface_class == USB_MASS_STORAGE_DEVICE_CLASS && (interface->descr->interface_subclass == 0x06 /* SCSI */ || interface->descr->interface_subclass == 0x02 /* ATAPI */ || interface->descr->interface_subclass == 0x05 /* ATAPI */) diff --git a/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.h b/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.h index 143a535d68..85b2bf9878 100644 --- a/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.h +++ b/src/add-ons/kernel/drivers/disk/usb/usb_disk/usb_disk.h @@ -5,27 +5,18 @@ * Authors: * Michael Lotz */ - #ifndef _USB_DISK_H_ #define _USB_DISK_H_ + #include #include +#include + -#define REQUEST_MASS_STORAGE_RESET 0xff -#define REQUEST_GET_MAX_LUN 0xfe #define MAX_LOGICAL_UNIT_NUMBER 15 #define ATAPI_COMMAND_LENGTH 12 -#define CBW_SIGNATURE 0x43425355 -#define CBW_DATA_OUTPUT 0x00 -#define CBW_DATA_INPUT 0x80 - -#define CSW_SIGNATURE 0x53425355 -#define CSW_STATUS_COMMAND_PASSED 0x00 -#define CSW_STATUS_COMMAND_FAILED 0x01 -#define CSW_STATUS_PHASE_ERROR 0x02 - #define SYNC_SUPPORT_RELOAD 5 typedef struct device_lun_s device_lun; @@ -81,22 +72,4 @@ struct device_lun_s { }; -typedef struct command_block_wrapper_s { - uint32 signature; - uint32 tag; - uint32 data_transfer_length; - uint8 flags; - uint8 lun; - uint8 command_block_length; - uint8 command_block[16]; -} _PACKED command_block_wrapper; - - -typedef struct command_status_wrapper_s { - uint32 signature; - uint32 tag; - uint32 data_residue; - uint8 status; -} _PACKED command_status_wrapper; - #endif // _USB_DISK_H_