All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukasz Majewski <lukma@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [U-Boot PATCH V2 1/9] usb: ums: split macro and data struct in storage_common.c
Date: Wed, 19 Apr 2017 17:19:30 +0200	[thread overview]
Message-ID: <20170419171930.52fc52d2@jawa> (raw)
In-Reply-To: <20170416155414.14746-2-eddie.cai.linux@gmail.com>

Hi Eddie,

Sorry for late reply - the Easter break.


I would prefer to keep things as they are now.

The reason is that f_mass_storage gadget in Linux has the same file
structure as u-boot -
e.g. ./drivers/usb/gadget/function/storage_common.c in Linux tree.

It would be easier then to update the u-boot to Linux code if needed
(or ported to DM).

Best regards,
Łukasz Majewski

> split the macro and data struct in storage_common.c to
> f_mass_storage.h
> 
> Signed-off-by: Eddie Cai <eddie.cai.linux@gmail.com>
> ---
>  drivers/usb/gadget/storage_common.c | 380
> +---------------------------------
> include/f_mass_storage.h            | 393
> ++++++++++++++++++++++++++++++++++++ 2 files changed, 394
> insertions(+), 379 deletions(-) create mode 100644
> include/f_mass_storage.h
> 
> diff --git a/drivers/usb/gadget/storage_common.c
> b/drivers/usb/gadget/storage_common.c index b6df130..bea7607 100644
> --- a/drivers/usb/gadget/storage_common.c
> +++ b/drivers/usb/gadget/storage_common.c
> @@ -14,385 +14,7 @@
>   * SPDX-License-Identifier:	GPL-2.0+
>   */
>  
> -
> -/*
> - * This file requires the following identifiers used in USB strings
> to
> - * be defined (each of type pointer to char):
> - *  - fsg_string_manufacturer -- name of the manufacturer
> - *  - fsg_string_product      -- name of the product
> - *  - fsg_string_serial       -- product's serial
> - *  - fsg_string_config       -- name of the configuration
> - *  - fsg_string_interface    -- name of the interface
> - * The first four are only needed when FSG_DESCRIPTORS_DEVICE_STRINGS
> - * macro is defined prior to including this file.
> - */
> -
> -/*
> - * When FSG_NO_INTR_EP is defined fsg_fs_intr_in_desc and
> - * fsg_hs_intr_in_desc objects as well as
> - * FSG_FS_FUNCTION_PRE_EP_ENTRIES and FSG_HS_FUNCTION_PRE_EP_ENTRIES
> - * macros are not defined.
> - *
> - * When FSG_NO_DEVICE_STRINGS is defined FSG_STRING_MANUFACTURER,
> - * FSG_STRING_PRODUCT, FSG_STRING_SERIAL and FSG_STRING_CONFIG are
> not
> - * defined (as well as corresponding entries in string tables are
> - * missing) and FSG_STRING_INTERFACE has value of zero.
> - *
> - * When FSG_NO_OTG is defined fsg_otg_desc won't be defined.
> - */
> -
> -/*
> - * When FSG_BUFFHD_STATIC_BUFFER is defined when this file is
> included
> - * the fsg_buffhd structure's buf field will be an array of
> FSG_BUFLEN
> - * characters rather then a pointer to void.
> - */
> -
> -
> -/* #include <asm/unaligned.h> */
> -
> -
> -/*
> - * Thanks to NetChip Technologies for donating this product ID.
> - *
> - * DO NOT REUSE THESE IDs with any other driver!!  Ever!!
> - * Instead:  allocate your own, using normal USB-IF procedures.
> - */
> -#define FSG_VENDOR_ID	0x0525	/* NetChip */
> -#define FSG_PRODUCT_ID	0xa4a5	/* Linux-USB File-backed
> Storage Gadget */ -
> -/*-------------------------------------------------------------------------*/
> -
> -#ifndef DEBUG
> -#undef VERBOSE_DEBUG
> -#undef DUMP_MSGS
> -#endif /* !DEBUG */
> -
> -#ifdef VERBOSE_DEBUG
> -#define VLDBG	LDBG
> -#else
> -#define VLDBG(lun, fmt, args...) do { } while (0)
> -#endif /* VERBOSE_DEBUG */
> -
> -/*
> -#define LDBG(lun, fmt, args...)   dev_dbg (&(lun)->dev, fmt, ## args)
> -#define LERROR(lun, fmt, args...) dev_err (&(lun)->dev, fmt, ## args)
> -#define LWARN(lun, fmt, args...)  dev_warn(&(lun)->dev, fmt, ## args)
> -#define LINFO(lun, fmt, args...)  dev_info(&(lun)->dev, fmt, ## args)
> -*/
> -
> -#define LDBG(lun, fmt, args...) do { } while (0)
> -#define LERROR(lun, fmt, args...) do { } while (0)
> -#define LWARN(lun, fmt, args...) do { } while (0)
> -#define LINFO(lun, fmt, args...) do { } while (0)
> -
> -/*
> - * Keep those macros in sync with those in
> - * include/linux/usb/composite.h or else GCC will complain.  If they
> - * are identical (the same names of arguments, white spaces in the
> - * same places) GCC will allow redefinition otherwise (even if some
> - * white space is removed or added) warning will be issued.
> - *
> - * Those macros are needed here because File Storage Gadget does not
> - * include the composite.h header.  For composite gadgets those
> macros
> - * are redundant since composite.h is included any way.
> - *
> - * One could check whether those macros are already defined (which
> - * would indicate composite.h had been included) or not (which would
> - * indicate we were in FSG) but this is not done because a warning is
> - * desired if definitions here differ from the ones in composite.h.
> - *
> - * We want the definitions to match and be the same in File Storage
> - * Gadget as well as Mass Storage Function (and so composite gadgets
> - * using MSF).  If someone changes them in composite.h it will
> produce
> - * a warning in this file when building MSF.
> - */
> -
> -#define DBG(d, fmt, args...)     debug(fmt , ## args)
> -#define VDBG(d, fmt, args...)    debug(fmt , ## args)
> -/* #define ERROR(d, fmt, args...)   printf(fmt , ## args) */
> -/* #define WARNING(d, fmt, args...) printf(fmt , ## args) */
> -/* #define INFO(d, fmt, args...)    printf(fmt , ## args) */
> -
> -/* #define DBG(d, fmt, args...)     do { } while (0) */
> -/* #define VDBG(d, fmt, args...)    do { } while (0) */
> -#define ERROR(d, fmt, args...)   do { } while (0)
> -#define WARNING(d, fmt, args...) do { } while (0)
> -#define INFO(d, fmt, args...)    do { } while (0)
> -
> -#ifdef DUMP_MSGS
> -
> -/* dump_msg(fsg, const char * label, const u8 * buf, unsigned
> length); */ -# define dump_msg(fsg, label, buf, length) do
> {                         \
> -	if (length < 512)
> {						\
> -		DBG(fsg, "%s, length %u:\n", label,
> length);		\
> -		print_hex_dump(KERN_DEBUG, "",
> DUMP_PREFIX_OFFSET,	\
> -			       16, 1, buf, length,
> 0);			\
> -	}
> \ -} while (0)
> -
> -#  define dump_cdb(fsg) do { } while (0)
> -
> -#else
> -
> -#  define dump_msg(fsg, /* const char * */ label, \
> -		   /* const u8 * */ buf, /* unsigned */ length) do
> { } while (0) -
> -#  ifdef VERBOSE_DEBUG
> -
> -#    define
> dump_cdb(fsg)						\
> -	print_hex_dump(KERN_DEBUG, "SCSI CDB: ",
> DUMP_PREFIX_NONE,	\
> -		       16, 1, (fsg)->cmnd, (fsg)->cmnd_size,
> 0)		\ -
> -#  else
> -
> -#    define dump_cdb(fsg) do { } while (0)
> -
> -#  endif /* VERBOSE_DEBUG */
> -
> -#endif /* DUMP_MSGS */
> -
> -/*-------------------------------------------------------------------------*/
> -
> -/* SCSI device types */
> -#define TYPE_DISK	0x00
> -#define TYPE_CDROM	0x05
> -
> -/* USB protocol value = the transport method */
> -#define USB_PR_CBI	0x00		/*
> Control/Bulk/Interrupt */ -#define USB_PR_CB
> 0x01		/* Control/Bulk w/o interrupt */ -#define
> USB_PR_BULK	0x50		/* Bulk-only */ -
> -/* USB subclass value = the protocol encapsulation */
> -#define USB_SC_RBC	0x01		/* Reduced Block
> Commands (flash) */ -#define USB_SC_8020
> 0x02		/* SFF-8020i, MMC-2, ATAPI (CD-ROM) */ -#define
> USB_SC_QIC	0x03		/* QIC-157 (tape) */ -#define
> USB_SC_UFI	0x04		/* UFI (floppy) */ -#define
> USB_SC_8070	0x05		/* SFF-8070i (removable) */
> -#define USB_SC_SCSI	0x06		/* Transparent SCSI
> */ - -/* Bulk-only data structures */
> -
> -/* Command Block Wrapper */
> -struct fsg_bulk_cb_wrap {
> -	__le32	Signature;		/* Contains 'USBC' */
> -	u32	Tag;			/* Unique per command
> id */
> -	__le32	DataTransferLength;	/* Size of the data
> */
> -	u8	Flags;			/* Direction in bit
> 7 */
> -	u8	Lun;			/* LUN (normally 0) */
> -	u8	Length;			/* Of the CDB, <=
> MAX_COMMAND_SIZE */
> -	u8	CDB[16];		/* Command Data Block */
> -};
> -
> -#define USB_BULK_CB_WRAP_LEN	31
> -#define USB_BULK_CB_SIG		0x43425355	/* Spells
> out USBC */ -#define USB_BULK_IN_FLAG	0x80
> -
> -/* Command Status Wrapper */
> -struct bulk_cs_wrap {
> -	__le32	Signature;		/* Should = 'USBS' */
> -	u32	Tag;			/* Same as original
> command */
> -	__le32	Residue;		/* Amount not
> transferred */
> -	u8	Status;			/* See below */
> -};
> -
> -#define USB_BULK_CS_WRAP_LEN	13
> -#define USB_BULK_CS_SIG		0x53425355	/* Spells
> out 'USBS' */ -#define USB_STATUS_PASS		0
> -#define USB_STATUS_FAIL		1
> -#define USB_STATUS_PHASE_ERROR	2
> -
> -/* Bulk-only class specific requests */
> -#define USB_BULK_RESET_REQUEST		0xff
> -#define USB_BULK_GET_MAX_LUN_REQUEST	0xfe
> -
> -/* CBI Interrupt data structure */
> -struct interrupt_data {
> -	u8	bType;
> -	u8	bValue;
> -};
> -
> -#define CBI_INTERRUPT_DATA_LEN		2
> -
> -/* CBI Accept Device-Specific Command request */
> -#define USB_CBI_ADSC_REQUEST		0x00
> -
> -/* Length of a SCSI Command Data Block */
> -#define MAX_COMMAND_SIZE	16
> -
> -/* SCSI commands that we recognize */
> -#define SC_FORMAT_UNIT			0x04
> -#define SC_INQUIRY			0x12
> -#define SC_MODE_SELECT_6		0x15
> -#define SC_MODE_SELECT_10		0x55
> -#define SC_MODE_SENSE_6			0x1a
> -#define SC_MODE_SENSE_10		0x5a
> -#define SC_PREVENT_ALLOW_MEDIUM_REMOVAL	0x1e
> -#define SC_READ_6			0x08
> -#define SC_READ_10			0x28
> -#define SC_READ_12			0xa8
> -#define SC_READ_CAPACITY		0x25
> -#define SC_READ_FORMAT_CAPACITIES	0x23
> -#define SC_READ_HEADER			0x44
> -#define SC_READ_TOC			0x43
> -#define SC_RELEASE			0x17
> -#define SC_REQUEST_SENSE		0x03
> -#define SC_RESERVE			0x16
> -#define SC_SEND_DIAGNOSTIC		0x1d
> -#define SC_START_STOP_UNIT		0x1b
> -#define SC_SYNCHRONIZE_CACHE		0x35
> -#define SC_TEST_UNIT_READY		0x00
> -#define SC_VERIFY			0x2f
> -#define SC_WRITE_6			0x0a
> -#define SC_WRITE_10			0x2a
> -#define SC_WRITE_12			0xaa
> -
> -/* SCSI Sense Key/Additional Sense Code/ASC Qualifier values */
> -#define SS_NO_SENSE				0
> -#define SS_COMMUNICATION_FAILURE		0x040800
> -#define SS_INVALID_COMMAND			0x052000
> -#define SS_INVALID_FIELD_IN_CDB			0x052400
> -#define SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE	0x052100
> -#define SS_LOGICAL_UNIT_NOT_SUPPORTED		0x052500
> -#define SS_MEDIUM_NOT_PRESENT			0x023a00
> -#define SS_MEDIUM_REMOVAL_PREVENTED		0x055302
> -#define SS_NOT_READY_TO_READY_TRANSITION	0x062800
> -#define SS_RESET_OCCURRED			0x062900
> -#define SS_SAVING_PARAMETERS_NOT_SUPPORTED	0x053900
> -#define SS_UNRECOVERED_READ_ERROR		0x031100
> -#define SS_WRITE_ERROR				0x030c02
> -#define SS_WRITE_PROTECTED			0x072700
> -
> -#define SK(x)		((u8) ((x) >> 16))	/* Sense Key
> byte, etc. */ -#define ASC(x)		((u8) ((x) >> 8))
> -#define ASCQ(x)		((u8) (x))
> -
> -struct device_attribute { int i; };
> -#define ETOOSMALL	525
> -
> -#include <usb_mass_storage.h>
> -
> -/*-------------------------------------------------------------------------*/
> -
> -struct fsg_lun {
> -	loff_t		file_length;
> -	loff_t		num_sectors;
> -
> -	unsigned int	initially_ro:1;
> -	unsigned int	ro:1;
> -	unsigned int	removable:1;
> -	unsigned int	cdrom:1;
> -	unsigned int	prevent_medium_removal:1;
> -	unsigned int	registered:1;
> -	unsigned int	info_valid:1;
> -	unsigned int	nofua:1;
> -
> -	u32		sense_data;
> -	u32		sense_data_info;
> -	u32		unit_attention_data;
> -
> -	struct device	dev;
> -};
> -
> -#define fsg_lun_is_open(curlun)	((curlun)->filp != NULL)
> -#if 0
> -static struct fsg_lun *fsg_lun_from_dev(struct device *dev)
> -{
> -	return container_of(dev, struct fsg_lun, dev);
> -}
> -#endif
> -
> -/* Big enough to hold our biggest descriptor */
> -#define EP0_BUFSIZE	256
> -#define DELAYED_STATUS	(EP0_BUFSIZE + 999)	/* An
> impossibly large value */ -
> -/* Number of buffers we will use.  2 is enough for double-buffering
> */ -#define FSG_NUM_BUFFERS	2
> -
> -/* Default size of buffer length. */
> -#define FSG_BUFLEN	((u32)16384)
> -
> -/* Maximal number of LUNs supported in mass storage function */
> -#define FSG_MAX_LUNS	8
> -
> -enum fsg_buffer_state {
> -	BUF_STATE_EMPTY = 0,
> -	BUF_STATE_FULL,
> -	BUF_STATE_BUSY
> -};
> -
> -struct fsg_buffhd {
> -#ifdef FSG_BUFFHD_STATIC_BUFFER
> -	char				buf[FSG_BUFLEN];
> -#else
> -	void				*buf;
> -#endif
> -	enum fsg_buffer_state		state;
> -	struct fsg_buffhd		*next;
> -
> -	/*
> -	 * The NetChip 2280 is faster, and handles some protocol
> faults
> -	 * better, if we don't submit any short bulk-out read
> requests.
> -	 * So we will record the intended request length here.
> -	 */
> -	unsigned int			bulk_out_intended_length;
> -
> -	struct usb_request		*inreq;
> -	int				inreq_busy;
> -	struct usb_request		*outreq;
> -	int				outreq_busy;
> -};
> -
> -enum fsg_state {
> -	/* This one isn't used anywhere */
> -	FSG_STATE_COMMAND_PHASE = -10,
> -	FSG_STATE_DATA_PHASE,
> -	FSG_STATE_STATUS_PHASE,
> -
> -	FSG_STATE_IDLE = 0,
> -	FSG_STATE_ABORT_BULK_OUT,
> -	FSG_STATE_RESET,
> -	FSG_STATE_INTERFACE_CHANGE,
> -	FSG_STATE_CONFIG_CHANGE,
> -	FSG_STATE_DISCONNECT,
> -	FSG_STATE_EXIT,
> -	FSG_STATE_TERMINATED
> -};
> -
> -enum data_direction {
> -	DATA_DIR_UNKNOWN = 0,
> -	DATA_DIR_FROM_HOST,
> -	DATA_DIR_TO_HOST,
> -	DATA_DIR_NONE
> -};
> -
> -/*-------------------------------------------------------------------------*/
> -
> -static inline u32 get_unaligned_be24(u8 *buf)
> -{
> -	return 0xffffff & (u32) get_unaligned_be32(buf - 1);
> -}
> -
> -/*-------------------------------------------------------------------------*/
> -
> -enum {
> -#ifndef FSG_NO_DEVICE_STRINGS
> -	FSG_STRING_MANUFACTURER	= 1,
> -	FSG_STRING_PRODUCT,
> -	FSG_STRING_SERIAL,
> -	FSG_STRING_CONFIG,
> -#endif
> -	FSG_STRING_INTERFACE
> -};
> -
> -#ifndef FSG_NO_OTG
> -static struct usb_otg_descriptor
> -fsg_otg_desc = {
> -	.bLength =		sizeof fsg_otg_desc,
> -	.bDescriptorType =	USB_DT_OTG,
> -
> -	.bmAttributes =		USB_OTG_SRP,
> -};
> -#endif
> +#include <f_mass_storage.h>
>  
>  /* There is only one interface. */
>  
> diff --git a/include/f_mass_storage.h b/include/f_mass_storage.h
> new file mode 100644
> index 0000000..679f242
> --- /dev/null
> +++ b/include/f_mass_storage.h
> @@ -0,0 +1,393 @@
> +/*
> + * f_mass_storage.h -- Common definitions for mass storage
> functionality
> + *
> + * Copyright (C) 2003-2008 Alan Stern
> + * Copyeight (C) 2009 Samsung Electronics
> + * Author: Michal Nazarewicz (m.nazarewicz at samsung.com)
> + *
> + * Ported to u-boot:
> + * Andrzej Pietrasiewicz <andrzej.p@samsung.com>
> + *
> + * Code refactoring & cleanup:
> + * Łukasz Majewski <l.majewski@samsung.com>
> + * Eddie Cai <eddie.cai.linux@gmail.com>
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#ifndef __F_MASS_STORAGE_H_
> +#define __F_MASS_STORAGE_H_
> +#include <usb_mass_storage.h>
> +
> +/*
> + * This file requires the following identifiers used in USB strings
> to
> + * be defined (each of type pointer to char):
> + *  - fsg_string_manufacturer -- name of the manufacturer
> + *  - fsg_string_product      -- name of the product
> + *  - fsg_string_serial       -- product's serial
> + *  - fsg_string_config       -- name of the configuration
> + *  - fsg_string_interface    -- name of the interface
> + * The first four are only needed when FSG_DESCRIPTORS_DEVICE_STRINGS
> + * macro is defined prior to including this file.
> + */
> +
> +/*
> + * When FSG_NO_INTR_EP is defined fsg_fs_intr_in_desc and
> + * fsg_hs_intr_in_desc objects as well as
> + * FSG_FS_FUNCTION_PRE_EP_ENTRIES and FSG_HS_FUNCTION_PRE_EP_ENTRIES
> + * macros are not defined.
> + *
> + * When FSG_NO_DEVICE_STRINGS is defined FSG_STRING_MANUFACTURER,
> + * FSG_STRING_PRODUCT, FSG_STRING_SERIAL and FSG_STRING_CONFIG are
> not
> + * defined (as well as corresponding entries in string tables are
> + * missing) and FSG_STRING_INTERFACE has value of zero.
> + *
> + * When FSG_NO_OTG is defined fsg_otg_desc won't be defined.
> + */
> +
> +/*
> + * When FSG_BUFFHD_STATIC_BUFFER is defined when this file is
> included
> + * the fsg_buffhd structure's buf field will be an array of
> FSG_BUFLEN
> + * characters rather then a pointer to void.
> + */
> +
> +
> +/* #include <asm/unaligned.h> */
> +
> +
> +/*
> + * Thanks to NetChip Technologies for donating this product ID.
> + *
> + * DO NOT REUSE THESE IDs with any other driver!!  Ever!!
> + * Instead:  allocate your own, using normal USB-IF procedures.
> + */
> +#define FSG_VENDOR_ID	0x0525	/* NetChip */
> +#define FSG_PRODUCT_ID	0xa4a5	/* Linux-USB File-backed
> Storage Gadget */ +
> +/*-------------------------------------------------------------------------*/
> +
> +#ifndef DEBUG
> +#undef VERBOSE_DEBUG
> +#undef DUMP_MSGS
> +#endif /* !DEBUG */
> +
> +#ifdef VERBOSE_DEBUG
> +#define VLDBG	LDBG
> +#else
> +#define VLDBG(lun, fmt, args...) do { } while (0)
> +#endif /* VERBOSE_DEBUG */
> +
> +/*
> +#define LDBG(lun, fmt, args...)   dev_dbg (&(lun)->dev, fmt, ## args)
> +#define LERROR(lun, fmt, args...) dev_err (&(lun)->dev, fmt, ## args)
> +#define LWARN(lun, fmt, args...)  dev_warn(&(lun)->dev, fmt, ## args)
> +#define LINFO(lun, fmt, args...)  dev_info(&(lun)->dev, fmt, ## args)
> +*/
> +
> +#define LDBG(lun, fmt, args...) do { } while (0)
> +#define LERROR(lun, fmt, args...) do { } while (0)
> +#define LWARN(lun, fmt, args...) do { } while (0)
> +#define LINFO(lun, fmt, args...) do { } while (0)
> +
> +/*
> + * Keep those macros in sync with those in
> + * include/linux/usb/composite.h or else GCC will complain.  If they
> + * are identical (the same names of arguments, white spaces in the
> + * same places) GCC will allow redefinition otherwise (even if some
> + * white space is removed or added) warning will be issued.
> + *
> + * Those macros are needed here because File Storage Gadget does not
> + * include the composite.h header.  For composite gadgets those
> macros
> + * are redundant since composite.h is included any way.
> + *
> + * One could check whether those macros are already defined (which
> + * would indicate composite.h had been included) or not (which would
> + * indicate we were in FSG) but this is not done because a warning is
> + * desired if definitions here differ from the ones in composite.h.
> + *
> + * We want the definitions to match and be the same in File Storage
> + * Gadget as well as Mass Storage Function (and so composite gadgets
> + * using MSF).  If someone changes them in composite.h it will
> produce
> + * a warning in this file when building MSF.
> + */
> +
> +#define DBG(d, fmt, args...)     debug(fmt , ## args)
> +#define VDBG(d, fmt, args...)    debug(fmt , ## args)
> +/* #define ERROR(d, fmt, args...)   printf(fmt , ## args) */
> +/* #define WARNING(d, fmt, args...) printf(fmt , ## args) */
> +/* #define INFO(d, fmt, args...)    printf(fmt , ## args) */
> +
> +/* #define DBG(d, fmt, args...)     do { } while (0) */
> +/* #define VDBG(d, fmt, args...)    do { } while (0) */
> +#define ERROR(d, fmt, args...)   do { } while (0)
> +#define WARNING(d, fmt, args...) do { } while (0)
> +#define INFO(d, fmt, args...)    do { } while (0)
> +
> +#ifdef DUMP_MSGS
> +
> +/* dump_msg(fsg, const char * label, const u8 * buf, unsigned
> length); */ +# define dump_msg(fsg, label, buf, length) do
> {                         \
> +	if (length < 512)
> {						\
> +		DBG(fsg, "%s, length %u:\n", label,
> length);		\
> +		print_hex_dump(KERN_DEBUG, "",
> DUMP_PREFIX_OFFSET,	\
> +			       16, 1, buf, length,
> 0);			\
> +	}
> \ +} while (0)
> +
> +#  define dump_cdb(fsg) do { } while (0)
> +
> +#else
> +
> +#  define dump_msg(fsg, /* const char * */ label, \
> +		   /* const u8 * */ buf, /* unsigned */ length) do
> { } while (0) +
> +#  ifdef VERBOSE_DEBUG
> +
> +#    define
> dump_cdb(fsg)						\
> +	print_hex_dump(KERN_DEBUG, "SCSI CDB: ",
> DUMP_PREFIX_NONE,	\
> +		       16, 1, (fsg)->cmnd, (fsg)->cmnd_size,
> 0)		\ +
> +#  else
> +
> +#    define dump_cdb(fsg) do { } while (0)
> +
> +#  endif /* VERBOSE_DEBUG */
> +
> +#endif /* DUMP_MSGS */
> +
> +/*-------------------------------------------------------------------------*/
> +
> +/* SCSI device types */
> +#define TYPE_DISK	0x00
> +#define TYPE_CDROM	0x05
> +
> +/* USB protocol value = the transport method */
> +#define USB_PR_CBI	0x00		/*
> Control/Bulk/Interrupt */ +#define USB_PR_CB
> 0x01		/* Control/Bulk w/o interrupt */ +#define
> USB_PR_BULK	0x50		/* Bulk-only */ +
> +/* USB subclass value = the protocol encapsulation */
> +#define USB_SC_RBC	0x01		/* Reduced Block
> Commands (flash) */ +#define USB_SC_8020
> 0x02		/* SFF-8020i, MMC-2, ATAPI (CD-ROM) */ +#define
> USB_SC_QIC	0x03		/* QIC-157 (tape) */ +#define
> USB_SC_UFI	0x04		/* UFI (floppy) */ +#define
> USB_SC_8070	0x05		/* SFF-8070i (removable) */
> +#define USB_SC_SCSI	0x06		/* Transparent SCSI
> */ + +/* Bulk-only data structures */
> +
> +/* Command Block Wrapper */
> +struct fsg_bulk_cb_wrap {
> +	__le32	Signature;		/* Contains 'USBC' */
> +	u32	Tag;			/* Unique per command
> id */
> +	__le32	DataTransferLength;	/* Size of the data
> */
> +	u8	Flags;			/* Direction in bit
> 7 */
> +	u8	Lun;			/* LUN (normally 0) */
> +	u8	Length;			/* Of the CDB, <=
> MAX_COMMAND_SIZE */
> +	u8	CDB[16];		/* Command Data Block */
> +};
> +
> +#define USB_BULK_CB_WRAP_LEN	31
> +#define USB_BULK_CB_SIG		0x43425355	/* Spells
> out USBC */ +#define USB_BULK_IN_FLAG	0x80
> +
> +/* Command Status Wrapper */
> +struct bulk_cs_wrap {
> +	__le32	Signature;		/* Should = 'USBS' */
> +	u32	Tag;			/* Same as original
> command */
> +	__le32	Residue;		/* Amount not
> transferred */
> +	u8	Status;			/* See below */
> +};
> +
> +#define USB_BULK_CS_WRAP_LEN	13
> +#define USB_BULK_CS_SIG		0x53425355	/* Spells
> out 'USBS' */ +#define USB_STATUS_PASS		0
> +#define USB_STATUS_FAIL		1
> +#define USB_STATUS_PHASE_ERROR	2
> +
> +/* Bulk-only class specific requests */
> +#define USB_BULK_RESET_REQUEST		0xff
> +#define USB_BULK_GET_MAX_LUN_REQUEST	0xfe
> +
> +/* CBI Interrupt data structure */
> +struct interrupt_data {
> +	u8	bType;
> +	u8	bValue;
> +};
> +
> +#define CBI_INTERRUPT_DATA_LEN		2
> +
> +/* CBI Accept Device-Specific Command request */
> +#define USB_CBI_ADSC_REQUEST		0x00
> +
> +/* Length of a SCSI Command Data Block */
> +#define MAX_COMMAND_SIZE	16
> +
> +/* SCSI commands that we recognize */
> +#define SC_FORMAT_UNIT			0x04
> +#define SC_INQUIRY			0x12
> +#define SC_MODE_SELECT_6		0x15
> +#define SC_MODE_SELECT_10		0x55
> +#define SC_MODE_SENSE_6			0x1a
> +#define SC_MODE_SENSE_10		0x5a
> +#define SC_PREVENT_ALLOW_MEDIUM_REMOVAL	0x1e
> +#define SC_READ_6			0x08
> +#define SC_READ_10			0x28
> +#define SC_READ_12			0xa8
> +#define SC_READ_CAPACITY		0x25
> +#define SC_READ_FORMAT_CAPACITIES	0x23
> +#define SC_READ_HEADER			0x44
> +#define SC_READ_TOC			0x43
> +#define SC_RELEASE			0x17
> +#define SC_REQUEST_SENSE		0x03
> +#define SC_RESERVE			0x16
> +#define SC_SEND_DIAGNOSTIC		0x1d
> +#define SC_START_STOP_UNIT		0x1b
> +#define SC_SYNCHRONIZE_CACHE		0x35
> +#define SC_TEST_UNIT_READY		0x00
> +#define SC_VERIFY			0x2f
> +#define SC_WRITE_6			0x0a
> +#define SC_WRITE_10			0x2a
> +#define SC_WRITE_12			0xaa
> +
> +/* SCSI Sense Key/Additional Sense Code/ASC Qualifier values */
> +#define SS_NO_SENSE				0
> +#define SS_COMMUNICATION_FAILURE		0x040800
> +#define SS_INVALID_COMMAND			0x052000
> +#define SS_INVALID_FIELD_IN_CDB			0x052400
> +#define SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE	0x052100
> +#define SS_LOGICAL_UNIT_NOT_SUPPORTED		0x052500
> +#define SS_MEDIUM_NOT_PRESENT			0x023a00
> +#define SS_MEDIUM_REMOVAL_PREVENTED		0x055302
> +#define SS_NOT_READY_TO_READY_TRANSITION	0x062800
> +#define SS_RESET_OCCURRED			0x062900
> +#define SS_SAVING_PARAMETERS_NOT_SUPPORTED	0x053900
> +#define SS_UNRECOVERED_READ_ERROR		0x031100
> +#define SS_WRITE_ERROR				0x030c02
> +#define SS_WRITE_PROTECTED			0x072700
> +
> +#define SK(x)		((u8) ((x) >> 16))	/* Sense Key
> byte, etc. */ +#define ASC(x)		((u8) ((x) >> 8))
> +#define ASCQ(x)		((u8) (x))
> +
> +struct device_attribute { int i; };
> +#define ETOOSMALL	525
> +
> +
> +/*-------------------------------------------------------------------------*/
> +
> +struct fsg_lun {
> +	loff_t		file_length;
> +	loff_t		num_sectors;
> +
> +	unsigned int	initially_ro:1;
> +	unsigned int	ro:1;
> +	unsigned int	removable:1;
> +	unsigned int	cdrom:1;
> +	unsigned int	prevent_medium_removal:1;
> +	unsigned int	registered:1;
> +	unsigned int	info_valid:1;
> +	unsigned int	nofua:1;
> +
> +	u32		sense_data;
> +	u32		sense_data_info;
> +	u32		unit_attention_data;
> +
> +	struct device	dev;
> +};
> +
> +#define fsg_lun_is_open(curlun)	((curlun)->filp != NULL)
> +/* Big enough to hold our biggest descriptor */
> +#define EP0_BUFSIZE	256
> +#define DELAYED_STATUS	(EP0_BUFSIZE + 999)	/* An
> impossibly large value */ +
> +/* Number of buffers we will use.  2 is enough for double-buffering
> */ +#define FSG_NUM_BUFFERS	2
> +
> +/* Default size of buffer length. */
> +#define FSG_BUFLEN	((u32)16384)
> +
> +/* Maximal number of LUNs supported in mass storage function */
> +#define FSG_MAX_LUNS	8
> +
> +enum fsg_buffer_state {
> +	BUF_STATE_EMPTY = 0,
> +	BUF_STATE_FULL,
> +	BUF_STATE_BUSY
> +};
> +
> +struct fsg_buffhd {
> +#ifdef FSG_BUFFHD_STATIC_BUFFER
> +	char				buf[FSG_BUFLEN];
> +#else
> +	void				*buf;
> +#endif
> +	enum fsg_buffer_state		state;
> +	struct fsg_buffhd		*next;
> +
> +	/*
> +	 * The NetChip 2280 is faster, and handles some protocol
> faults
> +	 * better, if we don't submit any short bulk-out read
> requests.
> +	 * So we will record the intended request length here.
> +	 */
> +	unsigned int			bulk_out_intended_length;
> +
> +	struct usb_request		*inreq;
> +	int				inreq_busy;
> +	struct usb_request		*outreq;
> +	int				outreq_busy;
> +};
> +
> +enum fsg_state {
> +	/* This one isn't used anywhere */
> +	FSG_STATE_COMMAND_PHASE = -10,
> +	FSG_STATE_DATA_PHASE,
> +	FSG_STATE_STATUS_PHASE,
> +
> +	FSG_STATE_IDLE = 0,
> +	FSG_STATE_ABORT_BULK_OUT,
> +	FSG_STATE_RESET,
> +	FSG_STATE_INTERFACE_CHANGE,
> +	FSG_STATE_CONFIG_CHANGE,
> +	FSG_STATE_DISCONNECT,
> +	FSG_STATE_EXIT,
> +	FSG_STATE_TERMINATED
> +};
> +
> +enum data_direction {
> +	DATA_DIR_UNKNOWN = 0,
> +	DATA_DIR_FROM_HOST,
> +	DATA_DIR_TO_HOST,
> +	DATA_DIR_NONE
> +};
> +
> +/*-------------------------------------------------------------------------*/
> +
> +static inline u32 get_unaligned_be24(u8 *buf)
> +{
> +	return 0xffffff & (u32) get_unaligned_be32(buf - 1);
> +}
> +
> +/*-------------------------------------------------------------------------*/
> +
> +enum {
> +#ifndef FSG_NO_DEVICE_STRINGS
> +	FSG_STRING_MANUFACTURER	= 1,
> +	FSG_STRING_PRODUCT,
> +	FSG_STRING_SERIAL,
> +	FSG_STRING_CONFIG,
> +#endif
> +	FSG_STRING_INTERFACE
> +};
> +
> +#ifndef FSG_NO_OTG
> +static struct usb_otg_descriptor
> +fsg_otg_desc = {
> +	.bLength =		sizeof(fsg_otg_desc),
> +	.bDescriptorType =	USB_DT_OTG,
> +
> +	.bmAttributes =		USB_OTG_SRP,
> +};
> +#endif
> +
> +#endif /* __F_MASS_STORAGE_H_ */




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de

  reply	other threads:[~2017-04-19 15:19 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-16 15:54 [U-Boot] [U-Boot PATCH V2 0/9] introduce Rockchip rockusb Eddie Cai
2017-04-16 15:54 ` [U-Boot] [U-Boot PATCH V2 1/9] usb: ums: split macro and data struct in storage_common.c Eddie Cai
2017-04-19 15:19   ` Lukasz Majewski [this message]
2017-04-16 15:54 ` [U-Boot] [U-Boot PATCH V2 2/9] usb: ums: split macro and data struct in f_mass_storage.c Eddie Cai
2017-04-19 15:20   ` Lukasz Majewski
2017-04-16 15:54 ` [U-Boot] [U-Boot PATCH V2 3/9] usb: ums: merge storage_common.c into f_mass_storage.c Eddie Cai
2017-04-19 15:21   ` Lukasz Majewski
2017-04-16 15:54 ` [U-Boot] [U-Boot PATCH V2 4/9] usb: ums: remove static declaration of some ums functions Eddie Cai
2017-04-16 15:54 ` [U-Boot] [U-Boot PATCH V2 5/9] usb: ums: add functions to set and get usb interface descriptor Eddie Cai
2017-04-19 15:29   ` Lukasz Majewski
2017-04-20  0:55     ` Eddie Cai
2017-04-16 15:54 ` [U-Boot] [U-Boot PATCH V2 6/9] usb: ums: add do_extra_command Eddie Cai
2017-04-19 22:14   ` Lukasz Majewski
2017-04-20  1:03     ` Eddie Cai
2017-04-20  8:55       ` Lukasz Majewski
2017-04-20  9:14         ` Lukasz Majewski
2017-04-20  9:16           ` Eddie Cai
2017-04-16 15:54 ` [U-Boot] [U-Boot PATCH V2 7/9] cmd: add rockusb command Eddie Cai
2017-04-19 22:27   ` Lukasz Majewski
2017-04-20  1:15     ` Eddie Cai
2017-04-16 15:54 ` [U-Boot] [U-Boot PATCH V2 8/9] rockchip: config: enable rockusb support on rk3288 based board Eddie Cai
2017-04-19 22:29   ` Lukasz Majewski
2017-04-16 15:54 ` [U-Boot] [U-Boot PATCH V2 9/9] rockusb: add a simple readme Eddie Cai
2017-04-19 22:39   ` Lukasz Majewski
2017-04-20  1:43     ` Eddie Cai
2017-04-16 19:34 ` [U-Boot] [U-Boot PATCH V2 0/9] introduce Rockchip rockusb Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170419171930.52fc52d2@jawa \
    --to=lukma@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.