⛏️ index : haiku.git

/*
 * 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 USB_MASSBULK_CBW_SIGNATURE				0x43425355
#define USB_MASSBULK_CBW_DATA_OUTPUT			0x00
#define USB_MASSBULK_CBW_DATA_INPUT				0x80

#define USB_MASSBULK_CSW_SIGNATURE				0x53425355
#define USB_MASSBULK_CSW_STATUS_COMMAND_PASSED	0x00
#define USB_MASSBULK_CSW_STATUS_COMMAND_FAILED	0x01
#define USB_MASSBULK_CSW_STATUS_PHASE_ERROR		0x02

#define USB_MASSBULK_REQUEST_MASS_STORAGE_RESET	0xff
#define USB_MASSBULK_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 usb_massbulk_command_block_wrapper;


typedef struct {
	uint32		signature;
	uint32		tag;
	uint32		data_residue;
	uint8		status;
} _PACKED usb_massbulk_command_status_wrapper;


#endif