diff options
Diffstat (limited to 'include/uapi/linux/usb/functionfs.h')
| -rw-r--r-- | include/uapi/linux/usb/functionfs.h | 82 | 
1 files changed, 80 insertions, 2 deletions
diff --git a/include/uapi/linux/usb/functionfs.h b/include/uapi/linux/usb/functionfs.h index 24b68c59dcf8..0154b2859fd7 100644 --- a/include/uapi/linux/usb/functionfs.h +++ b/include/uapi/linux/usb/functionfs.h @@ -18,10 +18,9 @@ enum functionfs_flags {  	FUNCTIONFS_HAS_FS_DESC = 1,  	FUNCTIONFS_HAS_HS_DESC = 2,  	FUNCTIONFS_HAS_SS_DESC = 4, +	FUNCTIONFS_HAS_MS_OS_DESC = 8,  }; -#ifndef __KERNEL__ -  /* Descriptor of an non-audio endpoint */  struct usb_endpoint_descriptor_no_audio {  	__u8  bLength; @@ -41,6 +40,37 @@ struct usb_functionfs_descs_head {  	__le32 hs_count;  } __attribute__((packed, deprecated)); +/* MS OS Descriptor header */ +struct usb_os_desc_header { +	__u8	interface; +	__le32	dwLength; +	__le16	bcdVersion; +	__le16	wIndex; +	union { +		struct { +			__u8	bCount; +			__u8	Reserved; +		}; +		__le16	wCount; +	}; +} __attribute__((packed)); + +struct usb_ext_compat_desc { +	__u8	bFirstInterfaceNumber; +	__u8	Reserved1; +	__u8	CompatibleID[8]; +	__u8	SubCompatibleID[8]; +	__u8	Reserved2[6]; +}; + +struct usb_ext_prop_desc { +	__le32	dwSize; +	__le32	dwPropertyDataType; +	__le16	wPropertyNameLength; +} __attribute__((packed)); + +#ifndef __KERNEL__ +  /*   * Descriptors format:   * @@ -52,9 +82,11 @@ struct usb_functionfs_descs_head {   * |     | fs_count  | LE32         | number of full-speed descriptors     |   * |     | hs_count  | LE32         | number of high-speed descriptors     |   * |     | ss_count  | LE32         | number of super-speed descriptors    | + * |     | os_count  | LE32         | number of MS OS descriptors          |   * |     | fs_descrs | Descriptor[] | list of full-speed descriptors       |   * |     | hs_descrs | Descriptor[] | list of high-speed descriptors       |   * |     | ss_descrs | Descriptor[] | list of super-speed descriptors      | + * |     | os_descrs | OSDesc[]     | list of MS OS descriptors            |   *   * Depending on which flags are set, various fields may be missing in the   * structure.  Any flags that are not recognised cause the whole block to be @@ -81,6 +113,52 @@ struct usb_functionfs_descs_head {   * |   0 | bLength         | U8   | length of the descriptor |   * |   1 | bDescriptorType | U8   | descriptor type          |   * |   2 | payload         |      | descriptor's payload     | + * + * OSDesc[] is an array of valid MS OS Feature Descriptors which have one of + * the following formats: + * + * | off | name            | type | description              | + * |-----+-----------------+------+--------------------------| + * |   0 | inteface        | U8   | related interface number | + * |   1 | dwLength        | U32  | length of the descriptor | + * |   5 | bcdVersion      | U16  | currently supported: 1   | + * |   7 | wIndex          | U16  | currently supported: 4   | + * |   9 | bCount          | U8   | number of ext. compat.   | + * |  10 | Reserved        | U8   | 0                        | + * |  11 | ExtCompat[]     |      | list of ext. compat. d.  | + * + * | off | name            | type | description              | + * |-----+-----------------+------+--------------------------| + * |   0 | inteface        | U8   | related interface number | + * |   1 | dwLength        | U32  | length of the descriptor | + * |   5 | bcdVersion      | U16  | currently supported: 1   | + * |   7 | wIndex          | U16  | currently supported: 5   | + * |   9 | wCount          | U16  | number of ext. compat.   | + * |  11 | ExtProp[]       |      | list of ext. prop. d.    | + * + * ExtCompat[] is an array of valid Extended Compatiblity descriptors + * which have the following format: + * + * | off | name                  | type | description                         | + * |-----+-----------------------+------+-------------------------------------| + * |   0 | bFirstInterfaceNumber | U8   | index of the interface or of the 1st| + * |     |                       |      | interface in an IAD group           | + * |   1 | Reserved              | U8   | 0                                   | + * |   2 | CompatibleID          | U8[8]| compatible ID string                | + * |  10 | SubCompatibleID       | U8[8]| subcompatible ID string             | + * |  18 | Reserved              | U8[6]| 0                                   | + * + * ExtProp[] is an array of valid Extended Properties descriptors + * which have the following format: + * + * | off | name                  | type | description                         | + * |-----+-----------------------+------+-------------------------------------| + * |   0 | dwSize                | U32  | length of the descriptor            | + * |   4 | dwPropertyDataType    | U32  | 1..7                                | + * |   8 | wPropertyNameLength   | U16  | bPropertyName length (NL)           | + * |  10 | bPropertyName         |U8[NL]| name of this property               | + * |10+NL| dwPropertyDataLength  | U32  | bPropertyData length (DL)           | + * |14+NL| bProperty             |U8[DL]| payload of this property            |   */  struct usb_functionfs_strings_head {  |