diff options
Diffstat (limited to 'include/linux/usb')
| -rw-r--r-- | include/linux/usb/Kbuild | 10 | ||||
| -rw-r--r-- | include/linux/usb/audio.h | 524 | ||||
| -rw-r--r-- | include/linux/usb/cdc.h | 412 | ||||
| -rw-r--r-- | include/linux/usb/ch11.h | 266 | ||||
| -rw-r--r-- | include/linux/usb/ch9.h | 960 | ||||
| -rw-r--r-- | include/linux/usb/functionfs.h | 167 | ||||
| -rw-r--r-- | include/linux/usb/g_printer.h | 35 | ||||
| -rw-r--r-- | include/linux/usb/gadgetfs.h | 88 | ||||
| -rw-r--r-- | include/linux/usb/midi.h | 112 | ||||
| -rw-r--r-- | include/linux/usb/tmc.h | 43 | ||||
| -rw-r--r-- | include/linux/usb/video.h | 568 | 
11 files changed, 3 insertions, 3182 deletions
diff --git a/include/linux/usb/Kbuild b/include/linux/usb/Kbuild index b607f3532e8..e69de29bb2d 100644 --- a/include/linux/usb/Kbuild +++ b/include/linux/usb/Kbuild @@ -1,10 +0,0 @@ -header-y += audio.h -header-y += cdc.h -header-y += ch9.h -header-y += ch11.h -header-y += functionfs.h -header-y += gadgetfs.h -header-y += midi.h -header-y += g_printer.h -header-y += tmc.h -header-y += video.h diff --git a/include/linux/usb/audio.h b/include/linux/usb/audio.h index a54b8255d75..3d84619110a 100644 --- a/include/linux/usb/audio.h +++ b/include/linux/usb/audio.h @@ -17,531 +17,11 @@   * Types and defines in this file are either specific to version 1.0 of   * this standard or common for newer versions.   */ -  #ifndef __LINUX_USB_AUDIO_H  #define __LINUX_USB_AUDIO_H -#include <linux/types.h> - -/* bInterfaceProtocol values to denote the version of the standard used */ -#define UAC_VERSION_1			0x00 -#define UAC_VERSION_2			0x20 - -/* A.2 Audio Interface Subclass Codes */ -#define USB_SUBCLASS_AUDIOCONTROL	0x01 -#define USB_SUBCLASS_AUDIOSTREAMING	0x02 -#define USB_SUBCLASS_MIDISTREAMING	0x03 - -/* A.5 Audio Class-Specific AC Interface Descriptor Subtypes */ -#define UAC_HEADER			0x01 -#define UAC_INPUT_TERMINAL		0x02 -#define UAC_OUTPUT_TERMINAL		0x03 -#define UAC_MIXER_UNIT			0x04 -#define UAC_SELECTOR_UNIT		0x05 -#define UAC_FEATURE_UNIT		0x06 -#define UAC1_PROCESSING_UNIT		0x07 -#define UAC1_EXTENSION_UNIT		0x08 - -/* A.6 Audio Class-Specific AS Interface Descriptor Subtypes */ -#define UAC_AS_GENERAL			0x01 -#define UAC_FORMAT_TYPE			0x02 -#define UAC_FORMAT_SPECIFIC		0x03 - -/* A.7 Processing Unit Process Types */ -#define UAC_PROCESS_UNDEFINED		0x00 -#define UAC_PROCESS_UP_DOWNMIX		0x01 -#define UAC_PROCESS_DOLBY_PROLOGIC	0x02 -#define UAC_PROCESS_STEREO_EXTENDER	0x03 -#define UAC_PROCESS_REVERB		0x04 -#define UAC_PROCESS_CHORUS		0x05 -#define UAC_PROCESS_DYN_RANGE_COMP	0x06 - -/* A.8 Audio Class-Specific Endpoint Descriptor Subtypes */ -#define UAC_EP_GENERAL			0x01 - -/* A.9 Audio Class-Specific Request Codes */ -#define UAC_SET_			0x00 -#define UAC_GET_			0x80 - -#define UAC__CUR			0x1 -#define UAC__MIN			0x2 -#define UAC__MAX			0x3 -#define UAC__RES			0x4 -#define UAC__MEM			0x5 - -#define UAC_SET_CUR			(UAC_SET_ | UAC__CUR) -#define UAC_GET_CUR			(UAC_GET_ | UAC__CUR) -#define UAC_SET_MIN			(UAC_SET_ | UAC__MIN) -#define UAC_GET_MIN			(UAC_GET_ | UAC__MIN) -#define UAC_SET_MAX			(UAC_SET_ | UAC__MAX) -#define UAC_GET_MAX			(UAC_GET_ | UAC__MAX) -#define UAC_SET_RES			(UAC_SET_ | UAC__RES) -#define UAC_GET_RES			(UAC_GET_ | UAC__RES) -#define UAC_SET_MEM			(UAC_SET_ | UAC__MEM) -#define UAC_GET_MEM			(UAC_GET_ | UAC__MEM) - -#define UAC_GET_STAT			0xff - -/* A.10 Control Selector Codes */ - -/* A.10.1 Terminal Control Selectors */ -#define UAC_TERM_COPY_PROTECT		0x01 - -/* A.10.2 Feature Unit Control Selectors */ -#define UAC_FU_MUTE			0x01 -#define UAC_FU_VOLUME			0x02 -#define UAC_FU_BASS			0x03 -#define UAC_FU_MID			0x04 -#define UAC_FU_TREBLE			0x05 -#define UAC_FU_GRAPHIC_EQUALIZER	0x06 -#define UAC_FU_AUTOMATIC_GAIN		0x07 -#define UAC_FU_DELAY			0x08 -#define UAC_FU_BASS_BOOST		0x09 -#define UAC_FU_LOUDNESS			0x0a - -#define UAC_CONTROL_BIT(CS)	(1 << ((CS) - 1)) - -/* A.10.3.1 Up/Down-mix Processing Unit Controls Selectors */ -#define UAC_UD_ENABLE			0x01 -#define UAC_UD_MODE_SELECT		0x02 - -/* A.10.3.2 Dolby Prologic (tm) Processing Unit Controls Selectors */ -#define UAC_DP_ENABLE			0x01 -#define UAC_DP_MODE_SELECT		0x02 - -/* A.10.3.3 3D Stereo Extender Processing Unit Control Selectors */ -#define UAC_3D_ENABLE			0x01 -#define UAC_3D_SPACE			0x02 - -/* A.10.3.4 Reverberation Processing Unit Control Selectors */ -#define UAC_REVERB_ENABLE		0x01 -#define UAC_REVERB_LEVEL		0x02 -#define UAC_REVERB_TIME			0x03 -#define UAC_REVERB_FEEDBACK		0x04 - -/* A.10.3.5 Chorus Processing Unit Control Selectors */ -#define UAC_CHORUS_ENABLE		0x01 -#define UAC_CHORUS_LEVEL		0x02 -#define UAC_CHORUS_RATE			0x03 -#define UAC_CHORUS_DEPTH		0x04 - -/* A.10.3.6 Dynamic Range Compressor Unit Control Selectors */ -#define UAC_DCR_ENABLE			0x01 -#define UAC_DCR_RATE			0x02 -#define UAC_DCR_MAXAMPL			0x03 -#define UAC_DCR_THRESHOLD		0x04 -#define UAC_DCR_ATTACK_TIME		0x05 -#define UAC_DCR_RELEASE_TIME		0x06 - -/* A.10.4 Extension Unit Control Selectors */ -#define UAC_XU_ENABLE			0x01 - -/* MIDI - A.1 MS Class-Specific Interface Descriptor Subtypes */ -#define UAC_MS_HEADER			0x01 -#define UAC_MIDI_IN_JACK		0x02 -#define UAC_MIDI_OUT_JACK		0x03 - -/* MIDI - A.1 MS Class-Specific Endpoint Descriptor Subtypes */ -#define UAC_MS_GENERAL			0x01 - -/* Terminals - 2.1 USB Terminal Types */ -#define UAC_TERMINAL_UNDEFINED		0x100 -#define UAC_TERMINAL_STREAMING		0x101 -#define UAC_TERMINAL_VENDOR_SPEC	0x1FF - -/* Terminal Control Selectors */ -/* 4.3.2  Class-Specific AC Interface Descriptor */ -struct uac1_ac_header_descriptor { -	__u8  bLength;			/* 8 + n */ -	__u8  bDescriptorType;		/* USB_DT_CS_INTERFACE */ -	__u8  bDescriptorSubtype;	/* UAC_MS_HEADER */ -	__le16 bcdADC;			/* 0x0100 */ -	__le16 wTotalLength;		/* includes Unit and Terminal desc. */ -	__u8  bInCollection;		/* n */ -	__u8  baInterfaceNr[];		/* [n] */ -} __attribute__ ((packed)); - -#define UAC_DT_AC_HEADER_SIZE(n)	(8 + (n)) - -/* As above, but more useful for defining your own descriptors: */ -#define DECLARE_UAC_AC_HEADER_DESCRIPTOR(n)			\ -struct uac1_ac_header_descriptor_##n {			\ -	__u8  bLength;						\ -	__u8  bDescriptorType;					\ -	__u8  bDescriptorSubtype;				\ -	__le16 bcdADC;						\ -	__le16 wTotalLength;					\ -	__u8  bInCollection;					\ -	__u8  baInterfaceNr[n];					\ -} __attribute__ ((packed)) - -/* 4.3.2.1 Input Terminal Descriptor */ -struct uac_input_terminal_descriptor { -	__u8  bLength;			/* in bytes: 12 */ -	__u8  bDescriptorType;		/* CS_INTERFACE descriptor type */ -	__u8  bDescriptorSubtype;	/* INPUT_TERMINAL descriptor subtype */ -	__u8  bTerminalID;		/* Constant uniquely terminal ID */ -	__le16 wTerminalType;		/* USB Audio Terminal Types */ -	__u8  bAssocTerminal;		/* ID of the Output Terminal associated */ -	__u8  bNrChannels;		/* Number of logical output channels */ -	__le16 wChannelConfig; -	__u8  iChannelNames; -	__u8  iTerminal; -} __attribute__ ((packed)); - -#define UAC_DT_INPUT_TERMINAL_SIZE			12 - -/* Terminals - 2.2 Input Terminal Types */ -#define UAC_INPUT_TERMINAL_UNDEFINED			0x200 -#define UAC_INPUT_TERMINAL_MICROPHONE			0x201 -#define UAC_INPUT_TERMINAL_DESKTOP_MICROPHONE		0x202 -#define UAC_INPUT_TERMINAL_PERSONAL_MICROPHONE		0x203 -#define UAC_INPUT_TERMINAL_OMNI_DIR_MICROPHONE		0x204 -#define UAC_INPUT_TERMINAL_MICROPHONE_ARRAY		0x205 -#define UAC_INPUT_TERMINAL_PROC_MICROPHONE_ARRAY	0x206 - -/* Terminals - control selectors */ - -#define UAC_TERMINAL_CS_COPY_PROTECT_CONTROL		0x01 - -/* 4.3.2.2 Output Terminal Descriptor */ -struct uac1_output_terminal_descriptor { -	__u8  bLength;			/* in bytes: 9 */ -	__u8  bDescriptorType;		/* CS_INTERFACE descriptor type */ -	__u8  bDescriptorSubtype;	/* OUTPUT_TERMINAL descriptor subtype */ -	__u8  bTerminalID;		/* Constant uniquely terminal ID */ -	__le16 wTerminalType;		/* USB Audio Terminal Types */ -	__u8  bAssocTerminal;		/* ID of the Input Terminal associated */ -	__u8  bSourceID;		/* ID of the connected Unit or Terminal*/ -	__u8  iTerminal; -} __attribute__ ((packed)); - -#define UAC_DT_OUTPUT_TERMINAL_SIZE			9 - -/* Terminals - 2.3 Output Terminal Types */ -#define UAC_OUTPUT_TERMINAL_UNDEFINED			0x300 -#define UAC_OUTPUT_TERMINAL_SPEAKER			0x301 -#define UAC_OUTPUT_TERMINAL_HEADPHONES			0x302 -#define UAC_OUTPUT_TERMINAL_HEAD_MOUNTED_DISPLAY_AUDIO	0x303 -#define UAC_OUTPUT_TERMINAL_DESKTOP_SPEAKER		0x304 -#define UAC_OUTPUT_TERMINAL_ROOM_SPEAKER		0x305 -#define UAC_OUTPUT_TERMINAL_COMMUNICATION_SPEAKER	0x306 -#define UAC_OUTPUT_TERMINAL_LOW_FREQ_EFFECTS_SPEAKER	0x307 - -/* Set bControlSize = 2 as default setting */ -#define UAC_DT_FEATURE_UNIT_SIZE(ch)		(7 + ((ch) + 1) * 2) - -/* As above, but more useful for defining your own descriptors: */ -#define DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(ch)			\ -struct uac_feature_unit_descriptor_##ch {			\ -	__u8  bLength;						\ -	__u8  bDescriptorType;					\ -	__u8  bDescriptorSubtype;				\ -	__u8  bUnitID;						\ -	__u8  bSourceID;					\ -	__u8  bControlSize;					\ -	__le16 bmaControls[ch + 1];				\ -	__u8  iFeature;						\ -} __attribute__ ((packed)) - -/* 4.3.2.3 Mixer Unit Descriptor */ -struct uac_mixer_unit_descriptor { -	__u8 bLength; -	__u8 bDescriptorType; -	__u8 bDescriptorSubtype; -	__u8 bUnitID; -	__u8 bNrInPins; -	__u8 baSourceID[]; -} __attribute__ ((packed)); +#include <uapi/linux/usb/audio.h> -static inline __u8 uac_mixer_unit_bNrChannels(struct uac_mixer_unit_descriptor *desc) -{ -	return desc->baSourceID[desc->bNrInPins]; -} - -static inline __u32 uac_mixer_unit_wChannelConfig(struct uac_mixer_unit_descriptor *desc, -						  int protocol) -{ -	if (protocol == UAC_VERSION_1) -		return (desc->baSourceID[desc->bNrInPins + 2] << 8) | -			desc->baSourceID[desc->bNrInPins + 1]; -	else -		return  (desc->baSourceID[desc->bNrInPins + 4] << 24) | -			(desc->baSourceID[desc->bNrInPins + 3] << 16) | -			(desc->baSourceID[desc->bNrInPins + 2] << 8)  | -			(desc->baSourceID[desc->bNrInPins + 1]); -} - -static inline __u8 uac_mixer_unit_iChannelNames(struct uac_mixer_unit_descriptor *desc, -						int protocol) -{ -	return (protocol == UAC_VERSION_1) ? -		desc->baSourceID[desc->bNrInPins + 3] : -		desc->baSourceID[desc->bNrInPins + 5]; -} - -static inline __u8 *uac_mixer_unit_bmControls(struct uac_mixer_unit_descriptor *desc, -					      int protocol) -{ -	return (protocol == UAC_VERSION_1) ? -		&desc->baSourceID[desc->bNrInPins + 4] : -		&desc->baSourceID[desc->bNrInPins + 6]; -} - -static inline __u8 uac_mixer_unit_iMixer(struct uac_mixer_unit_descriptor *desc) -{ -	__u8 *raw = (__u8 *) desc; -	return raw[desc->bLength - 1]; -} - -/* 4.3.2.4 Selector Unit Descriptor */ -struct uac_selector_unit_descriptor { -	__u8 bLength; -	__u8 bDescriptorType; -	__u8 bDescriptorSubtype; -	__u8 bUintID; -	__u8 bNrInPins; -	__u8 baSourceID[]; -} __attribute__ ((packed)); - -static inline __u8 uac_selector_unit_iSelector(struct uac_selector_unit_descriptor *desc) -{ -	__u8 *raw = (__u8 *) desc; -	return raw[desc->bLength - 1]; -} - -/* 4.3.2.5 Feature Unit Descriptor */ -struct uac_feature_unit_descriptor { -	__u8 bLength; -	__u8 bDescriptorType; -	__u8 bDescriptorSubtype; -	__u8 bUnitID; -	__u8 bSourceID; -	__u8 bControlSize; -	__u8 bmaControls[0]; /* variable length */ -} __attribute__((packed)); - -static inline __u8 uac_feature_unit_iFeature(struct uac_feature_unit_descriptor *desc) -{ -	__u8 *raw = (__u8 *) desc; -	return raw[desc->bLength - 1]; -} - -/* 4.3.2.6 Processing Unit Descriptors */ -struct uac_processing_unit_descriptor { -	__u8 bLength; -	__u8 bDescriptorType; -	__u8 bDescriptorSubtype; -	__u8 bUnitID; -	__u16 wProcessType; -	__u8 bNrInPins; -	__u8 baSourceID[]; -} __attribute__ ((packed)); - -static inline __u8 uac_processing_unit_bNrChannels(struct uac_processing_unit_descriptor *desc) -{ -	return desc->baSourceID[desc->bNrInPins]; -} - -static inline __u32 uac_processing_unit_wChannelConfig(struct uac_processing_unit_descriptor *desc, -						       int protocol) -{ -	if (protocol == UAC_VERSION_1) -		return (desc->baSourceID[desc->bNrInPins + 2] << 8) | -			desc->baSourceID[desc->bNrInPins + 1]; -	else -		return  (desc->baSourceID[desc->bNrInPins + 4] << 24) | -			(desc->baSourceID[desc->bNrInPins + 3] << 16) | -			(desc->baSourceID[desc->bNrInPins + 2] << 8)  | -			(desc->baSourceID[desc->bNrInPins + 1]); -} - -static inline __u8 uac_processing_unit_iChannelNames(struct uac_processing_unit_descriptor *desc, -						     int protocol) -{ -	return (protocol == UAC_VERSION_1) ? -		desc->baSourceID[desc->bNrInPins + 3] : -		desc->baSourceID[desc->bNrInPins + 5]; -} - -static inline __u8 uac_processing_unit_bControlSize(struct uac_processing_unit_descriptor *desc, -						    int protocol) -{ -	return (protocol == UAC_VERSION_1) ? -		desc->baSourceID[desc->bNrInPins + 4] : -		desc->baSourceID[desc->bNrInPins + 6]; -} - -static inline __u8 *uac_processing_unit_bmControls(struct uac_processing_unit_descriptor *desc, -						   int protocol) -{ -	return (protocol == UAC_VERSION_1) ? -		&desc->baSourceID[desc->bNrInPins + 5] : -		&desc->baSourceID[desc->bNrInPins + 7]; -} - -static inline __u8 uac_processing_unit_iProcessing(struct uac_processing_unit_descriptor *desc, -						   int protocol) -{ -	__u8 control_size = uac_processing_unit_bControlSize(desc, protocol); -	return desc->baSourceID[desc->bNrInPins + control_size]; -} - -static inline __u8 *uac_processing_unit_specific(struct uac_processing_unit_descriptor *desc, -						 int protocol) -{ -	__u8 control_size = uac_processing_unit_bControlSize(desc, protocol); -	return &desc->baSourceID[desc->bNrInPins + control_size + 1]; -} - -/* 4.5.2 Class-Specific AS Interface Descriptor */ -struct uac1_as_header_descriptor { -	__u8  bLength;			/* in bytes: 7 */ -	__u8  bDescriptorType;		/* USB_DT_CS_INTERFACE */ -	__u8  bDescriptorSubtype;	/* AS_GENERAL */ -	__u8  bTerminalLink;		/* Terminal ID of connected Terminal */ -	__u8  bDelay;			/* Delay introduced by the data path */ -	__le16 wFormatTag;		/* The Audio Data Format */ -} __attribute__ ((packed)); - -#define UAC_DT_AS_HEADER_SIZE		7 - -/* Formats - A.1.1 Audio Data Format Type I Codes */ -#define UAC_FORMAT_TYPE_I_UNDEFINED	0x0 -#define UAC_FORMAT_TYPE_I_PCM		0x1 -#define UAC_FORMAT_TYPE_I_PCM8		0x2 -#define UAC_FORMAT_TYPE_I_IEEE_FLOAT	0x3 -#define UAC_FORMAT_TYPE_I_ALAW		0x4 -#define UAC_FORMAT_TYPE_I_MULAW		0x5 - -struct uac_format_type_i_continuous_descriptor { -	__u8  bLength;			/* in bytes: 8 + (ns * 3) */ -	__u8  bDescriptorType;		/* USB_DT_CS_INTERFACE */ -	__u8  bDescriptorSubtype;	/* FORMAT_TYPE */ -	__u8  bFormatType;		/* FORMAT_TYPE_1 */ -	__u8  bNrChannels;		/* physical channels in the stream */ -	__u8  bSubframeSize;		/* */ -	__u8  bBitResolution; -	__u8  bSamFreqType; -	__u8  tLowerSamFreq[3]; -	__u8  tUpperSamFreq[3]; -} __attribute__ ((packed)); - -#define UAC_FORMAT_TYPE_I_CONTINUOUS_DESC_SIZE	14 - -struct uac_format_type_i_discrete_descriptor { -	__u8  bLength;			/* in bytes: 8 + (ns * 3) */ -	__u8  bDescriptorType;		/* USB_DT_CS_INTERFACE */ -	__u8  bDescriptorSubtype;	/* FORMAT_TYPE */ -	__u8  bFormatType;		/* FORMAT_TYPE_1 */ -	__u8  bNrChannels;		/* physical channels in the stream */ -	__u8  bSubframeSize;		/* */ -	__u8  bBitResolution; -	__u8  bSamFreqType; -	__u8  tSamFreq[][3]; -} __attribute__ ((packed)); - -#define DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(n)		\ -struct uac_format_type_i_discrete_descriptor_##n {		\ -	__u8  bLength;						\ -	__u8  bDescriptorType;					\ -	__u8  bDescriptorSubtype;				\ -	__u8  bFormatType;					\ -	__u8  bNrChannels;					\ -	__u8  bSubframeSize;					\ -	__u8  bBitResolution;					\ -	__u8  bSamFreqType;					\ -	__u8  tSamFreq[n][3];					\ -} __attribute__ ((packed)) - -#define UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(n)	(8 + (n * 3)) - -struct uac_format_type_i_ext_descriptor { -	__u8 bLength; -	__u8 bDescriptorType; -	__u8 bDescriptorSubtype; -	__u8 bFormatType; -	__u8 bSubslotSize; -	__u8 bBitResolution; -	__u8 bHeaderLength; -	__u8 bControlSize; -	__u8 bSideBandProtocol; -} __attribute__((packed)); - -/* Formats - Audio Data Format Type I Codes */ - -#define UAC_FORMAT_TYPE_II_MPEG	0x1001 -#define UAC_FORMAT_TYPE_II_AC3	0x1002 - -struct uac_format_type_ii_discrete_descriptor { -	__u8 bLength; -	__u8 bDescriptorType; -	__u8 bDescriptorSubtype; -	__u8 bFormatType; -	__le16 wMaxBitRate; -	__le16 wSamplesPerFrame; -	__u8 bSamFreqType; -	__u8 tSamFreq[][3]; -} __attribute__((packed)); - -struct uac_format_type_ii_ext_descriptor { -	__u8 bLength; -	__u8 bDescriptorType; -	__u8 bDescriptorSubtype; -	__u8 bFormatType; -	__u16 wMaxBitRate; -	__u16 wSamplesPerFrame; -	__u8 bHeaderLength; -	__u8 bSideBandProtocol; -} __attribute__((packed)); - -/* type III */ -#define UAC_FORMAT_TYPE_III_IEC1937_AC3	0x2001 -#define UAC_FORMAT_TYPE_III_IEC1937_MPEG1_LAYER1	0x2002 -#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_NOEXT	0x2003 -#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_EXT	0x2004 -#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER1_LS	0x2005 -#define UAC_FORMAT_TYPE_III_IEC1937_MPEG2_LAYER23_LS	0x2006 - -/* Formats - A.2 Format Type Codes */ -#define UAC_FORMAT_TYPE_UNDEFINED	0x0 -#define UAC_FORMAT_TYPE_I		0x1 -#define UAC_FORMAT_TYPE_II		0x2 -#define UAC_FORMAT_TYPE_III		0x3 -#define UAC_EXT_FORMAT_TYPE_I		0x81 -#define UAC_EXT_FORMAT_TYPE_II		0x82 -#define UAC_EXT_FORMAT_TYPE_III		0x83 - -struct uac_iso_endpoint_descriptor { -	__u8  bLength;			/* in bytes: 7 */ -	__u8  bDescriptorType;		/* USB_DT_CS_ENDPOINT */ -	__u8  bDescriptorSubtype;	/* EP_GENERAL */ -	__u8  bmAttributes; -	__u8  bLockDelayUnits; -	__le16 wLockDelay; -} __attribute__((packed)); -#define UAC_ISO_ENDPOINT_DESC_SIZE	7 - -#define UAC_EP_CS_ATTR_SAMPLE_RATE	0x01 -#define UAC_EP_CS_ATTR_PITCH_CONTROL	0x02 -#define UAC_EP_CS_ATTR_FILL_MAX		0x80 - -/* status word format (3.7.1.1) */ - -#define UAC1_STATUS_TYPE_ORIG_MASK		0x0f -#define UAC1_STATUS_TYPE_ORIG_AUDIO_CONTROL_IF	0x0 -#define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_IF	0x1 -#define UAC1_STATUS_TYPE_ORIG_AUDIO_STREAM_EP	0x2 - -#define UAC1_STATUS_TYPE_IRQ_PENDING		(1 << 7) -#define UAC1_STATUS_TYPE_MEM_CHANGED		(1 << 6) - -struct uac1_status_word { -	__u8 bStatusType; -	__u8 bOriginator; -} __attribute__((packed)); - -#ifdef __KERNEL__  struct usb_audio_control {  	struct list_head list; @@ -561,6 +41,4 @@ struct usb_audio_control_selector {  	struct usb_descriptor_header *desc;  }; -#endif /* __KERNEL__ */ -  #endif /* __LINUX_USB_AUDIO_H */ diff --git a/include/linux/usb/cdc.h b/include/linux/usb/cdc.h deleted file mode 100644 index 81a927930bf..00000000000 --- a/include/linux/usb/cdc.h +++ /dev/null @@ -1,412 +0,0 @@ -/* - * USB Communications Device Class (CDC) definitions - * - * CDC says how to talk to lots of different types of network adapters, - * notably ethernet adapters and various modems.  It's used mostly with - * firmware based USB peripherals. - */ - -#ifndef __LINUX_USB_CDC_H -#define __LINUX_USB_CDC_H - -#include <linux/types.h> - -#define USB_CDC_SUBCLASS_ACM			0x02 -#define USB_CDC_SUBCLASS_ETHERNET		0x06 -#define USB_CDC_SUBCLASS_WHCM			0x08 -#define USB_CDC_SUBCLASS_DMM			0x09 -#define USB_CDC_SUBCLASS_MDLM			0x0a -#define USB_CDC_SUBCLASS_OBEX			0x0b -#define USB_CDC_SUBCLASS_EEM			0x0c -#define USB_CDC_SUBCLASS_NCM			0x0d - -#define USB_CDC_PROTO_NONE			0 - -#define USB_CDC_ACM_PROTO_AT_V25TER		1 -#define USB_CDC_ACM_PROTO_AT_PCCA101		2 -#define USB_CDC_ACM_PROTO_AT_PCCA101_WAKE	3 -#define USB_CDC_ACM_PROTO_AT_GSM		4 -#define USB_CDC_ACM_PROTO_AT_3G			5 -#define USB_CDC_ACM_PROTO_AT_CDMA		6 -#define USB_CDC_ACM_PROTO_VENDOR		0xff - -#define USB_CDC_PROTO_EEM			7 - -#define USB_CDC_NCM_PROTO_NTB			1 - -/*-------------------------------------------------------------------------*/ - -/* - * Class-Specific descriptors ... there are a couple dozen of them - */ - -#define USB_CDC_HEADER_TYPE		0x00	/* header_desc */ -#define USB_CDC_CALL_MANAGEMENT_TYPE	0x01	/* call_mgmt_descriptor */ -#define USB_CDC_ACM_TYPE		0x02	/* acm_descriptor */ -#define USB_CDC_UNION_TYPE		0x06	/* union_desc */ -#define USB_CDC_COUNTRY_TYPE		0x07 -#define USB_CDC_NETWORK_TERMINAL_TYPE	0x0a	/* network_terminal_desc */ -#define USB_CDC_ETHERNET_TYPE		0x0f	/* ether_desc */ -#define USB_CDC_WHCM_TYPE		0x11 -#define USB_CDC_MDLM_TYPE		0x12	/* mdlm_desc */ -#define USB_CDC_MDLM_DETAIL_TYPE	0x13	/* mdlm_detail_desc */ -#define USB_CDC_DMM_TYPE		0x14 -#define USB_CDC_OBEX_TYPE		0x15 -#define USB_CDC_NCM_TYPE		0x1a - -/* "Header Functional Descriptor" from CDC spec  5.2.3.1 */ -struct usb_cdc_header_desc { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__le16	bcdCDC; -} __attribute__ ((packed)); - -/* "Call Management Descriptor" from CDC spec  5.2.3.2 */ -struct usb_cdc_call_mgmt_descriptor { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__u8	bmCapabilities; -#define USB_CDC_CALL_MGMT_CAP_CALL_MGMT		0x01 -#define USB_CDC_CALL_MGMT_CAP_DATA_INTF		0x02 - -	__u8	bDataInterface; -} __attribute__ ((packed)); - -/* "Abstract Control Management Descriptor" from CDC spec  5.2.3.3 */ -struct usb_cdc_acm_descriptor { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__u8	bmCapabilities; -} __attribute__ ((packed)); - -/* capabilities from 5.2.3.3 */ - -#define USB_CDC_COMM_FEATURE	0x01 -#define USB_CDC_CAP_LINE	0x02 -#define USB_CDC_CAP_BRK		0x04 -#define USB_CDC_CAP_NOTIFY	0x08 - -/* "Union Functional Descriptor" from CDC spec 5.2.3.8 */ -struct usb_cdc_union_desc { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__u8	bMasterInterface0; -	__u8	bSlaveInterface0; -	/* ... and there could be other slave interfaces */ -} __attribute__ ((packed)); - -/* "Country Selection Functional Descriptor" from CDC spec 5.2.3.9 */ -struct usb_cdc_country_functional_desc { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__u8	iCountryCodeRelDate; -	__le16	wCountyCode0; -	/* ... and there can be a lot of country codes */ -} __attribute__ ((packed)); - -/* "Network Channel Terminal Functional Descriptor" from CDC spec 5.2.3.11 */ -struct usb_cdc_network_terminal_desc { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__u8	bEntityId; -	__u8	iName; -	__u8	bChannelIndex; -	__u8	bPhysicalInterface; -} __attribute__ ((packed)); - -/* "Ethernet Networking Functional Descriptor" from CDC spec 5.2.3.16 */ -struct usb_cdc_ether_desc { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__u8	iMACAddress; -	__le32	bmEthernetStatistics; -	__le16	wMaxSegmentSize; -	__le16	wNumberMCFilters; -	__u8	bNumberPowerFilters; -} __attribute__ ((packed)); - -/* "Telephone Control Model Functional Descriptor" from CDC WMC spec 6.3..3 */ -struct usb_cdc_dmm_desc { -	__u8	bFunctionLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubtype; -	__u16	bcdVersion; -	__le16	wMaxCommand; -} __attribute__ ((packed)); - -/* "MDLM Functional Descriptor" from CDC WMC spec 6.7.2.3 */ -struct usb_cdc_mdlm_desc { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__le16	bcdVersion; -	__u8	bGUID[16]; -} __attribute__ ((packed)); - -/* "MDLM Detail Functional Descriptor" from CDC WMC spec 6.7.2.4 */ -struct usb_cdc_mdlm_detail_desc { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	/* type is associated with mdlm_desc.bGUID */ -	__u8	bGuidDescriptorType; -	__u8	bDetailData[0]; -} __attribute__ ((packed)); - -/* "OBEX Control Model Functional Descriptor" */ -struct usb_cdc_obex_desc { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__le16	bcdVersion; -} __attribute__ ((packed)); - -/* "NCM Control Model Functional Descriptor" */ -struct usb_cdc_ncm_desc { -	__u8	bLength; -	__u8	bDescriptorType; -	__u8	bDescriptorSubType; - -	__le16	bcdNcmVersion; -	__u8	bmNetworkCapabilities; -} __attribute__ ((packed)); -/*-------------------------------------------------------------------------*/ - -/* - * Class-Specific Control Requests (6.2) - * - * section 3.6.2.1 table 4 has the ACM profile, for modems. - * section 3.8.2 table 10 has the ethernet profile. - * - * Microsoft's RNDIS stack for Ethernet is a vendor-specific CDC ACM variant, - * heavily dependent on the encapsulated (proprietary) command mechanism. - */ - -#define USB_CDC_SEND_ENCAPSULATED_COMMAND	0x00 -#define USB_CDC_GET_ENCAPSULATED_RESPONSE	0x01 -#define USB_CDC_REQ_SET_LINE_CODING		0x20 -#define USB_CDC_REQ_GET_LINE_CODING		0x21 -#define USB_CDC_REQ_SET_CONTROL_LINE_STATE	0x22 -#define USB_CDC_REQ_SEND_BREAK			0x23 -#define USB_CDC_SET_ETHERNET_MULTICAST_FILTERS	0x40 -#define USB_CDC_SET_ETHERNET_PM_PATTERN_FILTER	0x41 -#define USB_CDC_GET_ETHERNET_PM_PATTERN_FILTER	0x42 -#define USB_CDC_SET_ETHERNET_PACKET_FILTER	0x43 -#define USB_CDC_GET_ETHERNET_STATISTIC		0x44 -#define USB_CDC_GET_NTB_PARAMETERS		0x80 -#define USB_CDC_GET_NET_ADDRESS			0x81 -#define USB_CDC_SET_NET_ADDRESS			0x82 -#define USB_CDC_GET_NTB_FORMAT			0x83 -#define USB_CDC_SET_NTB_FORMAT			0x84 -#define USB_CDC_GET_NTB_INPUT_SIZE		0x85 -#define USB_CDC_SET_NTB_INPUT_SIZE		0x86 -#define USB_CDC_GET_MAX_DATAGRAM_SIZE		0x87 -#define USB_CDC_SET_MAX_DATAGRAM_SIZE		0x88 -#define USB_CDC_GET_CRC_MODE			0x89 -#define USB_CDC_SET_CRC_MODE			0x8a - -/* Line Coding Structure from CDC spec 6.2.13 */ -struct usb_cdc_line_coding { -	__le32	dwDTERate; -	__u8	bCharFormat; -#define USB_CDC_1_STOP_BITS			0 -#define USB_CDC_1_5_STOP_BITS			1 -#define USB_CDC_2_STOP_BITS			2 - -	__u8	bParityType; -#define USB_CDC_NO_PARITY			0 -#define USB_CDC_ODD_PARITY			1 -#define USB_CDC_EVEN_PARITY			2 -#define USB_CDC_MARK_PARITY			3 -#define USB_CDC_SPACE_PARITY			4 - -	__u8	bDataBits; -} __attribute__ ((packed)); - -/* table 62; bits in multicast filter */ -#define	USB_CDC_PACKET_TYPE_PROMISCUOUS		(1 << 0) -#define	USB_CDC_PACKET_TYPE_ALL_MULTICAST	(1 << 1) /* no filter */ -#define	USB_CDC_PACKET_TYPE_DIRECTED		(1 << 2) -#define	USB_CDC_PACKET_TYPE_BROADCAST		(1 << 3) -#define	USB_CDC_PACKET_TYPE_MULTICAST		(1 << 4) /* filtered */ - - -/*-------------------------------------------------------------------------*/ - -/* - * Class-Specific Notifications (6.3) sent by interrupt transfers - * - * section 3.8.2 table 11 of the CDC spec lists Ethernet notifications - * section 3.6.2.1 table 5 specifies ACM notifications, accepted by RNDIS - * RNDIS also defines its own bit-incompatible notifications - */ - -#define USB_CDC_NOTIFY_NETWORK_CONNECTION	0x00 -#define USB_CDC_NOTIFY_RESPONSE_AVAILABLE	0x01 -#define USB_CDC_NOTIFY_SERIAL_STATE		0x20 -#define USB_CDC_NOTIFY_SPEED_CHANGE		0x2a - -struct usb_cdc_notification { -	__u8	bmRequestType; -	__u8	bNotificationType; -	__le16	wValue; -	__le16	wIndex; -	__le16	wLength; -} __attribute__ ((packed)); - -struct usb_cdc_speed_change { -	__le32	DLBitRRate;	/* contains the downlink bit rate (IN pipe) */ -	__le32	ULBitRate;	/* contains the uplink bit rate (OUT pipe) */ -} __attribute__ ((packed)); - -/*-------------------------------------------------------------------------*/ - -/* - * Class Specific structures and constants - * - * CDC NCM NTB parameters structure, CDC NCM subclass 6.2.1 - * - */ - -struct usb_cdc_ncm_ntb_parameters { -	__le16	wLength; -	__le16	bmNtbFormatsSupported; -	__le32	dwNtbInMaxSize; -	__le16	wNdpInDivisor; -	__le16	wNdpInPayloadRemainder; -	__le16	wNdpInAlignment; -	__le16	wPadding1; -	__le32	dwNtbOutMaxSize; -	__le16	wNdpOutDivisor; -	__le16	wNdpOutPayloadRemainder; -	__le16	wNdpOutAlignment; -	__le16	wNtbOutMaxDatagrams; -} __attribute__ ((packed)); - -/* - * CDC NCM transfer headers, CDC NCM subclass 3.2 - */ - -#define USB_CDC_NCM_NTH16_SIGN		0x484D434E /* NCMH */ -#define USB_CDC_NCM_NTH32_SIGN		0x686D636E /* ncmh */ - -struct usb_cdc_ncm_nth16 { -	__le32	dwSignature; -	__le16	wHeaderLength; -	__le16	wSequence; -	__le16	wBlockLength; -	__le16	wNdpIndex; -} __attribute__ ((packed)); - -struct usb_cdc_ncm_nth32 { -	__le32	dwSignature; -	__le16	wHeaderLength; -	__le16	wSequence; -	__le32	dwBlockLength; -	__le32	dwNdpIndex; -} __attribute__ ((packed)); - -/* - * CDC NCM datagram pointers, CDC NCM subclass 3.3 - */ - -#define USB_CDC_NCM_NDP16_CRC_SIGN	0x314D434E /* NCM1 */ -#define USB_CDC_NCM_NDP16_NOCRC_SIGN	0x304D434E /* NCM0 */ -#define USB_CDC_NCM_NDP32_CRC_SIGN	0x316D636E /* ncm1 */ -#define USB_CDC_NCM_NDP32_NOCRC_SIGN	0x306D636E /* ncm0 */ - -/* 16-bit NCM Datagram Pointer Entry */ -struct usb_cdc_ncm_dpe16 { -	__le16	wDatagramIndex; -	__le16	wDatagramLength; -} __attribute__((__packed__)); - -/* 16-bit NCM Datagram Pointer Table */ -struct usb_cdc_ncm_ndp16 { -	__le32	dwSignature; -	__le16	wLength; -	__le16	wNextNdpIndex; -	struct	usb_cdc_ncm_dpe16 dpe16[0]; -} __attribute__ ((packed)); - -/* 32-bit NCM Datagram Pointer Entry */ -struct usb_cdc_ncm_dpe32 { -	__le32	dwDatagramIndex; -	__le32	dwDatagramLength; -} __attribute__((__packed__)); - -/* 32-bit NCM Datagram Pointer Table */ -struct usb_cdc_ncm_ndp32 { -	__le32	dwSignature; -	__le16	wLength; -	__le16	wReserved6; -	__le32	dwNextNdpIndex; -	__le32	dwReserved12; -	struct	usb_cdc_ncm_dpe32 dpe32[0]; -} __attribute__ ((packed)); - -/* CDC NCM subclass 3.2.1 and 3.2.2 */ -#define USB_CDC_NCM_NDP16_INDEX_MIN			0x000C -#define USB_CDC_NCM_NDP32_INDEX_MIN			0x0010 - -/* CDC NCM subclass 3.3.3 Datagram Formatting */ -#define USB_CDC_NCM_DATAGRAM_FORMAT_CRC			0x30 -#define USB_CDC_NCM_DATAGRAM_FORMAT_NOCRC		0X31 - -/* CDC NCM subclass 4.2 NCM Communications Interface Protocol Code */ -#define USB_CDC_NCM_PROTO_CODE_NO_ENCAP_COMMANDS	0x00 -#define USB_CDC_NCM_PROTO_CODE_EXTERN_PROTO		0xFE - -/* CDC NCM subclass 5.2.1 NCM Functional Descriptor, bmNetworkCapabilities */ -#define USB_CDC_NCM_NCAP_ETH_FILTER			(1 << 0) -#define USB_CDC_NCM_NCAP_NET_ADDRESS			(1 << 1) -#define USB_CDC_NCM_NCAP_ENCAP_COMMAND			(1 << 2) -#define USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE		(1 << 3) -#define USB_CDC_NCM_NCAP_CRC_MODE			(1 << 4) -#define	USB_CDC_NCM_NCAP_NTB_INPUT_SIZE			(1 << 5) - -/* CDC NCM subclass Table 6-3: NTB Parameter Structure */ -#define USB_CDC_NCM_NTB16_SUPPORTED			(1 << 0) -#define USB_CDC_NCM_NTB32_SUPPORTED			(1 << 1) - -/* CDC NCM subclass Table 6-3: NTB Parameter Structure */ -#define USB_CDC_NCM_NDP_ALIGN_MIN_SIZE			0x04 -#define USB_CDC_NCM_NTB_MAX_LENGTH			0x1C - -/* CDC NCM subclass 6.2.5 SetNtbFormat */ -#define USB_CDC_NCM_NTB16_FORMAT			0x00 -#define USB_CDC_NCM_NTB32_FORMAT			0x01 - -/* CDC NCM subclass 6.2.7 SetNtbInputSize */ -#define USB_CDC_NCM_NTB_MIN_IN_SIZE			2048 -#define USB_CDC_NCM_NTB_MIN_OUT_SIZE			2048 - -/* NTB Input Size Structure */ -struct usb_cdc_ncm_ndp_input_size { -	__le32	dwNtbInMaxSize; -	__le16	wNtbInMaxDatagrams; -	__le16	wReserved; -} __attribute__ ((packed)); - -/* CDC NCM subclass 6.2.11 SetCrcMode */ -#define USB_CDC_NCM_CRC_NOT_APPENDED			0x00 -#define USB_CDC_NCM_CRC_APPENDED			0x01 - -#endif /* __LINUX_USB_CDC_H */ diff --git a/include/linux/usb/ch11.h b/include/linux/usb/ch11.h deleted file mode 100644 index 7692dc69ccf..00000000000 --- a/include/linux/usb/ch11.h +++ /dev/null @@ -1,266 +0,0 @@ -/* - * This file holds Hub protocol constants and data structures that are - * defined in chapter 11 (Hub Specification) of the USB 2.0 specification. - * - * It is used/shared between the USB core, the HCDs and couple of other USB - * drivers. - */ - -#ifndef __LINUX_CH11_H -#define __LINUX_CH11_H - -#include <linux/types.h>	/* __u8 etc */ - -/* - * Hub request types - */ - -#define USB_RT_HUB	(USB_TYPE_CLASS | USB_RECIP_DEVICE) -#define USB_RT_PORT	(USB_TYPE_CLASS | USB_RECIP_OTHER) - -/* - * Hub class requests - * See USB 2.0 spec Table 11-16 - */ -#define HUB_CLEAR_TT_BUFFER	8 -#define HUB_RESET_TT		9 -#define HUB_GET_TT_STATE	10 -#define HUB_STOP_TT		11 - -/* - * Hub class additional requests defined by USB 3.0 spec - * See USB 3.0 spec Table 10-6 - */ -#define HUB_SET_DEPTH		12 -#define HUB_GET_PORT_ERR_COUNT	13 - -/* - * Hub Class feature numbers - * See USB 2.0 spec Table 11-17 - */ -#define C_HUB_LOCAL_POWER	0 -#define C_HUB_OVER_CURRENT	1 - -/* - * Port feature numbers - * See USB 2.0 spec Table 11-17 - */ -#define USB_PORT_FEAT_CONNECTION	0 -#define USB_PORT_FEAT_ENABLE		1 -#define USB_PORT_FEAT_SUSPEND		2	/* L2 suspend */ -#define USB_PORT_FEAT_OVER_CURRENT	3 -#define USB_PORT_FEAT_RESET		4 -#define USB_PORT_FEAT_L1		5	/* L1 suspend */ -#define USB_PORT_FEAT_POWER		8 -#define USB_PORT_FEAT_LOWSPEED		9	/* Should never be used */ -#define USB_PORT_FEAT_C_CONNECTION	16 -#define USB_PORT_FEAT_C_ENABLE		17 -#define USB_PORT_FEAT_C_SUSPEND		18 -#define USB_PORT_FEAT_C_OVER_CURRENT	19 -#define USB_PORT_FEAT_C_RESET		20 -#define USB_PORT_FEAT_TEST              21 -#define USB_PORT_FEAT_INDICATOR         22 -#define USB_PORT_FEAT_C_PORT_L1         23 - -/* - * Port feature selectors added by USB 3.0 spec. - * See USB 3.0 spec Table 10-7 - */ -#define USB_PORT_FEAT_LINK_STATE		5 -#define USB_PORT_FEAT_U1_TIMEOUT		23 -#define USB_PORT_FEAT_U2_TIMEOUT		24 -#define USB_PORT_FEAT_C_PORT_LINK_STATE		25 -#define USB_PORT_FEAT_C_PORT_CONFIG_ERROR	26 -#define USB_PORT_FEAT_REMOTE_WAKE_MASK		27 -#define USB_PORT_FEAT_BH_PORT_RESET		28 -#define USB_PORT_FEAT_C_BH_PORT_RESET		29 -#define USB_PORT_FEAT_FORCE_LINKPM_ACCEPT	30 - -#define USB_PORT_LPM_TIMEOUT(p)			(((p) & 0xff) << 8) - -/* USB 3.0 hub remote wake mask bits, see table 10-14 */ -#define USB_PORT_FEAT_REMOTE_WAKE_CONNECT	(1 << 8) -#define USB_PORT_FEAT_REMOTE_WAKE_DISCONNECT	(1 << 9) -#define USB_PORT_FEAT_REMOTE_WAKE_OVER_CURRENT	(1 << 10) - -/* - * Hub Status and Hub Change results - * See USB 2.0 spec Table 11-19 and Table 11-20 - */ -struct usb_port_status { -	__le16 wPortStatus; -	__le16 wPortChange; -} __attribute__ ((packed)); - -/* - * wPortStatus bit field - * See USB 2.0 spec Table 11-21 - */ -#define USB_PORT_STAT_CONNECTION	0x0001 -#define USB_PORT_STAT_ENABLE		0x0002 -#define USB_PORT_STAT_SUSPEND		0x0004 -#define USB_PORT_STAT_OVERCURRENT	0x0008 -#define USB_PORT_STAT_RESET		0x0010 -#define USB_PORT_STAT_L1		0x0020 -/* bits 6 to 7 are reserved */ -#define USB_PORT_STAT_POWER		0x0100 -#define USB_PORT_STAT_LOW_SPEED		0x0200 -#define USB_PORT_STAT_HIGH_SPEED        0x0400 -#define USB_PORT_STAT_TEST              0x0800 -#define USB_PORT_STAT_INDICATOR         0x1000 -/* bits 13 to 15 are reserved */ - -/* - * Additions to wPortStatus bit field from USB 3.0 - * See USB 3.0 spec Table 10-10 - */ -#define USB_PORT_STAT_LINK_STATE	0x01e0 -#define USB_SS_PORT_STAT_POWER		0x0200 -#define USB_SS_PORT_STAT_SPEED		0x1c00 -#define USB_PORT_STAT_SPEED_5GBPS	0x0000 -/* Valid only if port is enabled */ -/* Bits that are the same from USB 2.0 */ -#define USB_SS_PORT_STAT_MASK (USB_PORT_STAT_CONNECTION |	    \ -				USB_PORT_STAT_ENABLE |	    \ -				USB_PORT_STAT_OVERCURRENT | \ -				USB_PORT_STAT_RESET) - -/* - * Definitions for PORT_LINK_STATE values - * (bits 5-8) in wPortStatus - */ -#define USB_SS_PORT_LS_U0		0x0000 -#define USB_SS_PORT_LS_U1		0x0020 -#define USB_SS_PORT_LS_U2		0x0040 -#define USB_SS_PORT_LS_U3		0x0060 -#define USB_SS_PORT_LS_SS_DISABLED	0x0080 -#define USB_SS_PORT_LS_RX_DETECT	0x00a0 -#define USB_SS_PORT_LS_SS_INACTIVE	0x00c0 -#define USB_SS_PORT_LS_POLLING		0x00e0 -#define USB_SS_PORT_LS_RECOVERY		0x0100 -#define USB_SS_PORT_LS_HOT_RESET	0x0120 -#define USB_SS_PORT_LS_COMP_MOD		0x0140 -#define USB_SS_PORT_LS_LOOPBACK		0x0160 - -/* - * wPortChange bit field - * See USB 2.0 spec Table 11-22 and USB 2.0 LPM ECN Table-4.10 - * Bits 0 to 5 shown, bits 6 to 15 are reserved - */ -#define USB_PORT_STAT_C_CONNECTION	0x0001 -#define USB_PORT_STAT_C_ENABLE		0x0002 -#define USB_PORT_STAT_C_SUSPEND		0x0004 -#define USB_PORT_STAT_C_OVERCURRENT	0x0008 -#define USB_PORT_STAT_C_RESET		0x0010 -#define USB_PORT_STAT_C_L1		0x0020 -/* - * USB 3.0 wPortChange bit fields - * See USB 3.0 spec Table 10-11 - */ -#define USB_PORT_STAT_C_BH_RESET	0x0020 -#define USB_PORT_STAT_C_LINK_STATE	0x0040 -#define USB_PORT_STAT_C_CONFIG_ERROR	0x0080 - -/* - * wHubCharacteristics (masks) - * See USB 2.0 spec Table 11-13, offset 3 - */ -#define HUB_CHAR_LPSM		0x0003 /* Logical Power Switching Mode mask */ -#define HUB_CHAR_COMMON_LPSM	0x0000 /* All ports power control at once */ -#define HUB_CHAR_INDV_PORT_LPSM	0x0001 /* per-port power control */ -#define HUB_CHAR_NO_LPSM	0x0002 /* no power switching */ - -#define HUB_CHAR_COMPOUND	0x0004 /* hub is part of a compound device */ - -#define HUB_CHAR_OCPM		0x0018 /* Over-Current Protection Mode mask */ -#define HUB_CHAR_COMMON_OCPM	0x0000 /* All ports Over-Current reporting */ -#define HUB_CHAR_INDV_PORT_OCPM	0x0008 /* per-port Over-current reporting */ -#define HUB_CHAR_NO_OCPM	0x0010 /* No Over-current Protection support */ - -#define HUB_CHAR_TTTT		0x0060 /* TT Think Time mask */ -#define HUB_CHAR_PORTIND	0x0080 /* per-port indicators (LEDs) */ - -struct usb_hub_status { -	__le16 wHubStatus; -	__le16 wHubChange; -} __attribute__ ((packed)); - -/* - * Hub Status & Hub Change bit masks - * See USB 2.0 spec Table 11-19 and Table 11-20 - * Bits 0 and 1 for wHubStatus and wHubChange - * Bits 2 to 15 are reserved for both - */ -#define HUB_STATUS_LOCAL_POWER	0x0001 -#define HUB_STATUS_OVERCURRENT	0x0002 -#define HUB_CHANGE_LOCAL_POWER	0x0001 -#define HUB_CHANGE_OVERCURRENT	0x0002 - - -/* - * Hub descriptor - * See USB 2.0 spec Table 11-13 - */ - -#define USB_DT_HUB			(USB_TYPE_CLASS | 0x09) -#define USB_DT_SS_HUB			(USB_TYPE_CLASS | 0x0a) -#define USB_DT_HUB_NONVAR_SIZE		7 -#define USB_DT_SS_HUB_SIZE              12 - -/* - * Hub Device descriptor - * USB Hub class device protocols - */ - -#define USB_HUB_PR_FS		0 /* Full speed hub */ -#define USB_HUB_PR_HS_NO_TT	0 /* Hi-speed hub without TT */ -#define USB_HUB_PR_HS_SINGLE_TT	1 /* Hi-speed hub with single TT */ -#define USB_HUB_PR_HS_MULTI_TT	2 /* Hi-speed hub with multiple TT */ -#define USB_HUB_PR_SS		3 /* Super speed hub */ - -struct usb_hub_descriptor { -	__u8  bDescLength; -	__u8  bDescriptorType; -	__u8  bNbrPorts; -	__le16 wHubCharacteristics; -	__u8  bPwrOn2PwrGood; -	__u8  bHubContrCurrent; - -	/* 2.0 and 3.0 hubs differ here */ -	union { -		struct { -			/* add 1 bit for hub status change; round to bytes */ -			__u8  DeviceRemovable[(USB_MAXCHILDREN + 1 + 7) / 8]; -			__u8  PortPwrCtrlMask[(USB_MAXCHILDREN + 1 + 7) / 8]; -		}  __attribute__ ((packed)) hs; - -		struct { -			__u8 bHubHdrDecLat; -			__le16 wHubDelay; -			__le16 DeviceRemovable; -		}  __attribute__ ((packed)) ss; -	} u; -} __attribute__ ((packed)); - -/* port indicator status selectors, tables 11-7 and 11-25 */ -#define HUB_LED_AUTO	0 -#define HUB_LED_AMBER	1 -#define HUB_LED_GREEN	2 -#define HUB_LED_OFF	3 - -enum hub_led_mode { -	INDICATOR_AUTO = 0, -	INDICATOR_CYCLE, -	/* software blinks for attention:  software, hardware, reserved */ -	INDICATOR_GREEN_BLINK, INDICATOR_GREEN_BLINK_OFF, -	INDICATOR_AMBER_BLINK, INDICATOR_AMBER_BLINK_OFF, -	INDICATOR_ALT_BLINK, INDICATOR_ALT_BLINK_OFF -} __attribute__ ((packed)); - -/* Transaction Translator Think Times, in bits */ -#define HUB_TTTT_8_BITS		0x00 -#define HUB_TTTT_16_BITS	0x20 -#define HUB_TTTT_24_BITS	0x40 -#define HUB_TTTT_32_BITS	0x60 - -#endif /* __LINUX_CH11_H */ diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index d1d732c2838..9c210f2283d 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h @@ -29,887 +29,11 @@   *     someone that the two other points are non-issues for that   *     particular descriptor type.   */ -  #ifndef __LINUX_USB_CH9_H  #define __LINUX_USB_CH9_H -#include <linux/types.h>	/* __u8 etc */ -#include <asm/byteorder.h>	/* le16_to_cpu */ - -/*-------------------------------------------------------------------------*/ - -/* CONTROL REQUEST SUPPORT */ - -/* - * USB directions - * - * This bit flag is used in endpoint descriptors' bEndpointAddress field. - * It's also one of three fields in control requests bRequestType. - */ -#define USB_DIR_OUT			0		/* to device */ -#define USB_DIR_IN			0x80		/* to host */ - -/* - * USB types, the second of three bRequestType fields - */ -#define USB_TYPE_MASK			(0x03 << 5) -#define USB_TYPE_STANDARD		(0x00 << 5) -#define USB_TYPE_CLASS			(0x01 << 5) -#define USB_TYPE_VENDOR			(0x02 << 5) -#define USB_TYPE_RESERVED		(0x03 << 5) - -/* - * USB recipients, the third of three bRequestType fields - */ -#define USB_RECIP_MASK			0x1f -#define USB_RECIP_DEVICE		0x00 -#define USB_RECIP_INTERFACE		0x01 -#define USB_RECIP_ENDPOINT		0x02 -#define USB_RECIP_OTHER			0x03 -/* From Wireless USB 1.0 */ -#define USB_RECIP_PORT			0x04 -#define USB_RECIP_RPIPE		0x05 - -/* - * Standard requests, for the bRequest field of a SETUP packet. - * - * These are qualified by the bRequestType field, so that for example - * TYPE_CLASS or TYPE_VENDOR specific feature flags could be retrieved - * by a GET_STATUS request. - */ -#define USB_REQ_GET_STATUS		0x00 -#define USB_REQ_CLEAR_FEATURE		0x01 -#define USB_REQ_SET_FEATURE		0x03 -#define USB_REQ_SET_ADDRESS		0x05 -#define USB_REQ_GET_DESCRIPTOR		0x06 -#define USB_REQ_SET_DESCRIPTOR		0x07 -#define USB_REQ_GET_CONFIGURATION	0x08 -#define USB_REQ_SET_CONFIGURATION	0x09 -#define USB_REQ_GET_INTERFACE		0x0A -#define USB_REQ_SET_INTERFACE		0x0B -#define USB_REQ_SYNCH_FRAME		0x0C -#define USB_REQ_SET_SEL			0x30 -#define USB_REQ_SET_ISOCH_DELAY		0x31 - -#define USB_REQ_SET_ENCRYPTION		0x0D	/* Wireless USB */ -#define USB_REQ_GET_ENCRYPTION		0x0E -#define USB_REQ_RPIPE_ABORT		0x0E -#define USB_REQ_SET_HANDSHAKE		0x0F -#define USB_REQ_RPIPE_RESET		0x0F -#define USB_REQ_GET_HANDSHAKE		0x10 -#define USB_REQ_SET_CONNECTION		0x11 -#define USB_REQ_SET_SECURITY_DATA	0x12 -#define USB_REQ_GET_SECURITY_DATA	0x13 -#define USB_REQ_SET_WUSB_DATA		0x14 -#define USB_REQ_LOOPBACK_DATA_WRITE	0x15 -#define USB_REQ_LOOPBACK_DATA_READ	0x16 -#define USB_REQ_SET_INTERFACE_DS	0x17 - -/* The Link Power Management (LPM) ECN defines USB_REQ_TEST_AND_SET command, - * used by hubs to put ports into a new L1 suspend state, except that it - * forgot to define its number ... - */ - -/* - * USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and - * are read as a bit array returned by USB_REQ_GET_STATUS.  (So there - * are at most sixteen features of each type.)  Hubs may also support a - * new USB_REQ_TEST_AND_SET_FEATURE to put ports into L1 suspend. - */ -#define USB_DEVICE_SELF_POWERED		0	/* (read only) */ -#define USB_DEVICE_REMOTE_WAKEUP	1	/* dev may initiate wakeup */ -#define USB_DEVICE_TEST_MODE		2	/* (wired high speed only) */ -#define USB_DEVICE_BATTERY		2	/* (wireless) */ -#define USB_DEVICE_B_HNP_ENABLE		3	/* (otg) dev may initiate HNP */ -#define USB_DEVICE_WUSB_DEVICE		3	/* (wireless)*/ -#define USB_DEVICE_A_HNP_SUPPORT	4	/* (otg) RH port supports HNP */ -#define USB_DEVICE_A_ALT_HNP_SUPPORT	5	/* (otg) other RH port does */ -#define USB_DEVICE_DEBUG_MODE		6	/* (special devices only) */ - -/* - * Test Mode Selectors - * See USB 2.0 spec Table 9-7 - */ -#define	TEST_J		1 -#define	TEST_K		2 -#define	TEST_SE0_NAK	3 -#define	TEST_PACKET	4 -#define	TEST_FORCE_EN	5 - -/* - * New Feature Selectors as added by USB 3.0 - * See USB 3.0 spec Table 9-6 - */ -#define USB_DEVICE_U1_ENABLE	48	/* dev may initiate U1 transition */ -#define USB_DEVICE_U2_ENABLE	49	/* dev may initiate U2 transition */ -#define USB_DEVICE_LTM_ENABLE	50	/* dev may send LTM */ -#define USB_INTRF_FUNC_SUSPEND	0	/* function suspend */ - -#define USB_INTR_FUNC_SUSPEND_OPT_MASK	0xFF00 -/* - * Suspend Options, Table 9-7 USB 3.0 spec - */ -#define USB_INTRF_FUNC_SUSPEND_LP	(1 << (8 + 0)) -#define USB_INTRF_FUNC_SUSPEND_RW	(1 << (8 + 1)) - -#define USB_ENDPOINT_HALT		0	/* IN/OUT will STALL */ - -/* Bit array elements as returned by the USB_REQ_GET_STATUS request. */ -#define USB_DEV_STAT_U1_ENABLED		2	/* transition into U1 state */ -#define USB_DEV_STAT_U2_ENABLED		3	/* transition into U2 state */ -#define USB_DEV_STAT_LTM_ENABLED	4	/* Latency tolerance messages */ - -/** - * struct usb_ctrlrequest - SETUP data for a USB device control request - * @bRequestType: matches the USB bmRequestType field - * @bRequest: matches the USB bRequest field - * @wValue: matches the USB wValue field (le16 byte order) - * @wIndex: matches the USB wIndex field (le16 byte order) - * @wLength: matches the USB wLength field (le16 byte order) - * - * This structure is used to send control requests to a USB device.  It matches - * the different fields of the USB 2.0 Spec section 9.3, table 9-2.  See the - * USB spec for a fuller description of the different fields, and what they are - * used for. - * - * Note that the driver for any interface can issue control requests. - * For most devices, interfaces don't coordinate with each other, so - * such requests may be made at any time. - */ -struct usb_ctrlrequest { -	__u8 bRequestType; -	__u8 bRequest; -	__le16 wValue; -	__le16 wIndex; -	__le16 wLength; -} __attribute__ ((packed)); - -/*-------------------------------------------------------------------------*/ - -/* - * STANDARD DESCRIPTORS ... as returned by GET_DESCRIPTOR, or - * (rarely) accepted by SET_DESCRIPTOR. - * - * Note that all multi-byte values here are encoded in little endian - * byte order "on the wire".  Within the kernel and when exposed - * through the Linux-USB APIs, they are not converted to cpu byte - * order; it is the responsibility of the client code to do this. - * The single exception is when device and configuration descriptors (but - * not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD); - * in this case the fields are converted to host endianness by the kernel. - */ - -/* - * Descriptor types ... USB 2.0 spec table 9.5 - */ -#define USB_DT_DEVICE			0x01 -#define USB_DT_CONFIG			0x02 -#define USB_DT_STRING			0x03 -#define USB_DT_INTERFACE		0x04 -#define USB_DT_ENDPOINT			0x05 -#define USB_DT_DEVICE_QUALIFIER		0x06 -#define USB_DT_OTHER_SPEED_CONFIG	0x07 -#define USB_DT_INTERFACE_POWER		0x08 -/* these are from a minor usb 2.0 revision (ECN) */ -#define USB_DT_OTG			0x09 -#define USB_DT_DEBUG			0x0a -#define USB_DT_INTERFACE_ASSOCIATION	0x0b -/* these are from the Wireless USB spec */ -#define USB_DT_SECURITY			0x0c -#define USB_DT_KEY			0x0d -#define USB_DT_ENCRYPTION_TYPE		0x0e -#define USB_DT_BOS			0x0f -#define USB_DT_DEVICE_CAPABILITY	0x10 -#define USB_DT_WIRELESS_ENDPOINT_COMP	0x11 -#define USB_DT_WIRE_ADAPTER		0x21 -#define USB_DT_RPIPE			0x22 -#define USB_DT_CS_RADIO_CONTROL		0x23 -/* From the T10 UAS specification */ -#define USB_DT_PIPE_USAGE		0x24 -/* From the USB 3.0 spec */ -#define	USB_DT_SS_ENDPOINT_COMP		0x30 - -/* Conventional codes for class-specific descriptors.  The convention is - * defined in the USB "Common Class" Spec (3.11).  Individual class specs - * are authoritative for their usage, not the "common class" writeup. - */ -#define USB_DT_CS_DEVICE		(USB_TYPE_CLASS | USB_DT_DEVICE) -#define USB_DT_CS_CONFIG		(USB_TYPE_CLASS | USB_DT_CONFIG) -#define USB_DT_CS_STRING		(USB_TYPE_CLASS | USB_DT_STRING) -#define USB_DT_CS_INTERFACE		(USB_TYPE_CLASS | USB_DT_INTERFACE) -#define USB_DT_CS_ENDPOINT		(USB_TYPE_CLASS | USB_DT_ENDPOINT) - -/* All standard descriptors have these 2 fields at the beginning */ -struct usb_descriptor_header { -	__u8  bLength; -	__u8  bDescriptorType; -} __attribute__ ((packed)); - - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_DEVICE: Device descriptor */ -struct usb_device_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__le16 bcdUSB; -	__u8  bDeviceClass; -	__u8  bDeviceSubClass; -	__u8  bDeviceProtocol; -	__u8  bMaxPacketSize0; -	__le16 idVendor; -	__le16 idProduct; -	__le16 bcdDevice; -	__u8  iManufacturer; -	__u8  iProduct; -	__u8  iSerialNumber; -	__u8  bNumConfigurations; -} __attribute__ ((packed)); - -#define USB_DT_DEVICE_SIZE		18 - - -/* - * Device and/or Interface Class codes - * as found in bDeviceClass or bInterfaceClass - * and defined by www.usb.org documents - */ -#define USB_CLASS_PER_INTERFACE		0	/* for DeviceClass */ -#define USB_CLASS_AUDIO			1 -#define USB_CLASS_COMM			2 -#define USB_CLASS_HID			3 -#define USB_CLASS_PHYSICAL		5 -#define USB_CLASS_STILL_IMAGE		6 -#define USB_CLASS_PRINTER		7 -#define USB_CLASS_MASS_STORAGE		8 -#define USB_CLASS_HUB			9 -#define USB_CLASS_CDC_DATA		0x0a -#define USB_CLASS_CSCID			0x0b	/* chip+ smart card */ -#define USB_CLASS_CONTENT_SEC		0x0d	/* content security */ -#define USB_CLASS_VIDEO			0x0e -#define USB_CLASS_WIRELESS_CONTROLLER	0xe0 -#define USB_CLASS_MISC			0xef -#define USB_CLASS_APP_SPEC		0xfe -#define USB_CLASS_VENDOR_SPEC		0xff - -#define USB_SUBCLASS_VENDOR_SPEC	0xff - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_CONFIG: Configuration descriptor information. - * - * USB_DT_OTHER_SPEED_CONFIG is the same descriptor, except that the - * descriptor type is different.  Highspeed-capable devices can look - * different depending on what speed they're currently running.  Only - * devices with a USB_DT_DEVICE_QUALIFIER have any OTHER_SPEED_CONFIG - * descriptors. - */ -struct usb_config_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__le16 wTotalLength; -	__u8  bNumInterfaces; -	__u8  bConfigurationValue; -	__u8  iConfiguration; -	__u8  bmAttributes; -	__u8  bMaxPower; -} __attribute__ ((packed)); - -#define USB_DT_CONFIG_SIZE		9 - -/* from config descriptor bmAttributes */ -#define USB_CONFIG_ATT_ONE		(1 << 7)	/* must be set */ -#define USB_CONFIG_ATT_SELFPOWER	(1 << 6)	/* self powered */ -#define USB_CONFIG_ATT_WAKEUP		(1 << 5)	/* can wakeup */ -#define USB_CONFIG_ATT_BATTERY		(1 << 4)	/* battery powered */ - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_STRING: String descriptor */ -struct usb_string_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__le16 wData[1];		/* UTF-16LE encoded */ -} __attribute__ ((packed)); - -/* note that "string" zero is special, it holds language codes that - * the device supports, not Unicode characters. - */ - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_INTERFACE: Interface descriptor */ -struct usb_interface_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__u8  bInterfaceNumber; -	__u8  bAlternateSetting; -	__u8  bNumEndpoints; -	__u8  bInterfaceClass; -	__u8  bInterfaceSubClass; -	__u8  bInterfaceProtocol; -	__u8  iInterface; -} __attribute__ ((packed)); - -#define USB_DT_INTERFACE_SIZE		9 - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_ENDPOINT: Endpoint descriptor */ -struct usb_endpoint_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__u8  bEndpointAddress; -	__u8  bmAttributes; -	__le16 wMaxPacketSize; -	__u8  bInterval; - -	/* NOTE:  these two are _only_ in audio endpoints. */ -	/* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */ -	__u8  bRefresh; -	__u8  bSynchAddress; -} __attribute__ ((packed)); - -#define USB_DT_ENDPOINT_SIZE		7 -#define USB_DT_ENDPOINT_AUDIO_SIZE	9	/* Audio extension */ - - -/* - * Endpoints - */ -#define USB_ENDPOINT_NUMBER_MASK	0x0f	/* in bEndpointAddress */ -#define USB_ENDPOINT_DIR_MASK		0x80 - -#define USB_ENDPOINT_XFERTYPE_MASK	0x03	/* in bmAttributes */ -#define USB_ENDPOINT_XFER_CONTROL	0 -#define USB_ENDPOINT_XFER_ISOC		1 -#define USB_ENDPOINT_XFER_BULK		2 -#define USB_ENDPOINT_XFER_INT		3 -#define USB_ENDPOINT_MAX_ADJUSTABLE	0x80 - -/* The USB 3.0 spec redefines bits 5:4 of bmAttributes as interrupt ep type. */ -#define USB_ENDPOINT_INTRTYPE		0x30 -#define USB_ENDPOINT_INTR_PERIODIC	(0 << 4) -#define USB_ENDPOINT_INTR_NOTIFICATION	(1 << 4) - -#define USB_ENDPOINT_SYNCTYPE		0x0c -#define USB_ENDPOINT_SYNC_NONE		(0 << 2) -#define USB_ENDPOINT_SYNC_ASYNC		(1 << 2) -#define USB_ENDPOINT_SYNC_ADAPTIVE	(2 << 2) -#define USB_ENDPOINT_SYNC_SYNC		(3 << 2) - -#define USB_ENDPOINT_USAGE_MASK		0x30 -#define USB_ENDPOINT_USAGE_DATA		0x00 -#define USB_ENDPOINT_USAGE_FEEDBACK	0x10 -#define USB_ENDPOINT_USAGE_IMPLICIT_FB	0x20	/* Implicit feedback Data endpoint */ - -/*-------------------------------------------------------------------------*/ - -/** - * usb_endpoint_num - get the endpoint's number - * @epd: endpoint to be checked - * - * Returns @epd's number: 0 to 15. - */ -static inline int usb_endpoint_num(const struct usb_endpoint_descriptor *epd) -{ -	return epd->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; -} - -/** - * usb_endpoint_type - get the endpoint's transfer type - * @epd: endpoint to be checked - * - * Returns one of USB_ENDPOINT_XFER_{CONTROL, ISOC, BULK, INT} according - * to @epd's transfer type. - */ -static inline int usb_endpoint_type(const struct usb_endpoint_descriptor *epd) -{ -	return epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK; -} - -/** - * usb_endpoint_dir_in - check if the endpoint has IN direction - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type IN, otherwise it returns false. - */ -static inline int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd) -{ -	return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN); -} - -/** - * usb_endpoint_dir_out - check if the endpoint has OUT direction - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type OUT, otherwise it returns false. - */ -static inline int usb_endpoint_dir_out( -				const struct usb_endpoint_descriptor *epd) -{ -	return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT); -} - -/** - * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type bulk, otherwise it returns false. - */ -static inline int usb_endpoint_xfer_bulk( -				const struct usb_endpoint_descriptor *epd) -{ -	return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == -		USB_ENDPOINT_XFER_BULK); -} - -/** - * usb_endpoint_xfer_control - check if the endpoint has control transfer type - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type control, otherwise it returns false. - */ -static inline int usb_endpoint_xfer_control( -				const struct usb_endpoint_descriptor *epd) -{ -	return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == -		USB_ENDPOINT_XFER_CONTROL); -} - -/** - * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type interrupt, otherwise it returns - * false. - */ -static inline int usb_endpoint_xfer_int( -				const struct usb_endpoint_descriptor *epd) -{ -	return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == -		USB_ENDPOINT_XFER_INT); -} - -/** - * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type - * @epd: endpoint to be checked - * - * Returns true if the endpoint is of type isochronous, otherwise it returns - * false. - */ -static inline int usb_endpoint_xfer_isoc( -				const struct usb_endpoint_descriptor *epd) -{ -	return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == -		USB_ENDPOINT_XFER_ISOC); -} - -/** - * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN - * @epd: endpoint to be checked - * - * Returns true if the endpoint has bulk transfer type and IN direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_bulk_in( -				const struct usb_endpoint_descriptor *epd) -{ -	return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd); -} - -/** - * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT - * @epd: endpoint to be checked - * - * Returns true if the endpoint has bulk transfer type and OUT direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_bulk_out( -				const struct usb_endpoint_descriptor *epd) -{ -	return usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd); -} - -/** - * usb_endpoint_is_int_in - check if the endpoint is interrupt IN - * @epd: endpoint to be checked - * - * Returns true if the endpoint has interrupt transfer type and IN direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_int_in( -				const struct usb_endpoint_descriptor *epd) -{ -	return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd); -} - -/** - * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT - * @epd: endpoint to be checked - * - * Returns true if the endpoint has interrupt transfer type and OUT direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_int_out( -				const struct usb_endpoint_descriptor *epd) -{ -	return usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd); -} - -/** - * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN - * @epd: endpoint to be checked - * - * Returns true if the endpoint has isochronous transfer type and IN direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_isoc_in( -				const struct usb_endpoint_descriptor *epd) -{ -	return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd); -} - -/** - * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT - * @epd: endpoint to be checked - * - * Returns true if the endpoint has isochronous transfer type and OUT direction, - * otherwise it returns false. - */ -static inline int usb_endpoint_is_isoc_out( -				const struct usb_endpoint_descriptor *epd) -{ -	return usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd); -} - -/** - * usb_endpoint_maxp - get endpoint's max packet size - * @epd: endpoint to be checked - * - * Returns @epd's max packet - */ -static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd) -{ -	return __le16_to_cpu(epd->wMaxPacketSize); -} - -static inline int usb_endpoint_interrupt_type( -		const struct usb_endpoint_descriptor *epd) -{ -	return epd->bmAttributes & USB_ENDPOINT_INTRTYPE; -} - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */ -struct usb_ss_ep_comp_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__u8  bMaxBurst; -	__u8  bmAttributes; -	__le16 wBytesPerInterval; -} __attribute__ ((packed)); - -#define USB_DT_SS_EP_COMP_SIZE		6 - -/* Bits 4:0 of bmAttributes if this is a bulk endpoint */ -static inline int -usb_ss_max_streams(const struct usb_ss_ep_comp_descriptor *comp) -{ -	int		max_streams; - -	if (!comp) -		return 0; - -	max_streams = comp->bmAttributes & 0x1f; - -	if (!max_streams) -		return 0; - -	max_streams = 1 << max_streams; - -	return max_streams; -} - -/* Bits 1:0 of bmAttributes if this is an isoc endpoint */ -#define USB_SS_MULT(p)			(1 + ((p) & 0x3)) - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_DEVICE_QUALIFIER: Device Qualifier descriptor */ -struct usb_qualifier_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__le16 bcdUSB; -	__u8  bDeviceClass; -	__u8  bDeviceSubClass; -	__u8  bDeviceProtocol; -	__u8  bMaxPacketSize0; -	__u8  bNumConfigurations; -	__u8  bRESERVED; -} __attribute__ ((packed)); - - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_OTG (from OTG 1.0a supplement) */ -struct usb_otg_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__u8  bmAttributes;	/* support for HNP, SRP, etc */ -} __attribute__ ((packed)); - -/* from usb_otg_descriptor.bmAttributes */ -#define USB_OTG_SRP		(1 << 0) -#define USB_OTG_HNP		(1 << 1)	/* swap host/device roles */ - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_DEBUG:  for special highspeed devices, replacing serial console */ -struct usb_debug_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	/* bulk endpoints with 8 byte maxpacket */ -	__u8  bDebugInEndpoint; -	__u8  bDebugOutEndpoint; -} __attribute__((packed)); - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_INTERFACE_ASSOCIATION: groups interfaces */ -struct usb_interface_assoc_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__u8  bFirstInterface; -	__u8  bInterfaceCount; -	__u8  bFunctionClass; -	__u8  bFunctionSubClass; -	__u8  bFunctionProtocol; -	__u8  iFunction; -} __attribute__ ((packed)); - - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_SECURITY:  group of wireless security descriptors, including - * encryption types available for setting up a CC/association. - */ -struct usb_security_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__le16 wTotalLength; -	__u8  bNumEncryptionTypes; -} __attribute__((packed)); - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_KEY:  used with {GET,SET}_SECURITY_DATA; only public keys - * may be retrieved. - */ -struct usb_key_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__u8  tTKID[3]; -	__u8  bReserved; -	__u8  bKeyData[0]; -} __attribute__((packed)); - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_ENCRYPTION_TYPE:  bundled in DT_SECURITY groups */ -struct usb_encryption_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__u8  bEncryptionType; -#define	USB_ENC_TYPE_UNSECURE		0 -#define	USB_ENC_TYPE_WIRED		1	/* non-wireless mode */ -#define	USB_ENC_TYPE_CCM_1		2	/* aes128/cbc session */ -#define	USB_ENC_TYPE_RSA_1		3	/* rsa3072/sha1 auth */ -	__u8  bEncryptionValue;		/* use in SET_ENCRYPTION */ -	__u8  bAuthKeyIndex; -} __attribute__((packed)); - - -/*-------------------------------------------------------------------------*/ - -/* USB_DT_BOS:  group of device-level capabilities */ -struct usb_bos_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__le16 wTotalLength; -	__u8  bNumDeviceCaps; -} __attribute__((packed)); - -#define USB_DT_BOS_SIZE		5 -/*-------------------------------------------------------------------------*/ - -/* USB_DT_DEVICE_CAPABILITY:  grouped with BOS */ -struct usb_dev_cap_header { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDevCapabilityType; -} __attribute__((packed)); - -#define	USB_CAP_TYPE_WIRELESS_USB	1 - -struct usb_wireless_cap_descriptor {	/* Ultra Wide Band */ -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDevCapabilityType; - -	__u8  bmAttributes; -#define	USB_WIRELESS_P2P_DRD		(1 << 1) -#define	USB_WIRELESS_BEACON_MASK	(3 << 2) -#define	USB_WIRELESS_BEACON_SELF	(1 << 2) -#define	USB_WIRELESS_BEACON_DIRECTED	(2 << 2) -#define	USB_WIRELESS_BEACON_NONE	(3 << 2) -	__le16 wPHYRates;	/* bit rates, Mbps */ -#define	USB_WIRELESS_PHY_53		(1 << 0)	/* always set */ -#define	USB_WIRELESS_PHY_80		(1 << 1) -#define	USB_WIRELESS_PHY_107		(1 << 2)	/* always set */ -#define	USB_WIRELESS_PHY_160		(1 << 3) -#define	USB_WIRELESS_PHY_200		(1 << 4)	/* always set */ -#define	USB_WIRELESS_PHY_320		(1 << 5) -#define	USB_WIRELESS_PHY_400		(1 << 6) -#define	USB_WIRELESS_PHY_480		(1 << 7) -	__u8  bmTFITXPowerInfo;	/* TFI power levels */ -	__u8  bmFFITXPowerInfo;	/* FFI power levels */ -	__le16 bmBandGroup; -	__u8  bReserved; -} __attribute__((packed)); - -/* USB 2.0 Extension descriptor */ -#define	USB_CAP_TYPE_EXT		2 - -struct usb_ext_cap_descriptor {		/* Link Power Management */ -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDevCapabilityType; -	__le32 bmAttributes; -#define USB_LPM_SUPPORT			(1 << 1)	/* supports LPM */ -#define USB_BESL_SUPPORT		(1 << 2)	/* supports BESL */ -#define USB_BESL_BASELINE_VALID		(1 << 3)	/* Baseline BESL valid*/ -#define USB_BESL_DEEP_VALID		(1 << 4)	/* Deep BESL valid */ -#define USB_GET_BESL_BASELINE(p)	(((p) & (0xf << 8)) >> 8) -#define USB_GET_BESL_DEEP(p)		(((p) & (0xf << 12)) >> 12) -} __attribute__((packed)); - -#define USB_DT_USB_EXT_CAP_SIZE	7 - -/* - * SuperSpeed USB Capability descriptor: Defines the set of SuperSpeed USB - * specific device level capabilities - */ -#define		USB_SS_CAP_TYPE		3 -struct usb_ss_cap_descriptor {		/* Link Power Management */ -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDevCapabilityType; -	__u8  bmAttributes; -#define USB_LTM_SUPPORT			(1 << 1) /* supports LTM */ -	__le16 wSpeedSupported; -#define USB_LOW_SPEED_OPERATION		(1)	 /* Low speed operation */ -#define USB_FULL_SPEED_OPERATION	(1 << 1) /* Full speed operation */ -#define USB_HIGH_SPEED_OPERATION	(1 << 2) /* High speed operation */ -#define USB_5GBPS_OPERATION		(1 << 3) /* Operation at 5Gbps */ -	__u8  bFunctionalitySupport; -	__u8  bU1devExitLat; -	__le16 bU2DevExitLat; -} __attribute__((packed)); - -#define USB_DT_USB_SS_CAP_SIZE	10 - -/* - * Container ID Capability descriptor: Defines the instance unique ID used to - * identify the instance across all operating modes - */ -#define	CONTAINER_ID_TYPE	4 -struct usb_ss_container_id_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDevCapabilityType; -	__u8  bReserved; -	__u8  ContainerID[16]; /* 128-bit number */ -} __attribute__((packed)); - -#define USB_DT_USB_SS_CONTN_ID_SIZE	20 -/*-------------------------------------------------------------------------*/ - -/* USB_DT_WIRELESS_ENDPOINT_COMP:  companion descriptor associated with - * each endpoint descriptor for a wireless device - */ -struct usb_wireless_ep_comp_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; - -	__u8  bMaxBurst; -	__u8  bMaxSequence; -	__le16 wMaxStreamDelay; -	__le16 wOverTheAirPacketSize; -	__u8  bOverTheAirInterval; -	__u8  bmCompAttributes; -#define USB_ENDPOINT_SWITCH_MASK	0x03	/* in bmCompAttributes */ -#define USB_ENDPOINT_SWITCH_NO		0 -#define USB_ENDPOINT_SWITCH_SWITCH	1 -#define USB_ENDPOINT_SWITCH_SCALE	2 -} __attribute__((packed)); - -/*-------------------------------------------------------------------------*/ - -/* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless - * host and a device for connection set up, mutual authentication, and - * exchanging short lived session keys.  The handshake depends on a CC. - */ -struct usb_handshake { -	__u8 bMessageNumber; -	__u8 bStatus; -	__u8 tTKID[3]; -	__u8 bReserved; -	__u8 CDID[16]; -	__u8 nonce[16]; -	__u8 MIC[8]; -} __attribute__((packed)); - -/*-------------------------------------------------------------------------*/ - -/* USB_REQ_SET_CONNECTION modifies or revokes a connection context (CC). - * A CC may also be set up using non-wireless secure channels (including - * wired USB!), and some devices may support CCs with multiple hosts. - */ -struct usb_connection_context { -	__u8 CHID[16];		/* persistent host id */ -	__u8 CDID[16];		/* device id (unique w/in host context) */ -	__u8 CK[16];		/* connection key */ -} __attribute__((packed)); - -/*-------------------------------------------------------------------------*/ +#include <uapi/linux/usb/ch9.h> -/* USB 2.0 defines three speeds, here's how Linux identifies them */ - -enum usb_device_speed { -	USB_SPEED_UNKNOWN = 0,			/* enumerating */ -	USB_SPEED_LOW, USB_SPEED_FULL,		/* usb 1.1 */ -	USB_SPEED_HIGH,				/* usb 2.0 */ -	USB_SPEED_WIRELESS,			/* wireless (usb 2.5) */ -	USB_SPEED_SUPER,			/* usb 3.0 */ -}; - -#ifdef __KERNEL__  /**   * usb_speed_string() - Returns human readable-name of the speed. @@ -919,86 +43,4 @@ enum usb_device_speed {   */  extern const char *usb_speed_string(enum usb_device_speed speed); -#endif - -enum usb_device_state { -	/* NOTATTACHED isn't in the USB spec, and this state acts -	 * the same as ATTACHED ... but it's clearer this way. -	 */ -	USB_STATE_NOTATTACHED = 0, - -	/* chapter 9 and authentication (wireless) device states */ -	USB_STATE_ATTACHED, -	USB_STATE_POWERED,			/* wired */ -	USB_STATE_RECONNECTING,			/* auth */ -	USB_STATE_UNAUTHENTICATED,		/* auth */ -	USB_STATE_DEFAULT,			/* limited function */ -	USB_STATE_ADDRESS, -	USB_STATE_CONFIGURED,			/* most functions */ - -	USB_STATE_SUSPENDED - -	/* NOTE:  there are actually four different SUSPENDED -	 * states, returning to POWERED, DEFAULT, ADDRESS, or -	 * CONFIGURED respectively when SOF tokens flow again. -	 * At this level there's no difference between L1 and L2 -	 * suspend states.  (L2 being original USB 1.1 suspend.) -	 */ -}; - -enum usb3_link_state { -	USB3_LPM_U0 = 0, -	USB3_LPM_U1, -	USB3_LPM_U2, -	USB3_LPM_U3 -}; - -/* - * A U1 timeout of 0x0 means the parent hub will reject any transitions to U1. - * 0xff means the parent hub will accept transitions to U1, but will not - * initiate a transition. - * - * A U1 timeout of 0x1 to 0x7F also causes the hub to initiate a transition to - * U1 after that many microseconds.  Timeouts of 0x80 to 0xFE are reserved - * values. - * - * A U2 timeout of 0x0 means the parent hub will reject any transitions to U2. - * 0xff means the parent hub will accept transitions to U2, but will not - * initiate a transition. - * - * A U2 timeout of 0x1 to 0xFE also causes the hub to initiate a transition to - * U2 after N*256 microseconds.  Therefore a U2 timeout value of 0x1 means a U2 - * idle timer of 256 microseconds, 0x2 means 512 microseconds, 0xFE means - * 65.024ms. - */ -#define USB3_LPM_DISABLED		0x0 -#define USB3_LPM_U1_MAX_TIMEOUT		0x7F -#define USB3_LPM_U2_MAX_TIMEOUT		0xFE -#define USB3_LPM_DEVICE_INITIATED	0xFF - -struct usb_set_sel_req { -	__u8	u1_sel; -	__u8	u1_pel; -	__le16	u2_sel; -	__le16	u2_pel; -} __attribute__ ((packed)); - -/* - * The Set System Exit Latency control transfer provides one byte each for - * U1 SEL and U1 PEL, so the max exit latency is 0xFF.  U2 SEL and U2 PEL each - * are two bytes long. - */ -#define USB3_LPM_MAX_U1_SEL_PEL		0xFF -#define USB3_LPM_MAX_U2_SEL_PEL		0xFFFF - -/*-------------------------------------------------------------------------*/ - -/* - * As per USB compliance update, a device that is actively drawing - * more than 100mA from USB must report itself as bus-powered in - * the GetStatus(DEVICE) call. - * http://compliance.usb.org/index.asp?UpdateFile=Electrical&Format=Standard#34 - */ -#define USB_SELF_POWER_VBUS_MAX_DRAW		100 -  #endif /* __LINUX_USB_CH9_H */ diff --git a/include/linux/usb/functionfs.h b/include/linux/usb/functionfs.h index a843d085136..65d0a88dbc6 100644 --- a/include/linux/usb/functionfs.h +++ b/include/linux/usb/functionfs.h @@ -1,171 +1,8 @@  #ifndef __LINUX_FUNCTIONFS_H__  #define __LINUX_FUNCTIONFS_H__ 1 +#include <uapi/linux/usb/functionfs.h> -#include <linux/types.h> -#include <linux/ioctl.h> - -#include <linux/usb/ch9.h> - - -enum { -	FUNCTIONFS_DESCRIPTORS_MAGIC = 1, -	FUNCTIONFS_STRINGS_MAGIC     = 2 -}; - - -#ifndef __KERNEL__ - -/* Descriptor of an non-audio endpoint */ -struct usb_endpoint_descriptor_no_audio { -	__u8  bLength; -	__u8  bDescriptorType; - -	__u8  bEndpointAddress; -	__u8  bmAttributes; -	__le16 wMaxPacketSize; -	__u8  bInterval; -} __attribute__((packed)); - - -/* - * All numbers must be in little endian order. - */ - -struct usb_functionfs_descs_head { -	__le32 magic; -	__le32 length; -	__le32 fs_count; -	__le32 hs_count; -} __attribute__((packed)); - -/* - * Descriptors format: - * - * | off | name      | type         | description                          | - * |-----+-----------+--------------+--------------------------------------| - * |   0 | magic     | LE32         | FUNCTIONFS_{FS,HS}_DESCRIPTORS_MAGIC | - * |   4 | length    | LE32         | length of the whole data chunk       | - * |   8 | fs_count  | LE32         | number of full-speed descriptors     | - * |  12 | hs_count  | LE32         | number of high-speed descriptors     | - * |  16 | fs_descrs | Descriptor[] | list of full-speed descriptors       | - * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       | - * - * descs are just valid USB descriptors and have the following format: - * - * | off | name            | type | description              | - * |-----+-----------------+------+--------------------------| - * |   0 | bLength         | U8   | length of the descriptor | - * |   1 | bDescriptorType | U8   | descriptor type          | - * |   2 | payload         |      | descriptor's payload     | - */ - -struct usb_functionfs_strings_head { -	__le32 magic; -	__le32 length; -	__le32 str_count; -	__le32 lang_count; -} __attribute__((packed)); - -/* - * Strings format: - * - * | off | name       | type                  | description                | - * |-----+------------+-----------------------+----------------------------| - * |   0 | magic      | LE32                  | FUNCTIONFS_STRINGS_MAGIC   | - * |   4 | length     | LE32                  | length of the data chunk   | - * |   8 | str_count  | LE32                  | number of strings          | - * |  12 | lang_count | LE32                  | number of languages        | - * |  16 | stringtab  | StringTab[lang_count] | table of strings per lang  | - * - * For each language there is one stringtab entry (ie. there are lang_count - * stringtab entires).  Each StringTab has following format: - * - * | off | name    | type              | description                        | - * |-----+---------+-------------------+------------------------------------| - * |   0 | lang    | LE16              | language code                      | - * |   2 | strings | String[str_count] | array of strings in given language | - * - * For each string there is one strings entry (ie. there are str_count - * string entries).  Each String is a NUL terminated string encoded in - * UTF-8. - */ - -#endif - - -/* - * Events are delivered on the ep0 file descriptor, when the user mode driver - * reads from this file descriptor after writing the descriptors.  Don't - * stop polling this descriptor. - */ - -enum usb_functionfs_event_type { -	FUNCTIONFS_BIND, -	FUNCTIONFS_UNBIND, - -	FUNCTIONFS_ENABLE, -	FUNCTIONFS_DISABLE, - -	FUNCTIONFS_SETUP, - -	FUNCTIONFS_SUSPEND, -	FUNCTIONFS_RESUME -}; - -/* NOTE:  this structure must stay the same size and layout on - * both 32-bit and 64-bit kernels. - */ -struct usb_functionfs_event { -	union { -		/* SETUP: packet; DATA phase i/o precedes next event -		 *(setup.bmRequestType & USB_DIR_IN) flags direction */ -		struct usb_ctrlrequest	setup; -	} __attribute__((packed)) u; - -	/* enum usb_functionfs_event_type */ -	__u8				type; -	__u8				_pad[3]; -} __attribute__((packed)); - - -/* Endpoint ioctls */ -/* The same as in gadgetfs */ - -/* IN transfers may be reported to the gadget driver as complete - *	when the fifo is loaded, before the host reads the data; - * OUT transfers may be reported to the host's "client" driver as - *	complete when they're sitting in the FIFO unread. - * THIS returns how many bytes are "unclaimed" in the endpoint fifo - * (needed for precise fault handling, when the hardware allows it) - */ -#define	FUNCTIONFS_FIFO_STATUS	_IO('g', 1) - -/* discards any unclaimed data in the fifo. */ -#define	FUNCTIONFS_FIFO_FLUSH	_IO('g', 2) - -/* resets endpoint halt+toggle; used to implement set_interface. - * some hardware (like pxa2xx) can't support this. - */ -#define	FUNCTIONFS_CLEAR_HALT	_IO('g', 3) - -/* Specific for functionfs */ - -/* - * Returns reverse mapping of an interface.  Called on EP0.  If there - * is no such interface returns -EDOM.  If function is not active - * returns -ENODEV. - */ -#define	FUNCTIONFS_INTERFACE_REVMAP	_IO('g', 128) - -/* - * Returns real bEndpointAddress of an endpoint.  If function is not - * active returns -ENODEV. - */ -#define	FUNCTIONFS_ENDPOINT_REVMAP	_IO('g', 129) - - -#ifdef __KERNEL__  struct ffs_data;  struct usb_composite_dev; @@ -197,5 +34,3 @@ static void functionfs_release_dev_callback(struct ffs_data *ffs_data)  #endif - -#endif diff --git a/include/linux/usb/g_printer.h b/include/linux/usb/g_printer.h deleted file mode 100644 index 6178fde50f7..00000000000 --- a/include/linux/usb/g_printer.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * g_printer.h -- Header file for USB Printer gadget driver - * - * Copyright (C) 2007 Craig W. Nadler - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA - */ - -#ifndef __LINUX_USB_G_PRINTER_H -#define __LINUX_USB_G_PRINTER_H - -#define PRINTER_NOT_ERROR	0x08 -#define PRINTER_SELECTED	0x10 -#define PRINTER_PAPER_EMPTY	0x20 - -/* The 'g' code is also used by gadgetfs ioctl requests. - * Don't add any colliding codes to either driver, and keep - * them in unique ranges (size 0x20 for now). - */ -#define GADGET_GET_PRINTER_STATUS	_IOR('g', 0x21, unsigned char) -#define GADGET_SET_PRINTER_STATUS	_IOWR('g', 0x22, unsigned char) - -#endif /* __LINUX_USB_G_PRINTER_H */ diff --git a/include/linux/usb/gadgetfs.h b/include/linux/usb/gadgetfs.h deleted file mode 100644 index 0bb12e0d4f8..00000000000 --- a/include/linux/usb/gadgetfs.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Filesystem based user-mode API to USB Gadget controller hardware - * - * Other than ep0 operations, most things are done by read() and write() - * on endpoint files found in one directory.  They are configured by - * writing descriptors, and then may be used for normal stream style - * i/o requests.  When ep0 is configured, the device can enumerate; - * when it's closed, the device disconnects from usb.  Operations on - * ep0 require ioctl() operations. - * - * Configuration and device descriptors get written to /dev/gadget/$CHIP, - * which may then be used to read usb_gadgetfs_event structs.  The driver - * may activate endpoints as it handles SET_CONFIGURATION setup events, - * or earlier; writing endpoint descriptors to /dev/gadget/$ENDPOINT - * then performing data transfers by reading or writing. - */ - -#ifndef __LINUX_USB_GADGETFS_H -#define __LINUX_USB_GADGETFS_H - -#include <linux/types.h> -#include <linux/ioctl.h> - -#include <linux/usb/ch9.h> - -/* - * Events are delivered on the ep0 file descriptor, when the user mode driver - * reads from this file descriptor after writing the descriptors.  Don't - * stop polling this descriptor. - */ - -enum usb_gadgetfs_event_type { -	GADGETFS_NOP = 0, - -	GADGETFS_CONNECT, -	GADGETFS_DISCONNECT, -	GADGETFS_SETUP, -	GADGETFS_SUSPEND, -	/* and likely more ! */ -}; - -/* NOTE:  this structure must stay the same size and layout on - * both 32-bit and 64-bit kernels. - */ -struct usb_gadgetfs_event { -	union { -		/* NOP, DISCONNECT, SUSPEND: nothing -		 * ... some hardware can't report disconnection -		 */ - -		/* CONNECT: just the speed */ -		enum usb_device_speed	speed; - -		/* SETUP: packet; DATA phase i/o precedes next event -		 *(setup.bmRequestType & USB_DIR_IN) flags direction -		 * ... includes SET_CONFIGURATION, SET_INTERFACE -		 */ -		struct usb_ctrlrequest	setup; -	} u; -	enum usb_gadgetfs_event_type	type; -}; - - -/* The 'g' code is also used by printer gadget ioctl requests. - * Don't add any colliding codes to either driver, and keep - * them in unique ranges (size 0x20 for now). - */ - -/* endpoint ioctls */ - -/* IN transfers may be reported to the gadget driver as complete - *	when the fifo is loaded, before the host reads the data; - * OUT transfers may be reported to the host's "client" driver as - *	complete when they're sitting in the FIFO unread. - * THIS returns how many bytes are "unclaimed" in the endpoint fifo - * (needed for precise fault handling, when the hardware allows it) - */ -#define	GADGETFS_FIFO_STATUS	_IO('g', 1) - -/* discards any unclaimed data in the fifo. */ -#define	GADGETFS_FIFO_FLUSH	_IO('g', 2) - -/* resets endpoint halt+toggle; used to implement set_interface. - * some hardware (like pxa2xx) can't support this. - */ -#define	GADGETFS_CLEAR_HALT	_IO('g', 3) - -#endif /* __LINUX_USB_GADGETFS_H */ diff --git a/include/linux/usb/midi.h b/include/linux/usb/midi.h deleted file mode 100644 index c8c52e3c91d..00000000000 --- a/include/linux/usb/midi.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * <linux/usb/midi.h> -- USB MIDI definitions. - * - * Copyright (C) 2006 Thumtronics Pty Ltd. - * Developed for Thumtronics by Grey Innovation - * Ben Williamson <ben.williamson@greyinnovation.com> - * - * This software is distributed under the terms of the GNU General Public - * License ("GPL") version 2, as published by the Free Software Foundation. - * - * This file holds USB constants and structures defined - * by the USB Device Class Definition for MIDI Devices. - * Comments below reference relevant sections of that document: - * - * http://www.usb.org/developers/devclass_docs/midi10.pdf - */ - -#ifndef __LINUX_USB_MIDI_H -#define __LINUX_USB_MIDI_H - -#include <linux/types.h> - -/* A.1  MS Class-Specific Interface Descriptor Subtypes */ -#define USB_MS_HEADER		0x01 -#define USB_MS_MIDI_IN_JACK	0x02 -#define USB_MS_MIDI_OUT_JACK	0x03 -#define USB_MS_ELEMENT		0x04 - -/* A.2  MS Class-Specific Endpoint Descriptor Subtypes */ -#define USB_MS_GENERAL		0x01 - -/* A.3  MS MIDI IN and OUT Jack Types */ -#define USB_MS_EMBEDDED		0x01 -#define USB_MS_EXTERNAL		0x02 - -/* 6.1.2.1  Class-Specific MS Interface Header Descriptor */ -struct usb_ms_header_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubtype; -	__le16 bcdMSC; -	__le16 wTotalLength; -} __attribute__ ((packed)); - -#define USB_DT_MS_HEADER_SIZE	7 - -/* 6.1.2.2  MIDI IN Jack Descriptor */ -struct usb_midi_in_jack_descriptor { -	__u8  bLength; -	__u8  bDescriptorType;		/* USB_DT_CS_INTERFACE */ -	__u8  bDescriptorSubtype;	/* USB_MS_MIDI_IN_JACK */ -	__u8  bJackType;		/* USB_MS_EMBEDDED/EXTERNAL */ -	__u8  bJackID; -	__u8  iJack; -} __attribute__ ((packed)); - -#define USB_DT_MIDI_IN_SIZE	6 - -struct usb_midi_source_pin { -	__u8  baSourceID; -	__u8  baSourcePin; -} __attribute__ ((packed)); - -/* 6.1.2.3  MIDI OUT Jack Descriptor */ -struct usb_midi_out_jack_descriptor { -	__u8  bLength; -	__u8  bDescriptorType;		/* USB_DT_CS_INTERFACE */ -	__u8  bDescriptorSubtype;	/* USB_MS_MIDI_OUT_JACK */ -	__u8  bJackType;		/* USB_MS_EMBEDDED/EXTERNAL */ -	__u8  bJackID; -	__u8  bNrInputPins;		/* p */ -	struct usb_midi_source_pin pins[]; /* [p] */ -	/*__u8  iJack;  -- omitted due to variable-sized pins[] */ -} __attribute__ ((packed)); - -#define USB_DT_MIDI_OUT_SIZE(p)	(7 + 2 * (p)) - -/* As above, but more useful for defining your own descriptors: */ -#define DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(p)			\ -struct usb_midi_out_jack_descriptor_##p {			\ -	__u8  bLength;						\ -	__u8  bDescriptorType;					\ -	__u8  bDescriptorSubtype;				\ -	__u8  bJackType;					\ -	__u8  bJackID;						\ -	__u8  bNrInputPins;					\ -	struct usb_midi_source_pin pins[p];			\ -	__u8  iJack;						\ -} __attribute__ ((packed)) - -/* 6.2.2  Class-Specific MS Bulk Data Endpoint Descriptor */ -struct usb_ms_endpoint_descriptor { -	__u8  bLength;			/* 4+n */ -	__u8  bDescriptorType;		/* USB_DT_CS_ENDPOINT */ -	__u8  bDescriptorSubtype;	/* USB_MS_GENERAL */ -	__u8  bNumEmbMIDIJack;		/* n */ -	__u8  baAssocJackID[];		/* [n] */ -} __attribute__ ((packed)); - -#define USB_DT_MS_ENDPOINT_SIZE(n)	(4 + (n)) - -/* As above, but more useful for defining your own descriptors: */ -#define DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(n)			\ -struct usb_ms_endpoint_descriptor_##n {				\ -	__u8  bLength;						\ -	__u8  bDescriptorType;					\ -	__u8  bDescriptorSubtype;				\ -	__u8  bNumEmbMIDIJack;					\ -	__u8  baAssocJackID[n];					\ -} __attribute__ ((packed)) - -#endif /* __LINUX_USB_MIDI_H */ diff --git a/include/linux/usb/tmc.h b/include/linux/usb/tmc.h deleted file mode 100644 index c045ae12556..00000000000 --- a/include/linux/usb/tmc.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany - * Copyright (C) 2008 Novell, Inc. - * Copyright (C) 2008 Greg Kroah-Hartman <gregkh@suse.de> - * - * This file holds USB constants defined by the USB Device Class - * Definition for Test and Measurement devices published by the USB-IF. - * - * It also has the ioctl definitions for the usbtmc kernel driver that - * userspace needs to know about. - */ - -#ifndef __LINUX_USB_TMC_H -#define __LINUX_USB_TMC_H - -/* USB TMC status values */ -#define USBTMC_STATUS_SUCCESS				0x01 -#define USBTMC_STATUS_PENDING				0x02 -#define USBTMC_STATUS_FAILED				0x80 -#define USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS		0x81 -#define USBTMC_STATUS_SPLIT_NOT_IN_PROGRESS		0x82 -#define USBTMC_STATUS_SPLIT_IN_PROGRESS			0x83 - -/* USB TMC requests values */ -#define USBTMC_REQUEST_INITIATE_ABORT_BULK_OUT		1 -#define USBTMC_REQUEST_CHECK_ABORT_BULK_OUT_STATUS	2 -#define USBTMC_REQUEST_INITIATE_ABORT_BULK_IN		3 -#define USBTMC_REQUEST_CHECK_ABORT_BULK_IN_STATUS	4 -#define USBTMC_REQUEST_INITIATE_CLEAR			5 -#define USBTMC_REQUEST_CHECK_CLEAR_STATUS		6 -#define USBTMC_REQUEST_GET_CAPABILITIES			7 -#define USBTMC_REQUEST_INDICATOR_PULSE			64 - -/* Request values for USBTMC driver's ioctl entry point */ -#define USBTMC_IOC_NR			91 -#define USBTMC_IOCTL_INDICATOR_PULSE	_IO(USBTMC_IOC_NR, 1) -#define USBTMC_IOCTL_CLEAR		_IO(USBTMC_IOC_NR, 2) -#define USBTMC_IOCTL_ABORT_BULK_OUT	_IO(USBTMC_IOC_NR, 3) -#define USBTMC_IOCTL_ABORT_BULK_IN	_IO(USBTMC_IOC_NR, 4) -#define USBTMC_IOCTL_CLEAR_OUT_HALT	_IO(USBTMC_IOC_NR, 6) -#define USBTMC_IOCTL_CLEAR_IN_HALT	_IO(USBTMC_IOC_NR, 7) - -#endif diff --git a/include/linux/usb/video.h b/include/linux/usb/video.h deleted file mode 100644 index 3b3b95e01f7..00000000000 --- a/include/linux/usb/video.h +++ /dev/null @@ -1,568 +0,0 @@ -/* - * USB Video Class definitions. - * - * Copyright (C) 2009 Laurent Pinchart <laurent.pinchart@skynet.be> - * - * This file holds USB constants and structures defined by the USB Device - * Class Definition for Video Devices. Unless otherwise stated, comments - * below reference relevant sections of the USB Video Class 1.1 specification - * available at - * - * http://www.usb.org/developers/devclass_docs/USB_Video_Class_1_1.zip - */ - -#ifndef __LINUX_USB_VIDEO_H -#define __LINUX_USB_VIDEO_H - -#include <linux/types.h> - -/* -------------------------------------------------------------------------- - * UVC constants - */ - -/* A.2. Video Interface Subclass Codes */ -#define UVC_SC_UNDEFINED				0x00 -#define UVC_SC_VIDEOCONTROL				0x01 -#define UVC_SC_VIDEOSTREAMING				0x02 -#define UVC_SC_VIDEO_INTERFACE_COLLECTION		0x03 - -/* A.3. Video Interface Protocol Codes */ -#define UVC_PC_PROTOCOL_UNDEFINED			0x00 - -/* A.5. Video Class-Specific VC Interface Descriptor Subtypes */ -#define UVC_VC_DESCRIPTOR_UNDEFINED			0x00 -#define UVC_VC_HEADER					0x01 -#define UVC_VC_INPUT_TERMINAL				0x02 -#define UVC_VC_OUTPUT_TERMINAL				0x03 -#define UVC_VC_SELECTOR_UNIT				0x04 -#define UVC_VC_PROCESSING_UNIT				0x05 -#define UVC_VC_EXTENSION_UNIT				0x06 - -/* A.6. Video Class-Specific VS Interface Descriptor Subtypes */ -#define UVC_VS_UNDEFINED				0x00 -#define UVC_VS_INPUT_HEADER				0x01 -#define UVC_VS_OUTPUT_HEADER				0x02 -#define UVC_VS_STILL_IMAGE_FRAME			0x03 -#define UVC_VS_FORMAT_UNCOMPRESSED			0x04 -#define UVC_VS_FRAME_UNCOMPRESSED			0x05 -#define UVC_VS_FORMAT_MJPEG				0x06 -#define UVC_VS_FRAME_MJPEG				0x07 -#define UVC_VS_FORMAT_MPEG2TS				0x0a -#define UVC_VS_FORMAT_DV				0x0c -#define UVC_VS_COLORFORMAT				0x0d -#define UVC_VS_FORMAT_FRAME_BASED			0x10 -#define UVC_VS_FRAME_FRAME_BASED			0x11 -#define UVC_VS_FORMAT_STREAM_BASED			0x12 - -/* A.7. Video Class-Specific Endpoint Descriptor Subtypes */ -#define UVC_EP_UNDEFINED				0x00 -#define UVC_EP_GENERAL					0x01 -#define UVC_EP_ENDPOINT					0x02 -#define UVC_EP_INTERRUPT				0x03 - -/* A.8. Video Class-Specific Request Codes */ -#define UVC_RC_UNDEFINED				0x00 -#define UVC_SET_CUR					0x01 -#define UVC_GET_CUR					0x81 -#define UVC_GET_MIN					0x82 -#define UVC_GET_MAX					0x83 -#define UVC_GET_RES					0x84 -#define UVC_GET_LEN					0x85 -#define UVC_GET_INFO					0x86 -#define UVC_GET_DEF					0x87 - -/* A.9.1. VideoControl Interface Control Selectors */ -#define UVC_VC_CONTROL_UNDEFINED			0x00 -#define UVC_VC_VIDEO_POWER_MODE_CONTROL			0x01 -#define UVC_VC_REQUEST_ERROR_CODE_CONTROL		0x02 - -/* A.9.2. Terminal Control Selectors */ -#define UVC_TE_CONTROL_UNDEFINED			0x00 - -/* A.9.3. Selector Unit Control Selectors */ -#define UVC_SU_CONTROL_UNDEFINED			0x00 -#define UVC_SU_INPUT_SELECT_CONTROL			0x01 - -/* A.9.4. Camera Terminal Control Selectors */ -#define UVC_CT_CONTROL_UNDEFINED			0x00 -#define UVC_CT_SCANNING_MODE_CONTROL			0x01 -#define UVC_CT_AE_MODE_CONTROL				0x02 -#define UVC_CT_AE_PRIORITY_CONTROL			0x03 -#define UVC_CT_EXPOSURE_TIME_ABSOLUTE_CONTROL		0x04 -#define UVC_CT_EXPOSURE_TIME_RELATIVE_CONTROL		0x05 -#define UVC_CT_FOCUS_ABSOLUTE_CONTROL			0x06 -#define UVC_CT_FOCUS_RELATIVE_CONTROL			0x07 -#define UVC_CT_FOCUS_AUTO_CONTROL			0x08 -#define UVC_CT_IRIS_ABSOLUTE_CONTROL			0x09 -#define UVC_CT_IRIS_RELATIVE_CONTROL			0x0a -#define UVC_CT_ZOOM_ABSOLUTE_CONTROL			0x0b -#define UVC_CT_ZOOM_RELATIVE_CONTROL			0x0c -#define UVC_CT_PANTILT_ABSOLUTE_CONTROL			0x0d -#define UVC_CT_PANTILT_RELATIVE_CONTROL			0x0e -#define UVC_CT_ROLL_ABSOLUTE_CONTROL			0x0f -#define UVC_CT_ROLL_RELATIVE_CONTROL			0x10 -#define UVC_CT_PRIVACY_CONTROL				0x11 - -/* A.9.5. Processing Unit Control Selectors */ -#define UVC_PU_CONTROL_UNDEFINED			0x00 -#define UVC_PU_BACKLIGHT_COMPENSATION_CONTROL		0x01 -#define UVC_PU_BRIGHTNESS_CONTROL			0x02 -#define UVC_PU_CONTRAST_CONTROL				0x03 -#define UVC_PU_GAIN_CONTROL				0x04 -#define UVC_PU_POWER_LINE_FREQUENCY_CONTROL		0x05 -#define UVC_PU_HUE_CONTROL				0x06 -#define UVC_PU_SATURATION_CONTROL			0x07 -#define UVC_PU_SHARPNESS_CONTROL			0x08 -#define UVC_PU_GAMMA_CONTROL				0x09 -#define UVC_PU_WHITE_BALANCE_TEMPERATURE_CONTROL	0x0a -#define UVC_PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL	0x0b -#define UVC_PU_WHITE_BALANCE_COMPONENT_CONTROL		0x0c -#define UVC_PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL	0x0d -#define UVC_PU_DIGITAL_MULTIPLIER_CONTROL		0x0e -#define UVC_PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL		0x0f -#define UVC_PU_HUE_AUTO_CONTROL				0x10 -#define UVC_PU_ANALOG_VIDEO_STANDARD_CONTROL		0x11 -#define UVC_PU_ANALOG_LOCK_STATUS_CONTROL		0x12 - -/* A.9.7. VideoStreaming Interface Control Selectors */ -#define UVC_VS_CONTROL_UNDEFINED			0x00 -#define UVC_VS_PROBE_CONTROL				0x01 -#define UVC_VS_COMMIT_CONTROL				0x02 -#define UVC_VS_STILL_PROBE_CONTROL			0x03 -#define UVC_VS_STILL_COMMIT_CONTROL			0x04 -#define UVC_VS_STILL_IMAGE_TRIGGER_CONTROL		0x05 -#define UVC_VS_STREAM_ERROR_CODE_CONTROL		0x06 -#define UVC_VS_GENERATE_KEY_FRAME_CONTROL		0x07 -#define UVC_VS_UPDATE_FRAME_SEGMENT_CONTROL		0x08 -#define UVC_VS_SYNC_DELAY_CONTROL			0x09 - -/* B.1. USB Terminal Types */ -#define UVC_TT_VENDOR_SPECIFIC				0x0100 -#define UVC_TT_STREAMING				0x0101 - -/* B.2. Input Terminal Types */ -#define UVC_ITT_VENDOR_SPECIFIC				0x0200 -#define UVC_ITT_CAMERA					0x0201 -#define UVC_ITT_MEDIA_TRANSPORT_INPUT			0x0202 - -/* B.3. Output Terminal Types */ -#define UVC_OTT_VENDOR_SPECIFIC				0x0300 -#define UVC_OTT_DISPLAY					0x0301 -#define UVC_OTT_MEDIA_TRANSPORT_OUTPUT			0x0302 - -/* B.4. External Terminal Types */ -#define UVC_EXTERNAL_VENDOR_SPECIFIC			0x0400 -#define UVC_COMPOSITE_CONNECTOR				0x0401 -#define UVC_SVIDEO_CONNECTOR				0x0402 -#define UVC_COMPONENT_CONNECTOR				0x0403 - -/* 2.4.2.2. Status Packet Type */ -#define UVC_STATUS_TYPE_CONTROL				1 -#define UVC_STATUS_TYPE_STREAMING			2 - -/* 2.4.3.3. Payload Header Information */ -#define UVC_STREAM_EOH					(1 << 7) -#define UVC_STREAM_ERR					(1 << 6) -#define UVC_STREAM_STI					(1 << 5) -#define UVC_STREAM_RES					(1 << 4) -#define UVC_STREAM_SCR					(1 << 3) -#define UVC_STREAM_PTS					(1 << 2) -#define UVC_STREAM_EOF					(1 << 1) -#define UVC_STREAM_FID					(1 << 0) - -/* 4.1.2. Control Capabilities */ -#define UVC_CONTROL_CAP_GET				(1 << 0) -#define UVC_CONTROL_CAP_SET				(1 << 1) -#define UVC_CONTROL_CAP_DISABLED			(1 << 2) -#define UVC_CONTROL_CAP_AUTOUPDATE			(1 << 3) -#define UVC_CONTROL_CAP_ASYNCHRONOUS			(1 << 4) - -/* ------------------------------------------------------------------------ - * UVC structures - */ - -/* All UVC descriptors have these 3 fields at the beginning */ -struct uvc_descriptor_header { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -} __attribute__((packed)); - -/* 3.7.2. Video Control Interface Header Descriptor */ -struct uvc_header_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u16 bcdUVC; -	__u16 wTotalLength; -	__u32 dwClockFrequency; -	__u8  bInCollection; -	__u8  baInterfaceNr[]; -} __attribute__((__packed__)); - -#define UVC_DT_HEADER_SIZE(n)				(12+(n)) - -#define UVC_HEADER_DESCRIPTOR(n) \ -	uvc_header_descriptor_##n - -#define DECLARE_UVC_HEADER_DESCRIPTOR(n)		\ -struct UVC_HEADER_DESCRIPTOR(n) {			\ -	__u8  bLength;					\ -	__u8  bDescriptorType;				\ -	__u8  bDescriptorSubType;			\ -	__u16 bcdUVC;					\ -	__u16 wTotalLength;				\ -	__u32 dwClockFrequency;				\ -	__u8  bInCollection;				\ -	__u8  baInterfaceNr[n];				\ -} __attribute__ ((packed)) - -/* 3.7.2.1. Input Terminal Descriptor */ -struct uvc_input_terminal_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bTerminalID; -	__u16 wTerminalType; -	__u8  bAssocTerminal; -	__u8  iTerminal; -} __attribute__((__packed__)); - -#define UVC_DT_INPUT_TERMINAL_SIZE			8 - -/* 3.7.2.2. Output Terminal Descriptor */ -struct uvc_output_terminal_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bTerminalID; -	__u16 wTerminalType; -	__u8  bAssocTerminal; -	__u8  bSourceID; -	__u8  iTerminal; -} __attribute__((__packed__)); - -#define UVC_DT_OUTPUT_TERMINAL_SIZE			9 - -/* 3.7.2.3. Camera Terminal Descriptor */ -struct uvc_camera_terminal_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bTerminalID; -	__u16 wTerminalType; -	__u8  bAssocTerminal; -	__u8  iTerminal; -	__u16 wObjectiveFocalLengthMin; -	__u16 wObjectiveFocalLengthMax; -	__u16 wOcularFocalLength; -	__u8  bControlSize; -	__u8  bmControls[3]; -} __attribute__((__packed__)); - -#define UVC_DT_CAMERA_TERMINAL_SIZE(n)			(15+(n)) - -/* 3.7.2.4. Selector Unit Descriptor */ -struct uvc_selector_unit_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bUnitID; -	__u8  bNrInPins; -	__u8  baSourceID[0]; -	__u8  iSelector; -} __attribute__((__packed__)); - -#define UVC_DT_SELECTOR_UNIT_SIZE(n)			(6+(n)) - -#define UVC_SELECTOR_UNIT_DESCRIPTOR(n)	\ -	uvc_selector_unit_descriptor_##n - -#define DECLARE_UVC_SELECTOR_UNIT_DESCRIPTOR(n)	\ -struct UVC_SELECTOR_UNIT_DESCRIPTOR(n) {		\ -	__u8  bLength;					\ -	__u8  bDescriptorType;				\ -	__u8  bDescriptorSubType;			\ -	__u8  bUnitID;					\ -	__u8  bNrInPins;				\ -	__u8  baSourceID[n];				\ -	__u8  iSelector;				\ -} __attribute__ ((packed)) - -/* 3.7.2.5. Processing Unit Descriptor */ -struct uvc_processing_unit_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bUnitID; -	__u8  bSourceID; -	__u16 wMaxMultiplier; -	__u8  bControlSize; -	__u8  bmControls[2]; -	__u8  iProcessing; -} __attribute__((__packed__)); - -#define UVC_DT_PROCESSING_UNIT_SIZE(n)			(9+(n)) - -/* 3.7.2.6. Extension Unit Descriptor */ -struct uvc_extension_unit_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bUnitID; -	__u8  guidExtensionCode[16]; -	__u8  bNumControls; -	__u8  bNrInPins; -	__u8  baSourceID[0]; -	__u8  bControlSize; -	__u8  bmControls[0]; -	__u8  iExtension; -} __attribute__((__packed__)); - -#define UVC_DT_EXTENSION_UNIT_SIZE(p, n)		(24+(p)+(n)) - -#define UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) \ -	uvc_extension_unit_descriptor_##p_##n - -#define DECLARE_UVC_EXTENSION_UNIT_DESCRIPTOR(p, n)	\ -struct UVC_EXTENSION_UNIT_DESCRIPTOR(p, n) {		\ -	__u8  bLength;					\ -	__u8  bDescriptorType;				\ -	__u8  bDescriptorSubType;			\ -	__u8  bUnitID;					\ -	__u8  guidExtensionCode[16];			\ -	__u8  bNumControls;				\ -	__u8  bNrInPins;				\ -	__u8  baSourceID[p];				\ -	__u8  bControlSize;				\ -	__u8  bmControls[n];				\ -	__u8  iExtension;				\ -} __attribute__ ((packed)) - -/* 3.8.2.2. Video Control Interrupt Endpoint Descriptor */ -struct uvc_control_endpoint_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u16 wMaxTransferSize; -} __attribute__((__packed__)); - -#define UVC_DT_CONTROL_ENDPOINT_SIZE			5 - -/* 3.9.2.1. Input Header Descriptor */ -struct uvc_input_header_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bNumFormats; -	__u16 wTotalLength; -	__u8  bEndpointAddress; -	__u8  bmInfo; -	__u8  bTerminalLink; -	__u8  bStillCaptureMethod; -	__u8  bTriggerSupport; -	__u8  bTriggerUsage; -	__u8  bControlSize; -	__u8  bmaControls[]; -} __attribute__((__packed__)); - -#define UVC_DT_INPUT_HEADER_SIZE(n, p)			(13+(n*p)) - -#define UVC_INPUT_HEADER_DESCRIPTOR(n, p) \ -	uvc_input_header_descriptor_##n_##p - -#define DECLARE_UVC_INPUT_HEADER_DESCRIPTOR(n, p)	\ -struct UVC_INPUT_HEADER_DESCRIPTOR(n, p) {		\ -	__u8  bLength;					\ -	__u8  bDescriptorType;				\ -	__u8  bDescriptorSubType;			\ -	__u8  bNumFormats;				\ -	__u16 wTotalLength;				\ -	__u8  bEndpointAddress;				\ -	__u8  bmInfo;					\ -	__u8  bTerminalLink;				\ -	__u8  bStillCaptureMethod;			\ -	__u8  bTriggerSupport;				\ -	__u8  bTriggerUsage;				\ -	__u8  bControlSize;				\ -	__u8  bmaControls[p][n];			\ -} __attribute__ ((packed)) - -/* 3.9.2.2. Output Header Descriptor */ -struct uvc_output_header_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bNumFormats; -	__u16 wTotalLength; -	__u8  bEndpointAddress; -	__u8  bTerminalLink; -	__u8  bControlSize; -	__u8  bmaControls[]; -} __attribute__((__packed__)); - -#define UVC_DT_OUTPUT_HEADER_SIZE(n, p)			(9+(n*p)) - -#define UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) \ -	uvc_output_header_descriptor_##n_##p - -#define DECLARE_UVC_OUTPUT_HEADER_DESCRIPTOR(n, p)	\ -struct UVC_OUTPUT_HEADER_DESCRIPTOR(n, p) {		\ -	__u8  bLength;					\ -	__u8  bDescriptorType;				\ -	__u8  bDescriptorSubType;			\ -	__u8  bNumFormats;				\ -	__u16 wTotalLength;				\ -	__u8  bEndpointAddress;				\ -	__u8  bTerminalLink;				\ -	__u8  bControlSize;				\ -	__u8  bmaControls[p][n];			\ -} __attribute__ ((packed)) - -/* 3.9.2.6. Color matching descriptor */ -struct uvc_color_matching_descriptor { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bColorPrimaries; -	__u8  bTransferCharacteristics; -	__u8  bMatrixCoefficients; -} __attribute__((__packed__)); - -#define UVC_DT_COLOR_MATCHING_SIZE			6 - -/* 4.3.1.1. Video Probe and Commit Controls */ -struct uvc_streaming_control { -	__u16 bmHint; -	__u8  bFormatIndex; -	__u8  bFrameIndex; -	__u32 dwFrameInterval; -	__u16 wKeyFrameRate; -	__u16 wPFrameRate; -	__u16 wCompQuality; -	__u16 wCompWindowSize; -	__u16 wDelay; -	__u32 dwMaxVideoFrameSize; -	__u32 dwMaxPayloadTransferSize; -	__u32 dwClockFrequency; -	__u8  bmFramingInfo; -	__u8  bPreferedVersion; -	__u8  bMinVersion; -	__u8  bMaxVersion; -} __attribute__((__packed__)); - -/* Uncompressed Payload - 3.1.1. Uncompressed Video Format Descriptor */ -struct uvc_format_uncompressed { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bFormatIndex; -	__u8  bNumFrameDescriptors; -	__u8  guidFormat[16]; -	__u8  bBitsPerPixel; -	__u8  bDefaultFrameIndex; -	__u8  bAspectRatioX; -	__u8  bAspectRatioY; -	__u8  bmInterfaceFlags; -	__u8  bCopyProtect; -} __attribute__((__packed__)); - -#define UVC_DT_FORMAT_UNCOMPRESSED_SIZE			27 - -/* Uncompressed Payload - 3.1.2. Uncompressed Video Frame Descriptor */ -struct uvc_frame_uncompressed { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bFrameIndex; -	__u8  bmCapabilities; -	__u16 wWidth; -	__u16 wHeight; -	__u32 dwMinBitRate; -	__u32 dwMaxBitRate; -	__u32 dwMaxVideoFrameBufferSize; -	__u32 dwDefaultFrameInterval; -	__u8  bFrameIntervalType; -	__u32 dwFrameInterval[]; -} __attribute__((__packed__)); - -#define UVC_DT_FRAME_UNCOMPRESSED_SIZE(n)		(26+4*(n)) - -#define UVC_FRAME_UNCOMPRESSED(n) \ -	uvc_frame_uncompressed_##n - -#define DECLARE_UVC_FRAME_UNCOMPRESSED(n)		\ -struct UVC_FRAME_UNCOMPRESSED(n) {			\ -	__u8  bLength;					\ -	__u8  bDescriptorType;				\ -	__u8  bDescriptorSubType;			\ -	__u8  bFrameIndex;				\ -	__u8  bmCapabilities;				\ -	__u16 wWidth;					\ -	__u16 wHeight;					\ -	__u32 dwMinBitRate;				\ -	__u32 dwMaxBitRate;				\ -	__u32 dwMaxVideoFrameBufferSize;		\ -	__u32 dwDefaultFrameInterval;			\ -	__u8  bFrameIntervalType;			\ -	__u32 dwFrameInterval[n];			\ -} __attribute__ ((packed)) - -/* MJPEG Payload - 3.1.1. MJPEG Video Format Descriptor */ -struct uvc_format_mjpeg { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bFormatIndex; -	__u8  bNumFrameDescriptors; -	__u8  bmFlags; -	__u8  bDefaultFrameIndex; -	__u8  bAspectRatioX; -	__u8  bAspectRatioY; -	__u8  bmInterfaceFlags; -	__u8  bCopyProtect; -} __attribute__((__packed__)); - -#define UVC_DT_FORMAT_MJPEG_SIZE			11 - -/* MJPEG Payload - 3.1.2. MJPEG Video Frame Descriptor */ -struct uvc_frame_mjpeg { -	__u8  bLength; -	__u8  bDescriptorType; -	__u8  bDescriptorSubType; -	__u8  bFrameIndex; -	__u8  bmCapabilities; -	__u16 wWidth; -	__u16 wHeight; -	__u32 dwMinBitRate; -	__u32 dwMaxBitRate; -	__u32 dwMaxVideoFrameBufferSize; -	__u32 dwDefaultFrameInterval; -	__u8  bFrameIntervalType; -	__u32 dwFrameInterval[]; -} __attribute__((__packed__)); - -#define UVC_DT_FRAME_MJPEG_SIZE(n)			(26+4*(n)) - -#define UVC_FRAME_MJPEG(n) \ -	uvc_frame_mjpeg_##n - -#define DECLARE_UVC_FRAME_MJPEG(n)			\ -struct UVC_FRAME_MJPEG(n) {				\ -	__u8  bLength;					\ -	__u8  bDescriptorType;				\ -	__u8  bDescriptorSubType;			\ -	__u8  bFrameIndex;				\ -	__u8  bmCapabilities;				\ -	__u16 wWidth;					\ -	__u16 wHeight;					\ -	__u32 dwMinBitRate;				\ -	__u32 dwMaxBitRate;				\ -	__u32 dwMaxVideoFrameBufferSize;		\ -	__u32 dwDefaultFrameInterval;			\ -	__u8  bFrameIntervalType;			\ -	__u32 dwFrameInterval[n];			\ -} __attribute__ ((packed)) - -#endif /* __LINUX_USB_VIDEO_H */ -  |